CoolRunner-Ⅱ器件的I2C总线仲裁
发布时间:2008-09-18阅读:809
在以下几种情况下,I2C总线仲裁会失败。
(1)在地址或数据发送周期,当主设备输出“1”,而SDA被采样为“0”。
(2)在数据接收周期的应答位,当主设备输出“1”,而SDA被采样为“0”。
(3)当总线忙时,企图有一个START。
(4)在从模式中,企图有一个Repeat START。
(5)检测到一个STOP,而主设备并没有STOP请求。
如果I2C控制器工作在主模式,输出SDA信号将会与输入SDA信号进行比较以确定总线仲裁是甭失效。在数据传输过程中,SDA信号仅在SCL为高电平的时被检查(ACK周期除外),以确保START/STOP不会在错误的时间内产生。如果发现输出SDA与输入SDA不同,则总线仲裁失败,这时MAL位被置位。同时CoolRunner-II I2C控制器切换到从模式并复位MSTA位。
CoolRunner-II fc控制器在总线忙时不会产生START,然而如果在总线忙时,uC依然发出START/Repeat START请求,则MAL位将会被置位。另外,在主设备没有发出STOP请求时,MAL仍然因为STOP被检测到而置位。这些都被视为仲裁失败,应该避免,并正确处理。
如果仲裁失败发生在字节传输过程中,SOL会一直产生,直到字节传输完成。