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.

[参考译文] TMS320F28377D:I2C 传感器故障检测

Guru**** 2023380 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1125141/tms320f28377d-i2c-sensor-failure-detection

器件型号:TMS320F28377D
主题中讨论的其他器件:C2000WARE

您好!

我有以下代码来开始 I2C 通信、这些代码是从提供的库中提取的  

如果   从器件地址错误或 传感器出现故障(由于断电/或器件故障)、则 MCU 会在第二个 while 环路(I2C_STS_REG_ACCESS_RDY)上卡住。否则、它运行良好。

请告知您如何检测传感器故障。

Fullscreen
1
2
3
4
5
6
7
8
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));
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

此致、

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 循环、但在检查 无效地址时不会锁定。

    Fullscreen
    1
    while(!(I2C_getStatus(base) & I2C_STS_REG_ACCESS_RDY));
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    正如您建议的、我将在 while 环路中使用超时。

    此致、

    Mahir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mahir、

    好的、我现在看到了。 如果我正确地记住、While 循环将在发送从地址并收到 ACK 后退出。 因此、如果未正确发送或发生 NACK、则需要一些机制来中断(超时或 NACK 检查)。

    最棒的

    Kevin