《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 微波|射頻 > 設(shè)計應(yīng)用 > 片外FIash存儲器IAP的n種方案
片外FIash存儲器IAP的n種方案
摘要: 針對嵌入式應(yīng)用系統(tǒng)片外Flash存儲器IAP無現(xiàn)成方案的問題,,介紹一種基于代碼重入思想的片外存儲器IAP解決方案,。結(jié)合LPC2210及SST39VFl60芯片,,簡介兩款芯片特點,,給出應(yīng)用連接框圖,;分析IAP實現(xiàn)要點,,并給出IAP的實現(xiàn)代碼,。
Abstract:
Key words :

   
    引 言
    
    以ARM芯片為處理器核的嵌入式應(yīng)用系統(tǒng),,以其小體積,、低功耗、低成本,、高性能,、豐富的片內(nèi)資源以及對操作系統(tǒng)的廣泛支持,得到了人們越來越多的青睞,。包括工業(yè)控制領(lǐng)域,、無線通信領(lǐng)域、網(wǎng)絡(luò)應(yīng)用,、消費電子,、成像和安全產(chǎn)品等,如今,,ARM微處理器及嵌入式技術(shù)的應(yīng)用幾乎已經(jīng)滲透到了各個領(lǐng)域,。其中ARM7作為ARM微處理器系列中的一員,是低功耗的32位RISC處理器,。Samsung公司的S3C4510B,、Philips公司的LPC20XX、LPC21XX,、LPC22XX系列等都是ARM7處理器,。這些為數(shù)繁多的ARM7處理器,,因其片內(nèi)外設(shè)不同而各擅所長,但都應(yīng)用同樣的ARM7TDMI核(或ARM7TDMI—S核,,這是ARM7TDMI的綜合版本,,這兩種核對處理器應(yīng)用人員來說沒有區(qū)別)??梢哉f,,ARM7TDMI是目前使用最為廣泛的32位嵌入式RIsc處理器。ARM7TDMI核應(yīng)用馮·諾依曼結(jié)構(gòu),,處理器使用的存儲器中數(shù)據(jù)和程序指令不予區(qū)分,,PC寄存器指向的存儲器單元,無論是ROM區(qū)還是RAM區(qū),,只要符合ARM指令的格式都可以執(zhí)行,,這就為系統(tǒng)自修改提供了可能。在應(yīng)用編程IAP(InApplicatAion Program)就是這樣的自修改程序,。它先在RAM存儲器中寫人數(shù)據(jù)值,,然后使PC指向該存儲段,把該段作為程序段來執(zhí)行,。很多ARM7芯片自帶IAP處理器,,應(yīng)用其自帶的IAP處理器可以方便地對其片內(nèi)集成的Flash存儲器進行在應(yīng)用編程,但幾乎所有的ARM核芯片均不支持片外IAP處理,,因為片外Flash存儲器是用戶選型的,,芯片生產(chǎn)廠家無法先知先覺,而不同F(xiàn)lash存儲器其編程時序也不盡相同,,導(dǎo)致芯片生產(chǎn)廠家無法提供通用的IAP代碼,。那么,如何對嵌入式系統(tǒng)的片外Flash存儲器進行在應(yīng)用編程呢?這里分兩種情況:一是普通代碼存放在片外單獨1片F(xiàn)lash中,,IAP代碼在另一片F(xiàn)lash中完成,,此時只要依據(jù)Flash的操作時序執(zhí)行IAP代碼,完成擦除或?qū)懭氩僮骷纯?。這種情況雖然簡單,,但應(yīng)用了2片F(xiàn)lash,;而IAP代碼很小,,一般完全可以集成到1片中,所以這里對這種情況不予考慮,。另一種情況是1片F(xiàn)lash中既要存儲普通代碼,,又要實現(xiàn)IAP。下面以Phnips公司的LPC2210 和 Silicon storage Technology 公司的SST39VFl60為例,,詳細(xì)討論這種情況IAP的解決方案,。
    
    1 硬件結(jié)構(gòu)
    
    1.1 LPC2210介紹
    
    Philips公司的LPC22lO是一款基于支持實時仿真和嵌入式跟蹤的16/32位ARM7TDMI-SCPU的微控制器。芯片采用144腳封裝,有16 KB片內(nèi)靜態(tài)RAM,,開放外部總線,;通過外部存儲器接口可將外部存儲器配置成4組,每組的容量高達16 Mb,,數(shù)據(jù)寬度8/16/32位均可,;具有多個32位定時器、8路lO位PWM輸出,、多個串行接口(包括2個16C550工業(yè)標(biāo)準(zhǔn)UART,、高速I2C接口和2個sPI接口)以及9個外部中斷、多達76個可承受5 V電壓的通用I/O口,,同時內(nèi)嵌實時時鐘和看門狗,,片內(nèi)外設(shè)功能豐富強大;片內(nèi)晶振頻率范圍l~30 MHz,,通過片內(nèi)PLL可實現(xiàn)最大為60 MHz的CPU工作頻率,,具有2種低功耗模式——空閑和掉電,通過外部中斷將處理器從掉電模式中喚醒,,并可通過個別使能/禁止外部功能來優(yōu)化功耗,。以上特性,使其特別適用于工業(yè)控制,、醫(yī)療系統(tǒng),、訪問控制和POS機,同時也非常適合于通信網(wǎng)關(guān)協(xié)議轉(zhuǎn)換器,,嵌入式軟Modem,,以及其他各種類型的應(yīng)用。
    
    1.2 SST39VFl60介紹
    
    Silicon StoraLge Technology公司的SST39VFl60是一個lM×16b的CMOS多功能Flash器件,,單電壓的讀和寫操作,,電壓范圍3.O~3.6 V,提供48腳TSOP和48腳TFBGA兩種封裝形式,。
    
    該器件主要操作包括讀,、字編程、扇區(qū)/塊擦除和芯片擦除操作,。擦除和字編程必須遵循一定的時序,,表l列出了扇區(qū)擦除和字編程過程及時序。擦除或編程操作過程中讀取觸發(fā)位DQ6將得到“1”和“O”的循環(huán)跳變,;而操作結(jié)束后讀DQ6,,得到的是不變的固定值。這是器件提供的寫操作狀態(tài)檢測軟件方法,。
    
    
    1.3 硬件連接
    SST39VF160作為系統(tǒng)的程序存儲器,,以LPC2210的CSO作為Flash的片選信號,,處理器配置Boot引腳為16位數(shù)據(jù)總線寬度后,上電可直接執(zhí)行SST39VFl60中代碼,。此Flash芯片為16位數(shù)據(jù)寬度,,無字節(jié)控制總線,所以應(yīng)用中不使用LPC2210的BLS引腳,。系統(tǒng)結(jié)構(gòu)示意圖如圖l所示,。
     
    
     
    2 軟件實現(xiàn)
    
    2.1 IAP實現(xiàn)要點分析
    
    在嵌入式應(yīng)用系統(tǒng)中,通常要求記錄一些現(xiàn)場的傳感,、交互輸入數(shù)據(jù),,通常把數(shù)據(jù)記錄在Flash存儲器中,以便下次上電能獲取以前的數(shù)據(jù),。如果系統(tǒng)程序和數(shù)據(jù)分開存儲,,那么只要對存放數(shù)據(jù)的Flash器件進行編程即可。然而大多數(shù)嵌入式系統(tǒng),,程序和需保存的數(shù)據(jù)都共存于同一Flash存儲器中,,那么是否也如前所述,可對Flash存儲器直接編程呢?理論和實踐都表明不可以,。先從理論上計算:LPC22lO允許的芯片核工作頻率(CCLK)范圍是10~60 MHz,,存儲器讀訪問長度由存儲器組配置寄存器BCFG中讀訪問的長度域控制WSTl控制,其最大可用長度為35個CCLK,,而SST39VFl60的扇區(qū)擦除典型時間為18 ms,。下面是計算算式:
    
    TRDmax=RDLenmax/CCLKmin=35/10×10一6=3.5 μs
    
    .TD=18 ms》3.5μs
    
    其中:TRDmax—最大讀訪問時間;
    
    RDLenmix——最大讀訪問可用長度,;
    
    CCLKmin——最小核工作時鐘頻率,;
    
    Tp——扇區(qū)擦除典型時間。
    
    算式得出扇區(qū)擦除典型時間遠(yuǎn)大于最大讀訪問時間,。這樣一來,,如果再給某Flash寫數(shù)據(jù),同時于其中預(yù)取指,,那么因F1ash在執(zhí)行命令期間,,對其他操作不響應(yīng),預(yù)取出的必定是其數(shù)據(jù)引腳上的不確定數(shù)據(jù),,預(yù)取指失敗,。實踐也表明,如果在程序執(zhí)行過程中,,對同一Flash進行扇區(qū)擦除,,必定引起預(yù)取指中斷,。
    
    為了解決在同一Flash芯片存放程序并IAP這一問題,,引進代碼重映射的思想,。所謂重映射就是代碼先自復(fù)制到指定存儲區(qū),然后跳轉(zhuǎn)到指定區(qū)的起點開始執(zhí)行,。這里,,lAP程序先自復(fù)制到LPC2210片內(nèi)SRAM中,然后跳轉(zhuǎn)到SRAM執(zhí)行l(wèi)AP代碼,。前面說過,,ARM7為馮·諾依曼結(jié)構(gòu),這就為IAP程序重映射提供了可能,。
    
    編寫可重映射代碼的關(guān)鍵是要解決程序中相對偏移的問題,,ARM7指令系列中涉及相對偏移的指令主要有LDR/STR以及跳轉(zhuǎn)指令。這里的解決方案是:凡涉及偏移值的指令通通采用基址變址尋址方式,,以PC寄存器作基址寄存器,,以立即數(shù)為變址,這樣當(dāng)程序塊整塊移動時,,要加載的數(shù)據(jù)或跳轉(zhuǎn)的地址與當(dāng)前Pc值的偏移值固定,,解決了相對偏移問題。
    
    2.2 扇區(qū)擦除
    
    事先編程在Flash中的程序先自復(fù)制到SRAM指定的位置,,然后,,賦PC為SRAM中扇區(qū)編程代碼段的起點ERASEPART。程序于SRAM中的ERASEPART起點開始執(zhí)行,,按照SST39VF160扇區(qū)擦除的時序要求開始擦除,。按照ARM公司提出的ATPCS規(guī)定,C語言程序調(diào)用匯編程序時,,寄存器R0一R3傳遞參數(shù),,返回值由寄存器RO傳遞原則,扇區(qū)擦除程序的一個參數(shù),,要擦除的扇區(qū)號,,由RO傳遞;返回參數(shù)置于R0,,扇區(qū)擦除成功返回“1”,,否則返回“0”。
    
    2.3 字編程
    
    程序于SRAM中的PROGRAMPART起點開始執(zhí)行,,按照SST39VFl60字編程的時序要求開始編程,。入口參數(shù)有三個,依次為編程地址,、數(shù)據(jù)起始地址,、編程數(shù)據(jù)長度。字編程成功返回“1”,,否則返回“0”,。
    
    3 結(jié)論
    
    在嵌入式應(yīng)用系統(tǒng)中,,IAP是極為有效的一種技術(shù)。根據(jù)本文提出的方案,,在實際應(yīng)用中只需針對選用的Flash,,更改特定的擦、寫操作代碼就可實現(xiàn)系統(tǒng)片外存儲器的在應(yīng)用編程,。文中提出的IAP代碼重入到SR—kM執(zhí)行的方法,,有效地解決了應(yīng)用無片內(nèi)程序存儲器的32位ARM處理器的嵌入式系統(tǒng)IAP難題,有很大的應(yīng)用價值,。


 

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。