本文旨在研究一種的數據存儲容量達512MB高速數據記錄儀,它可以用于多路信號采集系統中。重點研究在嵌入式linux系統平臺的架構下基于NandFlash的存儲技術。
引言
FLASH是一種不揮發性內存,在無電流供應的條件下也能夠長久地保持數據,相對于傳統的存儲介質具有*的優勢。目前主要的閃存分為兩類:In首先開發的NORflash和東芝發布的NandFlash。
NorFLASH的特點是芯片內執行。應用程序可以直接在閃存內運行。不必再把代碼讀到系統RAM中。NOR的傳輸效率很高,但是寫入和擦除速度很低。Nandflash存儲單元的讀寫是以頁和塊為單位來進行,這種結構zui大的優點在于容量可以做得很大,NAND閃存的成本較低,有利于大規模普及。主要功能是存儲資料。故而現在碼相機閃存卡和MP3播放器中存儲設備幾乎全部是NandFlash。現在大部分的嵌入式設備廠商出于成本的考慮都選擇了NandFlash作為存儲設備。這樣增加了軟件設計的復雜度,降低了系統效率而且也限制了Flash容量。
結合兩類閃存的優缺點,本文中我們選擇NandFlash作為數據記錄儀上午數據存儲器,norflash作為數據記錄儀的程序存儲器。
圖1:系統整體結構圖圖
數據記錄儀設計整體包括兩塊,其部分是數據采集模塊一部分是數據存儲模塊,用TLC2578芯片來實現數據采集AD轉換,系統的調度核心是ARM處理器,在這里使用S3c2440,ARM主要負責核心處理和控制。存儲器負責程序和數據的存儲,其中NandFLASH存儲數據文件,NorFlash負責存儲bootloader,操作系統內核和文件系統,SDRAM存儲系統運行時的程序和數據,ARM通過GPIO連接相關繼電器、觸發設備、輸出電壓控制設備、以及特定設備采樣A/D并進行驅動。
S3C2440是三星公司的ARM920T的ARM控制器:支持32b的高速AMBA總線接口;帶有MMU,可以進行Linux操作系統的移植;支持大頁NAND閃存控制器。NandFlash芯片選用K9F4G08U0M,這是Samsung生產的512MB的NANDFlash存儲器。內部存儲結構為(2K+64)字節×32頁×4096塊,NANDFlash接口信號比較少,數據線寬度只有8bit,CLE和ALE兩個引腳信號用來區分總線上的數據類型,沒有地址總線。NorFlash采用16MX16位的E28F128J3A,NORFlash接口與系統總路線*匹配,16個數據輸入輸出引腳,可以連接在系統總線上。NORFlash有三個芯片片選引腳信號,選用作為片選信號,與處理器引腳相連。BYTE接高電平,表示Flash在16位數據傳輸模式下。
系統軟件組成
本系統的軟件部分包括應用程序和系統程序,應用程序主要是AD采集和讀寫Flash,見圖2,而系統程序就是應用程序工作的軟件平臺。它由以下部分組成:系統引導程序、嵌入式操作系統linux內核、文件系統。
系統引導程序負責將操作系統內核固化到Flash中和系統初始化工作,然后將系統控制權交給操作系統。在本文里我們使用uboot作為系統引導程序。嵌入式操作系統內核是嵌入式系統加電運行后的管理平臺,負責實時性任務和多任務的管理,這里選擇嵌入式linux內核。
文件系統是對一個存儲設備上的數據和元數據進行組織的機制。Linux文件系統接口實現為分層的體系結構,從而將用戶接口層、文件系統實現和操作存儲設備的驅動程序分隔開。JFFS2是專門針對嵌入式系統中的Flash存儲器的特性而設計的一種日志文件系統。YAFFS2支持大頁面的NAND設備,并且對大頁面的NAND設備做了優化。
軟件平臺固化在NorFlash中。根據軟件平臺的內容對NorFlash的地址空間進行分區,這里分三個區,分別存放bootloader、Linux內核和文件系統。
NandFlash驅動設計
NandFlash驅動程序框架
按照linux下驅動編寫規范編寫nandflash驅動,其實主要工作就是實現下面這個結構體中的函數。
s3c2440_nand_drive這個結構體用于向內核注冊NandFlash設備,它會被platform_driver_register函數調用到。其中s3c2440_nand_probe是zui重要的,它完成對nand設備的探測。
Nand_scan是在初始化nand的時候對nand進行的一步非常好重要的操作,在nand_scan中會對我們所寫的關于特定芯片的讀寫函數重載到nand_chip結構中去,并會將mtd_info結構體中的函數用nand的函數來重載,實現了mtd到底層驅動的。并且在nand_scan函數中會通過讀取nand芯片的設備號和廠家號自動在芯片列表中尋找相應的型號和參數,并將其注冊進去。
NandFlash讀頁操作函數
NandFlash讀數據操作以頁為單位,讀數據首先寫入讀數據命令00H(如圖3),然后輸入要讀取頁的地址,接著從數據寄存器中讀取數據,zui后進行ECC校驗。
NandFlash寫操作
寫操作其實就是對頁進行編程命令。見圖4,首先寫入80h開始編程模式,接下來寫入地址和數據;zui后寫入10h表示編程結束。程序如下:
圖3:讀NandFlash流程
圖4:寫NandFlash流程
NANDFlash塊擦除
本論文所用到的NandFlash的塊大小是32X(2k+64)Byte,整塊擦除。命令代碼流程:首先寫入60h進入擦寫模式,然后輸入塊地址,接下來寫入D0h,表示擦寫結束。
測試結果
在測試NandFlash的讀寫速度時,我們通過TFTP將數據下載到RAM中,NandFlash進行讀、編程、擦寫測試。這樣可以比較真實的測試NandFlash的讀寫速度,測試結果表明從NandFlash讀4MBbytes的數據所用的時間是3886ms,向NandFlash寫4Mbytes數據所用的時間是14026ms,擦除NandFlash中的4MByte需要的時間是6毫秒。這個速度還是比較理想的,完成對32路AD采集過來數據的實時存儲是足夠的。而且512MByte的數據存儲空間對于數據記錄儀而言是一個非常大的容量。
結論
測試結果表明數據記錄儀存儲速度是比較理想的,完成對AD采集過來數據的實時存儲是足夠的。而且512MByte的數據存儲空間對于數據記錄儀而言是一個非常大的容量。