RM新时代网站-首页

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

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

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

AT32 USART OTA快速使用方法

硬件攻城獅 ? 來(lái)源:硬件攻城獅 ? 2023-09-09 14:22 ? 次閱讀

OTA升級(jí)已經(jīng)不是什么新鮮事,現(xiàn)在大多數(shù)物聯(lián)網(wǎng)終端設(shè)備,基本具備這個(gè)功能。

今天以 AT32 為例給大家分享一下 OTA 升級(jí)的詳細(xì)流程。

概述

空中下載技術(shù) OTA(Over-the-Air Technology)是用戶自己的程序在運(yùn)行過(guò)程中對(duì) User Flash 的部分區(qū)域進(jìn)行燒寫(xiě),目的是為了在產(chǎn)品發(fā)布后可以方便地通過(guò)預(yù)留的通信口,對(duì)產(chǎn)品中的固件程序進(jìn)行更新升級(jí)。

通常實(shí)現(xiàn) OTA 功能時(shí),即用戶程序運(yùn)行中作自身的更新操作,需要在設(shè)計(jì)固件程序時(shí)編寫(xiě)兩個(gè)項(xiàng)目代碼,第一個(gè)項(xiàng)目程序?yàn)?Bootloader 區(qū)域,第二個(gè)項(xiàng)目程序 App 代碼為真正的功能代碼,執(zhí)行應(yīng)用和升級(jí)。這兩部分項(xiàng)目代碼同時(shí)燒錄在 User Flash 中。

wKgZomT8D1CAGOo9AAFE8h3N23A535.jpg

圖1. OTA代碼執(zhí)行流程

在上圖所示流程中,MCU復(fù)位后,從 0x08000004 地址取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)到復(fù)位中斷服務(wù)程序,在運(yùn)行完復(fù)位中斷服務(wù)程序之后跳轉(zhuǎn)到 Bootloader 的 main函數(shù),如圖標(biāo)號(hà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)號(hào)②和③所示,同樣 main 函數(shù)為一個(gè)死循環(huán),并且注意到此時(shí) AT32 的 FLASH,在不同位置上,共有兩個(gè)中斷向量表。

在 main 函數(shù)執(zhí)行過(guò)程中,如果 CPU 得到一個(gè)中斷請(qǐng)求,PC 指針仍強(qiáng)制跳轉(zhuǎn)到地址0x08000004 中斷向量表處,而不是 App 程序的中斷向量表,如圖標(biāo)號(hào)④所示;

程序再根據(jù)我們?cè)O(shè)置的中斷向量表偏移量,跳轉(zhuǎn)到對(duì)應(yīng)中斷源的中斷服務(wù)程序中,如圖標(biāo)號(hào)⑤所示;

在執(zhí)行完中斷服務(wù)程序后,程序返回 main 函數(shù)繼續(xù)運(yùn)行,如圖標(biāo)號(hào)⑥所示。

通過(guò)以上兩個(gè)過(guò)程的分析,我們知道OTA程序必須滿足兩個(gè)要求:

App 程序必須在 Bootloader 程序之后的某個(gè)偏移量為 x 的地址開(kāi)始。

必須將 App 程序的中斷向量表進(jìn)行相應(yīng)的移動(dòng),移動(dòng)的偏移量為 x。

AT32 USART OTA 快速使用方法

硬件資源

文檔中是用 AT-START-AT32F403A 實(shí)驗(yàn)板的硬件條件為例,OTA demo 源代碼還包括AT32 其他型號(hào),用戶只需編譯對(duì)應(yīng)型號(hào)工程燒錄于 AT-START 實(shí)驗(yàn)板運(yùn)行即可。

指示燈 LED2/LED3/LED4

USART1(PA9/PA10)

AT-START 實(shí)驗(yàn)板

軟件資源

tool_release

IAP_Programmer.exe,PC 機(jī) tool,用于演示 OTA 升級(jí)流程

source_code

Bootloader,Bootloader 源程序,運(yùn)行 LED2 閃爍

App_led3_toggle,App1 源程序,運(yùn)行 LED3 閃爍

App_led4_toggle,App2 源程序,運(yùn)行 LED4 閃爍

注:工程基于keil v5建立,若用戶需要在其他編譯環(huán)境上使用,請(qǐng)參考對(duì)應(yīng) BSP 目錄AT32F403A_407_Firmware_Library_V2.x.xprojectat_start_f403a emplates中各種編譯環(huán)境(例如IAR6/7/8,keil 4/5,eclipse_gcc)進(jìn)行對(duì)應(yīng)修改即可。

OTA Demo 使用

本文檔描述了兩種常用的 OTA 應(yīng)用 demo,template app 和 dual app,后面章節(jié)會(huì)分別介紹。

打開(kāi) Bootloader 工程源程序,選擇對(duì)應(yīng) MCU 型號(hào)的 target 編譯后下載到實(shí)驗(yàn)板

打開(kāi) IAP_Programmer.exe

選擇正確的串口、APP下載地址和 bin 文檔,點(diǎn)擊 Download 下載,如下圖

觀察 LED2/3/4 閃爍,LED2 閃爍-Bootloader 工作,LED3 閃爍-App1 工作,LED4 閃爍-App2 工作

wKgaomT8D1CAaNcxAAB0RG5uc4c205.jpg

圖2. IAP demo上位機(jī)

Template app OTA 程序設(shè)置

地址分布

wKgaomT8D1CATbH5AABh04G_QCQ819.jpg

圖3. Flash地址分配

注:Bootloader區(qū)域最后一個(gè)扇區(qū),用于存放防止升級(jí)過(guò)程出錯(cuò)(掉電等異常情況)的flag,用戶編譯修改Bootloader時(shí),要保證不覆蓋flag的地址。

執(zhí)行流程

OTA 分為 Bootloader、App 和 Template 三部分,應(yīng)用在 App 中執(zhí)行,Template 僅作為新 App 固件數(shù)據(jù)的臨時(shí)存放空間。程序執(zhí)行整體流程框圖如下:

wKgZomT8D1CAJ8GEAACuhjEphew530.jpg

圖4. 程序執(zhí)行流程

Bootloader project 設(shè)置

1)Keil 設(shè)置

wKgZomT8D1CAaKqdAACZsB9j4Wg236.jpg

圖5. Bootloader project中address 1在Keil設(shè)置

2) Bootloader 源程序修改 ota.h 文件中

wKgaomT8D1CARVrAAABa7MSssD8188.jpg

圖6. Bootloader project中address 2在程序中設(shè)置

App project 設(shè)置

OTA demo 提供了 2 個(gè) App 程序供測(cè)試用,皆以 address 2(0x800 4000)為起始地址。App1 LED3 閃爍,App2 LED4 閃爍。以 App1 為例,設(shè)計(jì)步驟如下:

1) Keil工程設(shè)置

wKgaomT8D1CAWrvyAACWz6bnNZs231.jpg

圖7. App project中address 2在Keil設(shè)置

2) App1 源程序設(shè)置

wKgaomT8D1CAZvW1AABEaz9IiEE408.jpg

圖8. App project向量表偏移在程序中設(shè)置

3) 編譯生成bin文件

通過(guò) User 選項(xiàng)卡,設(shè)置編譯后調(diào)用 fromelf.exe,根據(jù) .axf 文件生成 .bin 文件,用于 OTA 更新。通過(guò)以上3個(gè)步驟,我們就可以得到一個(gè) .bin 的 APP 程序,通過(guò) Bootloader 程序即可實(shí)現(xiàn)更新。

4) 開(kāi)啟debug app code功能

如果在設(shè)計(jì) App code 過(guò)程中需要對(duì) App project 進(jìn)行單獨(dú)調(diào)試,請(qǐng)按照以下操作。

先下載 Bootloader 工程

再調(diào)試 App 工程

Dual app OTA 與程序設(shè)置

地址分布

wKgaomT8D1GAJE0PAABlGjwuyUw648.jpg

圖9. Flash地址分配

注:Bootloader 區(qū)域最后2個(gè)扇區(qū),用于存放 App 是否正常的 flag,用戶編譯修改Bootloader 時(shí),要保證不覆蓋 flag 的地址。

執(zhí)行流程

OTA 分為 Bootloader、App1 和 App2 三部分,應(yīng)用在 App1 或 App2 中執(zhí)行。程序執(zhí)行整體流程框圖如下:

wKgZomT8D1GAS_jvAADdCa-imgg440.jpg

圖10. 程序執(zhí)行流程

Bootloader project 設(shè)置

1)Keil 設(shè)置

wKgZomT8D1GAV8ZxAACX4J24wwY014.jpg

圖11. Bootloader project中address 1在Keil設(shè)置

2)Bootloader 源程序修改 ota.h 文件中

wKgZomT8D1GAGbNdAACBuDwvJn8474.jpg

圖12. Bootloader project中address 2在程序中設(shè)置

App project 設(shè)置

OTA demo 提供了 2 個(gè) App 程序供測(cè)試用,app_led3_toggle 以 0x800 4000 為起始地址,app_led4_toggle 以 0x8080000 為起始地址。App1 LED3 閃爍,App2 LED4閃爍。以 App1 為例,設(shè)計(jì)步驟如下:

1) Keil工程設(shè)置

wKgaomT8D1GAHhI3AACWsFTBqQc571.jpg

圖13. App project中address 2在Keil設(shè)置

2) App1源程序設(shè)置

wKgaomT8D1GAReahAABEwtvFCOg360.jpg

圖14. App project向量表偏移在程序中設(shè)置

3) 編譯生成bin文件

通過(guò)User選項(xiàng)卡,設(shè)置編譯后調(diào)用fromelf.exe,根據(jù).axf文件生成.bin文件,用于OTA更新。通過(guò)以上3個(gè)步驟,我們就可以得到一個(gè).bin的APP程序,通過(guò)Bootloader程序即可實(shí)現(xiàn)更新。

4) 開(kāi)啟debug App code功能

如果在設(shè)計(jì)App code過(guò)程中需要對(duì)App project進(jìn)行單獨(dú)調(diào)試,請(qǐng)按照以下操作。

先下載Bootloader工程

再調(diào)試App工程

Bootloader/App與上位機(jī)串口通信協(xié)議

程序與上位機(jī)通信,接收固件升級(jí)數(shù)據(jù),上位機(jī)端和嵌入式端通信協(xié)議如下:

1) 上位機(jī)通信協(xié)議

wKgZomT8D1GABDsIAACLUB4y5S4311.png

圖15. 上位機(jī)通信協(xié)議

2) 嵌入式端下位機(jī)通信協(xié)議

wKgZomT8D1GALbdlAACpnf1MNjs985.png

圖16. 下位機(jī)通信協(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ù)的校驗(yàn)和的低八位

審核編輯:湯梓紅

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

    關(guān)注

    117

    文章

    3785

    瀏覽量

    81001
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1235

    瀏覽量

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

    關(guān)注

    7

    文章

    578

    瀏覽量

    35193
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    235

    瀏覽量

    45611
  • AT32
    +關(guān)注

    關(guān)注

    1

    文章

    113

    瀏覽量

    2090

原文標(biāo)題:?jiǎn)纹瑱C(jī)通過(guò) UART 實(shí)現(xiàn) OTA 升級(jí)的詳細(xì)流程

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AN0005—AT32 OTA 空中下載升級(jí)

    空中下載升級(jí)原理 .....................................5AT32 串口OTA 快速使用方法 .............................6硬件資源
    發(fā)表于 08-22 17:38

    AT32系列MCU上Flash模擬EEPRO的應(yīng)用原理和使用方法

    型號(hào)的 MCU 并未搭載片上 EEPROM,但是在此我們將介紹一種使用片上 Flash來(lái)模擬 EEPROM 使用的方法,以作為對(duì)此應(yīng)用需求的補(bǔ)充。本文檔將詳細(xì)闡述在 AT32 系列 MCU 上使用片上
    發(fā)表于 11-26 07:15

    Micropython Based On AT32 RTT

    AT32 RTThread Micropython 快速使用 快速使用方法硬件資源指示燈 LED2/LED3/LED4USART1(PA9
    發(fā)表于 12-10 09:46

    AT32微控制器上創(chuàng)建OTA應(yīng)用程序的一般準(zhǔn)則

    AT32 OTA using the USART提供在AT32微控制器上創(chuàng)建OTA應(yīng)用程序的一般準(zhǔn)則。
    發(fā)表于 10-19 07:43

    AT32 MCU USB主機(jī)庫(kù)應(yīng)用說(shuō)明

    AT32 MCU USB Host Library Application Note主要描述AT32F4xx 系列USB 主機(jī)庫(kù)的架構(gòu)和使用方法,方便開(kāi)發(fā)者使用庫(kù)快速開(kāi)發(fā)USB相關(guān)的應(yīng)用,同時(shí)也會(huì)介紹
    發(fā)表于 10-25 07:02

    AT32 MCU USB設(shè)備庫(kù)應(yīng)用說(shuō)明

    AT32 MCU USB Device Library Application Note主要描述AT32F4xx 系列USB 設(shè)備庫(kù)的架構(gòu)和使用方法,方便開(kāi)發(fā)者使用庫(kù)快速開(kāi)發(fā)USB相關(guān)的應(yīng)用,同時(shí)也會(huì)介紹
    發(fā)表于 10-25 07:07

    AT32 MCU USART應(yīng)用說(shuō)明

    AT32 MCU USART Application Note介紹了AT32USART 功能,并對(duì)BSP 例程的軟件設(shè)計(jì)加以說(shuō)明,同時(shí)演示使用方
    發(fā)表于 10-25 08:11

    AT32 IDE快速入門(mén)指南

    AT32 IDE 快速入門(mén)指南幫助用戶快速熟悉Artery AT32 IDE的簡(jiǎn)明指南。
    發(fā)表于 10-26 06:13

    AT32F系列PWC USART接收喚醒SLEEP的使用方法

    演示AT32F系列 PWC USART接收喚醒SLEEP的使用方法。通常任意一個(gè)被嵌套向量中斷控制器響應(yīng)的外設(shè)中斷都能將系統(tǒng)從SLEEP模式喚醒。
    發(fā)表于 10-27 06:13

    AN0001 AT32 IAP 使用 USART

    前言對(duì)于AT32 MCU,除了出廠固化的bootloader,用戶也可以在應(yīng)用程序中編寫(xiě)自己的bootloader程序,用于最終產(chǎn)品的固件更新。此功能稱為應(yīng)用程序內(nèi)編程(IAP)。本應(yīng)用筆記的目的
    發(fā)表于 01-14 12:52 ?4次下載
    AN0001 <b class='flag-5'>AT32</b> IAP 使用 <b class='flag-5'>USART</b>

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

    這部分主要介紹AT32 USB主機(jī)庫(kù)的結(jié)構(gòu)和庫(kù)的使用方法,AT32 USB支持全速和低速,不支持USB2.0高速設(shè)備。 這里庫(kù)的作用是用來(lái)管理USB外設(shè)和實(shí)現(xiàn)USB的基本協(xié)議,使開(kāi)發(fā)者能夠更快的上手開(kāi)發(fā)。
    的頭像 發(fā)表于 01-14 10:56 ?1964次閱讀
    如何使用<b class='flag-5'>AT32</b> MCU主機(jī)庫(kù)<b class='flag-5'>快速</b>開(kāi)發(fā)USB相關(guān)應(yīng)用

    雅特力AT32 MCU USB設(shè)備庫(kù)的架構(gòu)和使用方法

    這部分主要介紹AT32 USB設(shè)備庫(kù)的結(jié)構(gòu)和庫(kù)的使用方法,AT32 USB是基于USB2.0全速設(shè)備,不支持USB2.0高速設(shè)備。這里庫(kù)的作用是用來(lái)管理USB外設(shè)和實(shí)現(xiàn)USB的基本協(xié)議,使開(kāi)發(fā)者能夠更快的上手開(kāi)發(fā)。
    的頭像 發(fā)表于 02-22 10:09 ?2162次閱讀

    AT32 MCU Printf的功能使用方法

    AT32 MCU Printf的功能使用方法
    的頭像 發(fā)表于 10-27 09:27 ?1135次閱讀
    <b class='flag-5'>AT32</b> MCU Printf的功能<b class='flag-5'>使用方法</b>

    AT32 MCU如何使用OTA通過(guò)USART實(shí)現(xiàn)對(duì)固件的在線升級(jí)更新

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

    AT32 MCU如何使用IAP通過(guò)USART實(shí)現(xiàn)對(duì)固件的在線升級(jí)更新

    AT32 MCU如何使用IAP通過(guò)USART實(shí)現(xiàn)對(duì)固件的在線升級(jí)更新
    的頭像 發(fā)表于 09-19 16:51 ?2279次閱讀
    <b class='flag-5'>AT32</b> MCU如何使用IAP通過(guò)<b class='flag-5'>USART</b>實(shí)現(xiàn)對(duì)固件的在線升級(jí)更新
    RM新时代网站-首页