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.

[参考译文] MSP432E401Y:MCU 进入异常处理程序状态

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1569797/msp432e401y-mcu-entering-into-exception-handler-state

器件型号:MSP432E401Y


工具/软件:

问题:

我们已经尝试将 I2C 通道 4 CLK 连接至 GND、以复制 MCU 和从器件之间 I2C 通信链路中断的场景。 在测试场景后、我们观察到、一旦 CLK 短接至 GND、MCU 控制器就会停止运行、因为它可能进入异常处理程序状态 ( HardFaultHandler )。 我们还实施了 I2C 通信恢复机制、可在运行时失败时启动通信、这在该问题场景中似乎也无法正常工作。

 分析:

作为问题分析的一部分、我们尝试了以下步骤:

 一旦引起故障情况并使 I2C 通信进入故障状态(通过将 I2C CLK 短接至 GND)、作为恢复机制的一部分、我们已尝试以下方法来分析和解决问题:

    • 在执行恢复机制之前、通过使用驱动程序函数调用 ( I2C_CANCEL )。
    • 已更换“"</s>“ I2C_TRANSFER “函数调用、带有 “ I2C_transferTimeout “、超时 100ms、以避免 I2C 通道无限期保持
    • I2C 通信失败后、向添加了驱动程序调用 禁用、复位和启用 在使用进入恢复序列之前对 I2C 驱动器进行 I2C 驱动
      • MAP_SysCtlPeripheralDisable (SYSCTL_PERIPH_I2C4);  
      • MAP_SysCtlPeripheralReset (SYSCTL_PERIPH_I2C4);  
      • MAP_SysCtlPeripheralEnable (SYSCTL_PERIPH_I2C4);  
    • 此外、我们已经尝试重新初始化 I2C 驱动器后恢复序列、然后相应地重新配置 I2C 通道
  • 但是、控制器的行为保持不变、因为在上述所有情况下、控制器都进入了异常处理程序、并且软件停止运行/进入 WDG 复位场景。

所需支持:

在这种情况下、需要获得必要的支持、以便了解在上述错误情况下调用驱动程序时控制器为什么会进入硬故障异常处理程序。

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

    团队、

    您能尽快帮助我们解决这个问题吗?

    此致、

    Madhurya  

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

    硬故障是由您的测试用例(SCL 接地)触发的、还是由您的恢复代码触发的?

    使用示例 i2c_mastermode_simple_transfer 在 Launchpad 上没有看到此现象。 (Slave 是 Adafruit 的 MPR121 分线板[它是在我的 gizmo 盒子里的堆栈顶部]。) 总线确实会挂起(SCL 卡在低电平);我不确定是哪一侧导致它。

    当您到达 HardFaultHandler 时、TI 文档 AN01286(此处)可能有助于找到触发它的原因。