目录
I2C 总线协议概述
参数总结
I2C 的工作原理
寻址
读/写位
数据帧
I2C数据传输的步骤
具有多个从机的单个主机
具有多个从机的多个主机
I2C的优缺点
优点
缺点
I2C 总线广泛应用在 OLED 显示器、气压传感器或陀螺仪/加速度计模块的项目。
I2C结合了SPI和UART的最佳功能。使用I2C,可以将多个从机连接到单个主机(如SPI),并且可以让多个主机控制单个或多个从机。当希望有多个微控制器将数据记录到单个存储卡或将文本显示到单个LCD时,这非常有用。
与UART通信一样,I2C仅使用两根线在设备之间传输数据:
SDA(串行数据):主机和从机发送和接收数据的线路。
SCL(串行时钟):传输时钟信号的线路。
I2C是一种串行通信协议,因此数据沿着单线(SDA线)逐位传输。
与SPI一样,I2C是同步的,因此位的输出通过主机和从机之间共享的时钟信号与位采样同步。时钟信号始终由主站控制。
所需的线数 |
2 |
最大的速率 |
标准模式:100kbps 快速模式:400kbps 高速模式:3.4Mbps 极速模式:5Mbps |
同步或异步 |
同步 |
串行或并行 |
串行 |
主机的最大个数 |
没有限制 |
从机的最大个数 |
1008 |
使用I2C,数据在消息中传输。 消息被分解为数据帧。每条消息都有一个地址帧,其中包含从机的二进制地址,以及一个或多个包含正在传输的数据的数据帧。该消息还包括每个数据帧之间的开始和停止条件、读/写位和 ACK/NACK 位:
启动条件:SCL线路从高电平切换到低电平之前,SDA线路从高电平切换到低电平。
停止条件:SCL线路从低电平切换到高电平后,SDA线路从低电平切换到高电平。
地址帧:每个从机唯一的 7 位或 10 位序列,当主机想要与其通信时,该序列标识从机。
读/写位: 指定主机是向从机(低电平)发送数据还是从中请求数据(高电平)的单个位。
ACK/NACK 位:消息中的每个帧后跟一个确认/不确认位。如果成功接收地址帧或数据帧,则从接收方向发送方返回 ACK 位。
I2C没有像SPI那样的从属选择线,因此它需要另一种方式让从机知道数据正在发送给它,而不是另一个从机站。它通过寻址来做到这一点。地址帧始终是新消息中起始位之后的第一个帧。
主机将它想要与之通信的从机的地址发送给连接到它的每个从机。然后,每个从机将从主机发送的地址与其自己的地址进行比较。如果地址匹配,则将低电平ACK位发送回主机。如果地址不匹配,则从机不执行任何操作,并且 SDA 线路保持高电平。
地址帧在末尾包含一个位,通知从机是要向其写入数据还是从中读出数据。如果主机要向从机写数据,读/写位为低电平。如果主站从从站读数据,则该位为高电平。
在主机检测到来自从机的ACK位后,第一个数据帧就可以发送了。
数据帧的长度始终为 8 位,并且首先发送最高有效位。每个数据帧后紧跟一个 ACK/NACK 位,以验证是否已成功接收该帧。在发送下一个数据帧之前,ACK位必须由主机或从机接收(取决于发送数据的人)。
发送完所有数据帧后,主机可以向从机发送停止条件以停止传输。停止条件是 SCL 线路上的电平从低到高的电压转换之后,在 SDA 线路上的电平从低到高的转换,而SCL 线路保持高电平。
1. 主机将启动条件从高电平切换至低电平,将SDA线路从高电平切换至低电平,将启动条件发送到每个连接的从机:
2. 主机向每个从机发送它想要与之通信的从机的7位或10位地址,以及读/写位:
3. 每个从机将主机发送的地址与自己的地址进行比较。如果地址匹配,则从机通过将SDA线拉低一位来返回ACK位。如果来自主机的地址与从机自己的地址不匹配,则从机将 SDA 线路保持不变维持在高电平。
4. 主机发送或接收数据帧:
5. 传输完每个数据帧后,接收方向发送方返回另一个ACK位,以确认成功接收帧:
6.为了停止数据传输,主机通过在将SDA切换为高电平之前将SCL切换为高电平向从站发送停止条件:
由于I2C使用寻址,因此可以从单个主机控制多个从机。对于 7 位地址,可以使用 128 (2^7) 个唯一地址。使用 10 位地址的情况不常见,但提供 1,024 (2^10) 个唯一地址。要将多个从站连接到单个主站,要像图中这样连接它们,使用4.7KΩ上拉电阻器将SDA和SCL线路连接到Vcc:
多个主站可以连接到单个从机或多个从机。当两个主机尝试通过SDA线路同时发送或接收数据时,同一系统中多个主机的问题就出现了。为了解决这个问题,每个主机都需要在传输消息之前检测SDA线是低还是高。如果 SDA 线路较低,则意味着另一个主机控制总线,主机应等待发送消息。如果 SDA 线路较高,则传输消息是安全的。要将多个主机连接到多个从机,要像图中这样连接它们,使用4.7KΩ上拉电阻器将SDA和SCL线路连接到Vcc:
【总线】一文看懂 UART 通信协议