當前位置:首頁 > 嵌入式 > 嵌入式硬件

  摘要:本文簡明闡述了NAND 驅(qū)動在嵌入式ARM平臺的實現(xiàn)。分析了NAND 的數(shù)據(jù)存儲結構,并從物理層,邏輯層和文件系統(tǒng)驅(qū)動接口層三個方面具體分析了NAND 驅(qū)動程序的實現(xiàn)。本文重點討論了在驅(qū)動邏輯層中為了實現(xiàn)磨損均衡如何創(chuàng)建壞塊處理表,并對基于uC/FS文件系統(tǒng)的驅(qū)動接口進行了分析。該嵌入式NAND FLASH驅(qū)動具有存取數(shù)據(jù)快,數(shù)據(jù)準確度高等特點。

  1 引言

  隨著U盤、數(shù)碼相機、mp3音樂播放器等移動設備的廣泛應用,F(xiàn)LASH存儲器已經(jīng)逐步取代其它半導體存儲元件,成為嵌入式系統(tǒng)中主要數(shù)據(jù)和程序的載體。NAND FLASH是一種可在線多次擦除的非易失性存儲器,其結構提供了極高的單元密度,可以達到數(shù)據(jù)的高密度存儲,并且寫入和擦除的速度也很快,所以 NAND FLASH是高密度數(shù)據(jù)存儲的理想[2] 。本文主要從物理層,邏輯層和驅(qū)動文件系統(tǒng)接口層三個方面具體分析NAND FLASH驅(qū)動程序的實現(xiàn)。

  2 物理層驅(qū)動實現(xiàn)

  NAND芯片的存儲空間是按照塊和頁的概念來組織的。現(xiàn)在市面上的NAND主要按大頁和小頁兩種存儲類型來進行數(shù)據(jù)管理。本文采用的NAND型號是K9F1G08X0A,該NAND為大頁結構,即芯片每塊()有64頁(Page),每頁有2K 的數(shù)據(jù)存儲區(qū)和64的冗余數(shù)據(jù)區(qū)(用來存放ECC校驗碼)。2K 的數(shù)據(jù)存儲區(qū)作為數(shù)據(jù)緩沖單元,用來實現(xiàn)I/0緩沖和存儲器之間的數(shù)據(jù)傳輸。芯片的存儲陣列組織如圖1所示。

圖1 128M X NAND 的存儲空間結構

  NAND FLASH的物理層驅(qū)動主要涉及到:NAND的初始化(ID以及相關屬性信息的讀取)、擦除(以塊作為單位),數(shù)據(jù)讀寫(以頁作為基本單位)。在這一系列的過程中,會涉及到NAND命令的發(fā)送以及NAND地址的發(fā)送。其中地址的發(fā)送會因NAND型號的不同而有所區(qū)別。一般來說,小頁的NAND其地址周期通常為4個:1個列地址(Column Address)和3個行地址(Row Address),而對大頁的NAND來說,列地址至少是2個周期,行地址會因芯片的容量大小而有所區(qū)別。本文采用的三星NAND芯片是2個列地址和2個行地址。對于NAND FLASH 來講,地址和命令只能在I/O[7:0]上并行傳遞。NAND FLASH 以頁為單位讀寫數(shù)據(jù),而以塊為單位擦除數(shù)據(jù)。NAND的數(shù)據(jù)傳輸方式有基本的I/O傳輸方式,即在I/O[7:0]數(shù)據(jù)線上進行的數(shù)據(jù)傳輸。這種操作的缺點是系統(tǒng)CPU要頻繁參與控制數(shù)據(jù)的傳輸,會影響到數(shù)據(jù)傳輸速度。本文采用DMA傳輸方式,數(shù)據(jù)寬度是8/16/32bit,通過中斷的形式通知CPU數(shù)據(jù)的傳輸情況,DMA傳輸主要涉及DMA 控制器的配置以及通道的選擇。

  3 邏輯層驅(qū)動實現(xiàn)以及壞塊管理機制

  3.1 邏輯基本讀寫操作

  驅(qū)動邏輯層的主要任務是整合物理層的驅(qū)動,并為文件系統(tǒng)驅(qū)動層提供接口。在該層中主要涉及的操作包括NAND 的邏輯讀、寫以及擦除。邏輯層對NAND 的操作都是以塊()作為單位來進行操作的。因此須在邏輯層中構建一個塊緩存( Buffer)來臨時存放讀出/寫入NAND 的數(shù)據(jù)。這樣,NAND 的讀取機制分為兩種:頁讀取(Page )和塊讀取(Block)。在頁讀取時,通過壞塊表進行索引指定塊(Block)和頁(Page)來進行數(shù)據(jù)讀操作,而塊讀取時則是通過整合頁讀取時的緩存數(shù)據(jù),把NAND 的數(shù)據(jù)以塊的形式進行緩存(BlockBuffer)。NAND 的寫入機制不像其它的FLASH 器件,NAND 要求在寫入數(shù)據(jù)時,首先必須進行數(shù)據(jù)的擦除。因此我們在寫數(shù)據(jù)的時候,先把將要被寫入的數(shù)據(jù)塊的內(nèi)容讀出到塊緩存,然后再把要寫入NAND 的數(shù)據(jù)以頁為單位的形式寫入塊緩存(Block Buffer)中的對應地址。接著把以前存放數(shù)據(jù)的塊進行擦除操作,最后把更新的數(shù)據(jù)寫到NAND 去。經(jīng)過這一系列的操作,實現(xiàn)了NAND 數(shù)據(jù)的邏輯寫入。圖2 說明了一次寫操作的具體流程。

圖 2 NAND 塊寫數(shù)據(jù)的示意圖

  3.2 壞塊管理機制的原理及實現(xiàn)

  NAND 由于采用了高密集的存儲單元,在使用過程中難免會損壞一些存儲單元,這就是我們所說的壞塊[3]。數(shù)據(jù)操作時應該避免對這些壞塊進行操作,否則會引起數(shù)據(jù)的錯誤。

  一般而言,NAND 的第0 塊常被用來作為程序的引導區(qū),因此NAND 芯片廠商會保證第0塊不會成為壞區(qū)。而作為0 塊以后的數(shù)據(jù)存儲塊,當壞塊產(chǎn)生時,系統(tǒng)級的設計必須能夠用地址映射把這些壞塊屏蔽掉。芯片在出廠時,除保存壞塊信息的區(qū)域外,部分一律被擦除(值為0xFF),對壞塊的讀操作是允許的,但不推薦進行寫和擦除操作,以免由于結構方面的原因使鄰近的塊也失效。系統(tǒng)設計時必須根據(jù)初始的壞塊信息識別出壞塊,并建立壞塊列表。進行寫或擦除操作時將欲操作塊的地址與壞塊地址表的地址相比較,若是壞塊則應跳過。芯片在使用過程中,可能有新壞塊的產(chǎn)生,為了系統(tǒng)的可靠性,必須對此情況加以考慮。

  在數(shù)據(jù)寫入或塊擦除操作后,如果讀狀態(tài)寄存器出現(xiàn)錯誤,則表示塊內(nèi)有壞頁存在,也即表明此塊已壞,因為塊內(nèi)壞頁的存在并不影響頁的讀寫,這時可采用塊操作來把頁內(nèi)有用數(shù)據(jù)轉(zhuǎn)移到空閑塊內(nèi),并把壞塊信息存入壞塊表中。因此,當我們在格式化NAND的時候,要給出一定的區(qū)域用來存放壞塊索引表和壞塊表??紤]到一個塊(Block)的大小為128KB,而現(xiàn)在市面上的一般的NAND的容量大小為128MB-2GB不等。故分配10 個塊(Block)來進行存儲。由于第0 塊為用戶不可見塊,實際要求為1-11 塊作為存儲空間。圖 3 表明了如何建立壞塊索引表和壞塊表的流程。

圖 3 壞塊索引和壞塊表建立流程

  其中,在壞塊索引(BBTINDEX)中,整型變量bitIsBadBlock 中的每一個bit,標記一個塊的狀態(tài)(1 表示壞塊,0 表示好塊),在ARM 體系中,可以標記32 個塊。該區(qū)域被稱為一個索引區(qū)域。整型變量mPosInBBT 表示如果有壞塊,則表示索引區(qū)域在壞塊表中的偏移。

  這樣通過定義一個索引tableTopPos 變量,來指示下一個壞塊在數(shù)組中的位置。同樣在壞塊表(BBTENTRY)中,整型變量mBadBlock 標志塊是壞塊,而mReplaceBlock 變量則表示該壞塊在備份區(qū)中對應的可以的好塊。這樣通過定義一個索引bakupTopPos 變量,來指示下一個壞塊在備用區(qū)的位置。通過結合壞塊索引和壞塊表,可以對數(shù)據(jù)進行準確的操作,而每次對NAND 操作完成后,及時地更新壞塊索引和壞塊表。

  4 文件系統(tǒng)層的接口實現(xiàn)

  現(xiàn)在一般對NAND 支持的文件系統(tǒng)用的最多的是YAFFS 文件系統(tǒng)。本文由于基于的操作系統(tǒng)平臺是uC/OS,故采用了uC/FS 文件系統(tǒng)作為NAND 的文件驅(qū)動接口,uC/FS 文件系統(tǒng)進行的操作都是基于FAT 文件格式的。對用戶來說,所用對NAND 的操作,都是通過文件接口層來完成的。文件接口層對數(shù)據(jù)的操作都是以扇區(qū)(Sector)來進行的。因此,文件接口層的主要任務是把從邏輯層的邏輯操作轉(zhuǎn)化為以扇區(qū)(Sector)為單位的操作,文件系統(tǒng)的接口函數(shù)主要通過一個結構體 (FS___)來進行描述[4],該結構體包含了驅(qū)動設備的名稱以及4 個基本的驅(qū)動設備掛接函數(shù)的函數(shù)指針。

  在這幾個函數(shù)中,dev_status()函數(shù)主要實現(xiàn)FAT 表狀態(tài)信息的讀取,并表明該NAND 設備可以使用;dev_()函數(shù)實現(xiàn)對NAND 進行文件系統(tǒng)塊數(shù)據(jù)的讀??;dev_write()函數(shù)實現(xiàn)對NAND 進行文件系統(tǒng)塊數(shù)據(jù)的寫入;dev_()函數(shù)則主要實現(xiàn)文件操作的相關指令,包括文件格式化,數(shù)據(jù)cache 回寫等操作。通過這幾個文件接口函數(shù),用戶可以實現(xiàn)對NAND 進行的數(shù)據(jù)基本操作。

 其中,mCache 數(shù)組大小為數(shù)據(jù)讀取時的存儲大小,由NAND 的文件系統(tǒng)遵循 標準決定,大小為512Byte;mTimes 表示被Cache 的塊(Sector)的命中次數(shù),反映了數(shù)據(jù)塊的存取幾率;mSectorId 表示被Cache 塊(Sector)的序號,通過該序號來對Cache 的數(shù)據(jù)塊進行索引。

  5 總結

  對大容量的 NAND FLASH 進行數(shù)據(jù)操作,壞塊處理機制是很重要的,通過建立壞塊處理表,避免了對無效塊進行的操作,提高了數(shù)據(jù)的準確性。另外,ECC 作為NAND 糾錯機制,在NAND 驅(qū)動中也廣泛運用,本文的NAND 驅(qū)動中也加入了ECC 機制,由于篇幅有限,不對其進行深入探討。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉