1 基本介绍
I2C (Inter-Integrated Circuit)。内部集成电路。拥有两根线,一根数据线SDA和一根时钟线SCL。 这两条线都是漏极开路或者集电极开路结构,使用时需要外加上拉电阻,可以挂载多个设备。每个接到I2C总线上的器件都有唯一的地址。其中,主动发起操作的一方为主机,另外一方为从机。I2C规定通信时的时钟,起始信号,停止信号只能由主机产生。 示意图如下 连接到相同总线上的IC数量只受总线最大电容400pF的限制,最多可挂112个设备,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。I2C是半双工模式。
2 特点
- 只使用两条信号线,传输距离短
- 支持多主机多从机
- 有应答机制
- 极低的电流消耗.抗高噪声干扰。
- 速率比SPI慢。
- IIC 是多主设备的总线
3 硬件连接
EEPROM一般与I2C连接,下面是常用的一种连接方式。 SCL、SDA的上拉电阻由这两个引脚的灌电流决定,保证其高低电平都满足要求。 犹豫I2C通信速率比较慢,所以在与CPU连接时,可用GPIO模拟,比较灵活。
4 通信
4.1 控制器
STM32的I2C控制器框图如下:
4.2 协议
I2C协议包括以下状态:
- 空闲状态:SDA\SCL均为高电平,总线空闲
- 开始信号:SCL为高电平,SDA的电平由高跳到低表示开始信号。
- 终止信号:SCL为高电平,SDA的电平由低跳到高表示终止信号。
- 应答信号:接收器反馈应答信号,应答信号为低电平,则为有效应答位,表示成功接收。
- 数据有效性
- 数据传输
IIC协议规定:
- 每一支IIC设备都有一个唯一的七位设备地址;
- 数据帧大小为8位的字节;
- 数据(帧)中的某些数据位用于控制通信的开始、停止、方向(读写)和应答机制。
- IIC协议标准规定发起通信的设备称为主设备,主设备发起一次通信后,其它设备均为从设备。
- 总线上有1个主设备和多个从设备,当一个从设备响应后,其他从设备不能进行通信。
当没有数据传输的时候,两根总线都为高电平;数据传输开始时,需要发送一个起始信号;数据传输结束后,需要发送一个终止信号;每8bit数据传输结束,都需要一个ACK。起止信号都由Master发出,而ACK则可能由Master或者SLAVE来发出。
ACK和NACK 数据传输时先传MSB(most significant bit)最高有效位。接收者在每个字节后的第9个时钟周期将SDA保持低电平进行确认数据接收成功;而在第9个时钟周期将SDA保持高电平表示数据传输出错,或者主机不再想接收数据。
主机给从机写数据的过程如下: 主机从从机读数据过程如下:
5 SPI VS I2C
- SPI使用线多,硬件资源占的多
- SPI全双工,所以传的快,通常能达到甚至超过10 Mbps,而I2C最快3.4 Mbps。
- SPI适合数据流应用,而IIC更适合“字节设备”的多设备应用。
|