大容量NAND FLASH在ARM嵌入式系統中的設計與實現

來源:互聯網
上載者:User
1 引 言

      隨著嵌人式系統在數位相機、數字攝像機、行動電話、mp3音樂播放器等行動裝置中越來越廣泛的應用,FLASH儲存空間已經逐步取代其他半導體儲存元件,成為嵌入式系統中主要資料和程式載體。

      FLASH儲存空間又稱快閃記憶體,是一種可線上多次擦除的非易失性儲存空間,即掉電後資料不會丟失。FLASH儲存空間還具有體積小、功耗低、抗振性強等優點,是嵌入式系統的首選存放裝置。

      NAND和NOR FLASH是現在市場上兩種主要的非易失快閃記憶體晶片,這兩種類型的FLASH區別在於:

      NOR類型FLASH可以按照位元組訪問,所以存放在FLASH裡的程式可以直接執行,而NAND類型FLASH是串列訪問的,需要先把程式讀取到記憶體然後再從記憶體中運行。與NOR型相比,NAND型快閃記憶體的優點是容量大,但是NAND型的速度比較慢,因為他的I/O連接埠只有8(或16)個,要完成地址和資料的傳輸就必需讓這些訊號輪流傳送。NAND型FLASH具有極高的單元密度,容量可以比較大,價格相對便宜。本文採用Samsung公司的NAND型FLASH存放裝置K9F2808U0C。

      2 系統硬體結構及介面電路

      2.1 ARM晶片介紹

      ARM公司自1990年正式成立以來,在32位RISC(Reduced Instruction Set Computer)CPU開發領域不斷取得突破,目前已經佔有75%以上的32位RISC嵌入式產品市場。在低功耗、低成本的嵌人式應用領域確立了市場領導地位。 

      PHILIPS公司的LPC2210是基於一個支援即時模擬和跟蹤的32位ARM7TDMI-STMCPU的微控制器,片內128位寬度的儲存空間介面和獨特的加速結構使32位代碼能夠在最大時鐘頻率下運行。LPC2210極低的功耗、多個32位定時器、8路10位ADC以及9個外部中斷使其特別適用於工業控制、醫學系統、存取控制和POS機。由於內建了寬範圍的串列通訊介面,他們也非常適合於通訊網關、協議轉換器、嵌入式軟MODEM以及其他各種類型的
應用。

      2.2 K9F2808U0C晶片的結構和特點

      K9F2808U0C是Samsung公司生產的NAND型FLASH儲存空間,其功能框圖1所示。

      K9F2808U0C儲存容量為132 Mb,其中主要資料區為128 Mb,輔助資料區為4 Mb,工作電壓為2.7~3.6 V,I/O連接埠寬度為8 b。片內寫控制自動實現編程和擦除所有功能,包括內部校正、脈衝的周期和資料冗餘。

      晶片的儲存空間是按照塊和頁的概念來組織的,一個晶片分為1 024個塊,每個塊有32頁,每一頁有528 B。528 B中分為512 B的資料區和16個位元組的空閑區,空閑區用於存放ECC代碼、壞塊資訊和檔案系統相關代碼。一個528 B的資料寄存器作為資料緩衝單元,用來實現I/0緩衝和儲存空間之間的資料轉送。晶片的存放裝置陣列組織2所示。

      使用NAND型FLASH的關鍵技術之一是儲存空間的管理。Samsung公司的NAND FLASH儲存空間有一些初始無效塊(包含一個或多個壞位的儲存塊),製造商不保證這些塊的可靠性。NAND FLASH容許成品中有壞塊存在,這是採用NAND技術所特有的現象。壞塊的存在並不影響有效塊的效能。但是,系統級的設計必須能夠用地址映射把這些壞塊屏蔽掉。晶片在出廠時,除儲存壞塊資訊的地區外,其他部分一律被擦除(值為0xFF),對壞塊的讀操作是允許的,但不推薦進行寫和擦除操作,以免由於結構方面的原因使鄰近的塊也失效。系統設計時必鬚根據初始的壞塊資訊識別出壞塊,並建立壞塊列表。進行寫或擦除操作時將欲操作塊的地址與壞塊地址表的地址相比較,若是壞塊則應跳過。為了提高儲存空間的效率,單個位元據錯誤引起的讀寫失敗都可以用ECC(校錯和錯誤修正)方法處理。

      晶片在使用過程中,可能有新壞塊的產生,為了系統的可靠性,必須對此情況加以考慮。在資料寫入或塊擦除操作後,如果讀狀態寄存器出現錯誤,則表示塊內有壞頁存在,也即表明此塊已壞,因為塊內壞頁的存在並不影響其他頁的讀寫,這時可採用塊替換操作來把頁內有用資料轉移到其他空閑塊內,並把壞塊資訊存入壞塊表中。

      2.3 K9F2808U0C與LPC2210的串連

      K9F2808U0C與LPC2210的串連3所示,使用8位元據匯流排D0~D7與K9F2808U0C的I/O0~I/O7引腳相連,使用資料匯流排來發送地址、資料和命令。K9F2808U0C的片選訊號由CS3控制,即使用LPC2210的外部儲存空間介面的Bank3地址空間,而CLE,ALE訊號分別由A0,A1控制,所以K9F2808U0C的操作地址如下:

      3 讀寫操作流程

      K9F2808U0C的頁編程操作流程圖4所示。

      首先向I/O寫人編程指令80H,然後使用3個刻度寫入目的地址(A0~A23),接著向I/O寫入資料。資料發送完成後,寫入指令10H啟動頁編程,此時晶片內部的邏輯電路將進行頁擦除和資料編程操作。微控制器可以讀狀態指令70H來讀取狀態寄存器的值,若D6位為1,則表明寫操作完成。

      寫操作完成後,通過讀取狀態寄存器的D0位判斷編程是否成功,若D0位為0,則表示編程成功;否則表示編程失敗。

      K9F2808U0C的塊擦除和讀資料操作5所示:對於K9F2808U0C的擦除是以塊為單位,擦除時首先寫入塊擦除命令60H,然後輸入要擦除塊的地址,再寫入指令DoH啟動塊擦除。微控制器可以讀取狀態指令70H來讀取狀態寄存器的值,若D6位為1,則表明擦除完成。寫操作完成後,通過讀取狀態寄存器的D0位來判斷擦除是否成功。

      對於K9F2808U0C的讀資料操作是以頁為單位,讀資料時首先寫入讀資料命令00H,然後輸入要讀取頁的地址,接著從資料寄存器中讀取資料,最後進行ECC校正。

      4 在μC/OS即時作業系統下的實現和效能驗證

      μC/OS是一個多任務的即時作業系統,專為嵌入式應用而設計,可用於各類8位、16位和32位單片機或DSP,已有10餘年應用史,其安全性和即時性得到了廣泛的認同,在嵌入式領域發揮著重要作用。該作業系統公開了他的即時性核心源碼,同時提供了較多的應用介面函數。通過在其即時核心的基礎上做少量的修改,便可將對NAND FLASH的操作移植到μC/OS中,利用OSTa-skCreateExt()函數建立任務並檢查堆棧空間,利用PC-ElapsedInit()初始化時間測量功能。共建立5個任務,分別為空白閑任務、統計任務、頁編程任務、塊擦除任務和讀資料任務,程式碼示意如下:

      5 結 語

      以Samsung NAND FLASH器件K9F2808U0C為例,通過PHILIPS LPC2210實現對儲存空間的器件操作,以μC/OS即時作業系統為平台完成測試實驗,將得到的實驗結果與Satnsung公司的K9F2808UOC FLASH Memory手冊進行對比,表明該設計滿足設計要求,達到預期目標。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.