I2C全称是Inter-Integrated Circuit的缩写,即串行外围设备接口。
I2C是一种低速的(一般为100kHz-3.4MHz)、半双工、同步的、串行的、多对多通信协议,在芯片的管脚上只占用两根线(串行数据线(SDA)和串行时钟线(SCL));
SCL与SDA同时接了上拉电阻和电源,则信号线的逻辑0级别高于逻辑1,若主机要和从机通信的话SDA数据线上应为低电平,使用完总线之后应当释放总线,将SDA信号置1.
主要应用在微控制器和各类外围设备之间的通信,例如传感器、LCD显示器、EEPROM、PMIC等。
针对特性解释说明如下:
单工/半双工/全双工
单工:允许数据在一个固定方向上传输
半双工:允许数据在同一时刻单向传输(即同一时刻只能接收或发送)
全双工:允许数据在同一时刻沿两个方向传输(即同一时刻同时接收发送)
同步/异步
异步(字符间同步。字符内比特位异步):异步又称起止式异步通信,以字符为单位进行传输,字符间没有时间间隔要求,而每个字符中的位则以固定的时间传送。
在异步通信中,收发双方取得同步是通过在字符格式中设置起始位和停止位的方法来实现,发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,可以互不同步
同步(比特位同步):指在约定的速率下,发送端和接收端的时钟信号频率、相位始终保持一致。
在同步通信中,始终保持精确的同步时钟,即发送时钟和接收时钟要严格的同步(常用的做法是两个设备使用同一个时钟源)
串行/并行
串行:传输数据按顺序依次按位进行传输
并行:与串行通信相对,通过多条传输线,可以同时传输多个bit位的信号
支持时钟速率:标准模式(100kHz)、快速模式(400kHz)、高速模式(3.4MHz)
多对多
支持多个主设备和多个从设备连接在同一总线上
I2C总线结构
在I2C总线上,每个从设备都有一个唯一的地址,主设备(谁控制时钟线SCL谁就是主设备)通过发送该地址来选择与其通信的从设备。
I2C时序
注意:SDA线上的数据在SCL时钟“高”期间必须是稳定的,当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。
起始信号(S):当SCL为高电平时,SDA从高电平变为低电平
停止信号(P):当SCL为高电平时,SDA从低电平变为高电平
应答信号(ACK):上拉电阻影响下SDA默认为高,而从机拉低SDA就是确认收到数据即ACK(从机拉低SDA),否则NACK
I2C地址格式
多数从设备的地址为7位或10位,一般用7位。
1、7-Bit Addressing Format
起始信号(第0位)+从机的地址(第1~7位)+读写位(第8位)+ACK(应答位)+Data(第一个字节)+ACK(应答位)+...(n个Data)...+ACK(应答位)+停止位
2、10-Bit Addressing Format
写操作
主机向从机写数据
1、主机产生START信号,发送一个从机地址,地址一般有7位/10位,紧接着就是R/W位(主机发送数据(写):0;主机接收数据(读):1)
2、主机发送地址后,总线上的每个从机将主机的发送的地址码与自己的地址进行比较,相同则认为自己正在被主机寻址,根据R/W位自己确定为发送器/接收器,发送应答信号(ACK)。
3、主机端等到从机的应答信号(ACK)后,发送要访问从机的地址,继续等待从机的应答信号
4、主机端等到从机的应答信号(ACK)后,发送N个字节的数据,继续等待从机的N次应答信号
5、主机端产生STOP信号,结束传送过程
读操作
主机向从机读数据
1、主机产生START信号,发送一个从机地址,地址一般有7位/10位,紧接着就是R/W位(W)
2、主机发送地址后,总线上的每个从机将主机的发送的地址码与自己的地址进行比较,相同则认为自己正在被主机寻址,根据R/W位自己确定为发送器/接收器,发送应答信号(ACK)。
3、主机端等到从机的应答信号(ACK)后,发送要访问从机的地址,继续等待从机的应答信号
4、主机端等到从机的应答信号(ACK)后,主机改变通信模式(主机端将由发送转换为接收,从机端将由接收转换为发送),故主机端重新发送一个START信号,从机地址,R/W位(R),表明将主机设置成接收模式开始读取数据。
5、主机端等到从机的应答信号(ACK)后,接收1个字节的数据, 回应应答信号接收下一个字节的数据,直至接收完成后,发送非应答信号(NACK),表示不再接收数据
6、主机端产生STOP信号,结束传送过程
软件I2C & 硬件I2C
软件I2C:用单片机的两个IO端口模拟出来的I2C,用软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的工作方式。
硬件I2C:硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,使用的I2C管脚也是专用的,硬件I2C直接调用内部寄存器进行配置。
硬件I2C效率高于软件I2C,软件I2C不受管脚限制,接口比较灵活。