NXP MCU 技术论坛
直播中

李春梅

8年用户 1981经验值
私信 关注
[问答]

i.MX93使用J-Link和SYSRESETREQ的Cortex-M33复位不起作用怎么解决?

我正在尝试使用 Segger J-Link 和 gdb 在 i.MX93 上调试 Cortex-M33的固件。我使用 NXP 的 J-Link 软件补丁建立了 SWD 连接,并且可以停止处理器、读取寄存器和内存等。
我的问题是,重置处理器不起作用。寄存器的内容不会改变,因此我假设 reset 被忽略:
(gdb) 监视器 regs
R0 = 40D000C0,R1 = 2001EFE3,R2 = 40D000C0,R3 = 000000000
R4 = 000000000,R5 = 000000000,R6 = FFFFFFFF,R7 = 2001EEE8
R8 = FFFFFFFF, R9 = FFFFFFFF, R10= 2000F000, R11= 000000000
R12= FFFFFFFF, R13= 2001EEE8, MSP= 2001EEE8, PSP= 000000000
R14(LR) = 0FFE219D,R15(PC) = 0FFE2248
XPSR 49000003、APSR 48000000、EPSR 01000000、IPSR 00000003
CFBP 000000000,控制 00,故障掩码 00,BASEPRI 00,PRIMASK 00
安全扩展寄存器:
MSP_S = 2001EEE8,MSPLIM_S = 000000000
PSP_S = 00000000,PSPLIM_S = 000000000
MSP_NS = 00000000,MSPLIM_NS = 000000000
PSP_NS = FFFFFFFC,PSPLIM_NS = 000000000
CONTROL_S 00、FAULTMASK_S 00、BASEPRI_S 00、PRIMASK_S 00
CONTROL_NS 00、FAULTMASK_NS 00、BASEPRI_NS 00、PRIMASK_NS 00
(gdb) 监视器重置
重置目标
(gdb) 监视器 regs
R0 = 40D000C0,R1 = 2001EFE3,R2 = 40D000C0,R3 = 000000000
R4 = 000000000,R5 = 000000000,R6 = FFFFFFFF,R7 = 2001EEE8
R8 = FFFFFFFF, R9 = FFFFFFFF, R10= 2000F000, R11= 000000000
R12= FFFFFFFF, R13= 2001EEE8, MSP= 2001EEE8, PSP= 000000000
R14(LR) = 0FFE219D,R15(PC) = 0FFE2248
XPSR 49000003、APSR 48000000、EPSR 01000000、IPSR 00000003
CFBP 000000000,控制 00,故障掩码 00,BASEPRI 00,PRIMASK 00
安全扩展寄存器:
MSP_S = 2001EEE8,MSPLIM_S = 000000000
PSP_S = 00000000,PSPLIM_S = 000000000
MSP_NS = 00000000,MSPLIM_NS = 000000000
PSP_NS = FFFFFFFC,PSPLIM_NS = 000000000
CONTROL_S 00、FAULTMASK_S 00、BASEPRI_S 00、PRIMASK_S 00
CONTROL_NS 00、FAULTMASK_NS 00、BASEPRI_NS 00、PRIMASK_NS 00
J-Link 的 reset 策略使用 SYSRESETREQ 而不是 reset 信号,因为只有 Cortex-M33 内核应该被 reset。调试控制器是否有可能没有写入 SYSRESETREQ 位所需的安全权限?
使用 J-Link 执行 Cortex-M33 重置的正确方法是什么?

回帖(1)

陈存楼

2025-4-15 18:10:17

针对i.MX93 Cortex-M33通过J-Link无法复位的问题,以下是分步解决方案:




  1. 确认复位类型选择



    • 在GDB中尝试硬件复位命令:
      monitor reset

      或指定复位类型为硬件复位:


      monitor reset = Halt

    • 若无效,检查J-Link连接配置,确保RESET引脚已正确连接并支持硬件复位。




  2. 检查SYSRESETREQ配置



    • 查阅i.MX93参考手册,确认系统控制块(SCB)的AIRCR寄存器配置:
      monitor memU32 0xE000ED0C

      确认SYSRESETREQ位(第2位)是否被使能。若需修改:


      monitor memU32 0xE000ED0C = 0x05FA0004

    • 检查SoC复位控制器寄存器,确保SYSRESETREQ未被屏蔽。例如,某些i.MX系列需要配置SRC寄存器。




  3. 使用J-Link Commander手动测试



    • 退出GDB,启动J-Link Commander执行:
      Executing Reset

      观察输出是否提示成功,并检查寄存器状态。





  4. 验证调试访问权限



    • 确认调试器已正确认证,未被安全启动配置阻止。检查DBGMCU相关寄存器:
      monitor memU32 

      确保调试模式下的复位权限已启用。





  5. 更新软件和补丁



    • 确保使用最新版J-Link软件(v7.80+)并安装NXP提供的i.MX93专用补丁。

    • 检查NXP官网是否有更新版芯片支持包(CSP)或参考示例代码。




  6. 尝试复位前停止内核



    • 在复位前确保内核处于暂停状态:
      monitor halt
      monitor reset




  7. 检查电源和时钟域



    • 确保调试接口所在电源域未被关闭,且系统时钟在复位后正确初始化。某些低功耗模式可能影响复位行为。




示例GDB操作流程:


# 连接J-Link
target extended-remote :2331

# 尝试硬件复位
monitor reset
monitor halt

# 检查PC是否指向复位向量
i r pc

# 若复位失败,手动设置寄存器
monitor memU32 0xE000ED0C = 0x05FA0004  # 启用SYSRESETREQ
monitor reset

# 检查关键寄存器是否复位
x/8x 0x20000000  # 查看RAM初始值

若上述步骤无效,建议:



  • 使用逻辑分析仪确认RESET引脚是否有信号变化

  • 联系NXP技术支持,确认芯片Errata中是否存在相关复位问题

  • 检查板级设计,确保复位电路符合手册要求(如滤波电容、上拉电阻)

举报

更多回帖

发帖
×
20
完善资料,
赚取积分