在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

YTM32B1MD1微控制器的boot swap機制和用法

安芯教育科技 ? 來源:安德魯的設計筆記本 ? 2024-07-25 10:39 ? 次閱讀

Introduction

Pricinple & Machenisim

Application

基本的boot swap用例

不更新bootloader的情況

更新bootloader的情況

Conclusion

Introduction

客戶在開發量產型的ECU軟件時,大多會考慮實現OTA(在線更新)的功能,方便在將ECU設備裝車之后,可以利用通信過程更新固件。OTA的實現技術中,為了提升更新過程的安全性,避免在更新過程中因意外中斷導致整個ECU軟件系統崩潰,通常會考慮備份更新的方式,如果本次更新固件的過程被意外中斷,MCU仍可啟動至最近一次能夠正常運行的固件中,故而在MCU的片內flash中實際會存放至少兩份程序,A程序和B程序。

這兩份程序存放在不同的存儲區,在創建這些application程序時,需要分別調整linker地址,讓A程序和B程序映射到指定對應不同的地址區才能正常運行。芯片在上電啟動后進入bootloader,經過信息安全檢查、完整性檢查、有效性檢查等一些列判定條件之后,有選擇地跳轉到存放在不同地址的application程序。而在更新程序的時候,也要分別更新不同區域的程序。

為了簡化開發者和用戶區分application程序的A / B版本,有些專用于ECU的MCU,設計了硬件支持flash存儲的AB面交換功能(boot swap),對應于兩塊獨立的但地址連續拼接的flash存儲器(pflash0和pflash1),可以通過軟件配置,指定哪塊flash存儲區被映射到0x0000_0000開始的位置。如此,將用于更新的固件application工程,其linker可以不做調整,始終為一份工程。在bootloader更新固件的過程中,將實際運行地址空間的程序,先寫到備份flash存儲區(例如flash的后半段)中,在更新成功完畢后,再執行boot swap命令,將備份flash存儲區映射到實際運行的地址空間(例如,flash地址區間的前半段)。復位芯片后,就會從備份轉正的flash啟動,執行新的application了。如此,兩個獨立的存儲區可互為備份。

Pricinple & Machenisim

以YTM32B1MD1微控制器為例,介紹boot swap的機制和用法。

YTM32B1MD1微控制片上集成了2片容量為256KB的flash,稱為pflash0和pflash1,總計512KB。默認情況下,pflash0被映射在0x0000_0000開始的地址空間,pflash1拼接在pflash0之后。當執行了boot swap命令后,復位,pflash1的物理存儲被映射到0x0000_0000開始的地址空間,pflash0拼接在pflash1之后。

執行boot swap命令的具體操作,就是向EFM模塊的CMD寄存器中,寫入boot swap的命令碼0x30。如圖x所示。

0f3392ca-4a1b-11ef-b8af-92fbcf53809c.png

圖x boot swap的命令碼

而在,EFM模塊的STS寄存器中,可以通過查看BOOT_INFO標志位,判定當前0x0000_0000開始的區域映射到哪塊pflash上。如圖x所示。

0f56bdc2-4a1b-11ef-b8af-92fbcf53809c.png

圖x boot_info標志位

切記,只有當芯片復位之后,新的設置才能生效。通常開發者可以在軟件中,執行boot swap命令后,再調用NVIC_SystemReset()函數復位生效。

當然,如果不適用boot swap機制,兩塊拼接在一起的pflash存儲器,也可以作為一個地址連續的大存儲器。仍然可以適配一些使用回滾策略或者使用復制方式實現的FOTA等機制。

Application

這里提供了一個可運行的用例,展示boot swap的用法。同時還討論了一些同boot swap功能相結合的bootlaoder方案的策略。

基本的boot swap用例

在展示boot swap基本用法的用例中,在main()函數中編寫用例,在同一份代碼中,查看BOOT_INFO標志位,然后打印出來,告知開發者當前的程序(總是從0x0000_0000開始)運行在哪塊pflash上。

在運行用例時,需要進行兩次下載:第一次下載程序,下載到從0x0000_0000開始的pflash0中,運行程序后,0x0000_0000地址切換到pflash1上,此時,還需要再下載一次程序,程序會覆蓋到pflash1上。注意,第一次下載程序后運行,從pflash1開始啟動,pflash1此時沒有可執行的程序,可能會出現“卡死”的狀態。

/*main.c*/

#include"board_init.h"

/*
*Functions.
*/
intmain(void)
{
BOARD_Init();

printf("efm_swap_bool_flash.
");

if(0u==(EFM_FLAG_BOOT_INFO&EFM_GetStatusFlags(BOARD_EFM_PORT)))
{
printf("bootfrompflash0.
");
}
else
{
printf("bootfrompflash1.
");
}

printf("pressanykeytolaunchtheEFM_SwapBootFlash()...
");
uint8_tch=getchar();
putchar(ch);/*echotocheckinput.*/

/*switchthebootflash.*/
EFM_SwapBootFlash(BOARD_EFM_PORT);

printf("EFM_SwapBootFlash()done.
");

printf("NVIC_SystemReset()

");
NVIC_SystemReset();

while(1)
{
}
}

進行了兩次下載之后,pflash0和pflash1上都存放了相同的一份程序。但運行時,每個pflash的程序會查閱BOOT_INFO標志位,從而打印不同的信息。如此相互交替。如圖x所示。

0f65eefa-4a1b-11ef-b8af-92fbcf53809c.png

圖x 運行efm_swap_boot_flash

不更新bootloader的情況

在支持A / B面的平臺上,設計bootloader + application的存儲結構。為了確保程序總是從bootloader開始執行,實際上是在兩個pflash的開始位置存放了兩個相同的bootloader,對應跳轉到自己專屬的application。如圖x所示。如此,在一個pflash中執行更新另一個pflash中的程序時,僅更新其中application的區域。在執行boot swap和復位操作后,將會直接跳轉到相同的一份bootloader,并進一步跳轉到新的application,從而實現僅更新application的效果。

0f99c4e6-4a1b-11ef-b8af-92fbcf53809c.png

圖x 帶有bootloader的AB面存儲規劃

這里還討論了一種使用片上flash存放參數(模擬eeprom)的情形。當存放數據(以地址映射方式訪問)在pflash0上后,若執行boot swap命令后,實際存放數據的內存區域,其地址映射發生了變化。但在程序中,若仍使用原來的地址訪問數據,則不會訪問到正確的存儲區。此時,如果仍想用一份固定的代碼,以“自適應”的方式訪問之前存放數據的區域,一種可行的方式,是借助于BOOT_INFO標志位進行判斷。

uint32_teep0_base_addr=(BOOT_INFO=1)?0x3C000:0x1C000;
uint32_teep1_base_addr=(BOOT_INFO=0)?0x3C000:0x1C000;

更新bootloader的情況

如果進一步考慮更新bootloader的情況,就需要在更新策略上,在其中一個pflash中執行更新另一個pflash程序的過程中,連帶這另一個pflash中的bootlaoder部分一起更新掉。如此,在執行boot swap和復位操作后,將會直接跳轉到新的bootloader,從而實現更新bootloader的效果。

Conclusion

在有A / B分區的存儲平臺上,設計boot swap是為了實現備份程序和提升更新固件提供了便利。操作簡單,效果明顯。

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

    關注

    146

    文章

    17316

    瀏覽量

    352370
  • FlaSh
    +關注

    關注

    10

    文章

    1642

    瀏覽量

    148509
  • 存儲器
    +關注

    關注

    38

    文章

    7528

    瀏覽量

    164226
  • ecu
    ecu
    +關注

    關注

    14

    文章

    892

    瀏覽量

    54696

原文標題:YTM32的flash存儲器boot-swap功能詳解

文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    YTM32的LIN通信協議引擎LinFlexD外設模塊詳解

    YTM32微控制器的LINFlexD外設模塊,實現了LIN協議控制器的功能,可以支持LIN總線協議的主機和從機功能。
    的頭像 發表于 10-08 11:15 ?2067次閱讀
    <b class='flag-5'>YTM</b>32的LIN通信協議引擎LinFlexD外設模塊詳解

    貿澤電子開售面向便攜式電子應用的 英飛凌EZ-PD PMG1-B1 USB Type-C高壓微控制器

    Type-C?微控制器。EZ-PD PMG1-B1微控制器為工程師提供一種集成式單芯片解決方案,適用于需要靈活安全的MCU和更少物料的高壓USB-C應用,如電動工具、小家電、電動自行車等。 ? 貿澤電子供應
    發表于 04-18 16:29 ?732次閱讀
    貿澤電子開售面向便攜式電子應用的 英飛凌EZ-PD PMG<b class='flag-5'>1-B1</b> USB Type-C高壓<b class='flag-5'>微控制器</b>

    Cortex-M1微控制器和FPGA問答

    問答選編問:Cortex-M1微控制器有哪些接口資源?答:Cortex-M1處理掛在AHB總線上,AHB總線通過橋接邏輯可以掛APB總線,APB總線上可以掛的接口有IIC、UART、
    發表于 07-26 07:46

    微控制器IO口有什么用法?

    微控制器(MCU)IO口的一些用法
    發表于 03-17 06:29

    STM32G0B1xB/xC/xE微控制器的相關資料分享

    本文檔提供有關 STM32G0B1xB/xC/xE 微控制器的信息,例如描述、功能概述、引腳分配和定義、電氣特性、封裝和訂購代碼。
    發表于 11-24 06:44

    PSoC 1 使用外部微控制器對 PSoC? 1 器件編程 (HSSP)-AN44168

    PSoC 1 使用外部微控制器對 PSoC? 1 器件編程 (HSSP)-AN44168
    發表于 10-10 16:10 ?7次下載
    PSoC <b class='flag-5'>1</b> 使用外部<b class='flag-5'>微控制器</b>對 PSoC? <b class='flag-5'>1</b> 器件編程 (HSSP)-AN44168

    瑞薩電子推出的RL78/I1x系列微控制器是RL78微控制器系列

    RL78/I1x和RL78 / H1x系列微控制器是基于瑞薩電子RL78 CPU內核為核心構建而成,其中RL78 / I1A系列是高分辨率PWM輸出的
    的頭像 發表于 08-01 08:29 ?6182次閱讀

    什么是微控制器?如何編程微控制器?

    微控制器進行編程或刻錄意味著“將程序從編譯傳輸到微控制器的存儲”。微控制器的程序通常是用C或匯編語言編寫的,最后編譯
    的頭像 發表于 08-21 15:40 ?1.1w次閱讀

    微控制器MG74PG1B08英文數據手冊

    MG74PG1B08是一款基于高性能1-T架構80C51 CPU的單片微控制器,該CPU具有以1~7個時鐘周期(約為標準8051設備的6-7倍)執行指令,并具有8051兼容的指令集。因
    發表于 07-01 09:13 ?0次下載
    <b class='flag-5'>微控制器</b>MG74PG<b class='flag-5'>1B</b>08英文數據手冊

    微控制器CH32V1數據手冊

    電子發燒友網站提供《微控制器CH32V1數據手冊.pdf》資料免費下載
    發表于 09-09 15:11 ?4次下載
    <b class='flag-5'>微控制器</b>CH32V<b class='flag-5'>1</b>數據手冊

    英飛凌EZ-PD PMG1-B1 USB Type-C微控制器介紹

    EZ-PD PMG1-B1微控制器是高度集成的單端口USB-C供電 (PD) 解決方案。這些高電壓的可編程USB供電系統搭載集成式Arm Cortex (-M0/M0+) 處理、128KB閃存、16KB RAM和32KB RO
    發表于 04-18 16:32 ?685次閱讀

    云途正式發布量產版本AUTOSAR MCAL驅動軟件和配置工具

    云途MCAL軟件包RTM v1.1.0包含了YTM32B1ME05 和YTM32B1MD1兩個系列車規MCU的片上外設模塊的驅動程序代碼和MCAL驅動模塊所需的相應樁模塊(stub module)的示例代碼,如Det、Dem、CanIf、LinIf、EcuC和EcuM等。
    的頭像 發表于 07-19 15:29 ?2816次閱讀
    云途正式發布量產版本AUTOSAR MCAL驅動軟件和配置工具

    YTM32的HA系列微控制器啟動過程詳解

    HA系列微控制器基于Arm Cortex-M7處理內核,集成了Security Boot的功能。Security Boot的關鍵代碼集成在BOOT
    的頭像 發表于 07-15 09:24 ?472次閱讀
    <b class='flag-5'>YTM</b>32的HA系列<b class='flag-5'>微控制器</b>啟動過程詳解

    stm32boot0和boot1對應哪個p引腳

    STM32系列微控制器是一種廣泛應用于嵌入式系統領域的32位微控制器。在STM32系列微控制器中,BOOT0和BOOT1是兩個重要的引腳,它
    的頭像 發表于 08-22 09:40 ?3638次閱讀

    STM32引腳中的BOOT1在哪里

    STM32是STMicroelectronics(意法半導體)推出的一系列32位微控制器,廣泛應用于嵌入式系統設計。關于STM32的BOOT1引腳,它主要與系統的啟動模式有關。 BOOT1引腳功能
    的頭像 發表于 08-22 09:43 ?2312次閱讀
    主站蜘蛛池模板: 国产婷婷综合在线精品尤物 | 午夜久久久久久网站 | 免费人成网站永久 | 国模私拍一区二区 | 亚洲六月丁香六月婷婷花 | 一二三区电影 | 亚洲一区二区三区首页 | 国产一级特黄aa级特黄裸毛片 | 黄色特级毛片 | 美国色网站 | 亚洲综合色就色手机在线观看 | 欧美透逼视频 | 成人a毛片视频免费看 | china3p单男精品自拍 | 欧美亚洲综合在线观看 | 国产免费人成在线看视频 | 成人久久伊人精品伊人 | 久久新视频 | 国产高清毛片 | 五月综合色婷婷影院在线观看 | mitunav在线| 日韩欧美中文在线 | 欧美性一区 | 成人在线一区二区 | 日本不卡一区二区三区在线观看 | 手机在线观看国产精选免费 | 免费福利片2022潦草影视午夜 | 久久成人免费网站 | 人人干人人草 | 五等分的新娘免费漫画 | 四虎永久免费地址 | 日本欧美强乱视频在线 | 亚洲国产婷婷香蕉久久久久久 | 国模吧双双大尺度炮交gogo | 中文字幕一区二区视频 | 亚洲邪恶天堂影院在线观看 | 天天在线干| 永久免费看www色视频 | 九七婷婷狠狠成人免费视频 | 正在播放淫亚洲 | 四虎国产在线观看 |