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

智能推荐

tornado 异步执行shell命令并返回执行结果_486cpu tornado shell命令-程序员宅基地

文章浏览阅读1k次。思路:通过tornado框架构建web服务器,通过执行后台命令程序获取监控目标状态或监控结果,根据状态或结果,通过websocket发送信息到前端进行相应的展现。问题:tornadoweb框架是异步处理的,其核心是将事务都放入到ioloop异步循环中。但通常使用python调用shell脚本或者执行的shell命令,以及python打开文件的操作都是同步阻塞模式,无法加入到ioloop中。在下面的连接中提到了如何将shell命令通过异步方式执行并获取执行结果。https://www.cn..._486cpu tornado shell命令

设计类似于抖音、小红书、微博等方式的主题点赞与评论的数据库表_小红书 评论 表结构-程序员宅基地

文章浏览阅读2.8k次。转载请注明Garcia主题设计: 主题ID、用户ID、主题标题、主题城市、主题位置名称、主题位置详细地址、地理经度、地理纬度、 主题展示内容(100)、主题展示媒体文件路径(List图片名称)、点赞数、评论数、收藏数,转发数、 是否为转发主题、被转发主题ID、被转发主题发行人ID、被转发主题发行人名称、创建时间、更新时间主题内容设计: 主题ID,主题完整内容主题点赞表: 主题ID、用户ID、状态(1有效,0取消)主题主评论表(根据点赞数排序)..._小红书 评论 表结构

牛客练习赛76_牛客练习赛76b-程序员宅基地

文章浏览阅读141次。牛客练习赛76B zzugzx (vs) Kurisu是一个博弈游戏注意到(m+1)^n<=5000那么我们是可以直接考虑爆搜的总共N个回合,那么两个人就是2*N次操作定义f[a][b]代表当 ,zzugzx 选了a的数,Kurisu选了b的数,zzugzx赢的概率a和b分别是n位m+1进制的数,代表n回合他抽到1-m的数放在1~n哪个位置#include<bits/stdc++.h>using namespace std;int ok[5000][5000];dou_牛客练习赛76b

物联网IOT选型wifi路由模块串口透传不得不知的秘密_wifi透传与iot-程序员宅基地

文章浏览阅读1.2k次。2020年一场突如其来的疫情灾难袭来,各大经济市场在不同程度被按下了“暂停键”。物联网控制作为新兴行业优势凸显出来,其无接触式的交互方式,远程控制,智能控制车间,给疫情期间的人民带来安全、智能的生活体验。这些物联网控制大多用到了网关信息桥梁来传输—wifi 路由模块。但你知道吗?工程师们想要选择高性价比的wifi路由模块做串口透传,不得不知道wifi路由模块的两大区分:mcu+wifi模块和C..._wifi透传与iot

Ubuntu 17.10 + Cuda9.0 + CUDNN + Tensorflow最正确姿势排坑_cuda9.0 tensorflow1.7 ubuntu-程序员宅基地

文章浏览阅读4.3k次。 博主之前一直使用16.04与win10双系统,但是由于当初安装系统时候引导安装的有点问题,导致ubuntu使用起来一直有些毛病,搞了好久也没搞好,索性就想到干脆重新把系统装一下。作为一个爱尝鲜的用户,使用了这么长时间平平淡淡的长期稳定支持版,还是想要换换口味试试最新的17.10版本,不过鉴于长期支持版的18版本再过不久就会放出来了,估计17.10的寿命和用户数量也不会太多了,也正是这个原..._cuda9.0 tensorflow1.7 ubuntu

笔记_数学建模_数学模型-机器学习&机器学习常用算法_机器学习数学建模-程序员宅基地

文章浏览阅读481次。《数学模型-姜启源》——《机器学习》1、数学规划 (包括全部的规划问题)线性、非线性、动态规划、多目标规划、整数规划2、传染病模型(微分方程)3、稳定性模型包括捕鱼、人口、军事竞赛等等4、概率模型5、博弈模型6、计算机虚拟(数值模拟、动态仿真、蒙特卡罗算法)7、调度问题 (智能算法、遗传算法、多目标规划、数学规划、dijstra算法、Floyd算法)8、智能算法(遗传算法、模拟退火算法、蚁群算法、神经网络)9、微分方程所研究对象与已知因素之间可以用微分方程的形式表示(常微分方程(_机器学习数学建模

随便推点

CUDA c programming guide_cude c program model-程序员宅基地

文章浏览阅读3.1k次。http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#axzz4FIp5fBgMCUDA C Programming GuideChanges from Version 7.0Updated C/C++ Language Support to:Added new_cude c program model

Redis(十八)-Redis的数据结构之整数集合_redis int64 9.2233720368548e+18-程序员宅基地

文章浏览阅读2.4k次。本文简单介绍了整数集合这种数据结构,整数集合是集合键的底层实现之一,是专门用来存储整数的,整数集合的底层实现是数组,这个数组以有序,无重复的方式保存集合元素,在有需要时,程序为会根据新添加元素的类型,改变这个数组的类型,升级操作为整数集合带来了操作上的灵活性,并且尽可能节约了内存。_redis int64 9.2233720368548e+18

解决idea protobuf插件(intellij-protobuf-editor)不生效 问题_protobuf插件启用失败-程序员宅基地

文章浏览阅读3.7k次。公司项目内部各个模块之间的交互,是通过谷歌的protobuf来进行交互的。各个protobuf之间又存在相互引用,如果不借助强大的ide识别各个文件之间的引用,方便点击类名字段名来进行跳转,则很难捋清楚之间的关系。这就用到了我们今天的主角——intellij-protobuf-editor。intellij-protobuf-editor的安装十分的简单,简单某度一下,直接在idea的插件中心下载安装就可以了。但是有的小伙伴安装后,可能会发现,自己项目内的protobuf文件并没有被intellij_protobuf插件启用失败

求斐波那契前n个数c语言,C语言 计算斐波那契数列的第N个数-程序员宅基地

文章浏览阅读2.5k次,点赞4次,收藏4次。何为斐波那契数列?斐波那契数列就是:1 1 2 3 5 8 13 21 34……这样一串有规律的数,即从第三个数开始,该数字为前两个数字之和那么要计算第N个数字,就必须知道N-1,N-2的值…以此类推递归算法实现(首选)递归算法,代码简介但是效率低int D_fib(int n){if(n == 1 || n == 2) //第一个和第二个数均为1return 1;else{return F_f..._计算斐波那契数列的前n个数(1≤n≤20),即1, 1, 2, 3, 5, …,55,并按每行打印5个数

svc: failed to register lockdv1 RPC service (errno 111).-程序员宅基地

文章浏览阅读1.6k次。挂载时,用mount -t nfs 192.168.1.105:/ /mnt/nfs时出现svc: failed to register lockdv1 RPC service (errno 111)改为mount -t nfs -o nolock 192.168.1.105:/ /mnt/nfs就行了。全部配置步骤:1、进入配置文件,输_failed to register lockdv1 rpc service (errno 111)

python判断数字位数_Python中的位数,之,判断,数字-程序员宅基地

文章浏览阅读3.9k次。这里是一段防爬虫文本,请读者忽略。本文原创首发于CSDN,作者IDYS博客首页:https://blog.csdn.net/weixin_41633902/本文链接:https://blog.csdn.net/weixin_41633902/article/details/107440627未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!写在开头的话请记住:实践是掌握知识的最快方法如果..._python判断一个数是几位数

推荐文章

热门文章

相关标签