本应用笔记描述了在I2C总线上执行非阻塞通信的一种可能方法,并提供了I2C主机的示例C代码。阻塞通信意味着MCU会一直等待,直到字节从数据寄存器传输完成。在代码中,通常通过在“while”循环中检查状态位来实现。然而,对于某些时间关键的应用程序,这种方法可能不适用。假设I2C速度为100kHz,传输1个字节将使CPU停顿9微秒。CPU等待数据传输或接收的总时间要更长,因为I2C消息至少由三个字节组成。
本应用笔记中描述的算法能够在不需要循环等待CPU的情况下发送完整的I2C数据包。通过引入更稳健的解决方案,故障检测和评估可以增加该示例代码的价值。该算法假设总线上只有一个主机存在,因此不会检查和评估仲裁条件丧失的情况。