精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

基于IAP的嵌入式系統升級方案

西西 ? 來源:f ? 作者:電子發燒友網 ? 2019-01-01 08:40 ? 次閱讀

一、 需求引入

現有嵌入式設備:基于ARM Cortex-M3處理器、帶以太網通訊功能。為降低設備維護成本節省寶貴的時間和金錢,需要設計網口升級固件功能。

本文描述了基于IAP和網口升級該嵌入式系統的方法,其中處理器為NXP公司的ARM Cortex-M3,開發環境為IAR Embedded Workbench for ARM。

IAP( In Applicatin Programming)在應用編程,一般指MCU可以通過通信端口UART口、網口等)從外部接收應用程序鏡像并燒錄到FLASH中實現固件升級。

基于IAP的嵌入式系統升級方案

圖1網口升級固件

二、 原理介紹

先溫習下小知識:一個典型的嵌入式軟件地址空間如圖2所示,程序代碼(RO段)和初始化數據(RW段)都是存儲在ROM(常見為FLASH)中,當系統上電運行時,BootLoader程序會把RW段數據從ROM中拷貝到RAM中(.data),同時它會清零未初始化數據段(.bss),設置棧(.stack)和堆(.heap),之后系統就可以正常運行了。

這里會有2個疑問:為什么要拷貝RW段呢?還有BootLoader程序是什么?第一個問題很簡單,既然是RW(Read&Write)數據,那就只能保存在RAM中,因為ROM是無法執行“寫數據”的操作。第二個問題很容易讓程序員忽視,它的實現有2種,一種是由芯片的Boot代碼(固化在ROM中)來執行拷貝,另一種是由編譯器自帶的代碼(如IAR就有__iar_program_start函數)

基于IAP的嵌入式系統升級方案

圖2軟件地址空間

基于IAP固件升級一般會把軟件設計成2部分:BOOT和應用程序,其中BOOT相當于PC機的BIOS負責升級固件和引導應用程序,它對于用戶是不可見的;應用代碼就是常見的嵌入式軟件。這2個軟件的存儲如圖3所示:

基于IAP的嵌入式系統升級方案

圖3存儲地址視圖

我們再一起來看看BOOT和APP啟動時序。當系統上電時,它首先從0地址找到中斷向量表,取出Reset_Handler中斷服務代碼,該代碼先初始化芯片(如PLL和中斷寄存器),然后調用BootLoader代碼執行搬運工作,把存儲空間布置成圖2右邊的“運行地址視圖”,之后跳轉到用戶代碼的main()函數,此時BOOT軟件啟動完成。

BOOT代碼開始檢測是否需要升級固件,如果需要就從外部取APP鏡像文件并燒錄FLASH,最后一步都是啟動APP軟件。

那么BOOT代碼如何啟動APP代碼呢?其實很簡單,因為APP代碼它自身包含中斷向量表和BootLoader代碼,BOOT代碼只需要告訴MCU新的中斷向量表地址,然后跳轉到APP代碼區。之后,APP的BootLoader會把自己的RW數據搬運到RAM中,同樣也會布置存儲空間如圖2右邊所示,最終跳轉到APP代碼的用戶main()函數,這樣APP代碼完成了啟動。

三、 IAP關鍵技術

首先,APP代碼需要將程序地址重定向,在本例中需要把代碼地址重定向到0x0001 0000。為什么要執行如此操作呢?我們看一個實例,假設代碼中有調用f1(),如果沒有執行重定向,那么f1()可能被鏈接器分配在0x1234,當PC寄存器導入該地址并解析指令執行時,致命的錯誤發生了——該地址根本沒有f1()代碼,因為APP代碼是從0x0001 0000開始存儲的。重定向就是告訴鏈接器,請從0x0001 0000開始定位程序代碼,這樣在本例中f1()將分配在0x0001 1234,才能正確調用f1()。

在IAR環境下程序空間重定向操作如下:打開“Options”-》“Linker”-》“Config”,點擊“Edit”,在彈出的窗口中設置如圖4所示地址空間。

基于IAP的嵌入式系統升級方案

圖4鏈接器重定向代碼地址

然后,BOOT代碼在使用外設后,一定要De-Initialize該外設再啟動APP代碼,即要讓APP代碼認為MCU只是剛上電運行,而不是跑完一個系統再調用自己。如果BOOT代碼沒有執行該動作,當APP代碼運行時,MCU的外設處于不確定狀態(尤其是中斷未關閉),可能會帶來一些預料不到的錯誤。

再次,BOOT代碼操作FLASH是通過調用IAP函數來實現的(NXP公司的IAP庫函數提供Erase()/Write()/Compare()等),其中寫FLASH函數一次操作只能接收256/512/1024/4096字節,如果不足也需要填充。

千萬要注意的是調用IAP函數期間中斷需要特別處理,一起看看NXP官方的說明文檔(原為英文,翻譯如下)“當IAP函數調用期間,芯片的BootLoader會暫時禁止訪問用戶ROM空間數據。用戶ROM空間被映射到一些配置數據區以便于IAP調用。因此原來的中斷向量地址沒有包含正確的中斷向量。所以當IAP調用正在處理時如果一個中斷發生,該中斷將不能被正確對待同時MCU的行為是不確定的。在一些情況下,當中斷不能被正確處理時MCU將會復位。”

解決該問題有2種方法:如果中斷是至關重要的(任何時候都不能禁止),那么需要把中斷向量表和ISR重定向到SRAM中;另外一個簡單的辦法是調用IAP函數之前先禁止中斷,調用完成之后再使能中斷。在本固件升級中,采用第二種方法,畢竟短暫地關閉中斷對于本設計是可以接受的。

最后,當APP代碼被引導運行時,中斷向量表不再位于0地址了,在本例中位于0x0001 0000,因此需要將這個新地址告訴MCU,有一專門寄存器VTOR(Vector Table Offset Register)用來存儲該地址。該工作必須由BOOT代碼來完成,因為一旦跳轉到APP代碼MCU第一件事情就是訪問中斷向量表。

千萬小心的一個錯誤是:APP代碼不要再對VTOR寄存器進行任何操作,否則MCU將因為無法訪問中斷向量表而紊亂。(本人就遇到這個錯誤,APP代碼中的匯編文件startup_LPC17xx.s啟動時“靜悄悄地”調用了NXP庫函數SystemInit,該函數會重置VTOR導致APP的中斷不能使用,這個錯誤查了整整一天呀!)。

四、 網口下載鏡像

本部分內容是偏向策略進行設計,因此很多地方值得商榷,在這里堅持的原則是——簡單就是美。

首先,通信幀直接建立在802.3以太網協議上,這樣保證簡單化;然后,不管鏡像文件實際長度,一律向1KB取整,不足則填充0;其次,因為以太網MTU為1518字節,通信幀每次傳輸1KB鏡像文件;再次,嵌入式系統與PC機通訊采用“停等+ACK”機制,即PC機只有接收到第i幀確認后才能傳輸第i+1幀;最后,為確保鏡像文件在傳輸中不受損,每幀都包含CRC校驗碼。

圖5較好地描述了升級固件時PC與嵌入式設備的通訊邏輯。當設備發出握手幀連續10次無應答后,BOOT代碼將直接引導原APP程序啟動,即無需升級固件;正常升級固件時,首先有3次握手,接下來是分片傳輸鏡像文件,最后嵌入式設備會回應“升級成功”幀;如果某分片通訊時發生錯誤,嵌入式設備會回應“錯誤原因”幀,當重傳達到5次仍出錯時PC機需要提醒用戶,最好還能說明錯誤原因。

基于IAP的嵌入式系統升級方案

圖5升級固件通訊時序

嵌入式設備回應PC的數據幀直接封裝字符串,這樣做的好處是可以通過截取數據包查明通信內容;而PC機傳輸給設備的數據幀采用二進制,主要是照顧嵌入式系統較弱的計算和存儲能力,該二進制通訊幀格式如圖6所示。

基于IAP的嵌入式系統升級方案

圖6二進制通訊幀格式

FLASH一般是由Sector組成的,并且在寫操作之前需要擦除該Sector。本系統中使用的FLASH共30個Sector,前16個均為4KB,后14個為32KB,為了簡化設計,將BOOT放置在前16個Sector中,共計64KB,APP鏡像放置在后14個32KB的Sector中,共448KB。

這樣安排程序依賴如下設定:鏡像文件起始位置為0x0001 0000,每接收與寫入FLASH字節數為1024,當寫入FLASH地址為Sector之首時需要擦除該分區,邏輯流程如圖7所示。

基于IAP的嵌入式系統升級方案

圖7分片寫鏡像文件

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

    關注

    134

    文章

    9054

    瀏覽量

    366834
  • 嵌入式系統
    +關注

    關注

    41

    文章

    3568

    瀏覽量

    129237
  • IAP
    IAP
    +關注

    關注

    2

    文章

    163

    瀏覽量

    24251
收藏 人收藏

    評論

    相關推薦

    實用的CAN總線分布嵌入式系統升級設計方案

    嵌入式系統具有智能化程度高、體積小、可靠性高、實時性強等諸多優點,已經越來越多地應用于消費電子、工業控制、汽車電子等各個行業。往往一個大的系統又由許多小的嵌入式
    的頭像 發表于 01-13 07:30 ?8568次閱讀
    實用的CAN總線分布<b class='flag-5'>式</b><b class='flag-5'>嵌入式</b><b class='flag-5'>系統升級</b>設計<b class='flag-5'>方案</b>

    一種嵌入式系統升級的設計和實現

    。本文提出了利用LPC2148的SD卡實現嵌入式系統升級的設計方案。  2、總體系統升級方案設計  廠家生產出產品后,用戶購買回去使用,當設
    發表于 07-18 08:31

    利用SD卡實現嵌入式Linux系統的自動升級

    系統適應性。傳統的嵌入式系統升級,首先通過JTAG接口將Bootloader燒寫到目標板的Flash中,然后在Bootloader中,將內核映像文件和文件系統映像文件通過串口或者網絡下
    發表于 12-07 09:24

    嵌入式系統怎么實現遠程監控和升級

    網絡、以電子郵件為載體的嵌入式系統遠程監控和升級方案,達到遠程修改系統參數、索取系統自檢報告、索
    發表于 08-02 06:49

    嵌入式JavaPOS系統接口怎么測試?

    隨著嵌入式計算機應用技術的發展,嵌入式技術已經廣泛應用到現代生活的方方面面。在零售系統方面,零售收款機是嵌入式應用的一個重要領域。目前,市場上的收款機大體上可分為三類:第一類是基于PC
    發表于 10-08 08:05

    怎樣去設計一種SFP+雙MCU光收發模塊嵌入式系統

    本文基于ADuC7023a的硬件平臺和Keil4的軟件平臺,設計了一種SFP+雙MCU光收發模塊嵌入式系統升級方案
    發表于 05-24 06:02

    嵌入式系統在線升級流程是怎樣的

    嵌入式系統在線升級流程:1.U-boot判斷Boot Flag Param 分區中的Boot Flag == 02.啟動Normal App系統,進入
    發表于 12-22 07:23

    Linux嵌入式系統升級的相關資料推薦

    Linux 嵌入式系統升級轉載于:https://www.cnblogs.com/aaronLinux/p/6979963.html
    發表于 12-27 08:02

    基于GIS的多點嵌入式系統遠程在線升級

    在利用嵌入式終端進行河流水質數據采集的分布系統中,由于終端數量眾多,分布范圍廣,嵌入式系統升級非常困難。針對該困難,提出一種基于GIS的多
    發表于 07-08 15:09 ?13次下載

    基于LPC2148用SD卡實現嵌入式系統升級的應用設計

     在嵌入式系統中,為了實現設備終端的內核、文件系統升級和設備功能維護,一般是將目標板連接到主機,通過JTAG口、串口或網口來實現升級。在此,提出一種更為方便的升
    發表于 12-20 16:58 ?37次下載

    基于LPC2148的SD卡實現嵌入式系統升級設計

    嵌入式系統中,為了實現設備終端的內核、文件系統升級和設備功能維護,一般是將目標板連接到主機,通過JTAG口、串口或網口來實現升級。在此,提出一種更為方便的
    發表于 06-02 15:51 ?40次下載
    基于LPC2148的SD卡實現<b class='flag-5'>嵌入式</b><b class='flag-5'>系統升級</b>設計

    嵌入式設備遠程在線升級技術的研究

    介紹了嵌入式系統遠程在線升級的工作原理,并詳細闡述了系統硬件平臺及軟件的設計原理,提出了基于Internet通信方式的嵌入式
    發表于 06-04 15:50 ?49次下載
    <b class='flag-5'>嵌入式</b>設備遠程在線<b class='flag-5'>升級</b>技術的研究

    基于CAN總線的分布嵌入式系統升級方案

    汽車電子系統中的車載GPS、倒車雷達、發動機控制、儀表盤系統等,數控機床中的鍵盤顯示系統、馬達控制系統等,這些無一不是嵌入式
    發表于 01-22 11:57 ?1714次閱讀
    基于CAN總線的分布<b class='flag-5'>式</b><b class='flag-5'>嵌入式</b><b class='flag-5'>系統升級</b><b class='flag-5'>方案</b>

    ARM在線升級的應用IAP代碼

    ARM嵌入式應用程序架構設計實例精講--ARM在線升級的應用IAP代碼
    發表于 07-08 11:08 ?6次下載

    基于IAP遠程升級技術在空間應用系統解決方案

    IAP可通過專門設計的固件程序來編程內部存儲器,不需要硬件支持,所以IAP技術提高了嵌入式系統的可擴展性與可維護性,能在不變的硬件平臺上升級
    發表于 11-27 17:19 ?2次下載
    基于<b class='flag-5'>IAP</b>遠程<b class='flag-5'>升級</b>技術在空間應用<b class='flag-5'>系統</b>解決<b class='flag-5'>方案</b>