一、IIC总线概述
1、IIC总线是PHLIPS公司八十年代推出的一种 同步串行的半双工总线 ,主要用于连接整体电路。
2、IIC总线为 两线制 ,只有两条线双向信号线。数据线 SDA 、时钟线 SCL 。
3、 IIC硬件结构简单,接口连接方便,成本较低。因此在各个领域得到了广泛的应用。
4、I2C总线的传输速率在100K ~ 400K之间,部分I2C总线可以达到几兆。
5、IIC总线上一般会接两个上拉电阻,在空闲时将总线拉高,使用IIC时,GPIO引脚一般设置为开漏输出。
// 当 GPIO 引脚设置为输出模式时,上拉电阻可以提高输出信号的稳定性。上拉电阻将输出信号拉高到高电平,即使输出驱动器没有输出信号。
6、IIC是具备多主机多从机系统所需的包括总线裁决功能的高性能串行总线。
7、每个接到IIC总线上的器件都有 唯一 的地址(从机地址)。通过地址区分主机和哪个从机进行通信。
8、主机与其它器件进行数据传送时总线上发送数据的器件为发送器,总线上接收数据的器件则为接收器。
9、可以主动发起通信或结束通信的称为主机,一般为处理器; 只能被动的进行数据的收或者法的设备称为从机,一般为传感器。
10、使用IIC总线时,要将GPIO引脚设置为开漏输出。
//
1、 实现线与操作: IIC 总线是双向单总线,即数据线 SDA 和时钟线 SCL 是共享的。为了避免多个设备同时驱动总线造成冲突,需要使用开漏输出的 GPIO 引脚。当多个设备想要同时发送数据时,由于开漏输出的特性,只有输出低电平的设备才能将总线拉低,而输出高电平的设备不会影响总线状态。这样就实现了“线与”操作,即只有所有设备都输出低电平时,总线才能被拉低。
2.、提高抗干扰能力: 开漏输出的 GPIO 引脚在高电平时处于高阻态,不会主动输出电流。这样可以提高 IIC 总线的抗干扰能力,因为即使总线上存在干扰信号,也不会被放大或传播到其他设备。
3、 降低功耗: 开漏输出的 GPIO 引脚在高电平时处于高阻态,不会消耗电流。这可以降低 IIC 总线的功耗,尤其是在电池供电的设备中。
4、 兼容性: 许多 IIC 设备都使用开漏输出的 GPIO 引脚,因此使用开漏输出可以提高系统的兼容性。
二、IIC总线的时序
1、起始信号和终止信号
时钟线(SCL)-->高电平,数据线(SDA)由 高电平向低电 平发生变化,此时有 起始信号 。
时钟线(SCL)-->高电平,数据线(SDA)由 低电平向高电 平发生变化,此时有 终止信号 。
起始信号和终止信号都是由主机发出,当起始信号产生后,总线处于占线状态;当终止信号产生
后,总线处于空闲状态。
起始信号和终止信号时序图:
2、数据传输时序
(SCL高电平时要求SDA数据稳定、SCL低电平时允许SDA数据发生变化)
IIC总线进行数据传送时,时钟线(SCL)为高电平期间,数据线(SDA)上的数据必须保持稳定,只有在时钟线(SCL)为低电平期间,数据线(SDA)上的高电平或低电平状态才允许变化。
在时钟线(SCL)为低电平期间,发送器可以向数据线(SDA)上写入数据,因此数据线(SDA)上的数据在时钟线(SCL)为低电平期间可以改变。
在时钟线(SCL)为高电平期间,接收器从数据线(SDA)上读取数据,因此在时钟线(SCL)为高电平期间数据线(SDA)上的数据必须保持稳定。
一个时钟周期完成1个bit位数据的收发。
数据传输时序图:
3、字节传输和应答信号时序
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
发送器在发送完1个字节的数据之后,接收需要给发送器返回一个应答信号。
在时钟的第9个周期的低电平期间,接收器向数据线上写数据,
在时钟的第9个周期的高电平期间,发送器从数据线上读取数据,
如果读到的是低电平信号,表示应答信号,
如果读到的是高电平信号,表示非应答信号。
字节传输和应答信号时序图:
4、从机地址
I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。
主机在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)。
总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己被主机寻址,根据R/W位将自己定为发送器或接收器。
从机地址图: