I2C详解(2) I2C总线的规范以及用户手册(1) I2C 总线协议
I2C详解(1) 一文快速了解I2C的工作原理
I2C详解(2) I2C总线的规范以及用户手册(1) I2C 总线协议
I2C详解(3) I2C总线的规范以及用户手册(2) I2C 其他的总线协议以及总线速度
I2C详解(4) I2C总线的规范以及用户手册(3) I2C电气规格和时序
I2C详解(5) I2C总线的规范以及用户手册(4) MIPI I3C 概述
I2C详解(6) STM32软件模拟I2C
文章目录
前言
本文参考 NXP 2021.10.1 第七版的 UM1024 。
本文详细的介绍了I2C的协议规范以及电气规范,可以更加深入的了解I2C。
整理了文中的部分术语,以方便对照查阅。
Table 0. 全文术语总结
术语 | 描述 |
---|---|
transmitter | (发送器) 将数据发送到总线的设备 |
Receiver | (接收器) 从总线接收数据的设备 |
Controller | (控制器) 启动传输、生成时钟信号并终止传输的设备 注:在之前的版本,可以翻译为主机,但是在2021.11.01之后的第七版之后,为了符合MIPI I3C规范,都统一称为控制器。 |
Target | (目标) 被控制器寻址的设备 注:在之前的版本,可以翻译为从机,但是在2021.11.01之后的第七版之后,为了符合MIPI I3C规范,都统一称为目标。 |
Multi-Controller | (多控制器) 多个控制器可以尝试同时控制总线,而不会损坏数据 |
Arbitration | (仲裁) 确保以下过程:如果多个控制器同时尝试控制总线,则只允许一个控制器这样做,并且仲裁胜利的数据不会损坏 |
Synchronization | (同步) 同步两个或多个设备的时钟信号的过程 |
Acknowledge (ACK) | (应答) 发送器在应答时钟脉冲期间释放SDA线,因此接收器可以将SDA线拉低,并在该时钟脉冲的高电平期间保持稳定的低电平,表明该字节已成功接收,并且可以发送另一个字节。由于翻译的问题,也可以理解成响应、确认等等。 |
Not Acknowledge (NACK) | (无应答)当 SDA 在第九个时钟脉冲期间保持高电平时,这被定义为“无应答”信号,然后,控制器可以生成停止条件以中止传输。产生无应答的条件在下文中。由于翻译的问题,也可以理解成不响应、不确认等等。 |
Standard-mode (Sm) | (标准模式) 双向总线,最快速率达100 kbit/s |
Fast-mode (Fm) | (快速模式) 双向总线,最快速率达400 kbit/s |
Fast-mode Plus (Fm+) | (快速模式+) 双向总线,最快速率达 1 Mbit/s |
High-speed mode (Hs-mode) | (高速模式) 双向总线,最快速率达 3.4 Mbit/s |
Ultra Fast-mode (UFm) | (超快速模式) 单向总线,最快速率达 5 Mbit/s |
Bit banging | (位敲击)(软件模拟)。顾名思义,在指定的节拍,调整 IO 的输出状态,也就是软件模拟 I2C 的时序 |
Table 1. 修订历史记录
Rev | 日期 | 描述 |
---|---|---|
v.7 | 20211001 | 用户手册; 第七版 |
修改: | • 更新 Table 5 • 将术语“主/从”更新为“控制器/目标”,以符合MIPI I3C规范和恩智浦的包容性语言项目 • 新增Section 9 | |
v.6 | 20140404 | 用户手册; 第六版 |
修改: | • Figure 41 更新 (重新计算) • Figure 42 更新 (重新计算) | |
v.5 | 20121009 | 用户手册; 第五版 |
v.4 | 20120213 | 用户手册; 第四版 |
v.3 | 20070619 | 当今的许多应用需要更长的总线和/或更快的速度。推出快速模式升级版是为了满足这一需求,将驱动强度提高了 10×并将数据速率提高到 1 Mbit/s,同时保持与快速模式和标准模式速度以及软件命令的向下兼容性。 |
v2.1 | 2000 | Version 2.1 of the I2C 总线规范 |
v2.0 | 1998 | I2C 总线已成为事实上的世界标准,现已在1000多个不同的IC中实施,并授权给50多家公司。然而,当今的许多应用需要更高的总线速度和更低的电源电压。此更新版本的 I2C 总线规范满足这些要求。 |
v1.0 | 1992 | I2C 总线规范的1.0版 |
原始 | 1982 | 第一版 |
摘要
1. 引言
I2C 总线是事实上的世界标准,现在由50多家公司制造的1000多个不同IC中实施。此外,多功能 I2C 总线还用于各种控制架构,如系统管理总线 (SMBus)、电源管理总线 (PMBus)、智能平台管理接口 (IPMI)、显示数据通道 (DDC) 和高级电信计算架构 (ATCA)。
本文档帮助器件和系统设计人员了解I2C总线的工作原理并实现工作应用。描述了各种操作模式。它全面介绍了 I2C 总线数据传输、握手和总线仲裁方案。详细部分涵盖了I2C总线在其每种工作模式下的时序和电气规格。
I2C 兼容芯片的设计人员应以本文档为参考,并确保新器件满足本文档中规定的所有限制。包含 I2C 器件的系统的设计人员应查看本文档,并参阅各个元件数据手册。
希望开发基于 I2C 的解决方案的读者也可能对MIPI联盟于2017年推出的I3C感兴趣,恩智浦的参与和贡献。MIPI I3C 提供与 I2C 的向后兼容性、更高的速度和低功耗,并且为实施者提供了免版税版本。更多信息包含在本文档末尾的 Section 9。
2. I2C总线特性
在消费电子、电信和工业电子中,看似不相关的设计之间往往有许多相似之处。例如,几乎每个系统都包括:
• 一些智能控制,通常为单片机
• 通用电路,如LCD和LED驱动器,远程I/O端口,RAM,EEPROM,实时时钟或A/D和D/A转换器
• 面向应用的电路,如无线电和视频系统、温度传感器和智能卡的数字调谐和信号处理电路
为了利用这些相似性,使系统设计人员和设备制造商都受益,并最大限度地提高硬件效率和电路简单性,飞利浦半导体(现为恩智浦半导体)开发了一种简单的双向2线总线,用于高效的IC间控制。该总线称为 Inter-IC 或 I2C 总线。所有I2C总线兼容器件都集成了片内接口,允许它们通过I2C总线直接相互通信。这种设计理念解决了设计数字控制电路时遇到的许多接口问题。
以下是 I2C 总线的一些特性:
• 只需要两根线;串行数据线 (SDA) 和串行时钟线 (SCL).
• 连接到总线的每个设备都是可通过唯一地址寻址的软件,并且始终存在简单的控制器/目标关系;控制器可以作为控制器-发送器或控制器-接收器工作.
• 它是真正的多控制器总线,包括冲突检测和仲裁,以防止两个或多个控制器同时启动数据传输时的数据损坏。
• 串行、面向 8 位的双向数据传输在标准模式下最高可达 100 kbit/s,在快速模式下最高可达 400 kbit/s,在快速模式+ 中最高可达 1 Mbit/s,在高速模式下最高可达 3.4 Mbit/s。
• 串行、8 位定向、单向数据传输,在超快速模式下可达 5 Mbit/s。
• 片内滤波可抑制总线数据线上的尖峰,以保持数据完整性。
• 连接到同一总线的 IC 数量仅受最大总线电容的限制。在某些情况下,可能允许更大的电容。请参阅 Section 7.2。
Figure 1. I2C 总线应用示例
2.1 设计师的优势
I2C 总线兼容IC允许系统设计直接从功能框图快速发展到原型。此外,由于它们直接“剪贴”到 I2C 总线上,无需任何额外的外部接口,因此它们允许通过“剪贴”或“不剪贴”IC进出总线来修改或升级原型系统。
以下是I2C总线兼容IC的一些功能,这些功能对设计人员特别有吸引力:
• 框图上的功能块与实际IC相对应;设计从框图到最终原理图的快速进行。
• 无需设计总线接口,因为 I2C 总线接口已集成在片上。
• 集成的寻址和数据传输协议允许系统完全由软件定义。
• 相同的IC类型通常可用于许多不同的应用。
• 设计时间缩短,因为设计人员可以快速熟悉由I2C总线兼容IC表示的常用功能模块。
• 可以在系统中添加或移除IC,而不会影响总线上的任何其他电路。
• 故障诊断和调试简单;故障可立即追踪。
• 通过组装可重用的软件模块库,可以缩短软件开发时间。
除了这些优势之外,I2C总线兼容系列中的 CMOS IC 还为设计人员提供了特别的功能,这些功能对便携式设备和电池备份系统特别有吸引力。
他们有:
• 极低的电流消耗
• 高抗噪性
• 宽电源电压范围
• 工作温度范围广
2.2 制造商的优势
I2C 总线兼容IC不仅为设计人员提供帮助,还为设备制造商带来了广泛的优势,因为:
• 简单的2线串行 I2C 总线最大程度地减少了互连,因此IC具有更少的引脚,并且没有那么多的PCB走线;结果使PCB更小、更便宜。
• 完全集成的 I2C 总线协议消除了对地址解码器和其他“胶合逻辑”的需求。
• I2C 总线的多控制器功能允许通过与装配线的外部连接对最终用户设备进行快速测试和校准。
• 采用各种无引线封装的 I2C 总线兼容 IC 进一步降低了空间要求。
这些只是其中的一些好处。此外,I2C 总线兼容IC允许简单构建设备变体和轻松升级以保持设计最新,从而提高了系统设计灵活性。通过这种方式,可以围绕基本模型开发整个设备系列。然后,只需将相应的IC粘贴到总线上,即可升级新设备或增强功能模型(即扩展内存、遥控器等)。如果需要更大的ROM,只需从我们的全面系列中选择具有更大ROM的微控制器即可。由于新IC取代了旧IC,因此只需从总线上拆下过时的IC并剪切其后继器,即可轻松为设备添加新功能或提高其性能。
2.3 I2C设计人员的优势
微控制器的设计人员经常面临节省输出引脚的压力。I2C 协议允许连接各种外设,无需单独的寻址或芯片使能信号。此外,包含 I2C 接口的微控制器在市场上更为成功,因为现有的外围设备种类繁多。
3. I2C 总线协议
3.1 标准模式、快速模式和快速模式+ 的 I2C 总线协议
两根线,串行数据(SDA)和串行时钟(SCL),在连接到总线的设备之间传输信息。每个器件都由一个唯一的地址(无论是微控制器、LCD驱动器、存储器还是键盘接口)识别,并且可以作为发送器或接收器运行,具体取决于设备的功能。LCD驱动器可能只是一个接收器,而存储器可以接收和发送数据。除发送器和接收器外,在执行数据传输时,设备也可以被视为控制器或目标 (参阅 Table 2)。控制器是在总线上启动数据传输并生成时钟信号以允许该传输的设备。此时,任何寻址的设备都被视为目标。
Table 2. I2C 总线术语的定义
术语 | 描述 |
---|---|
Transmitter(发送器) | 将数据发送到总线的设备 |
Receiver(接收器) | 从总线接收数据的设备 |
Controller(控制器) | 启动传输、生成时钟信号并终止传输的设备 |
Target(目标) | 被控制器寻址的设备 |
Multi-controller(多控制器) | 多个控制器可以尝试同时控制总线,而不会损坏数据 |
Arbitration(仲裁) | 确保以下过程:如果多个控制器同时尝试控制总线,则只允许一个控制器这样做,并且仲裁胜利的数据不会损坏 |
Synchronization(同步) | 同步两个或多个设备的时钟信号的过程 |
I2C 总线是一条多控制器的总线。这意味着可以连接多个能够控制总线的设备。由于控制器通常是微控制器,因此让我们考虑连接到 I2C 总线的两个微控制器之间数据传输的情况(参阅 Figure 2).
Figure 2. 使用两个微控制器的 I2C 总线配置示例
本示例重点介绍 I2C 总线上的控制器-目标和接收器-发送器的关系。请注意,这些关系不是永久性的,取决于当时的数据传输方向。数据传输将按如下方式进行:
- 假设微控制器 A 要向微控制器 B 发送信息:
- 微控制器 A(控制器),地址微控制器 B(目标)
- 微控制器A(控制器-发送器),将数据发送到微控制器B(目标-接收器)
- 微控制器 A 终止传输。
- 如果微控制器 A 希望从微控制器 B 接收信息:
- 微控制器 A(控制器)地址 微控制器 B(目标)
- 微控制器 A(控制器-接收器)从微控制器 B(目标发送器)接收数据
- 微控制器 A 终止传输。
即使在这种情况下,控制器(微控制器A)也可以产生时序并终止传输。
将多个微控制器连接到 I2C 总线的可能性意味着多个控制器可以尝试同时启动数据传输。为了避免此类事件可能带来的混乱,已经制定了仲裁程序。此过程依赖于线与连接所有 I2C接口到 I2C 总线。
如果两个或多个控制器试图将信息放到总线上,则当另一个控制器产生“0”时,第一个控制器产生“1”将失去仲裁。仲裁期间的时钟信号是控制器使用线与连接到 SCL 线路生成的时钟的同步组合(有关仲裁的更多详细信息,请参见 Section 3.1.8)。
在 I2C 总线上生成时钟信号始终由控制器设备负责;每个控制器在总线上传输数据时都会生成自己的时钟信号。来自控制器的总线时钟信号只有在一下情况才能被改变:慢速目标设备占用时钟线,或者在仲裁发生时由另一个控制器拉伸时。
Table 3 总结了 I2C总线规范中必需部分和可选部分的使用以及使用它们的系统配置。
Table 3. I2C总线协议功能的适用性
M = 必须的; O = 可选的; n/a =不适用.
特性 | 配置 | ||
---|---|---|---|
单控制器 | 多控制器 | 目标[1] | |
START condition (起始条件) | M | M | M |
STOP condition (停止条件) | M | M | M |
Acknowledge (应答) | M | M | M |
Synchronization (同步) | n/a | M | n/a |
Arbitration (仲裁) | n/a | M | n/a |
Clock stretching (时钟拉伸) | O[2] | O[2] | O |
7-bit target address (7位目标寻址) | M | M | M |
10-bit target address (10位目标寻址) | O | O | O |
General Call address(广播寻址) | O | O | O |
Software Reset (软件复位) | O | O | O |
START byte (起始字节) | n/a | O[3] | n/a |
Device ID (设备标识) | n/a | n/a | O |
[1] 也指作为目标的控制器。
[2] 时钟拉伸是某些目标的一个功能。如果系统中没有目标可以延长时钟(保持 SCL 低电平),则无需设计控制器来处理此过程。
[3] “位敲击”(软件模拟)多控制器系统应考虑START字节。请参见 Section 3.1.15.
3.1.1 SDA 和 SCL 信号
SDA和SCL都是双向线路,通过电流源或上拉电阻连接到正电源电压(参阅 Figure 3)。当总线空闲时,两条线路都是高电平的。连接到总线的器件的输出级必须具有漏极开路或集电极开路,才能执行线与功能。I2C 总线上的数据在标准模式下的传输速率高达 100 kbit/s,在快速模式下高达 400 kbit/s,在快速模式+ 中高达 1 Mbit/s,在高速模式下可以高达 3.4 Mbit/s。总线电容限制连接到总线的接口数量。
对于单个控制器应用,如果总线上没有会延长时钟的器件,控制器的 SCL 输出可以是推挽式驱动器设计。
Figure 3. 具有不同电源电压的器件共享同一总线
3.1.2 SDA 和 SCL 逻辑电平
由于可以连接到 I2C 总线的不同技术器件(CMOS、NMOS、双极性)种类繁多,逻辑“0” (低) 和“1” (高)的电平不是固定的,而是取决于相关的 VDD 电平。输入参考电平设置为VDD的30% 和 70%; VIL 为 0.3 VDD,VIH 为 0.7 VDD。 参阅 Figure 38, 时序图. 一些传统器件输入电平固定在 VIL = 1.5 V 和 VIH = 3.0 V,但所有新器件都需要此 30% / 70% 规格。有关电气规格,请参见Section 6 。
3.1.3 数据有效性
SDA线路上的数据在时钟的高电平期间内必须保持稳定。只有当SCL线上的时钟信号为低电平时,数据线的高电平或低电平状态才能改变(参阅 Figure 4)。 每个传输的数据位都会生成一个时钟脉冲。
Figure 4. I2C总线上的位传输
3.1.4 起始和停止条件
所有事务都以起始条件(S) 开头,并由停止条件(P ) 终止 (参阅 Figure 5)。
当 SCL 为高时,SDA 从高电平变为低电平表示起始条件。
当 SCL 为高时,SDA 从低电平变为高电平表示停止条件。
Figure 5. 起始和停止条件
起始和停止条件始终由控制器生成。在起始条件之后,总线被视为忙碌状态。在停止条件之后的一段时间内,总线被认为是再次空闲的。总线空闲情况请参阅 Section 6。
如果生成重复的起始(Sr) 而不是 STOP 条件,总线将保持忙碌状态。在这方面,起始 (S) 和重复起始(Sr) 条件在功能上是相同的。因此,对于本文档的其余部分,S符号用作通用术语,以表示起始和重复起始条件,除非有特别声明Sr。
如果连接到总线的设备包含必要的接口硬件,则很容易检测起始和停止条件。但是,没有这种接口的微控制器必须在每个时钟周期内至少对SDA线进行两次采样才能检测到电平。
3.1.5 字节格式
SDA线路上的每个字节长度必须为八位。每次传输可以传输的字节数不受限制。每个字节后必须跟一个应答位。数据首先使用最高有效位(MSB)传输 (参阅 Figure 6). 如果目标在执行某些其他功能(例如为内部中断提供服务)之前无法接收或传输另一个完整的数据字节,则可以将时钟线 SCL 保持在低电平以强制控制器进入等待状态。然后,当目标准备好接收另一个字节的数据并释放时钟线 SCL 时,数据传输将继续。
Figure 6. I2C总线上的数据传输
3.1.6 应答 (ACK) 和无应答 (NACK)
应答发生在每个字节之后。应答位允许接收器向发送器发出信号,表明该字节已成功接收,并且可以发送另一个字节。控制器生成所有时钟脉冲,包括确认第九个时钟脉冲。
应答信号定义如下:发送器在应答时钟脉冲期间释放SDA线,因此接收器可以将SDA线拉低,并在该时钟脉冲的高电平期间保持稳定的低电平 (参阅 Figure 4)。必须考虑设置和保持时间 (在 Section 6中指定)。
当 SDA 在第九个时钟脉冲期间保持高电平时,这被定义为“无应答”信号。然后,控制器可以生成停止条件以中止传输,或生成重复的 START 条件以启动新的传输。有五个条件会导致 NACK 的生成:
- 总线上没有具有对应传输地址的接收器,因此没有设备确认以进行应答。
- 接收器无法接收或发送,因为它正在执行某些实时功能,并且尚未准备好开始与控制器通讯。
- 在传输过程中,接收方收到它不理解的数据或命令。
- 在传输过程中,接收方无法再接收任何数据字节。
- 控制器-接收器必须向目标发送器发出传输结束的信号。
3.1.7 时钟同步
两个控制器可以同时在一条空闲总线上开始传输,并且必须有一种方法来决定哪个控制总线并完成其传输。这是通过时钟同步和仲裁完成的。在单控制器系统中,不需要时钟同步和仲裁。
时钟同步通过 I2C 接口的线与功能连接到 SCL来执行的。这意味着 SCL 从高电平变为低电平会导致相关控制器开始计算其低电平周期,一旦控制器时钟变为低电平,它就会将 SCL 线保持在该状态,直到达到时钟高电平状态(参阅 Figure 7)。 但是,如果另一个时钟仍在其低电平周期内,则该时钟的低电平到高电平转换可能不会改变 SCL 线路的状态。因此,SCL 线路由具有最长低电平周期的控制器保持为低电平。在此期间,具有较短低电平周期的控制器进入高电平的等待状态。
Figure 7. 仲裁程序中的时钟同步
当所有相关控制器都已计算出其低电平周期时,时钟线被释放并变为高电平。然后,控制器时钟和SCL线路的状态之间没有区别,并且所有控制器都开始计算其高电平周期。第一个完成高电平周期的控制器再次将 SCL 线拉至低电平。
通过这种方式,同步的SCL时钟由具有最长低电平时钟周期的控制器确定其低电平周期,其高电平周期由具有最短时钟高电平周期的控制器确定。
3.1.8 仲裁
仲裁与同步一样,是指仅当系统中使用多个控制器时才需要的协议的一部分。目标不参与仲裁程序。仅当总线空闲时,控制器才能启动传输。两个控制器可以在最短保持时间(tHD;STA) 的起始条件,该条件导致总线上的起始条件有效。然后需要仲裁来确定哪个控制者将完成其传输。
仲裁一位一位地进行。在每个位期间,当 SCL 为高电平时,每个控制器都会检查 SDA 的电平是否与它发送的内容匹配。此过程可能需要很多位。只要传输是相同的,两个控制器实际上可以毫无错误地完成整个事务。控制器首次尝试发送高电平,但检测到 SDA 电平为低电平时,控制器知道它已丢失仲裁并关闭其 SDA 输出驱动器。另一个控制器继续完成其事务。
在仲裁过程中不会丢失任何数据。丢失仲裁的控制器可以生成时钟脉冲,直到它丢失仲裁的字节结束,并且必须在总线空闲时重新启动其事务。
如果控制器还包含目标函数,并且在寻址阶段丢失仲裁,则获胜的控制器可能正在尝试解决它。因此,丢失的控制器必须立即切换到其目标模式。
Figure 8 显示了两个控制器的仲裁程序。根据连接到总线的控制器数量,可能会涉及更多。当产生DATA1的控制器的内部数据电平与SDA线路上的实际电平之间存在差异时,DATA1输出被关闭。这不会影响获胜控制器启动的数据传输。
Figure 8. 两个控制器之间的仲裁程序
由于 I2C 总线的控制仅由竞争控制器发送的地址和数据决定,因此总线上没有中央控制器,也没有任何优先级顺序。.
如果仲裁程序中,一个控制器发送重复起始或者停止条件,而另一个控制器仍在发送数据的那一刻,则存在未定义的条件。换句话说,以下组合会导致未定义的条件:
- 控制器 1 发送重复起始条件,控制器 2 发送数据位。
- 控制器 1 发送停止条件,控制器 2 发送数据位。
- 控制器 1 发送重复起始条件,控制器 2 发送停止条件。
3.1.9 时钟拉伸
时钟拉伸通过保持 SCL 线路低电平来暂停事务。在该线路再次释放为高电平之前,事务无法继续。时钟拉伸是可选的,实际上,大多数目标设备都不包含 SCL 驱动程序,因此它们无法拉伸时钟.
在字节层面,设备可能能够以快速速率接收数据字节,但需要更多时间来存储接收的字节或准备要传输的另一个字节。然后,目标可以在接收并确认字节后将 SCL 线路保持在低电平,以强制控制器进入等待状态,直到目标准备好在某种握手过程中进行下一个字节传输 (参见 Figure 7).
在位级别上,诸如具有或不具有I2C总线有限硬件的微控制器之类的器件可以通过延长每个时钟低电平周期来减慢总线时钟速度。任何控制器的速度都适应该设备的内部运行速率。
在Hs模式下,此握手功能只能在字节级别上使用(参见 Section 5.3.2)。
3.1.10 目标地址和 R/W 位
数据传输遵循 Figure 9 所示的格式。 在 START 条件 (S) 之后,将发送一个目标地址。这个地址有七位长,后跟第八位,即数据方向位(R/W)——“0”表示传输(WRITE),“1”表示数据请求(READ) (参见 Figure 10)。数据传输始终由控制器
生成的停止条件 (P ) 终止。但是,如果控制器仍然希望在总线上进行通信,它可以生成重复起始条件 (Sr) 并寻址另一个目标,而无需首先生成起始条件。然后,在这种传输中可以实现读/写格式的各种组合。
Figure 9. 完整的数据传输
Figure 10. 起始过程之后的第一个字节
可能的数据传输格式如下:
- 控制器-发送器向目标接收器发送信号。传输方向不会改变 (参见 Figure 11)。目标接收器应答每个字节。
- 控制器在第一个字节后立即读取目标 (参见 Figure 12). 在第一次应答时,控制器-发送器成为控制器-接收器,目标-接收器成为目标-发送器。 第一个应答仍由目标生成。控制器生成后续确认。停止条件由控制器生成,控制器在停止条件之前发送无应答(A)。
- 组合格式 (见 Figure 13)。在传输方向改变期间,起始条件和目标地址都会重复,但 R/W 位反转。如果控制器-接收器发送重复起始条件,则在重复起始条件之前发送一个无应答信号( A ‾ \overline{\text{A}} A )。
注意:
- 组合格式可用于控制串行存储器等。内部存储器位置必须在第一个数据字节期间写入。重复起始条件和目标地址后,可以传输数据。
- 所有关于访问的内存位置的自动递增或递减的决定均由设备的设计人员决定。
- 每个字节后跟一个应答位,如序列中的 A {\text{A}} A或者 A ‾ \overline{\text{A}} A 。
- I2C总线兼容设备必须在收到起始或者重复起始条件时重置其总线逻辑,以便它们都在预期目标地址的发送,即使这些起始条件未按照正确的格式出现
- 起始条件紧跟停止条件(数据为空)是非法格式。然而,许多设备被设计为在这种条件下正常运行。
- 连接到总线的每个设备都可以通过唯一的地址进行寻址。通常是简单的控制器/目标的关系,但可以有多个可以同时接收和响应的相同目标,例如在组广播中。当使用总线切换设备(如PCA9546A)时,该技术效果最佳,其中所有四个通道都打开并同时配置相同的设备,要知道不可能知道每个目标都进行了应答(总线线与的关系),需要一次打开一个通道以读回每个单独的设备的配置,以保证进行了正常的编程。请参阅各个器件的数据手册。
Figure 11. 控制器-发送器,用于寻址具有 7 位地址的目标接收器(传输方向不变)
Figure 12. 控制器紧接在第一个字节之后读取目标的数据
Figure 13. 组合格式
3.1.11 10位寻址
10 位寻址扩展了可能的地址数。具有7位和10位地址的器件可以连接到相同的 I2C 总线,并且7位和10位寻址可以在所有总线速度模式下使用。目前,10 位寻址尚未得到广泛使用。
10 位目标地址由 START 条件 (S) 或重复 START 条件 (Sr) 之后的前两个字节组成。
第一个字节的前七位是组合1111 0XX,其中最后两位(XX)是10位地址的两个最高有效位(MSB);第一个字节的第八位是确定数据方向的 R/W 位。
尽管保留地址位 1111 XXX 有八种可能的组合,但只有四种组合 1111 0XX 用于 10 位寻址。其余四个组合 1111 1XX 保留用于将来的 I2C总线增强功能。
前面描述的 7 位寻址的所有读/写格式组合都可以使用 10 位寻址。这里详细介绍了两个:
- 控制器-发送器以 10 位目标地址传输到目标接收器。传输方向不会改变(见 Figure 14)。 当 10 位地址遵循 START 条件时,每个目标将目标地址 (1111 0XX) 的第一个字节的前七位与其自己的地址进行比较,并测试第八位(R/W 方向位)是否为 0. 多个设备可能会找到匹配项并生成确认 (A1)。找到匹配项的所有目标都将目标地址 (XXXX XXXX) 的第二个字节的八位与其自己的地址进行比较,但只有一个目标找到匹配项并生成确认(A2)。匹配的目标仍由控制器寻址,直到它收到 STOP 条件 (P ) 或重复的 START 条件 (Sr),之后跟着不同的目标地址。
- 控制器-接收器读取具有 10 位目标地址的目标发送器。在第二个R/W位之后,传输方向发生了变化 (Figure 15). 直到应答位A2(包括),该过程与控制器 - 发送器对目标接收器的描述相同. 在重复的 START 条件 (Sr) 之后,匹配的目标会记住之前被寻址的地址。然后,此目标检查 Sr 后面的目标地址的第一个字节的前七位是否与 START 条件 (S) 之后的相同,并测试第八个 (R/W) 位是否为 1。则目标认为它已作为发送器寻址,并生成确认 A3。目标发送器保持寻址状态,直到它收到 STOP 条件 (P )或直到它收到另一个重复的 START 条件 (Sr),后跟另一个目标地址。在重复的 START 条件 (Sr) 之后,所有其他目标设备还将目标地址 (1111 0XX) 的第一个字节的前七位与其自己的地址进行比较,并测试第八个 (R/W) 位。但是,由于 R/W = 1(对于 10 位设备)或 1111 0XX 目标地址(对于 7 位设备)不匹配,因此不会对它们进行任何寻址。
Figure 14. 控制器-发送器使用 10 位地址寻址目标接收器
Figure 15. 控制器-接收器使用 10 位地址寻址目标发送器
有 10 位寻址的目标设备对“广播寻址”的反应方式与具有 7 位寻址的目标设备的反应方式相同. 硬件控制器可以在“广播寻址”后发送其10位地址。在这种情况下,“常规呼叫”地址字节后跟两个连续的字节,其中包含控制器发送器的10位地址。格式如Figure 15 所示,其中第一个 DATA 字节包含控制器地址的八个最低有效位。
START字节 0000 0001 (01h) 可以采用与 7 位寻址相同的方式的 10 位寻址(见 Section 3.1.15)。
3.1.12 保留地址
保留两组八个地址(0000 XXX 和 1111 XXX)用于Table 4.所示的目的。
Table 4. 保留地址
X = don’t care; 1 = HIGH; 0 = LOW.
目标地址 | 位 | 描述 |
---|---|---|
0000 000 | 0 | 广播地址[1] |
0000 000 | 1 | START 字节[2] |
0000 001 | X | CBUS 地址[3] |
0000 010 | X | 为不同的总线格式保留[4] |
0000 011 | X | 保留供将来使用 |
0000 1XX | X | Hs高速模式 控制器代码 |
1111 1XX | 1 | 设备标识 |
1111 0XX | X | 10位目标寻址 |
[1] 通用呼叫地址用于多种功能,包括软件复位。
[2] 不允许任何设备在接收 START 字节时进行应答。
[3] CBUS地址已被保留,以便在同一系统中实现CBUS兼容和 I2C总线兼容器件的相互混合**。** I2C总线兼容设备不允许在接收到此地址时做出响应。
[4] 包含为不同总线格式保留的地址,以使 I2C和其他协议能够混合使用。仅允许使用此类格式和协议的 I2C总线兼容设备响应此地址。
本地系统内地址的分配取决于系统架构师,他们必须考虑总线上使用的设备以及将来与其他传统I2C总线的任何交互。 或者,具有七个用户可分配地址引脚的设备允许分配所有128个地址。如果已知保留地址永远不会用于其预期目的,则可以将保留地址用于目标地址。
3.1.13 广播寻址
广播寻址用于同时寻址连接到 I2C总线的每个设备。但是,如果设备不需要广播地址结构中提供的任何数据,则可以通过不发出应答信号来忽略此地址。
如果设备确实需要来自通用广播寻址的数据,它将在地址发送应答并充当目标接收方。如果一个或多个设备响应,控制器实际上不知道有多少设备确认。第二个和后面的字节由每个能够处理此数据的目标接收器应答。如果设备无法处理其中一个字节则必须通过无应答来忽略它。同样,如果一个或多个目标确认,则控制器将看不到无应答信号。
通用广播地址的含义始终在第二个字节中指定。 (参阅Figure 16)。
Figure 16. 广播寻址的格式
有两种情况需要考虑:
- 当最低有效位 B 为“0”时。
- 当最低有效位 B 为“1”时。
当位 B 为“0”时,第二个字节具有以下定义:
-
0000 0110 (06h):
通过硬件复位和写入目标地址的可编程部分。在接收到这个2字节序列时,所有设计用于响应广播寻址的器件都会复位并接收其地址的可编程部分。
必须采取预防措施,确保器件在施加电源电压后不会拉下SDA或SCL线路,因为这些低电平会阻塞总线。
-
0000 0100 (04h):
通过硬件写入目标地址的可编程部分。行为如上,但设备不会重置。
-
0000 0000 (00h):
不允许将此代码用作第二个字节。编程过程的序列发布在相应的器件数据手册中。其余代码尚未定义,设备必须忽略它们。
当位 B 是“1”时,2 字节序列是“硬件广播寻址”。 这意味着序列由硬件控制器设备(例如键盘扫描仪)传输,该设备可以被编程为传输所需的目标地址。由于硬件控制器事先不知道必须将消息传输到哪个设备,因此它只能生成此硬件广播寻址及其自己的地址 — 向系统标识自身 (见 Figure 17)。
Figure 17. 从硬件控制器-发送器传输数据
第二个字节中剩余的七位包含硬件控制器的地址。该地址由连接到总线的智能设备(例如微控制器)识别,然后总线接受来自硬件控制器的信息。如果硬件控制器也可以充当目标,则目标地址与控制器地址相同。
在某些系统中,另一种方法可能是在系统重置后将硬件控制器-发送器设置为目标-接收器模式。通过这种方式,系统配置控制器可以告诉硬件控制器-发送器(现在处于目标-接收器模式)必须向哪个地址数据发送 (见 Figure 18)。完成此编程过程后,硬件控制器将保持控制器-发送器模式。
Figure 18. 通过硬件发送器传输数据,能够将数据直接转储到目标设备
3.1.14 软件复位
在广播寻址 (0000 0000)之后, 发送 0000 0110 (06h) 作为第二个字节会导致软件重置。此功能是可选的,并非所有设备都响应此命令。在接收到这个2字节序列时,所有设计用于响应一般呼叫地址的器件都会复位并接收其地址的可编程部分。
必须采取预防措施,确保器件在施加电源电压后不会拉下SDA或SCL线路,因为这些低电平会阻塞总线。
3.1.15 起始字节
微控制器可以通过两种方式连接到 I2C总线。具有片上硬件 I2C总线接口的微控制器可以编程为仅被总线请求中断。当设备没有这样的接口时,它必须通过软件持续监控总线。显然,微控制器监视或轮询总线的次数越多,它执行其预期功能所花费的时间就越少。
在这种情况下,在传输数据之前,可以先执行一个比正常情况长得多的启动过程 (见 Figure 19)。 启动过程包括:
• 起始条件 (S)
• 起始字节 (0000 0001)
• 应答时钟脉冲 (ACK)
• 重复的启动条件 (Sr)
Figure 19. 起始字节的流程
在需要总线访问的控制器传输 START 条件 S 后,将传输 START 字节 (0000 0001)。 因此,另一个微控制器可以以低采样速率对SDA线进行采样,直到检测到START字节中的七个零之一。在SDA线路上检测到此低电平后,微控制器可以切换到更高的采样速率,以找到重复的START条件Sr,然后将其用于同步。
硬件接收器在收到重复的 START 条件 Sr 时重置,因此忽略 START 字节。
在 START 字节之后生成一个与确认相关的时钟脉冲。这只是为了符合总线上使用的字节处理格式而存在。不允许任何设备确认 START 字节。
3.1.16 总线清除
在时钟(SCL)卡在低电平的极少数情况下,如果您的 I2C 器件具有硬件复位输入,则首选步骤是使用硬件复位信号复位总线。如果 I2C 器件没有硬件复位输入,请重新打开器件电源以激活强制内部上电复位 (POR) 电路。
如果数据线(SDA)卡在低电平,控制器应发送九个时钟脉冲。保持总线低电平的设备应该在这九个时钟内的某个时候释放它。如果没有,则使用硬件复位或重启电源来清除总线。
3.1.17 设备标识
设备标识字段 (见 Figure 20) 是一个可选的 3 字节只读(24 位)字,提供以下信息:
• 带有制造商名称的 12 位,每个制造商是唯一的 (例如,NXP)
• 九位部件标识,由制造商指定 (例如, PCA9698)
• 带有芯片修订版的三位,由制造商指定 (例如, RevX)
Figure 20. 设备标识字段
设备标识是只读的,在设备中是硬连线的,可以按如下方式访问:
-
起始条件
-
控制器发送保留的设备标识 I2C总线地址,后跟设置为“0”的 R/W位: ‘1111 1000’。
-
控制器发送它必须识别的目标设备的 I2C 总线目标地址。LSB 是一个“可忽略”的值。只有一个设备必须确认此字节(具有 I2C 总线目标地址的字节)。
-
控制器发送重复启动的条件。
备注:STOP 条件后跟 START 条件将重置目标状态机,并且无法执行设备 ID 读取。此外,STOP 条件或重新启动条件,然后访问另一个目标设备会重置目标状态机,并且无法执行设备 标识读取。
-
控制器发送保留的设备标识 I2C 总线地址,后跟设置为“1”的R/W 位(读):“1111 1001”。
-
设备标识读取可以完成,从12个制造商位(第一个字节 + 第二个字节的4个MSB)开始,然后是9个部件识别位(第二个字节的 4 个 LSB + 第三个字节的 5 个 MSB),然后是3个版本修订位(第三个字节的三个LSB)。
-
控制器通过发送不应答最后一个字节来结束读取序列,从而重置目标设备状态机并允许控制器发送停止条件。
备注:通过发送NACK,可以随时停止读取设备标识。如果控制器继续在第三个字节之后对字节进行应答,则目标将回滚到第一个字节,并不断发送设备标识序列,直到检测到无应答。
Table 5. 指定的设备商ID
位 | 公司 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NXP Semiconductors |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | NXP Semiconductors (保留) |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | NXP Semiconductors (保留) |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | NXP Semiconductors (保留) |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | Ramtron International |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | Analog Devices |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | STMicroElectronics |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | ON Semiconductor |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | Sprintek Corporation |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | ESPROS Photonics AG |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | Fujitsu Semiconductor |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | Flir |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | O2Micro |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | Atmel |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | DIODES IncoRPorated |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | Pericom |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | Marvell Semiconductor Inc |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | ForteMedia |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | Snaju LLC |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | Intel |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | Pericom |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | Arctic Sand Technologies |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | Micron Technology |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | Semtech Corporation |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | IDT |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | TT Electronics |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | Alien Technology |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | LAPIS semiconductor |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | Qorvo |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | Wuxi Chipown Micro-Electronics limited (Chipown) |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | KOA Corporation |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | Prevo Technologies, Inc. |
3.2 超快速 I2C 总线协议
超快速模式(UFm)的 I2C 总线是一条 2 线推挽式串行总线,工作频率范围为 DC 至 5 MHz,沿一个方向传输数据。对于速度大于 1 MHz ,用于驱动 LED 控制器和其他不需要反馈的设备时,它最有用。UFm I2C 总线协议基于标准 I2C 总线协议,该协议由 START、目标地址、命令位、第九个时钟和 STOP 位组成。命令位仅为“写入”, 第九个时钟上的数据位被驱动为高电平,由于总线的单向性质而忽略了ACK周期。2 线推挽式驱动器由超快速串行时钟 (USCL) 和串行数据 (USDA)组成。
目标设备包含唯一的地址(无论是微控制器、LCD 驱动器、LED 控制器、GPO),并且仅作为接收器运行。LED驱动器可能只是一个接收器,可以由超快速模式支持,而存储器既可以接收和发送数据,也不受超快速模式的支持。
由于UFM I2C 总线使用推挽式驱动器,因此它不具备线与开漏的标准模式、快速模式、快速模式+的 I2C 总线的多控制器功能。在 UFm 中,控制器是唯一在总线上启动数据传输并生成时钟信号以允许该传输的设备。所有其他已寻址的设备都被视为目标。
Table 6. 超快速模式 I2C 总线术语的定义
术语 | 描述 |
---|---|
transmitter(发送器) | 将数据发送到总线的设备 |
Receiver(接收器) | 从总线接收数据的设备 |
Controller(控制器) | 启动传输、生成时钟信号并终止传输的设备 |
Target(目标) | 控制器寻址的设备 |
让我们考虑一个控制器和连接到UFm I2C 总线的多个目标之间数据传输的情况 (见 Figure 21)。
Figure 21. 超快速模式 I2C 总线配置
这突出显示了UFm I2C 总线上的控制器/发送器-目标/接收器关系。请注意,这些关系是永久性的,因为只允许在一个方向上进行数据传输。数据传输将按如下方式进行:
假设控制器想要向LED控制器2发送信息:
- ASIC A (控制器-发送器),通过在 USDA 上发送地址并在 USCL 上生成时钟来寻址 LED 控制器 2(目标接收器)。
- ASIC A (控制器-发送器),将数据发送到美国农业部的LED控制器2(目标接收器),并在USCL上生成时钟。
- ASIC A 终止传输.
由于推挽输出上的总线争用,不允许将多个 UFm 控制器连接到 UFm I2C 总线。如果系统中需要额外的控制器,则必须将其与另一个控制器完全隔离(即,使用真正的多路复用器),因为一次总线上只允许一个控制器。
UFm I2C 总线上的时钟信号的产生始终由控制器设备负责,即控制器在总线上传输数据时生成时钟信号。来自控制器的总线时钟信号不能被具有时钟延伸的目标器件改变,并且仲裁和时钟同步过程在 I2C 总线中不存在。
Table 7 总结了UFm I2C 总线规范中强制性和可选部分的使用。
Table 7. I2C 总线特性对UFm的适用性
M = 强制性的; O =可选的; n/p =不适用的
特性 | 配置 |
---|---|
单控制器 | |
START condition(起始条件) | M |
STOP condition(停止条件) | M |
Acknowledge(应答) | n/p |
Synchronization(同步) | n/p |
Arbitration(仲裁) | n/p |
Clock stretching(时钟拉伸) | n/p |
7-bit target address(7位地址) | M |
10-bit target address(10位地址) | O |
General Call address(广播寻址) | O |
Software Reset(软件复位) | O |
START byte(起始字节) | O |
Device ID(设备标识) | n/p |
3.2.1 USDA 和 USCL 信号
USDA和USCL都是单向线路,具有推挽输出。当总线空闲时,两条线路均由输出级的上晶体管拉至高电平。在超快速模式下, I2C 总线上的数据可以以高达 5000 kbit/s 的速率传输。连接到总线的接口数量受总线负载、电缆末端反射、连接器和短截线的限制。
Figure 22. USCL, USDA 输出的简化原理图
3.2.2 USDA 和 USCL 逻辑电平
由于可以连接到 I2C总线的不同技术器件(CMOS、NMOS、双极性)种类繁多,逻辑“0”(低)和“1”(高)的电平不是固定的,而是取决于相关的 VDD电平。 输入参考电平设置为VDD的30 % 和 70%; VIL 为 0.3VDD 以及 VIH 为 0.7VDD。见 Figure 40, 时序图。有关电气规格,见Section 6。
3.2.3 数据有效性
USDA 线上的数据在时钟的高电平期间必须稳定。只有当 USCL 线上的时钟信号为低电平时,数据线的高电平或低电平状态才能改变(见 Figure 23). 每个传输的数据位都会生成一个时钟脉冲。
Figure 23. UFm I2C 总线上的位传输
3.2.4 起始和停止条件
当总线不繁忙时,数据线和时钟线都保持高电平。所有事务都以 START (S) 开头,并且可以通过 STOP (P ) 终止(见 Figure 24)。 当 USCL 为高时,USDA 线上的高到低转换定义了 START 条件。当 USCL 为高时,USDA 线上的从低到高的转换定义了 STOP 条件。
Figure 24. UFm I2C 总线的起始和停止条件的定义
START 和 STOP 条件始终由控制器生成。在 START 条件之后,总线被视为繁忙。在STOP条件之后的一段时间内,总线被认为是再次空闲的。这个总线空闲的情况在Section 6中指定。如果生成重复的 START (Sr) 而不是 STOP 条件,总线将保持忙碌状态。在这方面,START (S) 和重复 START (Sr) 条件在功能上是相同的。因此,对于本文档的其余部分,S符号用作通用术语,以表示START和重复的START条件,除非Sr特别相关。
如果连接到总线的设备包含必要的接口硬件,则很容易检测START和STOP条件。然而,没有这种接口的微控制器必须在每个时钟周期内至少对USDA线路进行两次采样才能感测转换。
3.2.5 字节格式
放在 USDA 线路上的每个字节的长度必须为 8 位。每次传输可以传输的字节数不受限制。控制器在每个字节后的应答周期内驱动 USDA HIGH。数据首先使用最高有效位 (MSB) 传输 (见 Figure 25). 如果目标无法接收另一个完整的数据字节或者当它正在执行某些其他功能(例如为内部中断提供服务)时,则不允许目标将时钟保持为低。
Figure 25. UFm I2C 数据传输
3.2.6 应答 (ACK) 和无应答(NACK)
由于目标无法响应第九个时钟周期,因此不需要 ACK 和 NACK。但是,时钟周期在 UFm 中仍然保留着,以便与 I2C 总线协议兼容。ACK和NACK也被称为第九个时钟周期。控制器产生所有时钟脉冲,包括第九个时钟脉冲。第九个数据位始终驱动为 HIGH (‘1’)。目标设备在任何时候都不允许驱动SDA线路。
3.2.7 目标地址和 R/W 位
数据传输遵循图 Figure 26 中所示的格式。 在 START 条件 (S) 之后,将发送一个目标地址。这个地址是七位长,后跟第八位,这是一个数据方向位(W)。“0”表示传输(WRITE);“1”表示对数据的请求(READ),UFm不支持(START字节, Section 3.2.12除外) 因为通信是单向的(参考 Figure 27)。数据传输始终由控制器生成的 STOP 条件 (P ) 终止。
但是,如果控制器仍然希望在总线上进行通信,它可以生成重复的 START 条件 (Sr) 并寻址另一个目标,而无需首先生成 STOP 条件。
Figure 26. 完整的 UFm 数据传输
Figure 27. START 过程之后的第一个字节
UFm 数据传输格式是:
- 控制器-发送器向目标接收器发送信号。传输方向不会改变(见 Figure 28). 控制器从不应答,因为它从不接收任何数据,而是在第九位上生成“1”,以使目标符合 I2C 总线协议。
Figure 28. 控制器-发射器,使用 7 位地址寻址目标接收器
注意:
- 可以使用独立的事务或者重复的起始格式来寻址多个目标。重复的START条件和目标地址后,可以传输数据。
- 所有关于访问的内存位置的自动递增或递减的决定均由设备设计人员决定。
- 每个字节后跟一个无应答位,如序列中的 A ‾ \overline{\text{A}} A 块所示。
- I2C 总线兼容设备必须在收到START或者重复START条件时重置其总线逻辑,以便它们都在预期目标地址的发送,即使这些START条件未按照正确的格式出现。
- START 条件紧跟 STOP条件(无效信息)是非法格式。然而,许多设备被设计为在这种条件下正常运行。
- 连接到总线的每个设备都可以通过唯一的地址进行寻址。存在简单的控制器/目标关系,但可以有多个可以同时接收和响应的相同目标,例如,在同时配置所有相同设备的组广播中,要知道不可能知道每个目标都进行了应答。请参阅各个器件的数据手册。
3.2.8 10位寻址
10 位寻址扩展了可能的地址数。具有7位和10位地址的器件可以连接到相同的 I2C 总线,并且7位和10位寻址可以在所有总线速度模式下使用。
10 位目标地址由 START 条件 (S) 或重复 START 条件 (Sr) 之后的前两个字节组成。
第一个字节的前七位是组合1111 0XX,其中最后两位(XX)是10位地址的两个最高有效位(MSB);第一个字节的第八位是确定数据方向的 R/W 位。
尽管保留地址位 1111 XXX 有八种可能的组合,但只有四种组合 1111 0XX 用于 10 位寻址。其余四个组合 1111 1XX 保留用于将来的 I2C总线增强功能。
只有前面描述的7位寻址的写入格式才能使用10位寻址。详见此处。
- 控制器-发送器以 10 位目标地址传输到目标接收器。传输方向不会改变 (见 Figure 29)。 当 10 位地址遵循 START 条件时,每个目标将目标地址 (1111 0XX) 的第一个字节的前七位与其自己的地址进行比较,并测试第八位(R/W 方向位)是否为 0(W)。找到匹配项的所有目标都将目标地址 (XXXX XXXX) 的第二个字节的八位与其自己的地址进行比较,但只有一个目标找到匹配项并生成确认(A2)。匹配的目标仍由控制器寻址,直到它收到 STOP 条件 (P ) 或重复的 START 条件 (Sr),之后跟着不同的目标地址。
Figure 29. 控制器-发射器使用 10 位地址寻址目标接收器
START字节 0000 0001 (01h) 可以采用与 7 位寻址相同的方式的 10 位寻址 (见 Section 3.2.12).
3.2.9 UFm 中的保留地址
UFm I2C 总线具有与其他 I2C 总线模式不同的物理层。因此,可用的目标地址范围是不同的。保留两组八个地址(0000 XXX 和 1111 XXX),用于 Table 8所示的目的。
Table 8. 保留的地址
X = don’t care; 1 = HIGH; 0 = LOW.
目标地址 | 位 | 描述 |
---|---|---|
0000 000 | 0 | 广播地址 [1] |
0000 000 | 1 | START 字节 [2] |
0000 001 | X | 保留供将来使用 |
0000 010 | X | 保留供将来使用 |
0000 011 | X | 保留供将来使用 |
0000 1XX | X | 保留供将来使用 |
1111 1XX | X | 保留供将来使用 |
1111 0XX | X | 10位目标寻址 |
[1] 通用呼叫地址用于多种功能,包括软件复位。
[2] 不允许UFm 设备在接收 START 字节时进行应答。
本地系统内地址的分配取决于系统架构师,他们必须考虑总线上使用的设备以及将来与其他传统I2C总线的任何交互。 或者,具有七个用户可分配地址引脚的设备允许分配所有128个地址。如果已知保留地址永远不会用于其预期目的,则可以将保留地址用于目标地址。
3.2.10 广播寻址
广播寻址用于同时寻址连接到 I2C总线的每个设备。但是,如果设备不需要广播地址结构中提供的任何数据,则可以通过无发出应答信号来忽略此地址。如果设备确实需要来自通用广播寻址的数据,它将在地址发送应答并充当目标接收方。如果一个或多个设备响应,控制器实际上不知道有多少设备确认。第二个和后面的字节由每个能够处理此数据的目标接收器应答。如果设备无法处理其中一个字节则必须通过无应答来忽略它。同样,如果一个或多个目标确认,则控制器将看不到无应答信号。通用广播地址的含义始终在第二个字节中指定。 (见 Figure 30)。
Figure 30. 广播寻址的格式
有两种情况需要考虑:
- 当最低有效位 B 为“0”时.
- 当最低有效位 B 为“1”时.
当位 B 为“0”时,第二个字节具有以下定义:
0000 0110 (06h)
通过硬件复位和写入目标地址的可编程部分。 在接收到这个2字节序列时,所有设计用于响应广播寻址的器件都会复位并接收其地址的可编程部分。
0000 0100 (04h)
通过硬件写入目标地址的可编程部分。行为如上,但设备不会复位。.
0000 0000 (00h)
不允许将此代码用作第二个字节。编程过程的序列发布在相应的器件数据手册中。其余代码尚未定义,设备必须忽略它们。
当位 B 为“1”时,将忽略 2 字节序列。
3.2.11 软件复位
在广播寻址 (0000 0000)之后, 发送 0000 0110 (06h) 作为第二个字节会导致软件重置。此功能是可选的,并非所有设备都响应此命令。在接收到这个2字节序列时,所有设计用于响应一般呼叫地址的器件都会复位并接收其地址的可编程部分。
3.2.12 起始字节
微控制器可以通过两种方式连接到 I2C 总线。具有片上硬件 I2C 总线接口的微控制器可以编程为仅被总线请求中断。当设备没有这样的接口时,它必须通过软件持续监控总线。显然,微控制器监视或轮询总线的次数越多,它执行其预期功能所花费的时间就越少。
因此,快速硬件设备和依赖于软件轮询的相对较慢的微控制器之间存在速度差异。
在这种情况下,在传输数据之前,可以先执行一个比正常情况长得多的启动过程(见 Figure 31)。启动过程包括:
- 起始条件 (S)
- 起始字节 (0000 0001)
- 应答时钟脉冲 (ACK)
- 重复的启动条件 (Sr)
Figure 31. 开始字节的流程
在需要总线访问的控制器传输START条件S后,将传输START字节(0000 0001) 。因此,另一个微控制器可以以低采样率对USDA线进行采样,直到检测到START字节中的七个零之一。在USDA线路上检测到此低电平后,微控制器可以切换到更高的采样速率以找到重复的START条件Sr,然后将其用于同步。硬件接收器在收到重复的 START 条件 Sr 时重置,因此忽略 START 字节。在 START 字节之后生成一个与确认相关的时钟脉冲。这只是为了符合总线上使用的字节处理格式而存在。不允许任何设备确认 START 字节。
3.2.13 无响应的目标 复位
在目标变得无响应的极少数情况下(例如,通过外部反馈而不是通过UFm I2C 总线确定),优先过程是使用软件复位命令或硬件复位信号复位目标。如果目标不支持这些功能,则重新打开设备电源以激活强制内部上电复位 (POR) 电路。
3.2.14 设备标识
UFm 中不支持设备标识字段。