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

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

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

如何實現(xiàn)MCU開發(fā)和OTA升級

9GxC_IoTMaker ? 來源:機(jī)智云開發(fā)者 ? 作者:機(jī)智云開發(fā)者 ? 2022-10-28 09:31 ? 次閱讀

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

02 云端開發(fā)

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

添加如下數(shù)據(jù)點,可根據(jù)自己需求
313fd1c2-5656-11ed-a3b6-dac502259ad0.png
生成STM32F103代碼下載備用 315fa006-5656-11ed-a3b6-dac502259ad0.png03 硬件部分說明 3.1 關(guān)于STM32啟動 ARM7/ARM9 內(nèi)核的控制器在復(fù)位后,CPU 會從存儲空間的絕對地址0x000000 取出第一條指令執(zhí)行復(fù)位中斷服務(wù)程序的方式啟動,即固定了復(fù)位后的起始地址為0x000000(PC =0x000000)同時中斷向量表的位置并不是固定的。 然而,Cortex-M3 內(nèi)核啟動有3 種情況: 1、通過boot 引腳設(shè)置可以將中斷向量表定位于SRAM 區(qū),即起始地址為0x2000000,同時復(fù)位后PC 指針位于0x2000000 處; 2、通過boot 引腳設(shè)置可以將中斷向量表定位于FLASH 區(qū),即起始地址為0x8000000,同時復(fù)位后PC 指針位于0x8000000 處; 3、通過boot 引腳設(shè)置可以將中斷向量表定位于內(nèi)置Bootloader 區(qū); Cortex-M3 內(nèi)核規(guī)定,起始地址必須存放堆頂指針,而第二個地址則必須存放復(fù)位中斷入口向量地址,這樣在Cortex-M3 內(nèi)核復(fù)位后,會自動從起始地址的下一個32 位空間取出復(fù)位中斷入口向量,跳轉(zhuǎn)執(zhí)行復(fù)位中斷服務(wù)程序。對比ARM7/ARM9 內(nèi)核,Cortex-M3 內(nèi)核則是固定了中斷向量表的位置而起始地址是可變化的。 總結(jié)一下STM32 的啟動文件和啟動過程。 首先對棧和堆的大小進(jìn)行定義,并在代碼區(qū)的起始處建立中斷向量表,其第一個表項是棧頂?shù)刂?,第二個表項是復(fù)位中斷服務(wù)入口地址。 然后在復(fù)位中斷服務(wù)程序中跳轉(zhuǎn)C/C++標(biāo)準(zhǔn)實時庫的main 函數(shù),完成用戶堆棧等的初始化后,跳轉(zhuǎn).c 文件中的main 函數(shù)開始執(zhí)行C 程序。 假設(shè)STM32被設(shè)置為從內(nèi)部FLASH 啟動(這也是最常見的一種情況),中斷向量表起始地位為0x8000000,則棧頂?shù)刂反娣庞?x8000000處,而復(fù)位中斷服務(wù)入口地址存放于0x8000004 處。 當(dāng)STM32 遇到復(fù)位信號后,則從0x80000004 處取出復(fù)位中斷服務(wù)入口地址,繼而執(zhí)行復(fù)位中斷服務(wù)程序,然后跳轉(zhuǎn)main函數(shù),最后進(jìn)入mian 函數(shù)。 3.2OTA 需求分析 我們將建立兩個工程,分別是Bootloader 還有APP,我們將Bootloader下載到FLASH 空間0x8000000 地址處,那么STM32 啟動后會首先執(zhí)行我們的Bootloader 程序,然后就可以按照我們意愿實現(xiàn)OTA 了。 ?FLASH區(qū)間劃分 根據(jù)需求,我們將STM32F103VET6 這個芯片F(xiàn)lash 空間劃分出4 個區(qū)域:Bootloader、FLAG、APP、APP_BAK。 四個區(qū)間作用描述如下: ? Bootloader: 存儲Bootloader 固件,MCU 上電后首先運行該固件。
? FLAG: 存儲有關(guān)升級的相關(guān)標(biāo)志位,Bootloader 和APP 都需要操作該區(qū)域。
升級標(biāo)志位(2B)
固件大?。?B)
MD5加密數(shù)據(jù)(16B)
? APP:存儲用戶程序固件。
? APPBAK: 臨時存儲云端下發(fā)的新固件,升級固件的一個過渡存儲區(qū)。 STM32F103VET6分區(qū)方案如下圖所示: 317e8b92-5656-11ed-a3b6-dac502259ad0.png
3.3 BOOTLOADER分區(qū)部分
3.3.1 Bootloader程序流程

Bootloader 的主要職能是在有升級任務(wù)的時候?qū)?APPBAK 分區(qū)里面的固件拷貝到 APP 區(qū)域。當(dāng)然,這期間需要做很多的工作,比如升級失敗的容錯等等。具體的流程可以參考圖示。需要注意的是,在校驗 MD5 正確后開始搬運固件數(shù)據(jù)期間,MCU 出現(xiàn)故障(包括突然斷電),MCU 應(yīng)發(fā)生復(fù)位操作(FLAG 區(qū)域數(shù)據(jù)未破壞),復(fù)位后重新開始執(zhí)行 Bootloader,從而避免 MCU 刷成板磚。 31982cdc-5656-11ed-a3b6-dac502259ad0.png
3.3.2Bootloader程序配置
為了方便構(gòu)架,此處我采用cubemx構(gòu)建項目,生成keil工程。
創(chuàng)建STM32F103VE項目 321376b2-5656-11ed-a3b6-dac502259ad0.png 配置外部時鐘 3233d024-5656-11ed-a3b6-dac502259ad0.png 配置時鐘72M 32716e7a-5656-11ed-a3b6-dac502259ad0.png
配置debug為serisl wire 329537ce-5656-11ed-a3b6-dac502259ad0.png 配置串口4為BootLoader的日志打印口。 32c42d2c-5656-11ed-a3b6-dac502259ad0.png 生成keil代碼添加驅(qū)動flash.c,gagent_md5.c和app.c以及對應(yīng)的組,如何添加此處不過多介紹(基礎(chǔ)的軟件操作),只提供文件路徑。 32e60884-5656-11ed-a3b6-dac502259ad0.png ? 32fc8ba4-5656-11ed-a3b6-dac502259ad0.png ? 3319e5e6-5656-11ed-a3b6-dac502259ad0.png ? 33546bc6-5656-11ed-a3b6-dac502259ad0.png ? 33609540-5656-11ed-a3b6-dac502259ad0.png
驅(qū)動文件的編寫以及函數(shù)介紹我此處不過多介紹,可以在原文地址的附件進(jìn)行下載源文件,也可以在文章末尾復(fù)制代碼。 重點代碼講解 Main.c添加頭文件#include "app.h" 33846c7c-5656-11ed-a3b6-dac502259ad0.png 主函數(shù)添加APP_Process(); 33a3f66e-5656-11ed-a3b6-dac502259ad0.png 根據(jù)自己分區(qū)大小設(shè)置區(qū)域,我的是18K,2k,54k,54k 33d2de2a-5656-11ed-a3b6-dac502259ad0.png
3.3.3Bootloader編譯設(shè)置
按照 Bootloader 流程編寫好代碼,需要我們對 KEIL 工程做相應(yīng)配置,需要注意的是編譯的 Bootloader 固件大小不超過最大可允許的 18KB。Keil 編譯器需要設(shè)置如下: 3411a074-5656-11ed-a3b6-dac502259ad0.png Flash 燒寫地址設(shè)置有效 3439d724-5656-11ed-a3b6-dac502259ad0.png 設(shè)置ST-LINK按塊擦除 FLASH 區(qū)間和燒寫程序 3458fe1a-5656-11ed-a3b6-dac502259ad0.png347bf2bc-5656-11ed-a3b6-dac502259ad0.png34a932a4-5656-11ed-a3b6-dac502259ad0.png 編譯燒錄程序,到此BootLoader編寫燒錄完成。 34da8da4-5656-11ed-a3b6-dac502259ad0.png
3.3.4APP程序分區(qū)部分
固件接收流程
做好 BOOTLOADER 工作后,我們開始寫 APP 分區(qū)的代碼。APP 分區(qū)固件的編寫要注意硬件版本號和軟件版本號,軟件版號作為升級迭代很重要的標(biāo)志。 需要注意的是,中斷向量地址偏移的定義,這個地方需要我們尤其注意,我在開發(fā)過程中在這個地方排查了好長時間。STM32 標(biāo)準(zhǔn)庫默認(rèn)中斷向量地址偏移為0x0,但是我們APP 實際的偏移是0x5000。如果不修改,APP 也可以正常加載運行,但是不會相應(yīng)中斷。所以,我們需要根據(jù)實際APP 下載的起始地址,對中斷向量地址偏移做定義。 34fabf8e-5656-11ed-a3b6-dac502259ad0.png
3.4 CUBEMX部署
解壓云端生成的代碼,由于生成的代碼是STM32F103c8的,我們需要通過CUBEMX轉(zhuǎn)換成STM32F103VET6的代碼來適應(yīng)我們的秉火開發(fā)板,創(chuàng)建一個新的cubeMX項目,導(dǎo)入自動代碼的CUBEMX工程. 35265554-5656-11ed-a3b6-dac502259ad0.png 目錄保存在解壓代碼所在的路徑。 35416100-5656-11ed-a3b6-dac502259ad0.png 修改時鐘樹為72M,注意需要同BootLoader時鐘。 357f20ee-5656-11ed-a3b6-dac502259ad0.png 根據(jù)項目需求以及我們自己創(chuàng)建的數(shù)據(jù)點,我們需要控制RGB燈,蜂鳴器,DHT11,在此處我們需要對引腳進(jìn)行初始化。 359be4ae-5656-11ed-a3b6-dac502259ad0.png 配置RGB燈,采用定時器輸出PWM控制。 35b9d338-5656-11ed-a3b6-dac502259ad0.png 有源蜂鳴器,和默認(rèn)代碼按鍵2沖突,修改按鍵2的GPIO為PB15 35dc5156-5656-11ed-a3b6-dac502259ad0.png
3.5 配置溫濕度傳感器DHT11
為每個單獨的文件生成.C.H文件,方便調(diào)用頭文件 36116cec-5656-11ed-a3b6-dac502259ad0.png 生成KEIL的代碼 362e9e5c-5656-11ed-a3b6-dac502259ad0.png 到此我們就完成了項目的構(gòu)建。 3.6 編譯器設(shè)置 因為硬件FLASH 空間限定,我們需要對APP 的固件大小做嚴(yán)格的限制。本方案,
針對秉火開發(fā)板 我們可允許的最大固件為54KB。需要升級的新固件同樣最大可支持54KB。
1、設(shè)置FLASH 固件下載地址 364f8b1c-5656-11ed-a3b6-dac502259ad0.png 2、配置中斷向量偏移地址設(shè)置 36793926-5656-11ed-a3b6-dac502259ad0.png 3.重新構(gòu)建工程,添加相關(guān)頭文件。 36a245be-5656-11ed-a3b6-dac502259ad0.png 4.添加flash.h,flash.h, gagent_md5.c, gagent_md5.h, app.c文件到項目 36c3e05c-5656-11ed-a3b6-dac502259ad0.png 5. 在mian.c里面添加一下頭文件 36d9d812-5656-11ed-a3b6-dac502259ad0.png 在main.c里面添加如下代碼 371b4068-5656-11ed-a3b6-dac502259ad0.png 后續(xù)涉及部分代碼修改和相關(guān)源碼,字?jǐn)?shù)比較多,所以建議參考原帖: https://club.gizwits.com/thread-166001-1-1.html?

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

    關(guān)注

    146

    文章

    17475

    瀏覽量

    354612
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3807

    瀏覽量

    81727
  • OTA
    OTA
    +關(guān)注

    關(guān)注

    7

    文章

    593

    瀏覽量

    35605
  • 機(jī)智云
    +關(guān)注

    關(guān)注

    2

    文章

    598

    瀏覽量

    26546

原文標(biāo)題:開發(fā)者案例|GC211實現(xiàn)MCU開發(fā)和OTA升級

文章出處:【微信號:IoTMaker,微信公眾號:機(jī)智云開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    淺談車規(guī)MCU (MGEQ1C064) OTA升級

    OTA升級。 OTA升級方式 為了實現(xiàn)OTA升級
    發(fā)表于 03-04 12:52

    OTA固件升級教程

    設(shè)備端。支持一個產(chǎn)品同時有多個推送支持wifi/mcu升級支持定向升級??芍付ㄔO(shè)備mac地址、區(qū)域、舊固件版本進(jìn)行推送。支持定時推送??勺远x推送周期及推送時段。OTA進(jìn)度統(tǒng)計分析
    發(fā)表于 03-01 18:31

    淺析單片機(jī)MCU OTA升級技術(shù)

    云端OTA通知推送云端只會給當(dāng)時在線設(shè)備推送;對于當(dāng)時不在線,或者沒升級成功的設(shè)備,云端會每天推送一次。MCU OTA:包括下載、存儲、校驗、傳輸4個過程。下載、存儲、校驗同GAgen
    發(fā)表于 07-15 08:37

    STM32 OTA升級如何實現(xiàn)

    上次談到OTA,有小伙伴私信我表示對升級的原理感興趣?;叵氘?dāng)初入職看到MCU在線升級的代碼流程時,同樣感到很神奇,畢竟學(xué)生時代我們在MCU
    發(fā)表于 11-10 07:30

    嵌入式OTA升級實現(xiàn)原理是什么

    目錄一、簡介1.1 概念1.2 優(yōu)點1.3 實現(xiàn)原理二、MCU OTA升級2.1 制作升級包2.2 下載
    發(fā)表于 12-14 07:24

    如何實現(xiàn)OpenHarmony的OTA升級

    的能力。升級子系統(tǒng)對用戶屏蔽了底層芯片的差異,對外提供了統(tǒng)一的升級接口?;诮涌谶M(jìn)行二次開發(fā)后,可以讓廠商的設(shè)備(如IP攝像頭等)輕松支持遠(yuǎn)程升級能力。
    發(fā)表于 02-07 10:29

    手把手教你OTA升級開發(fā)

    。具體升級的動作由升級腳本控制。本文將介紹如何針對OpenHarmony L2場景適配updater模式。主要內(nèi)容包括: *1.OTA升級實現(xiàn)
    發(fā)表于 08-22 09:13

    基于MCU,如何零代碼無開發(fā)實現(xiàn)OTA差分升級?

    / 模塊開發(fā)的方案,用戶升級的主要目標(biāo)是通訊芯片 / 模塊。艾拉比在設(shè)備端有基于 UA+UC 的方式提供端云一體化的 OTA 解決方案。 2. 通過 MCU/DSP/MPU
    的頭像 發(fā)表于 10-14 17:23 ?5016次閱讀
    基于<b class='flag-5'>MCU</b>,如何零代碼無<b class='flag-5'>開發(fā)</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>OTA</b>差分<b class='flag-5'>升級</b>?

    基于MCU,如何零代碼無開發(fā)實現(xiàn)OTA差分升級

    隨著物聯(lián)網(wǎng)設(shè)備智能化的發(fā)展,OTA 升級已經(jīng)成為了業(yè)界公認(rèn)的基礎(chǔ)能力,而 OTA 在設(shè)計和實現(xiàn)過程中需要依賴于物聯(lián)網(wǎng)設(shè)備的硬件方案。物聯(lián)網(wǎng)設(shè)備主流的硬件方案為: 1. 直接基于通訊芯片
    的頭像 發(fā)表于 10-30 10:03 ?655次閱讀

    單片機(jī)MCU OTA升級技術(shù)

    云端OTA通知推送云端只會給當(dāng)時在線設(shè)備推送;對于當(dāng)時不在線,或者沒升級成功的設(shè)備,云端會每天推送一次。MCU OTA:包括下載、存儲、校驗、傳輸4個過程。下載、存儲、校驗同GAgen
    發(fā)表于 10-23 13:06 ?16次下載
    單片機(jī)<b class='flag-5'>MCU</b> <b class='flag-5'>OTA</b><b class='flag-5'>升級</b>技術(shù)

    【筆記】MCU OTA升級流程

    OTA升級流程本文檔以 STM32F103C8 為例。此 MCU 的 flash 共 64k,分為 64 頁,每頁 1k ,flash 的擦除需要以頁為單位進(jìn)行。OTA
    發(fā)表于 11-29 18:21 ?33次下載
    【筆記】<b class='flag-5'>MCU</b> <b class='flag-5'>OTA</b><b class='flag-5'>升級</b>流程

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

    本文以依托GC211和秉火開發(fā)板,講述如何實現(xiàn)MCU開發(fā)OTA升級。用戶如果將
    的頭像 發(fā)表于 10-31 16:18 ?1370次閱讀
    <b class='flag-5'>開發(fā)</b>者案例|GC211<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>MCU</b><b class='flag-5'>開發(fā)</b>和<b class='flag-5'>OTA</b><b class='flag-5'>升級</b>

    在線升級 | 物聯(lián)網(wǎng)中的OTA升級原理

    從最新的固件方式來看,可以分成以下幾類01OTA升級1.1概念OTA:Over-the-AirTechnology,即空中下載技術(shù)。OTA升級
    的頭像 發(fā)表于 02-02 09:59 ?1667次閱讀
    在線<b class='flag-5'>升級</b> | 物聯(lián)網(wǎng)中的<b class='flag-5'>OTA</b><b class='flag-5'>升級</b>原理

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

    RX系列幫您實現(xiàn)二級MCU OTA升級:FreeRTOS篇
    的頭像 發(fā)表于 10-26 18:04 ?1071次閱讀
    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 ?2843次閱讀
    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>更新