《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 設計基于NXP LPC2000的次級啟動加載程序用于代碼升級
設計基于NXP LPC2000的次級啟動加載程序用于代碼升級
摘要: 本文介紹了如何設計和實現一個基于NXPLPC2000的次級啟動加載程序(SecondaryBootLoader),用來對用戶代碼進行在線升級。
Abstract:
Key words :

        引言

  本文雖然是針對NXP(恩智浦公司)的LPC2000系列,但使用IAP技術對內部閃存進行編程卻適用于幾乎所有的NXP ARM MCU系列,包括Cortex-M0 LPC1100以及Cortex-M3 LPC1300/1700等系列。

  在大多數的LPC2000器件內部,存在著一個被稱為“主啟動加載程序(Primary Boot Loader)”的固件,它在每次上電或復位時被首先運行。本文所講的“次級啟動加載程序”實際上是一段用戶自己寫的代碼(燒寫在用戶閃存區),在執行完主啟動加載程序后被執行,提供給用戶一個選擇,是繼續執行當前的應用程序還是對當前應用程序進行更新。

  在應用編程(In Application Programming, IAP)是指在用戶應用程序運行時,對內部閃存執行擦除或編程操作,它是對用戶代碼進行升級的一個關鍵技術。

  LPC2000 IAP介紹

  扇區(Sector)

  IAP操作都是基于“扇區(Sector)”的,這就意味著即使僅僅需要更新一個字節的代碼,也要將該字節所在的整個扇區擦除。因此,用戶應該將待更新的代碼和其它代碼放在不同的扇區,以免誤擦除。

  IAP的應用領域

  使用IAP技術,可以對用戶代碼進行升級,也可以把內部閃存當成類似EEPROM來存儲數據。

  當用戶應用程序運行時,用戶可以對程序的一部分進行更新,就像在線升級病毒庫一樣,而不必將硬件電路斷電甚至將芯片取下來放到專門的編程器上去重新燒寫代碼。

  當數據存儲器使用,可以減少PCB板面積、降低成本。由于作為數據存儲的扇區會被擦除,因此不能將這些扇區和存放用戶應用程序的扇區重疊。另外,閃存的擦除和編程次數也是有一定限制的,過于頻繁的擦除或編程會影響閃存的壽命。對于LPC2000芯片來說,至少可以穩定擦寫十萬次,數據至少可以保存20年。

  如何使用IAP

  關于IAP的詳細說明、各種命令碼、返回碼和參數格式,可以參考LPC2000系列的用戶手冊。下面重點介紹一下如何使用IAP。

  使用流程

  圖1是使用IAP對閃存進行擦寫和編程的基本步驟。

        定義系統參數:在調用IAP命令前,有一些參數必須事先設置好,這包括系統時鐘、IAP調用的入口地址、存放輸入參數和輸出參數的變量。

  選擇扇區:在對任何扇區進行擦除或編程前,必須選擇(準備)這些扇區,當然,也可以一次選擇多個扇區。

  擦除扇區:在對閃存的指定扇區進行編程前,必須先擦除這些扇區。如果這些扇區已經被擦除,則不必再擦除了。可以一次對多個扇區進行擦除。

  編程扇區:在這個階段,數據將被從SRAM寫入閃存中的指定地址。這里有幾個要特別注意的地方:

  ● 只能將位于片內SRAM內的數據寫入片內閃存;

  ● 位于片內閃存的寫入地址必須是256字節對齊;

  ● 片內SRAM必須位于局部總線(Local Bus),這就意味著有兩塊SRAM區域(供USB和以太網使用)內的數據不能被直接寫入閃存;

  ● 一次寫入的字節數必須是256、512、1024或者4096。

  數據校驗:用戶不必自己寫程序每次對寫入的數據進行檢查,而是可以直接調用一個數據校驗的IAP命令。

  IAP過程中的中斷

  在擦除和編程操作過程中,片內閃存是不可訪問的,當用戶程序啟動執行時,用戶閃存區域的中斷向量有效。在調用擦除和編程的IAP命令前,用戶應當關閉中斷或者確保中斷向量表在SRAM中有效并且中斷處理函數也位于SM中。

  IAP使用的RAM

  IAP命令使用片內SM最頂端的32字節空間。最多使用128字節的棧空間(位于用戶分配的棧內),且為向下生長方式。

  次級啟動加載程序和用戶應用程序設計

  次級啟動加載程序

  每次上電或者復位后,次級啟動加載程序將會被運行,通過串口打印出一些選項,用戶可以選擇繼續執行應用程序或者更新程序。

  次級啟動加載程序位于內部閃存中從扇區0開始的若干個扇區內,這些扇區不能和用戶應用程序占用的扇區重疊。

  另外,由于主程序運行在ARM模式,而IAP運行在THUMB模式,因此必須做相應配置使得次級啟動加載程序里支持ARM和THUMB模式并存。

       用戶應用程序

  存儲器分布

  用戶應用程序存放在和次級啟動加載程序位置不同的的扇區中,并且占用了從0x4000 0000開始的一部分片內SM空間。

  在片內SRAM的最底部,存放了應用程序的中斷向量表。要注意在配置系統RW區域時,把這部分空間預留出來,即用戶應用程序的RW從0x4000 0040開始。

  中斷向量表重映射

  對于ARM7處理器而言,中斷向量位于從0x0000 0000到0x0000 001C的地址范圍,因此在Boot ROM和SRAM內的一小部分空間必須被映射到這個地址內,使得可以在不同的模式(參考LPC2000用戶手冊內存映射章節)下使用中斷。

  這一小段空間包括32字節的中斷向量以及額外的32字節跳轉指令,總共64字節,范圍為0x0000 0000到0x0000 003F。

  因為次級啟動加載程序的中斷向量表存在于閃存的0x0000 0000到0x0000 003F,因此用戶應用程序的中斷向量表只能被映射到片內SRAM(對于支持外部總線接口的LPC2000器件,也可以映射到片外存儲器)。在跳轉到用戶應用程序執行前,要將這64字節的數據復制到片內SRAM的底部(0x4000 0000 – 0x4000 003F),并且將系統的內存映射模式設置為“User RAM Mode”。這樣當用戶應用程序產生中斷時,系統會自動到位于SRAM的中斷向量表取中斷向量入口,而不是錯誤地跳轉到位于0x0地址處的、屬于次級啟動加載程序的中斷向量表。

  運行用戶應用程序

  更新完成后,修改PC指針,使其指向新的用戶程序的起始地址,然后開始執行。

  注意:要保證用戶應用程序能運行,必須還要做一些必要的初始化工作,包括RW區域的復制、ZI區域的清零等等,這些沒有放在次級啟動加載程序里完成,而是在用戶應用程序開始運行時首先執行。

  程序(從串口利用XMODEM協議更新代碼)上電運行時,串口將會打印出如圖4的信息。

  用戶可以測試一些IAP命令,或者選擇PROG命令更新用戶代碼,更新完成后,選擇RUN命令來執行。

 

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美成人午夜| 欧美精品v日韩精品v韩国精品v | 久久久久在线观看| 亚洲免费综合| 亚洲尤物在线| 亚洲免费视频观看| 亚洲尤物影院| 亚洲女优在线| 午夜精品一区二区三区在线视| 亚洲一区二区免费在线| 亚洲一区二区免费视频| 亚洲淫性视频| 性欧美暴力猛交另类hd| 香蕉久久夜色精品国产| 欧美一区二区视频在线观看2020| 欧美一区二区在线| 久久久精品日韩| 毛片一区二区三区| 欧美福利专区| 欧美日本韩国一区二区三区| 欧美日韩国产限制| 欧美日韩在线亚洲一区蜜芽| 欧美视频专区一二在线观看| 国产精品啊v在线| 国产精品视频免费| 国产日韩欧美| 在线播放一区| 亚洲日本激情| 亚洲小说欧美另类社区| 亚洲欧美在线一区| 久久精品国产亚洲5555| 亚洲人人精品| 中国女人久久久| 欧美一级大片在线免费观看| 久久久久久久久久久久久久一区| 久久噜噜噜精品国产亚洲综合| 玖玖在线精品| 欧美日韩亚洲一区三区| 国产精品视频在线观看| 国产综合激情| 亚洲精品一区二区三区福利| 亚洲午夜激情网页| 久久成人精品| 9l国产精品久久久久麻豆| 亚洲综合第一页| 久久天堂国产精品| 欧美日韩国产综合视频在线观看中文| 国产精品久久久对白| 国产亚洲毛片| 亚洲欧洲一区二区在线播放| 亚洲少妇最新在线视频| 欧美中在线观看| 一本色道久久综合亚洲精品高清| 午夜日韩福利| 欧美成人首页| 国产欧美91| 亚洲激情视频| 亚洲综合社区| 亚洲精品免费在线| 性高湖久久久久久久久| 欧美va亚洲va香蕉在线| 国产精品视频免费一区| 在线观看亚洲一区| 亚洲天堂网在线观看| 亚洲国产日韩在线一区模特| 亚洲一区二区三| 蜜臀av国产精品久久久久| 国产精品jizz在线观看美国 | 亚洲婷婷综合色高清在线 | 最新国产乱人伦偷精品免费网站| 中文在线不卡| 久久青青草原一区二区| 欧美色精品天天在线观看视频| 国产婷婷色综合av蜜臀av | 亚洲一区二区三区欧美| 久久在线视频在线| 欧美日韩在线免费观看| 禁久久精品乱码| 亚洲尤物在线视频观看| 亚洲精选视频在线| 久久另类ts人妖一区二区| 国产精品国产a| 亚洲人成毛片在线播放女女| 欧美一区二区三区在线观看视频| 在线视频亚洲一区| 模特精品裸拍一区| 国产亚洲欧美一区在线观看| 在线亚洲一区二区| 亚洲精品少妇30p| 久久这里有精品视频| 国产精品一区在线观看你懂的| 亚洲毛片在线观看.| 亚洲国产精品ⅴa在线观看| 午夜欧美视频| 欧美日韩在线观看一区二区三区| 亚洲福利视频免费观看| 欧美一区二区精品久久911| 亚洲在线成人| 欧美日韩一区二区三区四区在线观看 | 亚洲乱码国产乱码精品精天堂| 久久精品一区二区三区不卡| 国产精品人成在线观看免费| 亚洲另类自拍| 亚洲精品乱码| 免费短视频成人日韩| 狠狠入ady亚洲精品| 欧美一区二区国产| 欧美在线国产精品| 国产精品久久午夜| 亚洲视频精品在线| 亚洲特黄一级片| 欧美日韩福利在线观看| 亚洲国产一区二区精品专区| 亚洲韩国青草视频| 久久综合电影一区| 精品999成人| 亚洲国产老妈| 蜜月aⅴ免费一区二区三区 | 久久精品国产视频| 久久久久国产精品麻豆ai换脸| 国产日本精品| 久久国产精品久久精品国产| 久久久国产成人精品| 国产一区二区三区日韩欧美| 欧美一区三区三区高中清蜜桃 | 娇妻被交换粗又大又硬视频欧美| 久久精品99| 老司机精品视频网站| 精品电影一区| 亚洲美女精品成人在线视频| 欧美精品情趣视频| 亚洲毛片在线免费观看| 亚洲午夜精品国产| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲一级黄色片| 久久国产免费看| 一区在线电影| 99精品视频一区| 国产精品国产三级国产专区53| 亚洲视频网站在线观看| 午夜精彩视频在线观看不卡| 国产日韩精品在线| 久久国产一区二区| 免费看成人av| 99国产精品99久久久久久粉嫩| 亚洲一区视频在线| 国产日韩欧美一区二区| 亚洲国产高清自拍| 欧美日韩一级视频| 亚洲女爱视频在线| 久久人人97超碰国产公开结果| 亚洲第一二三四五区| 夜夜狂射影院欧美极品| 国产精品免费一区二区三区在线观看 | 午夜精品久久久久久久99黑人| 国产视频在线观看一区| 亚洲品质自拍| 国产精品www网站| 久久成人免费| 欧美日韩国产免费| 午夜在线视频一区二区区别| 毛片av中文字幕一区二区| 日韩亚洲国产欧美| 久久riav二区三区| 亚洲黄色免费| 欧美一区二区三区久久精品| 亚洲大片在线| 午夜欧美电影在线观看| 亚洲春色另类小说| 亚洲欧美国产日韩天堂区| 精品69视频一区二区三区| 亚洲一级在线观看| 一区二区亚洲精品国产| 亚洲亚洲精品在线观看 | 在线免费观看视频一区| 亚洲永久精品大片| 激情综合五月天| 亚洲永久在线观看| 亚洲成人资源| 欧美一区二区三区精品电影| 亚洲国产日韩一区| 久久成人精品| 亚洲精品在线观| 久久米奇亚洲| 亚洲视频狠狠| 欧美11—12娇小xxxx| 亚洲欧美日本另类| 欧美精品一区在线观看| 欧美亚洲自偷自偷| 欧美日韩伊人| 亚洲人体大胆视频| 国产偷久久久精品专区| 亚洲一区999| 亚洲高清在线播放| 久久精品免费| 亚洲午夜电影网| 欧美激情国产精品| 亚洲高清毛片| 国产亚洲激情| 午夜精品久久久久久久99热浪潮|