被一个gpio口搞死的一天-程序员宅基地

今天是新项目调试的第一天。

我起的很早,起早的原因很简单,我家楠哥要我送他上学,他说爸爸没有起到一个当爸爸的责任,他也想让爸爸送他上学,然后我就送了。

7点30起来,8点出发,然后回来看了一下热火对阵掘金的比赛,下楼,拉开我的「法拉利」车门启动发动机奔赴那该死的充满诱惑力的调试战场。

老刘是一个经验老道并且冷静沉着的硬件选手,当我们第一把开机成功后,老刘微微一笑对我说「发哥,你再看一下,我给你准备几个板子给你带回去」。

之后的事情就很美妙了,不管我怎么修改我的软件配置,我们的PHY始终不能驱动成功,从内核日志里面就是读不到PHY的ID地址。

8762c318fe9e90dab02705f02eb23daa.png

我不死心,我觉得应该不是软件的问题,然后找老刘讨论,我说「要不我们测量下波形吧,这里读出来的ID是不对的」。

老刘说「你现在设置的PHY ID是多少?是不是跟我们硬件上的配置不一样」。

因为之前调试过PHY芯片,我说「开机的时候,驱动会循环扫描PHY的ID,只要PHY ID 在我们扫描的范围内,就肯定是可以扫描出来」。

然后我找了一个帅哥,这个帅哥是一个真正的帅哥,因为他的名字里面有一个特别的帅字。

我找他的原因是因为他手里有一个硬件设备,那个硬件设备的PHY芯片和我们正在调试的硬件设备是一样的,我想用那个设备来看看内核的开机日志。

73c0c294718d57697af309d153c01ec5.png

从这个日志里面看到的是可以读到PHY的ID的。

之前在一个文章里面说过,PHY的作用就像I2S和功放芯片一样。所以如果PHY芯片驱动不正常,我之后的switch芯片也不能正常调试,是让我挺头痛的。

我跟老刘说,我们把这个板子上的MDC和MDIO飞线到那个可以的板子上读下PHY ID吧,然后又是捣鼓了好长一会时间。

读到的ID也不正确,但是有数据出来了。

ef49ab56611a9bfd4a0c971de298b73f.png

上午的时间过得很快,反复测试了好长时间,有一个帅哥就叫我去吃午饭了。

下午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上。

4b65b1eac0eb72214a27b3af53c7bd90.png

当然,我们想到的第一个办法就是不要修改硬件,直接通过修改软件配置把这两个GPIO口换一下。

芯片原厂给出来的调试里面也写了几个重要的调试手段。

c72d7be67c96631a3760de298657048f.png

然后就开始修改GPIO口的映射,结果令人遗憾的还是不成功。

这个时候应该去看看芯片的GPIO功能手册的,但是时间比较晚了,老刘果断找了一个板子把两个GPIO 给调换了下,这调换可是废九牛二虎之力,因为当时设计的时候就没有想过会出问题,里面有一个过孔,需要把过孔的部分给断开后再连接起来。

然后就继续整。

老刘这个时候看起来已经着急了,这样的一个技术专家,被这样的一个GPIO口给调戏了一整天,我这个时候还记得早上他说的那句「发哥,这个是小问题,今天一定能全部调通」。

我下楼去给老刘买水,我担心一直在他旁边他更着急了,10几分钟后回来,老刘把东西几乎整得差不多了,刚才不能开机的板子也修理好了。

然后我们开机,我继续看了下PHY ID ,还是没有读取出来。

我们继续拿了那个最贵的示波器看了下,这个时候波形什么的都已经是正常的,幅值也正确了。

c71df3de2602bbaa204fd082107c89e2.jpeg

然后这个时候我想到了复位时序。

我说等我修改下,我把复位时序加长了一些,然后开机,终于看到了那个该死的PHY ID。

628fcd1f420ead0f9a649752ef7ae44e.png

因为每个PHY芯片对复位的时间不同

我们用的这个RTL8201芯片的复位时序要求如下

d2c98a016e1084935114257ac795465d.png

如果那个低电平小于10ms,那是不行的。

这个时候,已经是晚上11点30了,幸好公司离我家很近,这个时候的晚风吹起来也够舒服。

不知道明天又会遇到怎样的问题,不过我相信老刘都能搞定的,毕竟有人说过,万物之中,希望至美。

哦,对了,韦老师的搞定寄存器计划,大家有需要的,记得冲哈。

跟韦东山老师搞事

f4d28a72d152fb08d957b92b9946c463.jpeg

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weiqifa0/article/details/131136748

智能推荐

System.Data.SqlClient.SqlException (0x80131904): EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当...-程序员宅基地

文章浏览阅读600次。EF使用ExecuteSqlCommand(db.Database.ExecuteSqlCommand("exec proc_DeleteCaseInfo_Output @caseID", new SqlParameter("@caseID", caseID));)来执行了一个包含了事务的存储过程,结果一直提示如题错误,找了很多文章也没有解决,不过有一篇文章给我了一些启发,参见:http://bl..._事务计数指示 begin 和 commit 语句的数目不匹配。上一计数 = 1,当前计数 = 2

全志A83平台VIDIOC_S_CTRL和VIDIOC_G_CTRL不能设置问题-程序员宅基地

文章浏览阅读2.6k次。一开始郁闷v4l2的应用程序调用VIDIOC_S_CTRL设置camera的曝光和增益参数时一直返回失败,跟踪发现并没有调用到sensor驱动的s_ctrl,最后跟踪发现,连v4l2驱动的ioctl里面的VIDIOC_S_CTRLswitch也没有进去,最后在ioctl接口中打印cmd数值发现,应用传下来的VIDIOC_S_CTRL和驱动里面的VIDIOC_S_CTRL值都不相同,如下图:最后跟踪..._vidioc_g_ctrl

剖析Halcon 9点标定旋转中心标定与使用_九点标定和旋转中心标定-程序员宅基地

文章浏览阅读2.1w次,点赞124次,收藏383次。主要讲解上下双相机定位贴合的原理和实现过程,包括各种标定、组合使用及具体的halcon源码实现,适用于的X、Y、Z三轴加一旋转轴系统,如模组组成的多轴系统、Scara四轴机器、六轴机器人(在运行过程中保证几个自由度不动,运行即可)一、标定介绍1.标定模型A:相机固定(夹具不旋转)夹具夹取产品或者标定块,选取一个特征,开始进行标定X轴、Y轴移动一个位置,记录轴的物理坐标:(Qx1,Qy1)提取图像中对应特征点,图像像素坐标:(Px1,Py1)运动第N位置,记录下点位轴轴坐标(Q_九点标定和旋转中心标定

Shiro 教程基于SSM(SpringMVC + Spring + Mybatis)EHCache版本-程序员宅基地

文章浏览阅读517次。一、Shiro简介Apache Shiro 是 Java 的一个安全框架。我们经常看到它被拿来和 Spring 的 Security 来对比。大部分人认为 Shiro 比 Security 要简单。我的观点赞成一半一半吧。首先 Shiro 确实和 Security 是同类型的框架,主要用来做安全,也就是我们俗称的权限校验(控制)。居多人对 Shrio 的定义为好..._shiro-ehcache 版本有哪些

如何将新手引导模块化?答案在此_新手引导开发-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏11次。新手引导的是很复杂的,怎么从复杂的逻辑中模块化?_新手引导开发

matlab叶片背景,基于Matlab的复杂背景下叶片图像提取方法-程序员宅基地

文章浏览阅读615次。安徽农 业科学 ,Journal ot’An]mi Agl’i Sci.201 3,41(29):l 1901一l 1903 责任编辑 姜丽 责任校对 卢瑶 基 于 Matlab的复杂背景下叶片图像提取方法 齐国红,张晴晴,张云龙 (郑 IX:学阿亚 学院,郇州新郑45l150) 摘要 将需要研究的植物叶片从复杂的背景下提取出来是后期图像理解和图像分析的关键 主要是在支持 向量机的基础上将叶片从 ..._将绿色叶片从复杂背景中分割出来的代码

随便推点

IP数据包格式、IP头部字段分析、IP数据包封装流程、IP地址解析、ICMP协议解析、ARP协议解析_在ip头部结构中,版本和首部长度公用一个字段-程序员宅基地

文章浏览阅读3k次。IP数据包格式、IP头部字段分析、IP数据包封装流程、IP地址解析、ICMP协议解析、ARP协议解析_在ip头部结构中,版本和首部长度公用一个字段

python之pandas基础知识以及练习题_python中pandas填空题-程序员宅基地

文章浏览阅读6.8k次。####pandas数据分析与处理库import pandas as pddf=pd.read_csv(‘E:\pyhon\pandas\Pandas%E4%BB%A3%E7%A0%81\data\titanic.csv’)dfPassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin ..._python中pandas填空题

delphi mysql变体类型_从Delphi到Go——函数的可变参数-程序员宅基地

文章浏览阅读124次。Delphi事实上,Delphi并没有什么可以直接为函数传递可变参数(数量可变、类型可变)的语法,但是并不是说不可能实现,最常用的Format()函数就是最好的例子。虽然不能直接传递可变参数,但是通过一种叫做可变类型的开放数组即可实现为函数传递数量不定、类型不一的可变参数。可变类型可变类型不是变体类型,而是一个记录类型TVarRec,在System单元中的定义如下:TVarRec = record..._delphi array of const vunicodestring

zsh: command not found: python问题解决-程序员宅基地

文章标题:zsh: command not found: python问题解决 摘要:本文讨论了在mac电脑上出现 zsh: command not found: python 的问题,分析了出现该问题的原因是未配置python环境,提出了解决方案是通过Homebrew安装Python来解决该问题。

如何获取硬盘序列号-程序员宅基地

文章浏览阅读767次。如何获取硬盘序列号?作者:cg1摘自:access911.net编辑:cg1更新日期:2003-8-2浏览人次: 2255专题地址:[url]http://www.access911.net/?kbid;77FAB01E10DC[/url]简述:如何获取硬盘序列号?阅读前需掌握:难度等级:等级未评定..._vb deviceiocontrol dfp_receive_drive_data scsi

LSTM多变量多步时间序列预测_lstm多变量时序预测预测新值-程序员宅基地

文章浏览阅读213次。在时间序列预测中,我们常常需要考虑多个相关变量的影响,并预测未来多个时间步的取值。本文将介绍如何使用LSTM实现多变量输入的多步时间序列预测,并提供相应的源代码。假设我们有多个相关变量作为输入特征,并且需要预测未来多个时间步的取值。通过以上步骤,我们可以使用LSTM模型实现多变量输入的多步时间序列预测。使用验证集对训练好的模型进行验证,评估模型的性能。训练集用于模型的训练,验证集用于调整模型的超参数,测试集用于评估模型的性能。将测试集输入到训练好的模型中,得到未来多个时间步的预测结果。_lstm多变量时序预测预测新值

推荐文章

热门文章

相关标签