搜索
bottom↓
回复: 13

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

[复制链接]

出0入0汤圆

发表于 2012-12-6 20:55:51 | 显示全部楼层 |阅读模式
linux i2c子系统限制了在同一条i2c总线上不能出现相同地址的设备。

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

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

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

高手帮忙出点招。

出0入96汤圆

发表于 2012-12-6 21:06:01 | 显示全部楼层
分时供电怎末样?

出0入0汤圆

发表于 2012-12-6 21:09:42 | 显示全部楼层
几乎不可能,IIC器件一般会留几个硬件位给用户自己配置,其余的都是硬件上定死的,不仅用于地址识别还用于类型识别,不同类型的设备有不同的硬件地址掩码。如果需要挂多个器件,一般都是在硬件上设置留给用户的这几个地址位。

出0入0汤圆

发表于 2012-12-6 21:13:22 | 显示全部楼层
不通信时切段不用设备的总线

出0入0汤圆

 楼主| 发表于 2012-12-6 21:21:08 | 显示全部楼层
本帖最后由 racemaker 于 2012-12-6 21:22 编辑

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

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

出0入0汤圆

发表于 2012-12-6 21:22:01 | 显示全部楼层
IIC总线从主机端看下去,能够访问到的总线上,一个Slave ID对应唯一的一个硬件。这是协议规定的,你没办法修改。

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

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

出0入0汤圆

 楼主| 发表于 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设备是引出的是同一条总线,要不然我就挂载不同的总线上了。

出0入0汤圆

发表于 2012-12-6 21:31:59 | 显示全部楼层
对了,NXP似乎有总线仲裁用的硬件,用于扩展IIC总线用的,你去找找看。

出0入0汤圆

发表于 2012-12-7 00:27:29 | 显示全部楼层
有个器件,可以用来切换总线,,,你用一个IO控制器件,去切换2个IIC的clk,,器件名字忘记了。。

出0入0汤圆

 楼主| 发表于 2012-12-7 15:29:45 | 显示全部楼层
本帖最后由 racemaker 于 2012-12-7 15:34 编辑

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

出0入0汤圆

发表于 2012-12-7 17:17:38 | 显示全部楼层
racemaker 发表于 2012-12-6 21:21
几乎不可能,IIC器件一般会留几个硬件位给用户自己配置,其余的都是硬件上定死的,不仅用于地址识别还用于 ...

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

出0入0汤圆

发表于 2016-10-17 19:44:00 | 显示全部楼层
racemaker 发表于 2012-12-7 15:29
问题解决了。在注册的时候注册不同的地址,确保能注册上,然后在device 的 probe时候修改为正确的地址。 ...

请问您最后怎么解决的?

出0入0汤圆

发表于 2016-10-20 21:25:01 | 显示全部楼层
https://item.taobao.com/item.htm ... amp;id=525307268623
USB转SPI,I2C,CAN,GPIO,UART,PWM,ADC
支持安卓系统,最多有8路I2C信号

出0入0汤圆

发表于 2016-10-22 11:32:32 | 显示全部楼层
I2C 协议的设计原则 是不允许同一个总线出现地址相同设备
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 08:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表