当前位置:首页 > 工业控制 > 工业控制
[导读]I2C 偶发不响应时,复位主控往往只能暂时恢复,因为总线状态可能已经被外部器件留在半截事务里。单片机若没有处理 SDA 锁低和上拉边界,软件重新初始化也未必能重新拿回总线。

I2C 偶发不响应时,复位主控往往只能暂时恢复,因为总线状态可能已经被外部器件留在半截事务里。单片机若没有处理 SDA 锁低和上拉边界,软件重新初始化也未必能重新拿回总线。

从机拉低 SDA 是最常见的锁死形态。主控在读数据过程中复位、掉电或被中断长时间阻塞,从机可能仍认为自己处在发送某一位的阶段,于是继续等待后续 SCL 脉冲;此时主控重新上电后检测到总线忙,启动条件发不出去。某些传感器在内部转换、时钟拉伸或电源不稳时也会把线保持低电平。若驱动只在初始化时配置外设控制器,而不检查物理线电平,就会进入一种很尴尬的状态:寄存器显示已启用,外部总线却根本没释放。

恢复流程应先回到 GPIO 层。把 SCL 临时切成开漏输出,按规范产生若干个时钟脉冲,让卡在发送状态的从机把剩余位吐完;观察 SDA 释放后,再发送停止条件,最后才重新启用 I2C 外设。若 SDA 始终不释放,就要检查对应从机电源、复位脚或是否存在硬件短路。单片机固件还应给每次传输设置超时,遇到时钟拉伸过长或仲裁异常时主动退出,避免一个传感器把整条总线永久拖住。

上拉电阻与线容决定总线有没有足够的电气余量。I2C 依靠开漏和上拉形成高电平,上拉太大,线缆、电容和器件输入电容会让上升沿变慢,接收端在规定采样点看到的仍可能是低电平;上拉太小,低电平电流变大,弱驱动器件可能拉不够低,还会增加功耗和热插拔冲击。总线越长、器件越多、速率越高,这个窗口越窄。很多单片机板上短线测试稳定,接上外部面板或排线后开始锁死,本质就是边沿时间被线容拖出了规格。

取值不能只凭经验放一颗 4.7k。要按目标速率、总线电容和器件低电平灌电流能力计算允许范围,再用示波器实测上升沿是否满足标准。若存在不同电源域,还要确认上拉接到哪一路电源,避免主控掉电时被外设通过上拉反灌。热插拔场景下,未上电从机的钳位二极管也可能把线拉住,必要时需要总线开关、隔离器或按电源顺序释放。主控端驱动再健壮,也无法靠软件弥补错误电源域带来的物理锁低。

验证 I2C 可靠性要做异常注入:传输中复位主控、拔插从机电源、强制从机时钟拉伸、增加线缆电容,并确认恢复流程能否不重启整机就释放总线。记录 SCL、SDA 实际波形和驱动状态机,比只看返回码更有价值。若总线恢复后第一帧仍失败,还要检查停止条件是否真的被外设识别,而不是软件认为已经发出。对多从机系统,还要逐个断电和恢复,确认某一器件异常时不会把共享总线长期拖低,也不会拖慢其他地址响应。这样才能判断需要改恢复时序,还是必须增加硬件隔离器件。

因此,I2C 锁死不是单纯协议栈问题,而是状态机和电气边界共同作用。先能把物理线救回来,再把上拉和电源域算对,总线才不会靠整机断电恢复。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

PWM 波形偶尔抖一下,后级电机或电源环路就可能把它放大成噪声和发热。单片机定时器虽然能自动翻转引脚,但更新时刻和死区配置不对,输出并不会天然稳定。

关键字: 单片机 PWM 定时器

参数偶尔丢失或升级后配置变乱,常常不是存储单元突然坏了,而是写入流程没有尊重 Flash 的物理边界。单片机内部 Flash 若把擦写粒度和掉电窗口处理得太粗,少量配置也会被写成高风险操作。

关键字: 单片机 Flash 掉电保护

ADC 数值缓慢漂移时,问题未必在传感器,也未必靠平均就能消掉。单片机内部转换器如果没有满足采样保持和参考回流条件,软件读到的只是前端妥协后的电压。

关键字: 单片机 ADC 传感器

看门狗本该抓住死机,却常在现场变成莫名重启的来源。单片机系统如果没有把喂狗条件和最坏执行时间绑定,复位既可能误触发,也可能在真正卡死时失效。

关键字: 单片机 看门狗 复位

设备偶发重启时,很多人先怀疑程序跑飞,其实更常见的是电源刚好落在不稳定边界。单片机若没有把欠压复位和上电延时配成一条完整启动链,复位脚会比软件更早暴露问题。

关键字: 单片机 复位 晶振

计时偏差通常不是某个 delay 写错,而是时间基准从源头就不稳定。单片机定时若同时受晶振误差、分频取整和同步延迟影响,软件看到的一秒就可能不是硬件世界的一秒。

关键字: 单片机 计时偏差 晶振

待机电流比预算高,问题不一定出在芯片休眠模式选错,而是板上仍有电气状态没有收干净。单片机进入低功耗前,如果 IO 和唤醒源没有逐项定义,电池寿命会被细小电流慢慢吃掉。

关键字: 单片机 耗电 IO

串口链路少几个字节时,线缆和干扰常常先背锅,但真正原因可能藏在时钟误差和缓冲余量里。单片机串口若只按平均吞吐设计,突发报文一来就会暴露尾部丢字。

关键字: 单片机 串口 缓冲水位

在嵌入式开发的全流程里,程序烧录是连接代码与硬件的最后一公里。很多新手工程师刚接触单片机时,总以为烧录就是“插上线点一下下载按钮”这么简单,直到在量产阶段遇到几十台设备同时烧录效率极低、在现场维护时拆开机壳重新烧录成本极...

关键字: 单片机 编程器烧录

做嵌入式开发、电子DIY、工业控制,几乎都绕不开“弱电控制强电”这个需求:用单片机3.3V/5V的低电压弱电,控制220V交流电的灯泡、电机、加热器这类强电设备通断,最常用的方案就是继电器。很多新手刚接触的时候只知道继电...

关键字: 继电器 单片机
关闭