求教现在的手机芯片上为什么I2C控制器越作越多了?
高通的6个,听说三星的有8个。
i2c总线上不是可以挂多个slave设备吗?为什么要加那么多控制器?很疑惑,求指教。
我猜测是为了避免地址冲突吧。理论上不同设备都应该有不同的Slave Address,实际上不少国内的公司做芯片就是随便选的地址,这个地址不是去申请的,如果一个总线上挂很多设备的话,就有地址冲突的可能。
另外有些RF器件如果跟别的slave共享bus,性能会受到bus transaction影响
而且bus上slave越少,速度也容易控制,bus也比较好设计吧。
i2c的速度有好几种,混在一起估计挺麻烦的。
反正i2c controller小,多扔几个不值钱的。
I2C的上限速度有三档,使用比较普遍的是100Kbps和400Kbps(可以比上限速度低),如果混在一起使用,则以最慢的为准
这个在选择器件的时候可以排除的。选择一个不冲突就好了,而且,很多器件现在可以通过改变外围电路,选择不同的I2C地址。
用i2c的一般都是些速度很慢的设备,比如各种sensor之类的,一秒钟报几次数据就可以了。所以,速度问题应该不大。
而且,如果速度有问题,加个两三个i2c控制器就好了,不同速度的设备,挂不同i2c控制器上。
六个、八个的加,有点不明白。
是可以这么做,但是多搞几个controller又没有什么成本,客户选择外围芯片的时候更灵活,为什么不呢?
说起Sensor,我还想起来有些Sensor如重力加速度传感器,需要频繁的周期性的读写,如果只有一个Controller的话,那软件上控制起来就比较麻烦。
最郁闷的是有些器件出问题的时候会把I2C总线挂死,不如1对1都分开用。
嗯,当时某国外客户就要求我们:I2C主控制器不许被市面上的卑鄙从设备搞死,因此搞了很多冗余设计
效果还不错,流片之后该客户试过一捆I2C从设备,很幸运没有遇到导致死机的
说到市面上坑爹的I2C从设备,一肚子苦水
呵呵,看来搞上N个I2C控制器也是冗余的一种手段啊~
pin脚,gpio都是很宝贵的资源吧。这么多controller得需要N多pin啊。
这个速度真不高。。。最多一秒钟几十次,对软件来说,这个处理还是很方便的。
smartphone的那些处理器主频都上G了处理这些个东西,小case.
不懂,要i2c master不死,加一个timeout应该就OK了。为何你说的好像很复杂似的。
或者你们还有其他考虑?
如果slave把scl和sda拉死了,master再复位也没用。
不过我的确看到过一些i2c master设备,其实没有安装I2C的标准来搞。
用IO口来模拟I2c最方便了,可以适应任何的I2C设备时序,呵呵
这个。。。
话说slaver也要有个timeout,这是协议规定的;如果别人非要乱来,我实在不知道还能够怎么处理
正解。。。很多slave会把sda一直拉低。那个郁闷啊。
需要N多延时操作,在smartphone那种高速处理器下,这么干非常不划算。
恩,一般而言,GPIO和I2C都是复用的。问题是加那么多控制器,如果大部分都不用,有点画蛇添足吧。
个人觉得,更多的还是考虑到恶心的slave会导致i2c锁死而增加的冗余设计。
多一些controller,可以把某些恶心的slave单独放在一路上。
如果SLAVE状态机锁在第N比特,那么只需要9-N个时钟周期就可以让SLAVE采样到ACK从而释放SDA
呵呵 不会说的我锐吧
正好我们以前也有芯片要遍历地址
不过那款芯片早就市场份额第一了
芯片bug应该是常见的吧,软件能够避免的都不是问题
太大惊小怪了
在mobile系统里面,单线的I2C是不是会受欢迎呢?
可能协议里面会变得复杂些,但是会省一个pin