下面是 I 2 C 总线的一些特征
-
只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL
-
每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地 址 主机可以作为主机发送器或主机接收器
-
它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁 防止数据被破坏
-
串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速 模式下可达 3.4Mbit/s
-
片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整
- 连接到相同总线的 IC 数量只受到总线的最大电容 400pF 限制
数据的有效性
SDA 线上的数据必须在时钟的高电平周期保持稳定 数据线的高或低电平状态只有在 SCL 线的时钟 信号是低电平时才能改变
起始和停止条件
传输数据
字节格式
发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟 一个响应位 首先传输的是数据的最高位 MSB 。
响应
数据传输必须带响应 相关的响应时钟脉冲由主机产生 在响应的时钟脉冲期间 发送器释放 SDA 线(高 )
在响应的时钟脉冲期间 接收器必须将 SDA 线拉低 使它在这个时钟脉冲的高电平期间保持稳定的低电平
【小知识】在I2C的变种SCCB,SCCB是串行摄像机控制总线协议的英文名简称,相当于一个简易的I2C协议。与I2C差异在ACK位处理上。
7 位的地址格式
数据的传输遵循图 10 所示的格式 在起始条件 S 后 发送了一个从机地址 这个地址共有 7 位,紧接着的第 8 位是数据方向位 R/W 0 表示发送 写 1 表示请求数据 读 数据传输一般
由主机产生的停止位 P 终止 但是 如果主机仍希望在总线上通讯 它可以产生重复起始条件 Sr和寻址另一个从机 而不是首先产生一个停止条件 在这种传输中 可能有不同的读 写格式结合 。【补充】10 位寻址,允许使用高达1024 个额外的从机地址。
10 位寻址和7 位寻址兼容 而且可以结合使用 10 位寻址采用了保留的 1111XXX作为起始条件 S或重复起始条件 Sr 的后第一个字节的头 7 位 10 位寻址不会影响已有的 7 位寻址 有7 位和 10 位地址的器件可以连接到相同的 I2C 总线 它们都能用于 F/S 模式和 Hs 模式系统 。
尽管保留地址位 1111XXX有 8 个可能的组合 但是只有 4 个组合 11110XX用于 10 位寻址 剩下的 4个组合 11111XX保留给以后增强的 I2C 总线 。
【扩展】
每个I2C device和走线都有寄生电容的。电容主要是影响I2C上升下降时间。当寄生电容过大到会影响信号完整性的时候,总线就失效了。
虽然说I2C接口是开路(open drain)的,减小上拉电阻也可以改善上升时间,但也不能太小。电阻太小I2C的低电压就会比较高,过不了规格,所以IC管脚的低电平最大值决定了上拉电阻的最小值。此外减少上啦会有很大的漏电流。
再最后我看看Saleae Logic 上波形图