嵌入式调试I2C通信时,经常卡在循环等待从机应答的死循环里,反复检查电路确认上拉电阻已经焊好,还是通信失败。问题不全是上拉电阻的锅,很多隐性细节没处理好就会导致无应答。

1. 上拉电阻阻值不匹配
上拉电阻选得太大,总线上升沿速度太慢,超过I2C协议规定的时序阈值。
总线电平无法在规定时间内拉高到识别阈值,主机会误判从机没有发出应答信号。
2. 从机地址配置冲突
代码里写的7位从机地址,和硬件芯片手册标注的地址偏移了一位。
主机发送的地址和从机实际地址完全不匹配,从机根本不会响应,主机自然收不到应答。
3. GPIO模式配置错误
把I2C引脚配置成了推挽输出模式,而不是开漏输出模式。
两个推挽引脚直接对拉,总线电平被强制钳位,无法正常完成双向应答握手。
4. 硬件隐性故障排查
用示波器抓总线波形,确认SDA和SCL的上升沿时间在规定范围内。
核对从机供电引脚电压,部分传感器供电不足时,会完全不响应I2C指令,导致主机一直卡等待应答。
本文凡亿教育原创文章,转载请注明来源!
暂无评论