使用AM335X,通过MII外接Marvell的swtich芯片,uboot中调试单网口,
问题1:使用mdio读PHY的寄存器
mdio r 1.1
Reading from bus cpsw
PHY at address 0:
1.1 – 0x201
读到的值不对,而且每次读到的值都不一样
问题2:使用mii info 打印PHY信息
mii info
PHY 0x00: OUI = 0x100010, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x01: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x02: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x03: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x04: OUI = 0x3000, Model = 0x0C, Rev = 0x00, 10baseT, HDX
PHY 0x05: OUI = 0x3000, Model = 0x0C, Rev = 0x00, 10baseT, HDX
PHY 0x06: OUI = 0x3000, Model = 0x0C, Rev = 0x00, 10baseT, HDX
PHY 0x07: OUI = 0x302030, Model = 0x08, Rev = 0x00, 10baseT, HDX
PHY 0x10: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x11: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x12: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x13: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x14: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x15: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x16: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x17: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x18: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x19: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x1A: OUI = 0x27C002, Model = 0x19, Rev = 0x02, 10baseT, HDX
PHY 0x1B: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
打出一堆,switch芯片有8个PHY,只用了6个,而且每个PHY的信息每次都在变化
第一次调试网络,论坛有没有大神分析下是什么原因,顺便指导一下,小弟不胜感谢
Jian Zhou:
首先,Marvell这个芯片,MDIO读取它内部的PHY,PHY ID是怎么确定的。
hongbin li1:
回复 Jian Zhou:
Marvell 的device addr是由GMII/MII 接口的ADDR[4:0]来配置的,我们硬件配置是device addr =0,在cpsw slaver结构体中PHY_ID =0,不知道cpsw接交换芯片跟普通的PHY有什么区别
hongbin li1:
回复 hongbin li1:
在uboot代码中,对MDIO进行初始化
__raw_writel(div | CONTROL_ENABLE | (1 << 18) , &mdio_regs->control); reg = __raw_readl(&mdio_regs->control); printf("mdio-reg:%x\n",reg);
打印的值是410400ff
查看am335x的技术手册,MDIOCONTROL Register 中IDLE这一位在初始化之后就是非空闲状态,这是为什么?不是复位后这一位值是1吗?难道有什么在操作MDIO
Jian Zhou:
回复 hongbin li1:
U-boot的MDIO读取这块,之前都用不同的PHY测试过,没发现什么问题。
一般PHY的ID都是通过管脚上下拉确定的,能否把mavell交换芯片这部分的原理图贴上来看看。
hongbin li1:
回复 Jian Zhou:
这是cpu与交换芯片接口部分
这是MDIO接口部分,SMI有21可用的地址,0x00~0x07是PHY的地址,手册上说Devaddr由ADDR[4:1]确定,问硬件工程师确定是0x0,
那么
static struct cpsw_slave_data cpsw_slaves[] = { { .slave_reg_ofs = 0x208, .sliver_reg_ofs = 0xd80, .phy_addr = 0, }, { .slave_reg_ofs = 0x308, .sliver_reg_ofs = 0xdc0, .phy_addr = 1, },};
这里面的phy_addr我是不是应该设置为0
hongbin li1:
回复 hongbin li1:
补充一下,是ADDR[4:0]
Jian Zhou:
回复 hongbin li1:
是的,设为0,同时检查一下CONFIG_PHY_ADDR这个宏是不是也设置为0了。
hongbin li1:
回复 Jian Zhou:
问题卡在mdio读写寄存器这一块了,读到的数据一直在变,没一个正常的
Jian Zhou:
回复 hongbin li1:
mavell这颗芯片对MDIO读写有什么特殊要求么?
hongbin li1:
回复 Jian Zhou:
mdc时钟的限制和mdio的上拉电阻,其他也没什么要求了,不知您说的特殊要求是指哪方面的
TI中文支持网
