我们如何使用 SDA 或 SCL 线作为 I2C 地址?

omk*_*ale 1 hardware embedded i2c

TMP102 芯片(http://www.ti.com/lit/ds/symlink/tmp102.pdf)可以有多个 I2c 从地址。它有一个名为 ADD0(第 5 节)的地址引脚,可用于选择多个地址(第 7.3.4 节)。该引脚的逻辑电平可用于选择特定的 TMP102 从设备。根据表4,可能有4个地址。我确实知道将引脚连接到高电压或低电压会产生两个不同的地址。但表中提到我们可以将 SDA 和 SCL 引脚用于两个不同的地址。我不确定这是如何运作的。谁能解释一下如何使用它以及我们如何使用基于 SDA 和 SCL 引脚的多个 TMP102 器件。

Cli*_*ord 5

该引脚的逻辑电平可用于选择特定的 TMP102 从设备

这不是 ADD0 的目的 - 它是一个配置引脚,而不是一个选择引脚。它不用于选择设备;I 2 C 地址是 SDA 上数据流的一部分,没有像 SPI 上那样的“选择”引脚。

相反,ADD0 用于将每个设备的地址定义为表 4 中定义的四个地址之一。这些地址分别为 0x48、0x49、0x4A 或 0x4B 之一,具体取决于 ADD0 与 GND、V+、SDA 或 SDL 的连接。就像这样:

在此输入图像描述

设备如何确定地址并未在数据表中透露,您实际上不需要知道,但给出:

在此输入图像描述 公共领域图像由 Marcin Floryan 提供,来自https://en.wikipedia.org/wiki/I%C2%B2C

在SDA 下降沿的启动条件下,会发生以下情况:

ADDR ADD0 SDA SCL
0x48   0   v   1
0x49   1   v   1
0x4A   v   v   1   
0x4B   1   v   1
Run Code Online (Sandbox Code Playgroud)

然后在下一个 SCL 下降沿

ADDR ADD0 SDA SCL
0x48   0   0   v
0x49   1   0   v
0x4A   0   0   v   
0x4B   v   0   v
Run Code Online (Sandbox Code Playgroud)

因此,可以使用适当的顺序逻辑在 S 阶段结束时和 B1 之前锁存地址,这就足够了,因为直到 B7 才会发生地址匹配,并且总线上的所有设备都必须侦听该地址。