其他分享
首页 > 其他分享> > 彻底搞懂I2C总线(3)Ultra Fast-mode超快速模式下的I2C通信协议

彻底搞懂I2C总线(3)Ultra Fast-mode超快速模式下的I2C通信协议

作者:互联网

本文由德力威尔王术平原创,转载、引用请注明出处,否则侵权。

 

摘要

软硬件开发必读文档:本章节详细全面、通俗易懂地阐述了超快速模式下的I2C总线的连接方式、逻辑电平、数据有效性、启动停止条件、字节格式、数据应答、从机地址、保留地址、广播地址、软件复位、启动字节、设备ID等内容。

 

三. I2C总线协议

3.3  超快速模式I2C总线协议

3.3.1  协议概述

3.3.1.1  术语定义

 

 

术语

描述

设备

芯片、机器或器件(这里特指具有I2C功能的)

发送器

向总线发送数据的设备

接收器

从总线接收数据的设备

控制器

启动传输、产生时钟信号和终止传输的设备(旧标准称主机)

目标

由控制器寻址的设备(旧标准称从机)

图1-41 术语定义

 

3.3.1.2  I2C总线设备的主从角色分配和收发关系确定

UFm(Ultra Fast-mode)超快速模式 I2C总线是一种双线推挽式串行总线,工作频率为0~5 MHz,单向传输数据。最适合驱动大于1 MHz的传输速度且不需要反馈的器件(如驱动LED控制器)。UFm I2C总线协议基于标准的I2C总线协议,由起始位、从机地址、命令位(R/W位)、第九个时钟和停止位组成。命令位只需一个“写”位,由于总线的单向传输特性,第九个时钟对应的数据位由主机拉高,忽略应答(ACK)周期,无须从机应答。主机的双线推挽式驱动器由一个UFm串行时钟(USCL)和串行数据(USDA)组成。

从机设备包含唯一的地址(无论是微控制器、LCD驱动器、LED控制器还是GPO ,并且仅作为接收器运行。LED驱动器可能只是一个接收器,并且可以由超快速模式(UFm)支持,而存储器可以接收和发送数据,并且不被超快速模式(UFm)支持。

由于超快速模式(UFm) I2C总线使用推挽式驱动器,它不具备开漏输出的“线与”功能,所以兼容标准模式(Sm)、快速模式(Fm)和快速增强模式(Fm+)。在超快速模式(UFm)中,主机是在总线上启动数据传输并产生时钟信号以允许传输的唯一设备。被寻址的所有其它设备都被视为从机。所以超快速模式(UFm)仅适用于一主多从的I2C总线系统。

以下是连接到UFm I2C总线的一主多从之间的数据传输的情况(参见图1-42):

 

图1-42  连接到Ufs I2C总线的一主多从示例

 

我们发现在UFm I2C总线上是一主多从、主发从收的关系,并且这些关系是永久性的,因为数据传输只允许单向进行。假设主机想要向从机3发送信息,数据传输将如下进行:

①主机在USCL线上发送时钟,在USDA线上发送地址,来寻址从机3。

②主机在USCL线上发送时钟,在USDA线上发送数据。

③主机终止传输。

由于主机是推挽输出,故不允许将多个Ufm主机连接到UFm I2C总线。如果系统中需要额外的主机,它必须与另一个主机完全隔离(可以使用具有隔离功能的多路复用器),因为总线上同一时刻只允许一个主机。

UFm I2C总线上时钟信号的产生总是由主机设备负责,也就是说,主机在总线上传输数据时产生时钟信号。来自主机的总线时钟信号不能被具有“时钟拉伸”的从机设备改变,并且在UFm I2C总线中不存在仲裁和时钟

图1-43总结了UFm I2C总线规范的强制和可选部分的使用。

 

I2C总线特性对UFm的适用性

特征

配置

主机

开始条件

强制

停止条件

强制

应答

不需要

同步

不需要

仲裁

不需要

时钟拉伸

不需要

7位目标地址

强制

10位目标地址

可选

通用呼叫地址

可选

软件复位

可选

开始字节

可选

设备ID

不需要

图1-43  I2C总线特性对UFm的适用性

 

3.3.2  USDA和USCL信号线

USDA和USCL都是单向传输,推挽输出(如图1-44所示)。当总线空闲时,两条线路都被内部的上拉单结晶体管拉到高电平。在超快速模式(UFm)下,I2C总线的传输速率最高可达5 Mbit/s。连接到总线的从机数量受到总线负载、电缆端反射、连接器和走线桩头的限制。

 

图1-44  Ufm模式I2C接口内部推挽输出结构

 

 

3.3.3  USDA和USCL逻辑电平

由于连接到I2C总线的设备具有多样性(CMOS、NMOS、双极性等),逻辑“0”( 低)和逻辑“1”( 高)的电平不是固定的,取决于VDD的相关电平。输入参考电平平设置为30 %VDD和70%VDD;VIL为0.3VDD,VIH为0.7VDD。参见超快模式总线电气特征参数章节。

3.3.4  数据有效性

USDA线上的数据必须在时钟的高电平期间保持稳定。数据线的高电平或低电平状态只能在USCL线上的时钟信号为低电平时改变(参见图1-45)。每传输一个数据位产生一个时钟脉冲。

 

 

图1-45  Ufm I2C总线数据有效性

 

3.3.5  启动和停止条件

所有的传输通信都是以起点(S)开始,以终点(P)结束(参见图1-46 )。当SCL为高电平时,SDA线上的高电平到低电平转换表示传输启动(Start)条件。当SCL为高电平时,SDA线上的低电平到高电平转换表示停止(Stop)条件。

 

图1-46  I2C总线启动和停止条件

 

启动和停止总是由主机发起。在启动发起之后,总线被认为是忙碌的。在停止发起之后的某个时间(≥tBUF),总线被认为是再次空闲的。

无论是启动(S)还是重启(Sr)后,总线都会保持忙碌。在这方面,启动(S)和重启 (Sr)条件在功能上是相同的。因此,I2C规范中,启动和重启条件都用通用术语S符号表示,除非有特别说明。

如果连接到总线的设备集成了I2C接口,则它们可以很容易地检测到启动和停止条件。如果没有这种I2C接口的微控制器,则必须在每个SCL时钟周期内,对SDA线路至少采样两次,以检测启动和停止条件。

 

3.3.6  字节格式

放在USDA线上的每个字节必须是8位长度。每次传输的字节数不受限制。在应答周期中,无须从机应答,而是由主机在每个字节后将USDA驱动到高电平。数据传输首先从最高有效位(MSB)开始(参见图1-46A)。如果从机来不及响应主机下一字节,则不准从机拉低时钟线(禁止从机进行时钟拉伸)。

 

图1-46A  在UFm I2C总线上的字节格式

 

3.3.7  应答(ACK)和不应答(NACK)

由于主机是推挽输出,且单向传输,从机不能在第九个时钟周期中拉低USDA做出响应,否则导致电源和地短路,因此不需要ACK和NACK。但是,第九个时钟周期依旧被保留在UFm中,以与I2C总线协议兼容。主机依然会产生第九个时钟脉冲,但对应的第九个数据位总是被主机自己驱动为高电平 “1”,任何时候都不允许从机驱动USDA线。

 

3.3.8  7位从机地址和读写位

数据传输遵循图1-47中所示的格式。在开始(S)条件之后,发送从机地址。前七位表示从地址,最后一位表示数据传输方向位,逻辑“0”代表写(/W),表示接下来的数据由主机发生给从机,UFm不支持对数据读(R)的请求(特殊保留地址起始字节除外),由于是单向通信,数据传输总是由主机产生的停止条件(P)终止。如果主机仍然希望在总线上通信,它可以立即重启(Sr)并寻址另一个从机,而无需停止后再启动(S)。

 

图1-47  I2C总线 UFm  数据传输

 

UFm数据传输格式是(参考图1-48):

主机向从机发送信号,发送方向始终不变,主机从不接收任何数据,也从不应答,而是在第九时钟周期中拉高USDA生成“1”,以符合I2C总线协议。操作时,需要注意以下事项:

①主机启动(S)后可以和单个从机1通信,也可以发送重启(Sr)和从机n地址后和从机n通信。

②主机访问从机存储空间地址后,从机存储地址的自动递增或递减由设备的设计者决定,一般在从机设备的数据手册中规定。

③每个字节后面都有一个不确认位,如图 1-48位序列“/A”所示。

④I2C总线兼容设备必须在接收到启动(S)或重启(Sr)信号时重置它们的总线逻辑,以便接收主机发送的从机寻址地 址,即使这些起始条件没有按照正确的格式定位。

⑤启动(S)信号后紧跟停止(P)信号是非法格式。然而,许多设备被设计成在这种条件下正常工作。

⑥连接到总线的每个设备都可以通过唯一的地址寻址。存在简单的主机/从机关系,允许多个从机同时接收数据,如主机发送广播呼叫地址,可能就有多个从机响应。

 

图1-48  I2C总线 UFm  主发从收示例

 

3.3.9  10位从机地址

10位地址扩展了更多的地址数量,理论上可寻址1024个设备。具有7位和10位地址的设备可以连接到同一个I2C总线,7位和10位寻址适用于所有总线速度模式。

如图1-49所示,10位从机地址由启动(S)或重启(Sr)信号后的前两个字节构成,第一个字节的前七位是

“1111 0XX”组合,其中两位“XX”是10位地址的两个最高有效位(MSB);第一个字节的第八位是决定消息方向的R/W位,此处R/W为 “0”(写)。第二个字节是10位地址的低8位。

 

图1-49  UFm I2C总线10位寻址过程

 

前面针对7位寻址设备描述的读/写格式的所有组合对于10位寻址也是适合的。这里举例来进一步说明10位地址的用法:

主机向具有10位从机地址的从机发送数据。传输方向不变。主机启动(热启动),发送第一个寻址字节,每个从机判读第一个寻址字节的第八位(R/W方向位)是否为0,如果为0,每个从机将第一个寻址字节的前七位(1111 0XX)与其自身地址进行比较,这时,前七位地址相同的从设备会同时准备接收第二字节地址,如果前七位不同,就不再响应后续地址的判断;接着主机发送第二个寻址字节(XXXX XXXX),所有从机将该地址(XXXX XXXX)的全部八位与它们自己的地址进行比较,但是只有一个从机找到匹配(但不应答),找到匹配的从机继续保持被寻址状态,直到收到停止(P)或重启(Sr)信号。

特殊保留地址启动字节0000 0001 (01h)可以先于10位寻址,方式与7位寻址相同。

 

3.3.10  超快速模式中的保留地址

UFm I2C总线有一个不同于其他I2C总线模式的物理层。因此,可用的从机地址范围是不同的。具体如图1-50所示:

X =不关注;1 =高;0 =低电平。

 

目标地址

读/写位

描述

0000 000

0

广播地址[1]

0000 000

1

启动字节[2]

0000 001

X

保留供将来使用

0000 010

X

保留供将来使用

0000 011

X

保留供将来使用

0000 1XX

X

保留供将来使用

1111 1XX

X

保留供将来使用

1111 0XX

X

10位目标寻址

图1-50  超快模式中的保留地址

 

[1]广播地址用于多种功能,包括软件复位。[2]不允许任何UFm设备在收到起始字节时进行应答。

具体的地址分配取决于芯片架构师,他必须考虑总线上使用的设备以及将来与保留地址的任何交互。例如,具有7个用户可分配地址引脚的器件允许分配所有128个地址。如果已知保留地址永远不会用于其他目的,则保留地址可以用于从机地址。

 

3.3.11  广播呼叫地址

广播呼叫地址(0000 0000)用于主机同时寻址连接到I2C总线的每个从机。

主机启动I2C总线后,第一字节首先发送广播呼叫地址(0000 0000),如果某些从机不需要被呼叫寻址,它可以忽略这个地址。如果某些设备确实需要传输数据,它就把自己作为一个接收器。如果有多个从机需要接收,主机实际上并不知道。第二个字节及以后的字节由每个能够处理该数据的从机接收器接收。不能处理这些字节的从机必须通过可以来忽略它(如图1-51)。

 

图1-51  超快模式中的广播呼叫地址格式

 

主机紧接着发送第二个字节,第二个字节是控制地址,是表示呼叫目的和含义的字节,其具体含义如下

1)第二字节第八位B=0时(如图1-35),含义如下:

①0000 0110 (06h):从机硬件复位和写数据到从机内部存储空间。从机接收到第一字节和本字节序列后,被寻址的所有从机复位,并接收主机接下来发送的数据,存入自己内部存储空间(内部存储空间地址具体规范由从机规格书给出)。

②0000 0100 (04h):写数据到从机内部存储空间。过程如上,但不会复位硬件。

③0000 0000 (00h):此代码不允许用作第二个字节。

④除了以上三个字节数据定义外,其余的字节数据定义官方尚未更新添加,设备必须忽略它们。具体的软件编程要求在相应的设备器件数据表中有详细规定。

2)第二字节第八位B=1时,2字节序列数据被忽略。

3.3.12  软件复位

 

 

在一个广播呼叫(0000 0000)之后,发送0000 0110 (06h)作为第二个字节会导致从机软件复位。此功能是可选的,并非所有设备都响应此命令。从机接收到上述2字节序列后,被寻址的所有从机复位,并接收主机接下来发送的数据,存入自己内部存储空间(内部存储空间地址具体规范由从机规格书给出)。

 

3.3.13  启动字节

单片机可以通过两种方式连接到I2C总线。第一种方式:单片机片上集成了I2C总线硬件接口,程序员可以配置内部I2C寄存器,单片机内部中断会自动响应I2C总线的请求,读写速度快。第二种方式:单片机片上没有集成了I2C总线硬件接口,它必须通过软件仿真模拟I2C的时序,持续监控总线。显然,单片机监控或轮询总线的次数越多,它执行预定功能所花费的时间就越少,CPU开销就大,响应速度就慢。

因此,有I2C硬件接口的快速设备和依赖于软件轮询的相对较慢的单片机之间存在速度差异。有这样一种使用场景,没有I2C接口的单片机为节约CPU开销,以低速方式轮询I2C总线,具有I2C总线接口的单片机发送启动字节(启动字节是专门满足设备慢速轮询而设计的握手同步的特殊字节序列),当收到启动字节的轮询单片机在收到接下来的重启(Sr)信号后,便开始提高通信速率,以响应高速器件的数据传输。也就是说,没有I2C总线接口的单片机,I2C总线上空闲时就以低速轮询的方式去监控总线,以节约CPU开销,当检测到I2C总线上有主机发送了启动字节,就以低速轮询的方式接收到了启动字节,随即提高自己的轮询速率,开始高速轮询响应来自高速主机的数据传输,在接收完数据并接收到停止信号后,又以低速轮询方式去检测总线。

启动字节程序就是高低速器件在数据传输之前可能会有一个比正常情况长得多的启动程序(参见图1-52)。启动字节程序包括::①开始条件;②一个起始字节(0000 0001);③不应答时钟脉冲(NACK);④重复起始条件(Sr)。

图1-52  启动字节程序

 

具有I2C硬件接口的单片机发送启动(S)信号后,再发送起始字节(0000 0001)。因此,另一个单片机可以以低采样速率对USDA线路进行采样,只要检测到起始字节中的七个“0”当中的一个“0”,该单片机就可以切换到更高的采样速率,在收到接下来的重启(Sr)信号后,然后就和高速单片机同步了。

在起始字节后有一个应答相关的时钟脉冲,但不允许任何器件应答(ACK),这只是为了符合总线上使用的字节处理格式罢了,从机不应答(NACK)即可。

 

3.3.14  无响应的从机复位

如果从机无响应(无法接收主机信息),对其解决办法:首先是通过使用软件复位命令或硬件复位信号复位从机。如果从机不支持软件复位和硬件复位,则重启从机电源以强制激活内部上电复位(POR)电路。

3.3.15  设备ID

超快速模式(UFm)的I2C总线不支持设备ID读取功能。

 

 

 

未完待续,敬请关注《彻底搞懂IIC总线(4)I2C总线的其他用途》。

 

 

本文由德力威尔王术平原创;转载、引用请注明出处,否则侵权。

 

本文参考资料:

①https://www.nxp.com/docs/en/user-guide/UM10204.pdf。

②https://www.nxp.com/docs/en/application-note/AN10216.pdf。

https://www.i2c-bus.org

 

标签:字节,通信协议,总线,地址,从机,主机,搞懂,I2C
来源: https://www.cnblogs.com/deliweier-wangshuping/p/16228221.html