日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nand ubi -1 nand基础

發布時間:2024/4/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nand ubi -1 nand基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
micro2440有一個配置是三星K9F2G08U0B--256MB SLC
tiny6410有一個配置是三星K9F2G086U0B--256MB SLC,有一個配置是三星K9K8G08U0B--1GB SLC,有一個配置是三星K9GAG08U0E--2GB MLC

1.
關于nand的ecc,refer to
http://www.amobbs.com/thread-5051907-1-1.html
Nand Flash本身是不具備ECC功能的,目前Micro有內置ECC功能的FLASH,不過市場上很難看到。
Nand Flash由于工藝原因,柵極存儲的電荷會慢慢漏電,導致數據丟失;erase和program次數越多漏電的過程會加快。為了保證數據的可靠性,設計應用中都需要添加ECC功能模塊來糾正Nand Flash內部的隨機bit錯誤,以及電路上的隨機錯誤。ECC功能由外部電路FPGA來完成,或者MCU的code來完成。
SLC的Datasheet上強調需要ECC糾正1bit錯誤。實際應用也確實如此,三星的SLC通常只發生1bit錯誤,很少有2bit以上的錯誤發生;intel的SLC 1bit,2bit錯誤都有很多。為了更可靠的數據,你可以采用糾正4bit或8bit的ECC算法,糾正bit數越多code越耗費時間和FPGA越耗費資源,ASIC也是。采用哪種ECC方式由設計者決定,通常你是不知道別人采用的ECC方式,除非他們告訴你。


2.
以K9F2G08xx--256MB SLC為例說明nandflash的內部結構:
可以看到,nandflash的構成方式是 頁->塊->device
每頁2K+64B
每塊64頁
每個設備2048塊


而每頁的結構如下:
分為主區和空白區,主區用于存儲真正的數據;空白區即傳說的OOB(out of band帶外數據),里面分了幾個字節用于ECC(error correcting code 錯誤校驗碼)
main主區域,包含4個人扇區;空白區頁包含4個扇區
OOBspare區,除OOB第六字節外,通常至少把OOB的前3個字節存放Nand Flash硬件ECC



1GB SLC的組成,與上面的page,block的結構一致,但是每塊nand所含block增加。




2GB MLC的組成


nand flash是以頁為單位讀或寫,是因為驗證ecc時是整頁驗證的。以塊為單位擦除,ubi里有個物理擦除塊的概念,指的就是它。
--------沒有子頁時。

3
SLC和MLC的結構區別,一圖以蔽之





4.
6410的nand接口及硬件ecc過程
tiny6410電路圖接K9F2G08xx

6410的nand控制器
8.8 1-BIT / 4-BIT / 8-BIT ECC (ERROR CORRECTION CODE)
NAND flash controller has four ECC (Error Correction Code) modules for 1 bit ECC , one for 4bit ECC and one for
8bit ECC.
The 1bit ECC modules for main data area can be used for (up to) 2048 bytes ECC parity code generation, and 1
bit ECC module for spare area can be used for (up to) 4 bytes ECC Parity code generation.
Both 4bit and 8bit ECC modules can be used for only 512 bytes ECC parity code generation.
4 bit and 8bit ECC modules generate the parity codes for each 512 byte. However, 1 bit ECC modules generate
parity code per byte lane separately.
4bit ECC modules generate max 7byte parity codes and 8 bit ECC modules generate 13byteparity codes at each
512/24 bytes.
nand控制器有4個1bit-ecc模塊,1個4bit-ecc模塊,1個8bit-ecc模塊
(Recommend: 1bit ECC for SLC, 4bit and 8bit ECC for MLC NAND Flash)--是因為MLC比SLC出錯幾率高
1bit-ecc 每2048B可校正1位錯誤數據,產生多少個字節校驗碼?
4bit-ecc 每512B可校正4位錯誤數據,最大產生7個字節校驗碼。一般的OOB可以提供如此多字節空間用于存儲校驗碼。
8bit-ecc 每512B可校正8位錯誤數據,最大產生13個字節校驗碼


1bit ecc 編碼和解碼
8.8.2 1-BIT ECC PROGRAMMING ENCODING AND DECODING
1. To use 1-bit ECC in software mode, reset the ECCType to ‘0’ (enable 1-bit ECC)‘. ECC module generates
ECC parity code for all read / write data when MainECCLock (NFCONT[7]) and SpareECCLock (NFCONT[6])
are unlocked(‘0’). You must reset ECC value by writing the InitMECC (NFCONT[5]) and InitSECC
(NFCONT[4]) bit as ‘1’ and have to clear the MainECCLock (NFCONT[7]) bit to ‘0’(Unlock) before read or
write data.
MainECCLock (NFCONT[7]) and SpareECCLock(NFCONT[6]) bit controls whether ECC Parity code is
generated or not.
2. Whenever data is read or written, the ECC module generates ECC parity code on register NFMECC0/1.
3. After you complete read or write one page (does not include spare area data), Set the MainECCLock bit to ‘1’
(Lock). ECC Parity code is locked and the value of the ECC status register will not be changed.
4. To generate spare area ECC parity code, Clear SpareECCLock (NFCONT[6]) bit to ‘0’ (unlock).
5. Whenever data is read or written, the spare area ECC module generates ECC parity code on register
NFSECC.
6. After you complete read or write spare area, set the SpareECCLock bit to '1' (Lock). ECC Parity code is
locked and the value of the ECC status register will not be changed.
7. From now on, you can use these values to record to the spare area or check the bit error.
8. For example, to check the bit error of main data area on page read operation, after generating of ECC codes
for main data area, you have to move the ECC parity codes (is stored to spare area) to NFMECCD0 and
NFMECCD1. From this time, the NFECCERR0 have the valid error status values.
簡解:
手動清零MainECCLock位,開啟main區域的ecc硬件自動校驗。
在cpu從nand main區上讀取數據或者寫入數據到nand main區時,ecc模塊自動產生ecc校驗碼,放在寄存器NFMECC0/1里面.
當寫完一頁之后--- (一頁的由自己定義,要按照nand說明書查看一頁的大小,每頁都有一個OOB用于存放該頁的校驗碼),需要手動置MainECCLock 1,以便停止硬件ecc。此時寄存器NFMECC0/1的值將不會改變。

手動清零SpareECCLock 位,啟動ecc spare區域的硬件自動校驗。
在cpu從nand spare上讀取數據或者寫入數據到nand spare區時,ecc模塊自動產生ecc校驗碼,放在寄存器NFSECC里面.
當寫完nand?spare區域之后,需要手動置SpareECCLock1,以便停止ecc spare區域的硬件自動校驗。此時寄存器NFSECC的值將不會改變。

在寫操作時,每寫完一個頁,就將NFMECC0/1的值寫入nand的相應頁的oob的某部分作為校驗碼。
在讀操作時,每讀完一頁,就接著讀取相應頁的oob中的校驗碼,寫入NFMECCD0/1寄存器,此時cpu會自動比較NFMECCD0/1和NFMECC0/1的值,結果存入NFECCERR0 寄存器。

5
ecc校驗原理
http://blog.csdn.net/nhczp/article/details/1700031
http://blogimg.chinaunix.net/blog/upfile2/080702112233.pdf



轉載于:https://www.cnblogs.com/-song/archive/2012/12/08/3331835.html

總結

以上是生活随笔為你收集整理的nand ubi -1 nand基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。