I2C总线协议原理详解
I2C总线协议原理详解
I2C总线协议原理介绍
I2C(Inter-Integrated Circuit)总线是一种由NXP公司设计的串行通信协议,广泛应用于嵌入式系统中。I2C使用两条线在主控制器和从机之间进行数据通信:一条是SCL(串行时钟线),另一条是SDA(串行数据线)。这两条数据线需要接上拉电阻,总线空闲的时候SCL和SDA处于高电平。I2C总线标准模式下速度可以达到100Kb/S,快速模式下可以达到400Kb/S。
I2C总线支持多从机,即一个I2C控制器下可以挂多个I2C从设备,这些不同的I2C从设备有不同的器件地址。通过I2C设备的器件地址,主控制器可以访问指定的I2C设备。一个I2C总线连接多个I2C设备的示意图如下:
SDA和SCL这两根线必须接一个上拉电阻,一般是4.7K。其余的I2C从器件都挂接到SDA和SCL这两根线上,这样就可以通过SDA和SCL这两根线来访问多个I2C设备。
I2C协议相关术语
2.1 起始位
起始位是I2C通信的开始标志。在SCL为高电平的时候,SDA出现下降沿就表示为起始位。
2.2 停止位
停止位是I2C通信的结束标志。在SCL为高电平的时候,SDA出现上升沿就表示为停止位。
2.3 数据传输
I2C总线在数据传输的时候要保证在SCL高电平期间,SDA上的数据稳定,因此SDA上的数据变化只能在SCL低电平期间发生。
2.4 应答信号
当I2C主机发送完8位数据以后会将SDA设置为输入状态,等待I2C从机应答。应答信号是由从机发出的,主机需要提供应答信号所需的时钟。主机发送完8位数据以后紧跟着的一个时钟信号就是给应答信号使用的。从机通过将SDA拉低来表示发出应答信号,表示通信成功,否则表示通信失败。
I2C时序
I2C时序主要包括写时序、读时序和多字节读写时序。
3.1 I2C写时序
I2C总线单字节写时序如下:
写时序的具体步骤如下:
- 开始信号
- 发送I2C设备地址(高7位是设备地址,最后1位是读写位,0表示写操作)
- 从机发送ACK应答信号
- 重新发送开始信号
- 发送要写入数据的寄存器地址
- 从机发送ACK应答信号
- 发送要写入寄存器的数据
- 从机发送ACK应答信号
- 停止信号
3.2 I2C读时序
I2C总线单字节读时序如下:
读时序的具体步骤如下:
- 主机发送起始信号
- 主机发送要读取的I2C从设备地址
- 读写控制位(1表示读操作)
- 从机发送ACK应答信号
- 重新发送START信号
- 主机发送要读取的寄存器地址
- 从机发送ACK应答信号
- 重新发送START信号
- 重新发送要读取的I2C从设备地址
- 读写控制位(1表示读操作)
- 从机发送ACK应答信号
- 从I2C器件里面读取到的数据
- 主机发出NO ACK信号,表示读取完成
- 主机发出STOP信号,停止I2C通信
3.3 I2C多字节读写时序
多字节读写时序与单字节基本一致,只是在读写数据时可以连续发送多个字节,其他控制时序与单字节相同。