am1808开发---uboot之mdio问题
标签:
am1808mdiouboot |
分类: 调测日记 |
解决uboot上关于mdio访问堵死问题
版本是U-Boot 2009.11-00012-gf845eec-dirty
这几天在调测am1808的emac发现,在uboot阶段,在未执行ping命令,mdio接口都可以正常访问外设的phy,但是一旦ping通,发现无法继续读取phy寄存器。
经定位,代码死在这个位置,查看手册,发现是因为
那么下一个怀疑是不是ping完导致mdio的相关寄存器发生改变,说干就干,分析了ping走的相关函数,发现其在每次操作mdio访问phy都重新设置了mdio的控制寄存器,复位和使能了mdio状态机、时钟频率。
http://s1/mw690/0024GuEVzy75NiuxbOwc0&690
那么接下来就是通过读取am1808的对应的mdio寄存器是否发生改变,需要自己编写两个函数,用于读写mdio 寄存器的值。
很简单,代码如下
http://s3/mw690/0024GuEVzy75NiuzQRQ22&690
然后这两个函数通过命令调用,为了简单使用,我在cmd_mii中添加了对应的命令
http://s2/mw690/0024GuEVzy75NiuBTON61&690
读取,发现确实是通过ping后,控制寄存器变了,示波器也没有测到时钟波形。
http://s16/mw690/0024GuEVzy75NiOU37Ncf&690
状态机被disable掉了。难怪。
重新写mdio的控制寄存器,
http://s11/mw690/0024GuEVzy75NiPvonwca&690
波形出来了,可以正常访问,very good。
后面将继续实现在kernel上开启mdio访问phy寄存器的接口。
http://s15/mw690/0024GuEVzy75NiPyZMG5e&690
http://s5/mw690/0024GuEVzy75NiPDBY094&690
观察波形,发现mdio总线一直是遍历总线上32个phy addr[[0-31],只有phy addr为0x10有响应。也就是板上的phy addr。

加载中…