多个相同地址的I2C设备,如何挂载在同一条总线上

前言

(1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:[email protected],此消息至2025年1月1日前均有效
(2)最近,在交流群里面看到一个有意思的问题。一个人问,如果四个颜色传感器挂载在一个iic总线上怎么分别读取数据?传感器地址一样的。此时不由想到我之前大一比赛的时候也遇到过类似的问题,想了很久才想出解决办法,由此记录一下。

使用继电器片选SDA

(1)我当时想到的办法很简单,四个设备的SCL都挂载在同一处,SDA线通过一个继电器连接。
(2)如果我想与其中一个设备交流,只需要通过控制继电器,使设备与SDA连接即可。这样就解决了四个地址一样的传感器挂载在一个iic总线上的问题。
(3)不过需要注意,这样就会多消耗4个引脚。

多个相同地址的I2C设备,如何挂载在同一条总线上_第1张图片

优化方案

(1)我将这个问题发到交流群中,发现一位大佬有了更好的解决方案:大佬是讲SDA连接在一起,SCL通过mux器件进行选择连接。
(2)这样做有什么好处呢?
<1>mux器件可以让我们明显的减少IO使用。例如上面4个传感器需要4个IO控制,而如果使用如下的mux器件,就能够减少到2个IO控制。

多个相同地址的I2C设备,如何挂载在同一条总线上_第2张图片

多个相同地址的I2C设备,如何挂载在同一条总线上_第3张图片

<2>SDA连接在一起,SCL分开的方案能够有效减少代码复杂度。模拟iic设计到gpio换向的问题,本来模拟SDA的数据帧就很麻烦,然后还要考虑继电器的事情。可能会变得更加的复杂。

参考

(1)MUX多路选择器(Multiplexer);

你可能感兴趣的:(随心记,redis,数据库,缓存)