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.

[参考译文] MSP430FR5739:I2C 通信失败 MSP430FR5739

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1271204/msp430fr5739-i2c-communication-fail-msp430fr5739

器件型号:MSP430FR5739

您好!

我们在系统中使用 MSP430FR5739。 MSP430FR5739的工作是通过 I2C 与系统中的其它卡进行通信来接收和发送数据。 在此通信中、MSP430FR5739作为 I2C 从器件运行。 在一段不确定的时间段之后、通信断开并且不会恢复。 也就是说、MSP430FR5739不能接收 I2C 中断。 我们面临着一种不确定的局面。 我们认为这里发生了时钟延展问题。 因此、我们试图利用"时钟低电平超时"问题、在 MSP430FR5739中通过中断(UCCLTOIFG)捕获这种情况。 但没有触发。 主器件侧是否需要控制这种情况? 我们的首要任务是弄清发生该故障的原因。 什么原因可能导致这种情况? 我们暂时解决了这个问题,如下所示。 当 MSP430FR5739在一段时间内未接收到数据(不发生 I2C 中断)时、我们禁用/启用 MSP430FR5739的 I2C 总线。 执行此任务的相关代码段如下所示。 应用此函数后、返回 I2C 通信、因此我们可以再次接收中断。 但这不是一个好的解决方案。 您对此主题的想法将对我们非常有价值。 提前感谢您。

//添加以禁用/启用 I2C 总线
EUSCI_B_I2C_DISABLE (EUSCI_B0_BASE);
EUSCI_B_I2C_clearInterrupt (EUSCI_B0_BASE、EUSCI_B_I2C_RECEIVE_INTERRUPT0 + EUSCI_B_I2C_START_INTERRUPT0 + EUSCI_B_I2C_START_INTERRUPT + EUSCI_B_I2C_STOP_INTERRUPT);
EUSCI_B_I2C_disableInterrupt (EUSCI_B0_BASE、EUSCI_B_I2C_RECEIVE_INTERRUPT0 + EUSCI_B_I2C_START_INTERRUPT0 + EUSCI_B_I2C_START_INTERRUPT + EUSCI_B_I2C_STOP_INTERRUPT);

对于(I = 0;I < 200;I++)//等待200ms
{
   __delay_cycles (8000);//等待1ms、~1ms、因为 MCLK = 8MHz


EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);
EUSCI_B_I2C_clearInterrupt (EUSCI_B0_BASE、EUSCI_B_I2C_RECEIVE_INTERRUPT0 + EUSCI_B_I2C_START_INTERRUPT0 + EUSCI_B_I2C_START_INTERRUPT + EUSCI_B_I2C_STOP_INTERRUPT);
EUSCI_B_I2C_enableInterrupt (EUSCI_B0_BASE、EUSCI_B_I2C_RECEIVE_INTERRUPT0 + EUSCI_B_I2C_START_INTERRUPT0 + EUSCI_B_I2C_START_INTERRUPT + EUSCI_B_I2C_STOP_INTERRUPT);

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

    您好!

    这个问题对我来说似乎很有趣。 在不确定的时间段过后没有任何数据事务、不会触发 I2C 接收中断。 该问题可以通过重新初始化 I2C 模块来解决。  

    在我看来、I2C 总线上有一些噪声、MCU 会将该噪声视为有效时钟并进入接收状态。 而在提供实际数据时、ACK 位与主机不同步。 并会导致通信错误。  

    首先检查 I2C 线路上是否有噪声。 并检查它是否可以解决问题。  

    此致、

    现金豪

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

    实际上、系统中的通信卡在通过 I2C 以20Hz 的速度不断地向 MSP430FR5739发送数据(每秒20个数据)。 MSP 的工作场景完全基于接收此数据、因此过一段时间后会停止工作。 因为发生了我前面提到的 I2C 通信失败。

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

    您好,

    好的。 我只检查了 FR5739的勘误表。 对于 USCI37的描述、在有源 I2C 通信期间读取 RXBUF 可能会导致意外的总线停止。 您的 场景不断接收数据。 您可能会遇到这个问题。  

    https://www.ti.com/lit/er/slaz392ah/slaz392ah.pdf

    此致、

    现金豪