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

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

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

先楫半導(dǎo)體 HPM6000 系列常見的兩種二級(jí)Bootloader 方案介紹

先楫半導(dǎo)體HPMicro ? 2023-04-02 16:15 ? 次閱讀

概 述

作為高性能、低功耗的嵌入式MCU產(chǎn)品,先楫半導(dǎo)體的HPM6000 系列產(chǎn)品廣泛應(yīng)用于多個(gè)領(lǐng)域。在嵌入式系統(tǒng)的開發(fā)中,Bootloader 常常是開發(fā)者可能會(huì)遇到的第一個(gè)技術(shù)難點(diǎn)。應(yīng)用程序運(yùn)行環(huán)境能否正確構(gòu)建,內(nèi)核能否啟動(dòng)成功,都取決于Bootloader 能否正確工作。一個(gè)功能完善的嵌入式系統(tǒng),還需要Bootloader 能夠?qū)崿F(xiàn)系統(tǒng)OTA更新升級(jí)的能力,即除了usb燒錄、串口燒錄等方式外,還預(yù)留給客戶通過以太網(wǎng)等方式實(shí)現(xiàn)快捷固件升級(jí)的窗口。

本文以HPM6450為例,基于HPM6000 系列產(chǎn)品嵌入式系統(tǒng)的硬件平臺(tái)和RT—thread 軟件平臺(tái),描述系統(tǒng)引導(dǎo)程序Bootloader 的設(shè)計(jì)思路,闡述了設(shè)計(jì)時(shí)需要考量的因素和遇到的技術(shù)難點(diǎn)及操作,希望能給大家一些啟發(fā)。

二級(jí)boot方案思路分析

49b8c170-cd46-11ed-ad0d-dac502259ad0.png

(圖1:整體思路分析)


如上圖所示,整個(gè)方案涉及3個(gè)部分:

FLASH空間的分區(qū)

二級(jí)boot

APP固件


因本次我們討論的重點(diǎn)是“二級(jí)boot”,所以下文內(nèi)容僅涉及前兩部分。

1

FLASH空間的分區(qū)

HPM6700/6400系列的單片機(jī)和我們常用的stm32、at32這類的單片機(jī)最大的不同是該系列MCU 是通過 xpi 總線外掛外部FLASH,即代碼存儲(chǔ)在外部FLASH。

查閱芯片用戶手冊(cè)可知,該系列MCU支持通過 XPI0 或XPI1外掛FLASH(FLASH外掛方式,如圖2所示)。


其中xpi0映射的地址空間是0x80000000,xpi1映射的地址空間是 0x90000000, CPU可對(duì)這兩塊地址空間直接尋址并運(yùn)行代碼(如圖3所示)。

49d95606-cd46-11ed-ad0d-dac502259ad0.png

(圖2:外部FLASH掛載于xpi0原理圖)

49f1fc6a-cd46-11ed-ad0d-dac502259ad0.png

(圖3:地址空間映射關(guān)系)

為實(shí)現(xiàn)固件升級(jí),F(xiàn)LASH空間需要進(jìn)行合理的劃分,如Bootloader分區(qū)、用戶程序分區(qū)、OTA升級(jí)分區(qū)、用戶數(shù)據(jù)分區(qū)等。在RT-Thread上,F(xiàn)AL組件提供了方便的分區(qū)劃分機(jī)制。

本文分享的兩種方案均以W25Q256為例,該FLASH大小為32MB,掛載于XPI0外設(shè)上,首地址為0x80000000,通過FAL組件對(duì)FLASH的分區(qū)詳情如下圖所示:

4a05c916-cd46-11ed-ad0d-dac502259ad0.png

(圖4:Flash 分區(qū)表)

注意,其中:

boot分區(qū)表示二級(jí)boot,該分區(qū)預(yù)留了1MB的存儲(chǔ)空間,為未來的功能升級(jí)留足了空間。

app 分區(qū)可根據(jù)實(shí)際需要來分配大小,本方案中預(yù)留了1MB的空間。

download分區(qū)用于下載固件,在APP執(zhí)行過程中,新固件通過OTA下載于該分區(qū),并在重啟后由boot分區(qū)的bootloader完成合法性檢驗(yàn)和新固件升級(jí)操作。

Filesystem 分區(qū)用于實(shí)現(xiàn)文件系統(tǒng),在此分區(qū)上面可以掛載littelfs格式文件系統(tǒng),可以避免因頻繁掉電導(dǎo)致數(shù)據(jù)丟失的問題。

Easyflash 分區(qū)可用于存儲(chǔ)一些簡(jiǎn)單的參數(shù)等。

2

二級(jí)boot

二級(jí)boot由芯片BootROM引導(dǎo),從芯片的用戶手冊(cè)可知:HPM6700系列支持多種啟動(dòng)方式,可到先楫半導(dǎo)體官網(wǎng)上查看“HPM6700/6400用戶手冊(cè)”的19.1內(nèi)容部分,如下:

4a2509fc-cd46-11ed-ad0d-dac502259ad0.jpg

(圖5:官方代碼啟動(dòng)描述)

由上可知當(dāng)從串行nor flash啟動(dòng)的時(shí)候,可支持“原地代碼執(zhí)行”和“拷貝到內(nèi)部RAM”執(zhí)行?!皢?dòng)方式一” 表示代碼存儲(chǔ)在外部flash,并由CPU直接在flash上執(zhí)行代碼;“啟動(dòng)方式二” 表示代碼存在flash里面,然后通過BootROM復(fù)制代碼到內(nèi)存后再執(zhí)行。


受BootROM支持的兩類啟動(dòng)方式的啟發(fā),筆者經(jīng)過分析以及與官方的技術(shù)支持討論得出如下結(jié)論:


采用FLASH原地執(zhí)行的方式,系統(tǒng)可支持更大尺寸的應(yīng)用程序,如支持GUI的應(yīng)用。在cache的加持下,該方式可實(shí)現(xiàn)成本和執(zhí)行速度的平衡。(需要注意的是:由于FLASH固有屬性的限制(多數(shù)FLASH不支持RWW),在需要支持FLASH擦寫的應(yīng)用中,用戶代碼需要做一些防止產(chǎn)生RWW場(chǎng)景的保護(hù)。)

采用拷貝到RAM中執(zhí)行的方式,可實(shí)現(xiàn)如下優(yōu)勢(shì):

用戶代碼以更高的性能執(zhí)行(RAM的隨機(jī)訪問性能優(yōu)于FLASH)

規(guī)避了FLASH不支持RWW的限制,由于代碼執(zhí)行于RAM,在需要FLASH擦寫的應(yīng)用中邏輯會(huì)更簡(jiǎn)單。

考慮到HPM6700/HPM6400系列有高達(dá)2MB連續(xù)空間的RAM,若用戶代碼及代碼所需要的RAM所占用的空間總和小于或等于2MB,“啟動(dòng)方式二” 是一種值得考慮的選擇。

由于二級(jí)boot 同時(shí)支持以上兩種啟動(dòng)方案,接下來,我們將針對(duì)每種方案分別進(jìn)行討論。

方案一:FLASH原地執(zhí)行

在該方案下,app 在FLASH里執(zhí)行。如上所述,app 存儲(chǔ)于FLASH 1MB偏移處,需要將鏈接腳本中的FLASH首地址改為0x80100000。


需要注意的是,由于app是被二級(jí) Bootloader 引導(dǎo),因此應(yīng)用程序中不應(yīng)再攜帶用于 BootROM 引導(dǎo)識(shí)別的啟動(dòng)頭(boot header)。


Boot 的 FLASH 腳本不改,最終跳轉(zhuǎn)邏輯為:

Boot啟動(dòng)

檢查download分區(qū)是否有新固件,如果有則拷貝到APP

關(guān)閉中斷

跳轉(zhuǎn)到0x80100000地址,就啟動(dòng)了APP。

這樣就完成了二級(jí)boot的設(shè)計(jì)。

這里最關(guān)鍵的就是如何修改連接腳本。

4a496e96-cd46-11ed-ad0d-dac502259ad0.png

(圖6:?jiǎn)?dòng)地址修改)

修改好app的鏈接腳本后,需要在boot里面進(jìn)行跳轉(zhuǎn),跳轉(zhuǎn)代碼參考如下:

4a72cd18-cd46-11ed-ad0d-dac502259ad0.png

(圖7:Boot 里跳轉(zhuǎn))

其中app_addr 為跳轉(zhuǎn)偏移地址,如下:

4a84efd4-cd46-11ed-ad0d-dac502259ad0.png

(圖8:偏移地址計(jì)算)

二級(jí)boot完成App跳轉(zhuǎn)后,App在FLASH中原地執(zhí)行。該方案的優(yōu)勢(shì)是與復(fù)制到RAM相比,應(yīng)用的尺寸可以大至數(shù)十MB??紤]到FLASH的固有限制(隨機(jī)訪問性能稍弱,不支持RWW等),當(dāng)應(yīng)用程序執(zhí)行于FLASH上, 開發(fā)者需要注意以下幾點(diǎn):


對(duì)于需要高頻執(zhí)行的、對(duì)性能有要求的代碼,用戶程序需要將其復(fù)制到RAM中執(zhí)行,否則會(huì)影響程序的效率(若cache未命中)。

若需要執(zhí)行FLASH擦寫操作,需要保證在FLASH擦寫期間,沒有程序或者其他外設(shè)訪問FLASH(具體的實(shí)現(xiàn)方式有:關(guān)全局中斷、關(guān)調(diào)度器等)。

完成FLASH擦寫操作后,用戶代碼需要保證cache 一致性,否則可能會(huì)導(dǎo)致未預(yù)期的后果(如讀到錯(cuò)誤代碼/數(shù)據(jù))。

方案二:內(nèi)存執(zhí)行

若用戶代碼加代碼所需的RAM總和小于2M,基于HPM6700/HPM6400有高達(dá)2MB的連續(xù)RAM,為規(guī)避FLASH固有限制帶來的不便,產(chǎn)品可采用方案二,即:App本身在RAM中執(zhí)行。啟動(dòng)過程中,二級(jí)boot將App復(fù)制到RAM中并中轉(zhuǎn)到APP的目標(biāo)地址執(zhí)行。


4aa33692-cd46-11ed-ad0d-dac502259ad0.png

(圖9:內(nèi)存系統(tǒng)描述)

采用該方案時(shí),需要注意以下三點(diǎn):

二級(jí)boot所使用的RAM不應(yīng)和用戶App所在RAM區(qū)域重疊,否則在拷貝中會(huì)產(chǎn)生錯(cuò)誤。

二級(jí)boot在跳轉(zhuǎn)到用戶App前需要恢復(fù)中斷到默認(rèn)狀態(tài)(關(guān)閉中斷)。

boot采用flash link的編譯方式,APP要采用ram link的編譯方式,即APP是通過內(nèi)存方式的鏈接腳本,因此APP編譯后無法通過下載到flash的方式調(diào)試,必須使用USB或者其他的方式下載固件到0x80100000處。

4aba8ce8-cd46-11ed-ad0d-dac502259ad0.png

(圖10:工作示意圖)

以下為boot里面的鏈接修改,供大家參考:

4acb2bb6-cd46-11ed-ad0d-dac502259ad0.png4af3daf2-cd46-11ed-ad0d-dac502259ad0.png

(圖11:Boot鏈接腳本參考)

4b18a468-cd46-11ed-ad0d-dac502259ad0.png

(圖12:App ram link方式鏈接文件參考)

在方案二中,二級(jí)boot需要做的操作比flash boot的方式多了一個(gè)步驟,需要先將APP分區(qū)的代碼拷貝至內(nèi)存,然后再跳轉(zhuǎn)至內(nèi)存執(zhí)行。

4b2d5e4e-cd46-11ed-ad0d-dac502259ad0.png

(圖13:代碼拷貝至內(nèi)存)

4b42c450-cd46-11ed-ad0d-dac502259ad0.png

(圖14:代碼跳轉(zhuǎn)至內(nèi)存執(zhí)行)

注意跳轉(zhuǎn)前,需要關(guān)閉各種中斷。

4b684b62-cd46-11ed-ad0d-dac502259ad0.png

(圖15:運(yùn)行效果示意圖)

3

注意事項(xiàng)

選擇鏈接腳本時(shí),要注意看左側(cè)的鏈接腳本是否正確,如下圖所示:

4b7ae150-cd46-11ed-ad0d-dac502259ad0.png

(圖16:鏈接腳本示意圖)

如果鏈接腳本不能執(zhí)行,請(qǐng)檢查下圖的設(shè)置。

4b89dd7c-cd46-11ed-ad0d-dac502259ad0.png

(圖17:勾選newlib-nano)

編譯的時(shí)候,需要把nerlib-nano勾選上,否則當(dāng)使用memcpy的時(shí)候,有可能會(huì)出現(xiàn) “非法指令” 的錯(cuò)誤。

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

    關(guān)注

    146

    文章

    16885

    瀏覽量

    349916
  • 半導(dǎo)體
    +關(guān)注

    關(guān)注

    334

    文章

    26855

    瀏覽量

    214308
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    302029
  • 先楫半導(dǎo)體
    +關(guān)注

    關(guān)注

    10

    文章

    214

    瀏覽量

    2050
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HPM6E00技術(shù)日 | 百人研討共話工業(yè)應(yīng)用創(chuàng)新及發(fā)展趨勢(shì)

    不僅讓與會(huì)者對(duì)HPM6E00系列有了更深入的了解,也讓大家看到了半導(dǎo)體在工業(yè)技術(shù)創(chuàng)新方面的巨大潛力。
    發(fā)表于 09-02 10:14

    半導(dǎo)體hpm_apps v1.6.0上線

    半導(dǎo)體hpm_apps v1.6.0上線
    的頭像 發(fā)表于 08-02 08:18 ?576次閱讀
    <b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>半導(dǎo)體</b><b class='flag-5'>hpm</b>_apps v1.6.0上線

    有獎(jiǎng)提問!半導(dǎo)體HPM6E00系列新品發(fā)布會(huì)!!

    半導(dǎo)體HPM6E00新品預(yù)覽”的活動(dòng),盛況空前。 自此之后一直收到大家的信息,問什么時(shí)候能夠買到HPM6E00,這不,我們來了~
    發(fā)表于 06-20 11:45

    半導(dǎo)體與您相約嵌入式盛會(huì)embedded world China Conference2024

    》演講。分享半導(dǎo)體HPM5300到HPM6200,再到即將發(fā)布的HPM6E00
    的頭像 發(fā)表于 06-07 08:17 ?355次閱讀
    <b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>半導(dǎo)體</b>與您相約嵌入式盛會(huì)embedded world China Conference2024

    Andes晶心、經(jīng)緯恒潤(rùn)與半導(dǎo)體聯(lián)合宣布三方將開展合作

    Andes晶心科技、經(jīng)緯恒潤(rùn)、半導(dǎo)體聯(lián)合宣布三方將開展合作,結(jié)合AndesCoreTM RISC-V處理器系列、
    的頭像 發(fā)表于 05-15 10:39 ?341次閱讀
    Andes晶心、經(jīng)緯恒潤(rùn)與<b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>半導(dǎo)體</b>聯(lián)合宣布三方將開展合作

    半導(dǎo)體 hpm_sdk v1.5.0 正式發(fā)布

    半導(dǎo)體 hpm_sdk v1.5.0 正式發(fā)布
    的頭像 發(fā)表于 04-12 08:17 ?502次閱讀
    <b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>半導(dǎo)體</b> <b class='flag-5'>hpm</b>_sdk v1.5.0 正式發(fā)布

    半導(dǎo)體攜手立功科技發(fā)布全新汽車液晶儀表解決方案

    上海半導(dǎo)體科技有限公司(以下簡(jiǎn)稱“半導(dǎo)體”)近日發(fā)布了國(guó)產(chǎn)高性能微控制器
    的頭像 發(fā)表于 03-15 11:14 ?690次閱讀

    毫厘中的絢爛綻放,攜手立功科技發(fā)布HPM6800數(shù)字儀表方案

    上海半導(dǎo)體科技有限公司(半導(dǎo)體,HPMicro)推出了國(guó)產(chǎn)高性能微控制器
    的頭像 發(fā)表于 03-14 08:16 ?522次閱讀
    毫厘中的絢爛綻放,<b class='flag-5'>先</b><b class='flag-5'>楫</b>攜手立功科技發(fā)布<b class='flag-5'>HPM</b>6800數(shù)字儀表<b class='flag-5'>方案</b>

    半導(dǎo)體攜手立功科技推出了國(guó)產(chǎn)高性能微控制器HPM6800系列

    上海半導(dǎo)體科技有限公司(半導(dǎo)體,HPMicro)推出了國(guó)產(chǎn)高性能微控制器
    的頭像 發(fā)表于 03-13 12:24 ?764次閱讀
    <b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>半導(dǎo)體</b>攜手立功科技推出了國(guó)產(chǎn)高性能微控制器<b class='flag-5'>HPM</b>6800<b class='flag-5'>系列</b>

    HPM5361EVK開發(fā)板,網(wǎng)友測(cè)評(píng)效果(

    上海半導(dǎo)體舉辦的HPM5361EVK開發(fā)板試用活動(dòng)圓滿結(jié)束,廣大工程師和愛好者們踴躍參與此次試用并提交報(bào)告。經(jīng)過
    的頭像 發(fā)表于 03-12 08:16 ?1625次閱讀
    <b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>HPM</b>5361EVK開發(fā)板,網(wǎng)友測(cè)評(píng)效果(<b class='flag-5'>二</b>)

    半導(dǎo)體推出了國(guó)產(chǎn)高性能微控制器HPM6800系列

    上海半導(dǎo)體科技有限公司(半導(dǎo)體,HPMicro)推出了國(guó)產(chǎn)高性能微控制器
    的頭像 發(fā)表于 03-07 12:30 ?1159次閱讀
    <b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>半導(dǎo)體</b>推出了國(guó)產(chǎn)高性能微控制器<b class='flag-5'>HPM</b>6800<b class='flag-5'>系列</b>

    芯原2.5D GPU IP賦能半導(dǎo)體HPM6800系列RISC-V MCU

    芯原股份(股票代碼:688521.SH)與半導(dǎo)體(簡(jiǎn)稱“”)的合作,為高性能圖形處理領(lǐng)域帶來了新的突破。
    的頭像 發(fā)表于 03-05 09:21 ?827次閱讀

    半導(dǎo)體HPM5300EVK開發(fā)板試用作品手冊(cè)免費(fèi)下載

    產(chǎn)品介紹HPM5300系列MCU是上海半導(dǎo)體推出的一款高性能RISC-V內(nèi)核通用微控制
    發(fā)表于 12-28 10:25

    HPM5361EVK開發(fā)板試用體驗(yàn)】認(rèn)識(shí)和了解HPM5361EVK開發(fā)板

    近日,收到了HPM5361EVK開發(fā)板開發(fā)板,帶大家了解和認(rèn)識(shí)一下HPM5361EVK開
    發(fā)表于 12-24 22:39

    半導(dǎo)體發(fā)布多個(gè)系列高性能微控制器產(chǎn)品

    HPM6000 系列 MCU 是來自上海半導(dǎo)體科技有限公司的高性能實(shí)時(shí) RISC-V 微控制器,為工業(yè)自動(dòng)化及邊緣計(jì)算應(yīng)用提供了極大的算
    的頭像 發(fā)表于 11-28 09:38 ?636次閱讀