加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

am1808开发---uboot之mdio问题

(2016-10-21 16:56:41)
标签:

am1808

mdio

uboot

分类: 调测日记

解决uboot上关于mdio访问堵死问题

版本是U-Boot 2009.11-00012-gf845eec-dirty

这几天在调测am1808emac发现,在uboot阶段,在未执行ping命令,mdio接口都可以正常访问外设的phy,但是一旦ping通,发现无法继续读取phy寄存器。

经定位,代码死在这个位置,查看手册,发现是因为 

 http://s15/mw690/0024GuEVzy75NiucyWGbe&690

难道存在有两个不同进程进行读写操作,但是我在davinci_eth_phy_read / davinci_eth_phy_write  两个函数加了监控打印,发现没有重入的情况。

那么下一个怀疑是不是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总线一直是遍历总线上32phy addr[[0-31],只有phy addr0x10有响应。也就是板上的phy addr

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有