RM新时代网站-首页

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

AT32 MCU如何使用USB MSD 進行IAP升級?

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

IAP在線升級原理概述

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

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

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

在圖上圖所示流程中,AT32復位后,還是從0X08000004地址取出復位中斷向量的地址,并跳轉到復位中斷服務程序,在運行完復位中斷服務程序之后跳轉到IAP的main函數(shù),如圖標號①所示,在執(zhí)行完IAP以后(即將新的APP代碼寫入AT32的FLASH,灰底部分。新程序的復位中斷向量起始地址為0X08000004+N+M),跳轉至新寫入程序的復位向量表,取出新程序的復位中斷向量的地址,并跳轉執(zhí)行新程序的復位中斷服務程序,隨后跳轉至新程序的main函數(shù),如圖標號②和③所示,同樣main函數(shù)為一個死循環(huán),并且注意到此時AT32的FLASH,在不同位置上,共有兩個中斷向量表。

在main函數(shù)執(zhí)行過程中,如果CPU得到一個中斷請求,PC指針仍強制跳轉到地址0X08000004中斷向量表處,而不是新程序的中斷向量表,如圖標號④所示;程序再根據(jù)我們設置的中斷向量表偏移量,跳轉到對應中斷源新的中斷服務程序中,如圖標號⑤所示;在執(zhí)行完中斷服務程序后,程序返回main函數(shù)繼續(xù)運行,如圖標號⑥所示。

通過以上兩個過程的分析,我們知道IAP程序必須滿足兩個要求:
1) 新程序必須在IAP程序之后的某個偏移量為x的地址開始
2) 必須將新程序的中斷向量表相應的移動,移動的偏移量為x

AT32 USB MSD IAP簡介

USB MSD IAP是一個固件升級工具,它不依賴于其它上位機工具,可直接接入到PC或手機上進行設備的固件升級。

實現(xiàn)原理:將FLASH虛擬成一個存儲設備讓PC訪問。

極其簡單的操作步驟:

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

AT32 USB MSD IAP設計功能特點

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

使用USB大容量存儲設備進行虛擬設備

升級后自動reset USB設備并返回升級狀態(tài)

支持下載后自動讀回進行CRC校驗,保證固件正確性

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

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

支持升級完成之后跳轉到APP運行

支持BIN文件升級

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

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

程序設計

地址空間

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

升級狀態(tài)

當連接Host之后,在盤符里面會對應有當前狀態(tài)的TXT文檔,根據(jù)文檔名稱不同來確定當前的狀態(tài)。

準備升級狀態(tài)(Ready.TXT)
升級成功(Success.TXT)
升級失?。‵ailed.TXT)
未知文件或錯誤(Unknown.TXT)
升級文件大于FLASH大小(Large.TXT)
注意:設備必須在Ready.TXT狀態(tài)下才能進行升級,否則不會升級。

升級BIN檔文件名格式

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

注意6Byte的offset地址需要保證在APP可使用的范圍之內,否則將使用IAP內部默認的APP起始地址進行升級

當不滿足格式1時,IAP 將使用內部默認APP的起始地址進行升級:

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

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

后續(xù)版本添加

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

后續(xù)版本添加

使用Option Byte標志判斷當前是否升級

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

跳轉到APP code執(zhí)行

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

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

使用AT32 USB MSD IAP進行升級

硬件資源

1) 指示燈LED2/LED3/LED4

2) USB(PA11/PA12)

3) AT-START-F403AV1.0實驗板

wKgaomUD6NqAT7nvAAhQUIzX810028.png 圖2. AT-START-F403A

注:該IAP demo是基于AT32F403A的硬件條件,若使用者需要在AT32其他型號上使用,請修改相應配置即可。

軟件資源

1) SourceCode

AN0012_SourceCode_V2.0.0utilitiesAN0012_demo,IAP源程序

AN0012_SourceCode_V2.0.0libraries,AT32外設庫

AN0012_SourceCode_V2.0.0middlewares,其他資源

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

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

使用流程

1) 進入IAP Mode方式

如果已經升級過固件,一直按住User按鍵,再按Reset鍵,進入IAP模式(LED4閃爍),未升級時直接reset就會進入IAP模式。

wKgaomUD6NyAC8tjAAJ5pfWPaOw275.png 圖3. 進入IAP Mode按鍵

2) 連接USB設備到PC

wKgZomUD6N6ABI-rAAb3hAdA_eI792.png 圖4. USB設備與PC連接

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

wKgaomUD6N-AWRt2AAAsvkqNx8k491.png 圖5. PC識別到AT32 IAP

4) 拷貝BIN檔到磁盤目錄下

wKgZomUD6OGATCAvAABE46csh0g503.png 圖6. 拷貝Bin文件

5) 設備升級完成之后將Reset USB

此時重新打開磁盤,會有Success.TXT

wKgaomUD6OOABM5-AAA9SapN2Ls510.png 圖7. 設備升級完成提示

6) 升級結束

此時Reset或向識別到的AT IAP虛擬磁盤上拷貝一個大小不為0的JUMP.TXT文件,即可跳轉到用戶代碼。

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

來源:AT32 MCU 雅特力科技
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯(lián)系小編進行處理

審核編輯 黃宇

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

    關注

    60

    文章

    7936

    瀏覽量

    264457
  • IAP
    IAP
    +關注

    關注

    2

    文章

    163

    瀏覽量

    24279
  • MSD
    MSD
    +關注

    關注

    0

    文章

    19

    瀏覽量

    12037
收藏 人收藏

    評論

    相關推薦

    AT32 通過USB HID實現(xiàn)IAP

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

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

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

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

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

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

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

    AT32 MCU USB主機庫應用說明

    AT32 MCU USB Host Library Application Note主要描述AT32F4xx 系列USB 主機庫的架構和使用方法,方便開發(fā)者使用庫快速開發(fā)
    發(fā)表于 10-25 07:02

    AT32 MCU USB設備庫應用說明

    AT32 MCU USB Device Library Application Note主要描述AT32F4xx 系列USB 設備庫的架構和使用方法,方便開發(fā)者使用庫快速開發(fā)
    發(fā)表于 10-25 07:07

    使用CAN的AT32 IAP

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

    MCUIAP升級

    IAP升級簡介IAP是In Application Programming的首字母縮寫,IAP是用戶自己的程序在運行過程中對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'>升級</b>

    AN0001 AT32 IAP 使用 USART

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

    AT32 USB MSD IAP簡介及功能特點

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

    AT32講堂003 | AT32 MCU如何使用USB HID進行IAP升級

    IAP在線升級原理概述IAP(InApplicationProgramming)即在應用編程,IAP是用戶自己的程序在運行過程中對UserFlash的部分區(qū)域
    的頭像 發(fā)表于 04-24 14:36 ?2119次閱讀
    <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'>進行</b><b class='flag-5'>IAP</b><b class='flag-5'>升級</b>

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

    口對產品中的固件程序進行更新升級。通常實現(xiàn)IAP功能時,即用戶程序運行中作自身的更新操作,需要在設計固件程序時編寫兩個項目代碼,第一個項目程序不執(zhí)行正常的功能操作,
    的頭像 發(fā)表于 03-29 15:40 ?1955次閱讀
    <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>通過USART實現(xiàn)對固件的在線<b class='flag-5'>升級</b>更新

    AT32講堂005 | AT32 MCU如何使用USB MSD 進行IAP升級

    IAP在線升級原理概述IAP(InApplicationProgramming)即在應用編程,IAP是用戶自己的程序在運行過程中對UserFlash的部分區(qū)域
    的頭像 發(fā)表于 06-14 10:37 ?1516次閱讀
    <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'>進行</b><b class='flag-5'>IAP</b><b class='flag-5'>升級</b>

    AT32 MCU如何使用OTA通過USART實現(xiàn)對固件的在線升級更新

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

    AT32 MCU如何使用IAP通過USART實現(xiàn)對固件的在線升級更新

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