I2CnSTAT状态寄存器中,有两种状态码不归属25种之前所述状态,第一个状态码是F8H 用以标示在每次的传输中没有有效信息,意味着,SI标志位为0且无I2C 中断产生。另一个状态码00H 标示在传输过程中,有总线错误发生。总线错误是指START 或 STOP在传输的过程中出现在错误的位置,例如在地址或数据的第二位或应答位。当总线发生错误,SI标志马上会被置1,工作中的节点设备马上切换到未被定址从机模式,释放SDA 和SCL,并将I2CnSTAT寄存器清0。要恢复总线状态,需要置位STO位并清除SI位,然后STO会由硬件清0,而不需要真正的STOP信号波形,释放总线恢复到正常空闲状态。
有一种特殊情况,当SDA线被强制拉低导致阻塞,START信号或重复起始(repeat START)信号无法成功产生时,从机将失去同步。解决方法是在SCL线上额外多送一个时钟脉冲。通过将STA位置1,总线上产生额外的时钟脉冲,由于SDA始终拉低,SDA线上不会产生START信号。一旦SDA线被释放,正常的START信号送出,状态寄存器上会显示08H,串行传输继续。相同的状况,如果需要发送重复开始(repeated START)信号受阻,也可以采用上述方式。在上述方式完成传输后,状态寄存器显示10H,而不是显示08H。注:软件无法介入上述总线问题传输。
|