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