被一个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

智能推荐

我说我不会Mybatis-Plus,他说你看这一篇试试-程序员宅基地

文章浏览阅读449次。在相同的Mapper接口中,可以定义自己的方法,并在对应的XML文件中为这些方法提供SQL语句或Mybatis查询逻辑。

基于OpenCV的火焰检测(三)——HSI颜色判据-程序员宅基地

文章浏览阅读160次。上文向大家介绍了如何用最简单的RGB判据来初步提取火焰区域,现在我要给大家分享的是一种更加直观的判据——HSI判据。 为什么说HSI判据是更加直观的判据呢?老规矩,先介绍一下HSI色彩模型: HSI颜色模型用H、S、I三参数描述颜色特性,其中: H表示颜色的色调,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定范围的颜色,如暖色、冷色等..._c# 通过hsi进行颜色判断

实验四python程序设计之文件_python程序设计实验报告八:文件-程序员宅基地

文章浏览阅读560次。安徽工程大学Python程序设计实验报告班级物流191 姓名郭森学号3190505134 成绩日期2020.6.2 指导老师修宇实验八 文件【实验目的】掌握读写文本文件或 CSV 文件,进而对数据进行处理的方法。【实验条件】PC机或者远程编程环境【实验内容】完成二个编程题。1、水浒传词频统计水浒传-词频统计(1)描述使用词频统计的方法,生成《水浒传》出场次数最多的10个人物的姓名。(2..._根据所给素材:ctiyname.txt及不完整代码,参考创建项目,编写代码实现解析,并输出如

域名--泛解析-程序员宅基地

文章浏览阅读78次。背景:主域名下多数子域名访问后直接跳转至www域名的服务。百度百科--域名泛解析:在域名前添加任何子域名,均可访问到所指向的WEB地址。也就是客户的域名#.com之下所设的*.#.com全部。泛域名解析:利用通配符* (星号)来做次级域名以实现所有的次级域名均指向同一IP地址。子域名挖掘: 泛解析这个问题的解决方法很简单,向DNS请求*记录,然后把枚举子域名回来的..._dns枚举泛解析

基于对赋值为随机数的数组实现打印、求和及最大值、平均值的计算,排序问题_编写一个方法,对数组的元素用[0,100)之间的随机数进行初始化,初始化之后对数组进-程序员宅基地

文章浏览阅读206次。我们先定义一个数组x并为其分配储存空间,如下:int[] x=new x[100] 想要对数组中的每一个元素进行随机数赋值,需要用到循环控制语句,这里以for循环为例:定义一个变量i并赋值为0,作为for循环的起始条件;需要注意的是,数组的下标是从0开始的,比如x[0]到x[99],代表数组的长度为100。所以再写入判断语句的时候,不能写成a<=x.length;控制变量语句应写入自加语句。在循环体里,对x[a]进行随机数赋值,以0到100为例如图: 完成对x[a]的赋值之后,开始写入打印代_编写一个方法,对数组的元素用[0,100)之间的随机数进行初始化,初始化之后对数组进

为什么eMule总是未连接到服务器-程序员宅基地

文章浏览阅读1k次。<一>安装和版本问题1) eMule对Windows有什么要求?eMule能在Windows 95版本以上的Windows操作系统下运行。1个好的P2P软件需要好的拨号网络的支持,所以Windows 98和Windows ME的比较差网络运行情况可能会影响eMule的发挥;相对来说Windows 2000和Windows XP更适合使用eMule。2) 弹出错误信息说oleacc.dl..._emule v0.50b 最新服务器未连接

随便推点

会声会影软件2023破解版最新激活序列号_会声会影2023-程序员宅基地

文章浏览阅读3.3k次。会声会影2023简单易用,具有拖放式标题、转场、覆叠和滤镜,色彩分级、动态分屏视频和新增强的遮罩创建器,超越基本编辑,实现影院级效果。优化分屏剪辑功能,简化多时间轴编辑的工作流程,让创作更轻松。添加趣味性3D标题,内置NewBlueFX和proDAD转场和防抖插件,一键防抖和校准色彩。使用MultiCam Capture Lite可以轻松录制并编辑视频教程、产品演示、游戏视频、在线课程。会声会影2023的智能工具,使用AI面部识别对效果最好的照片和视频片段进行分析,提取,并编译到可以项目中,将我们的精彩时刻_会声会影2023

Spring Boot 中的异步调用_springboot异步调用-程序员宅基地

文章浏览阅读1w次,点赞9次,收藏53次。Spring Boot 中的异步调用通常我们开发的程序都是同步调用的,即程序按照代码的顺序一行一行的逐步往下执行,每一行代码都必须等待上一行代码执行完毕才能开始执行。而异步编程则没有这个限制,代码的调用不再是阻塞的。所以在一些情景下,通过异步编程可以提高效率,提升接口的吞吐量。这节将介绍如何在Spring Boot中进行异步编程。要开启异步支持,首先得在Spring Boot入口类上加上@EnableAsync注解:@SpringBootApplication@EnableAsyncpublic _springboot异步调用

VK1668 SSOP24兼用TM1668的LED数码驱动芯片_sm1668led驱动芯片与tm1668芯片可通用?-程序员宅基地

文章浏览阅读1.6k次。概述VK1668 是 1/5~1/8 占空比的 LED 显示控制驱动电路。由 10 根段输出、4 根栅输出、3 根段/栅输出,1 个显示存储器、控制电路、键扫描电路组成了一个高可靠性的单片机外围 LED 驱动电路。串行数据通过4线串行接口输入到 VK1668采用 SOP24 的封装形式。功能特点1.CMOS 工艺2. 低功耗3.多种显示模式:设置选择段和位的个数(4~7 位,10~1..._sm1668led驱动芯片与tm1668芯片可通用?

com wechat.class.php,wechat-php-sdk/wechat.class.php at master · l953422179/wechat-php-sdk · GitHub...-程序员宅基地

文章浏览阅读127次。/***微信公众平台PHP-SDK, 官方API部分* @author dodge * @link https://github.com/dodgepudding/wechat-php-sdk* @version 1.1* usage:* $options = array(*'token'=>'tokenaccesskey' //填写你设定的key*);* $weObj = n..._public static function message($msg='',$link=''){ $datatype = ifilter::a

交流电过零点检测电路总结_交流过零检测电路-程序员宅基地

文章浏览阅读7.3k次,点赞3次,收藏32次。交流电的过零点检测方案较多,目前较常见的也是我之前所使用的方案如图1所示:图1 交流电光耦过零检测电路图1的电路可以检测到交流电经过零点的时间,但是它存在诸多的弊端,现列举如下:电阻消耗功率太大,发热较多。220V交流电,按照有效值进行计算三个47K的电阻平均每个电阻的功率为220^2/(3*47k)/3=114.42mw。对于0805的贴片电阻按照1/8w的功率计算,当前的消耗功率接近其额..._交流过零检测电路

MATLAB SOR统计滤波_sor滤波-程序员宅基地

文章浏览阅读202次。具体来说,我们采用了SOR算法求解图像中每个像素点周围的平均值,从而实现了一种基于统计特征的图像滤波方法。在本文中,我们将使用SOR算法实现统计滤波。具体来说,我们将考虑针对图像进行滤波,对于每一个像素点,我们将其周围的像素点取平均值,从而得到该像素点的新值。在本文中,我们将会讨论如何使用MATLAB实现SOR统计滤波。SOR算法是一种基于松弛因子的迭代算法,可以用于求解一般的n元线性方程组Ax=b。统计滤波是一种信号处理方法,旨在通过对信号的统计特征进行操作来实现滤波效果。MATLAB SOR统计滤波。_sor滤波

推荐文章

热门文章

相关标签