日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

13.1-自己开发一个“单片机烧写工具”!不是开玩笑吧?原来如此^~^(OTA升级)

發(fā)布時(shí)間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 13.1-自己开发一个“单片机烧写工具”!不是开玩笑吧?原来如此^~^(OTA升级) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

聽(tīng)到這個(gè)"需求"的第一反應(yīng)“這是開(kāi)玩笑吧”。我是是一個(gè)普通的碼農(nóng),怎么可能開(kāi)發(fā)出了那么復(fù)雜的東西。
帶著一頭冷汗,開(kāi)始查資料中…
原來(lái)如此,有一種下載程序的方式叫做“IAP”。 懸著的心終于放了下來(lái)。
原來(lái)“給單片機(jī)燒寫程序”的實(shí)質(zhì)就是把“編譯”好的“程序二進(jìn)制文件”復(fù)制到芯片的flash中,和從電腦傳電影到MP4播放器上是相似的原理。只不過(guò)現(xiàn)在這個(gè)“電影”是 “程序二進(jìn)制文件”,而單片機(jī)就是這個(gè)“二進(jìn)制程序”的“播放器”。

一、前言(需求背景)

需求背景就是“遠(yuǎn)程更新硬件設(shè)備的芯片程序(固件)”。在開(kāi)發(fā)硬件設(shè)備的時(shí)候,一般使用專用“燒寫器”給芯片燒寫程序。從而完成芯片應(yīng)用程序編碼和調(diào)試工作。在硬件設(shè)備研發(fā)完成,正式生產(chǎn)出產(chǎn)品并賣給客戶后。如果需要更新硬件程序怎么辦。難道也要給用戶郵寄一個(gè)燒寫器和程序文件?一個(gè)批次的產(chǎn)品都需要更新,你能郵寄的過(guò)來(lái)嗎?這期間會(huì)消耗多少成本。這是要賠本的節(jié)奏呀。因此,你需要一個(gè)“更新固件”的功能。“更新固件”這個(gè)詞,對(duì)于愛(ài)鼓搗智能設(shè)備的兄臺(tái)應(yīng)該很熟悉吧。注意,使用網(wǎng)絡(luò)或GPRS遠(yuǎn)程升級(jí)固件的時(shí)候,這項(xiàng)技術(shù)被稱為“OTA升級(jí)”。

二、實(shí)現(xiàn)“更新固件”的原理

“更新固件”從技術(shù)角度來(lái)看,本質(zhì)上是“芯片自己給自己更新(燒寫)程序”。沒(méi)錯(cuò)就是自己給自己更新程序,聽(tīng)起來(lái)有點(diǎn)嚇人,萬(wàn)一芯片學(xué)會(huì)了自己給自己迭代升級(jí)程序,就像生物進(jìn)化一樣,一步一步的進(jìn)化,最終出現(xiàn)“智慧思想”怎么辦。如果你看過(guò)“終結(jié)者”就會(huì)知道:“沒(méi)辦法,攔是攔不住的”。因此,就會(huì)出現(xiàn)“硅基生物”代替“碳基生物”的地球(如果你看過(guò)劉慈欣的著作你就會(huì)明白我要表達(dá)的意思)。

芯片自己更新程序的原理是:芯片中是可以存放多個(gè)“程序”的。就和你的手機(jī)可以同時(shí)安裝“支付寶”和“微信”是一個(gè)道理。而實(shí)現(xiàn)芯片自己更新“程序”的原理就是,燒寫在芯片中的其中一個(gè)“程序”可以更新芯片中的另一個(gè)“程序”。把可以更新其他程序的“程序”叫做“Bootloader”,把被更新的“程序”叫做“App”。(當(dāng)然從原理上來(lái)說(shuō)芯片上的多個(gè)程序是可以實(shí)現(xiàn)互相更新的。只是現(xiàn)實(shí)中很少有這樣的需求)。更詳細(xì)的實(shí)現(xiàn)細(xì)節(jié),請(qǐng)閱讀13.2~13.5章節(jié)。

二、STM32單片機(jī)支持的幾種“燒寫”方式說(shuō)明

  • stm32單片機(jī)有三種啟動(dòng)方式
    啟動(dòng)方式由芯片上的兩個(gè)管腳BOOT0和BOOT1來(lái)決定:
  • 引腳配置啟動(dòng)模式程序儲(chǔ)存位置支持的下載模式備注
    BOOT1=x BOOT0=0從用戶閃存啟動(dòng)FlashSWD/JTAG單片機(jī)正常運(yùn)行所使用的模式,在此模式,可以直接用專用燒寫器下載程序
    BOOT1=0 BOOT0=1從系統(tǒng)存儲(chǔ)器啟動(dòng)FlashISP從芯片自帶的bootloader(ISP程序)下載程序,下載完需要切換引腳為“BOOT1=x BOOT0=0 ”并復(fù)位芯片,才能運(yùn)行程序。
    BOOT1=1 BOOT0=1從內(nèi)置SRAM啟動(dòng)SRAMISP調(diào)試模式,下載到芯片的代碼存放在內(nèi)存中,從而加快下載速度,避免寫Flash。由于程序儲(chǔ)存在內(nèi)存中,因此掉電會(huì)丟失程序
  • Stm32所支持的燒寫方式
    • SWD/JTAG
      兩種標(biāo)準(zhǔn)的“燒寫器”編程接口(協(xié)議),支持這些編程接口的燒寫器有:JLINK、ULINK、ST-LINK

    • ISP(In System Programing,在系統(tǒng)中編程)
      使用固化在芯片內(nèi)部的bootloder更新應(yīng)用程序的一種方式。需要芯片硬件支持(閱讀芯片手冊(cè))。一般使用串口下載程序,常用的下載工具軟件有:國(guó)產(chǎn)的FlyMcu 和 stm公司官方提供的Flash Loader Demonstrator。注意,燒寫的時(shí)候,需要配置芯片的Boot引腳,燒寫完成之后,再修配置回來(lái)才能運(yùn)行程序。

    • IAP(In applicating Programing,在應(yīng)用編程),是一種除基本芯片燒錄方法之外的一種巧妙程序燒寫方式。
      實(shí)現(xiàn)IAP下載程序,需要芯片保持在“從閃存啟動(dòng)模式”。其實(shí)現(xiàn)原理為:把flash 劃分為2個(gè)部分,一個(gè)部分用于放置“更新其他程序的bootloader”,另一部分放置普通的應(yīng)用程序。其中bootloder放置在芯片“上電”自動(dòng)運(yùn)行的位置(即用燒寫器燒寫普通程序的位置)。而普通的應(yīng)用程序被放置在flash偏后面的 扇區(qū)中。至此你會(huì)有以下幾個(gè)疑問(wèn),下面分別解答。手機(jī)自動(dòng)更新系統(tǒng),其實(shí)就是使用了IAP的原理。(其實(shí)電腦操作系統(tǒng)和手機(jī)操作系統(tǒng)都有bootloader,只不過(guò)用在電腦系統(tǒng)上,被叫做“Windows Boot Manager”)。

  • bootloader到底是什么?燒寫程序是怎么做到的?
    bootloader起始就是一個(gè)普通的單片機(jī)應(yīng)用程序,但他的功能是,從芯片外界讀取“應(yīng)用程序的bin文件”并把這個(gè)文件放置到芯片F(xiàn)lash的指定位置。就完成了“應(yīng)用程序的燒寫”。

  • 有了bootloader之后,芯片程序怎樣啟動(dòng)?
    現(xiàn)在被燒寫好的“應(yīng)用程序”沒(méi)有放置到單片機(jī)上電運(yùn)行的位置,那么應(yīng)用程序怎么啟動(dòng)呢。答案是,芯片上電,默認(rèn)會(huì)運(yùn)行bootloader這個(gè)程序,而bootloader這個(gè)程序可以判斷是否存在可用的App,如果存在則把當(dāng)前程序運(yùn)行的“pc指針”指向放置應(yīng)用程序的flash地址(在此之前,重新指定新的“中斷向量表”和“堆棧”的地址)即可讓應(yīng)用程序跑起來(lái)。是的,使用IAP方式后,以后芯片每次上電都走這樣一個(gè)啟動(dòng)流程。

  • 四、實(shí)現(xiàn)IAP有哪幾種方式,分別說(shuō)明

    提到IAP的實(shí)現(xiàn)方式,那可多了去了。可以說(shuō)只要能實(shí)現(xiàn)“數(shù)據(jù)傳輸”,就可以用來(lái)開(kāi)發(fā)IAP升級(jí)固件的功能。以下把常用常見(jiàn)的方式加以詳細(xì)說(shuō)明:

  • U盤
    Bootloader需要讀取U盤的文件系統(tǒng),從U盤讀取固件文件并寫在Flash的指定位置。從而完成程序更新。
    最常見(jiàn)的IAP實(shí)現(xiàn)方式,也最方便。只要把固件放置到U盤,然后插入機(jī)器,啟動(dòng)機(jī)器即可自動(dòng)更新應(yīng)用程序。一般智能硬件,采用設(shè)備本身模擬U盤的功能,當(dāng)你把智能硬件使用USB數(shù)據(jù)線連接到電腦上之后,電腦上會(huì)彈出一個(gè)類似U盤的磁盤,你只需把固件文件(bin文件)復(fù)制粘貼到這個(gè)磁盤中即可。然后斷開(kāi)USB連接線,重啟或重新給智能硬件通電,智能設(shè)備就會(huì)自動(dòng)更新固件。缺點(diǎn):要做的支持市面上的所有U盤很難。

  • 串口(RS232/RS485)
    Bootloader需要實(shí)現(xiàn)串口通信,使用串口通道接收固件文件并寫在Flash的指定位置。從而完成程序更新。
    這個(gè)也是常用的更新固件方式。使用硬件設(shè)備的的“串口通信線”即可完成芯片固件更新。需要配合相應(yīng)的上位機(jī)軟件來(lái)實(shí)現(xiàn)。使用體驗(yàn)比較好,使用起來(lái)也比較穩(wěn)定。(本文一開(kāi)始說(shuō)描述的需求,就是指這種實(shí)現(xiàn)方式)

  • 網(wǎng)絡(luò)TCP
    Bootloader需要實(shí)現(xiàn)網(wǎng)絡(luò)通信,使用網(wǎng)絡(luò)通道接收固件文件并寫在Flash的指定位置。從而完成程序更新。
    常用于實(shí)現(xiàn)遠(yuǎn)程自動(dòng)更新。比如放置在野外的智能設(shè)備,通過(guò)4G網(wǎng)絡(luò)定期查看是否有更新,如果有則通過(guò)網(wǎng)絡(luò)下載固件并自動(dòng)更新。

  • 藍(lán)牙
    Bootloader需要實(shí)現(xiàn)藍(lán)牙通信,使用藍(lán)牙通道接收固件文件并寫在Flash的指定位置。從而完成程序更新。
    常用于便攜式設(shè)備的更新。因?yàn)橐话愕谋銛y式設(shè)備都是使用藍(lán)牙通信。所以只能用藍(lán)牙來(lái)更新固件。
    比如:智能手表,藍(lán)牙耳機(jī),藍(lán)牙鼠標(biāo),藍(lán)牙xx

  • CAN總線(主叢電路板方式)
    常用于更新大型機(jī)器中的某一塊電路板上芯片的程序。主電路板有文件系統(tǒng),可以儲(chǔ)存其他電路板上芯片的固件文件。大型設(shè)備內(nèi)部,電路板與電路板之間常使用CAN總線通信。因此要更新機(jī)器內(nèi)某個(gè)電路板的程序,可以通過(guò)“主從電路板”的方式,線把固件文件先傳輸?shù)街麟娐钒逍酒?#xff0c;然后主電路板芯片通過(guò)CAN總線給目標(biāo)電路板更新程序。

  • 五、IAP升級(jí)固件中的“加密”說(shuō)明

  • 為什么要加密
    當(dāng)你的機(jī)器硬件出現(xiàn)問(wèn)題的時(shí)候,你需要把固件文件發(fā)給用戶,讓用戶使用“U盤”或串口來(lái)升級(jí)程序。這個(gè)時(shí)候相當(dāng)于把你的程序可執(zhí)行文件暴露了,如果讓想“復(fù)制”你設(shè)備的人拿到手,他可樂(lè)開(kāi)了花了。他只需要自己寫個(gè)bootloader就能借用你這個(gè)“可執(zhí)行文件”來(lái)生產(chǎn)一模一樣的設(shè)備了。你怎么辦,只能走法律途徑了。所以你不加密固件,相當(dāng)于“鼓勵(lì)別人犯罪”。
  • 怎么加密
    再bootloader中作修改。專門編寫一個(gè)加密軟件,來(lái)加密你要發(fā)給用戶的“固件”。然后你自己機(jī)器中的bootloader加入對(duì)應(yīng)的解密代碼。bootloader從U盤或串口拿到“固件”文件先解密,然后在寫到Flash中即可。至于用哪個(gè)加密算法,這里沒(méi)有推薦(需求明確了還怕沒(méi)有解決方案嘛.)。
  • 六、IAP升級(jí)固件中的“壓縮”說(shuō)明

  • 為啥要壓縮固件
    因?yàn)榇髥h!普通Stm32的應(yīng)用程序,編譯出來(lái)的Bin文件大小在20K~100K之間。咦,不大呀,怎么說(shuō)大呢?
    是不大,但是看對(duì)于什么通信方式來(lái)說(shuō)。
    對(duì)于U盤更新固件方式,幾百K是小意思。如果對(duì)于網(wǎng)絡(luò)方式呢。一般都是給遠(yuǎn)程網(wǎng)絡(luò)設(shè)備更新固件,用的是流量。而物聯(lián)網(wǎng)卡的流量很有限,傷不起呀。其次,看你對(duì)速度有沒(méi)有要求。比如你用藍(lán)牙來(lái)更新固件。更新速度的瓶頸是在傳輸速度上。而速度是無(wú)法提高的,只能通過(guò)減小固件體積來(lái)達(dá)到提高更新速度的效果。

  • 怎樣壓縮與解壓縮固件
    使用電腦軟件來(lái)實(shí)現(xiàn)對(duì)固件的壓縮。bootloader只要負(fù)責(zé)解壓即可。推薦的芯片可用壓縮算法有:zlib、miniLZO

  • 總結(jié)

    以上是生活随笔為你收集整理的13.1-自己开发一个“单片机烧写工具”!不是开玩笑吧?原来如此^~^(OTA升级)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。