我已经了解了 I2C 和多主器件的注意事项以及有关 I2C 开关多主器件兼容性的问题。
PCA9544数据表第13页指出:
当选择一个通道时、在 I2C 总线上施加一个停止条件后、该通道变为有效状态。
这可确保当通道被激活时所有 SCn/SDN 线路处于高电平状态、以便在连接时不会产生错误条件。
这是有道理的,但它还指出:
"一个停止条件必须在确认周期之后立即发生。"
预期的顺序似乎是
(开始)(从器件地址)(写入)(ACK)(新通道配置)(ACK)(停止)
我尝试更改开关的活动通道、但随后是重复启动、例如
(START)(从器件地址)(写)(ACK)(新通道配置)(ACK)(重复启动)(更多到其他器件的事务)(停止)
似乎交换机忽略了新的通道配置并保留了先前的设置。 因此、重复起始之后的事务通过错误的总线发送。
在单个主器件配置中、使用单独的停止传输似乎没有问题。
然而、对于多个主器件、重复起始是确保传输按预期执行的唯一方法。
一个小示例
- 主器件1希望读取开关通道1上的器件 X
- 主器件2希望读取开关通道2上的器件 Y
这可能是不必要的结果
- 主器件1重新配置开关以连接通道1、传输结束时停止
- 主器件2接管总线并重新配置开关以连接通道2并断开通道1
- 主器件1读取器件 X。如果通道2上也占用了地址、主器件1甚至不会意识到它是错误的器件。
- 主器件2无错误地读取正确的器件 Y。
根据我的理解、重复启动是避免(罕见)此类情况的唯一方法。
没有它、开关在具有多个主控的总线上使用并不是100%安全。
交换机地址最多包含1个、因此对其他设备的访问应在大多数时间内赢得仲裁进程。
我怀疑同一地址范围0x70-0x77中没有器件。
除了其他器件之外、将多个开关级联到接口4 x 4分支而不是4分支的情况如何?
我的问题:
如何在多主控总线上使用(级联) I2C 开关?
是否可以以某种方式使用具有重复启动的开关、或者是否缺少某些东西、而这并不是必需的?
为什么必须立即停止并且重复启动不可用?
