今天是新项目调试的第一天。
我起的很早,起早的原因很简单,我家楠哥要我送他上学,他说爸爸没有起到一个当爸爸的责任,他也想让爸爸送他上学,然后我就送了。
7点30起来,8点出发,然后回来看了一下热火对阵掘金的比赛,下楼,拉开我的「法拉利」车门启动发动机奔赴那该死的充满诱惑力的调试战场。
老刘是一个经验老道并且冷静沉着的硬件选手,当我们第一把开机成功后,老刘微微一笑对我说「发哥,你再看一下,我给你准备几个板子给你带回去」。
之后的事情就很美妙了,不管我怎么修改我的软件配置,我们的PHY始终不能驱动成功,从内核日志里面就是读不到PHY的ID地址。
我不死心,我觉得应该不是软件的问题,然后找老刘讨论,我说「要不我们测量下波形吧,这里读出来的ID是不对的」。
老刘说「你现在设置的PHY ID是多少?是不是跟我们硬件上的配置不一样」。
因为之前调试过PHY芯片,我说「开机的时候,驱动会循环扫描PHY的ID,只要PHY ID 在我们扫描的范围内,就肯定是可以扫描出来」。
然后我找了一个帅哥,这个帅哥是一个真正的帅哥,因为他的名字里面有一个特别的帅字。
我找他的原因是因为他手里有一个硬件设备,那个硬件设备的PHY芯片和我们正在调试的硬件设备是一样的,我想用那个设备来看看内核的开机日志。
从这个日志里面看到的是可以读到PHY的ID的。
之前在一个文章里面说过,PHY的作用就像I2S和功放芯片一样。所以如果PHY芯片驱动不正常,我之后的switch芯片也不能正常调试,是让我挺头痛的。
我跟老刘说,我们把这个板子上的MDC和MDIO飞线到那个可以的板子上读下PHY ID吧,然后又是捣鼓了好长一会时间。
读到的ID也不正确,但是有数据出来了。
上午的时间过得很快,反复测试了好长时间,有一个帅哥就叫我去吃午饭了。
下午1点30开始搞事情。
老刘刚用上了示波器,刚开始测量MDC和MDIO的信号,老刘跟我说「为什么MDC的信号高电平那么低?」
然后我又开始捣鼓代码,我从dts编译生成的tmp文件里面不断的查,把可能被复用的地方都注释掉,然后再重新编译出来烧录进去,因为硬件有点奇怪的问题,不能直接进入bootloader 模式烧录,每次需要把编译出来的boot.img打包成整个update.img再烧录,这个过程消耗了我非常久的时间。
然后发现无论怎么修改,MDC的电平总是上不去,我就干脆不让PHY驱动控制这个GPIO口,自己写了一个sys文件系统的驱动来控制,可以用指令拉高拉低的「这个是我自己的调试驱动,正常用sysfs下的GPIO也可以」,测试一轮后发现还是有问题。
这个时候老刘说「可能我们这个示波器有问题,我要换一个牛逼点点示波器」。
过了一会,老刘搬来一个很大的示波器,这个示波器看起来很牛逼,探头也很新,屏幕也很大,扫描的频率也更高。
不过遗憾的是,那个GPIO口的电平还是上不去。
不过这个时候,老刘说,卧槽,好像这两个地方反了。
本来是MDC连接GPIO14,MDIO连接GPIO15的,老刘的原理图上把MDC接到了GPIO15上,MDIO连接到了GPIO14上。
当然,我们想到的第一个办法就是不要修改硬件,直接通过修改软件配置把这两个GPIO口换一下。
芯片原厂给出来的调试里面也写了几个重要的调试手段。
然后就开始修改GPIO口的映射,结果令人遗憾的还是不成功。
这个时候应该去看看芯片的GPIO功能手册的,但是时间比较晚了,老刘果断找了一个板子把两个GPIO 给调换了下,这调换可是废九牛二虎之力,因为当时设计的时候就没有想过会出问题,里面有一个过孔,需要把过孔的部分给断开后再连接起来。
然后就继续整。
老刘这个时候看起来已经着急了,这样的一个技术专家,被这样的一个GPIO口给调戏了一整天,我这个时候还记得早上他说的那句「发哥,这个是小问题,今天一定能全部调通」。
我下楼去给老刘买水,我担心一直在他旁边他更着急了,10几分钟后回来,老刘把东西几乎整得差不多了,刚才不能开机的板子也修理好了。
然后我们开机,我继续看了下PHY ID ,还是没有读取出来。
我们继续拿了那个最贵的示波器看了下,这个时候波形什么的都已经是正常的,幅值也正确了。
然后,这个时候我想到了复位时序。
我说等我修改下,我把复位时序加长了一些,然后开机,终于看到了那个该死的PHY ID。
因为每个PHY芯片对复位的时间不同
我们用的这个RTL8201芯片的复位时序要求如下:
如果那个低电平小于10ms,那是不行的。
这个时候,已经是晚上11点30了,幸好公司离我家很近,这个时候的晚风吹起来也够舒服。
不知道明天又会遇到怎样的问题,不过我相信老刘都能搞定的,毕竟有人说过,万物之中,希望至美。
END
→点关注,不迷路←