I2C常见问题总结

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() 屏蔽可屏蔽中断

  • 1
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值