题库分类:硬件设计适合经验:0—5年难度:中高级题型:接口排查题 + 软硬件协同题
面试题
I²C设备偶发NACK,运行一段时间后SDA还可能一直被拉低,你会怎样建立排查顺序?
面试官真正想考什么
I²C问题常同时涉及开漏电气、总线负载、协议时序和设备状态。只回答“换小一点的上拉电阻”或“软件重试”都不完整,还要判断故障发生在起始、地址、数据、应答还是停止阶段。
回答思路
第一步:先确认供电、电平域和连接
检查控制器与目标器件电源、复位、地址脚、电平转换器方向及上下电顺序。SDA和SCL是开漏总线,必须确认上拉接到正确电压域;多组上拉并联后等效阻值也要重新计算。

第二步:测总线电平与边沿
在目标器件附近同时观察SDA和SCL,检查低电平是否满足器件灌电流能力、高电平是否达到门限、上升时间是否满足所用速率。上拉电阻由电源、电平、总线电容、速率和器件能力共同决定,没有一个通用固定值。
第三步:按协议阶段定位NACK
地址阶段NACK优先检查地址、读写位、设备是否完成启动;数据阶段NACK则看寄存器访问规则、忙状态和写周期。还要确认控制器是否支持目标设备的时钟拉伸、重复起始和总线空闲时间。
第四步:处理SDA被持续拉低
先确定是哪一个器件在拉低总线,再结合复位和掉电隔离验证。某些设备在传输被中断后仍等待剩余时钟,可按控制器和器件手册实施总线恢复,再产生停止条件;不能未经验证就固定发送某个次数的脉冲作为万能方案。
第五步:构造最差工况复测
覆盖最高速率、最多节点、最长线缆、温度、电压和上下电次序,并记录错误前后的完整波形与软件日志,确认修复不是单纯提高重试次数。
可直接使用的参考回答
我会先检查电源、复位、地址脚和电平转换,确认SDA、SCL上拉到正确电压域。随后在目标器件端抓两条线的波形,测低电平、高电平和上升时间,并结合总线电容、速率和灌电流能力判断上拉是否合理。
协议上我会定位NACK发生在地址还是数据阶段,检查启动等待、写周期、重复起始和时钟拉伸。如果SDA被拉低,先找出拉低总线的器件,再按器件与控制器手册做恢复或复位。最后在最差负载和上下电条件下复测,而不是只靠软件重试。
面试官可能继续追问
上拉电阻越小越好吗?
不是,过小会增加低电平灌电流,可能导致低电平超限或功耗增加。NACK一定是硬件坏了吗?
不是,地址错误、设备忙、启动未完成和访问顺序不符都可能产生NACK。逻辑分析仪够不够?
协议定位方便,但判断边沿、电平和振铃仍需要模拟带宽合适的示波器。软件重试能算修复吗?
只有在协议允许的偶发忙状态且有边界控制时才合理,不能掩盖电气问题。
容易失分的表达
“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上升时间

扫码关注





























