embedded - 我们如何将 SDA 或 SCL 线用于 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 设备。
解决方案
该引脚的逻辑电平可用于选择特定的 TMP102 从设备
这不是 ADD0 的用途——它是配置引脚,而不是选择引脚。不用于选择设备;I 2 C 地址是 SDA 上数据流的一部分,例如 SPI 上没有“选择”引脚。
相反,ADD0 用于将每个设备的地址定义为表 4 中定义的四个地址之一。这些地址是 0x48、0x49、0x4A 或 0x4B 之一,具体取决于 ADD0 与 GND、V+、SDA 或 SDL 的连接。像这样:
设备如何确定地址并没有在数据表中显示,您也不需要知道,但给出了:
来自https://en.wikipedia.org/wiki/I%C2%B2C的 Marcin Floryan 的公共领域图片
在SDA 下降沿的启动条件下,会发生以下情况:
ADDR ADD0 SDA SCL
0x48 0 v 1
0x49 1 v 1
0x4A v v 1
0x4B 1 v 1
然后在下一个下降沿 SCL
ADDR ADD0 SDA SCL
0x48 0 0 v
0x49 1 0 v
0x4A 0 0 v
0x4B v 0 v
因此,可以使用适当的时序逻辑在 S 阶段结束时和 B1 之前锁存地址,这足够了,因为直到 B7 才会发生地址匹配,并且总线上的所有设备都必须侦听该地址。
推荐阅读
- javascript - D3 从 .onclick 打开引导模式
- rapidjson - 使用 PrettyWriter 将 rapidjson 文档写入文件
- c++ - 是否可以强制 STL 集重新评估谓词?
- java - 如何不在 RxJava 中重复相同的操作?
- python - 基于字典的 ngram
- python - `pipenv install --index` 和 `pipenv install --pypi-mirror` 有什么区别?
- database - 使用 NiFi 使用 QueryDatabase 表获取记录时限制行
- arrays - Powershell如何计算多维数组中的所有元素
- c# - 使用实体框架的唯一主键
- php - PHP cut GET 请求参数