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

AM335X UBOOT Ethnet

使用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的上拉电阻,其他也没什么要求了,不知您说的特殊要求是指哪方面的

赞(0)
未经允许不得转载:TI中文支持网 » AM335X UBOOT Ethnet
分享到: 更多 (0)