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.

[参考译文] TMS570LC4357:I2C 等待 ACK / NACK

Guru**** 2468480 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1019365/tms570lc4357-i2c-wait-for-ack-nack

器件型号:TMS570LC4357

您好!

我在 I2CSTR 寄存器中等待 ACK/NACK 标志时遇到问题、也就是说我如何知道标志状态是最新的(它对应于最新的操作)? 我当前所做的是将数据压入 I2CDXR 寄存器、我想等待、看看从器件是否使用 ACK 进行响应-我如何知道何时读取寄存器-我无法立即读取、因为它不会被置位 然而。

伪不工作代码:

HWREG_WRITE_32(pI2C->DXR, byte);

// Note that this will never evaluate to True....
if (0U != (HWREG_READ_32(pI2C->STR) & (1U << I2C_STR_NACK_POS)))
{
    // Nack received
}

伪工作代码:

HWREG_WRITE_32(pI2C->DXR, byte);

Delay(100);

if (0U != (HWREG_READ_32(pI2C->STR) & (1U << I2C_STR_NACK_POS)))
{
   //Nack received
}

延迟方法可行、但它远非理想-有什么想法可以 改进它?

有什么想法吗?

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

    您好!

    I2C 发送器在确认时钟脉冲期间释放 SDA 线(高电平)。 接收器必须在确认时钟脉冲期间下拉 SDA 线、以便在该时钟脉冲的高电平期间保持稳定的低电平。  

    我认为 NACK 位在您开始传输时被置位。 您的 I2C 线路上是否有适当的上拉电阻器?