OTA升級已經(jīng)不是什么新鮮事,現(xiàn)在大多數(shù)物聯(lián)網(wǎng)終端設(shè)備,基本具備這個功能。
今天以 AT32 為例給大家分享一下 OTA 升級的詳細流程。
概述
空中下載技術(shù) OTA(Over-the-Air Technology)是用戶自己的程序在運行過程中對 User Flash 的部分區(qū)域進行燒寫,目的是為了在產(chǎn)品發(fā)布后可以方便地通過預(yù)留的通信口,對產(chǎn)品中的固件程序進行更新升級。
通常實現(xiàn) OTA 功能時,即用戶程序運行中作自身的更新操作,需要在設(shè)計固件程序時編寫兩個項目代碼,第一個項目程序為 Bootloader 區(qū)域,第二個項目程序 App 代碼為真正的功能代碼,執(zhí)行應(yīng)用和升級。這兩部分項目代碼同時燒錄在 User Flash 中。
圖1. OTA代碼執(zhí)行流程
在上圖所示流程中,MCU復(fù)位后,從 0x08000004 地址取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)到復(fù)位中斷服務(wù)程序,在運行完復(fù)位中斷服務(wù)程序之后跳轉(zhuǎn)到 Bootloader 的 main函數(shù),如圖標(biāo)號①所示;
在執(zhí)行完 Bootloader 以后(App 代碼為圖中 FLASH 灰底部分 App 程序的復(fù)位中斷向量起始地址為 0x08000004+N+M),跳轉(zhuǎn)至 App 程序的復(fù)位向量表,取出 App 程序的復(fù)位中斷向量的地址,并跳轉(zhuǎn)執(zhí)行 App 程序的復(fù)位中斷服務(wù)程序,隨后跳轉(zhuǎn)至 App 程序的main函數(shù),如圖標(biāo)號②和③所示,同樣 main 函數(shù)為一個死循環(huán),并且注意到此時 AT32 的 FLASH,在不同位置上,共有兩個中斷向量表。
在 main 函數(shù)執(zhí)行過程中,如果 CPU 得到一個中斷請求,PC 指針仍強制跳轉(zhuǎn)到地址0x08000004 中斷向量表處,而不是 App 程序的中斷向量表,如圖標(biāo)號④所示;
程序再根據(jù)我們設(shè)置的中斷向量表偏移量,跳轉(zhuǎn)到對應(yīng)中斷源的中斷服務(wù)程序中,如圖標(biāo)號⑤所示;
在執(zhí)行完中斷服務(wù)程序后,程序返回 main 函數(shù)繼續(xù)運行,如圖標(biāo)號⑥所示。
通過以上兩個過程的分析,我們知道OTA程序必須滿足兩個要求:
App 程序必須在 Bootloader 程序之后的某個偏移量為 x 的地址開始。
必須將 App 程序的中斷向量表進行相應(yīng)的移動,移動的偏移量為 x。
AT32 USART OTA 快速使用方法
硬件資源
文檔中是用 AT-START-AT32F403A 實驗板的硬件條件為例,OTA demo 源代碼還包括AT32 其他型號,用戶只需編譯對應(yīng)型號工程燒錄于 AT-START 實驗板運行即可。
指示燈 LED2/LED3/LED4
USART1(PA9/PA10)
AT-START 實驗板
軟件資源
tool_release
IAP_Programmer.exe,PC 機 tool,用于演示 OTA 升級流程
source_code
Bootloader,Bootloader 源程序,運行 LED2 閃爍
App_led3_toggle,App1 源程序,運行 LED3 閃爍
App_led4_toggle,App2 源程序,運行 LED4 閃爍
注:工程基于keil v5建立,若用戶需要在其他編譯環(huán)境上使用,請參考對應(yīng) BSP 目錄AT32F403A_407_Firmware_Library_V2.x.xprojectat_start_f403a emplates中各種編譯環(huán)境(例如IAR6/7/8,keil 4/5,eclipse_gcc)進行對應(yīng)修改即可。
OTA Demo 使用
本文檔描述了兩種常用的 OTA 應(yīng)用 demo,template app 和 dual app,后面章節(jié)會分別介紹。
打開 Bootloader 工程源程序,選擇對應(yīng) MCU 型號的 target 編譯后下載到實驗板
打開 IAP_Programmer.exe
選擇正確的串口、APP下載地址和 bin 文檔,點擊 Download 下載,如下圖
觀察 LED2/3/4 閃爍,LED2 閃爍-Bootloader 工作,LED3 閃爍-App1 工作,LED4 閃爍-App2 工作
圖2. IAP demo上位機
Template app OTA 程序設(shè)置
地址分布
圖3. Flash地址分配
注:Bootloader區(qū)域最后一個扇區(qū),用于存放防止升級過程出錯(掉電等異常情況)的flag,用戶編譯修改Bootloader時,要保證不覆蓋flag的地址。
執(zhí)行流程
OTA 分為 Bootloader、App 和 Template 三部分,應(yīng)用在 App 中執(zhí)行,Template 僅作為新 App 固件數(shù)據(jù)的臨時存放空間。程序執(zhí)行整體流程框圖如下:
圖4. 程序執(zhí)行流程
Bootloader project 設(shè)置
1)Keil 設(shè)置
圖5. Bootloader project中address 1在Keil設(shè)置
2) Bootloader 源程序修改 ota.h 文件中
圖6. Bootloader project中address 2在程序中設(shè)置
App project 設(shè)置
OTA demo 提供了 2 個 App 程序供測試用,皆以 address 2(0x800 4000)為起始地址。App1 LED3 閃爍,App2 LED4 閃爍。以 App1 為例,設(shè)計步驟如下:
1) Keil工程設(shè)置
圖7. App project中address 2在Keil設(shè)置
2) App1 源程序設(shè)置
圖8. App project向量表偏移在程序中設(shè)置
3) 編譯生成bin文件
通過 User 選項卡,設(shè)置編譯后調(diào)用 fromelf.exe,根據(jù) .axf 文件生成 .bin 文件,用于 OTA 更新。通過以上3個步驟,我們就可以得到一個 .bin 的 APP 程序,通過 Bootloader 程序即可實現(xiàn)更新。
4) 開啟debug app code功能
如果在設(shè)計 App code 過程中需要對 App project 進行單獨調(diào)試,請按照以下操作。
先下載 Bootloader 工程
再調(diào)試 App 工程
Dual app OTA 與程序設(shè)置
地址分布
圖9. Flash地址分配
注:Bootloader 區(qū)域最后2個扇區(qū),用于存放 App 是否正常的 flag,用戶編譯修改Bootloader 時,要保證不覆蓋 flag 的地址。
執(zhí)行流程
OTA 分為 Bootloader、App1 和 App2 三部分,應(yīng)用在 App1 或 App2 中執(zhí)行。程序執(zhí)行整體流程框圖如下:
圖10. 程序執(zhí)行流程
Bootloader project 設(shè)置
1)Keil 設(shè)置
圖11. Bootloader project中address 1在Keil設(shè)置
2)Bootloader 源程序修改 ota.h 文件中
圖12. Bootloader project中address 2在程序中設(shè)置
App project 設(shè)置
OTA demo 提供了 2 個 App 程序供測試用,app_led3_toggle 以 0x800 4000 為起始地址,app_led4_toggle 以 0x8080000 為起始地址。App1 LED3 閃爍,App2 LED4閃爍。以 App1 為例,設(shè)計步驟如下:
1) Keil工程設(shè)置
圖13. App project中address 2在Keil設(shè)置
2) App1源程序設(shè)置
圖14. App project向量表偏移在程序中設(shè)置
3) 編譯生成bin文件
通過User選項卡,設(shè)置編譯后調(diào)用fromelf.exe,根據(jù).axf文件生成.bin文件,用于OTA更新。通過以上3個步驟,我們就可以得到一個.bin的APP程序,通過Bootloader程序即可實現(xiàn)更新。
4) 開啟debug App code功能
如果在設(shè)計App code過程中需要對App project進行單獨調(diào)試,請按照以下操作。
先下載Bootloader工程
再調(diào)試App工程
Bootloader/App與上位機串口通信協(xié)議
程序與上位機通信,接收固件升級數(shù)據(jù),上位機端和嵌入式端通信協(xié)議如下:
1) 上位機通信協(xié)議
圖15. 上位機通信協(xié)議
2) 嵌入式端下位機通信協(xié)議
圖16. 下位機通信協(xié)議
注:
ACK:0xCCDD
NACK:0xEEFF
Data:0x31+Addr+數(shù)據(jù)+chenksum(1byte)
Addr:4bytes,高位在前
2Kbytes,下載數(shù)據(jù),不足2K內(nèi)容填充0xFF
Checksum:1byte,4bytes的Addr+2KBytes數(shù)據(jù)的校驗和的低八位
審核編輯:湯梓紅
-
程序
+關(guān)注
關(guān)注
117文章
3806瀏覽量
81710 -
uart
+關(guān)注
關(guān)注
22文章
1245瀏覽量
102149 -
OTA
+關(guān)注
關(guān)注
7文章
593瀏覽量
35577 -
bootloader
+關(guān)注
關(guān)注
2文章
237瀏覽量
46011 -
AT32
+關(guān)注
關(guān)注
1文章
118瀏覽量
2275
原文標(biāo)題:單片機通過 UART 實現(xiàn) OTA 升級的詳細流程
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
AN0005—AT32 OTA 空中下載升級
在AT32系列MCU上Flash模擬EEPRO的應(yīng)用原理和使用方法
Micropython Based On AT32 RTT
在AT32微控制器上創(chuàng)建OTA應(yīng)用程序的一般準(zhǔn)則
AT32 MCU USB主機庫應(yīng)用說明
AT32 MCU USB設(shè)備庫應(yīng)用說明
AT32 MCU USART應(yīng)用說明
AT32F系列PWC USART接收喚醒SLEEP的使用方法
AN0001 AT32 IAP 使用 USART

如何使用AT32 MCU主機庫快速開發(fā)USB相關(guān)應(yīng)用

評論