張 穎,林 偉
(福州大學福建省微電子集成電路重點實驗室,福州350002)
在我們現(xiàn)實生活中,會經(jīng)常用到一些電子設備。然而不同的電子設備有不同的數(shù)據(jù)存儲方式,如NAND Flash、NOR Flash等,這樣在使用時就需要進行壞塊掃描等各種復雜操作,給用戶的直接使用帶來不便。同時,電子設備中又有著各種不同的通信接口,例如USB接口、并行總線接口、串行設備接口(SPI)、I2C接口及SD接口等等,如果需要在具有不同接口的電子設備之間進行數(shù)據(jù)的傳輸和轉(zhuǎn)存,往往需要專門設計通信接口,或者通過轉(zhuǎn)接器來實現(xiàn)(例如串口轉(zhuǎn)USB等),不僅會帶來設計上的不便,而且會造成成本上的增加,不利于大規(guī)模生產(chǎn)。
基于目前現(xiàn)有電子設備的不足,我們設計了一種通用存儲裝置,它不僅提供數(shù)據(jù)存儲器NAND Flash而且還會提供NAND Flash管理。在此裝置上設計了多種接口,外部的數(shù)據(jù)訪問請求首先通過某種接口通知該裝置;該裝置通過對請求的解析訪問相應地址的NAND Flash,這樣就大大方便了我們的使用,而且也不會增加成本。
本文所設計的通用存儲裝置包含兩個核心部分,存儲介質(zhì)和存儲訪問接口。存儲介質(zhì)是指存儲數(shù)據(jù)的載體,比如軟盤、光盤、硬盤、內(nèi)存、DVD等,本文是以NAND Flash存儲器作為存儲介質(zhì),并在此基礎上提供FLASH管理,使用戶可以透明的線性訪問NAND Flash空間,并且通過ECC進行數(shù)據(jù)糾錯,在一定程度上保證了數(shù)據(jù)的可靠性。
同時,在本裝置上有5種可以通過模式的配置進行靈活選擇的存儲訪問接口:USB接口、并行總線接口、串行設備接口、I2C接口及SD接口。其總體硬件結(jié)構(gòu)框圖如圖1所示。
圖1 總體硬件結(jié)構(gòu)框圖
由于本裝置具有多個接口,所以需要通過模式腳來進行模式選擇。如圖1所示,在本裝置外部接有3 個模式腳:MODE 0、MODE 1、MODE 2,它們只有0和1兩種模式,而且只有在上電時才有效。通過對這些模式腳的設置(用外部跳線配置工作模式)來判斷裝置將運行在何種模式下,然后跳轉(zhuǎn)到該種模式運行。當3個模式腳都配置成0時,為USB模式,這也是該裝置在默認情況下運行的模式。當3個模式腳都配置成1時,為SD模式。表1顯示了模式腳的配置與模式的對應關(guān)系。
表1 模式腳配置與模式對應表
當外部通過這5種接口中的任意一種訪問本設備時,將模式腳設置為相應的模式,使設備跳轉(zhuǎn)到相應的模式下運行,通過對應的協(xié)議(USB接口協(xié)議、并行總線接口協(xié)議、串行設備(SPI)接口協(xié)議、I2C接口協(xié)議及SD接口協(xié)議)進行處理后將數(shù)據(jù)傳到NAND Flash存儲器進行存儲,如上面的圖1所示。
1.2.1 USB接口
本通用存儲裝置默認工作在USB模式下。
當本裝置工作在USB模式下時,USB接口遵循通用USB2.0協(xié)議,可以如同U盤一樣訪問本裝置。
1.2.2 總線接口
總線接口信號連接如圖2所示。
圖2 總線接口信號示意圖
總線接口控制信號共4根。Busy信號表示當前裝置是否正在訪問NAND Flash,Cmd信號表示向該裝置發(fā)送控制命令,Data_clk信號則提供數(shù)據(jù)傳輸同步信號,Ack信號為該裝置收到命令或者數(shù)據(jù)的反饋信號。
由于總線接口使用了8 bit數(shù)據(jù)總線,如果設備正在訪問NAND Flash,則將Busy信號置為有效,外部數(shù)據(jù)訪問必須等待,直到NAND Flash訪問結(jié)束;當該裝置訪問NAND Flash結(jié)束,則將Busy信號置為無效,此時該裝置將響應外部的數(shù)據(jù)請求。
本通用存儲裝置的總線接口在控制過程中為從端模式??刂七^程包括接收命令、接收數(shù)據(jù)和發(fā)送數(shù)據(jù)3種情況,都受到外部訪問端的控制;總線的握手過程,不論是命令還是數(shù)據(jù)的傳輸,都必須在Busy信號無效的情況進行。其中,外部訪問端通過cmd信號的控制命令將數(shù)據(jù)包按字節(jié)發(fā)送至本裝置;data_clk信號控制是從本裝置接收數(shù)據(jù)還是外部訪問端向本裝置發(fā)送數(shù)據(jù)。本裝置接收到命令和數(shù)據(jù)后,返回Ack信號,以確認接收成功。
1.2.3 串行設備接口(SPI)
串行設備接口信號如圖3所示。
圖3 SPI接口信號示意圖
SPI接口包括4根信號線,分別為MISO、MOSI、SCK和SS,本通用存儲裝置作為SPI的Slave端工作,而外部訪問端作為Master端。
本裝置的工作流程如圖7所示,外部訪問端工作流程如圖8所示。其中,外部訪問端向本設備發(fā)送命令和數(shù)據(jù)的過程機制相同,即主端發(fā)送從端接收,其區(qū)分通過從端即本裝置對命令的解析確認實現(xiàn)。本裝置向外部訪問端發(fā)送數(shù)據(jù)的過程為從端發(fā)送主端接收。
1.2.4 I2C接口
I2C接口信號如圖4所示。
圖4 I2C接口信號示意圖
I2C接口包括兩根信號線:SCL、SDA。SCL是串行時鐘線,SDA是串行數(shù)據(jù)線。SDA線上的數(shù)據(jù)必須在時鐘的高電平周期保持穩(wěn)定,數(shù)據(jù)線的高或低電平狀態(tài)只有在SCL線的時鐘信號是低電平時才能改變。本通用存儲裝置在使用I2C接口通信的過程中作為Slave端,外部訪問端作為Master端,工作流程如圖7、圖8所示。
1.2.5 SD接口
當本裝置工作在SD模式下時,遵循SD協(xié)議,可以如同SD卡一樣訪問。
如圖5所示,通用存儲裝置的 CPU采用CCM1101,通過將USB接口芯片,總線接口芯片,SPI接口芯片,I2C接口芯片和SD接口芯片引腳與CPU上對應的的引腳相連來實現(xiàn)多種接口對NAND Flash的訪問。
圖5 硬件連接圖
本通用存儲裝置具有良好的NAND Flash管理,向用戶提供線性的NAND Flash地址空間,用戶可以對NAND Flash進行透明的訪問,而不需要深入了解NAND Flash的具體技術(shù)細節(jié)。
NAND Flash是采用Nand結(jié)構(gòu)技術(shù)的非易失存儲器,內(nèi)存有8 bit和16 bit兩種組織形式,本設計所采用的NAND Flash是8 bit的。NAND Flash可支持讀(Read)操作、寫(Program)操作和擦除(Erase)操作[1]。其中讀操作和寫操作的基本單位是頁,擦除操作的基本單位是塊。在NAND Flash中,與頁大小相同的頁寄存器,用于數(shù)據(jù)緩存。當讀數(shù)據(jù)時,先從NAND Flash內(nèi)存單元把數(shù)據(jù)讀到頁寄存器,外部通過訪問FLASH的I/O端口獲得頁寄存器中數(shù)據(jù)(地址自動累加);當寫數(shù)據(jù)時,外部通過NAND Flash的I/O端口輸入的數(shù)據(jù)首先緩存在頁寄存器,寫命令發(fā)出后才寫入到內(nèi)存單元中[2]。
由于NAND Flash本身固有的技術(shù)缺陷,在出廠時NAND Flash會有一定比例的壞塊[3-5]出現(xiàn),造成某些地址空間不可用,這就需要建立一份塊對照表,并設計一種管理算法,將上層對邏輯地址的讀寫操作轉(zhuǎn)換成對NAND Flash物理地址的讀寫操作,這樣上層應用就不必關(guān)心NAND Flash如何進行壞塊管理。
FLASH管理程序由兩部分組成:MTD層(Memory Technology Devices Layer)[6]與 FTL 層(Flash Translation Layer)[7]。MTD 層完成基本的讀/寫/擦操作,MTD層主要針對閃存控制命令、地址字節(jié)數(shù)不同這些差異,實現(xiàn)相應的驅(qū)動,并且封裝這些差異向FTL層提供統(tǒng)一的接口,使得FTL層能夠訪問任意物理地址的數(shù)據(jù),而不關(guān)心控制命令序列和地址字節(jié)數(shù)。FTL層完成壞塊管理與邏輯地址到物理地址轉(zhuǎn)換,消除NAND Flash固有特性帶來的不足,讓上層應用程序以類似于讀寫磁盤的方式對NAND Flash進行讀寫訪問。這樣用戶就不需要深入了解NAND Flash的具體技術(shù)細節(jié),便可以對NAND Flash進行透明的訪問。軟件架構(gòu)圖如圖6所示。
圖6 軟件架構(gòu)圖
對NAND Flash讀寫操作過程如下:
在讀數(shù)據(jù)時.FTL層將根據(jù)收到的上層邏輯地址計算其對應的邏輯塊號,然后再根據(jù)塊對照表查找對應的物理塊,最后調(diào)用MTD層接口函數(shù)來完成讀操作。
在寫數(shù)據(jù)時,F(xiàn)TL層將同樣要根據(jù)收到的上層邏輯地址計算相應的邏輯塊號,然后從備用的空閑塊中分配一個擦除次數(shù)最少的空閑塊給對應的邏輯塊號,并將空閑塊的物理地址記錄在塊對照表中[8-9]。最后再調(diào)用MTD層接口函數(shù)完成寫操作。為了進一步平衡NAND Flash塊的擦除次數(shù),延長NAND Flash的使用壽命。在空閑時將擦除次數(shù)比較多的塊數(shù)據(jù)拷貝到擦除次數(shù)較少的塊中,將那些擦除次數(shù)比較多的塊作為空閑塊備用。
外部訪問端對本通用存儲裝置的訪問,如果通過USB接口或者SD接口,則直接按照USB和SD協(xié)議實現(xiàn),如果通過其他的接口,則遵循以下統(tǒng)一的通信協(xié)議和數(shù)據(jù)結(jié)構(gòu)。
外部請求通過控制命令的方式實現(xiàn),控制命令共 4 個字段,分別為 Cmd_id,address,length 和checksum(校驗和),其中 Cmd_id 占一個 byte,addr,len和checksum各占四個byte,共13個byte。
控制命令的數(shù)據(jù)結(jié)構(gòu)如表2所示。
表2 控制命令的數(shù)據(jù)結(jié)構(gòu)表
其中命令I(lǐng)D包括以下類型,如表3所示。
表3 命令I(lǐng)D與值對應表
本裝置接收到控制命令后將返回確認數(shù)據(jù)包,包含2個byte,命令標示Cmd_id和錯誤類型,Cmd_id即為該裝置接收到的命令標示,錯誤類型則取決于以下情況(表4)。
表4錯誤值與錯誤類型值對應表
外部訪問端需要根據(jù)接收到的命令確認數(shù)據(jù)包決定是否進行數(shù)據(jù)傳輸。
當本通用存儲裝置工作在USB模式下,將遵循USB通信協(xié)議;當本通用存儲裝置工作在SD模式下,將遵循SD協(xié)議。
當使用其他接口時,本裝置的內(nèi)部控制流程如圖7所示。
圖7 通用存儲裝置內(nèi)部流程圖
外部訪問端控制流程如圖8所示。
如圖7、圖8所示,本裝置與外部訪問端之間的通信以命令開始,數(shù)據(jù)結(jié)束,即必須先有外部訪問端發(fā)送命令,本裝置對命令進行驗證確認,并返回確認數(shù)據(jù)包,兩端確認命令傳輸無誤后再進行數(shù)據(jù)的傳輸。
圖8 外部訪問端控制流程圖
本通用存儲裝置能夠?qū)崿F(xiàn)多種接口對NAND Flash的訪問。目前,它已經(jīng)成功應用到一款稅控收款機上。用本通用存儲裝置的其中一種接口-總線接口與稅控收款機主板相連,進行數(shù)據(jù)交互以實現(xiàn)將稅控數(shù)據(jù)存放到存儲裝置的NAND Flash上。這樣用戶便可以對稅控數(shù)據(jù)進行線性的訪問了。而其他的接口可以留作別的用途,這樣就節(jié)約了成本。其硬件結(jié)構(gòu)框圖如圖9所示。
圖9 稅控收款機硬件框圖
主要工作原理:首先要將模式角配置成001,使設備跳轉(zhuǎn)到總線模式下運行。總線接口控制信號一共有4 根:Busy,cmd,data_clk,Ack。Busy 作為判斷NAND Flash是否處于忙狀態(tài)的標志,如果設備正在訪問NAND Flash,則將Busy信號置為有效,外部數(shù)據(jù)訪問必須等待,直到NAND Flash訪問結(jié)束;當該裝置訪問NAND Flash結(jié)束,則將Busy信號置為無效,此時該裝置將響應外部的數(shù)據(jù)請求。命令和數(shù)據(jù)的傳輸必須在Busy信號無效的情況下進行。稅控收款機通過cmd信號的控制命令將數(shù)據(jù)包按字節(jié)發(fā)送到存儲裝置;data_clk信號用來控制是從存儲裝置接收數(shù)據(jù)還是稅控收款機向存儲裝置發(fā)送數(shù)據(jù)。當存儲裝置接收到命令和數(shù)據(jù)后,返回Ack信號,以確認接收成功。
本通用存儲裝置提供了可管理的NAND Flash存儲器以及多種訪問接口,使得電子設備的數(shù)據(jù)存儲與訪問可以直接通過該裝置實現(xiàn),而不需要額外的設計或者轉(zhuǎn)接器,給電子設備的設計使用帶來便利,并能夠節(jié)約成本。同時,它在一款稅控收款機上的成功應用也驗證了它的可行性。
[1]李斌,薛質(zhì),胡永華.NAND Flash在基于CCM3118稅控收款機上的應用[J].中國集成電路,2005,7.
[2]魏韜,林平分,孫麗華,等.NAND Flash管理算法的設計及實現(xiàn)[J].電子元器件應用,2010,12(8):66-68.
[3]周軍.NAND Flash的壞塊管理設計[J].單片機與嵌入式系統(tǒng)應用,2010(9):15-20.
[4]彭兵,步凱,徐欣.NAND Flash壞塊管理研究[J].微處理器,2009(4):113-115.
[5]XSR 1.5 Bad Block Management Application Note[EB/OL].2010(4).http://www.samsung.com/glohal/business/semiconductor/products/flash/FlashApplicationNote.html.
[6]段權(quán)順.Nand Flas控制器的規(guī)格設計[J].電子產(chǎn)品世界,2006(2):116-118.
[7]Lu Sheng,Li Chunping.Using Statistical Model to Improve the Efficiency of Mining Maximum Sequential Patterns[C]//Proc.of the 2nd International Workshop on KGGI,2004.
[8]杜家瑞,劉正強,李應啟.NAND Flash在嵌入式系統(tǒng)中的應用[J].微處理機,2010(2):115-118.
[9]時正,陳香蘭,紀金松,等.大容量NAND Flash文件系統(tǒng)中的地址映射算法研究[J].小型微型計算機系統(tǒng),2010,31(1):155-159.