ARM学习(41)NXP MCU总线挂死,CPU could not be halted以及无法连接Jink

笔者最近在用NXP的MCU,经常会碰到CPU could not be halted,今天就来聊一下原因和如何解决

1、背景情况说明

如下图所示,笔者在遇到Ozone链接的时候,CPU could not be halted的情况,原因就是访问了非法地址,或者在SDRAM没初始化的时候,就访问了其地址。

  • 导致的后果就是,程序一上电就跑到异常地方跑飞,总线挂死,所以Jink通过Jtag协议也无法访问到CPU,然后就无法下载代码。
  • 如果程序总线挂死,那么也不会走异常处理,无法抓到现场,也比较难debug
  • 如果程序上电可以正常跑,没跑到异常,那么是可以正常链接Jink的
  • 如果芯片总线挂死,需要重启芯片测试。

在这里插入图片描述

2、解决方案

原因就是芯片访问异常地址,然后没有地址保护,CPU一直等待总线返回,导致其他外设无法使用总线,则就无法连接jink,CPU也显示一直在忙,无法停下来

### KEIL 中 JLink 报错 CPU is not halted 的解决方案 当遇到 Keil 调试过程中提示 `CPU is not halted` 或者 `cannot read register XX while cpu is running` 时,通常表明调试工具(如 J-Link)未能成功暂停目标设备的 CPU 运行状态。以下是针对该问题的具体分析与解决措施: #### 1. **检查硬件连接** 确保开发板上的 JTAG/SWD 接口与 J-Link 调试器之间的物理连接正常。任何松动或接触不良都可能导致通信失败[^2]。 #### 2. **禁用看门狗定时器** 某些情况下,程序中的看门狗定时器可能会干扰调试过程。如果看门狗未被适当初始化或喂狗操作缺失,则可能导致 CPU 在调试期间意外复位。尝试在代码中临时禁用看门狗功能以验证其影响: ```c // 示例:STM32 平台下禁用看门狗 void Disable_Watchdog(void) { IWDG->KR = 0x5555; // 密钥写入解锁寄存器 IWDG->KR = 0xAAAA; // 关闭独立看门狗 } ``` #### 3. **避免 System Viewer Windows 的不当使用** 根据实际经验,在 Debug 模式下频繁打开或关闭特定窗口(例如 System Viewer Windows),可能引发不稳定行为并最终导致调试异常中断[^1]。建议仅在必要时访问这些高级特性,并尽量减少切换频率。 #### 4. **更新驱动程序和固件** 过时的 J-Link 驱动或者不匹配的目标器件支持库也可能引起兼容性问题。前往 Segger 官方网站下载最新版本软件包并完成安装升级[^3]。 #### 5. **调整 Keil 设置参数** 确认项目配置文件内的选项是否合理: - 在 Project -> Options for Target -> Debug 页面里指定正确的接口类型 (SWD/JTAG),以及适配的速度等级; - 如果存在多个核芯架构,请仔细甄选对应的 Core Variant。 #### 6. **重置调试环境** 对于顽固性的故障现象,可考虑执行如下清理动作后再重新加载工程: - 断电重启目标单片机; - 删除 .uvopt(x)/.settings 文件夹下的缓存数据; - 卸载/重装 J-Link Drivers 和 Runtime Components。 通过上述手段逐一排查潜在诱因后,绝大多数此类难题均能得到有效缓解甚至彻底根除。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张一西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值