0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

被一个GPIO口搞死的一天

嵌入式与Linux那些事 来源:嵌入式Linux 2023-06-12 14:08 次阅读

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

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

504621c6-08d9-11ee-962d-dac502259ad0.png

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

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

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

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

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

5062943c-08d9-11ee-962d-dac502259ad0.png

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

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

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

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

50773842-08d9-11ee-962d-dac502259ad0.png

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

老刘刚用上了示波器,刚开始测量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上。

5086ffde-08d9-11ee-962d-dac502259ad0.png

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

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

50937228-08d9-11ee-962d-dac502259ad0.png

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

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

然后就继续整。

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

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

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

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

509f7104-08d9-11ee-962d-dac502259ad0.jpg

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

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

50b5c24c-08d9-11ee-962d-dac502259ad0.png

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

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

50c5c7e6-08d9-11ee-962d-dac502259ad0.png

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





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 示波器
    +关注

    关注

    113

    文章

    6239

    浏览量

    184784
  • PHY
    PHY
    +关注

    关注

    2

    文章

    301

    浏览量

    51730
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52047
  • MDIO
    +关注

    关注

    0

    文章

    12

    浏览量

    11207

原文标题:被一个gpio口搞死的一天

文章出处:【微信号:嵌入式与Linux那些事,微信公众号:嵌入式与Linux那些事】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    GPIO内部电路的原理

    前言 笔者近日在B站刷到了视频,使我对GPIO的I/O口内部基本结构以及工作原理有了恍然大明白的理解,现在对此做一个总结,并为大家推荐该视频Keysking 【STM32】
    的头像 发表于 11-20 09:24 274次阅读
    <b class='flag-5'>GPIO</b>内部电路的原理

    请问射频和微波分析仪等检测设备,在办公室检测时对人体辐射有多大?一天8小时同屋内工作,会造成人体伤害吗?

    请问射频和微波分析仪等检测设备,在办公室检测时对人体辐射有多大?一天8小时和仪器在同屋内工作,会造成对人体伤害吗?
    发表于 11-12 19:30

    esp8266 GPIO会有电流泄露,如何避免?

    请教当esp8266 的EN外界拉低,芯片进入关闭状态,理论上GPIO为高阻是吗? 为什么我的电路当EN为低时,插上usb给锂电池
    发表于 07-08 07:48

    戴森,中国平替捅了

    更是领先戴森身位,拿下了冠军的宝座。把戴森压在了身下没想到开创了高速吹风机这个品类的戴森,有一天会被中国平替压在身下。不久前,猫发布的618战报显示,高速吹风
    的头像 发表于 07-06 08:05 102次阅读
    戴森,<b class='flag-5'>被</b>中国平替捅了<b class='flag-5'>一</b>刀

    使用GPIO作为电源驱动OLED

    使用GPIO作为电源驱动OLED 以往为了增加OLED的驱动显示,都是用杜邦线将OLED连接到开发板必要的VDD,GND,GPIO口上。在CH32V307EVT的开发板上有
    发表于 06-23 14:20

    根光纤解决全屋用网!手搓了8全千兆交换机!

    8千兆交换机,可根光纤,解决全屋用网?!前言事情是这样的。我在年前左右,给家里爆改了下,安排智能家居的时候,发现家里网不够用了……
    的头像 发表于 05-25 08:05 259次阅读
    <b class='flag-5'>一</b>根光纤解决全屋用网!手搓了<b class='flag-5'>个</b>8<b class='flag-5'>口</b>全千兆交换机!

    使用stm32f0的STOP模式,通过WFE进入STOP后,GPIO的INT唤醒了,不应该是GPIO的EVENT唤醒吗?

    大家好, 最近使用F0的STOP模式遇到问题,在通过WFE进入STOP后,GPIO的INT唤醒了,不应该是
    发表于 05-11 07:10

    什么是GPIOGPIO组成原理

    GPIO全拼叫General Purpose Input Output(通用输入输出)简称IO也叫总线扩展器,GPIO是由引脚,功能寄存器组成,不同的架构中的
    发表于 04-28 12:30 6881次阅读
    什么是<b class='flag-5'>GPIO</b>?<b class='flag-5'>GPIO</b>组成原理

    STM32的IO连接到起,其中IO烧坏的原因?

    如题:两STM32的IO连接到起,单片机IO设置为输出模式(发送数据),另一个设置为外
    发表于 04-24 07:53

    STM32G473VETx使用GPIO作为电源芯片的使能信号,4电源模块其中模块不行的原因?

    在使用STM32G473VETx芯片时,使用GPIO作为电源芯片的使能信号(直连,未接串阻),配置为推挽输出,电源芯片实际需最低min1.2V和1.4V高电平,低电平均为max0.4V,有4这样
    发表于 04-08 06:01

    宁德时代市值一天暴增千亿

    宁德时代市值一天暴增千亿 就在业界讨论AI的尽头是光伏和储能之时,摩根士丹利上调宁德时代的评级至“超配”,并将宁德时代的目标价上调14%,宁德时代的股价迎来久违的大涨,宁德时代市值一天暴增千亿。 3
    的头像 发表于 03-12 17:43 964次阅读

    CY7C63813设置了4GPIO响应,调试发现每个周期GPIO才响应次中断,如何让GPIO口重复响应中断呢?

    CY7C63813设置了4GPIO响应,调试发现每个周期GPIO才响应次中断,如何让GPIO
    发表于 02-22 07:41

    GD32 MCU如何将烧录配置为GPIO使用?

    如果大家在进行GD32 MCU开发时发现GPIO引脚使用不足,可以尝试将烧录配置为GPIO使用,这样就可以多出几个引脚使用,但使用的时候如何配置以及有哪些注意事项,本视频将会为大家进行解答。
    的头像 发表于 02-20 10:18 1954次阅读
    GD32 MCU如何将烧录<b class='flag-5'>口</b>配置为<b class='flag-5'>GPIO</b>使用?

    琢磨了一天的CAN协议

    最新公司需要利用J1939的CAN协议进行数据通信,琢磨了一天,才明白,现在整理成笔记,内容如下:1.数据帧格式数据帧格式应遵循CAN29位标识符的扩展帧格式,CAN数据帧由很多域组成(仲裁域+控制
    的头像 发表于 01-10 08:00 604次阅读
    琢磨了<b class='flag-5'>一天</b>的CAN协议

    stm32怎么读取io输入电平

    要读取STM32的IO输入电平,你可以使用GPIO外设来完成。GPIO是通用输入输出端口,它可以配置成输入模式,用于读取外部信号的电平。 首先,你需要定义
    的头像 发表于 01-05 11:46 4842次阅读