IIC(Inter-Integrated Circuit,集成电路间)协议,也常被称为I2C,是一种多主机、串行计算机总线。它由Philips Semiconductor(现在的NXP Semiconductors)在1980年代初期开发,用于连接低速度外围设备到处理器和微控制器。以下是I2C协议的一些关键特点:
-
多主机能力:I2C总线允许多个主机和多个从设备连接,主机负责生成时钟信号并控制数据传输。
-
两线接口:
- SDA(Serial Data Line,串行数据线):用于传输数据。
- SCL(Serial Clock Line,串行时钟线):用于同步数据传输。
-
地址空间:I2C协议使用7位或10位地址来标识从设备,这允许在同一个总线上连接多达127(7位地址)或1023(10位地址)个不同的设备。
-
数据传输速率:
- 标准模式(Standard-mode):最高速率为100kbps。
- 快速模式(Fast-mode):最高速率为400kbps。
- 快速模式加(Fast-mode Plus):最高速率为1Mbps。
- 高速模式(High-speed mode):最高速率为3.4Mbps。
- 其他还有更高速的模式,如超高速模式(Ultra Fast-mode)等。
-
应答机制:在每次字节传输后,接收方(无论是主设备还是从设备)通过在SCL的下一个时钟脉冲期间将SDA线拉低来发送一个应答(ACK)信号。如果接收方不发送ACK信号,则表示非应答(NACK)。
-
通信流程:
- 主设备通过发送起始条件(在SCL为高电平的时候,SDA产生一个下降沿)(Start Condition)开始通信,通过发送停止条件(在SCL为高电平的时候,SDA产生一个上升沿)(Stop Condition)结束通信。
- 主设备首先发送从设备的地址,然后发送读/写位(0表示写入,1表示读取)。
- 在数据传输阶段,主设备和从设备根据需要交换数据。
-
仲裁机制:在多主机系统中,如果有多个主机同时尝试控制总线,I2C协议使用一种称为“仲裁”的机制来决定哪个主机获得总线控制权。
-
时钟拉伸:从设备可以通过在任意时钟周期内保持SCL线低电平来“拉伸”时钟,这允许从设备在需要时减慢通信速度。
-
应用场景:I2C广泛用于各种电子系统中,如传感器、EEPROM、实时时钟(RTC)、LCD控制器等低速外围设备的通信。
-
软件支持:大多数微控制器和开发环境都提供了I2C通信的库函数或硬件抽象层,简化了I2C接口的使用。
I2C协议是一种灵活且广泛使用的通信协议,特别适合于低速数据通信和空间受限的应用。它的多主机能力和简单的两线接口设计使其成为许多嵌入式系统的首选通信协议。