nand ubi -1 nand基础
生活随笔
收集整理的這篇文章主要介紹了
nand ubi -1 nand基础
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
micro2440有一個(gè)配置是三星K9F2G08U0B--256MB SLC
tiny6410有一個(gè)配置是三星K9F2G086U0B--256MB SLC,有一個(gè)配置是三星K9K8G08U0B--1GB SLC,有一個(gè)配置是三星K9GAG08U0E--2GB MLC
1.
關(guān)于nand的ecc,refer to
http://www.amobbs.com/thread-5051907-1-1.html
Nand Flash本身是不具備ECC功能的,目前Micro有內(nèi)置ECC功能的FLASH,不過市場上很難看到。
Nand Flash由于工藝原因,柵極存儲(chǔ)的電荷會(huì)慢慢漏電,導(dǎo)致數(shù)據(jù)丟失;erase和program次數(shù)越多漏電的過程會(huì)加快。為了保證數(shù)據(jù)的可靠性,設(shè)計(jì)應(yīng)用中都需要添加ECC功能模塊來糾正Nand Flash內(nèi)部的隨機(jī)bit錯(cuò)誤,以及電路上的隨機(jī)錯(cuò)誤。ECC功能由外部電路FPGA來完成,或者M(jìn)CU的code來完成。
SLC的Datasheet上強(qiáng)調(diào)需要ECC糾正1bit錯(cuò)誤。實(shí)際應(yīng)用也確實(shí)如此,三星的SLC通常只發(fā)生1bit錯(cuò)誤,很少有2bit以上的錯(cuò)誤發(fā)生;intel的SLC 1bit,2bit錯(cuò)誤都有很多。為了更可靠的數(shù)據(jù),你可以采用糾正4bit或8bit的ECC算法,糾正bit數(shù)越多code越耗費(fèi)時(shí)間和FPGA越耗費(fèi)資源,ASIC也是。采用哪種ECC方式由設(shè)計(jì)者決定,通常你是不知道別人采用的ECC方式,除非他們告訴你。
2.
以K9F2G08xx--256MB SLC為例說明nandflash的內(nèi)部結(jié)構(gòu):
可以看到,nandflash的構(gòu)成方式是 頁->塊->device
每頁2K+64B
每塊64頁
每個(gè)設(shè)備2048塊
而每頁的結(jié)構(gòu)如下:
分為主區(qū)和空白區(qū),主區(qū)用于存儲(chǔ)真正的數(shù)據(jù);空白區(qū)即傳說的OOB(out of band帶外數(shù)據(jù)),里面分了幾個(gè)字節(jié)用于ECC(error correcting code 錯(cuò)誤校驗(yàn)碼)
main主區(qū)域,包含4個(gè)人扇區(qū);空白區(qū)頁包含4個(gè)扇區(qū)
OOB為spare區(qū),除OOB第六字節(jié)外,通常至少把OOB的前3個(gè)字節(jié)存放Nand Flash硬件ECC碼
1GB SLC的組成,與上面的page,block的結(jié)構(gòu)一致,但是每塊nand所含block增加。
2GB MLC的組成
nand flash是以頁為單位讀或?qū)?#xff0c;是因?yàn)轵?yàn)證ecc時(shí)是整頁驗(yàn)證的。以塊為單位擦除,ubi里有個(gè)物理擦除塊的概念,指的就是它。
--------沒有子頁時(shí)。
3
SLC和MLC的結(jié)構(gòu)區(qū)別,一圖以蔽之
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個(gè)1bit-ecc模塊,1個(gè)4bit-ecc模塊,1個(gè)8bit-ecc模塊
(Recommend: 1bit ECC for SLC, 4bit and 8bit ECC for MLC NAND Flash)--是因?yàn)镸LC比SLC出錯(cuò)幾率高
1bit-ecc 每2048B可校正1位錯(cuò)誤數(shù)據(jù),產(chǎn)生多少個(gè)字節(jié)校驗(yàn)碼?
4bit-ecc 每512B可校正4位錯(cuò)誤數(shù)據(jù),最大產(chǎn)生7個(gè)字節(jié)校驗(yàn)碼。一般的OOB可以提供如此多字節(jié)空間用于存儲(chǔ)校驗(yàn)碼。
8bit-ecc 每512B可校正8位錯(cuò)誤數(shù)據(jù),最大產(chǎn)生13個(gè)字節(jié)校驗(yàn)碼
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.
簡解:
手動(dòng)清零MainECCLock位,開啟main區(qū)域的ecc硬件自動(dòng)校驗(yàn)。
在cpu從nand main區(qū)上讀取數(shù)據(jù)或者寫入數(shù)據(jù)到nand main區(qū)時(shí),ecc模塊自動(dòng)產(chǎn)生ecc校驗(yàn)碼,放在寄存器NFMECC0/1里面.
當(dāng)寫完一頁之后--- (一頁的由自己定義,要按照nand說明書查看一頁的大小,每頁都有一個(gè)OOB用于存放該頁的校驗(yàn)碼),需要手動(dòng)置MainECCLock 1,以便停止硬件ecc。此時(shí)寄存器NFMECC0/1的值將不會(huì)改變。
手動(dòng)清零SpareECCLock 位,啟動(dòng)ecc spare區(qū)域的硬件自動(dòng)校驗(yàn)。
在cpu從nand spare上讀取數(shù)據(jù)或者寫入數(shù)據(jù)到nand spare區(qū)時(shí),ecc模塊自動(dòng)產(chǎn)生ecc校驗(yàn)碼,放在寄存器NFSECC里面.
當(dāng)寫完nand?spare區(qū)域之后,需要手動(dòng)置SpareECCLock1,以便停止ecc spare區(qū)域的硬件自動(dòng)校驗(yàn)。此時(shí)寄存器NFSECC的值將不會(huì)改變。
在寫操作時(shí),每寫完一個(gè)頁,就將NFMECC0/1的值寫入nand的相應(yīng)頁的oob的某部分作為校驗(yàn)碼。
在讀操作時(shí),每讀完一頁,就接著讀取相應(yīng)頁的oob中的校驗(yàn)碼,寫入NFMECCD0/1寄存器,此時(shí)cpu會(huì)自動(dòng)比較NFMECCD0/1和NFMECC0/1的值,結(jié)果存入NFECCERR0 寄存器。
5
ecc校驗(yàn)原理
http://blog.csdn.net/nhczp/article/details/1700031
http://blogimg.chinaunix.net/blog/upfile2/080702112233.pdf
tiny6410有一個(gè)配置是三星K9F2G086U0B--256MB SLC,有一個(gè)配置是三星K9K8G08U0B--1GB SLC,有一個(gè)配置是三星K9GAG08U0E--2GB MLC
1.
關(guān)于nand的ecc,refer to
http://www.amobbs.com/thread-5051907-1-1.html
Nand Flash本身是不具備ECC功能的,目前Micro有內(nèi)置ECC功能的FLASH,不過市場上很難看到。
Nand Flash由于工藝原因,柵極存儲(chǔ)的電荷會(huì)慢慢漏電,導(dǎo)致數(shù)據(jù)丟失;erase和program次數(shù)越多漏電的過程會(huì)加快。為了保證數(shù)據(jù)的可靠性,設(shè)計(jì)應(yīng)用中都需要添加ECC功能模塊來糾正Nand Flash內(nèi)部的隨機(jī)bit錯(cuò)誤,以及電路上的隨機(jī)錯(cuò)誤。ECC功能由外部電路FPGA來完成,或者M(jìn)CU的code來完成。
SLC的Datasheet上強(qiáng)調(diào)需要ECC糾正1bit錯(cuò)誤。實(shí)際應(yīng)用也確實(shí)如此,三星的SLC通常只發(fā)生1bit錯(cuò)誤,很少有2bit以上的錯(cuò)誤發(fā)生;intel的SLC 1bit,2bit錯(cuò)誤都有很多。為了更可靠的數(shù)據(jù),你可以采用糾正4bit或8bit的ECC算法,糾正bit數(shù)越多code越耗費(fèi)時(shí)間和FPGA越耗費(fèi)資源,ASIC也是。采用哪種ECC方式由設(shè)計(jì)者決定,通常你是不知道別人采用的ECC方式,除非他們告訴你。
2.
以K9F2G08xx--256MB SLC為例說明nandflash的內(nèi)部結(jié)構(gòu):
可以看到,nandflash的構(gòu)成方式是 頁->塊->device
每頁2K+64B
每塊64頁
每個(gè)設(shè)備2048塊
而每頁的結(jié)構(gòu)如下:
分為主區(qū)和空白區(qū),主區(qū)用于存儲(chǔ)真正的數(shù)據(jù);空白區(qū)即傳說的OOB(out of band帶外數(shù)據(jù)),里面分了幾個(gè)字節(jié)用于ECC(error correcting code 錯(cuò)誤校驗(yàn)碼)
main主區(qū)域,包含4個(gè)人扇區(qū);空白區(qū)頁包含4個(gè)扇區(qū)
OOB為spare區(qū),除OOB第六字節(jié)外,通常至少把OOB的前3個(gè)字節(jié)存放Nand Flash硬件ECC碼
1GB SLC的組成,與上面的page,block的結(jié)構(gòu)一致,但是每塊nand所含block增加。
2GB MLC的組成
nand flash是以頁為單位讀或?qū)?#xff0c;是因?yàn)轵?yàn)證ecc時(shí)是整頁驗(yàn)證的。以塊為單位擦除,ubi里有個(gè)物理擦除塊的概念,指的就是它。
--------沒有子頁時(shí)。
3
SLC和MLC的結(jié)構(gòu)區(qū)別,一圖以蔽之
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個(gè)1bit-ecc模塊,1個(gè)4bit-ecc模塊,1個(gè)8bit-ecc模塊
(Recommend: 1bit ECC for SLC, 4bit and 8bit ECC for MLC NAND Flash)--是因?yàn)镸LC比SLC出錯(cuò)幾率高
1bit-ecc 每2048B可校正1位錯(cuò)誤數(shù)據(jù),產(chǎn)生多少個(gè)字節(jié)校驗(yàn)碼?
4bit-ecc 每512B可校正4位錯(cuò)誤數(shù)據(jù),最大產(chǎn)生7個(gè)字節(jié)校驗(yàn)碼。一般的OOB可以提供如此多字節(jié)空間用于存儲(chǔ)校驗(yàn)碼。
8bit-ecc 每512B可校正8位錯(cuò)誤數(shù)據(jù),最大產(chǎn)生13個(gè)字節(jié)校驗(yàn)碼
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.
簡解:
手動(dòng)清零MainECCLock位,開啟main區(qū)域的ecc硬件自動(dòng)校驗(yàn)。
在cpu從nand main區(qū)上讀取數(shù)據(jù)或者寫入數(shù)據(jù)到nand main區(qū)時(shí),ecc模塊自動(dòng)產(chǎn)生ecc校驗(yàn)碼,放在寄存器NFMECC0/1里面.
當(dāng)寫完一頁之后--- (一頁的由自己定義,要按照nand說明書查看一頁的大小,每頁都有一個(gè)OOB用于存放該頁的校驗(yàn)碼),需要手動(dòng)置MainECCLock 1,以便停止硬件ecc。此時(shí)寄存器NFMECC0/1的值將不會(huì)改變。
手動(dòng)清零SpareECCLock 位,啟動(dòng)ecc spare區(qū)域的硬件自動(dòng)校驗(yàn)。
在cpu從nand spare上讀取數(shù)據(jù)或者寫入數(shù)據(jù)到nand spare區(qū)時(shí),ecc模塊自動(dòng)產(chǎn)生ecc校驗(yàn)碼,放在寄存器NFSECC里面.
當(dāng)寫完nand?spare區(qū)域之后,需要手動(dòng)置SpareECCLock1,以便停止ecc spare區(qū)域的硬件自動(dòng)校驗(yàn)。此時(shí)寄存器NFSECC的值將不會(huì)改變。
在寫操作時(shí),每寫完一個(gè)頁,就將NFMECC0/1的值寫入nand的相應(yīng)頁的oob的某部分作為校驗(yàn)碼。
在讀操作時(shí),每讀完一頁,就接著讀取相應(yīng)頁的oob中的校驗(yàn)碼,寫入NFMECCD0/1寄存器,此時(shí)cpu會(huì)自動(dòng)比較NFMECCD0/1和NFMECC0/1的值,結(jié)果存入NFECCERR0 寄存器。
5
ecc校驗(yàn)原理
http://blog.csdn.net/nhczp/article/details/1700031
http://blogimg.chinaunix.net/blog/upfile2/080702112233.pdf
轉(zhuǎn)載于:https://www.cnblogs.com/-song/archive/2012/12/08/3331835.html
總結(jié)
以上是生活随笔為你收集整理的nand ubi -1 nand基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nand ubi -3 uboot和ub
- 下一篇: 防止页面被iframe包含进去