- 片上系統(tǒng)設(shè)計(jì)思想與源代碼分析
- 陳曦 黃毅
- 1088字
- 2018-12-27 17:52:51
4.2 NandFlash器件原理
4.2.1 NandFlash存儲(chǔ)單元組織
下面以三星公司的K9F2G08U0M NandFlash為例來講述NandFlash原理。該NandFlash的輸入輸出端口如表4-1所示。
表4-1 K9F2G08U0M輸入輸出端口描述

K9F2G08U0M的功能方框圖如圖4-1所示。

圖4-1 K9F2G08U0M的功能方框圖
K9F2G08U0M的存儲(chǔ)器組織如圖4-2所示。K9F2G08U0M是一個(gè)2Gbits的閃存,每2K+64字節(jié)被組織成為一個(gè)頁,每64個(gè)頁被組織成為一個(gè)塊,整個(gè)器件共有2048個(gè)塊,共2112Mbits。讀操作每次至少讀取一個(gè)字節(jié),而擦除操作每次擦除一個(gè)塊。

圖4-2 K9F2G08U0M的存儲(chǔ)器組織
NandFlash的地址分為行地址和列地址,行地址選擇指定的頁,列地址選擇指定的頁內(nèi)字節(jié)。每一個(gè)頁有2K+64字節(jié),因此,需要12比特的地址進(jìn)行尋址。NandFlash的地址通過I/O[7:0]送入器件,先送入列地址,再送入行地址,29比特地址需要5周期才能送完,每個(gè)周期送入的地址位如圖4-3所示。

圖4-3 K9F2G08U0M的地址周期
4.2.2 NandFlash壞塊與壞塊管理
NandFlash壞塊在出廠的時(shí)候可能已存在。在芯片出廠時(shí),NandFlash已經(jīng)被擦除,擦除后所有字節(jié)都是0xFF。對(duì)于壞塊,在出廠時(shí),其第一頁或第二頁的第2048列的內(nèi)容為非0xFF。這些信息可以用來初始化壞塊描述表。壞塊描述表由軟件來維護(hù),NandFlash的第一個(gè)塊,即地址0開始的塊,在出廠時(shí)保證是正確的,且保證至少最初1000次擦除/編程操作都是正確的。壞塊描述表可以放在地址0開始的塊中。壞塊描述表對(duì)于NandFlash的管理十分重要,在實(shí)際系統(tǒng)設(shè)計(jì)中,還應(yīng)該對(duì)其采取適當(dāng)?shù)膫浞荽胧?/p>
在初始化壞塊描述表之前若對(duì)NandFlash進(jìn)行了不恰當(dāng)?shù)膶懖僮骰虿脸僮鳎赡軐?dǎo)致壞塊信息被破壞并不可恢復(fù)。在后續(xù)的使用中,NandFlash會(huì)新增壞塊,壞塊信息被破壞的塊及新增的壞塊可以在寫操作失敗、塊擦除失敗來發(fā)現(xiàn),新發(fā)現(xiàn)的壞塊通過軟件添加到壞塊描述表中。
在NandFlash的使用中,可能會(huì)出現(xiàn)個(gè)別比特反轉(zhuǎn)的情況,即某一個(gè)比特在寫入時(shí)被寫入了0,但是因?yàn)閮?chǔ)存單元的問題導(dǎo)致在后來某個(gè)時(shí)間讀取到的該比特的值為0。為了解決這一問題,有些NandFlash控制器專門設(shè)計(jì)了硬件前向糾錯(cuò)機(jī)制。常見的前向糾錯(cuò)機(jī)制能夠糾錯(cuò)一個(gè)比特,檢錯(cuò)多個(gè)比特。當(dāng)發(fā)生超過一個(gè)比特以上的錯(cuò)誤無法糾正時(shí),軟件必須作出適當(dāng)?shù)奶幚怼G跋蚣m檢錯(cuò)機(jī)制都是針對(duì)頁進(jìn)行的,在進(jìn)行整頁寫操作時(shí),2048個(gè)字節(jié)被寫入一個(gè)頁的前2048個(gè)字節(jié),糾檢錯(cuò)機(jī)制產(chǎn)生的校驗(yàn)比特被存儲(chǔ)在2048字節(jié)后面的64個(gè)字節(jié)空間。在進(jìn)行整頁讀取時(shí),將一個(gè)頁2048個(gè)字節(jié)讀出并由糾檢錯(cuò)機(jī)制計(jì)算出新的校驗(yàn)比特,如果新的校驗(yàn)比特與存儲(chǔ)在2048字節(jié)后面的64個(gè)字節(jié)空間的校驗(yàn)比特不同,則讀取的數(shù)據(jù)出錯(cuò)。若能夠糾錯(cuò),則數(shù)據(jù)仍然能夠使用,若不能夠糾錯(cuò),則只能報(bào)告頁面錯(cuò)誤。
在一般的嵌入式系統(tǒng)中,常常根據(jù)運(yùn)行時(shí)的需要產(chǎn)生頁面失敗(Page Fault)中斷,將一個(gè)頁加載到SDRAM即內(nèi)存中,對(duì)于能夠糾正的錯(cuò)誤,系統(tǒng)能夠繼續(xù)正常工作,一般將數(shù)據(jù)轉(zhuǎn)存到另外一個(gè)塊中;若錯(cuò)誤不可糾正,則錯(cuò)誤就是致命(Fatal Error)的,系統(tǒng)將不能夠再正常工作。
- Learning Docker
- Java Web基礎(chǔ)與實(shí)例教程(第2版·微課版)
- Mastering Entity Framework
- 深入淺出Android Jetpack
- Building a Recommendation Engine with Scala
- C語言從入門到精通(第4版)
- Visual Basic程序設(shè)計(jì)習(xí)題解答與上機(jī)指導(dǎo)
- MATLAB定量決策五大類問題
- PhoneGap Mobile Application Development Cookbook
- Python面向?qū)ο缶幊蹋簶?gòu)建游戲和GUI
- Cybersecurity Attacks:Red Team Strategies
- Mastering Business Intelligence with MicroStrategy
- Learning Hadoop 2
- C陷阱與缺陷
- Unity 5.X從入門到精通