I2C常见问题总结

本文围绕STM32的I2C通信展开,介绍了IIC软件模拟时序。详细阐述了7种常见i2c问题的排查方法,包括波形抓取、检测上拉电阻、配置输出模式、从机地址移位、检查stretch机制、考虑中断打断以及查看硬件地址选择等,以保障i2c通信正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IIC软件模拟时序,请参考链接: IIC软件模拟时序-stm32F系列平台通用

先看这里:引用一个资深硬件工程师的经验总结
-------------->>>: [ 7种常见 i2c 问题总结.]

(一)i2c波形抓取

在进行i2c协议检测时,必须要进行SCL、SDA的波形抓取,以便于对i2c协议进行详细的分析和问题查找定位。防止SCL、SDA两根线交叉反掉,避免虚焊或者短路情况的出现。
在这里插入图片描述
(1)示波器:需要支持i2c协议解码decoder的高级示波器
(2)逻辑分析仪:当示波器无法满足使用时,使用PC端的逻辑分析仪专业软件,焊出SCL、SDA、GND 3条根线,连接到逻辑分析仪的夹子即可在线抓取波形。
备注:逻辑分析仪同样可用于其他常见协议:i2c、Uart、Spi、CAN等

(二)检测上拉电阻

(1)检查原理图和PCB板是否有上拉的4.7K电阻
(2)因为上拉电阻影响SCL边界 rise和fall 的持续时间。在高速率通信时,SCL时钟线的上升沿和下降沿以及latch高电平锁定时间,会随着通信速率的提高而越来越严苛。

(三)SDA、SCL必须配置为开漏输出

(1)软件模拟i2c:作为SDA、SCL两个GPIO必须配置为开漏高速输出mode,注意不可配置为PP推挽模式。因为不配置为开漏输出会出现导致SCL和SDA 电压拉不到0V伏的情况,会导致输出的数据出错,同时存在短路的风险;
(2)无论是使用硬件i2c还是软件i2c,都需要注意i2c通信速率要和外设i2c速率相匹配。
(3)软件代码是否初始化GPIO设置为开漏输出open drain output,避免同一i2c总线挂在多个i2c外设时出现bus contention现象

(四)从机地址移位操作

通过第一步的波形抓取,确定从机地址是否需要移位操作

(五)检查双方是否支持i2c stretch机制

需要抓波形查看ACK,是否有clock stretch的情况出现

(六)模拟i2c需要考虑中断打断

特别注意:模拟i2c读写操作时,都要考虑被系统中的其它中断打断导致i2c的读取数据受到影响,导致读写都是0xff或者0。
解决方法:需要在i2c读写操作前屏蔽中断,完成读写后打开中断。使用 Basepri() 屏蔽可屏蔽中断

(7)查看硬件外设芯片的i2c地址选择select是否正确,是否正常接地或者VCC

使用 LM75模块的使用以及故障排查发现:
A0 A1 A2接地是错觉,其实并没有接地,只是浮空,显示0电压,然后我手碰到模块,导致A0 A1 A2变化,地址发生改变,所以才无法应答。
请添加图片描述
参考: LM75模块的使用以及故障排查

(八)i2c 总线死锁

i2c 总线死锁解决办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值