概念
IIC(Inter-Integrated Circuit)是IICBus简称,中文应该叫集成电路总线,它是一种串行通信总线。I2C是一个多主机的总线,每个设备既可以当主控器 或被控器,又可作为发送器或接收器,一条总线上可 以有多个主机,但同一时刻只允许一个主机工作。
每个支持i2c总线的设备,它都会有一个可以代表自己的地址。这个地址是唯一的,用7位或10位 来表示,在出厂时已经确定固化。
I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
为了避免总线信号的混乱,要求各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出。总线空闲时,因各设备都是开漏输出,上拉电阻Rp使SDA和SCL线都保持高电平。任一设备输出的低电平都将使相应的总线信号线变低,也就是说:各设备的SDA是“与”关系,SCL也是“与”关系。
由于连接到 I2C 总线的器件有不同种类的工艺 CMOS NMOS 双极性 逻辑 0 低 和 1
高 的电平不是固定的 它由 VDD 的相关电平决定 。每传输一个数据位就产生一个时钟脉冲。
特性
(1)SDA 和 SCL 都是双向线路 都通过一个电流源或上拉电阻连接到正的电源电压 见图 3
数据传输
- 数据有效性:
SDA 线上的数据必须在时钟的高电平周期保持稳定,数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变。
- 起始和停止条件:
起始(S):当 SCL 线是高电平时 SDA 线从高电平向低电平切换,表示起始条件
终止(P):当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示停止条件
起始和停止条件一般由主机产生 总线在起始条件后被认为处于忙的状态 在停止条件的某段时间后总线被认为再次处于空闲状态。
如果连接到总线的器件合并了必要的接口硬件 那么用它们检测起始和停止条件十分简便,但是 没有这种接口的微控制器在每个时钟周期至少要采样 SDA 线两次来判别有没有发生电平切换;
- 字节格式
发送到SDA线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制,每个字节后必须跟一个响应位。首先传输的是数据的最高位 MSB,见图 6 。采用电平触发。
如果从机要完成一些其他功能后 例如一个内部中断服务程序, 才能接收或发送下一个完整的数据字节,可以使时钟线 SCL 保持低电平迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线 SCL 后 数据传输继续。
- 响应
数据传输必须带响应,相关的响应时钟脉冲由主机产生,在响应的时钟脉冲期间,发送器释放 SDA 线(高)。通常,被寻址的接收器在接收到的每个字节后,除了用 CBUS 地址开头的报文,必须产生一个响应。
在响应的时钟脉冲期间 接收器必须将 SDA 线拉低 使它在这个时钟脉冲的高电平期间保持稳定的低电平 见图 7
- 写数据
- 读数据
仲裁
- 同步
所有主机在 SCL 线上产生它们自己的时钟来传输 I2C 总线上的报文,数据只在时钟的高电平周期有效,因此需要一个确定的时钟进行逐位仲裁。
同步 SCL 时钟的低电平周期由低电平时钟周期最长的器件决定 而高电平周期由高电平
时钟周期最短的器件决定。