TI中文支持网
TI专业的中文技术问题搜集分享网站

am3352 RGMII接口问题

hi,大神们

我现在自己的板子使用的AM3352,两个端口都使用的RGMII接口模式,现在两个端口表现一样的情况,ping数据包不通,测试发现TXD没数据,RXD和RXCLK,txclk都有数据,这个是什么原因啊,忘解答啊,谢谢啦!

leo chen:

把问题描述的更加清楚一点呗

1、比如你用的什么操作系统

2、比如你做了哪些修改

等等

Gary Wu:

同时请说明用的PHY型号?

yu yue:

回复 Gary Wu:

hi,Gary Wu

     我这使用的PHY型号为RTL8211E. 我的应用中是想把2个端口都使用为RGMII模式,分别连接一个PHY。在u-BOOT环境下调试

PHY的硬件地址设置为:1和4;

修改的内容有:

mux.c中的配置如下:

static struct module_pin_mux rgmii1_pin_mux[] = { {OFFSET(mii1_txen), MODE(2)},   /* RGMII1_TCTL */ {OFFSET(mii1_rxdv), MODE(2) | RXACTIVE}, /* RGMII1_RCTL */ {OFFSET(mii1_txd3), MODE(2)},   /* RGMII1_TD3 */ {OFFSET(mii1_txd2), MODE(2)},   /* RGMII1_TD2 */ {OFFSET(mii1_txd1), MODE(2)},   /* RGMII1_TD1 */ {OFFSET(mii1_txd0), MODE(2)},   /* RGMII1_TD0 */ {OFFSET(mii1_txclk), MODE(2)},   /* RGMII1_TCLK */ {OFFSET(mii1_rxclk), MODE(2) | RXACTIVE}, /* RGMII1_RCLK */ {OFFSET(mii1_rxd3), MODE(2) | RXACTIVE}, /* RGMII1_RD3 */ {OFFSET(mii1_rxd2), MODE(2) | RXACTIVE}, /* RGMII1_RD2 */ {OFFSET(mii1_rxd1), MODE(2) | RXACTIVE}, /* RGMII1_RD1 */ {OFFSET(mii1_rxd0), MODE(2) | RXACTIVE}, /* RGMII1_RD0 */ {OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN},/* MDIO_DATA */ {OFFSET(mdio_clk), MODE(0) | PULLUP_EN}, /* MDIO_CLK */ {-1},};

static struct module_pin_mux rgmii2_pin_mux[] = { {OFFSET(gpmc_a0), MODE(2)},   /* RGMII2_TCTL */ {OFFSET(gpmc_a1), MODE(2) | RXACTIVE},  /* RGMII2_RCTL */ {OFFSET(gpmc_a2), MODE(2)},   /* RGMII2_TD3 */ {OFFSET(gpmc_a3), MODE(2)},   /* RGMII2_TD2 */ {OFFSET(gpmc_a4), MODE(2)},   /* RGMII2_TD1 */ {OFFSET(gpmc_a5), MODE(2)},   /* RGMII2_TD0 */ {OFFSET(gpmc_a6), MODE(2)},   /* RGMII2_TCLK */ {OFFSET(gpmc_a7), MODE(2) | RXACTIVE},  /* RGMII2_RCLK */ {OFFSET(gpmc_a8), MODE(2) | RXACTIVE},  /* RGMII2_RD3 */ {OFFSET(gpmc_a9), MODE(2) | RXACTIVE},  /* RGMII2_RD2 */ {OFFSET(gpmc_a10), MODE(2) | RXACTIVE},  /* RGMII2_RD1 */ {OFFSET(gpmc_a11), MODE(2) | RXACTIVE},  /* RGMII2_RD0 */ {OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN}, /* MDIO_DATA */ {OFFSET(mdio_clk), MODE(0) | PULLUP_EN}, /* MDIO_CLK */ {-1},};

board.c

更改PHY 地址:

static struct cpsw_slave_data cpsw_slaves[] = { {  .slave_reg_ofs = 0x208,  .sliver_reg_ofs = 0xd80,  .phy_id  = 1, }, {  .slave_reg_ofs = 0x308,  .sliver_reg_ofs = 0xdc0,  .phy_id  = 4,

 },};

设置gmii_sel:0x3A 

writel(RGMII_MODE_ENABLE, &cdev->miisel);  cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if =    PHY_INTERFACE_MODE_RGMII;

am335x_evm.h 中

#define CONFIG_PHY_REALTEK   增加定义

在net/phy.realtek

中更改ID 为:0x1cc915 PHY的ID

主要是做了这些修改,前期调试发现TX_CLK只有输出10Mhz,后面更改core_pll_config(OPP_100)能够正常出25Mhz;{初始化的时候为core_pll_config(OPP_50);}

现在ping包的时候:

U-Boot# setenv ipaddr 192.168.100.5U-Boot# ping 192.168.100.20link up on port 0, speed 1000, full duplexUsing cpsw deviceping failed; host 192.168.100.20 is not alive

用示波器测试,TXD上面什么信号都没有,但RXD上数据正常

 

各位大神,请帮忙指导啊,小弟以前没搞过驱动,现在都是在瞎弄啊,没头绪了,你们有没好的指导手册如果更改PHY这块啊,感觉TI 的这个CPU 怎么还有个CPSW,这个需要配置么?

坐等到天明,3Q

 

yu yue:

回复 leo chen:

hi,leo chen

   我用的linux 现在的版本是官网下载的6.0版本,具体改动如下面描述:TI 的EEPROM 搞死人啊,刚开始都起不来,费了好大劲让伟大的FAE帮忙弄好了,现在是驱动问题了。

 真心说一句,TI的软件移植性真差,官网上面各个版本的变化真是大啊,对我们这些不熟悉底层的小白,真是难搞啊。

yu yue:

回复 Gary Wu:

hi ,gary wu

  我现在的情况是有TX,RX都有时钟输出,但是ping包不通啊。

 

就是我PC协商多少M速率的时候,PHY的CLK能够改变,但是CPU输出始终是25Mhz,这个是什么情况,是驱动没配置对吗?

Jian Zhou:

回复 yu yue:

这个PHY我有在SDK06的U-boot下面调通过,主要就是把PHY_ID和Pinux改了就可以了,如果收发都有clock,那么可能需要你检查下硬件。

yu yue:

回复 Jian Zhou:

hi,jian zhou

       我在boot下ping命令的时候还是不通,但是我在boot下可以通过tftp传输kernel等文件,并且当我tftp 0x82000000 uImage 的时候就能够在PC的CMD端ping到单板了,好奇怪。

    我加载了kernel后就能够在文件系统下正常的ping数据啦。好奇怪的现象啊,求大神解答!

Jian Zhou:

回复 yu yue:

是不是你的PHY的协商过程比较慢啊

Xuejian Fu:

回复 Jian Zhou:

你好jian zhou,我用的3352的cpu,跟交换芯片marvell 88e6097通信,cpu那一侧时钟不对,怎么修改,在内核下调试的,模式是rgmii,交换芯片那一侧的rclk时钟正确是125M,希望能尽快得到您的回复,期待!

Xuejian Fu:

回复 Xuejian Fu:

jian zhou 你倒是回话啊。。。。。。。急死了

赞(0)
未经允许不得转载:TI中文支持网 » am3352 RGMII接口问题
分享到: 更多 (0)