1 引 言 隨著嵌人式系統(tǒng)在數(shù)碼相機(jī)、數(shù)字?jǐn)z像機(jī)、移動(dòng)電話、mp3音樂播放器等移動(dòng)設(shè)備中越來越廣泛的應(yīng)用,F(xiàn)LASH存儲(chǔ)器已經(jīng)逐步取代其他半導(dǎo)體存儲(chǔ)元件,成為嵌入式系統(tǒng)中主要數(shù)據(jù)和程序載體。FLASH存儲(chǔ)器又稱閃存,是一種可在線多次擦除的非易失性存儲(chǔ)器,即掉電后數(shù)據(jù)不會(huì)丟失。FLASH存儲(chǔ)器還具有體積小、功耗低、抗振性強(qiáng)等優(yōu)點(diǎn),是嵌入式系統(tǒng)的首選存儲(chǔ)設(shè)備。 NAND和NOR FLASH是現(xiàn)在市場(chǎng)上兩種主要的非易失閃存芯片,這兩種類型的FLASH區(qū)別在于: NOR類型FLASH可以按照字節(jié)訪問,所以存放在FLASH里的程序可以直接執(zhí)行,而NAND類型FLASH是串行訪問的,需要先把程序讀取到內(nèi)存然后再從內(nèi)存中運(yùn)行。與NOR型相比,NAND型閃存的優(yōu)點(diǎn)是容量大,但是NAND型的速度比較慢,因?yàn)樗腎/O 端口只有8(或16)個(gè),要完成地址和數(shù)據(jù)的傳輸就必需讓這些信號(hào)輪流傳送。NAND型FLASH具有極高的單元密度,容量可以比較大,價(jià)格相對(duì)便宜。本文采用Samsung公司的NAND型FLASH存儲(chǔ)設(shè)備K9F2808U0C。 2 系統(tǒng)硬件結(jié)構(gòu)及接口電路 2.1 ARM芯片介紹 ARM公司自1990年正式成立以來,在32位RISC(Reduced Instruction Set Computer)CPU開發(fā)領(lǐng)域不斷取得突破,目前已經(jīng)占有75%以上的32位RISC嵌入式產(chǎn)品市場(chǎng)。在低功耗、低成本的嵌人式應(yīng)用領(lǐng)域確立了市場(chǎng)領(lǐng)導(dǎo)地位。 PHILIPS公司的LPC2210是基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的32位ARM7TDMI-STMCPU的微控制器,片內(nèi)128位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu)使32位代碼能夠在最大時(shí)鐘頻率下運(yùn)行。LPC2210極低的功耗、多個(gè)32位定時(shí)器、8路10位ADC以及9個(gè)外部中斷使其特別適用于工業(yè)控制、醫(yī)療系統(tǒng)、訪問控制和POS機(jī)。由于內(nèi)置了寬范圍的串行通信接口,他們也非常適合于通信網(wǎng)關(guān)、協(xié)議轉(zhuǎn)換器、嵌入式軟MODEM以及其他各種類型的應(yīng)用。 2.2 K9F2808U0C芯片的結(jié)構(gòu)和特點(diǎn) K9F2808U0C是Samsung公司生產(chǎn)的NAND型FLASH存儲(chǔ)器,其功能框圖如圖1所示。 K9F2808U0C存儲(chǔ)容量為132 Mb,其中主數(shù)據(jù)區(qū)為128 Mb,輔助數(shù)據(jù)區(qū)為4 Mb,工作電壓為2.7~3.6 V,I/O端口寬度為8 b。片內(nèi)寫控制自動(dòng)實(shí)現(xiàn)編程和擦除所有功能,包括內(nèi)部校驗(yàn)、脈沖的周期和數(shù)據(jù)冗余。 芯片的存儲(chǔ)空間是按照塊和頁的概念來組織的,一個(gè)芯片分為1 024個(gè)塊,每個(gè)塊有32頁,每一頁有528 B。528 B中分為512 B的數(shù)據(jù)區(qū)和16個(gè)字節(jié)的空閑區(qū),空閑區(qū)用于存放ECC代碼、壞塊信息和文件系統(tǒng)相關(guān)代碼。一個(gè)528 B的數(shù)據(jù)寄存器作為數(shù)據(jù)緩沖單元,用來實(shí)現(xiàn)I/0緩沖和存儲(chǔ)器之間的數(shù)據(jù)傳輸。芯片的存儲(chǔ)陣列組織如圖2所示。 使用NAND型FLASH的關(guān)鍵技術(shù)之一是存儲(chǔ)空間的管理。Samsung公司的NAND FLASH存儲(chǔ)器有一些初始無效塊(包含一個(gè)或多個(gè)壞位的存儲(chǔ)塊),制造商不保證這些塊的可靠性。NAND FLASH容許成品中有壞塊存在,這是采用NAND技術(shù)所特有的現(xiàn)象。壞塊的存在并不影響有效塊的性能。但是,系統(tǒng)級(jí)的設(shè)計(jì)必須能夠用地址映射把這些壞塊屏蔽掉。芯片在出廠時(shí),除保存壞塊信息的區(qū)域外,其他部分一律被擦除(值為0xFF),對(duì)壞塊的讀操作是允許的,但不推薦進(jìn)行寫和擦除操作,以免由于結(jié)構(gòu)方面的原因使鄰近的塊也失效。系統(tǒng)設(shè)計(jì)時(shí)必須根據(jù)初始的壞塊信息識(shí)別出壞塊,并建立壞塊列表。進(jìn)行寫或擦除操作時(shí)將欲操作塊的地址與壞塊地址表的地址相比較,若是壞塊則應(yīng)跳過。為了提高存儲(chǔ)空間的效率,單個(gè)位數(shù)據(jù)錯(cuò)誤引起的讀寫失敗都可以用ECC(校錯(cuò)和糾錯(cuò))方法處理。 芯片在使用過程中,可能有新壞塊的產(chǎn)生,為了系統(tǒng)的可靠性,必須對(duì)此情況加以考慮。在數(shù)據(jù)寫入或塊擦除操作后,如果讀狀態(tài)寄存器出現(xiàn)錯(cuò)誤,則表示塊內(nèi)有壞頁存在,也即表明此塊已壞,因?yàn)閴K內(nèi)壞頁的存在并不影響其他頁的讀寫,這時(shí)可采用塊替換操作來把頁內(nèi)有用數(shù)據(jù)轉(zhuǎn)移到其他空閑塊內(nèi),并把壞塊信息存入壞塊表中。 2.3 K9F2808U0C與LPC2210的連接 K9F2808U0C與LPC2210的連接如圖3所示,使用8位數(shù)據(jù)總線D0~D7與K9F2808U0C的I/O0~I(xiàn)/O7引腳相連,使用數(shù)據(jù)總線來發(fā)送地址、數(shù)據(jù)和命令。K9F2808U0C的片選信號(hào)由CS3控制,即使用LPC2210的外部存儲(chǔ)器接口的Bank3地址空間,而CLE,ALE信號(hào)分別由A0,A1控制,所以K9F2808U0C的操作地址如下: 3 讀寫操作流程 K9F2808U0C的頁編程操作流程圖如圖4所示。 首先向I/O寫人編程指令80H,然后使用3個(gè)時(shí)鐘周期寫入目的地址(A0~A23),接著向I/O寫入數(shù)據(jù)。數(shù)據(jù)發(fā)送完成后,寫入指令10H啟動(dòng)頁編程,此時(shí)芯片內(nèi)部的邏輯電路將進(jìn)行頁擦除和數(shù)據(jù)編程操作。微控制器可以讀狀態(tài)指令70H來讀取狀態(tài)寄存器的值,若D6位為1,則表明寫操作完成。 寫操作完成后,通過讀取狀態(tài)寄存器的D0位判斷編程是否成功,若D0位為0,則表示編程成功;否則表示編程失敗。 K9F2808U0C的塊擦除和讀數(shù)據(jù)操作如圖5所示:對(duì)于K9F2808U0C的擦除是以塊為單位,擦除時(shí)首先寫入塊擦除命令60H,然后輸入要擦除塊的地址,再寫入指令DoH啟動(dòng)塊擦除。微控制器可以讀取狀態(tài)指令70H來讀取狀態(tài)寄存器的值,若D6位為1,則表明擦除完成。寫操作完成后,通過讀取狀態(tài)寄存器的D0位來判斷擦除是否成功。 對(duì)于K9F2808U0C的讀數(shù)據(jù)操作是以頁為單位,讀數(shù)據(jù)時(shí)首先寫入讀數(shù)據(jù)命令00H,然后輸入要讀取頁的地址,接著從數(shù)據(jù)寄存器中讀取數(shù)據(jù),最后進(jìn)行ECC校驗(yàn)。 4 在μC/OS實(shí)時(shí)操作系統(tǒng)下的實(shí)現(xiàn)和性能驗(yàn)證 μC/OS是一個(gè)多任務(wù)的實(shí)時(shí)操作系統(tǒng),專為嵌入式應(yīng)用而設(shè)計(jì),可用于各類8位、16位和32位單片機(jī)或DSP,已有10余年應(yīng)用史,其安全性和實(shí)時(shí)性得到了廣泛的認(rèn)同,在嵌入式領(lǐng)域發(fā)揮著重要作用。該操作系統(tǒng)公開了他的實(shí)時(shí)性內(nèi)核源碼,同時(shí)提供了較多的應(yīng)用接口函數(shù)。通過在其實(shí)時(shí)內(nèi)核的基礎(chǔ)上做少量的修改,便可將對(duì)NAND FLASH的操作移植到μC/OS中,利用OSTa-skCreateExt()函數(shù)創(chuàng)建任務(wù)并檢查堆棧空間,利用PC-ElapsedInit()初始化時(shí)間測(cè)量功能。共建立5個(gè)任務(wù),分別為空閑任務(wù)、統(tǒng)計(jì)任務(wù)、頁編程任務(wù)、塊擦除任務(wù)和讀數(shù)據(jù)任務(wù),程序代碼示意如下: 5 結(jié) 語 以Samsung NAND FLASH器件K9F2808U0C為例,通過PHILIPS LPC2210實(shí)現(xiàn)對(duì)存儲(chǔ)器的器件操作,以μC/OS實(shí)時(shí)操作系統(tǒng)為平臺(tái)完成測(cè)試實(shí)驗(yàn),將得到的實(shí)驗(yàn)結(jié)果與Satnsung公司的K9F2808UOC FLASH Memory手冊(cè)進(jìn)行對(duì)比,表明該設(shè)計(jì)滿足設(shè)計(jì)要求,達(dá)到預(yù)期目標(biāo)。 |