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

如何使用AT32 MCU主機庫快速開發USB相關應用

評論