???????????????????????????????????????
Flash???????????Flash?????????????block?????λ?????????????????????洢?豸??????bitλ???С???/д????λ??Flash????????????????飺???????????????????????????block???????????С??128KB/256KB??????????1???????????????????????0xFF???????????????????????????????????????????????????????????????????????Flash Memory?????????Flash????? ??????????档
NAND Flash ?????????????????????????????????????????????????????????Uboot ?? Linux ???? NAND ????????????????????????????????? ???????????Nandflash?????????????????е???????????BBM??????????????????????????? NAND ?洢?????????????????????????????????????????????????????????????????????????????????????????????
??????
Flash???????????
Flash??????洢??MOSFET???????и???????(Floating Gate)?????????洢?????????
??Flash??????????????(uv-erasable)??EPROM?????????????Floating Gate?洢??????????????
?????Flash?????????
??????Flash??浥?????????(electrical charge) ????洢????洢???????????????е??????external gate?????????????????????????洢????г???????????????ɡ?????????????????洢??????????????????????Vth???????????Flash??洢???????????????0????????????洢?豸????????????????0????????1?????????????????????????????????????????0??
NandFlash????
Nand flash???????????????????????????????????д????????????????????ж?????????????????????У??????????ECC?????????????????????????????????Nand Flash????1GB??2GB???????8GB??????????????????????????????????洢??????????????????????е??????????PC???????????洢?????????
SLC??MLC
Nand Flash????????洢????????????????Σ???????????浥??У???洢1λ??????????λ???????????SLC??MLC?????????????????????ù???SLC????MLC???
Nand Flash????У??и????????Read ID?????ID??????ü????????????????4???????о??????5??????????????Щ????У???????????????????????????Nand Flash????????о???chip????????????chip??????????Plane????????е????С?????С??????????Щ????У????????????????????flash??SLC????MLC??
oob / Redundant Area / Spare Area
????????????????????????????????spare area??/????????redundant area??????Linux???У???????OOB??Out Of Band????????????????????Nand Flash?????????????????д???????????????????????????????????????ж?????????????????????????EDC(Error Detection Code)/ECC??Error Code Correction, ???? Error Checking and Correcting?????????????????????????????????У?????
Oob???д?????????????????????????????????д????????????д??oob??
????oob?????????????????У?
Bad Block Management???????
Nand Flash????????????????????????д????????????????????????????????????ù????У???ЩNand Flash??block?????????????????????????????block???????飬??????á?????????????????????Nand Flash????????????????????
Wear-Leveling???????
Nand Flash??block???????????????????
????????Nand Flash??block????????????????????????????????ζ???????block???????д?????????????block???????????????????????????????????????ε??????block????????????????????Щblock???棬?????block??????????????????????????????????????????Nand Flash??
ECC????У????
Nand Flash????????????????????д?????л????????????????????и???????????????????????????д?ECC???????????????????????Nand Flash??ECC???????????к??????BCH??????????????????????????????????????????????????????????????????????????????
??????????????????ECC????????????????????????????????????????????????????Щ????????????????????????????????????????????ECC??????????????????????????д??????????????????????????????????????????Щ????Nand Flash??????д????????????????
???У?Linux?е????????ECC??????NAND_ECC_SOFT????????????????????
??????????????MLC??Nand Flash????????????????????2GB??4GB??8GB???????BCH????BCH?????????????????????
???????????????????δ?????BCH?????????
BCH???????????????Nand Flash??Controller?У?????????????BCH ECC??飬?????BCH????????????????棬????????????д???????????????????BCH?????????????ó?BCH??????????????BCH????????????????д?????????BCHУ????????д??
????????????β?????Щ?????????????????????????????nand flash??controller?????????????????????????????nand flash?????????????????????????nand flash??controller?????datasheet??????????????????????ɡ?
????????????????????????BCH???????????????????????????????????????Micron????????????????汾??BCH????
λ???
Nand Flash??λ???????????????????Щ???/Ч????????
???Ч???????Nand Flash??cell????????????????????????????????
????????????????????????Ч???over-program effect????
????????????????????д????????????????????????????λ???????
??Ч?????????????????????????????????????λ????????????????????仯????Nand Flash????λ????????
?????????????λ?????????????Nand Flash????????????????????????е?????λ???????????????????????????У???????????ECC???????????????????????
??????????????????????????????????????????????μ??ɡ?
????и???????????ECCУ?鷢???д?????ж????????????λ???????????????
???ж??????????????????????????????????????????????????Nand Flash???????controller?????????????????????????????У?????????
????д????????дNand Flash ????????????????????Nand Flash о??????????????????Nand Flashо?????????????????????????????????????????ж?????????Nand Flash???????????????????Nand Flash????????????????????ECCУ??????????????д???????????????????Nand Flash???????
???????????????Nand Flashо???????????????????
????Nand Flash????????????????????С??λ?????????Nand Flash?????????????????????????????????Plane?????????????????????????????????д???????洢?????????????洢????ж????????????????????????????????????????????????buffer???????????datasheet????????????????page register????????????????????棬?????????
???????????Щ?????????????????????????????????????????????????????????Nand Flash??FIFO??д??Nand Flash????????????????????????????д???????洢??????????????????д?????????????У???е????????????????????ε??????????0x10????????????????????????????????е??????????д???????洢????????
????????????????????????????С?2K??Nand Flash??????е???????oob???λ????1?????????С??棬pagesize??512B????256B??Nand Flash???????????6???????????????0xFF???????????顣???????????????????飬???飬???????????????0xFF???
??????????????????????????flash????Щ???????????0xFF??????????????????????????????д?????????ζ???????д???????????????????????????????????????????飬?????????齫?????????????????
uboot???и???????
nand scrub
?????????????е??????????????????????????????????????????????ù????г?????±????
nand erase
????????飬??????????????飬????????????????????????????Щ??????????????Щ???????ù?????????????
NAND ??????????????????(BBT)???????????????????е????л??顣?????????????????????????????????????????????????
Uboot ?????????????? bootloader????????????????????????????????????????????????????±?????????????????????
??? uboot ???????????????????????Щ??????????????????????????
??????й????????????????????????????????Ч????????????????????????????????????????
?????????????????ú????????д???? NAND ?е?????????滻???顣?????????????????????????????????????????? NAND ???????????
???ú???????
????????ú??????????????????鵽???????????????? BBT ??????趨??????滻??(SBT)????????????????? i ??????????????????? BBT ?м?????????飬??? SBT ?в?????滻?飻???д?? i ?????????????? BBT ?б????????飬????????л?????????飬?????????? j???????????? j д?? SBT ?е?? i ?????????? SBT ??? j ?????д??? i??SBT ?е??????????????????????????????????е????п????????飬???????????????飬?? SBT ?е???λ????? 0x00?????????д??????г???????????? SBT ???λ???? 0x00 ?????????????????????
BBT/SBT ???????
???????????? BBT ???????????????????????????????????????????б?????????????????????????? BBT??????????????? BBT ????????????? BBT ????????У?顣??? BBT ?????? NAND ?У????????Ч?????????????????? NAND ???????????????????????? ECC У?顣???????????????????? ECC ??????????????? bit?????? 2 ???? bit ???????? BBT ??????????????? ECC У??????洢???У????? NOR Flash????ж? BBT ?????????У??????????????
????????????????? BBT/SBT ?????????????????????????? BBM ?????
BBM ????
typedef struct {
UINT8 acSignature[4];/* BBM ??? */
UINT32 ulBBToffset;/* BBT ??? */
UINT32 ulSBToffset;/* SBT ??? */
UINT16 usBlockNum;/* BBM ?????? block ??? */
UINT16 usSBTstart;/* SBT ????λ?????? block ??? */
UINT16 usSBtop;/* SBT top block */
UINT16 usSBnum;/* SBT number */
UINT32 ulBBTcrc;/* BBT ???? CRC У???? */
UINT32 ulSBTcrc;/* SBT ???? CRC У???? */
UINT32 ulHeadcrc;/* BBM ???? CRC У???? */
} BBM_HEAD
BBT/SBT ????????
??????? CRC У?????????? BBT ??????????洢???У????????????????????????Ч???
????????????????? BBT ??????????д BBT ??????磬?? BBT ?????????????????????????????????????????????????????????????????????????д???????????磬???????????????????????????????д?????????????磬???????????????????????
???????????????????????????????????????????????????ü????????????????????????Ч?????????????????????????
?????????NandFlash??????????? NAND ?????????????????? uboot ???????????????????????????????????????????? NAND ?????????????????????????????????????к????????á?
ECCУ?????????????????????????????????????????????Ρ?ECC??漴??????棬??????????з???????????????????????????????????/??????????ι???????????????????????????????????????
????????????????????乤??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????渽??????????????????????????????????????????
??????????????????????ECC????????????????????????桰???У?飨Parity?????????????С???λ????????????λ??bit??????λ????????????????1??0????????8?????????????????????byte???????????У???????????????8λ?????????λ?洢????????????????洢?????????????仯????????????ó?????????????У?????????????8λ??????????????λ?????????λ?????????д洢???????????8??λ??洢???????ǹ????????λ???????????1??0??????洢????????λ????1??1??1??0??0??1??0??1??????????λ????1+1+1+0+0+1+0+1=5????????????????????У?飬У??λ??????1????????0????????У?飬????????CPU????洢??????????????????8λ?д洢?????????????????????У??λ???????????????????????????????У???????????????????????????????????λ??????????????????????У???????????λ????
??????????????????Parity?????????????????λ??????????????????λ????鵱?8λ?????????????????????λ??????Parity?????????????λ????????????????????λ?16λ??????????2λ?????飬??????λ?32λ?????????4λ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????漼????????????????ECC?????????????????????????????????????λ?????У??λ??????????????????????????????????????????????????????????????????Parity??????????????λ??8λ???????????5λ??????ECC????????????????λ??????????ECC??????λ????λ??????????????λ?16λ?ECCλ?6λ??32λ?ECCλ?7λ??????λ?64λ?ECCλ?8λ???????????????λ??????????ECCλ??????λ??????????????ECC??????????????????????????????????????????????????????????ж????ECC????????????????????????Parity??????????????λ?????????????????
ECC??Error Checking and Correcting????????????????棬??????????????λ??????λ?洢???????????????????????д????棬?????ECC?????????????????????????????????洢???????????????????ECC???????????????????ECC???????????????????????????????????????????????е????λ???????????????????λ??????????????????????????????????????????????????????档??????????????????α??????????????????α???С???д???????????????????????????????????????????????????????????????????????????????????????????????????д??????????????????
??????Linux ??????
972369124