This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我有以下代码来开始 I2C 通信、这些代码是从提供的库中提取的
如果 从器件地址错误或 传感器出现故障(由于断电/或器件故障)、则 MCU 会在第二个 while 环路(I2C_STS_REG_ACCESS_RDY)上卡住。否则、它运行良好。
请告知您如何检测传感器故障。
void I2CbeginTransmission(uint16_t slaveAddr) { while (I2C_getStopConditionStatus(I2CA_BASE)); I2C_setConfig(I2CA_BASE, (I2C_MASTER_SEND_MODE|I2C_REPEAT_MODE)); I2C_setSlaveAddress(I2CA_BASE, slaveAddr); I2C_sendStartCondition(I2CA_BASE); while(!(I2C_getStatus(I2CA_BASE) & I2C_STS_REG_ACCESS_RDY)); }
此致、
M.
尊敬的 M:
您使用的是哪个软件示例? 一个在 C2000WARE 中?
C:\ti\c2000Ware_4_01_00_00\driverlib\f2837xd\examples\cpu1\i2c
[~用户 id="529400" url="支持/micropowers/C2000-micropower-group/C2000/f/C2000-micropower-forum/1125141/tms320f28377d-i2c-sensor-failure-detection"]如果由于 错误或错误的传感器地址(I2C_STS_REG_ACCESS_RDY),则 MCU 会在第二个 while 循环(I2C_str 故障/从器件)上卡住。]在这种情况下、检查是否接收到 NACK 或 while 环路中是否有超时可能有效。
最棒的
Kevin
尊敬的 Kevin:
感谢你的答复。
是的,我使用了 C2000ware 示例 : 请参阅 I2CBusScan、 i2c_ex4_EEPROM_POLLING.c
有类似的 while 循环、但在检查 无效地址时不会锁定。
while(!(I2C_getStatus(base) & I2C_STS_REG_ACCESS_RDY));
正如您建议的、我将在 while 环路中使用超时。
此致、
Mahir
您好、Mahir、
好的、我现在看到了。 如果我正确地记住、While 循环将在发送从地址并收到 ACK 后退出。 因此、如果未正确发送或发生 NACK、则需要一些机制来中断(超时或 NACK 检查)。
最棒的
Kevin