打印
[技术问答]

I2C常见问题

[复制链接]
793|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenci2013|  楼主 | 2023-3-14 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(一)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。


使用特权

评论回复
沙发
tpgf| | 2023-4-6 17:16 | 只看该作者
为什么iic对时序这么的挑剔呢

使用特权

评论回复
板凳
nawu| | 2023-4-7 09:50 | 只看该作者
tpgf 发表于 2023-4-6 17:16
为什么iic对时序这么的挑剔呢

这个说不好 我记得我上班的时候调试的第一个程序就是iic  那时序把我搞死了要

使用特权

评论回复
地板
aoyi| | 2023-4-7 10:29 | 只看该作者
请问 如果模拟iic在打断后 我们怎么做补救呢

使用特权

评论回复
5
zljiu| | 2023-4-7 11:42 | 只看该作者
SCL和SDA 上边的低电压必须要拉倒0V吗

使用特权

评论回复
6
gwsan| | 2023-4-7 12:10 | 只看该作者
我们在添加上拉电阻的时候 必须要给4.7K吗

使用特权

评论回复
7
tfqi| | 2023-4-7 13:30 | 只看该作者
gwsan 发表于 2023-4-7 12:10
我们在添加上拉电阻的时候 必须要给4.7K吗

楼上的可能误会了吧 上拉电阻一般4.7和10k的居多

使用特权

评论回复
8
LOVEEVER| | 2023-4-11 14:56 | 只看该作者
I2C通信过程中无法正常完成通信主要有如下原因:

2.1 数据线和时钟线都没有上拉到电源

2.2 数据线和时钟线对调了

2.3 设备地址搞错了

2.4 设备没有正常供电

2.5 通信速率过高,超过了设备支持的速率

2.6 通信时序出现问题,没有按照I2C规范进行

2.7 总线上可能有多个地址相同设备,导致通信冲突

2.8 通信初期时钟线和数据线电平不稳定,导致误触发了起始信号,从而使得通信过程无法退出,数据总线时钟处于忙碌状态。

2.9 有些I2C设备本身有写保护机制,如果此时是保护状态,那么数据是写不进去的


使用特权

评论回复
9
timfordlare| | 2023-4-15 19:40 | 只看该作者
硬件I²C模块吗              

使用特权

评论回复
10
dspmana| | 2023-4-15 19:45 | 只看该作者
通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。

使用特权

评论回复
11
chenci2013|  楼主 | 2023-4-15 19:50 | 只看该作者
单片机之间能用i2c协议通信吗

使用特权

评论回复
12
i1mcu| | 2023-4-15 19:56 | 只看该作者
上拉电阻越大波形越陡吗               

使用特权

评论回复
13
gygp| | 2023-4-15 20:02 | 只看该作者
最常见的就是时序问题,I2C的读取延时可以适当调大。

使用特权

评论回复
14
sesefadou| | 2023-4-15 20:09 | 只看该作者
I2C受干扰影响所致.               

使用特权

评论回复
15
timfordlare| | 2023-4-15 22:25 | 只看该作者
程序可能有问题,检查I2C设备地址写对了没

使用特权

评论回复
16
sanfuzi| | 2023-4-15 22:29 | 只看该作者
I2C电压不匹配如何解决               

使用特权

评论回复
17
zerorobert| | 2023-4-16 21:52 | 只看该作者
I2C为什么不能多负载               

使用特权

评论回复
18
macpherson| | 2023-4-16 21:55 | 只看该作者
IIC总线系统中,主设备是如何寻址从设备的

使用特权

评论回复
19
febgxu| | 2023-4-16 22:06 | 只看该作者
I2C的时序是比较复杂的               

使用特权

评论回复
20
earlmax| | 2023-4-16 22:09 | 只看该作者
I2C总线协议有固定的时序,不遵守这个时序,就可能造成通信失败。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

110

主题

6414

帖子

4

粉丝