衡阳派盒市场营销有限公司

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

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

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

STM8單片機為例,如何實現(xiàn)Bootloader?

GReq_mcu168 ? 來源:玩轉(zhuǎn)嵌入式 ? 作者:玩轉(zhuǎn)嵌入式 ? 2021-04-12 09:48 ? 次閱讀

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

238b6f94-9ab6-11eb-8b86-12bb97331649.jpg

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

01

什么是Bootloader

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

02

劃分Flash區(qū)間

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

03

修改中斷向量表

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

__root const long reintvec[]@“.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,所以,向量表的的修改方法為:除了第一個元素為,其余的元素將8改為9,修改完后代碼如下:

__root const long reintvec[]@“.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)境的安裝目錄下,每個型號/系列的單片機都會對應(yīng)一個ICF文件,需要修改一下ICF文件,這里需要根據(jù)flash空間的劃分來修改,前面將Bootloader的終止地址設(shè)置為0x9FFF,所以修改如下:

define region NearFuncCode = [from 0x8000 to 0x8FFF];

define block INTVEC with size = 0x80 { ro section .intvec };

place at start of NearFuncCode { block INTVEC };

23b4c448-9ab6-11eb-8b86-12bb97331649.jpg

05

跳轉(zhuǎn)命令

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

asm(“LDW X, SP ”);

asm(“LD A, $FF”);

asm(“LD XL, A ”);

asm(“LDW SP, X ”);

asm(“JPF $9000”);

應(yīng)用程序跳轉(zhuǎn)到Bootloader中的代碼如下

sm(“LDW X, SP ”);

asm(“LD A, $FF”);

asm(“LD XL, A ”);

asm(“LDW SP, X ”);

asm(“JPF $8000”);

06

編寫交互代碼

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

原文標題:單片機的Bootloader,可以實現(xiàn)用戶輕松升級程序

文章出處:【微信公眾號:玩轉(zhuǎn)單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責(zé)任編輯:haq

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

    關(guān)注

    6043

    文章

    44621

    瀏覽量

    638597
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    235

    瀏覽量

    45737

原文標題:單片機的Bootloader,可以實現(xiàn)用戶輕松升級程序

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    性價比高的8單片機有哪些?

    ,尤其適用于需要Motorola MC68HC11兼容性的場合。此外,華芯微還提供了NuMicro系列單片機,其中包含一些基于8051內(nèi)核的8位產(chǎn)品,用戶提供了更多選擇。 5. 其他高性價比選擇
    發(fā)表于 09-27 14:27

    MCU前沿市場趨勢:8單片機和32位單片機

    盡管32位單片機(MCU)在單片機開發(fā)中的普及度持續(xù)上升,但最近的MCU市場趨勢顯示8單片機的復(fù)合增長率接近其32位單片機的復(fù)合增長率。
    發(fā)表于 09-24 17:47

    8單片機為何不會被高端單片機取代?

    )應(yīng)用:8單片機應(yīng)用廣泛,包括汽車電子、家用電器、醫(yī)療設(shè)備、工業(yè)自動化和消費電子產(chǎn)品。它們通常是低成本、低功耗和實時控制應(yīng)用的首選。 8單片機為何不會被高端
    發(fā)表于 09-24 16:51

    單片機SPI通信實現(xiàn)

    在深入探討單片機(如基于STM32、AVR、PIC等)如何通過SPI(Serial Peripheral Interface)進行通信之前,我們先概述SPI通信的基本原理,隨后以STM32微控制器,詳細解釋如何配置SPI接口
    的頭像 發(fā)表于 09-09 17:00 ?759次閱讀

    請問stm8單片機上電后PC的變化是怎樣的?

    請問一下stm8單片機上電后,PC的變化是怎樣的?
    發(fā)表于 05-15 08:04

    STM8S如何用VC++編寫上位程序?

    使用STM8S單片機,編譯環(huán)境使用IAR.問題如下: 1:如何用VC++編寫上位程序,實現(xiàn):可將燒錄hex或bin文件的數(shù)據(jù)讀取,然后加上包頭碼,長度和校驗和等字節(jié)后通過串口發(fā)送。哪
    發(fā)表于 05-13 06:44

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

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

    STM8單片機手一摸單片機就死機是怎么回事?

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

    請問stm8系列的何時能帶上比較器?

    stm8系列的何時能帶上比較器? 有些單片機比如*芯,8,國產(chǎn)某t的8,都早有比較器了。
    發(fā)表于 05-06 06:48

    STM8如何實現(xiàn)批量燒錄?

    如題,是否可以實現(xiàn)? 如何實現(xiàn)STM8 通過SWIM(ICP)是否能夠實現(xiàn)通訊?
    發(fā)表于 04-30 06:49

    stm8系列單片機在IAR環(huán)境下怎樣配置G口?

    stm8系列單片機,在IAR環(huán)境下,怎樣配置G口? 例如:不小心把外斷的紅外接收或按鍵的引腳接到G口了,比如STM8S105或207(48腳封裝的),P35、P36腳(PG0、PG1),但IAR的環(huán)境里沒有G口的設(shè)置,怎么辦?
    發(fā)表于 04-23 07:02

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

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

    8單片機為何不會過時?

    對于8單片機來說,由于其主要處理8位數(shù)據(jù),所以其“字”的長度可能也是8位,但這并不是絕對的,還需要具體看單片機的設(shè)計。
    的頭像 發(fā)表于 03-20 16:29 ?1972次閱讀

    單片機BootLoader高階玩法

    經(jīng)過串口傳輸最終由單片機接收到的固件數(shù)據(jù)是可能出現(xiàn)差錯的,而有錯誤的固件冒然直接寫入到APP區(qū),是一定運行不起來的。
    發(fā)表于 03-08 13:58 ?791次閱讀
    <b class='flag-5'>單片機</b>的<b class='flag-5'>BootLoader</b>高階玩法

    8-Bit 觸控式 Flash 單片機中文資料

    該系列單片機是一款 8 位具有高性能精簡指令集且完全集成觸摸按鍵功能的 Flash 單片機。此系列單片機含有觸摸按鍵功能和可多次編程的 Flash 存儲器特 性,
    發(fā)表于 02-28 10:01 ?4次下載
    新澳博百家乐娱乐城| 大发888娱乐场网页版| 百家乐官网分析资料| 盛大百家乐官网的玩法技巧和规则 | 百家乐官网发牌靴遥控| 百家乐筹码皇冠| 百家乐官网网上真钱麻将| 百家乐输了好多钱| 伊通| 24山向吉凶| 百乐门| 至尊百家乐节目单| 宜阳县| 百家乐扑克多少张| 博彩娱乐场| 百家乐赌机玩法| 百家乐官网游戏怎么刷钱| 博彩百家乐的玩法技巧和规则 | 大发888-大发娱乐城下载| 回力百家乐官网的玩法技巧和规则 | 女性做生意的风水| 固原市| 百家乐新规则| 百家乐官网娱乐城博彩| 丽星百家乐的玩法技巧和规则 | 大发888信誉net| 同乐城百家乐官网娱乐城| 大发888娱乐城34| 百家乐筹码订做| 百家乐官网是咋玩法| 百家乐与21点| 百家乐官网7scs娱乐网| 大发888虎牌官方下载| 百家乐官网园首选海立方| 台东县| 优博百家乐的玩法技巧和规则| 百家乐官网全透明牌靴| 百家乐赌钱| 真人百家乐官网怎么对冲| 大发888怎么修改密码| 百家乐有没有稳赢|