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

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

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

3天內不再提示

單片機的Bootloader可以實現用戶輕松升級程序

工程師 ? 來源:玩轉嵌入式 ? 作者: 劉小舒 ? 2020-10-23 16:57 ? 次閱讀

這次出差是為了升級程序解決Bug,用戶已經將產品封裝起來,無法開蓋,只能使用CAN總線來更新程序,用Bootloader實現。其實就是通過上位機把.bin/hex文件以CAN通訊的方式發送給單片機并存儲在規定的Flash中。 這個過程與手機端更新APP類似。

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

01

什么是Bootloader

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

02

劃分Flash區間

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

03

修改中斷向量表

STM8的中斷向量表通過一段特定的代碼來實現,并需要根據前文提到的空間劃分來修改。STM8的應用程序起始地址是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, };

前文已經將應用程序的起始地址修改為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文件存放在編程環境的安裝目錄下,每個型號/系列的單片機都會對應一個ICF

文件,需要修改一下ICF文件,這里需要根據flash空間的劃分來修改,前面將Bootloader的終止地址設置為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

跳轉命令

所謂跳轉,就是在應用程序中跳轉到Boot中去升級;升級完成后需要跳轉到應用程序中,所跳轉的起始就是起始地址。Bootloader跳轉到應用程序的代碼如下,

asm(“LDW X, SP ”);asm(“LD A, $FF”);asm(“LD XL, A ”);asm(“LDW SP, X ”);asm(“JPF $9000”);

應用程序跳轉到Bootloader中的代碼如下

sm(“LDW X, SP ”);asm(“LD A, $FF”);asm(“LD XL, A ”);asm(“LDW SP, X ”);asm(“JPF $8000”);

06

編寫交互代碼

以上設置好之后,就可以編寫交互代碼了,所以交互代碼其實就是一套協議,規定了應用程序如何跳轉到Boot,在Boot中如何處理和存儲數據,這需要上位機的支持。如果只是用于自家的產品,就可以自己定義協議。也可以使用標準的協議,比如汽車行業中的UDS(統一診斷服務)。

Bootloader實現之后,就可以使用CAN/UART來實現產品固件的升級了。這就是Bootloader的關鍵內容,本文你學會了嗎?留言討論一下吧。

-END-

來源 | 玩轉嵌入式

作者 | 劉小舒

責任編輯:haq

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

    關注

    6043

    文章

    44622

    瀏覽量

    638668
  • CAN
    CAN
    +關注

    關注

    57

    文章

    2772

    瀏覽量

    464427
  • 代碼
    +關注

    關注

    30

    文章

    4829

    瀏覽量

    69071
收藏 人收藏

    評論

    相關推薦

    單片機怎么寫入程序

    程序通常涉及以下幾個步驟: 選擇單片機和開發環境 : 確定項目需求,選擇合適的單片機型號。 安裝相應的開發環境,如Keil、IAR、MPLAB等。 硬件連接 : 將單片機連接到開發板或
    的頭像 發表于 10-21 11:21 ?940次閱讀

    8位單片機,32位單片機編程和應用優勢

    軟件更新即可實現功能升級和錯誤修復,無需復雜的硬件更換過程。這種后期維護的便捷性,是傳統硬件所無法比擬的。 此外,單片機還支持在線編程和調試,開發者可以在不中斷系統運行的情況下進行
    發表于 09-26 11:45

    如何開發不帶Flash API 的Bootloader實現在線升級

    電子發燒友網站提供《如何開發不帶Flash API 的Bootloader實現在線升級.pdf》資料免費下載
    發表于 09-12 09:41 ?0次下載
    如何開發不帶Flash API 的<b class='flag-5'>Bootloader</b><b class='flag-5'>實現</b>在線<b class='flag-5'>升級</b>

    單片機加wifi模塊可以做什么

    嵌入式系統和智能設備中。而Wi-Fi模塊是一種無線通信模塊,它允許設備通過無線網絡進行數據傳輸。將單片機與Wi-Fi模塊結合使用,可以開發出多種功能強大的智能設備和系統。 概述 單片機加Wi-Fi模塊的組合
    的頭像 發表于 09-10 15:32 ?820次閱讀

    keil可以讀出單片機程序

    表述存在一定的誤解,因為Keil主要是用于編寫、編譯和調試單片機程序的工具,而不是直接從單片機中讀取已編程代碼的工具。 一、Keil的主要功能 編程開發 :Keil允許用戶使用C語言或
    的頭像 發表于 09-02 10:32 ?1251次閱讀

    單片機燒錄程序用什么軟件

    單片機燒錄程序單片機開發過程中的一個重要環節,涉及到將編寫好的程序代碼通過燒錄器寫入單片機的ROM中,以
    的頭像 發表于 09-02 10:05 ?1676次閱讀

    單片機燒錄程序可以重新燒嗎

    好的程序代碼通過特定的方式寫入單片機的存儲器中,使其能夠按照預定的邏輯執行任務。單片機燒錄程序可以重新燒錄,這是
    的頭像 發表于 09-02 10:04 ?1558次閱讀

    單片機燒錄程序的線比單片機上的少還能燒錄嗎

    單片機燒錄原理 單片機燒錄是指將編寫好的程序代碼通過一定的方式傳輸到單片機的存儲器中,使其能夠按照程序的指令運行。這個過程通常需要使用燒錄器
    的頭像 發表于 09-02 09:54 ?615次閱讀

    單片機燒錄程序的基本步驟是什么

    單片機燒錄程序單片機開發過程中非常重要的一步,它涉及到將編寫好的程序代碼通過一定的方式傳輸到單片機內部的存儲器中,使
    的頭像 發表于 09-02 09:47 ?1450次閱讀

    stm32單片機燒錄程序會擦除原來的程序

    在STM32單片機燒錄程序的過程中, 通常情況下會擦除原來的程序 ,并將新程序寫入單片機的閃存(Flash)中。這一過程是通過燒錄工具(如S
    的頭像 發表于 09-02 09:42 ?2533次閱讀

    藍牙模塊如何實現單片機和手機端數據互傳

    藍牙模塊實現單片機和手機端數據互傳的過程可以分為以下幾個步驟: 硬件準備 : 確保你有一個支持藍牙通信的單片機開發板,如Arduino、Raspberry Pi等。 準備一個兼容的藍牙
    的頭像 發表于 07-24 17:59 ?2901次閱讀
    藍牙模塊如何<b class='flag-5'>實現</b><b class='flag-5'>單片機</b>和手機端數據互傳

    單片機學到什么程度可以找工作?

    這個話題老生常談了,找工作需要具備一定的技術實力,但是究竟學到什么程度就可以呢?單片機作為嵌入式系統的核心,具有廣泛的應用場景,因此掌握單片機編程技能確實能為您打開就業之門。然而,要想通過單片
    的頭像 發表于 03-28 08:04 ?1703次閱讀
    <b class='flag-5'>單片機</b>學到什么程度<b class='flag-5'>可以</b>找工作?

    幾種常用單片機的在線升級能力比較

    電子發燒友網站提供《幾種常用單片機的在線升級能力比較.pdf》資料免費下載
    發表于 03-24 09:39 ?2次下載

    單片機BootLoader高階玩法

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

    做一個TC23X單片機Bootloader程序需要準備哪些方面的知識?

    各位,問一下,上位用現成的,做一個TC23X單片機Bootloader程序需要準備哪些方面的知識?需要看數據手冊的哪些章節?還有能否給一個具體的步驟,感謝。
    發表于 02-18 08:33
    主站蜘蛛池模板: 成人国产永久福利看片 | 色天使在线视频 | 国产三级黄色录像 | 男人天堂网在线观看 | 黄色小视频免费 | 福利午夜在线 | 1024人成软件色www | 亚洲激情都市 | 你懂的手机在线视频 | 欧美大片国产在线永久播放 | 亚洲一区毛片 | 国产在线播 | 午夜视频在线观看www中文 | 神马午夜嘿嘿 | 啪啪网站色大全免费 | 四虎永久免费网站免费观看 | 日本一区二区三区四区不卡 | 久久久久久久国产精品电影 | 国产精品久久久久久久久免费hd | 激情六月网 | 天天摸天天澡天天碰天天弄 | 美女网站视频一区 | 好爽毛片一区二区三区四 | 男女交性无遮挡免费视频 | 免费看欧美理论片在线 | 激情五月婷婷久久 | 天天综合视频网 | 5060精品国产福利午夜 | 国产一区二区三区欧美精品 | 六月丁香婷婷天天在线 | 视频一区视频二区在线观看 | 日本特黄色大片 | 精品在线小视频 | 四虎精品成在线播放 | 免费人成a大片在线观看动漫 | 91精品国产色综合久久不卡蜜 | 视频免费黄色 | 激情三级视频 | 日韩毛片高清免费 | 国产亚洲papapa | 四虎永久精品视频在线 |