0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Reset和Halt After bootloader復位策略

麥克泰技術(shù) ? 來源:麥克泰技術(shù) ? 2023-04-14 13:04 ? 次閱讀

許多MCU配置了一個獨立的啟動ROM,包含處理器復位并跳轉(zhuǎn)到用戶應用程序之前執(zhí)行的代碼。啟動ROM的工作包含設置時鐘,啟用調(diào)試接口,根據(jù)不同的引導源初始化外圍設備等等…當然,不同MCU的啟動ROM行為并不相同。實際上,啟動ROM的行為在同一設備的兩個硬件版本之間也會有變化。

問題

調(diào)試體系架構(gòu)沒有規(guī)定如何設計啟動ROM或其行為,因此在啟動ROM執(zhí)行之后,無法為MCU實現(xiàn)一種通用的復位方法,讓其暫停在用戶應用程序的第一條指令上。處理器需要一個特定的復位程序,它可以處理設備特定的啟動ROM場景,如沒有有效的映像,映像位于QSPI中,通過SD卡啟動等等…實現(xiàn)這種特定于設備的復位非常具有挑戰(zhàn)性,甚至是不可能的,而且非常耗時,因為現(xiàn)代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使用的復位策略取決于所使用的環(huán)境。復位策略可以通過所使用環(huán)境設置配置,也可以通過J-Link命令字符串配置。如J-Link Commander,允許通過本機命令直接將J-Link命令字符串傳遞給J-Link DLL。如果這兩個方式都不可用,使用通用方法。

2.2.1 J-Link Commander

啟動J-Link Commander后,可以通過執(zhí)行RSetType命令改變復位策略為

RSetType = 12

2.2.2 通用方法

如果使用的IDE 或應用沒有提供選項配置使用的reset類型,也不能將J-Link命令字符串傳遞給J-Link DLL,我們建議使用J-Link腳本文件API函數(shù)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、執(zhí)行reset

4、檢查PC==0x0800010E

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

5、修改reset策略為 Reset+Halt

6、執(zhí)行Reset

7、檢查PC==0x08000116

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

總結(jié)

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

通過執(zhí)行Reset&halt after bootloader復位策略后,MCU停在啟動代碼(0x08000116)處。

這確認了reset的行為與預期一致。

為了模擬引導加載程序,可以將修改的代碼從啟動代碼移動到用戶應用程序中的其它地方。執(zhí)行reset應該顯示CPU在代碼移動到的地址處停止。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    18927

    瀏覽量

    227231
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16667

    瀏覽量

    347786
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    539

    瀏覽量

    85433
  • reset
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    12833
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    232

    瀏覽量

    45368

原文標題:使用Reset&Halt After bootloader復位策略

文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    什么是復位同步電路 reset synchronizer?

    復位同步電路 reset synchronizer 其實只在復位信號 release 的時候派上用場。復位結(jié)束后,這個電路其實就沒用了。 但這個電路的時鐘還在 switch,這個電路還
    的頭像 發(fā)表于 02-19 09:21 ?1075次閱讀
    什么是<b class='flag-5'>復位</b>同步電路 <b class='flag-5'>reset</b> synchronizer?

    請問stm8l101p3u為什么進入halt之后看門狗不復位?

    在網(wǎng)上查了半天,很多人都是說halt之后不想讓看門狗運行卻停不下來,為什么到了我這我想halt之后看門狗繼續(xù)運行它反而不復位了呢?? 看門狗的代碼 RST_ClearFlag
    發(fā)表于 05-13 07:01

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

    程序編譯沒有問題,當點擊仿真調(diào)試的時候有彈窗提示出錯。Fatal error:Failed to halt after bootloader 1Session aborted!求解答!
    發(fā)表于 08-18 07:12

    軟件復位后保持引腳狀態(tài)為高電平

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

    在啟用IWDG的情況下進入暫停模式會導致STM8s003F3P6芯片復位

    我檢查了選項字節(jié),OPT3字節(jié)為零,因此WDG_HALT位為0,這意味著當看門狗使能時,MCU應進入暫停模式而不會導致復位。 但是HALT或WFI會產(chǎn)生復位。我在暫停指令之前刷新看門
    發(fā)表于 06-28 16:11

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

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

    HT66Fx0系列MCU的Reset復位電路應用介紹

    HT66Fx0系列MCU的Reset復位電路應用介紹HT66Fx0 系列MCU 的Reset 復位電路均采用了與I/O 共用的架構(gòu),本文即著重對此系列MCU
    發(fā)表于 03-27 08:38 ?36次下載

    復位穩(wěn)定放大器:The Reset Stabilized A

    復位穩(wěn)定放大器:The Reset Stabilized Amplifier The reset stabilized amplifier is a form of chopper-stabilized amplifier a
    發(fā)表于 05-16 16:12 ?1212次閱讀
    <b class='flag-5'>復位</b>穩(wěn)定放大器:The <b class='flag-5'>Reset</b> Stabilized A

    STM32 Bootloader異常復位如何解決

    客戶反饋通過PC軟件Flashloader不能夠跟STM32 MCU自帶Bootloader連接。并且系統(tǒng)運行一段時間后異常復位。
    的頭像 發(fā)表于 03-23 10:26 ?9374次閱讀
    STM32 <b class='flag-5'>Bootloader</b>異常<b class='flag-5'>復位</b>如何解決

    STM32下載后無法自動復位,需手動復位 下載程序時,勾選reset and run后仍不可自動復位

    項目場景:STM32下載后無法自動復位,需手動復位下載程序時,勾選reset and run后仍不可自動復位問題描述:STM32下載后無法自動復位
    發(fā)表于 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復位電路是一種用來使電路恢復到起始狀態(tài)的電路設計,一般簡單的
    的頭像 發(fā)表于 08-03 07:45 ?894次閱讀
    <b class='flag-5'>Reset</b><b class='flag-5'>復位</b>電路的PCB布局布線要求

    STM32 Bootloader異常復位案例

    電子發(fā)燒友網(wǎng)站提供《STM32 Bootloader異常復位案例.pdf》資料免費下載
    發(fā)表于 09-25 09:17 ?3次下載
    STM32 <b class='flag-5'>Bootloader</b>異常<b class='flag-5'>復位</b>案例

    Linux reset子系統(tǒng)有什么功能

    的分級關(guān)系,需要弄清楚時鐘樹里每個時鐘的關(guān)系。 而reset驅(qū)動有點相當于clock驅(qū)動的門控,它只有復位和解復位兩個功能。 類似于clock子系統(tǒng),reset子系統(tǒng)也分為了 cons
    的頭像 發(fā)表于 09-27 14:06 ?618次閱讀
    Linux <b class='flag-5'>reset</b>子系統(tǒng)有什么功能

    Linux的reset復位API說明

    入的reset資源進行解復位操作 參數(shù) : rstc:指向申請reset資源的設備句柄 返回 : 成功:返回0 失敗:返回錯誤碼 reset_control_assert int re
    的頭像 發(fā)表于 09-27 14:14 ?899次閱讀

    reset API使用示例步驟

    時鐘和復位是兩個不同的驅(qū)動,但通常都是由負責clock驅(qū)動的人,把reset驅(qū)動完成。同樣,reset驅(qū)動也是由芯片廠商去完成的。 reset API使用示例 基本步驟: 1、調(diào)用
    的頭像 發(fā)表于 09-27 14:17 ?842次閱讀