I2C总线
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要串行数据线SDA,串行时钟线SCL即可在连接于总线上的器件之间传送信息。SDA,SCL连接到总线的器件间传递信息 每个器件都有一个唯一的地址识别,而且都可以作为一个发送器或接收器.
I2C总线术语
I2C 总线术语的定义
术语 描述
发送器 : 发送数据到总线的器件
接收器 : 从总线接收数据的器件
主机 : 初始化发送 产生时钟信号和终止发送的器件
从机 : 被主机寻址的器件
多主机 : 同时有多于一个主机尝试控制总线 但不破坏报文
仲裁 : 是一个在有多个主机同时尝试控制总线 但只允许其中一个控制总线并使报文不被破坏
的过程
同步 : 两个或多个器件同步时钟信号的过程
主机从机发送接收数据:主机A,从机B。
A寻址B,A发送器发送数据到B,B接收器从A接收数据,A终止传输。
如果两个或多个主机尝试发送信息到总线 在其他主机都产生 0 的情况下 首先产生一个 1 的
主机将丢失仲裁。
I2C总线总体特征
SDA 线上的数据必须在时钟的高电平周期保持稳定 数据线的高或低电平状态只有在 SCL 线的时钟
信号是低电平时才能改变,数据传输速率,标准100kbit/s,快速模式。400kbit/s,高速模式3.4mbit/s。
SDA数据只有在时钟高电平可以改变,SDA的电平只有在SCL在低电平是才能改变。
起始状态S,SCL在高电平,SDA从高电平到低电平转换。
停止状态P,SCL在高电平,SDA从低电平到高电平的转换
传输数据
SDA上的每个数据必须是8位,后面跟一个响应位,数据传输必须带响应 相关的响应时钟脉冲由主机产生 在响应的时钟脉冲期间 发送器释放 SDA 线,在响应的时钟脉冲期间 接收器必须将 SDA 线拉低 使它在这个时钟脉冲的高电平期间保持稳定的低电平 。从机不能响应从机地址时,从机事数据线保持高电平,主机产生一个停止条件停止传输或者重新开始新的传输。如果从机 接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节 主机必须再一次终止传输 这个情况用从机在第一个字节后没有产生响应来表示 从机使数据线保持高电平 主机产生一个停止或重复起始条件。如果传输中有主机接收器 它必须通过在从机不产生时钟的最后一个字节不产生一个响应 向从机发送器通知数据结束 从机 发送器必须释放数据线 允许主机产生一个停止或重复起始条件
仲裁和时钟发生
先进入高电平的器件要等待所有低电平的器件一起进入高电平,而只要有一个进入低电平,所有器件就会进入低电平,所以产生的同步 SCL 时钟的低电平周期由低电平时钟周期最长的器件决定 而高电平周期由高电平时钟周期最短的器件决定。
主机只能在总线空闲的时侯启动传输 ,当 SCL 线是高电平时 仲裁在 SDA 线发生。仲裁可以持续多位 它的第一个阶段是比较地址位, 如果每个主机都尝试寻址相同的器件 仲裁会继续比较数据位 ,或者比较响应位