nand ubi -1 nand基础
生活随笔
收集整理的這篇文章主要介紹了
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個扇區
OOB為spare區,除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
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個扇區
OOB為spare區,除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基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nand ubi -3 uboot和ub
- 下一篇: 防止页面被iframe包含进去