主题中讨论的其他器件:TCA9543A、 TCA9534A
工具与软件:
大家好、团队成员:
我正在使用 MSP430-FR-2475 MCU 作为 速度为400kHz 的 I2C 主器件、并且有一个 I2C 从器件与它连接、从器件地址未知。
您能否提供准确的代码建议以了解此从器件的 I2C 从器件地址?
通常、我们必须提供启动 I2C、然后在循环中逐一发送地址值、并且确认的任何地址值都被视为从器件地址。 但在固件中到底是如何实现这一点我感到困惑。 您能在这里提供帮助吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
大家好、团队成员:
我正在使用 MSP430-FR-2475 MCU 作为 速度为400kHz 的 I2C 主器件、并且有一个 I2C 从器件与它连接、从器件地址未知。
您能否提供准确的代码建议以了解此从器件的 I2C 从器件地址?
通常、我们必须提供启动 I2C、然后在循环中逐一发送地址值、并且确认的任何地址值都被视为从器件地址。 但在固件中到底是如何实现这一点我感到困惑。 您能在这里提供帮助吗?
是的、这将是原则----向每个可能的 I2C 地址发送一个空请求、并查看哪些请求被接受(确认)。 如果总线上有多个器件、每个器件都会应答。
一些观察结果:
1) I2C 地址只有7位、因此您的器件可能会显示两次(一次出现在0x20、一次出现在0xA0)。
2) 2)您应该避免探测保留的地址(0x00-0x07和0x78-0x7F)、因为其中一些地址可能包含意外的结果。
组合(1)/(2)、循环边界应为0x08-0x77。
你(们)好
I2C 扩展器 TCA9543A 与 MCU MSP-2475相连。 现在 A1和 A0引脚都接地。 现在考虑数据表、地址为0xE0 (或用于读取的0xE1)。 但在我的代码中、当迭代循环时、不会检测到这个0xE0 (或0xE1)。 硬件侧的连接正确。
我在下面附上了 I2C 扩展器数据表。
您能告诉我在这里遗漏了什么吗?
谢谢!
Nitish
I2C 地址仅为7位。 R/W 位不是地址的一部分。 [参考 I2C 规范(UM10204版本7.0)图10.]
图12-13 (所示)实际上说明了这一点。 图14/Sec 8.6.1不正确。 如果 A0=A1=0、那么需要的地址为0x70。
I2C 单元会忽略 I2CSA 的高位、因此如果您在那里放置0xE0、则实际上使用的是地址0x60。
---
扫描 TCA9534A 后面的总线就是一种策略。 我想您可以只写入 Control=0x03和(重新) scan、但这可能会暴露地址冲突(我们假设出于某种原因而切换)。
当 A0=A1=0时、所需的地址(扩展器本身的地址)为0x70、如图12-13所示。
要扫描它背后的总线、你需要"知道"它在那里--根据 Adafruit 的 I2C 地址汇编、还有其他设备使用0x70-0x73: