(一)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。
|