1480|1

227

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

使用Reset&Halt After bootloader复位策略 [复制链接]

许多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下载应用

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

3、执行reset

4、检查PC==0x0800010E

5、修改reset策略为 Reset+Halt

6、执行Reset

7、检查PC==0x08000116

 
 

总结

 

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

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

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

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

查看本帖全部内容,请登录或者注册

最新回复

使用“Reset&Halt After bootloader”复位策略可以在bootloader的启动流程中自动打开调试会话,方便调试人员对目标设备进行调试和测试。   详情 回复 发表于 2023-5-18 20:04
点赞 关注
个人签名

欢迎关注“麦克泰技术”

 
 

回复
举报

4826

帖子

3

TA的资源

版主

沙发
 

使用“Reset&Halt After bootloader”复位策略可以在bootloader的启动流程中自动打开调试会话,方便调试人员对目标设备进行调试和测试。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
PROTEL DXP 2004原创讲义

本帖最后由 paulhyde 于 2014-9-15 09:22 编辑 有11讲讲义(ppt格式),介绍从画原理图到PCB版图,并配合有7次作业(word文档) ...

LM3S8962通过网页控制硬件运行

程序代码. 47003 1.安装光盘里F:\LM3S8962 Evaluation hit\Tools\StellarisWare\SW-EK-LM3S8962-4423.exe 软件,安装路径是用 ...

用EK-LM3S811-ND制作的 万年历、温湿度计

这是用TI研讨会送的EK-LM3S811-ND做的一个简单的时钟万年历、带有温湿度显示、时间设置、整点报时功能,显示使用了128X64的LCD, ...

ESP8266模块网络解决方案

ESP8266模块网络解决方案 1:测试模块已经联网的情况,在1分钟内没有接受广播包也就是用户上电时不需要修改路由器信息,运行 ...

CCS6编译出现undefined symbol怎么解决

本帖最后由 xiaoyang12138 于 2020-7-7 18:56 编辑 487870

【树莓派Pico测评】——by fxyc87

@fxyc87 【树莓派Pico测评】-开箱+下载 【树莓派Pico测评】- 开始写程序 【树莓派Pico测评】- 开始编译程序2 ...

基于AM335X开发板 (ARM Cortex-A8)——Linux系统使用手册 (中)

本篇文章主要讲解嵌入式板卡中Linux系统是如何正确测试、使用的,其中内容包含有U-Boot编译、U-Boot命令和环境变量说明、Linux内 ...

STM32WBA52CG测评 一收到开发板

本帖最后由 wenyangzeng 于 2023-7-23 15:56 编辑 收到邮寄来的STM32WBA52CG开发板 主要特性 716963 正面 ...

电池主动平衡的工作原理及其优势

简介 锂电池的稳定性和安全性需要被谨慎对待。锂离子电池电芯(Cell, 或称电池单元)如果不能在受限充电状态 (SOC) 范围 ...

《大规模语言模型:从理论到实践》第三章大预言模型预训练数据

本周分享的是第三章大预言模型预训练数据,本章介绍的是常见的大语言模型预训练数据的来源、处理方法、预训练数据对大预言模 ...

关闭
站长推荐上一条 1/10 下一条
中星联华&ADI明日直播
直播主题:大咖面对面,轻松玩转高速ADC性能测试
直播时间:3月25日(周二)14:00
活动奖励:京东卡、双肩包

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 3

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表