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

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

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

開發(fā)者案例|GC211實現(xiàn)MCU開發(fā)和OTA升級

機智云 ? 2022-10-31 16:18 ? 次閱讀

本文以依托 GC211 和秉火開發(fā)板,講述如何實現(xiàn)MCU開發(fā)和OTA升級。用戶如果將開發(fā)了的產(chǎn)品發(fā)布上線銷售,后期需要更新固件和程序,就需要用到遠程OTA固件升級,就能對已發(fā)布的產(chǎn)品進行遠程升級。01硬件材料1.機智云4G模組GC211,此模組采用中移模組ML302,支持網(wǎng)絡,移動,聯(lián)通,電信4G網(wǎng)絡,可前往機智云官方和淘寶店鋪購買。
e7fcc0dc-5732-11ed-b116-dac502259ad0.png2.秉火【F103開發(fā)板-指南者】

02云端開發(fā)

2.1、云端部署
創(chuàng)建新產(chǎn)品,可根據(jù)自己需求選擇。
e94b2c26-5732-11ed-b116-dac502259ad0.png

添加如下數(shù)據(jù)點,可根據(jù)自己需求

e98ccb22-5732-11ed-b116-dac502259ad0.png
生成STM32F103代碼下載備用
e9e6fba6-5732-11ed-b116-dac502259ad0.png03硬件部分說明3.1 關(guān)于STM32啟動ARM7/ARM9 內(nèi)核的控制器在復位后,CPU 會從存儲空間的絕對地址0x000000 取出第一條指令執(zhí)行復位中斷服務程序的方式啟動,即固定了復位后的起始地址為0x000000(PC =0x000000)同時中斷向量表的位置并不是固定的。然而,Cortex-M3 內(nèi)核啟動有3 種情況:1、通過boot 引腳設置可以將中斷向量表定位于SRAM 區(qū),即起始地址為0x2000000,同時復位后PC 指針位于0x2000000 處;2、通過boot 引腳設置可以將中斷向量表定位于FLASH 區(qū),即起始地址為0x8000000,同時復位后PC 指針位于0x8000000 處;3、通過boot 引腳設置可以將中斷向量表定位于內(nèi)置Bootloader 區(qū);Cortex-M3 內(nèi)核規(guī)定,起始地址必須存放堆頂指針,而第二個地址則必須存放復位中斷入口向量地址,這樣在Cortex-M3 內(nèi)核復位后,會自動從起始地址的下一個32 位空間取出復位中斷入口向量,跳轉(zhuǎn)執(zhí)行復位中斷服務程序。對比ARM7/ARM9 內(nèi)核,Cortex-M3 內(nèi)核則是固定了中斷向量表的位置而起始地址是可變化的。總結(jié)一下STM32 的啟動文件和啟動過程。
首先對棧和堆的大小進行定義,并在代碼區(qū)的起始處建立中斷向量表,其第一個表項是棧頂?shù)刂?,第二個表項是復位中斷服務入口地址。然后在復位中斷服務程序中跳轉(zhuǎn)C/C++標準實時庫的main 函數(shù),完成用戶堆棧等的初始化后,跳轉(zhuǎn).c 文件中的main 函數(shù)開始執(zhí)行C 程序。假設STM32被設置為從內(nèi)部FLASH 啟動(這也是最常見的一種情況),中斷向量表起始地位為0x8000000,則棧頂?shù)刂反娣庞?x8000000處,而復位中斷服務入口地址存放于0x8000004 處。當STM32 遇到復位信號后,則從0x80000004 處取出復位中斷服務入口地址,繼而執(zhí)行復位中斷服務程序,然后跳轉(zhuǎn)main函數(shù),最后進入mian 函數(shù)。3.2OTA 需求分析我們將建立兩個工程,分別是Bootloader 還有APP,我們將Bootloader下載到FLASH 空間0x8000000 地址處,那么STM32 啟動后會首先執(zhí)行我們的Bootloader 程序,然后就可以按照我們意愿實現(xiàn)OTA 了。?FLASH區(qū)間劃分
根據(jù)需求,我們將STM32F103VET6 這個芯片Flash 空間劃分出4 個區(qū)域:Bootloader、FLAG、APP、APP_BAK。四個區(qū)間作用描述如下:? Bootloader: 存儲Bootloader 固件,MCU 上電后首先運行該固件。
? FLAG: 存儲有關(guān)升級的相關(guān)標志位,Bootloader 和APP 都需要操作該區(qū)域。
升級標志位(2B)
固件大小(4B)
MD5加密數(shù)據(jù)(16B)
? APP:存儲用戶程序固件。
? APPBAK: 臨時存儲云端下發(fā)的新固件,升級固件的一個過渡存儲區(qū)。
STM32F103VET6分區(qū)方案如下圖所示:
ea1b045a-5732-11ed-b116-dac502259ad0.png
3.3 BOOTLOADER分區(qū)部分
3.3.1 Bootloader程序流程
Bootloader 的主要職能是在有升級任務的時候?qū)?APPBAK 分區(qū)里面的固件拷貝到 APP 區(qū)域。當然,這期間需要做很多的工作,比如升級失敗的容錯等等。具體的流程可以參考圖示。需要注意的是,在校驗 MD5 正確后開始搬運固件數(shù)據(jù)期間,MCU 出現(xiàn)故障(包括突然斷電),MCU 應發(fā)生復位操作(FLAG 區(qū)域數(shù)據(jù)未破壞),復位后重新開始執(zhí)行 Bootloader,從而避免 MCU 刷成板磚。
ea313270-5732-11ed-b116-dac502259ad0.png
3.3.2 Bootloader程序配置
為了方便構(gòu)架,此處我采用cubemx構(gòu)建項目,生成keil工程。
創(chuàng)建STM32F103VE項目
ea58134a-5732-11ed-b116-dac502259ad0.png配置外部時鐘
eace39d0-5732-11ed-b116-dac502259ad0.png配置時鐘72M
eb087ed8-5732-11ed-b116-dac502259ad0.png
配置debug為serisl wire
eb22e4d0-5732-11ed-b116-dac502259ad0.png配置串口4為BootLoader的日志打印口。
eb797142-5732-11ed-b116-dac502259ad0.png生成keil代碼添加驅(qū)動flash.c,gagent_md5.c和app.c以及對應的組,如何添加此處不過多介紹(基礎(chǔ)的軟件操作),只提供文件路徑。
eb9a69c4-5732-11ed-b116-dac502259ad0.pngebc2f0e2-5732-11ed-b116-dac502259ad0.pngebecb7b0-5732-11ed-b116-dac502259ad0.pngec06db40-5732-11ed-b116-dac502259ad0.pngec8790dc-5732-11ed-b116-dac502259ad0.png
驅(qū)動文件的編寫以及函數(shù)介紹我此處不過多介紹,可以在原文地址的附件進行下載源文件,也可以在文章末尾復制代碼。重點代碼講解Main.c添加頭文件#include "app.h"eca95c80-5732-11ed-b116-dac502259ad0.png主函數(shù)添加APP_Process();ecf273ac-5732-11ed-b116-dac502259ad0.png根據(jù)自己分區(qū)大小設置區(qū)域,我的是18K,2k,54k,54k
ed1bbce4-5732-11ed-b116-dac502259ad0.png
3.3.3Bootloader編譯設置
按照 Bootloader 流程編寫好代碼,需要我們對 KEIL 工程做相應配置,需要注意的是編譯的 Bootloader 固件大小不超過最大可允許的 18KB。Keil 編譯器需要設置如下:
ed4322f2-5732-11ed-b116-dac502259ad0.pngFlash 燒寫地址設置有效
ed905ad6-5732-11ed-b116-dac502259ad0.png設置ST-LINK按塊擦除 FLASH 區(qū)間和燒寫程序
eda9dcc2-5732-11ed-b116-dac502259ad0.pngede23e1e-5732-11ed-b116-dac502259ad0.pngee7027a6-5732-11ed-b116-dac502259ad0.png編譯燒錄程序,到此BootLoader編寫燒錄完成。eea77f58-5732-11ed-b116-dac502259ad0.png
3.3.4APP程序分區(qū)部分
固件接收流程
做好 BOOTLOADER 工作后,我們開始寫 APP 分區(qū)的代碼。APP 分區(qū)固件的編寫要注意硬件版本號和軟件版本號,軟件版號作為升級迭代很重要的標志。需要注意的是,中斷向量地址偏移的定義,這個地方需要我們尤其注意,我在開發(fā)過程中在這個地方排查了好長時間。STM32 標準庫默認中斷向量地址偏移為0x0,但是我們APP 實際的偏移是0x5000。如果不修改,APP 也可以正常加載運行,但是不會相應中斷。所以,我們需要根據(jù)實際APP 下載的起始地址,對中斷向量地址偏移做定義。ef0153c0-5732-11ed-b116-dac502259ad0.png
3.4 CUBEMX部署
解壓云端生成的代碼,由于生成的代碼是STM32F103c8的,我們需要通過CUBEMX轉(zhuǎn)換成STM32F103VET6的代碼來適應我們的秉火開發(fā)板,創(chuàng)建一個新的cubeMX項目,導入自動代碼的CUBEMX工程.
ef1480d0-5732-11ed-b116-dac502259ad0.png目錄保存在解壓代碼所在的路徑。
ef481080-5732-11ed-b116-dac502259ad0.png修改時鐘樹為72M,注意需要同BootLoader時鐘。
ef8bddba-5732-11ed-b116-dac502259ad0.png根據(jù)項目需求以及我們自己創(chuàng)建的數(shù)據(jù)點,我們需要控制RGB燈,蜂鳴器,DHT11,在此處我們需要對引腳進行初始化。
efbaf8a2-5732-11ed-b116-dac502259ad0.png配置RGB燈,采用定時器輸出PWM控制。
f034e2d4-5732-11ed-b116-dac502259ad0.png有源蜂鳴器,和默認代碼按鍵2沖突,修改按鍵2的GPIO為PB15
f04a7bf8-5732-11ed-b116-dac502259ad0.png
3.5 配置溫濕度傳感器DHT11
為每個單獨的文件生成.C.H文件,方便調(diào)用頭文件
f0bd669a-5732-11ed-b116-dac502259ad0.png生成KEIL的代碼
f0eb4a6a-5732-11ed-b116-dac502259ad0.png到此我們就完成了項目的構(gòu)建。3.6 編譯器設置
因為硬件FLASH 空間限定,我們需要對APP 的固件大小做嚴格的限制。本方案,
針對秉火開發(fā)板 我們可允許的最大固件為54KB。需要升級的新固件同樣最大可支持54KB。
1、設置FLASH 固件下載地址
f108b320-5732-11ed-b116-dac502259ad0.png2、配置中斷向量偏移地址設置
f15e659a-5732-11ed-b116-dac502259ad0.png3.重新構(gòu)建工程,添加相關(guān)頭文件。
f172623e-5732-11ed-b116-dac502259ad0.png4.添加flash.h,flash.h, gagent_md5.c, gagent_md5.h, app.c文件到項目
f1d0ae84-5732-11ed-b116-dac502259ad0.png5. 在mian.c里面添加一下頭文件
f20dc5a8-5732-11ed-b116-dac502259ad0.png在main.c里面添加如下代碼
f22a2d38-5732-11ed-b116-dac502259ad0.png

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

    關(guān)注

    146

    文章

    16676

    瀏覽量

    347868
收藏 人收藏

    評論

    相關(guān)推薦

    2024年上海海思MCU開發(fā)者體驗官招募,手機/MatePad大獎等你拿!

    開發(fā)者體驗官,需自行購買MCU開發(fā)板。 立即報名: MCU開發(fā)者體驗官報名入口 注意:報名后請及時聯(lián)系工作人員(微信:elecfans12
    發(fā)表于 08-02 17:29

    iOS 16.7.8 RC版上線,推薦注冊開發(fā)者計劃升級預覽版

    值得注意的是,自iOS/iPadOS 16.4開發(fā)者預覽版Beta 1起,須先注冊成為蘋果開發(fā)者,然后通過系統(tǒng)【設置】【軟件更新】查看升級選項。
    的頭像 發(fā)表于 05-08 11:30 ?1918次閱讀

    技術(shù)帖 | RK3568開發(fā)板的OTA升級教程

    通過飛凌嵌入式OK3568-C開發(fā)板來為大家介紹OTA升級的流程,本地升級程序recovery執(zhí)行升級的流程及技術(shù)細節(jié)。
    的頭像 發(fā)表于 04-20 08:01 ?1349次閱讀
    技術(shù)帖 | RK3568<b class='flag-5'>開發(fā)</b>板的<b class='flag-5'>OTA</b><b class='flag-5'>升級</b>教程

    機智云開發(fā)者中心:讓移動APP應用開發(fā)更智能化

    在移動應用市場的蓬勃發(fā)展中,開發(fā)者們面臨著不斷提高效率和創(chuàng)新的挑戰(zhàn)。為了幫助開發(fā)者更好地實現(xiàn)移動應用開發(fā)的目標,機智云物聯(lián)網(wǎng)的新版開發(fā)者中心
    的頭像 發(fā)表于 03-26 16:45 ?255次閱讀
    機智云<b class='flag-5'>開發(fā)者</b>中心:讓移動APP應用<b class='flag-5'>開發(fā)</b>更智能化

    谷歌Android 15開發(fā)者預覽版遇問題,OTA更新暫停

    谷歌在Android Developer官網(wǎng)發(fā)表聲明,因發(fā)現(xiàn)“已知問題”,將暫時關(guān)閉Android 15 DP1的OTA更新訂閱服務。谷歌解釋道:“禁用OTA鏡像下載是為了深入調(diào)查問題?!睂τ谙胍獓L鮮Android 15的開發(fā)者
    的頭像 發(fā)表于 02-21 14:08 ?478次閱讀

    華為宣布HarmonyOS NEXT鴻蒙星河版開發(fā)者預覽面向開發(fā)者開放申請

    華為宣布HarmonyOS NEXT鴻蒙星河版開發(fā)者預覽面向開發(fā)者開放申請,這意味著鴻蒙生態(tài)進入第二階段,將加速千行百業(yè)的應用鴻蒙化。
    的頭像 發(fā)表于 01-29 16:42 ?1249次閱讀
    華為宣布HarmonyOS NEXT鴻蒙星河版<b class='flag-5'>開發(fā)者</b>預覽面向<b class='flag-5'>開發(fā)者</b>開放申請

    RT-Thread開發(fā)者大會RISC-V分論壇動手實踐指南

    、產(chǎn)業(yè)技術(shù)趨勢,聚焦控制、連接、行業(yè)應用開發(fā)、邊緣計算等領(lǐng)域。通過主題演講、技術(shù)分享、應用演示、動手實踐,助力開發(fā)者探索萬物互聯(lián)的世界。 其中RISC-V分論壇我們將帶來匠芯創(chuàng)的動手實踐—— D211
    的頭像 發(fā)表于 12-22 18:15 ?731次閱讀
    RT-Thread<b class='flag-5'>開發(fā)者</b>大會RISC-V分論壇動手實踐指南

    大咖云集,2023 開放原子開發(fā)者大會助力開發(fā)者實現(xiàn)夢想

    ? ? 12 月 16 日,以“一切為了開發(fā)者”為主題的開放原子開發(fā)者大會在無錫開幕。大會聚焦大模型、云原生、前端、自動駕駛、物聯(lián)網(wǎng)、開源治理與開發(fā)者運營等多內(nèi)容,匯聚頂尖開源人才,解決行業(yè)發(fā)展
    的頭像 發(fā)表于 12-22 09:57 ?736次閱讀
    大咖云集,2023 開放原子<b class='flag-5'>開發(fā)者</b>大會助力<b class='flag-5'>開發(fā)者</b><b class='flag-5'>實現(xiàn)</b>夢想

    大咖云集,2023開放原子開發(fā)者大會助力開發(fā)者實現(xiàn)夢想

    12月16日,以“一切為了開發(fā)者”為主題的開放原子開發(fā)者大會在無錫開幕。大會聚焦大模型、云原生、前端、自動駕駛、物聯(lián)網(wǎng)、開源治理與開發(fā)者運營等多內(nèi)容,匯聚頂尖開源人才,解決行業(yè)發(fā)展的技術(shù)難點與痛點
    的頭像 發(fā)表于 12-18 16:05 ?445次閱讀

    開發(fā)者說】開發(fā)案例:使用canvas實現(xiàn)圖表系列之折線圖

    # 開發(fā)者說 # 【開發(fā)者說】欄目是為HarmonyOS開發(fā)者提供的展示和分享平臺,在這里,大家可以發(fā)表自己的技術(shù)洞察和見解,也可以展示自己的開發(fā)心得和成果。 歡迎大家積極投稿,后臺回
    的頭像 發(fā)表于 12-13 16:05 ?482次閱讀
    【<b class='flag-5'>開發(fā)者</b>說】<b class='flag-5'>開發(fā)</b>案例:使用canvas<b class='flag-5'>實現(xiàn)</b>圖表系列之折線圖

    歡迎加入飛騰派開發(fā)者社區(qū),感謝每一位開發(fā)者

    ://bbs.elecfans.com/group_1708 飛騰派開發(fā)者社區(qū)部分內(nèi)容截圖 回顧合作歷程,從2023年開始,華秋 · 電子發(fā)燒友就與飛騰建立了密切的合作關(guān)系,雙方團隊共同努力,實現(xiàn)了許多
    發(fā)表于 12-11 16:11

    行業(yè)大咖齊聚TUYA開發(fā)者大會(蘇州),共話IoT產(chǎn)品力升級新機遇

    】今年,涂鴉正式發(fā)布了PaaS2.0,隨著開發(fā)者需求的變化,PaaS2.0幾經(jīng)迭代與升級,不僅能夠打造真正的一站式開發(fā),輔助開發(fā)者完成業(yè)務閉環(huán),也能夠從
    的頭像 發(fā)表于 12-08 15:50 ?586次閱讀
    行業(yè)大咖齊聚TUYA<b class='flag-5'>開發(fā)者</b>大會(蘇州),共話IoT產(chǎn)品力<b class='flag-5'>升級</b>新機遇

    RX系列幫您實現(xiàn)二級MCU OTA升級:FreeRTOS篇

    RX系列幫您實現(xiàn)二級MCU OTA升級:FreeRTOS篇
    的頭像 發(fā)表于 10-26 18:04 ?756次閱讀
    RX系列幫您<b class='flag-5'>實現(xiàn)</b>二級<b class='flag-5'>MCU</b> <b class='flag-5'>OTA</b><b class='flag-5'>升級</b>:FreeRTOS篇

    AT32 MCU如何使用OTA通過USART實現(xiàn)對固件的在線升級更新

    AT32 MCU如何使用OTA通過USART實現(xiàn)對固件的在線升級更新
    的頭像 發(fā)表于 10-26 17:09 ?2041次閱讀
    AT32 <b class='flag-5'>MCU</b>如何使用<b class='flag-5'>OTA</b>通過USART<b class='flag-5'>實現(xiàn)</b>對固件的在線<b class='flag-5'>升級</b>更新

    OpenAI傳規(guī)劃重大升級 下月舉行首次開發(fā)者大會

    更新的內(nèi)容是在開發(fā)者工具上使用ai模型時增加更多的內(nèi)存存儲空間。通過這些升級,應用程序開發(fā)者可以節(jié)省二十分之一的費用,并解決使用強大的openai模型所產(chǎn)生的快速成本上升。
    的頭像 發(fā)表于 10-13 09:57 ?706次閱讀