前言
(1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02@gmail.com,此消息至2025年1月1日前均有效
(2)最近,在交流群里面看到一个有意思的问题。一个人问,如果四个颜色传感器挂载在一个iic总线上怎么分别读取数据?传感器地址一样的。此时不由想到我之前大一比赛的时候也遇到过类似的问题,想了很久才想出解决办法,由此记录一下。
使用继电器片选SDA
(1)我当时想到的办法很简单,四个设备的SCL都挂载在同一处,SDA线通过一个继电器连接。
(2)如果我想与其中一个设备交流,只需要通过控制继电器,使设备与SDA连接即可。这样就解决了四个地址一样的传感器挂载在一个iic总线上的问题。
(3)不过需要注意,这样就会多消耗4个引脚。
优化方案
(1)我将这个问题发到交流群中,发现一位大佬有了更好的解决方案:大佬是讲SDA连接在一起,SCL通过mux器件进行选择连接。
(2)这样做有什么好处呢?
<1>mux器件可以让我们明显的减少IO使用。例如上面4个传感器需要4个IO控制,而如果使用如下的mux器件,就能够减少到2个IO控制。
<2>SDA连接在一起,SCL分开的方案能够有效减少代码复杂度。模拟iic设计到gpio换向的问题,本来模拟SDA的数据帧就很麻烦,然后还要考虑继电器的事情。可能会变得更加的复杂。
参考
(1)MUX多路选择器(Multiplexer);