I2C(Inter-Integrated Circuit),有时也称为IIC或TWI(Two-Wire Interface),是一种用于低速度串行通信的总线协议,主要用于连接微控制器与其外围设备,如传感器、EEPROM、RTC(实时时钟)等。I2C 由飞利浦半导体(现今的恩智浦半导体)在1980年代初期开发。
I2C 通信仅需两根线:
SDA(Serial Data):数据线,用于数据的双向传输。
SCL(Serial Clock):时钟线,用于同步信号。
I2C 协议的特点包括:
主从架构:
在I2C总线上,任何设备都可以是主设备或从设备。主设备负责生成时钟信号和控制总线,而从设备接收主设备的指令。通常,微控制器充当主设备的角色。
支持多主设备和多从设备:
I2C 总线允许多个主设备和多个从设备共存,每个设备都有唯一的地址。在多主模式下,各主设备需要通过一定的仲裁机制来协调对总线的访问。
地址和数据传输:
在I2C通信中,数据传输是通过发送设备地址加读写位开始的,随后跟随的是数据传输。如果有多个从设备,主设备通过地址来指定与之通信的从设备。
同步:
I2C是一种同步协议,意味着数据的传输是由时钟信号(SCL线)来控制的。
I2C 协议的优点是简单、成本低且灵活,只需两根线就能连接多个设备。不足之处是速度相比SPI和UART较慢,且总线长度有限制,随着连接的设备数量增加,可能会影响通信速度和可靠性。
一、IIC的通信流程
启动信号:
通信开始时,主设备发出启动信号。这通过将数据线(SDA)从高电平拉低,而时钟线(SCL)保持在高电平来实现。这个动作通知所有从设备主设备即将开始通信。
发送设备地址及读写位:
紧接着启动信号,主设备发送从设备的地址以及操作位(读/写)到数据线上。每个从设备都有一个唯一的地址。读写位决定了操作是读数据(通常设为1)还是写数据(通常设为0)。
从设备应答:
地址和读写位发送完毕后,被寻址的从设备需要通过发送一个应答信号(ACK)来响应。应答信号是在数据线(SDA)上产生一个低电平信号,同时时钟线(SCL)为高电平。
数据传输:
成功建立连接和从设备应答之后,数据可以开始传输。数据是按字节传输的,每传输完一个字节后,接收方(无论是主设备还是从设备)都需要发送一个应答信号(ACK)。
停止信号:
数据传输完成后,主设备发出一个停止信号来终止通信。这通过将数据线(SDA)从低电平拉高,而时钟线(SCL)保持在高电平来实现,标志着一次I2C交流的结束。
二、发送1bit数据的流程
主设备首先确保时钟线SCL处于高电平状态。
然后,主设备会将要发送的比特数据设置在数据线SDA上。如果发送的是‘1’比特,SDA线会被设置为高电平;如果发送的是‘0’比特,SDA线会被设置为低电平。SDA线上的数据必须在SCL线的一个时钟脉冲开始之前稳定。
在数据线SDA稳定后,主设备通过将时钟线SCL从高电平拉低到低电平,来通知从设备数据线上的数据可以被读取。从设备在SCL线为高电平的时候读取SDA线上的数据。
完成这个数据位的传输后,主设备通常会将时钟线SCL恢复到高电平,准备发送下一个比特或产生一个停止条件以结束通信。
重要的是,在SCL线为高电平期间,数据线SDA上的数据必须保持稳定,因为任何在SCL高电平时的SDA变化都可能被视为控制信号(例如启动或停止条件)。
三、IIC需要外接上拉电阻
I2C总线的设计是开漏(open-drain)或开集(open-collector)输出,这意味着连接到总线的设备能够将总线拉低到地(GND),但是不能将总线推高至电源电压(Vcc)。
上拉电阻的作用主要包括以下几点:
提供拉高电平:
设备将总线释放时,上拉电阻将SDA和SCL线拉高到正逻辑电平(通常是Vcc),确保线路在非驱动状态时为高电平。
限制电流:
当总线设备将SDA或SCL线拉低时,上拉电阻起到限流的作用,防止电流过大导致设备损坏。
防止总线冲突:
多个设备可能会同时尝试控制总线。由于开漏设计,任何设备都可以安全地将总线拉低而不会对其他设备造成伤害。上拉电阻确保了在这种情况下不会出现短路。
增强信号完整性:
上拉电阻也有助于维护信号的完整性,减少因为长线路或者其他电气特性引起的信号退化。
选择合适的上拉电阻值是很重要的。电阻值太大,电流太小,导致总线拉高速度变慢,影响通信速率;电阻值太小,可能导致电流过大,浪费功率,且拉低总线时可能会对设备造成损害。通常,上拉电阻的选择取决于总线容量(总线上设备的数量和总线长度)和系统工作的电源电压。常见的电阻值范围从1.8kΩ到10kΩ不等。
全部0条评论
快来发表一下你的评论吧 !