主题中讨论的其他器件:AM2434、
工具与软件:
您好!
我们会遇到 I2C 时钟信号始终处于低电平无法恢复的问题。 在此 I2C 总线上、AM2434是主器件、有一个 MSP430FR2355 作为从器件。 当 AM2434 在 EFT 噪声干扰期间以引导模式将程序数据写入 MSP430FR2355时、I2C 时钟信号会卡在低电平。
下图显示、在 EFT 噪声发生器中断传输后、AM2434调用 I2C_FreeBus ()函数(根据 SDK 的 I2C_recoverBus ()函数进行修改)来尝试恢复 I2C 总线(在标记为"Gen 9 Clocks to Recover bus"的点上)、然后尝试重新发送数据包。 但是、如图所示、当重新发送达到长度字段第一个字节的第7位时、SDA 和 SCL 都卡在低电平状态。
随后,由于连续传输失败,程序再次调用 I2C_FreeBus()函数,但这次 SCL 不会产生预期的9个时钟并保持低电平(如下图所示)。 该情况已重试10次、结果与图中所示相同。 SDA 线转换到两次高电平状态,我们怀疑这是调用 I2C_CtrlInit ()函数的结果。
下面是 AM2434中的 I2C_FreeBus ()函数、它已从 SDK 的 I2C_recoverBus 函数进行修改。
此外、我们还 通过 SDK 修改 AM2434的 I2C_CtrlInit ()、如下所示。
在进一步测试中、当 I2C 时钟(SCL)持续处于低电平时、我们尝试 使用硬件方法对 MSP430FR2355进行复位。 此方法可手动触发硬件复位、以恢复器件并恢复正常的 I2C 通信。
在复位 MSP430FR2355后、我们观察到 SCL 引脚返回到高电平状态、如下图所示:
接下来、我们测试了 MSP430FR2355 进入 APP 模式、并且引入 EFT 噪声以强制 I2C 时钟(SCL)线路保持低电平的情况。 但是、在我们的 MSP430FR2355应用中、我们将配置UCB0CTLW1 = 0x03
为启用时钟低电平超时功能。 当UCCLTOIFG
检测到该标志时、我们将复位 I2C 模块。
因此、I2C 时钟线在大约44ms 后成功恢复到高电平状态、如下图所示。
我想问是否有配置的方法 MSP430FR2355 BSL 当检测到时钟(SCL)在一段时间内卡在低电平时、自动复位 I2C 模块。 这是为了防止在编程过程中由噪声干扰引起的编程失败。
非常感谢您提供任何指导!
此致、
Yenting