那曲檬骨新材料有限公司

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

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

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

單片機(jī)的Bootloader可以實(shí)現(xiàn)用戶輕松升級(jí)程序

工程師 ? 來(lái)源:玩轉(zhuǎn)嵌入式 ? 作者: 劉小舒 ? 2020-10-23 16:57 ? 次閱讀

這次出差是為了升級(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)的向量表如下代碼所示。

__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,所以,向量表的的修改方法為: 除了第一個(gè)元素為,其余的元素將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)境的安裝目錄下,每個(gè)型號(hào)/系列的單片機(jī)都會(huì)對(duì)應(yīng)一個(gè)ICF

文件,需要修改一下ICF文件,這里需要根據(jù)flash空間的劃分來(lái)修改,前面將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 };

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(“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

編寫(xiě)交互代碼

以上設(shè)置好之后,就可以編寫(xiě)交互代碼了,所以交互代碼其實(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ì)了嗎?留言討論一下吧。

-END-

來(lái)源 | 玩轉(zhuǎn)嵌入式

作者 | 劉小舒

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)注

    6043

    文章

    44622

    瀏覽量

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

    關(guān)注

    57

    文章

    2769

    瀏覽量

    464383
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4825

    瀏覽量

    69046
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    單片機(jī)怎么寫(xiě)入程序

    程序通常涉及以下幾個(gè)步驟: 選擇單片機(jī)和開(kāi)發(fā)環(huán)境 : 確定項(xiàng)目需求,選擇合適的單片機(jī)型號(hào)。 安裝相應(yīng)的開(kāi)發(fā)環(huán)境,如Keil、IAR、MPLAB等。 硬件連接 : 將單片機(jī)連接到開(kāi)發(fā)板或
    的頭像 發(fā)表于 10-21 11:21 ?926次閱讀

    8位單片機(jī),32位單片機(jī)編程和應(yīng)用優(yōu)勢(shì)

    軟件更新即可實(shí)現(xiàn)功能升級(jí)和錯(cuò)誤修復(fù),無(wú)需復(fù)雜的硬件更換過(guò)程。這種后期維護(hù)的便捷性,是傳統(tǒng)硬件所無(wú)法比擬的。 此外,單片機(jī)還支持在線編程和調(diào)試,開(kāi)發(fā)者可以在不中斷系統(tǒng)運(yùn)行的情況下進(jìn)行
    發(fā)表于 09-26 11:45

    如何開(kāi)發(fā)不帶Flash API 的Bootloader實(shí)現(xiàn)在線升級(jí)

    電子發(fā)燒友網(wǎng)站提供《如何開(kāi)發(fā)不帶Flash API 的Bootloader實(shí)現(xiàn)在線升級(jí).pdf》資料免費(fèi)下載
    發(fā)表于 09-12 09:41 ?0次下載
    如何開(kāi)發(fā)不帶Flash API 的<b class='flag-5'>Bootloader</b><b class='flag-5'>實(shí)現(xiàn)</b>在線<b class='flag-5'>升級(jí)</b>

    單片機(jī)加wifi模塊可以做什么

    嵌入式系統(tǒng)和智能設(shè)備中。而Wi-Fi模塊是一種無(wú)線通信模塊,它允許設(shè)備通過(guò)無(wú)線網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸。將單片機(jī)與Wi-Fi模塊結(jié)合使用,可以開(kāi)發(fā)出多種功能強(qiáng)大的智能設(shè)備和系統(tǒng)。 概述 單片機(jī)加Wi-Fi模塊的組合
    的頭像 發(fā)表于 09-10 15:32 ?811次閱讀

    keil可以讀出單片機(jī)程序

    表述存在一定的誤解,因?yàn)镵eil主要是用于編寫(xiě)、編譯和調(diào)試單片機(jī)程序的工具,而不是直接從單片機(jī)中讀取已編程代碼的工具。 一、Keil的主要功能 編程開(kāi)發(fā) :Keil允許用戶使用C語(yǔ)言或
    的頭像 發(fā)表于 09-02 10:32 ?1243次閱讀

    單片機(jī)燒錄程序用什么軟件

    單片機(jī)燒錄程序單片機(jī)開(kāi)發(fā)過(guò)程中的一個(gè)重要環(huán)節(jié),涉及到將編寫(xiě)好的程序代碼通過(guò)燒錄器寫(xiě)入單片機(jī)的ROM中,以
    的頭像 發(fā)表于 09-02 10:05 ?1653次閱讀

    單片機(jī)燒錄程序可以重新燒嗎

    好的程序代碼通過(guò)特定的方式寫(xiě)入單片機(jī)的存儲(chǔ)器中,使其能夠按照預(yù)定的邏輯執(zhí)行任務(wù)。單片機(jī)燒錄程序可以重新燒錄,這是
    的頭像 發(fā)表于 09-02 10:04 ?1549次閱讀

    單片機(jī)燒錄程序的線比單片機(jī)上的少還能燒錄嗎

    單片機(jī)燒錄原理 單片機(jī)燒錄是指將編寫(xiě)好的程序代碼通過(guò)一定的方式傳輸?shù)?b class='flag-5'>單片機(jī)的存儲(chǔ)器中,使其能夠按照程序的指令運(yùn)行。這個(gè)過(guò)程通常需要使用燒錄器
    的頭像 發(fā)表于 09-02 09:54 ?612次閱讀

    單片機(jī)燒錄程序的基本步驟是什么

    單片機(jī)燒錄程序單片機(jī)開(kāi)發(fā)過(guò)程中非常重要的一步,它涉及到將編寫(xiě)好的程序代碼通過(guò)一定的方式傳輸?shù)?b class='flag-5'>單片機(jī)內(nèi)部的存儲(chǔ)器中,使
    的頭像 發(fā)表于 09-02 09:47 ?1436次閱讀

    stm32單片機(jī)燒錄程序會(huì)擦除原來(lái)的程序

    在STM32單片機(jī)燒錄程序的過(guò)程中, 通常情況下會(huì)擦除原來(lái)的程序 ,并將新程序寫(xiě)入單片機(jī)的閃存(Flash)中。這一過(guò)程是通過(guò)燒錄工具(如S
    的頭像 發(fā)表于 09-02 09:42 ?2514次閱讀

    藍(lán)牙模塊如何實(shí)現(xiàn)單片機(jī)和手機(jī)端數(shù)據(jù)互傳

    藍(lán)牙模塊實(shí)現(xiàn)單片機(jī)和手機(jī)端數(shù)據(jù)互傳的過(guò)程可以分為以下幾個(gè)步驟: 硬件準(zhǔn)備 : 確保你有一個(gè)支持藍(lán)牙通信的單片機(jī)開(kāi)發(fā)板,如Arduino、Raspberry Pi等。 準(zhǔn)備一個(gè)兼容的藍(lán)牙
    的頭像 發(fā)表于 07-24 17:59 ?2888次閱讀
    藍(lán)牙模塊如何<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>單片機(jī)</b>和手機(jī)端數(shù)據(jù)互傳

    單片機(jī)學(xué)到什么程度可以找工作?

    這個(gè)話題老生常談了,找工作需要具備一定的技術(shù)實(shí)力,但是究竟學(xué)到什么程度就可以呢?單片機(jī)作為嵌入式系統(tǒng)的核心,具有廣泛的應(yīng)用場(chǎng)景,因此掌握單片機(jī)編程技能確實(shí)能為您打開(kāi)就業(yè)之門。然而,要想通過(guò)單片
    的頭像 發(fā)表于 03-28 08:04 ?1689次閱讀
    <b class='flag-5'>單片機(jī)</b>學(xué)到什么程度<b class='flag-5'>可以</b>找工作?

    幾種常用單片機(jī)的在線升級(jí)能力比較

    電子發(fā)燒友網(wǎng)站提供《幾種常用單片機(jī)的在線升級(jí)能力比較.pdf》資料免費(fèi)下載
    發(fā)表于 03-24 09:39 ?2次下載

    單片機(jī)BootLoader高階玩法

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

    做一個(gè)TC23X單片機(jī)Bootloader程序需要準(zhǔn)備哪些方面的知識(shí)?

    各位,問(wèn)一下,上位機(jī)用現(xiàn)成的,做一個(gè)TC23X單片機(jī)Bootloader程序需要準(zhǔn)備哪些方面的知識(shí)?需要看數(shù)據(jù)手冊(cè)的哪些章節(jié)?還有能否給一個(gè)具體的步驟,感謝。
    發(fā)表于 02-18 08:33
    京城娱乐城开户| 真钱扎金花| 威尼斯人娱乐场棋牌| 百家乐桌子豪华| 旺财转运24妙法| 广东百家乐官网扫描分析仪| 大发888下载 大发888游戏平台| 博彩百家乐的玩法技巧和规则 | 六合彩130| 大发888游戏平台 34| 威尼斯人娱乐场 老品牌值得您信赖| 百家乐旺门打法| 百家乐最好的投注方法| 百家乐如何取胜| 澳门百家乐官网的玩法技巧和规则| 网络百家乐官网金海岸破解软件| 百家乐官网多少点数算赢| 哈尔滨市| 瑞丰娱乐| 宝博娱乐城开户| 德州扑克教程| 大发888怎么开户| 大发888棋牌游戏官网| 新全讯网xb112| 威尼斯人娱乐城介| 免费百家乐平预测软件| 百家乐打鱼秘| 利高百家乐的玩法技巧和规则| 誉博百家乐327589| 缅甸百家乐龙虎斗| 百家乐去澳门| 百家乐三珠投注法| 澳门百家乐庄闲的玩法| 百家乐视频麻将游戏| 澳门百家乐如何算牌| 网上百家乐注册彩金| TT百家乐现金网| 百家乐园千术大全| 百家乐开放词典新浪| 澳门百家乐破解方法| 百家乐保证赢|