摘要:現(xiàn)今嵌入式存儲產(chǎn)品已滲透進(jìn)人們生活工作中的方方面面,從atm機到手持通訊設(shè)備。社會對嵌入式產(chǎn)品的性能也有越來越高的要求:大容量,高速度,斷電保護(hù),體積限制等等。當(dāng)前數(shù)據(jù)記錄儀的容量和速度普遍偏小。本文旨在研究一種的數(shù)據(jù)存儲容量達(dá)512mb高速數(shù)據(jù)記錄儀,它可以用于多路信號采集系統(tǒng)中。重點研究在嵌入式linux系統(tǒng)平臺的架構(gòu)下基于nandflash的存儲技術(shù)。
引言
flash是一種不揮發(fā)性內(nèi)存,在無電流供應(yīng)的條件下也能夠長久地保持?jǐn)?shù)據(jù),相對于傳統(tǒng)的存儲介質(zhì)具有*的優(yōu)勢。目前主要的閃存分為兩類:in首先開發(fā)的norflash和東芝發(fā)布的nandflash。
norflash的特點是芯片內(nèi)執(zhí)行。應(yīng)用程序可以直接在閃存內(nèi)運行。不必再把代碼讀到系統(tǒng)ram中。nor的傳輸效率很高,但是寫入和擦除速度很低。nandflash存儲單元的讀寫是以頁和塊為單位來進(jìn)行,這種結(jié)構(gòu)zui大的優(yōu)點在于容量可以做得很大,nand閃存的成本較低,有利于大規(guī)模普及。主要功能是存儲資料。故而現(xiàn)在碼相機閃存卡和mp3播放器中存儲設(shè)備幾乎全部是nandflash?,F(xiàn)在大部分的嵌入式設(shè)備廠商出于成本的考慮都選擇了nandflash作為存儲設(shè)備。這樣增加了軟件設(shè)計的復(fù)雜度,降低了系統(tǒng)效率而且也限制了flash容量。
結(jié)合兩類閃存的優(yōu)缺點,本文中我們選擇nandflash作為數(shù)據(jù)記錄儀上午數(shù)據(jù)存儲器,norflash作為數(shù)據(jù)記錄儀的程序存儲器。
圖1:系統(tǒng)整體結(jié)構(gòu)圖圖
數(shù)據(jù)記錄儀設(shè)計整體包括兩塊,其部分是數(shù)據(jù)采集模塊一部分是數(shù)據(jù)存儲模塊,用tlc2578芯片來實現(xiàn)數(shù)據(jù)采集ad轉(zhuǎn)換,系統(tǒng)的調(diào)度核心是arm處理器,在這里使用s3c2440,arm主要負(fù)責(zé)核心處理和控制。存儲器負(fù)責(zé)程序和數(shù)據(jù)的存儲,其中nandflash存儲數(shù)據(jù)文件,norflash負(fù)責(zé)存儲bootloader,操作系統(tǒng)內(nèi)核和文件系統(tǒng),sdram存儲系統(tǒng)運行時的程序和數(shù)據(jù),arm通過gpio連接相關(guān)繼電器、觸發(fā)設(shè)備、輸出電壓控制設(shè)備、以及特定設(shè)備采樣a/d并進(jìn)行驅(qū)動。
s3c2440是三星公司的arm920t的arm控制器:支持32b的高速amba總線接口;帶有mmu,可以進(jìn)行l(wèi)inux操作系統(tǒng)的移植;支持大頁nand閃存控制器。nandflash芯片選用k9f4g08u0m,這是samsung生產(chǎn)的512mb的nandflash存儲器。內(nèi)部存儲結(jié)構(gòu)為(2k+64)字節(jié)×32頁×4096塊,nandflash接口信號比較少,數(shù)據(jù)線寬度只有8bit,cle和ale兩個引腳信號用來區(qū)分總線上的數(shù)據(jù)類型,沒有地址總線。norflash采用16mx16位的e28f128j3a,norflash接口與系統(tǒng)總路線*匹配,16個數(shù)據(jù)輸入輸出引腳,可以連接在系統(tǒng)總線上。norflash有三個芯片片選引腳信號,選用作為片選信號,與處理器引腳相連。byte接高電平,表示flash在16位數(shù)據(jù)傳輸模式下。
系統(tǒng)軟件組成
本系統(tǒng)的軟件部分包括應(yīng)用程序和系統(tǒng)程序,應(yīng)用程序主要是ad采集和讀寫flash,見圖2,而系統(tǒng)程序就是應(yīng)用程序工作的軟件平臺。它由以下部分組成:系統(tǒng)引導(dǎo)程序、嵌入式操作系統(tǒng)linux內(nèi)核、文件系統(tǒng)。
系統(tǒng)引導(dǎo)程序負(fù)責(zé)將操作系統(tǒng)內(nèi)核固化到flash中和系統(tǒng)初始化工作,然后將系統(tǒng)控制權(quán)交給操作系統(tǒng)。在本文里我們使用uboot作為系統(tǒng)引導(dǎo)程序。嵌入式操作系統(tǒng)內(nèi)核是嵌入式系統(tǒng)加電運行后的管理平臺,負(fù)責(zé)實時性任務(wù)和多任務(wù)的管理,這里選擇嵌入式linux內(nèi)核。
文件系統(tǒng)是對一個存儲設(shè)備上的數(shù)據(jù)和元數(shù)據(jù)進(jìn)行組織的機制。linux文件系統(tǒng)接口實現(xiàn)為分層的體系結(jié)構(gòu),從而將用戶接口層、文件系統(tǒng)實現(xiàn)和操作存儲設(shè)備的驅(qū)動程序分隔開。jffs2是專門針對嵌入式系統(tǒng)中的flash存儲器的特性而設(shè)計的一種日志文件系統(tǒng)。yaffs2支持大頁面的nand設(shè)備,并且對大頁面的nand設(shè)備做了優(yōu)化。
軟件平臺固化在norflash中。根據(jù)軟件平臺的內(nèi)容對norflash的地址空間進(jìn)行分區(qū),這里分三個區(qū),分別存放bootloader、linux內(nèi)核和文件系統(tǒng)。
nandflash驅(qū)動設(shè)計
nandflash驅(qū)動程序框架
按照linux下驅(qū)動編寫規(guī)范編寫nandflash驅(qū)動,其實主要工作就是實現(xiàn)下面這個結(jié)構(gòu)體中的函數(shù)。
s3c2440_nand_drive這個結(jié)構(gòu)體用于向內(nèi)核注冊nandflash設(shè)備,它會被platform_driver_register函數(shù)調(diào)用到。其中s3c2440_nand_probe是zui重要的,它完成對nand設(shè)備的探測。
nand_scan是在初始化nand的時候?qū)and進(jìn)行的一步非常好重要的操作,在nand_scan中會對我們所寫的關(guān)于特定芯片的讀寫函數(shù)重載到nand_chip結(jié)構(gòu)中去,并會將mtd_info結(jié)構(gòu)體中的函數(shù)用nand的函數(shù)來重載,實現(xiàn)了mtd到底層驅(qū)動的。并且在nand_scan函數(shù)中會通過讀取nand芯片的設(shè)備號和廠家號自動在芯片列表中尋找相應(yīng)的型號和參數(shù),并將其注冊進(jìn)去。
nandflash讀頁操作函數(shù)
nandflash讀數(shù)據(jù)操作以頁為單位,讀數(shù)據(jù)首先寫入讀數(shù)據(jù)命令00h(如圖3),然后輸入要讀取頁的地址,接著從數(shù)據(jù)寄存器中讀取數(shù)據(jù),zui后進(jìn)行ecc校驗。
nandflash寫操作
寫操作其實就是對頁進(jìn)行編程命令。見圖4,首先寫入80h開始編程模式,接下來寫入地址和數(shù)據(jù);zui后寫入10h表示編程結(jié)束。程序如下:
圖3:讀nandflash流程
圖4:寫nandflash流程
nandflash塊擦除
本論文所用到的nandflash的塊大小是32x(2k+64)byte,整塊擦除。命令代碼流程:首先寫入60h進(jìn)入擦寫模式,然后輸入塊地址,接下來寫入d0h,表示擦寫結(jié)束。
測試結(jié)果
在測試nandflash的讀寫速度時,我們通過tftp將數(shù)據(jù)下載到ram中,nandflash進(jìn)行讀、編程、擦寫測試。這樣可以比較真實的測試nandflash的讀寫速度,測試結(jié)果表明從nandflash讀4mbbytes的數(shù)據(jù)所用的時間是3886ms,向nandflash寫4mbytes數(shù)據(jù)所用的時間是14026ms,擦除nandflash中的4mbyte需要的時間是6毫秒。這個速度還是比較理想的,完成對32路ad采集過來數(shù)據(jù)的實時存儲是足夠的。而且512mbyte的數(shù)據(jù)存儲空間對于數(shù)據(jù)記錄儀而言是一個非常大的容量。
結(jié)論
測試結(jié)果表明數(shù)據(jù)記錄儀存儲速度是比較理想的,完成對ad采集過來數(shù)據(jù)的實時存儲是足夠的。而且512mbyte的數(shù)據(jù)存儲空間對于數(shù)據(jù)記錄儀而言是一個非常大的容量。