大家好,
我使用TI DriverLib作为I2C接口。 许多呼叫支持“超时”选项,可防止挂起。 但是,有一些基本函数,如I2C_isBusBusy(),I2C_getInterruptStatus(),I2C_masterIsStartSent(),I2C_masterReceiveMultiByteNext()以及其他不支持超时选项的函数。
特别是,如果我无法从设备读取(可能是因为它未连接),我经常看到EUSCI_Bx.STATW.UCBBUSY位设置为1,这表示总线“繁忙”。 这意味着,下次我尝试对I2C总线上的其他设备执行读写操作时,以下设备将挂起:
while (map_I2C_isBusyBusy (moduleInstance));
此函数没有超时,我看不到任何方法可以清除繁忙位以允许其他I2C事务继续进行。
如果I2C调用因超时而失败,建议使用什么方法来重置I2C控制器的状态,以允许其他操作继续(可能与同一EUSCI_Bx通道上的其他I2C设备一起使用)?
这似乎是DriverLib中的一个缺陷,其中一些操作支持超时,而有些操作不支持超时。 此外,似乎没有一种简单的方法可以将I2C控制器恢复到由于超时而导致操作失败之前的状态。
请举例说明在超时后如何正确重置I2C接口? 我曾尝试写信给UCBBUSY来澄清它,但这似乎行不通。
我在同一I2C接口上有两个TMP007温度传感器和AT24D02 EEPROM,并且需要通信才能保持稳定。 衷心感谢您的帮助!
Scott