主题中讨论的其他器件:SEGGER、 HALCOGEN
我正在使用最新版本的 HALCogen 开发 RM46 Launchpad、目标是 GCC 工具(我使用的是 ARM-none-eabi-gcc 10.3版本)。 我正在使用 Segger J-Link 通过 GDB 进行调试。 出于某种原因、当我通过 JTAG 加载到闪存时、似乎始终能够运行我的固件、当我尝试拔下调试器并执行冷复位(即移除 USB 电缆、重新安装以执行下电上电)时、 我会得到以下故障模式之一。 对于上下文、我的固件执行以下操作:
- GIO 初始化(HALCogen 中将用户 LED A 和 B 配置为默认开启、作为启动时的生命体征)
- RTI Init
- RTI 使能比较0事件
- RTI 起始计数器0
- SCI 初始化(我正在使用启用 RX 中断的 SCI LIN 模块)
- CAN 初始化(我正在使用 DCAN 1模块、消息框1作为 TX 消息、而消息框2作为 RX 消息、RX 中断被启用)
请注意、当我通过 JTAG 将代码加载到闪存中时、上述所有功能都正常工作(并且通过 GDB 和 Segger 仿真器通过"Continue"语句来运行触发程序)
但是、如果我通过实际移除并重新安装 USB 电缆执行"冷"重新引导、我会遇到以下行为之一:
-板似乎进入 gioInit()-->我认为 LED A 和 B 亮起。 但是、即使我已将它们设置为由 RTI 和 SCI RX 通知切换、它们也不会闪烁(请注意、这在 JTAG 加载和继续周期时工作正常)。 在这种情况下、只需按下并释放 Launchpad PCB 上的 PORRST 按钮、代码就会正确启动并正常运行。
-电路板 上电至红色的 nERROR LED。 没有生命的进一步迹象。 在某些情况下、重新启动之间此问题仍然存在(即使在所有电源被切断/关闭后冷重启)
我尝试了许多方法来寻找可能的问题:
-我已经验证了我的构建系统实际上是在 ARM 模式下编译 C 入口点(_c_int00)。
-我对 sys_link.ld 做了一些更改,以确保所有闪存都初始化为已知模式(即有效的程序数据或填充模式),从而方便闪存 ECC 自动计算。 据我所知、这应该是我唯一需要做的事情、以确保正确初始化所有闪存 ECC 区域、从而防止 ECC 错误升级为 ESM 组2/3事件。
我现在稍微撕下头发,把它向下追,希望能得到任何帮助。
-AG

