I2C通信 总线结构和通信协议

I2C(Inter-Integrated Circuit)接口,有时也写作ⅡC或I²C接口,是一种串行数字总线接口。

I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。

I2C通信协议可以用普通GPIO引脚进行软件模拟。

I2C接口主要用于通信速率要求不高,以及多个器件之间通信的应用场景。


I2C总线的结构

一个器件的I2C接口只有2根信号线,即双向串行数据线SDA和时钟信号线SCL。

I2C是一种多设备总线,一根I2C总线上可以挂载多个设备。

例如,STM32F407开发板上的I2C总线通信系统如图17-1所示,它连接了两个I2C设备,一个是EEPROM器件24C02,另一个是加速度计和陀螺仪传感器芯片MPU6050
 

I2C总线有如下的特点。
● I2C总线只有两根信号线,SDA是双向串行数据线,SCL是时钟信号线,用于数据收发的同步。
● I2C总线上可以挂载多个设备,一般有一个主设备多个从设备。MCU一般作为主设备,外围器件作为从设备。在I2C通信协议中,主动发起通信的器件就是主设备,被动进行响应的器件就是从设备。
● I2C总线上每个器件有一个7位或10位的地址,主设备发起通信时,会首先发送目标设备地址,只有地址对应的从设备才会做出响应。
● I2C总线的两根信号线有上拉电阻。当I2C器件空闲时,其输出接口是高阻态。当所有设备都空闲时,I2C总线上是高电平
● I2C通信有标准模式和快速模式,标准模式传输速率为100kbit/s,快速模式传输速率为400kbit/s


 I2C总线通信协议

I2C通信总是由主机启动,每个通信过程由起始信号开始,由停止信号结束。一个数据包有8位,每个数据包后有一个应答位(ACK)或非应答位(NACK)。例如,主设备向从设备发送1字节数据的时序图,如图17-2所示。
 

●起始位:当SCL是高电平时,SDA的下跳沿就是起始位,是启动一次I2C通信的起始信号。
●停止位:当SCL为高电平时,SDA的上跳沿就是停止位,是停止一次I2C通信的结束信号。
●数据位:在SCL的一个时钟周期内传输一个数据位,当SCL为低电平时,发送设备更新SDA的电平,当SCL为高电平时,接收设备读取SDA的电平就是有效的一位数据。
●数据包:I2C数据通信一个数据包总是8位,也就是1字节的数据。
●应答信号:在发送完8位数据包后,发送设备在第9个SCL时钟周期采集接收设备的应答信号。若在SCL的第9个周期采集的SDA为低电平,就是应答信号ACK,如果采集的SDA是高电平,就是非应答信号NACK
       在一次I2C通信过程中,可以传输多字节的数据。主机启动I2C通信后,发送的第一个字节是目标设备地址,后面再发送或接收的数据由具体器件的指令定义决定。

        I2C通信协议只是定义了基本的数据传输时序,图17-2的通信时序由MCU的硬件I2C接口实现。也可以用普通GPIO引脚的输入输出模拟I2C通信时序,这就是软件模拟I2C接口。

 STM32F407的I2C接口

STM32F407芯片上有3个硬件I2C接口,记作I2C1、I2C2和I2C3,均支持I2C标准模式和I2C快速模式,还与系统管理总线(System Management Bus,SMBus)2.0兼容。STM32F407上的I2C接口具有如下特性。
●同一个I2C接口既可以工作于主模式,又可以工作于从模式。
●工作于从模式时,可以设置两个从设备地址,从而对两个从地址应答。
●使用7位或10位设备地址,还可以进行广播呼叫。
●支持不同的通信速度:标准模式传输速率为100kbit/s,快速模式传输速率为400kbit/s。
●带DMA功能的1字节缓存。
 

猜你喜欢

转载自blog.csdn.net/HJQD777/article/details/142551797