大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1170上安全调试策略实现对JLink调试的影响。

  痞子衡之前写过一篇旧文 《i.MXRT600的ISP模式下用J-Link连接后PC总是停在0x1c04a》,这篇文章详细解释了 Debug Mailbox 机制对 J-Link 调试体验的影响。我们知道 Debug Mailbox 是 i.MXRT 三位数系列(i.MXRT500/600)独有的外设模块,但是在 i.MXRT1170 上使用 J-Link 调试似乎存在跟 i.MXRT 三位数系列下类似的体验,这个体验明显跟 i.MXRT10xx 系列下不同,而且 i.MXRT1170 中没有 Debug Mailbox 模块,这是怎么回事?且听痞子衡细聊:

一、引出调试问题

  按照我们之前在 i.MXRT1050 上的调试经验,将芯片设为串行下载模式后,使用 JLink 连接上芯片,并 halt 住内核,此时芯片 PC 是正常停在 ROM 区域的(不断 go 和 halt 命令交替执行,PC 值是一直在变化的),让我们同样的过程在 i.MXRT1170 上也操作一次:

  我们发现 PC 固定指向了 0x223104,并且不管你如何 reset 再重新 halt,它一直停在这个地方,这是怎么回事?

二、ROM中调试安全策略实现

  不同于 i.MXRT 三位数系列中有专门寄存器 RSTCTRL0->SYSRSTSTAT[5] 记录内核软复位状态(warm reset)以便 BootROM 初始化阶段根据此状态来进入 Debug Mailbox 安全调试流程,在 i.MXRT1170 上是一种全新的方式,BootROM 利用了一个未开放的调试中断(中断号 52),该调试中断被使能后,当调试口接收到调试请求时,该中断便会被触发。

  i.MXRT1170 BootROM 初始化阶段会立即使能这个 Reserved68_IRQn 中断,并且用一个全局变量(is_debug_pending)记录该中断触发状态。在 BootROM 执行过程中,一旦调试中断触发,在其中断响应函数里会将 is_debug_pending 置起来,并且立刻关闭 Reserved68_IRQn 中断(不需要二次响应),然后 BootROM 两个主阶段( Serial Downloader 和 Device Boot)流程里都会有对 is_debug_pending 状态的处理,只要 is_debug_pending 被置起来,BootROM 就会立即结束正常主流程,转而做一些安全化的处理(HAB状态清理、恢复时钟/外设、中断相关状态善后),最后便进入如下 debug_loop_routine() 函数,__ASM("B .") 指令地址就在 0x223104,这就是 i.MXRT1170 上的调试安全设计,其实是一种简化的 Debug Mailbox 机制。

#define LPSR_GPR41 (*(volatile uint32_t *)0x40c0c0a4)

void debug_loop_routine(void)
{
while (!(LPSR_GPR41 & (1ul << 24)));
register uint32_t dummy = OCOTP->VERSION; #if (defined(__ICCARM__))
__ASM("B .");
#endif
}

三、安全策略对JLink调试的影响

  基于上面分析,最后痞子衡再总结一下这个安全策略对 JLink 调试的影响:

  1. 当芯片在ROM中执行(比如SDP模式,比如Flash中没有应用程序)时,用JLink连接芯片,halt住内核,PC总是停在0x223104,这是安全调试策略决定的。
  2. 当芯片正常启动Flash里的应用程序后(即离开了ROM),用JLink连接芯片,halt住内核,PC指向的是真实的应用程序位置。
  3. 当JLink连接上芯片后,只要执行reset命令,都会直接进入安全调试模式(PC停在0x223104)。

  至此,i.MXRT1170上安全调试策略实现对JLink调试的影响痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:揭秘i.MXRT1170上用J-Link连接复位后PC总是停在0x223104的原因的更多相关文章

  1. 痞子衡嵌入式:揭秘i.MXRT600的ISP模式下用J-Link连接后PC总是停在0x1c04a的原因(Debug Mailbox)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT600中的Debug Mailbox实现对JLink调试的影响. 事情缘起痞子衡的同事 - 喜欢打破砂锅问到底的Kerry小 ...

  2. 痞子衡嵌入式:MCUXpresso IDE下在线调试时使用不同复位策略的现象总结

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下在线调试时使用不同复位策略的现象总结. 本篇实际上是<IAR在线调试时设不同复位类型可能会导致i.M ...

  3. 痞子衡嵌入式:揭秘i.MXRT1170上串行NOR Flash双程序可交替启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170上串行NOR Flash双程序可交替启动设计. 在上一篇文章 <i.MXRT1060/1010上串行NOR F ...

  4. 痞子衡嵌入式:揭秘i.MXRT1170 eFuse空间访问可靠性的保护策略(冗余与ECC)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRT1170的eFuse空间访问可靠性保护策略. 关于i.MXRT系列的eFuse/OTP,痞子衡之前在介绍Boot时写过 ...

  5. 痞子衡嵌入式:在i.MXRT1170上启动含DQS的Octal Flash可不严格设Dummy Cycle (以MT35XU512为例)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是Octal或Hyper Flash上DQS信号与Dummy Cycle联系. 关于在 i.MXRT 上启动 NOR Flash 时如何设 ...

  6. 痞子衡嵌入式:揭秘i.MXRTxxx系列上串行NOR Flash双程序可交替启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT500/600上串行NOR Flash双程序可交替启动设计. 在上一篇文章 <i.MXRT1170上串行NOR Fla ...

  7. 痞子衡嵌入式:揭秘i.MXRT1060,1010上串行NOR Flash冗余程序启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1060,1010上串行NOR Flash冗余程序启动设计. 工业产品设计里经常会有冗余程序/备份程序设计的需求,因为在工业 ...

  8. 痞子衡嵌入式:测一测i.MXRT1170 Raw NAND启动时间(从POR到进App的Reset_Handler)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 Raw NAND启动时间. 关于i.MXRT1170这颗划时代的MCU,痞子衡去年10月在其刚发布的时候, ...

  9. 痞子衡嵌入式:简析i.MXRT1170 Cortex-M7 FlexRAM ECC功能特点、开启步骤、性能影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7内核的FlexRAM ECC功能. ECC是"Error Correcting ...

随机推荐

  1. 洛谷 P3215 [HNOI2011]括号修复 / [JSOI2011]括号序列(fhq-treap)

    题目链接 题意:有一个长度为 \(n\) 的括号序列,你需要支持以下操作: 将 \([l,r]\) 中所有括号变为 \(c\) 将 \([l,r]\) 区间翻转 将 \([l,r]\) 区间中左括号变 ...

  2. 洛谷 P5902 [IOI2009]salesman(dp)

    题面传送门 题意: 有 \(n\) 个展销会,每个展销会给出它的时间 \(t_i\),举办展销会的位置 \(l_i\),和参加这个展销会你能得到的收益 \(m_i\). 你现在在位置 \(s\),你可 ...

  3. Codeforces 889E - Mod Mod Mod(dp+状态设计)

    Codeforces 题目传送门 & 洛谷题目传送门 题目名称 hopping 我们记 \(x_i=X\bmod a_1\bmod a_2\bmod\dots\bmod a_i\),也就是 \ ...

  4. Codeforces 453E - Little Pony and Lord Tirek(二维线段树+ODT)

    Codeforces 题目传送门 & 洛谷题目传送门 一道难度 *3100 的 DS,而且被我自己搞出来了! 不过我终究还是技不如人,因为这是一个 \(n\log^2n\) + 大常数的辣鸡做 ...

  5. R语言与医学统计图形【7】低级绘图函数

    R语言基础绘图系统 基础绘图包之低级绘图函数--气泡图.一页多图.背景网格.添加线条和散点.数学表达式 4.气泡图 symbols是高级绘图函数,可在图上添加标记,标记的形状包括:circles,sq ...

  6. ggplot 局部放大

    需要安装包:ggforce,下面以R自带数据做局部放大演示. require(ggplot2) require(ggforce) require(reshape2) data(CO2) co2< ...

  7. jenkins原理简析

    持续集成Continuous Integration(CI) 原理图: Gitlab作为git server.Gitlab的功能和Github差不多,但是是开源的,可以用来搭建私有git server ...

  8. EXCEL excel中运用ctrl+D、ctrl+enter、ctrl+E批量填充数据

    在excel中,利用鼠标拖动可以快速向下或者向右填充序列或者复制单元格.但是利用快捷键也可以实现多种填充方式,本文就为大家介绍一些ctrl系列快捷键的填充,一起来看看吧. 封面tu 一,ctrl+D/ ...

  9. CentOS6忘记root密码如何重置

    CentOS6忘记root密码,如何重置密码 ①     重启服务器,按"e"键进入修改系统开机项界面 ②    选择内核项,按"e"进入其中进行配置 在文件内 ...

  10. C/C++ Qt StringListModel 字符串列表映射组件

    StringListModel 字符串列表映射组件,该组件用于处理字符串与列表框组件中数据的转换,通常该组件会配合ListView组件一起使用,例如将ListView组件与Model模型绑定,当Lis ...