参考资料:大部分均引用b站江协科技课程、GPT及网络资料
什么是IIC(i2C)通讯协议?
关键字:SCL、SDA、半双工、同步、串行。
IIC(Inter-Integrated Circuit),也称为I2C(Inter-Integrated Circuit),是一种由Philips公司(现为NXP)开发的用于在集成电路之间进行短距离通信的串行总线协议。IIC协议非常适合低速设备之间的数据传输,具有简单、低成本和易于实现的特点。
其中有几个问题:为什么是短距离?什么是串行总线?这个等学完概念后再进行解答。
概念:
IIC总线基本特性
-
双线结构:IIC总线采用两根双向线路进行通信:
- SCL(串行时钟线):由主设备产生的时钟信号,用于同步数据传输。
- SDA(串行数据线):用于传输数据,数据在时钟信号的控制下进行传输。
-
多主从结构:支持总线挂载多设备(一主多从、多主多从)。每个设备都有一个唯一的地址。
-
地址分配:IIC设备使用7位或10位地址来唯一标识每个设备。在传输数据时,主设备通过地址帧选择目标从设备。
-
同步,半双工
数据传输
- 数据帧:每次传输的数据帧由8位数据组成,从高位(MSB)到低位(LSB)传输。
- 应答位(Acknowledge Bit):在每个数据帧传输之后,由接收方发送一个应答位。若应答位为低电平,表示接收成功;若应答位为高电平,表示接收失败。
数据读写过程
-
写操作:
- 主设备发送起始条件。
- 主设备发送从设备地址以及读写控制位(0表示写,1表示读)。
- 从设备发送应答位。
- 主设备发送要写入的数据。
- 从设备发送应答位。
- 重复数据传输和应答,直到所有数据传输完毕。
- 主设备发送停止条件。
-
读操作:
- 主设备发送起始条件。
- 主设备发送从设备地址以及读写控制位。
- 从设备发送应答位。
- 主设备切换到接收模式,读取数据。
- 主设备发送应答位。
- 重复数据读取和应答,直到所有数据读取完毕。
- 主设备发送停止条件。
IIC时序:
1.起始和终止
起始条件:SCL高电平期间,SDA从高电平切换到低电平
终止条件:SCL高电平期间,SDA从低电平切换到高电平
2.发送和接收
发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节
接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
3.应答
发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答
接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)
了解了这些基本知识,再回到开头,IIC其只需要两根线控制,一根时钟线(SCL)控制同步,一根数据线(SDA)传输数据,因为只有一根数据线,数据逐个传输,因此是串行通讯。
其中还提到了半双工,这里来解释下:
半双工:数据可以在两个方向上传输,但不能同时进行,如iic,rs485
全双工:数据可以在两个方向上同时进行传输。发送和接收可以同时进行,不会互相干扰,
如RS-232。
单工:数据只能在一个方向上传输。发送方只能发送,接收方只能接收,如电视广播。
iic在长距离的环境中,容易受到干扰造成电平跳变,会严重影响数据的准确性,且IIC协议依赖于时钟线(SCL)和数据线(SDA)的同步工作。长距离可能导致信号延迟不一致,因此其适合短距离通讯。