1、I2C总线概述
1.1主要特征
nRF52832
片内集成了 TWI Two wire Serial Interface 两线串行总线 TWI 完全兼容
I2C 总线,简单一点,可以直接认为 TWI 是 I2C 总线。
典型的
I2C 应用原理如下图所示, I2C 总线通讯仅需两根信号线,可以连接多个设备,
从设备都有唯一的地址,主设备通过从设备的地址和不同的从设备通讯。
1) I2C 总线 硬件结构简单,仅需 一根时钟线 SCL )、 一根数据线 SDA )和两个上拉电
阻即可实现通讯。 I2C 总线的 SCL 和 SDA 均为开漏结构,开漏结构的电路只能输出“逻
辑 0 ”,无法输出“逻辑 1 ”,因此 SCL 和 SDA 需要连接上拉电阻。上拉电阻的阻值影
响传输速率,阻值越大, 由于 RC 影响,会带来上升时间的增大 ,传输的速率慢,阻值
小,传输的速率快,但是会增加电流的消耗,一般情况下,我们会选择 4.7K 左右的阻
值,在从机数量少,信号线短的情况下,可以适当增加阻值,如使用 10K 的阻值。
2) I2C 总线中的从设备必须有自己的地址,并且该地址在其所处的 I2C 总线中唯一,主设
备通过此唯一的地址即可和该从设备进行数据传输。
3) I2CI2C总线总线支持支持多主机,多主机,但是同一时刻但是同一时刻只允许有一个主机。只允许有一个主机。I2CI2C总线中存在多个主机时,总线中存在多个主机时,为了避免冲突,为了避免冲突,I2CI2C总线总线通过通过总线总线仲裁仲裁决定由哪一个主机控制总线决定由哪一个主机控制总线。。
4) I2CI2C总线只能传输总线只能传输88位位的数据,数据速率的数据,数据速率在标准模式下在标准模式下可达可达100Kbit/s100Kbit/s,快速模式下可达,快速模式下可达400Kbit/s400Kbit/s,高速模式下可达,高速模式下可达33..4Mbit/s4Mbit/s,,nRFnRF5283252832的的I2CI2C总线不支持总线不支持高速模式。高速模式。
5) 同时同时连接到连接到同一个同一个I2CI2C总线上的总线上的设备数量设备数量受总线最大电容受总线最大电容((400pF400pF))的限制的限制。。
6) I2CI2C总线总线电流消耗电流消耗很低,很低,抗干扰抗干扰强强,,适合应用于低功耗的场合适合应用于低功耗的场合
1.2 I2C 地址
I2C
总线中的设备必须要有唯一的地址,这意味着如果在总线中接入两个相同的设备,
该设备必须有配置地址的功能,这也是我们经常用的 I2C 接口的设备会有几个引脚用来配置
地址的原因。
对于
I2C 地址,我们经常看到有的 I2C 接口设备在规格书中描述的是 7 位地址,而有的
I2C 接口设备在规格书中描述的是 8 位地址,它们有什么区别?( I2C 也有 10 位地址,但用
的较少,这里不做介绍,本章中的内容不涉及到 10 位地址)。
7
位地址和 8 位地址如下图所示,它们结构上是一样的,都是由 7 个地址位加一个用来
表示读写的位组成,只是描述上有所区别。
规格 书中描述 I2C 地址是 7 位地址的设备:给出的是 7 个地址位加 R/W 位,最低位( R/W
位)为 0 时表示为写地址,最低位为 1 时为读地址。如果把 0 和 1 分别带入 R/W 位,
得到的地址就和 8 位地址一样了。
规格书中描述 I2C 地址是 8 位地址的设备:直接给出写地址和读地址,也就是最低位
R/W 位)为 0 时的地址和最低位为 1 时的地址。
由此可见,所谓的
7 位地址和 8 位地址实际上都是 7 位地址加上最低位的读写位,本质
上是一样的,只是各个 I2C 接口设备的描述方式不一样。
I2C
保留了如下表所示的两组 I2C 地址,这 些地址用于特殊用途。
1.3. I2C 数据传输
1. 起始和停止条件( START and STOP conditions
所有的I2C 事务都是以 START 开始、 STOP 结束,起始和停止条件总是由主机产生,
如下图所示,当 SCL 为高电平时, SDA 从高电平向低电平 转换 表示起始条件 当 SCL 是高
电平时 SDA 由低电平向高电平 转换 表示停止条件 。如果总线中存在多个主机,先将 SDA
拉低的主机获得总线控制权。
2. 字节格式( Byte format
I2C总线发送到 SDA 上的数据必须为 8 位,即一次传输一个字节,每次传输可以发送
的字节数量不受限制。每个字节后必须跟一个响应位,首先传输 的是数据的最高位 MSB
如果从机要完成一些其他功能后,例如一个内部中断服务程序才能接收或发送下一个完整的
数据字节,那么从机可以将时钟线 SCL 保持为低电平强制主机进入等待状态,当从机准备
好接收下一个字节数据并释放时钟线 SCL 后数据传输继续。
2.4. ACK 和 NACK
每个字节后会跟随一个ACK 信号。接收者 通过 ACK 位告知 发送者已经成功接收 一字节 数据并准备 好 接收下一 字节 数据。所有的时钟脉冲包括 ACK 信号的时钟脉冲都是由 主机产生的。
ACKACK信号:发送者发送完信号:发送者发送完88位数据后,在位数据后,在ACKACK时钟脉冲期间释放时钟脉冲期间释放SDASDA线,接收者可线,接收者可以将以将SDASDA拉低并在时钟信号为高时保持低电平,这样就产生了拉低并在时钟信号为高时保持低电平,这样就产生了ACKACK信号,从而使得信号,从而使得主机知道从机已成功接收数据并且准备好了接收下一数据。主机知道从机已成功接收数据并且准备好了接收下一数据。
NACKNACK信号:当信号:当SDASDA在第在第99个时钟脉冲的时候保持高电平,定义为个时钟脉冲的时候保持高电平,定义为NACKNACK信号。这时,信号。这时,主机要么产生主机要么产生STOPSTOP条件来放弃这次传输,要么重复条件来放弃这次传输,要么重复STARTSTART条件来启动一个新的传输。条件来启动一个新的传输。
下面的
下面的55种情况会导致产生种情况会导致产生NACKNACK信号:信号:
1) 发送方寻址的接收方在总线上不存在,因此总线上没有设备应答。发送方寻址的接收方在总线上不存在,因此总线上没有设备应答。
2) 接收方正在处理一些实时的功能,尚未准备好与主机通信,因此接收方不能执行收发。接收方正在处理一些实时的功能,尚未准备好与主机通信,因此接收方不能执行收发。
3) 在传在传输期间,接收方收到不能识别的数据或者命令。输期间,接收方收到不能识别的数据或者命令。
4) 在传输期间,接收方无法接收更多的数据字节。在传输期间,接收方无法接收更多的数据字节。
5) 主主--接收器要通知从接收器要通知从--发送器传输的结束。发送器传输的结束。
2.5. 从机地址和 R/W 位
I2C数据传输如下图所示, 在 起始 条件 ( 后 发送从机地址 ,从机 地址是 7 位,从机地
址后紧跟着的第 8 位是读写位( R/W ),读写位为 0 表示写 ,读写位为 1 表示读 。数据传输
一般由主机产生的停止位 P 终止,但是,如果主机仍希望在总线上通讯,它可以产生重复
起始条件 S 和寻址另一个从机而不是首先产生一个停止条件,在这种传输中可能有不同的
读写格式结合。