• 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL
• 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地
址 主机可以作为主机发送器或主机接收器
• 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁
防止数据被破坏
• 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速
模式下可达 3.4Mbit/s
• 片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整
• 连接到相同总线的 IC 数量只受到总线的最大电容 400pF 限制
Q
I2C 总线支持任何 IC 生产过程 NMOS CMOS 双极性 两线――串行数据 SDA 和串行时钟
SCL 线在连接到总线的器件间传递信息 每个器件都有一个唯一的地址识别 无论是微控制器 LCD
驱动器 存储器或键盘接口 而且都可以作为一个发送器或接收器 由器件的功能决定 很明显 LCD
驱动器只是一个接收器 而存储器则既可以接收又可以发送数据 除了发送器和接收器外 器件在执行数
据传输时也可以被看作是主机或从机 见表 1 主机是初始化总线的数据传输并产生允许传输的时钟信号
的器件 此时 任何被寻址的器件都被认为是从机
术语 描述
发送器/ 发送数据到总线的器件
接收器 /从总线接收数据的器件
主机 /初始化发送 产生时钟信号和终止发送的器件
从机 /被主机寻址的器件
多主机 /同时有多于一个主机尝试控制总线 但不破坏报文
仲裁 /是一个在有多个主机同时尝试控制总线 但只允许其中一个控制总线并使报文不被破坏的过程
同步 /两个或多个器件同步时钟信号的过程
Q
这突出了 I2C 总线的主机 从机和接收器 发送器的关系 应当注意的是 这些关系不是持久的 只
由当时数据传输的方向决定 传输数据的过程如下
1 假设微控制器 A 要发送信息到微控制器 B
• 微控制器 A 主机 寻址微控制器 B 从机
• 微控制器 A 主机 发送器 发送数据到微控制器 B 从机 接收器
• 微控制器 A 终止传输
2 如果微控制器 A 想从微控制器 B 接收信息
• 微控制器 A 主机 寻址微控制器 B 从机
• 微控制器 A 主机 接收器 从微控制器 B 从机 发送器 接收数据
• 微控制器 A 终止传输
甚至在这种情况下 主机 微控制器 A 也产生定时而且终止传输
Q
连接多于一个微控制器到 I2C 总线的可能性意味着超过一个主机可以同时尝试初始化传输数据 为了
避免由此产生混乱 发展出一个仲裁过程 它依靠线与连接所有 I2C 总线接口到 I2C 总线
如果两个或多个主机尝试发送信息到总线 在其他主机都产生 0 的情况下 首先产生一个 1 的
主机将丢失仲裁 仲裁时的时钟信号是用线与连接到 SCL 线的主机产生的时钟的同步结合 关于仲裁的更
详细信息请参考第 8 章
总体特征
SDA 和 SCL 都是双向线路 都通过一个电流源或上拉电阻连接到正的电源电压 见图 3 当总线空
闲时 这两条线路都是高电平 连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功
能 I2C 总线上数据的传输速率在标准模式下可达 100kbit/s 在快速模式下可达 400kbit/s 在高速模式下
可达 3.4Mbit/s 连接到总线的接口数量只由总线电容是 400pF 的限制决定 关于高速模式主机器件的信息
请参考第 13 章
6.2 起始和停止条件
在 I2C 总线中 唯一出现的是被定义为起始 S 和停止 P 条件 见图 5 的情况
其中一种情况是在 SCL 线是高电平时 SDA 线从高电平向低电平切换 这个情况表示起始条件
当 SCL 是高电平时 SDA 线由低电平向高电平切换表示停止条件
Q
起始和停止条件一般由主机产生 总线在起始条件后被认为处于忙的状态 在停止条件的某段时间后
总线被认为再次处于空闲状态 总线的空闲状态将在第 15 章详细说明
传输数据
7.1 字节格式
发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟
一个响应位 首先传输的是数据的最高位 MSB 见图 6
如果从机要完成一些其他功能后 例如一个
内部中断服务程序 才能接收或发送下一个完整的数据字节 可以使时钟线 SCL 保持低电平迫使主机进入
等待状态 当从机准备好接收下一个数据字节并释放时钟线 SCL 后 数据传输继续
7.2 响应
数据线低电平时产生应答,可继续发送,不然应为高电平,主机产生结束条件
数据传输必须带响应 相关的响应时钟脉冲由主机产生 在响应的时钟脉冲期间 发送器释放 SDA 线(高)
在响应的时钟脉冲期间 接收器必须将 SDA 线拉低 使它在这个时钟脉冲的高电平期间保持稳定的低
电平 见图 7 当然 必须考虑建立和保持时间 (在第 15 章详细说明)
通常 被寻址的接收器在接收到的每个字节后 除了用 CBUS 地址开头的报文 必须产生一个响应( 见10.1.3 节)
如果从机 接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节 主机必须再一次
终止传输 这个情况用从机在第一个字节后没有产生响应来表示 从机使数据线保持高电平 主机产生一
个停止或重复起始条件
如果传输中有主机接收器 它必须通过在从机不产生时钟的最后一个字节不产生一个响应 向从机
发送器通知数据结束 从机 发送器必须释放数据线 允许主机产生一个停止或重复起始条件
8 仲裁和时钟发生
8.1 同步
所有主机在 SCL 线上产生它们自己的时钟来传输 I2C 总线上的报文 数据只在时钟的高电平周期有效
因此 需要一个确定的时钟进行逐位仲裁
时钟同步通过线与连接 I2C 接口到 SCL 线来执行。 这就是说 SCL 线的高到低切换会使器件开始数它
们的低电平周期 而且一旦器件的时钟变低电平 它会使 SCL 线保持这种状态直到到达时钟的高电平 见
图 8 但是 如果另一个时钟仍处于低电平周期 这个时钟的低到高切换不会改变 SCL 线的状态 因此
SCL 线被有最长低电平周期的器件保持低电平 此时 低电平周期短的器件会进入高电平的等待状态
8.2 仲裁
主机只能在总线空闲的时侯启动传输 两个或多个主机可能在起始条件的最小持续时间 tHD;STA 内
产生一个起始条件 结果在总线上产生一个规定的起始条件
当 SCL 线是高电平时 仲裁在 SDA 线发生 这样 在其他主机发送低电平时 发送高电平的主机将
断开它的数据输出级 因为总线上的电平与它自己的电平不相同
仲裁可以持续多位 它的第一个阶段是比较地址位 有关的寻址信息请参考第 10 章和第 14 章 如
果每个主机都尝试寻址相同的器件 仲裁会继续比较数据位 如果是主机 发送器 或者比较响应位 如
果是主机 接收器 因为 I2C 总线的地址和数据信息由赢得仲裁的主机决定 在仲裁过程中不会丢失信息
丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾
由于 Hs 模式的主机有一个唯一的 8 位主机码 因此一般在第一个字节就可以结束仲裁 见第 13 章
由于 I2C 总线的控制只由地址或主机码以及竞争主机发送的数据决定 没有中央主机 总线也没有任
何定制的优先权。
必须特别注意的是 在串行传输时 当重复起始条件或停止条件发送到 I
2
C 总线的时侯 仲裁过程仍
在进行 如果可能产生这样的情况 有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件
也就是说 仲裁在不能下面情况之间进行
• 重复起始条件和数据位
• 停止条件和数据位
• 重复起始条件和停止条件
从机不被卷入仲裁过程
8.3 用时钟同步机制作为握手
时钟同步机制除了在仲裁过程中使用外 还可以用于使能接收器处理字节级或位级的快速数据传输
在字节级的快速传输中 器件可以快速接收数据字节 但需要更多时间保存接收到的字节或准备另一
个要发送的字节 然后 从机以一种握手过程 见图 6 在接收和响应一个字节后使 SCL 线保持低电平
迫使主机进入等待状态 直到从机准备好下一个要传输的字节
在位级的快速传输中 器件 例如对 I
2
C 总线有或没有限制的微控制器 可以通过延长每个时钟的低
电平周期减慢总线时钟 从而 任何主机的速度都可以适配这个器件的内部操作速率
在 Hs 模式中 握手的功能只能在字节级使用 见第 13 章
9.7 位的地址格式
数据的传输遵循图 10 所示的格式 在起始条件 S 后 发送了一个从机地址 这个地址共有 7 位
紧接着的第 8 位是数据方向位 R/ W 0 表示发送 写 1 表示请求数据 读 数据传输一般
由主机产生的停止位 P 终止 但是 如果主机仍希望在总线上通讯 它可以产生重复起始条件 Sr
和寻址另一个从机 而不是首先产生一个停止条件 在这种传输中 可能有不同的读 写格式结合
可能的数据传输格式有
• 主机 发送器发送到从机 接收器 传输的方向不会改变 见图 11
• 在第一个字节后 主机立即读从机 见图 12 在第一次响应时 主机 发送器变成主机 接收
器 从机 接收器变成从机 发送器 第一次响应仍由从机产生 之前发送了一个不响应信号 \A
的主机产生停止条件
• 复合格式 见图 13 传输改变方向的时侯 起始条件和从机地址都会被重复 但 R/\ W 位取反
如果主机接收器发送一个重复起始条件 它之前应该发送了一个不响应信号 \A