racemaker 发表于 2012-12-6 20:55:51

如何在同一条i2c总线上挂相同地址的i2c设备

linux i2c子系统限制了在同一条i2c总线上不能出现相同地址的设备。

这点让我比较郁闷,现在要让具有相同i2c地址的两个设备挂上去,没辙了。其实这两个设备是相互独立,同一时刻只有一个设备工作。

完全可以挂载同一条总线上。我想这种情况是常见的,大家是怎么解决的,

i2c-dev层有I2C_SLAVE_FORCE这样一个flag,貌似可以用,但i2c-dev层是针对用户层驱动设计的,不适合我的内核驱动设计。

高手帮忙出点招。

gallle 发表于 2012-12-6 21:06:01

分时供电怎末样?

error_dan 发表于 2012-12-6 21:09:42

几乎不可能,IIC器件一般会留几个硬件位给用户自己配置,其余的都是硬件上定死的,不仅用于地址识别还用于类型识别,不同类型的设备有不同的硬件地址掩码。如果需要挂多个器件,一般都是在硬件上设置留给用户的这几个地址位。

zhikai_wu 发表于 2012-12-6 21:13:22

不通信时切段不用设备的总线

racemaker 发表于 2012-12-6 21:21:08

本帖最后由 racemaker 于 2012-12-6 21:22 编辑

几乎不可能,IIC器件一般会留几个硬件位给用户自己配置,其余的都是硬件上定死的,不仅用于地址识别还用于类型识别,不同类型的设备有不同的硬件地址掩码。如果需要挂多个器件,一般都是在硬件上设置留给用户的这几个地址位。
-------------------------------------------------------------------------------------------------

其实是着样的,我是一个摄像头模组,上面有两个设备地址相同的摄像头,也没预留硬件位,只能通过软件去解决。这俩个摄像头是分时供电的,不同时使用。

dr2001 发表于 2012-12-6 21:22:01

IIC总线从主机端看下去,能够访问到的总线上,一个Slave ID对应唯一的一个硬件。这是协议规定的,你没办法修改。

如果硬件没做,那么,有IIC总线切换器可以用;要不然就是让不工作的芯片在休眠状态下,IIC总线引脚高阻并且不响应IIC总线请求;以及其它硬件的或者操作Slave Device的方法。

总之,指望修改主机端的东西是不能解决问题的,因为你的问题违反了IIC本身的协议。

racemaker 发表于 2012-12-6 21:26:01

本帖最后由 racemaker 于 2012-12-6 21:30 编辑

IIC总线从主机端看下去,能够访问到的总线上,一个Slave ID对应唯一的一个硬件。这是协议规定的,你没办法修改。

如果硬件没做,那么,有IIC总线切换器可以用;要不然就是让不工作的芯片在休眠状态下,IIC总线引脚高阻并且不响应IIC总线请求;以及其它硬件的或者操作Slave Device的方法。

总之,指望修改主机端的东西是不能解决问题的,因为你的问题违反了IIC本身的协议。
-----------------------------------------------------------------------------------------------------------------------------------

你说的也就是我头疼的,因为我是分时使用,完全可以挂在同一条总线上,如果不走linux i2c的标准架构,是完全可以做到的。i2c-core中要check_slave_address。这我是没辙了。

没辙的是硬件上两个slave设备是引出的是同一条总线,要不然我就挂载不同的总线上了。

error_dan 发表于 2012-12-6 21:31:59

对了,NXP似乎有总线仲裁用的硬件,用于扩展IIC总线用的,你去找找看。

漂白的心 发表于 2012-12-7 00:27:29

有个器件,可以用来切换总线,,,你用一个IO控制器件,去切换2个IIC的clk,,器件名字忘记了。。

racemaker 发表于 2012-12-7 15:29:45

本帖最后由 racemaker 于 2012-12-7 15:34 编辑

问题解决了。在注册的时候注册不同的地址,确保能注册上,然后在device 的 probe时候修改为正确的地址。

leavic 发表于 2012-12-7 17:17:38

racemaker 发表于 2012-12-6 21:21 static/image/common/back.gif
几乎不可能,IIC器件一般会留几个硬件位给用户自己配置,其余的都是硬件上定死的,不仅用于地址识别还用于 ...

额,我刚好有个项目也是这样,两个完全一样的摄像头,不过我是硬件上分时供电,还加了片2选1的数码开关做camera信号的切换,现在看起来似乎这个都没必要了。

Allen.W 发表于 2016-10-17 19:44:00

racemaker 发表于 2012-12-7 15:29
问题解决了。在注册的时候注册不同的地址,确保能注册上,然后在device 的 probe时候修改为正确的地址。 ...

请问您最后怎么解决的?

wdluo 发表于 2016-10-20 21:25:01

https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-47695952.5.7A7onf&id=525307268623
USB转SPI,I2C,CAN,GPIO,UART,PWM,ADC
支持安卓系统,最多有8路I2C信号

dy22511825 发表于 2016-10-22 11:32:32

I2C 协议的设计原则 是不允许同一个总线出现地址相同设备
页: [1]
查看完整版本: 如何在同一条i2c总线上挂相同地址的i2c设备