新做的板子,am3359+ar8031,
AR8031的硬件配置为 (参见datasheet-14)
RXD0 外部上拉
RXD1 外部下拉
LED_ACT 外部上拉
RX_DV 外部下拉
RXD2 外部下拉
RX_CLK 外部下拉
RXD3 外部下拉
LED_LINK1000 外部上拉
因此。ID=3`b101(0x5) MODE=0000(1000BASE-T,RGMII)
(tiam335xevm默认ID=3`B000. MODE=0000)
修改ti-am335x uboot里面的文件evm.c(u-boot-2011.09-psp04.06.00.03)
static struct cpsw_slave_data cpsw_slaves[] = {
{
.slave_reg_ofs = 0x208,
.sliver_reg_ofs = 0xd80,
.phy_id = 0,
},
{
.slave_reg_ofs = 0x308,
.sliver_reg_ofs = 0xdc0,
.phy_id = 1,
},
};
static struct cpsw_platform_data cpsw_data = {
.mdio_base = AM335X_CPSW_MDIO_BASE,
.cpsw_base = AM335X_CPSW_BASE,
.mdio_div = 0xff,
.channels = 8,
.cpdma_reg_ofs = 0x800,
.slaves = 2,
.slave_data = cpsw_slaves,
.ale_reg_ofs = 0xd00,
.ale_entries = 1024,
.host_port_reg_ofs = 0x108,
.hw_stats_reg_ofs = 0x900,
.mac_control = (1 << 5) /* MIIEN */,
.control = cpsw_control,
.phy_init = evm_phy_init,
.gigabit_en = 1,
.host_port_num = 0,
.version = CPSW_CTRL_VERSION_2,
};
修改 .phy_id = /*0*/5, .slaves = /*2*/1,启动自己做的板子后,物理连接正常,但是ping不同,
报错miiphy read id fail,暂没有头绪,各位大牛,能给点意见么,谢谢
Jian Zhou:
可以在\drivers\net\phy\phy.c中的get_phy_device()函数中加一些打印信息跟踪下。
另外MDIO_DATA信号线有做上拉吗?
jie wang4:
回复 Jian Zhou:
根据你的意见,仔细检查了一下电路图和电路板,我所做的所有调整如下:
硬件部分
1. 去掉AR8031的RSTn上的R97,物理连接成功。2. 焊接R105 R106,使得P1_LED_ACT和P1_LED_LINK1000外部上拉。3. 其他电路按照原理图上焊接。4. MDIO有上拉。5. 目前此图上的RGMII1_RD0 上拉,RGMII1_RD1 下拉,P1_LED_ACT上拉,ID号为101,即为56. RGMII接口,与官网的am335x_evm_15x15接法一样。7. 自己的板子有2路网口,目前在uboot阶段只调试1路
软件部分:修改cpsw_slave_data psw_slaves[]数组的 .phy_id =5 修改cpsw_platform_data cpsw_data的 .slaves= 1,(只检查一路网口的配置)
其他暂未处理,打印信息待调试后再给出
,顺便附带我的硬件原理图,谢谢帮助,盼复。
jie wang4:
回复 jie wang4:
在\drivers\net\phy\phy.c中的get_phy_device() 添加打印信息没有输出消息,查了下,am335x的网络驱动用的是cpsw.c 而没有用phy.c,在miiphy id read fail的情况下,能在uboot下打印出mdio的寄存器信息么?
另外,pinmux,GMII_SEL(0xA),PHY_ID(0X5)都已修改好了,uboot还是miiphy id read fail。
jie wang4:
回复 jie wang4:
miiphy read id fail 的问题已经解决,不过uboot下还是ping不通
报错如下:
link up on port 0, speed 1000, full duplexUsing cpsw deviceping failed; host 192.168.135.190 is not alive
物理连接ok自协商也成功了,ping不通,我打印了mdio的部分寄存器,看起来也没有问题,链路都是正常的,现在不好查问题呀。
Steven Liu1:
回复 jie wang4:
看你前面的porting过程,pinmux,gmii_sel,phy_id都设了,一般来说driver部分的改动都在这里了,再就是查硬件电路。
然后提醒你一种情况,这个ping不通,别是主机端的防火墙给block掉的结果。建议用我们的EVM板ping主机试一下排查这种可能性。
jie wang4:
回复 Steven Liu1:
我本来调试的时候就关了防火墙的,我试了一下,uboot下evm板可以ping得通,但是我的板子ping不通。
调试打印的mdio寄存器显示,当主机位千兆模式时,读的mdio寄存器为0x3800,表示本地和远端的网络收发器都是ok的,当主机设置为百兆模式时,这个寄存器为0x0,表示本地和远端的网络收发器都是not ok的,但此模式下物理连接也正常,协商也成功,同样ping不通。
ARM的mac地址设置为任意的和通过mdio获取cpu寄存器的方式都调试过,以上错误时一样的。
现在百思不得七解了。请问,还有其他地方我没有注意到么?谢谢
Steven Liu1:
回复 jie wang4:
这种情况,我觉得,可以尝试在uboot中通过md命令打印出CPSW_STATUS寄存器组中的一些信息,里面应该有收发包个数的记录,看看发包数和成功数是一样的吗?坏包数多少?同时也可以差收包的相关信息,看看问题是收发都存在,还是能收不能发。
Jian Zhou:
回复 Steven Liu1:
在软件debug的同时,建议检查下硬件。因为PHY的型号和demo板上是一致的,而且软件上pinmux和PHY ID都配置对了,那么实际上软件上出问题的可能性比较小了。
硬件上要排查下看看是否电容电阻的值是否正确,有没有出现虚焊
jie wang4:
回复 Jian Zhou:
我仔细检查了电路,看了pcb,我网络这一块的电阻电容电感都看过,没有错焊虚焊的问题,现在调试软件的时候发现有一个异常返回,在驱动cpsw.c中的函数 cpdma_process() 里,程序在以下返回了:
if(status & CPDMA_DESC_OWER) { return -EBUSY}
另外,我用示波器看过RGMII接口,发现接口上面的RX有数据,TX无数据。
看了下社区论坛里有2 3个人也是这样的问题,也没有说出个所以然出来
Steven Liu1:
回复 jie wang4:
请问您是用几块板子做的测试?
我之前遇到过一个case,比较类似,是TX有数据,RX无数据,当时客户也是调了很久,我去查配置也没查出有错误的地方,最后想排除单板可能存在的焊接问题,换了一个硬件板再进行测试,结果,换了一块软件什么都没动,好了……