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 MCU如何使用USB MSD 進(jìn)行IAP升級(jí)?

jf_pJlTbmA9 ? 來(lái)源:AT32 MCU 雅特力科技 ? 作者:AT32 MCU 雅特力科技 ? 2023-10-27 09:23 ? 次閱讀

IAP在線升級(jí)原理概述

IAP(In Application Programming)即在應(yīng)用編程,IAP是用戶自己的程序在運(yùn)行過(guò)程中對(duì)User Flash的部分區(qū)域進(jìn)行燒寫(xiě),目的是為了在產(chǎn)品發(fā)布后可以方便地通過(guò)預(yù)留的通信口對(duì)產(chǎn)品中的固件程序進(jìn)行更新升級(jí)。通常實(shí)現(xiàn)IAP功能時(shí),即用戶程序運(yùn)行中作自身的更新操作,需要在設(shè)計(jì)固件程序時(shí)編寫(xiě)兩個(gè)項(xiàng)目代碼,第一個(gè)項(xiàng)目程序不執(zhí)行正常的功能操作,而只是通過(guò)某種通信方式(如USB、USART)接收程序或數(shù)據(jù),執(zhí)行對(duì)第二部分代碼的更新;第二個(gè)項(xiàng)目代碼才是真正的功能代碼。這兩部分項(xiàng)目代碼都同時(shí)燒錄在User Flash中,當(dāng)芯片上電后,首先是第一個(gè)項(xiàng)目代碼開(kāi)始運(yùn)行,它作如下操作:

1) 檢查是否需要對(duì)第二部分代碼進(jìn)行更新
2) 如果不需要更新則轉(zhuǎn)到4)
3) 執(zhí)行更新操作
4) 跳轉(zhuǎn)到第二部分代碼執(zhí)行

wKgaomUD6NeAZbs2AAE-MbcF2xE094.jpg 圖1. IAP代碼執(zhí)行流程

在圖上圖所示流程中,AT32復(fù)位后,還是從0X08000004地址取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)到復(fù)位中斷服務(wù)程序,在運(yùn)行完復(fù)位中斷服務(wù)程序之后跳轉(zhuǎn)到IAP的main函數(shù),如圖標(biāo)號(hào)①所示,在執(zhí)行完IAP以后(即將新的APP代碼寫(xiě)入AT32的FLASH,灰底部分。新程序的復(fù)位中斷向量起始地址為0X08000004+N+M),跳轉(zhuǎn)至新寫(xiě)入程序的復(fù)位向量表,取出新程序的復(fù)位中斷向量的地址,并跳轉(zhuǎn)執(zhí)行新程序的復(fù)位中斷服務(wù)程序,隨后跳轉(zhuǎn)至新程序的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中斷向量表處,而不是新程序的中斷向量表,如圖標(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ò)程的分析,我們知道IAP程序必須滿足兩個(gè)要求:
1) 新程序必須在IAP程序之后的某個(gè)偏移量為x的地址開(kāi)始
2) 必須將新程序的中斷向量表相應(yīng)的移動(dòng),移動(dòng)的偏移量為x

AT32 USB MSD IAP簡(jiǎn)介

USB MSD IAP是一個(gè)固件升級(jí)工具,它不依賴于其它上位機(jī)工具,可直接接入到PC或手機(jī)上進(jìn)行設(shè)備的固件升級(jí)。

實(shí)現(xiàn)原理:將FLASH虛擬成一個(gè)存儲(chǔ)設(shè)備讓PC訪問(wèn)。

極其簡(jiǎn)單的操作步驟:

1) 將USB接口接入PC
2) PC識(shí)別到盤(pán)符“AT32 IAP”
3) 將需要升級(jí)的固件拷貝到AT32 IAP盤(pán)符里面
4) 升級(jí)完成

AT32 USB MSD IAP設(shè)計(jì)功能特點(diǎn)

IAP目前保留使用20K byte空間,APP的起始地址需在20K以后

使用USB大容量存儲(chǔ)設(shè)備進(jìn)行虛擬設(shè)備

升級(jí)后自動(dòng)reset USB設(shè)備并返回升級(jí)狀態(tài)

支持下載后自動(dòng)讀回進(jìn)行CRC校驗(yàn),保證固件正確性

支持設(shè)置下載地址(需按照page 2K對(duì)齊,并要大于IAP保留地址)

支持各種系統(tǒng)windows,linux,Android

支持升級(jí)完成之后跳轉(zhuǎn)到APP運(yùn)行

支持BIN文件升級(jí)

支持HEX文件升級(jí)(后續(xù)版本添加)

支持加密文件升級(jí)(后續(xù)版本添加)

程序設(shè)計(jì)

地址空間

wKgZomUD6NmAELjaAABJXBY7Xy8288.png 表1. 地址空間分布

升級(jí)狀態(tài)

當(dāng)連接Host之后,在盤(pán)符里面會(huì)對(duì)應(yīng)有當(dāng)前狀態(tài)的TXT文檔,根據(jù)文檔名稱不同來(lái)確定當(dāng)前的狀態(tài)。

準(zhǔn)備升級(jí)狀態(tài)(Ready.TXT)
升級(jí)成功(Success.TXT)
升級(jí)失敗(Failed.TXT)
未知文件或錯(cuò)誤(Unknown.TXT)
升級(jí)文件大于FLASH大?。↙arge.TXT)
注意:設(shè)備必須在Ready.TXT狀態(tài)下才能進(jìn)行升級(jí),否則不會(huì)升級(jí)。

升級(jí)BIN檔文件名格式

需指定下載地址(格式1)
文件名格式:(1Byte)A+(6Byte)offset+.BIN
如:要下載一個(gè)BIN文件到0x08005000為起始的地址空間去
文件名為:A005000.BIN

注意6Byte的offset地址需要保證在APP可使用的范圍之內(nèi),否則將使用IAP內(nèi)部默認(rèn)的APP起始地址進(jìn)行升級(jí)

當(dāng)不滿足格式1時(shí),IAP 將使用內(nèi)部默認(rèn)APP的起始地址進(jìn)行升級(jí):

如:ABCDEFG.BIN,A11111.BIN,jkakkkddkfj.BIN

升級(jí)HEX檔文件格式(后綴.HEX)

后續(xù)版本添加

升級(jí)加密檔文件格式(后綴.SEC)

后續(xù)版本添加

使用Option Byte標(biāo)志判斷當(dāng)前是否升級(jí)

IAP中使用Option Byte中HID[0]記錄升級(jí)是否成功,當(dāng)進(jìn)入IAP時(shí),設(shè)置HID[0]=1,當(dāng)升級(jí)完成時(shí)設(shè)置HID[0]=0;當(dāng)設(shè)備啟動(dòng)時(shí),會(huì)自動(dòng)判斷HID[0]是否已升級(jí)固件,如果是,就跳轉(zhuǎn)到APP地址執(zhí)行,否就繼續(xù)運(yùn)行IAP。

跳轉(zhuǎn)到APP code執(zhí)行

當(dāng)成功下載固件到FLASH之后,如果需要跳轉(zhuǎn)到用戶code執(zhí)行,有兩種方法:

1) Reset
2) 向識(shí)別到的AT IAP虛擬磁盤(pán)上拷貝一個(gè)JUMP.TXT的文件,注意這個(gè)文件的大小不能為0

使用AT32 USB MSD IAP進(jìn)行升級(jí)

硬件資源

1) 指示燈LED2/LED3/LED4

2) USB(PA11/PA12)

3) AT-START-F403AV1.0實(shí)驗(yàn)板

wKgaomUD6NqAT7nvAAhQUIzX810028.png 圖2. AT-START-F403A

注:該IAP demo是基于AT32F403A的硬件條件,若使用者需要在AT32其他型號(hào)上使用,請(qǐng)修改相應(yīng)配置即可。

軟件資源

1) SourceCode

AN0012_SourceCode_V2.0.0utilitiesAN0012_demo,IAP源程序

AN0012_SourceCode_V2.0.0libraries,AT32外設(shè)庫(kù)

AN0012_SourceCode_V2.0.0middlewares,其他資源

2) Doc
《AN0012_USB_MSD_IAP_V2.x.x.docx》

Note:所有project都是基于keil 5而建立,若用戶需要在其他編譯環(huán)境上使用,請(qǐng)參考AT32F403A_407_Firmware_Libraryprojectat_start_f403atemplates中各種編譯環(huán)境(例如IAR6/7/8,keil4/5)進(jìn)行簡(jiǎn)單修改即可。

使用流程

1) 進(jìn)入IAP Mode方式

如果已經(jīng)升級(jí)過(guò)固件,一直按住User按鍵,再按Reset鍵,進(jìn)入IAP模式(LED4閃爍),未升級(jí)時(shí)直接reset就會(huì)進(jìn)入IAP模式。

wKgaomUD6NyAC8tjAAJ5pfWPaOw275.png 圖3. 進(jìn)入IAP Mode按鍵

2) 連接USB設(shè)備到PC

wKgZomUD6N6ABI-rAAb3hAdA_eI792.png 圖4. USB設(shè)備與PC連接

3) PC識(shí)別到AT32 IAP可看到Ready.TXT

wKgaomUD6N-AWRt2AAAsvkqNx8k491.png 圖5. PC識(shí)別到AT32 IAP

4) 拷貝BIN檔到磁盤(pán)目錄下

wKgZomUD6OGATCAvAABE46csh0g503.png 圖6. 拷貝Bin文件

5) 設(shè)備升級(jí)完成之后將Reset USB

此時(shí)重新打開(kāi)磁盤(pán),會(huì)有Success.TXT

wKgaomUD6OOABM5-AAA9SapN2Ls510.png 圖7. 設(shè)備升級(jí)完成提示

6) 升級(jí)結(jié)束

此時(shí)Reset或向識(shí)別到的AT IAP虛擬磁盤(pán)上拷貝一個(gè)大小不為0的JUMP.TXT文件,即可跳轉(zhuǎn)到用戶代碼。

如果升級(jí)一次之后,不管是成功還是失敗,如果需要再次升級(jí),需要reset整個(gè)設(shè)備。設(shè)備進(jìn)入Ready.TXT狀態(tài)。

來(lái)源:AT32 MCU 雅特力科技
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系小編進(jì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)投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8150

    瀏覽量

    271128
  • IAP
    IAP
    +關(guān)注

    關(guān)注

    2

    文章

    165

    瀏覽量

    24871
  • MSD
    MSD
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    12247
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    AT32 通過(guò)USB HID實(shí)現(xiàn)IAP

    前言對(duì)于大多數(shù)基于閃存的系統(tǒng),一項(xiàng)重要要求是能夠在最終產(chǎn)品中安裝固件時(shí)進(jìn)行更新。此功能稱為應(yīng)用程序內(nèi)編程(IAP)。本應(yīng)用筆記的目的是提供在AT32微控制器上創(chuàng)建IAP by
    發(fā)表于 11-28 11:10

    AT32微控制器上創(chuàng)建IAP by USB HID應(yīng)用程序的方法

    對(duì)于大多數(shù)基于閃存的系統(tǒng),一項(xiàng)重要要求是能夠在最終產(chǎn)品中安裝固件時(shí)進(jìn)行更新。此功能稱為應(yīng)用程序內(nèi)編程(IAP)。本應(yīng)用筆記的目的是提供在AT32微控制器上創(chuàng)建IAP by
    發(fā)表于 10-19 06:48

    USB MSD IAP的原理及過(guò)程實(shí)現(xiàn)

    AT32 USB MSD IAP主要重點(diǎn)介紹USB MSD
    發(fā)表于 10-23 07:04

    AT32微控制器上創(chuàng)建Multi MCU IAP應(yīng)用程序的方法

    對(duì)于大多數(shù)基于閃存的系統(tǒng),一項(xiàng)重要要求是能夠在最終產(chǎn)品中安裝固件時(shí)進(jìn)行更新。此功能稱為應(yīng)用程序內(nèi)編程(IAP)。本應(yīng)用筆記的目的是提供在AT32微控制器上創(chuàng)建Multi MCU
    發(fā)表于 10-24 06:48

    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ā)
    發(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ā)
    發(fā)表于 10-25 07:07

    使用CAN的AT32 IAP

    對(duì)于AT32 MCU,除了出廠固化的bootloader,用戶也可以在應(yīng)用程序中編寫(xiě)自己的bootloader程序,用于最終產(chǎn)品的固件更新。此功能稱為應(yīng)用程序內(nèi)編程(IAP)。本應(yīng)用筆記的目的是提供
    發(fā)表于 10-26 06:39

    MCUIAP升級(jí)

    IAP升級(jí)簡(jiǎn)介IAP是In Application Programming的首字母縮寫(xiě),IAP是用戶自己的程序在運(yùn)行過(guò)程中對(duì)User Flash的部分區(qū)域
    發(fā)表于 10-25 13:06 ?18次下載
    <b class='flag-5'>MCU</b>之<b class='flag-5'>IAP</b><b class='flag-5'>升級(jí)</b>

    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> <b class='flag-5'>IAP</b> 使用 USART

    AT32 USB MSD IAP簡(jiǎn)介及功能特點(diǎn)

    口對(duì)產(chǎn)品中的固件程序進(jìn)行更新升級(jí)。通常實(shí)現(xiàn)IAP功能時(shí),即用戶程序運(yùn)行中作自身的更新操作,需要在設(shè)計(jì)固件程序時(shí)編寫(xiě)兩個(gè)項(xiàng)目代碼,第一個(gè)項(xiàng)目程序不執(zhí)行正常的功能操作,而只是通過(guò)某種通信方式(如U
    的頭像 發(fā)表于 06-12 16:27 ?2041次閱讀

    AT32講堂003 | AT32 MCU如何使用USB HID進(jìn)行IAP升級(jí)

    IAP在線升級(jí)原理概述IAP(InApplicationProgramming)即在應(yīng)用編程,IAP是用戶自己的程序在運(yùn)行過(guò)程中對(duì)UserFlash的部分區(qū)域
    的頭像 發(fā)表于 04-24 14:36 ?2529次閱讀
    <b class='flag-5'>AT32</b>講堂003 | <b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>如何使用<b class='flag-5'>USB</b> HID<b class='flag-5'>進(jìn)行</b><b class='flag-5'>IAP</b><b class='flag-5'>升級(jí)</b>

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

    口對(duì)產(chǎn)品中的固件程序進(jìn)行更新升級(jí)。通常實(shí)現(xiàn)IAP功能時(shí),即用戶程序運(yùn)行中作自身的更新操作,需要在設(shè)計(jì)固件程序時(shí)編寫(xiě)兩個(gè)項(xiàng)目代碼,第一個(gè)項(xiàng)目程序不執(zhí)行正常的功能操作,
    的頭像 發(fā)表于 03-29 15:40 ?2345次閱讀
    <b class='flag-5'>AT32</b>講堂001 | <b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>如何使用<b class='flag-5'>IAP</b>通過(guò)USART實(shí)現(xiàn)對(duì)固件的在線<b class='flag-5'>升級(jí)</b>更新

    AT32講堂005 | AT32 MCU如何使用USB MSD 進(jìn)行IAP升級(jí)

    IAP在線升級(jí)原理概述IAP(InApplicationProgramming)即在應(yīng)用編程,IAP是用戶自己的程序在運(yùn)行過(guò)程中對(duì)UserFlash的部分區(qū)域
    的頭像 發(fā)表于 06-14 10:37 ?2028次閱讀
    <b class='flag-5'>AT32</b>講堂005 | <b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>如何使用<b class='flag-5'>USB</b> <b class='flag-5'>MSD</b> <b class='flag-5'>進(jìn)行</b><b class='flag-5'>IAP</b><b class='flag-5'>升級(jí)</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 ?3220次閱讀
    <b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>如何使用OTA通過(guò)USART實(shí)現(xiàn)對(duì)固件的在線<b class='flag-5'>升級(jí)</b>更新

    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 ?2949次閱讀
    <b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>如何使用<b class='flag-5'>IAP</b>通過(guò)USART實(shí)現(xiàn)對(duì)固件的在線<b class='flag-5'>升級(jí)</b>更新

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品