一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

使用Reset和Halt After bootloader復(fù)位策略

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

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

問(wèn)題

調(diào)試體系架構(gòu)沒(méi)有規(guī)定如何設(shè)計(jì)啟動(dòng)ROM或其行為,因此在啟動(dòng)ROM執(zhí)行之后,無(wú)法為MCU實(shí)現(xiàn)一種通用的復(fù)位方法,讓其暫停在用戶應(yīng)用程序的第一條指令上。處理器需要一個(gè)特定的復(fù)位程序,它可以處理設(shè)備特定的啟動(dòng)ROM場(chǎng)景,如沒(méi)有有效的映像,映像位于QSPI中,通過(guò)SD卡啟動(dòng)等等…實(shí)現(xiàn)這種特定于設(shè)備的復(fù)位非常具有挑戰(zhàn)性,甚至是不可能的,而且非常耗時(shí),因?yàn)楝F(xiàn)代MCU通常有多種啟動(dòng)路徑。此外,由于某些原因,供應(yīng)商通常不會(huì)記錄啟動(dòng)ROM的行為。

解決方式

如果J-Link不支持使用設(shè)備或引導(dǎo)源的引導(dǎo)加載程序后的Reset&halt,則可以通過(guò)兩個(gè)步驟輕松啟用正確的復(fù)位:

2.1 修改啟動(dòng)代碼

在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策略

復(fù)位策略需要設(shè)置為12。

如何改變J-Link使用的復(fù)位策略取決于所使用的環(huán)境。復(fù)位策略可以通過(guò)所使用環(huán)境設(shè)置配置,也可以通過(guò)J-Link命令字符串配置。如J-Link Commander,允許通過(guò)本機(jī)命令直接將J-Link命令字符串傳遞給J-Link DLL。如果這兩個(gè)方式都不可用,使用通用方法。

2.2.1 J-Link Commander

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

RSetType = 12

2.2.2 通用方法

如果使用的IDE 或應(yīng)用沒(méi)有提供選項(xiàng)配置使用的reset類型,也不能將J-Link命令字符串傳遞給J-Link DLL,我們建議使用J-Link腳本文件API函數(shù)JLINK_ExecCommand(“”)將它們包含到J-Link腳本文件中。

下面是一個(gè)J-Link腳本文件的示例,該文件通過(guò)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工程示例項(xiàng)目,可以訪問(wèn):https://wiki.segger.com/File:SEGGER_Cortex-M_Trace_Reference_Board_Blinky_ES_V550b.zip

該項(xiàng)目可以很容易地移植到其它基于Cortex-M的MCU。

3.1 使用J-Link Commander測(cè)試&驗(yàn)證

1、使用SES下載應(yīng)用

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

2、使用J-Link Commander連接目標(biāo)板

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é)

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

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

這確認(rèn)了reset的行為與預(yù)期一致。

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

審核編輯:湯梓紅

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

    關(guān)注

    68

    文章

    19748

    瀏覽量

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

    關(guān)注

    146

    文章

    17734

    瀏覽量

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

    關(guān)注

    4

    文章

    577

    瀏覽量

    86859
  • reset
    +關(guān)注

    關(guān)注

    0

    文章

    58

    瀏覽量

    13101
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    238

    瀏覽量

    46364

原文標(biāo)題:使用Reset&Halt After bootloader復(fù)位策略

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是復(fù)位同步電路 reset synchronizer?

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

    請(qǐng)問(wèn)stm8l101p3u為什么進(jìn)入halt之后看門狗不復(fù)位?

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

    CC1310仿真出錯(cuò)Fatal error:Failed to halt after bootloader 1

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

    軟件復(fù)位后保持引腳狀態(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的情況下進(jìn)入暫停模式會(huì)導(dǎo)致STM8s003F3P6芯片復(fù)位

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

    使用Reset&amp;Halt After bootloader復(fù)位策略

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

    HT66Fx0系列MCU的Reset復(fù)位電路應(yīng)用介紹

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

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

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

    STM32 Bootloader異常復(fù)位如何解決

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

    STM32下載后無(wú)法自動(dòng)復(fù)位,需手動(dòng)復(fù)位 下載程序時(shí),勾選reset and run后仍不可自動(dòng)復(fù)位

    項(xiàng)目場(chǎng)景:STM32下載后無(wú)法自動(dòng)復(fù)位,需手動(dòng)復(fù)位下載程序時(shí),勾選reset and run后仍不可自動(dòng)復(fù)位問(wèn)題描述:STM32下載后無(wú)法自動(dòng)復(fù)位
    發(fā)表于 01-17 12:36 ?11次下載
    STM32下載后無(wú)法自動(dòng)<b class='flag-5'>復(fù)位</b>,需手動(dòng)<b class='flag-5'>復(fù)位</b> 下載程序時(shí),勾選<b class='flag-5'>reset</b> and run后仍不可自動(dòng)<b class='flag-5'>復(fù)位</b>

    Reset復(fù)位電路的PCB布局布線要求

    Reset復(fù)位電路的PCB布局布線要求 —來(lái)源:瑞芯微RK3588 PCB設(shè)計(jì)白皮書 Reset復(fù)位電路是一種用來(lái)使電路恢復(fù)到起始狀態(tài)的電路設(shè)計(jì),一般簡(jiǎn)單的
    的頭像 發(fā)表于 08-03 07:45 ?1464次閱讀
    <b class='flag-5'>Reset</b><b class='flag-5'>復(fù)位</b>電路的PCB布局布線要求

    STM32 Bootloader異常復(fù)位案例

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

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

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

    Linux的reset復(fù)位API說(shuō)明

    入的reset資源進(jìn)行解復(fù)位操作 參數(shù) : rstc:指向申請(qǐng)reset資源的設(shè)備句柄 返回 : 成功:返回0 失?。悍祷劐e(cuò)誤碼 reset_control_assert int re
    的頭像 發(fā)表于 09-27 14:14 ?1533次閱讀

    reset API使用示例步驟

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