0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Reset和Halt After bootloader复位策略

麦克泰技术 来源:麦克泰技术 2023-04-14 13:04 次阅读

许多MCU配置了一个独立的启动ROM,包含处理器复位并跳转到用户应用程序之前执行的代码。启动ROM的工作包含设置时钟,启用调试接口,根据不同的引导源初始化外围设备等等…当然,不同MCU的启动ROM行为并不相同。实际上,启动ROM的行为在同一设备的两个硬件版本之间也会有变化。

问题

调试体系架构没有规定如何设计启动ROM或其行为,因此在启动ROM执行之后,无法为MCU实现一种通用的复位方法,让其暂停在用户应用程序的第一条指令上。处理器需要一个特定的复位程序,它可以处理设备特定的启动ROM场景,如没有有效的映像,映像位于QSPI中,通过SD卡启动等等…实现这种特定于设备的复位非常具有挑战性,甚至是不可能的,而且非常耗时,因为现代MCU通常有多种启动路径。此外,由于某些原因,供应商通常不会记录启动ROM的行为。

解决方式

如果J-Link不支持使用设备或引导源的引导加载程序后的Reset&halt,则可以通过两个步骤轻松启用正确的复位:

2.1 修改启动代码

在startup代码中添加下列指令:

//
// Perform a dummy read access from address 0x00000008 followed by two nop's
// This is needed to support the reset strategy: Reset and Halt After Bootloader.
//
mov r0, 8
ldr r0,[r0]
nop
nop

2.2 修改Reset策略

复位策略需要设置为12。

如何改变J-Link使用的复位策略取决于所使用的环境。复位策略可以通过所使用环境设置配置,也可以通过J-Link命令字符串配置。如J-Link Commander,允许通过本机命令直接将J-Link命令字符串传递给J-Link DLL。如果这两个方式都不可用,使用通用方法。

2.2.1 J-Link Commander

启动J-Link Commander后,可以通过执行RSetType命令改变复位策略为

RSetType = 12

2.2.2 通用方法

如果使用的IDE 或应用没有提供选项配置使用的reset类型,也不能将J-Link命令字符串传递给J-Link DLL,我们建议使用J-Link脚本文件API函数JLINK_ExecCommand(“”)将它们包含到J-Link脚本文件中。

下面是一个J-Link脚本文件的示例,该文件通过JLINK_ExecCommand(…)传递J-Link命令字符串SetResetType到J-Link DLL。

/*********************************************************************
*                                   
*    ConfigTargetSettings  
*
* Function description
*  Called before InitTarget(). Mainly used to set some global DLL variables to customize the
*  normal connect procedure. For ARM CoreSight devices this may be specifying the base
*  address of some CoreSight components (ETM, …) that cannot be auto-detected by J-Link
*  due to erroneous ROM tables etc. May also be used to specify the device name in case
*  debugger does not pass it to the DLL.          
*
* Notes
* (1) May not, under absolutely NO circumstances, call any API functions that perform target communication.
* (2) Should only set some global DLL variables
*
* Return value
*  >= 0 O.K.
*   < 0  Error
*      -1  Unspecified error
*/
int ConfigTargetSettings(void) {
  //
  // Set reset strategy used by the J-Link to Reset + Halt After Bootloader Using Watchpoint.
  //
  JLINK_SYS_Report("-- Configure Reset Strategy --");
  JLINK_ExecCommand("SetResetType = 12");
  return 0;
}

操作示例

基于SEGGER Cortex-M Trace参考板的SEGGER Embedded Studio工程示例项目,可以访问:https://wiki.segger.com/File:SEGGER_Cortex-M_Trace_Reference_Board_Blinky_ES_V550b.zip

该项目可以很容易地移植到其它基于Cortex-M的MCU。

3.1 使用J-Link Commander测试&验证

1、使用SES下载应用

fbb1a440-da80-11ed-bfe3-dac502259ad0.png

2、使用J-Link Commander连接目标板

3、执行reset

4、检查PC==0x0800010E

fbd4d352-da80-11ed-bfe3-dac502259ad0.png

5、修改reset策略为 Reset+Halt

6、执行Reset

7、检查PC==0x08000116

fbf9182a-da80-11ed-bfe3-dac502259ad0.png    

总结

正常复位后,MCU停在复位向量(Reset_Handler / 0x0800010E)处。

通过执行Reset&halt after bootloader复位策略后,MCU停在启动代码(0x08000116)处。

这确认了reset的行为与预期一致。

为了模拟引导加载程序,可以将修改的代码从启动代码移动到用户应用程序中的其它地方。执行reset应该显示CPU在代码移动到的地址处停止。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18621

    浏览量

    224831
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16254

    浏览量

    345619
  • ROM
    ROM
    +关注

    关注

    4

    文章

    527

    浏览量

    85146
  • reset
    +关注

    关注

    0

    文章

    33

    浏览量

    12812
  • bootloader
    +关注

    关注

    2

    文章

    231

    浏览量

    45198

原文标题:使用Reset&Halt After bootloader复位策略

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是复位同步电路 reset synchronizer?

    复位同步电路 reset synchronizer 其实只在复位信号 release 的时候派上用场。复位结束后,这个电路其实就没用了。 但这个电路的时钟还在 switch,这个电路还
    的头像 发表于 02-19 09:21 710次阅读
    什么是<b class='flag-5'>复位</b>同步电路 <b class='flag-5'>reset</b> synchronizer?

    请问stm8l101p3u为什么进入halt之后看门狗不复位

    在网上查了半天,很多人都是说halt之后不想让看门狗运行却停不下来,为什么到了我这我想halt之后看门狗继续运行它反而不复位了呢?? 看门狗的代码 RST_ClearFlag
    发表于 05-13 07:01

    CC1310仿真出错Fatal error:Failed to halt after bootloader 1

    程序编译没有问题,当点击仿真调试的时候有弹窗提示出错。Fatal error:Failed to halt after bootloader 1Session aborted!求解答!
    发表于 08-18 07:12

    软件复位后保持引脚状态为高电平

    after a reset or is there another way to jump to the bootloader without doing the software rese
    发表于 12-25 15:43

    在启用IWDG的情况下进入暂停模式会导致STM8s003F3P6芯片复位

    我检查了选项字节,OPT3字节为零,因此WDG_HALT位为0,这意味着当看门狗使能时,MCU应进入暂停模式而不会导致复位。 但是HALT或WFI会产生复位。我在暂停指令之前刷新看门
    发表于 06-28 16:11

    使用Reset&amp;Halt After bootloader复位策略

    and Halt After Bootloader. // mov r0, 8 ldr r0,[r0] nop nop2.2修改Reset策略
    发表于 05-18 13:55

    HT66Fx0系列MCU的Reset复位电路应用介绍

    HT66Fx0系列MCU的Reset复位电路应用介绍HT66Fx0 系列MCU 的Reset 复位电路均采用了与I/O 共用的架构,本文即着重对此系列MCU
    发表于 03-27 08:38 35次下载

    复位稳定放大器:The Reset Stabilized A

    复位稳定放大器:The Reset Stabilized Amplifier The reset stabilized amplifier is a form of chopper-stabilized amplifier a
    发表于 05-16 16:12 1179次阅读
    <b class='flag-5'>复位</b>稳定放大器:The <b class='flag-5'>Reset</b> Stabilized A

    STM32 Bootloader异常复位如何解决

    客户反馈通过PC软件Flashloader不能够跟STM32 MCU自带Bootloader连接。并且系统运行一段时间后异常复位
    的头像 发表于 03-23 10:26 9198次阅读
    STM32 <b class='flag-5'>Bootloader</b>异常<b class='flag-5'>复位</b>如何解决

    STM32下载后无法自动复位,需手动复位 下载程序时,勾选reset and run后仍不可自动复位

    项目场景:STM32下载后无法自动复位,需手动复位下载程序时,勾选reset and run后仍不可自动复位问题描述:STM32下载后无法自动复位
    发表于 01-17 12:36 11次下载
    STM32下载后无法自动<b class='flag-5'>复位</b>,需手动<b class='flag-5'>复位</b> 下载程序时,勾选<b class='flag-5'>reset</b> and run后仍不可自动<b class='flag-5'>复位</b>

    Reset复位电路的PCB布局布线要求

    Reset复位电路的PCB布局布线要求 —来源:瑞芯微RK3588 PCB设计白皮书 Reset复位电路是一种用来使电路恢复到起始状态的电路设计,一般简单的
    的头像 发表于 08-03 07:45 764次阅读
    <b class='flag-5'>Reset</b><b class='flag-5'>复位</b>电路的PCB布局布线要求

    STM32 Bootloader异常复位案例

    电子发烧友网站提供《STM32 Bootloader异常复位案例.pdf》资料免费下载
    发表于 09-25 09:17 3次下载
    STM32 <b class='flag-5'>Bootloader</b>异常<b class='flag-5'>复位</b>案例

    Linux reset子系统有什么功能

    的分级关系,需要弄清楚时钟树里每个时钟的关系。 而reset驱动有点相当于clock驱动的门控,它只有复位和解复位两个功能。 类似于clock子系统,reset子系统也分为了 cons
    的头像 发表于 09-27 14:06 453次阅读
    Linux <b class='flag-5'>reset</b>子系统有什么功能

    Linux的reset复位API说明

    入的reset资源进行解复位操作 参数 : rstc:指向申请reset资源的设备句柄 返回 : 成功:返回0 失败:返回错误码 reset_control_assert int re
    的头像 发表于 09-27 14:14 722次阅读

    reset API使用示例步骤

    时钟和复位是两个不同的驱动,但通常都是由负责clock驱动的人,把reset驱动完成。同样,reset驱动也是由芯片厂商去完成的。 reset API使用示例 基本步骤: 1、调用
    的头像 发表于 09-27 14:17 698次阅读