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 你倒是回话啊。。。。。。。急死了