TI am335x驱动调试记录

调TI am 335x有些时间了。

总是没有精力来总结这些经验教训,现在慢慢发上来。


硬件原理图是:cpu <-->mac <---->phy <---->rj45


eth调试:
1.读硬件电路图,拿着芯片手册,把所有pin的配置修改成对应的配置。我们修改的参考板上有两个eth ,我们只用了eth1,余下的eth0由于pin和别的复用了。
在参考板上引脚定义多数不一样。


2.配完引脚,那么init部分就要按硬件修改了。phy addr从硬件原理图上的是0100,修改软件设置。跑起来看到可以正常读写phy,这样说明phy->mac这个通路是没有问题的。也就是mdio配置正常。读写出来的值也正确,读明引脚,电源,信号正常。算是进了一点。


3.从原理图上,仔细比较了和参考板上的配置,发现mode配置不一样,本应当配配的rgmii方式,硬件上拉却搞错了。这东西都能不能错,mode决定了别的pin脚连接。


4.phy可配了,但出现一个提示是协商失败。我们init里是配的自协商,理论上是phy芯片检测线后,就会发协商数据。看样子是phy-phy之间不通。拿示波器测phy出来的线上,
果然没有协商码流,拿参考板对比较,协商码流是上电后,就会从phy上发出来,这管mac是否工作。


5.再从phy到rj45线之间来找问题,从原理图上看不出什么不对,phy到线是直通的,没有器件,这个问题就怪了。找来硬件人员,他说原理图和实际板子有差别。实际板子把电平转换模块和插座分开的,我们的参考板是一体集成的模块。那就换座子再测吧。


6.换完座子,焊接上也有些问题,不停反复测试,座子的灯终于可以正常闪起,说明自协商是正常的。这时从软件uboot里的测试来看,能收到一些数据,发送数据后,有时能收到包,有时收很多个包,把krnel修改下,放上去测吧。


7.kernel还跑不起来,因为引脚配置,和local bus上的配置没有做,每次都挂死。看来不容易的,这时下定决心把所有引脚都配了。把不相关的初始化全关了,包括nand的驱动,并把local bus总线物理上切开,不影响系统运行才行。终于把kernel跑起来了。算是进了一大步。修改phy地址,修改成一个eth,结果ping不通。再软件上配成两个eth,试了一下能ping通一两个数据,这也算通了吧。把phy到座子的线取短,焊得更正规点。再试试,ping的数据丢包率就好多了,这个应当时信号质量上的问题。基本算调试通了。丢包就靠后面重新画板了。


总结下:

1.eth是很成熟的东西了,按demo来做就可以了。但从驱动人员来看,一层层的来调试,方便发现问题。
2.开发一定要懂硬件工作原理,有问题很正常,但硬件人员的错误,那软件人员从软件上来定就完全无能为力,所以一定要检查仔细,软件配置和硬件配置都重要
3.软件人员得会用示波器,这次开发,还好有个硬件人员协助,测信号,测电平,焊接器件。



你可能感兴趣的:(linux驱动开发)