I²C通信偶发NACK或总线卡死,硬件工程师怎样排查?

浏览量:1
时间: 2026-07-31 14:58:05

题库分类:硬件设计适合经验:0—5年难度:中高级题型:接口排查题 + 软硬件协同题

面试题

I²C设备偶发NACK,运行一段时间后SDA还可能一直被拉低,你会怎样建立排查顺序?

面试官真正想考什么

I²C问题常同时涉及开漏电气、总线负载、协议时序和设备状态。只回答“换小一点的上拉电阻”或“软件重试”都不完整,还要判断故障发生在起始、地址、数据、应答还是停止阶段。

回答思路

第一步:先确认供电、电平域和连接

检查控制器与目标器件电源、复位、地址脚、电平转换器方向及上下电顺序。SDA和SCL是开漏总线,必须确认上拉接到正确电压域;多组上拉并联后等效阻值也要重新计算。

02_I2C通信异常_硬件调试.jpg

先用波形确认电平、上升时间和协议阶段,再区分硬件边界、软件时序和从设备状态。

第二步:测总线电平与边沿

在目标器件附近同时观察SDA和SCL,检查低电平是否满足器件灌电流能力、高电平是否达到门限、上升时间是否满足所用速率。上拉电阻由电源、电平、总线电容、速率和器件能力共同决定,没有一个通用固定值。

第三步:按协议阶段定位NACK

地址阶段NACK优先检查地址、读写位、设备是否完成启动;数据阶段NACK则看寄存器访问规则、忙状态和写周期。还要确认控制器是否支持目标设备的时钟拉伸、重复起始和总线空闲时间。

第四步:处理SDA被持续拉低

先确定是哪一个器件在拉低总线,再结合复位和掉电隔离验证。某些设备在传输被中断后仍等待剩余时钟,可按控制器和器件手册实施总线恢复,再产生停止条件;不能未经验证就固定发送某个次数的脉冲作为万能方案。

第五步:构造最差工况复测

覆盖最高速率、最多节点、最长线缆、温度、电压和上下电次序,并记录错误前后的完整波形与软件日志,确认修复不是单纯提高重试次数。

可直接使用的参考回答

我会先检查电源、复位、地址脚和电平转换,确认SDA、SCL上拉到正确电压域。随后在目标器件端抓两条线的波形,测低电平、高电平和上升时间,并结合总线电容、速率和灌电流能力判断上拉是否合理。

协议上我会定位NACK发生在地址还是数据阶段,检查启动等待、写周期、重复起始和时钟拉伸。如果SDA被拉低,先找出拉低总线的器件,再按器件与控制器手册做恢复或复位。最后在最差负载和上下电条件下复测,而不是只靠软件重试。

面试官可能继续追问

  1. 上拉电阻越小越好吗?
    不是,过小会增加低电平灌电流,可能导致低电平超限或功耗增加。

  2. NACK一定是硬件坏了吗?
    不是,地址错误、设备忙、启动未完成和访问顺序不符都可能产生NACK。

  3. 逻辑分析仪够不够?
    协议定位方便,但判断边沿、电平和振铃仍需要模拟带宽合适的示波器。

  4. 软件重试能算修复吗?
    只有在协议允许的偶发忙状态且有边界控制时才合理,不能掩盖电气问题。

容易失分的表达

“I²C不通就用4.7k上拉。”——没有电压、速率和总线电容条件。

“NACK就是从设备坏了。”——没有定位协议阶段。

“总线卡死就一直复位主控。”——未确定拉低线的设备和恢复机制。

面试前准备动作

  • 准备一张正常与上升过慢的I²C波形对比。

  • 复习起始、地址、应答、重复起始和停止条件。

  • 整理一个总线恢复与复测案例。

参考资料

NXP:I²C-bus Specification and User Manual

Texas Instruments:I²C Bus Pullup Resistor Calculation

核心关键词:I2C通信异常、I2C NACK、总线卡死、上拉电阻、硬件工程师面试、I2C上升时间


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
开班信息