本帖最后由 Jay_1989 于 2015-12-13 22:20 编辑
最近在看 IIC-BUS 的spec,有几个地方不明白,希望明白人能给解释下:
1.多master仲裁机制:
按照spec里说的,仲裁是在SCL为高的时候,若自己要输出的sda与SDA line上的状态不同,则表明别的master占用总线,仲裁失败。要等待一个BUS上的STOP信号后才可以重新尝试发送。那么我的问题如下:
(1): START和STOP信号的时候,要仲裁吗?还是仲裁只在DATA 和ACK bit 仲裁?
(2): master1 和master2同时发起数据传输, SCL互相有点偏差,那么经过SCL的同步之后,在START期间仲裁吗 ?(这个问题其实和问题(1)相同)
(3): 如果master1在DATA传输期间,假如master2执行了复位,这时候要开始发送数据(这时候master2不能检测到BUS上的START/STOP信号,认为BUS为IDLE状态),master2会发送START信号。请问这种情况下,仲裁出来是什么结 果?
2.slave clock stretch机制:
按照spec里,slave CPU若是在响应中断或是来不及处理数据,可以把SCL给拉低,可以让master进入一个wait state。那么我的问题如下:
(1): slave拉低SCL产生clock stretch的时间点是有限制的吗?
关于问题(1),slave stretch SCL line肯定是在SCL line为低的时候!
(2): 接着问题(1),那么stretch可以是在DATA的每一个bit,还是在每一个byte的第9bit(也就是ack bit)之后???
希望我已经描述清楚我的问题了,麻烦大家耐心看看,能给我指点指点。多谢!!!!
|