I2C总线异常情况及处理——LeetCode参考Java解析

需积分: 30 41 下载量 126 浏览量 更新于2024-08-06 收藏 13.01MB PDF 举报
"本文档主要介绍了LPC17XX系列微控制器在I2C通信中遇到的一些特殊状态及其处理方式,包括其他主机同时启动重复起始条件、仲裁丢失后的数据传输、强制访问I2C总线以及SCL或SDA低电平妨碍I2C总线的操作。" 在I2C通信中,LPC17XX系列微控制器可能会遇到多种特殊状态,这些状态对系统的稳定性和可靠性具有重要影响。 首先,当两个主机同时尝试启动重复起始条件时,可能会出现特殊情况。在主发送或主接收模式下,如果两个主机几乎同时发送重复起始条件,I2C硬件会检测到这一情况,并释放总线,不产生中断请求。如果另一个主机随后释放总线(例如,通过发送停止条件),LPC17XX的I2C模块将重新开始传输,发送正常的起始条件(状态0x08)。 其次,仲裁丢失是I2C通信中的常见问题。在主发送和主接收模式下,如果仲裁丢失,I2STAT寄存器会显示特定的状态代码(如0x38、0x68、0x78或0xB0)。如果STA标志在程序中被设置以响应这些状态,一旦总线再次空闲,I2C模块会自动发起起始条件,尝试重新传输整个数据序列,不受CPU干预。 再者,强制访问I2C总线的情况可能发生在非控制源导致总线挂起时。例如,干扰、短暂的总线中断或SDA和SCL线的短路可能导致总线无法正常工作。如果STA标志被设置,而总线在规定时间内未被访问,可以通过在STA标志仍置位时设置STO标志来强制访问总线,即使不发送停止条件,硬件也会模拟接收到停止条件,然后发送起始条件。STO标志会由硬件自动清除。 最后,SCL或SDA线的低电平可能导致I2C总线操作受阻。如果这些线路由于外部因素长时间保持低电平,I2C通信将无法进行。这种情况下,系统需要有机制来检测并恢复这些异常状态,确保总线恢复正常运行。 LPC17XX系列微控制器在处理I2C通信时需要考虑这些特殊状态,通过合理的硬件设计和软件策略,确保在面对这些情况时能有效恢复和继续数据传输,从而提高系统整体的鲁棒性。