IIC通讯
灵活、方便
在单片机常用的通讯方式中,I2C是一种基于两根信号线(SCL: 时钟线,SDA:
数据线)的同步串行通信协议。由飞利浦(Philips,现为NXP)公司在1982年提出的串行通信协议。它被广泛应用于嵌入式系统和单片机中,尤其适用于在 **
多设备之间进行通信 ** 。I2C协议的设计目标是简化 ** 低速设备间 ** 的通信,并在多个设备间 共享通信总线
,减少引脚和线缆的使用。它是一种 ** 半双工 (不能同时读写) 低速 (相对) 多设备 ** 的标准通讯协议。
IIC七位寻址理论上最多可以挂128个设备(对应设备地址0~127),最高位用来确定读写,但是随着设备的添加设备地址长度和总线电气特性的限制。实际应用中,设备的数量会小于这个数。
为了防止不同器件使用的时候引脚与引脚之间短路,因此我们希望电路结构是开漏输出而不是推挽输出那种不能支持线与的结构,由于开漏输出需要一个上拉电阻来确定未使用状态下的总线电平因此通常I2C总线上会添加两个上拉电阻。其阻值根据经验和通讯速率略有调整(上拉电阻和分布电容组成RC滤波电路可能会导致信号失真)。
通
讯
结
构
I2C其通讯结构如上图,SCL和SDA都在高电平时代表着总线空闲,可以进行I2C通讯。
起始信号
当SCL为高电平时,拉低SDA(负跳变)即为I2C起始信号,此时就会开始I2C通讯(图中有误)。
数据位
在起始位之后紧随着就是7位器件地址以及1位读写位,其结构和数据位类似,需要注意的是,在SCL为高电平时候我们需要保持SDA线电平稳定,当SCL为低电平的时候,可以变换SDA的数据。
应答信号(ACK)
应答信号是I2C由接收方(主设备或从设备)发送的信号,用于确认数据是否成功接收。每次 I2C
传输一个字节的数据后,接收方都需要发送一个应答信号来通知发送方数据已经正确接收,准备好继续下一次数据传输。
在数据传输完之后,拉低SDA线即可发出应答信号,主设备可以等待应答信号来确定数据是否正确传输,这是一种保障机制。
结束信号
结束信号和起始信号类似,用来标志着I2C通讯结束。其要求是:当SCL信号线为高时,SDA从低转为高电平(正跳变)。
使
用
I2C设备的使用极广。具体使用我们需要结合设备的使用手册。在实现方式上主要有软件I2C和硬件I2C两类区别。前者利用单片机IO口翻转来模拟I2C的通讯时序,这种方式就是软件I2C。它的优点在于灵活的引脚使用,普通的IO口既可以实现。
但是同样的缺点也有很多,软件I2C的GPIO翻转不能过快,芯片对于上升沿和下降沿的时间是有规定的,如果翻转速度过快则会导致I2C通讯失败,因此时常出现在移植软件I2C的时候需要微调软件I2C的时序,适当的延时使其符合通讯条件。
并且软件I2C需要依靠CPU实现逻辑行为,且数据传输速度大大不如硬件I2C,因此在高速率场合例如屏幕刷新等领域效率极低。
“硬件I2C”通常指的是微控制器(MCU)或其他硬件平台内建的专门用于处理I2C通信的硬件模块。硬件I2C模块能够支持较高的速率(通常为100kHz、400kHz、1MHz等),在处理数据时的延迟较低。但是引脚灵活性比较低,通常是固定的引脚。
NEWS
点击蓝字 关注我们 NEWS TODAY
下期介绍:OLED中的I2C通讯