<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > LPC2214的IAP實(shí)現方案

LPC2214的IAP實(shí)現方案

作者: 時(shí)間:2009-11-17 來(lái)源:網(wǎng)絡(luò ) 收藏

2 硬件
本產(chǎn)品為電力負荷用電管理終端,用來(lái)對廠(chǎng)礦、企業(yè)、機關(guān)等電力用戶(hù)的用電監測和控制,提高用電質(zhì)量。終端產(chǎn)品通過(guò)GPRS/CDMA無(wú)線(xiàn)通信接口完成與電力局遠方調度主站的信息交互。由于終端產(chǎn)品分散分布在一個(gè)區域的各個(gè)位置,調度主站必須通過(guò)GPRS/CDMA方式對終端產(chǎn)品應用程序的在線(xiàn)升級,因此產(chǎn)品在線(xiàn)升級的可靠性會(huì )對電力用戶(hù)造成很大的影響。終端產(chǎn)品采用圖1所示的硬件??紤]到片內Flash的特點(diǎn),應用程序固化在內部Flash中并在其中執行。通過(guò)數據線(xiàn)、地址線(xiàn)與RAM、外部Flash、LCD、擴展串口芯片連接,通過(guò)串行總線(xiàn)與A/D轉換器通信。本身提供的2路UART接口可以分別實(shí)現本地維護接口和GPRS/CDMA無(wú)線(xiàn)網(wǎng)絡(luò )接口,擴展串口芯片可以擴展出2路UART,實(shí)現本地紅外維護和RS485方式的抄表功能。

本文引用地址:http://dyxdggzs.com/article/152280.htm

為了確保應用程序的在線(xiàn)更新,片外RAM和Flash除了滿(mǎn)足應用程序的正常使用外,還必須滿(mǎn)足應用程序更新時(shí)臨時(shí)備份代碼的需求。


3 應用程序實(shí)現
如圖2所示,需要更新的應用程序代碼通過(guò)GPRS/CDMA無(wú)線(xiàn)網(wǎng)絡(luò )接口或本地維護接口下載到RAM的程序代碼緩存區中。經(jīng)過(guò)校驗檢查正確后,導入到外部Flash的應用程序代碼區。導入成功后,設置相關(guān)標志,再通過(guò)LPC2214的接口功能函數,將應用程序代碼保存到CPU內部Flash中。

由于應用程序運行在CPU內部的高速Flash上,因此產(chǎn)品正常運行過(guò)程中無(wú)法完成內部Flash中代碼的更新。為了解決上述問(wèn)題,采用“應用boot:”的方式加以實(shí)現。將內部Flash分為2個(gè)區域:應用boot和應用程序代碼區。應用boot為一個(gè)簡(jiǎn)單的應用程序,實(shí)現從外部Flash導入應用程序代碼以及向應用程序代碼區入口跳轉的功能。應用boot存放在CPU內部Flash的開(kāi)始部分,一旦寫(xiě)入后不再修改。產(chǎn)品上電或復位后,CPU的PC指針首先指向應用boot的入口,應用boot開(kāi)始執行。一旦檢測到外部Flash中有完整的用戶(hù)代碼需要更新,則通過(guò)LPC2214的接口將應用程序代碼導入到內部Flash的應用程序代碼區,并跳轉到應用程序代碼的入口處執行新的應用程序;如果沒(méi)有應用程序需要更新,boot程序會(huì )直接跳轉到當前應用程序代碼的入口處執行。
在整個(gè)應用程序在線(xiàn)升級過(guò)程中,應用程序代碼正常寫(xiě)入片外Flash之前都不影響產(chǎn)品的正常運行。正確寫(xiě)入片外Flash后,應用程序自動(dòng)復位,然后啟動(dòng)應用boot,通過(guò)應用boot將新的應用程序寫(xiě)入內部Flash。經(jīng)測試,該過(guò)程可以在10 s內完成,完全滿(mǎn)足用戶(hù)的使用要求。


4 應用boot設計
應用boot是應用代碼更新的關(guān)鍵,它不但解決了在線(xiàn)升級的問(wèn)題,而且提供了一種異常防護機制。即使在內部Flash的應用程序代碼區寫(xiě)入失敗的情況下,由于boot可以正常運行,仍然可以通過(guò)boot程序的功能重新更新應用程序。boot程序基本功能包括:內部Flash更新、向應用程序跳轉以及本地下載更新應用程序。為保證該軟件的可靠性,同時(shí)考慮硬件配置情況,采用μC/OS-II嵌入式操作系統。通過(guò)對該操作系統的合理裁剪和軟件優(yōu)化,可以將boot程序代碼控制在12 KB以?xún)?,從而為應用程序代碼提供了足夠的片內Flash存儲空間。
當boot程序從內部Flash中讀取指令執行時(shí),不能擦除該Flash。為解決該問(wèn)題,boot程序執行時(shí)首先將boot程序代碼復制到RAM中,然后跳轉到RAM中執行,這樣就可以對內部Flash的應用程序代碼區進(jìn)行修改操作。boot程序的啟動(dòng)部分非常重要,會(huì )直接影響整個(gè)系統的運行情況。啟動(dòng)代碼首先初始化CPU總線(xiàn)控制器;然后初始化RAM和外部Flash片選,將boot程序代碼復制到RAM中并在RAM中執行;最后初始化堆棧和基本系統后進(jìn)入主程序入口。


boot程序的IAP實(shí)現,主要包括兩個(gè)接口函數:CPU內部Flash扇區的擦除和寫(xiě)入。對于擦除操作,按照IAP提供的操作方式即可實(shí)現,注意發(fā)送完擦除指令后需要一段時(shí)間的延時(shí),并借助指令檢查擦除是否成功。對于寫(xiě)入操作,需要根據IAP操作的相關(guān)要求,將數據首先復制到CPU的內部RAM中;然后通過(guò)相應的IAP寫(xiě)入命令將其寫(xiě)入到內部Flash中;寫(xiě)入操作完成后,需要進(jìn)行一定的延時(shí)并檢查寫(xiě)入是否成功。為了保證上述操作過(guò)程的完整性,對于μC/OS-II操作系統,需要借助OS_ENTER_CRITICAL函數進(jìn)行必要的保護。



關(guān)鍵詞: 方案 實(shí)現 IAP LPC2214 ARM

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>