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

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

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

以STM8單片機(jī)為例,該如何實(shí)現(xiàn)Bootloader呢?

Q4MP_gh_c472c21 ? 來(lái)源:玩轉(zhuǎn)嵌入式 ? 作者:劉小舒 ? 2020-11-16 16:52 ? 次閱讀

這次出差是為了升級(jí)程序解決Bug,用戶已經(jīng)將產(chǎn)品封裝起來(lái),無(wú)法開(kāi)蓋,只能使用CAN總線來(lái)更新程序,用Bootloader實(shí)現(xiàn)。其實(shí)就是通過(guò)上位機(jī)把.bin/hex文件以CAN通訊的方式發(fā)送給單片機(jī)并存儲(chǔ)在規(guī)定的Flash中。這個(gè)過(guò)程與手機(jī)端更新APP類似。

STM8單片機(jī)為例,該如何實(shí)現(xiàn)Bootloader呢?今天和大家分享一下。

01

什么是Bootloader

Bootloader是一段用于更新自身應(yīng)用軟件并獨(dú)立運(yùn)行的代碼,常被用于升級(jí)產(chǎn)品和修復(fù)產(chǎn)品bug。STM8單片機(jī)如果要下載hex文件的話需要通過(guò)STVP和STLINK來(lái)實(shí)現(xiàn),單片機(jī)的引腳SWIM就是下載接口。如果產(chǎn)品在用戶端被封裝好了,無(wú)法通過(guò)SWIM來(lái)下載該怎么辦呢?就使用Bootloader,STM支持CAN和UART實(shí)現(xiàn)Bootloader。就是通過(guò)CAN通信或者UART通信將數(shù)據(jù)存放在STM8的Flash上。

02

劃分Flash區(qū)間

STM8的中斷向量跳轉(zhuǎn)地址是固定的,會(huì)跳轉(zhuǎn)到0x8000對(duì)應(yīng)中斷的偏移地址,所以會(huì)把Bootloader存放在0x8000開(kāi)始的空間內(nèi),比如給Bootloader代碼所劃分的空間為4k,那么空間起始地址為:0x8000-0x8FFF;那么應(yīng)用代碼的起始地址就可以從0x9000開(kāi)始。

03

修改中斷向量表

STM8的中斷向量表通過(guò)一段特定的代碼來(lái)實(shí)現(xiàn),并需要根據(jù)前文提到的空間劃分來(lái)修改。STM8的應(yīng)用程序起始地址是0x8400,默認(rèn)的向量表如下代碼所示。

__rootconstlongreintvec[]@".intvec"={0x82008080,0x82008404,0x82008408,0x8200840c,0x82008410,0x82008414,0x82008418,0x8200841c,0x82008420,0x82008424,0x82008428,0x8200842c,0x82008430,0x82008434,0x82008438,0x8200843c,0x82008440,0x82008444,0x82008448,0x8200844c,0x82008450,0x82008454,0x82008458,0x8200845c,0x82008460,0x82008464,0x82008468,0x8200846c,0x82008470,0x82008474,0x82008478,0x8200847c,};前文已經(jīng)將應(yīng)用程序的起始地址修改為0x9000,所以,向量表的的修改方法為:除了第一個(gè)元素為,其余的元素將8改為9,修改完后代碼如下:

__rootconstlongreintvec[]@".intvec"={0x82008080,0x82009404,0x82009408,0x8200940c,0x82009010,0x82009014,0x82009018,0x8200901c,0x82009020,0x82009024,0x82009028,0x8200902c,0x82009030,0x82009034,0x82009038,0x8200903c,0x82009040,0x82009044,0x82009048,0x8200904c,0x82009050,0x82009054,0x82009058,0x8200905c,0x82009060,0x82009064,0x82009068,0x8200906c,0x82009070,0x82009074,0x82009078,0x8200907c,};

04

修改ICF文件

ICF文件存放在編程環(huán)境的安裝目錄下,每個(gè)型號(hào)/系列的單片機(jī)都會(huì)對(duì)應(yīng)一個(gè)ICF 文件,需要修改一下ICF文件,這里需要根據(jù)flash空間的劃分來(lái)修改,前面將Bootloader的終止地址設(shè)置為0x9FFF,所以修改如下:

defineregionNearFuncCode=[from0x8000to0x8FFF];defineblockINTVECwithsize=0x80{rosection.intvec};place at start of NearFuncCode { block INTVEC };

05

跳轉(zhuǎn)命令

所謂跳轉(zhuǎn),就是在應(yīng)用程序中跳轉(zhuǎn)到Boot中去升級(jí);升級(jí)完成后需要跳轉(zhuǎn)到應(yīng)用程序中,所跳轉(zhuǎn)的起始就是起始地址。Bootloader跳轉(zhuǎn)到應(yīng)用程序的代碼如下,

asm("LDW X, SP ");asm("LDA,$FF");asm("LDXL,A");asm("LDWSP,X");asm("JPF$9000");應(yīng)用程序跳轉(zhuǎn)到Bootloader中的代碼如下

sm("LDW X, SP ");asm("LDA,$FF");asm("LDXL,A");asm("LDWSP,X");asm("JPF$8000");

06

編寫交互代碼

以上設(shè)置好之后,就可以編寫交互代碼了,所以交互代碼其實(shí)就是一套協(xié)議,規(guī)定了應(yīng)用程序如何跳轉(zhuǎn)到Boot,在Boot中如何處理和存儲(chǔ)數(shù)據(jù),這需要上位機(jī)的支持。如果只是用于自家的產(chǎn)品,就可以自己定義協(xié)議。也可以使用標(biāo)準(zhǔn)的協(xié)議,比如汽車行業(yè)中的UDS(統(tǒng)一診斷服務(wù))。 Bootloader實(shí)現(xiàn)之后,就可以使用CAN/UART來(lái)實(shí)現(xiàn)產(chǎn)品固件的升級(jí)了。這就是Bootloader的關(guān)鍵內(nèi)容,本文你學(xué)會(huì)了嗎?留言討論一下吧。

責(zé)任編輯:lq

聲明:本文內(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)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628415
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2663

    瀏覽量

    462455
  • STM8
    +關(guān)注

    關(guān)注

    18

    文章

    392

    瀏覽量

    56528

原文標(biāo)題:?jiǎn)纹瑱C(jī)的Bootloader,可以實(shí)現(xiàn)用戶輕松升級(jí)程序

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問(wèn)stm8的空腳不用如何處理?

    我現(xiàn)在沒(méi)用的空腳沒(méi)有設(shè)置輸入輸出模式也沒(méi)外接上拉電阻或電容,每當(dāng)我去觸碰這個(gè)空腳時(shí)都會(huì)引起單片機(jī)復(fù)位。加了個(gè)104就好了,但是文檔上說(shuō)要接上下拉電阻,我試了管腳也會(huì)復(fù)位。那究竟stm8不用的管腳如何處理
    發(fā)表于 05-08 06:00

    STM8單片機(jī)的IO口是否可實(shí)現(xiàn)三態(tài):輸出高電平、低電平、高阻態(tài)?

    大家好: 請(qǐng)教一下大家,STM8單片機(jī)的IO口是否可實(shí)現(xiàn)三態(tài):輸出高電平、低電平、高阻態(tài)。
    發(fā)表于 05-07 07:07

    STM8單片機(jī)手一摸單片機(jī)就死機(jī)是怎么回事?

    如題,STM8單片機(jī) 用手指一摸單片機(jī)就死機(jī)了,有時(shí)還沒(méi)接觸到就死機(jī)了,關(guān)鍵我用的都是汽車級(jí)的STM8A系列單片機(jī)了怎么抗干擾性怎么還這么差
    發(fā)表于 05-07 06:38

    STM8單片機(jī)設(shè)計(jì)時(shí)鐘要注意什么?

    剛開(kāi)始學(xué)習(xí)STM8單片機(jī),想利用該系列單片機(jī)實(shí)踐設(shè)計(jì)一款LED數(shù)碼管時(shí)鐘。請(qǐng)求大家說(shuō)明一些注意事項(xiàng)(事先查閱了一些資料;方案確認(rèn)的元器件有6位數(shù)碼管和TM1620驅(qū)動(dòng)芯
    發(fā)表于 04-18 08:23

    單片機(jī)怎么能夠與手機(jī)實(shí)現(xiàn)遠(yuǎn)程通訊

    單片機(jī)怎么能夠與手機(jī)實(shí)現(xiàn)遠(yuǎn)程通訊? 隨著物聯(lián)網(wǎng)的快速發(fā)展,單片機(jī)作為物聯(lián)網(wǎng)應(yīng)用中最常見(jiàn)的控制器,與手機(jī)實(shí)現(xiàn)遠(yuǎn)程通訊已成為一種趨勢(shì)。通過(guò)
    的頭像 發(fā)表于 01-15 14:59 ?2074次閱讀

    stm8怎么代替不了stc

    STM8是意法半導(dǎo)體(STMicroelectronics)公司推出的一款8單片機(jī),而STC是中國(guó)STC公司推出的一系列8單片機(jī)產(chǎn)品。盡
    的頭像 發(fā)表于 12-26 15:39 ?1865次閱讀

    STM8單片機(jī)的中斷優(yōu)先級(jí)如何配置?

    STM8單片機(jī)的中斷優(yōu)先級(jí)如何配置,STM8剛開(kāi)始接觸,而且相關(guān)資料比較少。 麻煩用過(guò)的大佬答疑一下。
    發(fā)表于 11-08 06:56

    stm8單片機(jī)只能用stlink進(jìn)行下載仿真嗎?

    stm8單片機(jī)只能用stlink進(jìn)行下載仿真嗎
    發(fā)表于 11-01 08:20

    單片機(jī)BootLoader與APP如何合并?

    單片機(jī)BootLoader與APP如何合并?
    的頭像 發(fā)表于 10-25 17:17 ?951次閱讀
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>BootLoader</b>與APP如何合并?

    STM8單片機(jī)CAN濾波器的設(shè)置

    STM8單片機(jī)CAN濾波器的設(shè)置
    的頭像 發(fā)表于 10-17 14:50 ?1920次閱讀
    <b class='flag-5'>STM8</b><b class='flag-5'>單片機(jī)</b>CAN濾波器的設(shè)置

    STM8系列單片機(jī)入門

    ST 的 8 位微控制器平臺(tái)基于高性能 8 位內(nèi)核,配有先進(jìn)的成套外設(shè)。 平臺(tái)采用 ST的 130 nm 嵌入式非易性存儲(chǔ)器專有技術(shù)。STM8 通過(guò)增強(qiáng)型堆棧指針運(yùn)算、先進(jìn)的尋址模式
    發(fā)表于 10-10 08:05

    基于單片機(jī)STM8在線編程器

    抽象的工業(yè)生產(chǎn)經(jīng)常會(huì)帶來(lái)問(wèn)題在更新MCU(微控制器單元)的程序時(shí)過(guò)程參數(shù)不能根據(jù)需要實(shí)時(shí)更新time.in以便于STM8的在線更新微控制器,本文設(shè)計(jì)了u STM8 onHne基于STM32單片機(jī)
    發(fā)表于 10-10 06:46

    STM8系列單片機(jī)開(kāi)發(fā)與應(yīng)用

    公司推出的STM8系列單片機(jī)即是典型代表之一。本文首先把STM8系列單片機(jī)做一簡(jiǎn)要介紹,并與傳統(tǒng)的Intel 80C51系列單片機(jī)進(jìn)行對(duì)比,
    發(fā)表于 10-10 06:36

    STM8系列單片機(jī)入門

    電子發(fā)燒友網(wǎng)站提供《STM8系列單片機(jī)入門.pdf》資料免費(fèi)下載
    發(fā)表于 10-07 16:09 ?2次下載
    <b class='flag-5'>STM8</b>系列<b class='flag-5'>單片機(jī)</b>入門

    STM8系列單片機(jī)入門

    ST 的 8 位微控制器平臺(tái)基于高性能 8 位內(nèi)核,配有先進(jìn)的成套外設(shè)。 平臺(tái)采用 ST的 130 nm 嵌入式非易性存儲(chǔ)器專有技術(shù)。STM8 通過(guò)增強(qiáng)型堆棧指針運(yùn)算、先進(jìn)的尋址模式
    發(fā)表于 09-28 08:05