<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è) > 網(wǎng)絡(luò )與存儲 > 設計應用 > 片外Flash存儲器IAP的一種方案

片外Flash存儲器IAP的一種方案

——
作者:中國人民解放軍防空兵指揮學(xué)院 劉憶輝 魏銀庫 鄒程 張軍偉 時(shí)間:2007-01-26 來(lái)源:《單片機與嵌入式系統應用》 收藏

引言

以arm芯片為處理器核的嵌入式應用系統,以其小體積、低功耗、低成本、高性能、豐富的片內資源以及對操作系統的廣泛支持,得到了人們越來(lái)越多的青睞。包括工業(yè)控制領(lǐng)域、無(wú)線(xiàn)通信領(lǐng)域、網(wǎng)絡(luò )應用、消費電子、成像和安全產(chǎn)品等,如今,arm微處理器及嵌入式技術(shù)的應用幾乎已經(jīng)滲透到了各個(gè)領(lǐng)域。其中,arm7作為arm微處理器系列中的一員,是低功耗的32位risc處理器。samsung公司的s3c4510b、philips公司的lpc20xx、lpc21xx、lpc22xx系列等都是arm7處理器。這些為數繁多的arm7處理器,因其片內外設不同而各擅所長(cháng),但都應用同樣的arm7tdmi核(或arm7tdmi-s核,這是arm7tdmi的綜合版本,這兩種核對處理器應用人員來(lái)說(shuō)沒(méi)有區別)??梢哉f(shuō),arm7tdmi是目前使用最為廣泛的32位嵌入式risc處理器。arm7tdmi核應用馮·諾依曼結構,處理器使用的中數據和程序指令不予區分,pc寄存器指向的單元,無(wú)論是rom區還是ram區,只要符合arm指令的格式都可以執行,這就為系統自修改提供了可能。在應用編程iap(in application program)就是這樣的自修改程序。它先在ram中寫(xiě)入數據值,然后使pc指向該存儲段,把該段作為程序段來(lái)執行。很多arm7芯片自帶iap處理器,應用其自帶的iap處理器可以方便地對其片內集成的flash存儲器進(jìn)行在應用編程,但幾乎所有的arm核芯片均不支持片外iap處理,因為片外flash存儲器是用戶(hù)選型的,芯片生產(chǎn)廠(chǎng)家無(wú)法先知先覺(jué),而不同flash存儲器其編程時(shí)序也不盡相同,導致芯片生產(chǎn)廠(chǎng)家無(wú)法提供通用的iap代碼。那么,如何對嵌入式系統的片外flash存儲器進(jìn)行在應用編程呢?這里分兩種情況:一是普通代碼存放在片外單獨1片flash中,iap代碼在另一片flash中完成,此時(shí)只要依據flash的操作時(shí)序執行iap代碼,完成擦除或寫(xiě)入操作即可。這種情況雖然簡(jiǎn)單,但應用了2片flash;而iap代碼很小,一般完全可以集成到1片中,所以這里對這種情況不予考慮,另一種情況是1片flash中既要存儲普通代碼,又要實(shí)現iap。下面以philips公司的lpc2210和silicon storage technology公司的sst39vf160為例,詳細討論這種情況iap的解決方案。

1 硬件結構

1.1 lpc2210介紹

philips公司的lpc2210是一款基于支持實(shí)時(shí)仿真和嵌入式跟蹤的16/32位arm7tdmi-s cpu的微控制器。芯片采用144腳封裝,有16kb片內靜態(tài)ram,開(kāi)放外部總線(xiàn);通過(guò)外部存儲器接口可將外部存儲器配置成4組,每組的容量高達16mb,數據寬度8/16/32位均可;具有多個(gè)32位定時(shí)器、8路10位pwm輸出、多個(gè)串行接口(包括2個(gè)16c550工業(yè)標準uart、高速i2c接口和2個(gè)spi接口)以及9個(gè)外部中斷、多達76個(gè)可承受5v電壓的通用i/o口,同時(shí)內嵌實(shí)時(shí)時(shí)鐘和看門(mén)狗,片內外設功能豐富強大;片內晶振頻率范圍1-30mhz,通過(guò)片內pll可實(shí)現最大為60mhz的cpu工作頻率,具有2種低功耗模式--空閑和掉電,通過(guò)外部中斷將處理器從掉電模式中喚醒,并可通過(guò)個(gè)別使能/禁止外部功能來(lái)優(yōu)化功耗。以上特性,使其特別適用于工業(yè)控制、醫療系統、訪(fǎng)問(wèn)控制和pos機,同時(shí)也非常適合于通信網(wǎng)關(guān)協(xié)議轉換器、嵌入式軟modem,以及其他各種類(lèi)型的應用。

1.2 sst39vf160介紹

silicon storage technology公司的sst39vf160是一個(gè)1m×16b的coms多功能flash器件,單電壓的讀和寫(xiě)操作,電壓范圍3.0-3.6v,提供48腳tsop和48腳tfbga兩種封裝形式。

該器件主要操作包括讀、寫(xiě)編程、扇區/塊擦除和芯片擦除操作。擦除和字編程必須遵循一定的時(shí)序,表1列出了扇區擦除和字編程過(guò)程及時(shí)序。擦除或編程操作過(guò)程中讀取觸發(fā)位dq6將得到"1"和"0"的循環(huán)跳變;而操作結束后讀dq6,得到的是不變的固定值。這是器件提供的寫(xiě)操作狀態(tài)檢測軟件方法。

1.3 硬件連接

sst39vf160作為系統的程序存儲器,以lpc2210的cs0作為flash的片選信號,處理器配置boot引腳為16位數據總線(xiàn)寬度后,上電可直接執行sst39vf160中代碼。此flash芯片為16位數據寬度,無(wú)字節控制總線(xiàn),所以應用中不使用lpc2210的bls引腳。系統結構示意圖如圖1所示。

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

2.軟件實(shí)現

2.1 iap實(shí)現要點(diǎn)分析

在嵌入式應用系統中,通常要求記錄一些現場(chǎng)的傳感、交互輸入數據,通常把數據記錄在flash存儲器中,以便下次上電能獲得以前的數據。如果系統程序和數據分開(kāi)存儲。那么只要對存放數據的flash器件進(jìn)行編程即可。然而大多數嵌入式系統,程序和需保存的數據都共存于同一flash存儲器中,那么是否也如前所述,可對flash存儲器直接編程呢?理論和實(shí)踐都表明不可以。

先從理論上計算:lpc2210允許的芯片核工作頻率(cclk)范圍是10-60mhz,存儲器讀訪(fǎng)問(wèn)長(cháng)度由存儲器組配置寄存器bcfg中讀訪(fǎng)問(wèn)的長(cháng)度域控制wst1控制,其最大可用長(cháng)度為35個(gè)cclk,而sst39vf160的扇區擦除典型時(shí)間為18ms。下面是計算算式:

trdmax=rdlenmax/cclkmin=35/10×10-6=3.5μs
tp=18ms>>3.5μs
其中:trdmax--最大讀訪(fǎng)問(wèn)的時(shí)間;
rdlenmax--最大讀訪(fǎng)問(wèn)可用長(cháng)度;
cclkmin--最小核工作時(shí)鐘頻率;
tp--扇區擦除典型時(shí)間。

算式得出扇區擦除典型時(shí)間遠大于最大讀訪(fǎng)問(wèn)時(shí)間。這樣一來(lái),如果再給某flash寫(xiě)數據,同時(shí)于其中預取指,那么因flash執行命令期間,對其他操作不響應,預取出的必定是其數據引腳上的不確定數據,預取指失敗。實(shí)踐也表現,如果在程序執行過(guò)程中,對同一flash進(jìn)行扇區擦除,必定引起預取指中斷。

為了解決在同一flash芯片存放程序并iap這一問(wèn)題,引進(jìn)代碼重映射的思想。所謂重映射就是代碼先自復制到制定存儲區,然后跳轉到制定區的起點(diǎn)開(kāi)始執行。這里,iap程序先自復制到lpc2210片內sram中,然后跳轉到sram執行iap代碼。前面過(guò)說(shuō),arm7為馮·諾依曼結構,這就為iap程序重映射提供了可能。

編寫(xiě)可重映射代碼的關(guān)鍵是要解決程序中相對偏移的問(wèn)題,arm7指令系列中涉及相對偏移的指令主要有ldr/str以跳轉指令。這里的解決方案是:凡涉及偏移值的指令通通采用基址變址尋址方式,以pc寄存器作基址寄存器,以立即數為變址,這樣當程序塊整塊移動(dòng)時(shí),要加載的數據或跳轉的地址與當前pc值的偏移值固定,解決了相對偏移問(wèn)題。

2.2 扇區擦除

事先編程在flash中的程序前自復制到sram制定的位置,然后,賦pc為sram中扇區編程代碼段的起點(diǎn)erasepart。程序于sram中的erasepart起點(diǎn)開(kāi)始執行,按照sst39vf160扇區擦除的時(shí)序要求開(kāi)始擦除。按照arm公司提出的atpcs規定,c語(yǔ)言程序調用匯編程序時(shí),寄存器r0-r3傳遞參數,返回值由寄存器r0傳遞原則,扇區擦除程序的一個(gè)參數,要擦除的扇區號,由r0傳遞;返回參數置于r0,扇區擦除成功返回"1",否則返回"0"。

2.3 字編程

程序于sram中的programpart起點(diǎn)開(kāi)始執行,按照sst39vf160字編程的時(shí)序要求開(kāi)始編程。入口參數有三個(gè),一次為編程地址、數據起始地址、編程數據長(cháng)度。字編程成功返回"1",否則返回"0"。

(編制注:擦除和編程程序見(jiàn)本刊網(wǎng)站www.mesnet.com.cn。)

3.結論

在嵌入式應用系統中,iap是極為有效的一種技術(shù)。根據本文提出的方案,在實(shí)際應用中只需針對選用的flash,更改特定的擦、寫(xiě)操作代碼就可實(shí)現系統片外存儲器的在應用編程。本文提出的iap代碼重入到sram執行的方法,有效地解決了應用無(wú)片內程序存儲器的32位arm處理器的嵌入式系統iap難題,有很大的應用價(jià)值。

pos機相關(guān)文章:pos機原理




關(guān)鍵詞: 存儲器

評論


相關(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>