我想将多个 I2C 从设备连接到同一组引脚上的微控制器,但 I2C 设备都共享相同的地址。地址在硬件中是固定的。
有没有办法连接多个具有相同地址的设备?
可能是某种 I2C 地址转换模块,每个设备都有一个可配置的地址,所以我可以为每个设备分配我自己的地址。
我想将多个 I2C 从设备连接到同一组引脚上的微控制器,但 I2C 设备都共享相同的地址。地址在硬件中是固定的。
有没有办法连接多个具有相同地址的设备?
可能是某种 I2C 地址转换模块,每个设备都有一个可配置的地址,所以我可以为每个设备分配我自己的地址。
I2C 中没有内置任何东西可以做到这一点,通常从设备会有一些外部引脚可以设置为 0 或 1 来切换几个地址位以避免这个问题。或者,我与一些制造商打交道,它们的零件有 4 或 5 个零件编号,唯一的区别是它的 I2C 地址。
大多数设备都有处理 I2C 通信的特定硬件,即从 ACK 在硬件中,所以你真的无法绕过它。
至于翻译模块,你可以买一些 0.50 美元的带有 2 个 I2C 总线的 PIC,并编写一些快速代码,让它们充当我猜的地址翻译器。
现在有了答案——凌力尔特拥有 LTC4316/17/18 系列地址转换器。它们相对较新,可用性不确定。
如果没有 I2C 设备使用时钟拉伸(握手),并且如果您正在对 I2C 主设备进行位敲击,那么一个简单的技巧就是让一些设备交换时钟和数据引脚。在一个字节的传输过程中,时钟和数据引脚交换的设备将把每个“0”位视为非事件(数据上升和下降没有时钟),并将每个“1”位视为 I2C 停止并开始(时钟上升,而数据低,数据上升和下降,然后是时钟下降)。一个设备的有意停止和启动条件可能会被另一个设备视为数据位,但除非一个设备在“1”位之间具有过多的启动和停止条件,否则任何设备都不太可能“意外”