SC6800H平臺Bootloader和Nandflash學(xué)習(xí)交流課件_第1頁
SC6800H平臺Bootloader和Nandflash學(xué)習(xí)交流課件_第2頁
SC6800H平臺Bootloader和Nandflash學(xué)習(xí)交流課件_第3頁
SC6800H平臺Bootloader和Nandflash學(xué)習(xí)交流課件_第4頁
SC6800H平臺Bootloader和Nandflash學(xué)習(xí)交流課件_第5頁
已閱讀5頁,還剩117頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

SC6800H平臺Bootloader和Nandflash學(xué)習(xí)交流Author:車國盛Date:2012.04.11SC6800H平臺Bootloader和Nandflash1內(nèi)容提綱1.Bootloader簡介2.為什么需要Bootloader?3.Bootloader存放在哪里?為什么?4.Bootloader運(yùn)行在哪里?5.Bootloader代碼構(gòu)架是怎樣的?6.Bootparameter如何設(shè)定的?7.Bootloader代碼解讀8.Nandflash簡介9.Nandflash和Norflash比較10.Nandflash工作原理11.Nandflash的ECC簡介12.Nandflash常用的軟件管理方案13.6800H平臺NandInterface簡介14.6800H平臺Nandflash驅(qū)動配置15.6800H平臺Nandflash分區(qū)內(nèi)容提綱1.Bootloader簡介2Bootloader簡介Bootloader就是一段小程序,它在系統(tǒng)上電時(shí)開始執(zhí)行,初始化硬件設(shè)備、準(zhǔn)備好軟件環(huán)境,最后調(diào)用系統(tǒng)內(nèi)核。典型的嵌入式系統(tǒng)Bootloader有Blob(bootloadobject)和U-boot(universalbootloader),其中U-boot支持ARM,MIPS,X86,Nios,可啟動VxWorks,QNX,Linux什么是Bootloader?Bootloader簡介Bootloader就是一段小程序,3為什么需要BootloaderNand與Nor的區(qū)別

Nand不能runinplace,Nand不支持即時(shí)的讀寫操作,需要將代碼拷貝到RAM執(zhí)行;Nand會有壞塊,需要一個(gè)壞塊管理模塊,這個(gè)模塊相對來說還是比較復(fù)雜的。Nand的壞塊特性決定了從Nand拷貝代碼到RAM是一個(gè)相對比較復(fù)雜的動作。SDRAMSDRAM需要初始化,這意味著最早的一些代碼不能在SDRAM中執(zhí)行,需要先在IRAM中運(yùn)行;IRAM很小。為什么需要BootloaderNand與Nor的區(qū)別4

Bootloader存放在哪里?為什么?在nand的第一個(gè)block

NAND_PartTable_XXX.c配置文件NBL_OFFSET即是Bootloader的位置,可以看到是0。為什么在這里:

Nand的第一個(gè)block永遠(yuǎn)不會損壞的特性決定了可以很簡單的讀取這個(gè)塊。Bootloader存放在哪里?為什么?在nand的第一個(gè)5

Bootloader運(yùn)行在哪里?boot0運(yùn)行在IRAM,boot1運(yùn)行在SDRAM。boot0的運(yùn)行地址可以從scatter0.scf中找到如下:ROM_EXEC0x400000000x8000{

boot0_entry.o(Reset,+First)sdram_init.o(+RO,+RW,+ZI)prod_cfg.o(+RO,+RW,+ZI)*.o(+RO,+RW)}Bootloader運(yùn)行在哪里?boot0運(yùn)行在IRAM,6

Bootloader運(yùn)行在哪里?boot1的運(yùn)行地址可以從scatter1.scf中找到如下:ROM_EXEC0x10000000x14000{

boot1_entry.o(Reset,+First)*.o(+RO,+RW)}Bootloader運(yùn)行在哪里?boot1的運(yùn)行地址可以從7

Bootloader代碼構(gòu)架是怎樣的?Bootloader分兩部分:boot0和boot1。boot0引導(dǎo)boot1,boot1引導(dǎo)EXEC_KERNEL_IMAGE.bin。boot0不超過16K,boot1不超過128K。boot0為什么不超過16K?(Nand第一個(gè)block永遠(yuǎn)不會壞,不做壞塊管理。一個(gè)block可能是16K或者128K,為了統(tǒng)一處理,當(dāng)16K來使用。)boot1為什么不超過128K?(暫時(shí)不確定)在scatter中boot0和boot1的大小設(shè)置為:scatter0.scf:ROM_LOAD0x400000000x4000;0x4000->16Kscatter1.scf:ROM_LOAD0x10000000x14000;0x14000->80KBootloader代碼構(gòu)架是怎樣的?Bootloader8

Bootloader代碼構(gòu)架是怎樣的?boot0入口地址:0x40000000(IRAM起始地址)boot0主要工作:boot0_entry.s

Remap->初始化SDRAM->__main->聲明bootparameter并分配空間boot0_main.c

將boot1拷貝到SDRAM->set_pc到SDRAM執(zhí)行boot1。Bootloader代碼構(gòu)架是怎樣的?boot0入口地址:9

Bootloader代碼構(gòu)架是怎樣的?boot1入口地址:0x01000000(SDRAM)boot1主要工作:boot1_entry.s

__main->聲明bootparameter并分配空間。boot1_main.c

將EXEC_KERNEL_IMAGE.bin拷貝到SDRAM,并set_pc到SDRAM執(zhí)行EXEC_KERNEL_IMAGE.bin。Kernel的運(yùn)行地址:由函數(shù)PUBLICvoidcall_kernel(void){set_pc(SDRAM_BASE_ADDR);}可以看出,SDRAM_BASE_ADDR為0地址,即EXEC_KERNEL_IMAGE.bin存放的起始地址。Bootloader代碼構(gòu)架是怎樣的?boot1入口地址:10Bootparameter如何設(shè)定的?bootparameter(nand分區(qū)表等相關(guān)信息)的設(shè)定在fdl相關(guān)代碼中,該部分代碼已封裝。在函數(shù)BOOLEANcopyKernelImg(void)中,可以看出,從flash中讀取出來bootparameter存放在bootParam中。_copyImg(ftlHandle,SDRAM_BASE_ADDR,osInfo->offset,osInfo->size,ftlPartitionInfo.sctSize)這里可以看到一部分bootparameter參數(shù)。Bootparameter如何設(shè)定的?bootparam11Bootloader代碼解讀主要文件:目錄fdl_bootloader\bootloader\srcboot0_entry.sboot0_main.cboot1_entry.sboot1_main.cBootloader代碼解讀主要文件:目錄fdl_bootl12NandFlash簡介Flash存儲器又稱閃存,是一種可在線多次擦除的非易失性存儲器,即掉電后數(shù)據(jù)不會丟失。Flash存儲器還具有體積小、功耗低、抗振性強(qiáng)等優(yōu)點(diǎn)。

Flash存儲器主要分為兩種:一種為Nor型Flash,另一種為Nand型Flash。Nand內(nèi)部采用非線性宏單元模式,為固態(tài)大容量內(nèi)存的實(shí)現(xiàn)提供了廉價(jià)有效的解決方案。Nand存儲器具有容量較大,改寫速度快等優(yōu)點(diǎn),適用于大量數(shù)據(jù)的存儲,因而在業(yè)界得到了越來越廣泛的應(yīng)用。NandFlash簡介Flash存儲器又稱閃存,是一種可在13Nandflash和Norflash比較接口比較:Nor帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內(nèi)部的每一個(gè)字節(jié)。Nor的特點(diǎn)是芯片內(nèi)執(zhí)行(XIP,eXecuteInPlace),這樣應(yīng)用程序可以直接在Norflash內(nèi)運(yùn)行,可以不把代碼讀到系統(tǒng)RAM中。例如uboot中的ro段可以直接在Norflash上運(yùn)行,只需要把rw和zi段拷貝到RAM中運(yùn)行即可。Nand器件使用復(fù)雜的I/O口來串行地存取數(shù)據(jù),I/O引腳用來傳送控制、地址和數(shù)據(jù)信息,由于時(shí)序較為復(fù)雜,所以一般CPU集成Nand控制器。Nand讀和寫操作采用512字節(jié)的塊,這一點(diǎn)有點(diǎn)像硬盤管理此類操作。Nand是非線性存儲器,不支持eXecuteInPlace。Nandflash和Norflash比較接口比較:14Nandflash和Norflash比較容量和成本比較:相比起Nand來說,Nor的容量要小,一般在1-16MByte左右,一些新工藝采用了芯片疊加技術(shù)可以把Nor的容量做得大一些。在價(jià)格方面,Nor相比Nand來說要高一些。Nand生產(chǎn)過程更為簡單,結(jié)構(gòu)可以在給定的模具尺寸內(nèi)提供更高的容量,這樣也就相應(yīng)地降低了價(jià)格。Nandflash和Norflash比較容量和成本比較:15Nandflash和Norflash比較其他方面如可靠性,耐用性等方面的比較,在這里就不一一詳述了。Nandflash和Norflash比較其他方面如可靠性16Nandflash工作原理-組成結(jié)構(gòu)Nand的數(shù)據(jù)是以bit的方式保存在memorycell,一般來說,一個(gè)cell中只能存儲一個(gè)bit。這些cell以8個(gè)或者16個(gè)為單位,連成bitline,形成所謂的byte(x8)/word(x16),這就是NandDevice的位寬(當(dāng)然還有32bit或更大的位寬的)。若干個(gè)Line會再組成Page。若干個(gè)Page組成block。若干個(gè)block組成Plane。若干個(gè)Plane組成Device。Nandflash工作原理-組成結(jié)構(gòu)Nand的數(shù)據(jù)是以bi17Nandflash工作原理-組成結(jié)構(gòu)這里以三星的Nand型號K9F1208為例子說明Nand的組成結(jié)構(gòu)。Nandflash工作原理-組成結(jié)構(gòu)這里以三星的Nand型18Nandflash工作原理-組成結(jié)構(gòu)對于上圖的Nand芯片K9F1208:每頁528Bytes:512byte(MainArea)+16byte(SpareArea)。每32個(gè)page形成一個(gè)Block(32*528B)。4096個(gè)block組成一片Nand芯片K9F1208。故總?cè)萘繛?096*(32*528B)=66MB,其中的2MB是用來保存ECC校驗(yàn)碼等額外數(shù)據(jù)的,實(shí)際中可使用的為64MB。說明:這只是針對芯片K9F1208的組成結(jié)構(gòu),不同的芯片可以根據(jù)datasheet確定。Nandflash工作原理-組成結(jié)構(gòu)對于上圖的Nand芯片19Nandflash工作原理-組成結(jié)構(gòu)對于上圖的Nand芯片K9F1208:1Page=528Byte,其中512byte為MainArea,16byte為SpareArea。1Block=32Page*528Byte。1Device=4096(塊)*32(頁)*528(字節(jié))*8(位)=528Mbit=66Mbyte總?cè)萘繛?6Mbyte,其中的2Mbyte是用來保存ECC校驗(yàn)碼等額外數(shù)據(jù)的,實(shí)際中可使用的為64Mbyte。說明:這只是針對芯片K9F1208的組成結(jié)構(gòu),不同的芯片可以根據(jù)datasheet確定。Nandflash工作原理-組成結(jié)構(gòu)對于上圖的Nand芯片20Nandflash工作原理-組成結(jié)構(gòu)Page分為main和spare區(qū)。main是用來保存數(shù)據(jù)的,spare區(qū)一般用來標(biāo)記壞塊以及保存對main區(qū)數(shù)據(jù)的ECC校驗(yàn)碼等。spare區(qū)大小:(每512+16)byte就有16byte作為spare區(qū)。spare區(qū)這16byte格式:不同廠家的格式可能有所區(qū)別,沒有統(tǒng)一的標(biāo)準(zhǔn)格式。Nandflash工作原理-組成結(jié)構(gòu)Page分為main和21Nandflash工作原理-組成結(jié)構(gòu)以下是spare區(qū)的一個(gè)例子:LSN0LSN1LSN2RESERVEDRESERVEDBIECC0ECC1ECC2S-ECC0S-ECC1RESERVEDRESERVEDRESERVEDRESERVEDRESERVED其中:LSN:LogicalSectorNumber(跟壞塊管理有關(guān))ECCa,ECCb,ECCc:ECCcodeforMainareadata(ErrorCheckingandCorrection)S_ECCa,S_ECCb:ECCcodeforLSNdataBI:BadblockInformationNandflash工作原理-組成結(jié)構(gòu)以下是spare區(qū)的一22Nandflash工作原理-尋址剛才算的容量是有64Mbyte的空間,225bit<64Mbyte<226bit

也就是說需要26位地址傳送,可是看Nand的原理圖發(fā)現(xiàn)有IO0-IO7,它是怎么尋址的呢?Nandflash工作原理-尋址剛才算的容量是有64Mby23Nandflash工作原理-尋址看看下面完整的ArrayOrganizationNandflash工作原理-尋址看看下面完整的Array24Nandflash工作原理-尋址原來Nand并不是直接通過里面的存儲物理層,而是有一個(gè)專門的頁寄存器來管理的。不論是什么操作都要首先通過pageregsiter。從上圖來看,A0-A7是頁內(nèi)尋址,也叫列尋址,也就是512尋址,不過A0-A7才8位,最大也就尋址256?實(shí)質(zhì)上還有一位A8,A8是由Nand里面的某個(gè)硬件電路根據(jù)相關(guān)的命令而置為1或者0,這不用軟件來操作。例如說要尋址0~255字節(jié),這樣的話8位IO搞定了,這時(shí)候硬件電路就會把A8置為0;如果說要尋址第484字節(jié),8位就不夠了,硬件電路就會把A8置1,完成所謂的第484個(gè)字節(jié)尋址。484的二進(jìn)制是111100100,需要9位才行,A8此時(shí)就充當(dāng)?shù)?位,其余8位還是由IO完成的,這樣就可以完成512字節(jié)內(nèi)的任何尋址了。Nandflash工作原理-尋址原來Nand并不是直接通過25Nandflash工作原理-尋址A9~A25是用來進(jìn)行頁尋址的,也叫行尋址,4096塊*32頁=131072頁,用A9~A25就可以搞定這么多頁了?;谝陨峡芍?A9~A25是進(jìn)行多達(dá)上萬頁尋址的,其實(shí)還可以細(xì)分的,A9~A13是塊內(nèi)的32頁尋址,正好5位,2的5次方=32,一塊由32頁組成,A14~A25是用來進(jìn)行塊尋址的,4096塊,也足夠了。其實(shí)A14~A25還可以細(xì)分,還有個(gè)叫“層”的概念。Nand還被組織成一種形式,就是把整個(gè)Nand分成若干個(gè)層(plane),每層若干塊,每層里還有個(gè)528字節(jié)的頁寄存器。如下圖:Nandflash工作原理-尋址A9~A25是用來進(jìn)行頁尋26Nandflash工作原理-尋址K9F1208分4個(gè)層,每層1024塊,所以說A14~A15是用于plane尋址的,A16~A25用于Block尋址。Nandflash工作原理-尋址K9F1208分4個(gè)層,每27Nandflash工作原理-指令集這里簡單介紹下Nand的指令操作:Nandflash工作原理-指令集這里簡單介紹下Nand的28Nandflash工作原理-壞塊管理為什么會出現(xiàn)壞塊?由于Nand的工藝不能保證Nand的MemoryArray在其生命周期中保持性能的可靠,因此,在Nand的生產(chǎn)中及使用過程中會產(chǎn)生壞塊。說明:Nand的第一個(gè)Block經(jīng)特殊工藝處理,默認(rèn)是不會成為壞塊的,常用于系統(tǒng)的引導(dǎo)。Nandflash工作原理-壞塊管理為什么會出現(xiàn)壞塊?29NandFlash工作原理-壞塊管理壞塊的具體表現(xiàn):當(dāng)編程/擦除這個(gè)塊時(shí),不能將某些位拉高,這會造成PageProgram和BlockErase操作時(shí)的錯(cuò)誤,相應(yīng)地反映到StatusRegister的相應(yīng)位。NandFlash工作原理-壞塊管理壞塊的具體表現(xiàn):30NandFlash工作原理-壞塊管理壞塊的種類:先天性壞塊這種壞塊是在生產(chǎn)過程中產(chǎn)生的,一般芯片原廠都會在出廠時(shí)都會將壞塊第一個(gè)page的spare區(qū)的第6個(gè)byte標(biāo)記為非0xff的值。后天性壞塊這種壞塊是在Nandflash使用過程中產(chǎn)生的,如果BlockErase或者PageProgram錯(cuò)誤,就可以簡單地將這個(gè)塊作為壞塊來處理,這個(gè)時(shí)候需要把壞塊標(biāo)記起來。為了和先天性壞塊信息保持一致,將新發(fā)現(xiàn)的壞塊的第一個(gè)page的spare區(qū)的第6個(gè)Byte標(biāo)記為非0xff的值。NandFlash工作原理-壞塊管理壞塊的種類:31NandFlash工作原理-壞塊管理壞塊的處理:理解了先天性壞塊和后天性壞塊后,我們已明白Nand出廠時(shí)在spare區(qū)中已經(jīng)反映出了壞塊信息,因此,如果在擦除一個(gè)塊之前,一定要先檢查spare區(qū)的第6個(gè)byte是否是0xff,如果是就證明這是一個(gè)好塊,可以擦除;如果是非0xff,那么就不能擦除。不過,這樣處理可能會錯(cuò)殺偽壞塊,因?yàn)樵谛酒僮鬟^程中可能由于電壓不穩(wěn)定等偶然因素會造成Nand操作的錯(cuò)誤。但是,為了數(shù)據(jù)的可靠性及軟件設(shè)計(jì)的簡單化,壞塊一個(gè)也不能放過。NandFlash工作原理-壞塊管理壞塊的處理:32NandFlash工作原理-壞塊管理錯(cuò)殺壞塊的補(bǔ)救方法:如果在對一個(gè)塊的某個(gè)page進(jìn)行編程的時(shí)候發(fā)生了錯(cuò)誤就要把這個(gè)塊標(biāo)記為壞塊,首先就要把其他好的page里面的內(nèi)容備份到另外一個(gè)空的好塊里面,然后,把這個(gè)塊標(biāo)記為壞塊。當(dāng)發(fā)生“錯(cuò)殺”之后,可以在進(jìn)行完頁備份之后,再將這個(gè)塊擦除一遍,如果BlockErase發(fā)生錯(cuò)誤,那就證明這個(gè)塊是個(gè)真正的壞塊。NandFlash工作原理-壞塊管理錯(cuò)殺壞塊的補(bǔ)救方法:33Nandflash的ECC簡介ECC的全稱是ErrorCheckingandCorrection,是一種用于Nand的差錯(cuò)檢測和修正算法。如果操作時(shí)序和電路穩(wěn)定性不存在問題的話,NandFlash出錯(cuò)的時(shí)候一般不會造成整個(gè)Block或是Page不能讀取或是全部出錯(cuò),而是整個(gè)Page(例如512Bytes)中只有一個(gè)或幾個(gè)bit出錯(cuò)。ECC能糾正1個(gè)比特錯(cuò)誤和檢測2個(gè)比特錯(cuò)誤,而且計(jì)算速度很快,但對1比特以上的錯(cuò)誤無法糾正,對2比特以上的錯(cuò)誤不保證能檢測。Nandflash的ECC簡介ECC的全稱是ErrorC34Nandflash的ECC簡介ECC校驗(yàn)算法:ECC校驗(yàn)每次對256字節(jié)的數(shù)據(jù)進(jìn)行操作,包含列校驗(yàn)和行校驗(yàn)。ECC糾錯(cuò)算法:當(dāng)往NandFlash的page中寫入數(shù)據(jù)的時(shí)候,每256字節(jié)生成一個(gè)ECC校驗(yàn)和,稱之為原ECC校驗(yàn)和,保存到PAGE的OOB(out-of-band)數(shù)據(jù)區(qū)中。當(dāng)從NandFlash中讀取數(shù)據(jù)的時(shí)候,每256字節(jié)我們生成一個(gè)ECC校驗(yàn)和,稱之為新ECC校驗(yàn)和。將從OOB區(qū)中讀出的原ECC校驗(yàn)和新ECC校驗(yàn)和按位異或,若結(jié)果為0,則表示不存在錯(cuò)(或是出現(xiàn)了ECC無法檢測的錯(cuò)誤);若3個(gè)字節(jié)異或結(jié)果中存在11個(gè)比特位為1,表示存在一個(gè)比特錯(cuò)誤,且可糾正;若3個(gè)字節(jié)異或結(jié)果中只存在1個(gè)比特位為1,表示OOB區(qū)出錯(cuò);其他情況均表示出現(xiàn)了無法糾正的錯(cuò)誤。Nandflash的ECC簡介ECC校驗(yàn)算法:35Nandflash常用的軟件管理方案NandFlash由于自身的原因,會有一些限制:1不能直接在數(shù)據(jù)上進(jìn)行覆蓋,必須先擦后寫。2寫和擦有壽命。某些塊可能會用的更頻繁從而導(dǎo)致壞塊。3在出廠時(shí)會存在壞塊,在使用過程中也會產(chǎn)生壞塊。4會在讀取數(shù)據(jù)時(shí)產(chǎn)生錯(cuò)誤或讀取失敗。正是因?yàn)檫@些限制,NandFlash的操作相對比較復(fù)雜,因此需要通過軟件將NandFlash仿真為傳統(tǒng)的邏輯塊設(shè)備,便于讀擦寫等操作。SC6800H平臺目前支持FTL和XSR兩種軟件管理方案:在PDA_V2.0之前,平臺使用的是XSR解決方案,在PDA_V2.0平臺使用的是FTL解決方案。Nandflash常用的軟件管理方案NandFlash由36Nandflash常用的軟件管理方案FTL(FlashTranslationLayer)

傳統(tǒng)的嵌入式系統(tǒng)一般使用FTL方案。FTL將NandFlash仿真為一個(gè)塊設(shè)備使得NandFlash與其他常規(guī)塊存儲設(shè)備一樣。FTL是處于文件系統(tǒng)和NandFlash設(shè)備之間一個(gè)中間層。

FTL從文件系統(tǒng)層收到讀寫操作的邏輯地址。在FTL層把這些邏輯地址映射成真正的物理地址,從而正確的進(jìn)行相應(yīng)操作。由于FTL創(chuàng)建了虛擬塊進(jìn)行映射管理,所以對這些虛擬塊會有一些相應(yīng)的軟件算法,比如垃圾收集(Garbage

Collection),壞塊管理(BadBlockManagement),寫平衡算法(Wear-Leveling)等。這些算法有助于管理塊結(jié)構(gòu)和延長NandFlash的壽命。Nandflash常用的軟件管理方案FTL(FlashT37Nandflash常用的軟件管理方案FTL(FlashTranslationLayer)垃圾收集(Garbage

Collection)

在對數(shù)據(jù)進(jìn)行修改的時(shí)候,因?yàn)闆]有把原來的數(shù)據(jù)清空,這樣就會導(dǎo)致部分物理區(qū)域中的數(shù)據(jù)是無效的,即垃圾數(shù)據(jù)。通過垃圾收集技術(shù)(GarbageCollection),系統(tǒng)把要清零的塊中的有效數(shù)據(jù)先移動到其他區(qū)域,并且改變邏輯塊到物理塊的映射關(guān)系,然后對整塊進(jìn)行清零操作。

一般垃圾收集遵循兩個(gè)原則:垃圾最多(速度原則);使用的次數(shù)最少(平衡原則)。Nandflash常用的軟件管理方案FTL(FlashT38Nandflash常用的軟件管理方案FTL(FlashTranslationLayer)寫平衡算法(Wear-LevelingAlgorithm)

一般的NandFlash能保證每個(gè)塊可以擦寫10萬次。但是由于一些塊所使用的次數(shù)會比其他塊頻繁,從而導(dǎo)致更容易出現(xiàn)壞塊。

寫平衡算法(Wear-LevelingAlgorithm)就是用于保證每個(gè)塊都能得到比較均衡的使用。由于在每個(gè)塊中都有一個(gè)計(jì)數(shù)器,用于記錄該塊被擦除的次數(shù),所以寫平衡算法會自動利用這個(gè)計(jì)數(shù)器,并將被擦除次數(shù)最少的塊用于新的操作中。Nandflash常用的軟件管理方案FTL(FlashT39Nandflash常用的軟件管理方案FTL(FlashTranslationLayer)ErrorCorrectionCode

ECC分為硬件ECC和軟件ECC。ECC使用就是糾正偵測到的數(shù)據(jù)錯(cuò)誤,它保證了NandFlash的可靠性和數(shù)據(jù)完整性。而在NandFlash中采取的是“先寫后清除”的措施,如果出現(xiàn)錯(cuò)誤,原始的數(shù)據(jù)還可以使用,從而保證了數(shù)據(jù)的可恢復(fù)性。Nandflash常用的軟件管理方案FTL(FlashT40Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)XSR是SAMSUNG推出的專門用于管理NandFlash的軟件解決方案。XSR將NandFlash看作常規(guī)的塊設(shè)備,其功能同傳統(tǒng)的FTL一樣。但XSR比FTL更加強(qiáng)大。XSR處于文件系統(tǒng)和NandFlash之間。它提供給操作系統(tǒng)全部的塊設(shè)備功能,使得NandFlash就像一個(gè)常規(guī)的硬盤一樣,能更方便管理數(shù)據(jù)。Nandflash常用的軟件管理方案XSR(eXtende41Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)XSR共分為五個(gè)主要部分:1

XSR核心層(XSRCore),其中XSR核心層又可分為兩個(gè)層次:

扇區(qū)轉(zhuǎn)換層STL(SectorTranslationLayer)

塊管理層BML(BlockManagementLayer)2操作系統(tǒng)適配模塊層OAM(OSAdaptationModule)3平臺適配模塊層PAM(PlatformAdaptationModule)4底層設(shè)備驅(qū)動層LLD(LowLevelDeviceDriver)Nandflash常用的軟件管理方案XSR(eXtende42Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)扇區(qū)轉(zhuǎn)換層STL(SectorTranslationLayer)

STL(扇區(qū)轉(zhuǎn)換層)是XSR架構(gòu)中一個(gè)很重要的部分,它從事一些主要的管理任務(wù)。該層主要同扇區(qū)轉(zhuǎn)換相關(guān),將文件系統(tǒng)傳來的邏輯扇區(qū)地址(logicalsectoraddress)轉(zhuǎn)換為虛擬扇區(qū)地址(virtualsectoraddress)。

STL主要包括:地址轉(zhuǎn)換(AddressTranslation),寫平衡算法(NaturalWearLeveling),大塊優(yōu)化管理(LargeBlockOptimization),斷電保護(hù)(PoweroffRecovery),允許異步/同步操作,支持多卷(SupportingMultipleVolume)等。Nandflash常用的軟件管理方案XSR(eXtende43Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)BML(BlockManagementLayer)

BML將從STL層傳來的虛擬地址轉(zhuǎn)換為具體的物理地址。在對NandFlash進(jìn)行讀/寫/擦除操作時(shí)。但有可能會遇到錯(cuò)誤或者失敗,而這些有錯(cuò)誤或發(fā)生失敗的塊就叫做壞塊。BML專門用于管理這些壞塊,并且還可以對一些無效塊進(jìn)行管理.

BML主要包括:分區(qū)信息管理(PartitionInformationManagement),交錯(cuò)訪問NandFlash設(shè)備(NANDDeviceInterleaving),壞塊管理(BadBlockManagement),軟件ECC(SoftwareECC),多卷管理(MultipleVolume

Management)等。Nandflash常用的軟件管理方案XSR(eXtende44Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)LLD(LowLevelDeviceDriver)

LLD(底層設(shè)備驅(qū)動層)是所有XSR的結(jié)構(gòu)層中真正同物理層接觸的,即真正能夠訪問物理設(shè)備的層次。通過前面STL和BML的轉(zhuǎn)換,LLD使用上面?zhèn)鱽淼恼嬲奈锢淼刂?,找到需要的NandFlash空間,對它進(jìn)行所需的各種操作。Nandflash常用的軟件管理方案XSR(eXtende45Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)OAM(OSAdaptationModule)

OAM(操作系統(tǒng)適配模塊層)用于接收操作系統(tǒng)提供的服務(wù),并將它們作用到XSR架構(gòu)中。OAM是一個(gè)相對獨(dú)立的層次,當(dāng)操作系統(tǒng)改變后,用戶只需要改變OAM的配置即可。OAM會提供一些中斷,時(shí)序,異步/同步標(biāo)志等功能函數(shù)。Nandflash常用的軟件管理方案XSR(eXtende46Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)PAM(PlatformAdaptationModule)

PAM(平臺適配模塊層)用于將XSR同具體的平臺聯(lián)系在一起,用于獲取平臺的相關(guān)信息或者功能。PAM同樣也是獨(dú)立的層次,平臺改變后,用戶只需改變PAM相關(guān)配置即可。這里所指的平臺是由CPU,SDRAM,NandFlash等組成的系統(tǒng)。Nandflash常用的軟件管理方案XSR(eXtende476800H平臺NandInterface簡介支持8/16bit寬度。支持Nand的容量不大于2Gbyte,支持3~4地址序列,若是每頁大小為2kbyte,支持4~5地址序列。若是每頁大小為512byte,硬件上支持4頁連續(xù)讀寫。支持硬件ECC校驗(yàn),但須由軟件來糾錯(cuò)。支持SmallPage(512byte)和LargePage(2Kbyte)。6800H平臺NandInterface簡介支持8/16b486800H平臺Nandflash驅(qū)動配置6800H平臺推薦的memory方案是Nand+SDRAM(目前Nor+pSram方案還沒有做好)。其中完成一款新的Nand驅(qū)動一般是配置一張表,即NandSpec.c中的astNandSpec[]表,對應(yīng)的結(jié)構(gòu)體為LLDSpec。6800H平臺Nandflash驅(qū)動配置6800H平臺推薦496800H平臺Nandflash驅(qū)動配置結(jié)構(gòu)體LLDSpec的定義為:6800H平臺Nandflash驅(qū)動配置結(jié)構(gòu)體LLDSpe506800H平臺Nandflash驅(qū)動配置LLDSpec參數(shù)說明:6800H平臺Nandflash驅(qū)動配置LLDSpec參數(shù)516800H平臺Nandflash驅(qū)動配置這里特別說明一下幾個(gè)參數(shù):UINT8nBadPos;/*BadBlockInformationPoisition*/UINT8nLsnPos;/*LSNPosition*/UINT8nEccPos;/*ECCBytePosition*/UINT8nAdvance;/*thepropertyofAdvance*/UINT16nTrTime;/*read-timeofNANDdevice(unit:usec)*/UINT16nTwTime;/*write-timeofNANDdevice(unit:usec)*/UINT16nTeTime;/*erase-timeofNANDdevice(unit:usec)*/UINT16nTfTime;/*transfer-timefromNANDdevicetohost*/6800H平臺Nandflash驅(qū)動配置這里特別說明一下幾526800H平臺Nandflash分區(qū)Nand的第一個(gè)Block是用特殊工藝生產(chǎn)保證其永遠(yuǎn)不會變成壞塊,用來存放Bootloader。其他各個(gè)分區(qū)分成兩類:BML分區(qū)和STL分區(qū)。6800H平臺Nandflash分區(qū)Nand的第一個(gè)Blo536800H平臺Nandflash分區(qū)分區(qū)示意圖:6800H平臺Nandflash分區(qū)分區(qū)示意圖:546800H平臺Nandflash分區(qū)BML分區(qū):BML分區(qū)一般情況下只在程序下載時(shí)寫入,在手機(jī)程序運(yùn)行時(shí)該分區(qū)是只讀屬性。OSImagePartition、DownloadNVPartition、CalibrationPartition和MMIResourcePartition都屬于BML分區(qū)。6800H平臺Nandflash分區(qū)BML分區(qū):556800H平臺Nandflash分區(qū)STL分區(qū):STL分區(qū)是在程序運(yùn)行過程中可讀可寫的邏輯分區(qū)。RunningNVPartition和U-disk管理區(qū)都屬于STL分區(qū)。用戶還可以創(chuàng)建最多不超過2個(gè)的STL分區(qū)用作一些其他應(yīng)用。6800H平臺Nandflash分區(qū)STL分區(qū):566800H平臺Nandflash分區(qū)如何修改分區(qū)的大???(1)修改smallpage的Nandflash分區(qū)在文件:Nand_PartTable_16k.c(2)修改largepage的Nandflash分區(qū)在文件:Nand_PartTable_128k.c下面的Code是Nand_PartTable_16k.c的部分配置:6800H平臺Nandflash分區(qū)如何修改分區(qū)的大?。?76800H平臺Nandflash分區(qū)6800H平臺Nandflash分區(qū)586800H平臺Nandflash分區(qū)修改各分區(qū)size時(shí)需要注意:(1)修改了任何分區(qū)的大小都可能導(dǎo)致U盤大小的變更,一定要根據(jù)實(shí)際情況修改U盤的大小,修改地方為Makefile文件中的UDISK_SIZE或UDISK_SIZE_16800H平臺Nandflash分區(qū)修改各分區(qū)size時(shí)需59Q&AQ&A60TheEnd!TheEnd!61SC6800H平臺Bootloader和Nandflash學(xué)習(xí)交流Author:車國盛Date:2012.04.11SC6800H平臺Bootloader和Nandflash62內(nèi)容提綱1.Bootloader簡介2.為什么需要Bootloader?3.Bootloader存放在哪里?為什么?4.Bootloader運(yùn)行在哪里?5.Bootloader代碼構(gòu)架是怎樣的?6.Bootparameter如何設(shè)定的?7.Bootloader代碼解讀8.Nandflash簡介9.Nandflash和Norflash比較10.Nandflash工作原理11.Nandflash的ECC簡介12.Nandflash常用的軟件管理方案13.6800H平臺NandInterface簡介14.6800H平臺Nandflash驅(qū)動配置15.6800H平臺Nandflash分區(qū)內(nèi)容提綱1.Bootloader簡介63Bootloader簡介Bootloader就是一段小程序,它在系統(tǒng)上電時(shí)開始執(zhí)行,初始化硬件設(shè)備、準(zhǔn)備好軟件環(huán)境,最后調(diào)用系統(tǒng)內(nèi)核。典型的嵌入式系統(tǒng)Bootloader有Blob(bootloadobject)和U-boot(universalbootloader),其中U-boot支持ARM,MIPS,X86,Nios,可啟動VxWorks,QNX,Linux什么是Bootloader?Bootloader簡介Bootloader就是一段小程序,64為什么需要BootloaderNand與Nor的區(qū)別

Nand不能runinplace,Nand不支持即時(shí)的讀寫操作,需要將代碼拷貝到RAM執(zhí)行;Nand會有壞塊,需要一個(gè)壞塊管理模塊,這個(gè)模塊相對來說還是比較復(fù)雜的。Nand的壞塊特性決定了從Nand拷貝代碼到RAM是一個(gè)相對比較復(fù)雜的動作。SDRAMSDRAM需要初始化,這意味著最早的一些代碼不能在SDRAM中執(zhí)行,需要先在IRAM中運(yùn)行;IRAM很小。為什么需要BootloaderNand與Nor的區(qū)別65

Bootloader存放在哪里?為什么?在nand的第一個(gè)block

NAND_PartTable_XXX.c配置文件NBL_OFFSET即是Bootloader的位置,可以看到是0。為什么在這里:

Nand的第一個(gè)block永遠(yuǎn)不會損壞的特性決定了可以很簡單的讀取這個(gè)塊。Bootloader存放在哪里?為什么?在nand的第一個(gè)66

Bootloader運(yùn)行在哪里?boot0運(yùn)行在IRAM,boot1運(yùn)行在SDRAM。boot0的運(yùn)行地址可以從scatter0.scf中找到如下:ROM_EXEC0x400000000x8000{

boot0_entry.o(Reset,+First)sdram_init.o(+RO,+RW,+ZI)prod_cfg.o(+RO,+RW,+ZI)*.o(+RO,+RW)}Bootloader運(yùn)行在哪里?boot0運(yùn)行在IRAM,67

Bootloader運(yùn)行在哪里?boot1的運(yùn)行地址可以從scatter1.scf中找到如下:ROM_EXEC0x10000000x14000{

boot1_entry.o(Reset,+First)*.o(+RO,+RW)}Bootloader運(yùn)行在哪里?boot1的運(yùn)行地址可以從68

Bootloader代碼構(gòu)架是怎樣的?Bootloader分兩部分:boot0和boot1。boot0引導(dǎo)boot1,boot1引導(dǎo)EXEC_KERNEL_IMAGE.bin。boot0不超過16K,boot1不超過128K。boot0為什么不超過16K?(Nand第一個(gè)block永遠(yuǎn)不會壞,不做壞塊管理。一個(gè)block可能是16K或者128K,為了統(tǒng)一處理,當(dāng)16K來使用。)boot1為什么不超過128K?(暫時(shí)不確定)在scatter中boot0和boot1的大小設(shè)置為:scatter0.scf:ROM_LOAD0x400000000x4000;0x4000->16Kscatter1.scf:ROM_LOAD0x10000000x14000;0x14000->80KBootloader代碼構(gòu)架是怎樣的?Bootloader69

Bootloader代碼構(gòu)架是怎樣的?boot0入口地址:0x40000000(IRAM起始地址)boot0主要工作:boot0_entry.s

Remap->初始化SDRAM->__main->聲明bootparameter并分配空間boot0_main.c

將boot1拷貝到SDRAM->set_pc到SDRAM執(zhí)行boot1。Bootloader代碼構(gòu)架是怎樣的?boot0入口地址:70

Bootloader代碼構(gòu)架是怎樣的?boot1入口地址:0x01000000(SDRAM)boot1主要工作:boot1_entry.s

__main->聲明bootparameter并分配空間。boot1_main.c

將EXEC_KERNEL_IMAGE.bin拷貝到SDRAM,并set_pc到SDRAM執(zhí)行EXEC_KERNEL_IMAGE.bin。Kernel的運(yùn)行地址:由函數(shù)PUBLICvoidcall_kernel(void){set_pc(SDRAM_BASE_ADDR);}可以看出,SDRAM_BASE_ADDR為0地址,即EXEC_KERNEL_IMAGE.bin存放的起始地址。Bootloader代碼構(gòu)架是怎樣的?boot1入口地址:71Bootparameter如何設(shè)定的?bootparameter(nand分區(qū)表等相關(guān)信息)的設(shè)定在fdl相關(guān)代碼中,該部分代碼已封裝。在函數(shù)BOOLEANcopyKernelImg(void)中,可以看出,從flash中讀取出來bootparameter存放在bootParam中。_copyImg(ftlHandle,SDRAM_BASE_ADDR,osInfo->offset,osInfo->size,ftlPartitionInfo.sctSize)這里可以看到一部分bootparameter參數(shù)。Bootparameter如何設(shè)定的?bootparam72Bootloader代碼解讀主要文件:目錄fdl_bootloader\bootloader\srcboot0_entry.sboot0_main.cboot1_entry.sboot1_main.cBootloader代碼解讀主要文件:目錄fdl_bootl73NandFlash簡介Flash存儲器又稱閃存,是一種可在線多次擦除的非易失性存儲器,即掉電后數(shù)據(jù)不會丟失。Flash存儲器還具有體積小、功耗低、抗振性強(qiáng)等優(yōu)點(diǎn)。

Flash存儲器主要分為兩種:一種為Nor型Flash,另一種為Nand型Flash。Nand內(nèi)部采用非線性宏單元模式,為固態(tài)大容量內(nèi)存的實(shí)現(xiàn)提供了廉價(jià)有效的解決方案。Nand存儲器具有容量較大,改寫速度快等優(yōu)點(diǎn),適用于大量數(shù)據(jù)的存儲,因而在業(yè)界得到了越來越廣泛的應(yīng)用。NandFlash簡介Flash存儲器又稱閃存,是一種可在74Nandflash和Norflash比較接口比較:Nor帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內(nèi)部的每一個(gè)字節(jié)。Nor的特點(diǎn)是芯片內(nèi)執(zhí)行(XIP,eXecuteInPlace),這樣應(yīng)用程序可以直接在Norflash內(nèi)運(yùn)行,可以不把代碼讀到系統(tǒng)RAM中。例如uboot中的ro段可以直接在Norflash上運(yùn)行,只需要把rw和zi段拷貝到RAM中運(yùn)行即可。Nand器件使用復(fù)雜的I/O口來串行地存取數(shù)據(jù),I/O引腳用來傳送控制、地址和數(shù)據(jù)信息,由于時(shí)序較為復(fù)雜,所以一般CPU集成Nand控制器。Nand讀和寫操作采用512字節(jié)的塊,這一點(diǎn)有點(diǎn)像硬盤管理此類操作。Nand是非線性存儲器,不支持eXecuteInPlace。Nandflash和Norflash比較接口比較:75Nandflash和Norflash比較容量和成本比較:相比起Nand來說,Nor的容量要小,一般在1-16MByte左右,一些新工藝采用了芯片疊加技術(shù)可以把Nor的容量做得大一些。在價(jià)格方面,Nor相比Nand來說要高一些。Nand生產(chǎn)過程更為簡單,結(jié)構(gòu)可以在給定的模具尺寸內(nèi)提供更高的容量,這樣也就相應(yīng)地降低了價(jià)格。Nandflash和Norflash比較容量和成本比較:76Nandflash和Norflash比較其他方面如可靠性,耐用性等方面的比較,在這里就不一一詳述了。Nandflash和Norflash比較其他方面如可靠性77Nandflash工作原理-組成結(jié)構(gòu)Nand的數(shù)據(jù)是以bit的方式保存在memorycell,一般來說,一個(gè)cell中只能存儲一個(gè)bit。這些cell以8個(gè)或者16個(gè)為單位,連成bitline,形成所謂的byte(x8)/word(x16),這就是NandDevice的位寬(當(dāng)然還有32bit或更大的位寬的)。若干個(gè)Line會再組成Page。若干個(gè)Page組成block。若干個(gè)block組成Plane。若干個(gè)Plane組成Device。Nandflash工作原理-組成結(jié)構(gòu)Nand的數(shù)據(jù)是以bi78Nandflash工作原理-組成結(jié)構(gòu)這里以三星的Nand型號K9F1208為例子說明Nand的組成結(jié)構(gòu)。Nandflash工作原理-組成結(jié)構(gòu)這里以三星的Nand型79Nandflash工作原理-組成結(jié)構(gòu)對于上圖的Nand芯片K9F1208:每頁528Bytes:512byte(MainArea)+16byte(SpareArea)。每32個(gè)page形成一個(gè)Block(32*528B)。4096個(gè)block組成一片Nand芯片K9F1208。故總?cè)萘繛?096*(32*528B)=66MB,其中的2MB是用來保存ECC校驗(yàn)碼等額外數(shù)據(jù)的,實(shí)際中可使用的為64MB。說明:這只是針對芯片K9F1208的組成結(jié)構(gòu),不同的芯片可以根據(jù)datasheet確定。Nandflash工作原理-組成結(jié)構(gòu)對于上圖的Nand芯片80Nandflash工作原理-組成結(jié)構(gòu)對于上圖的Nand芯片K9F1208:1Page=528Byte,其中512byte為MainArea,16byte為SpareArea。1Block=32Page*528Byte。1Device=4096(塊)*32(頁)*528(字節(jié))*8(位)=528Mbit=66Mbyte總?cè)萘繛?6Mbyte,其中的2Mbyte是用來保存ECC校驗(yàn)碼等額外數(shù)據(jù)的,實(shí)際中可使用的為64Mbyte。說明:這只是針對芯片K9F1208的組成結(jié)構(gòu),不同的芯片可以根據(jù)datasheet確定。Nandflash工作原理-組成結(jié)構(gòu)對于上圖的Nand芯片81Nandflash工作原理-組成結(jié)構(gòu)Page分為main和spare區(qū)。main是用來保存數(shù)據(jù)的,spare區(qū)一般用來標(biāo)記壞塊以及保存對main區(qū)數(shù)據(jù)的ECC校驗(yàn)碼等。spare區(qū)大小:(每512+16)byte就有16byte作為spare區(qū)。spare區(qū)這16byte格式:不同廠家的格式可能有所區(qū)別,沒有統(tǒng)一的標(biāo)準(zhǔn)格式。Nandflash工作原理-組成結(jié)構(gòu)Page分為main和82Nandflash工作原理-組成結(jié)構(gòu)以下是spare區(qū)的一個(gè)例子:LSN0LSN1LSN2RESERVEDRESERVEDBIECC0ECC1ECC2S-ECC0S-ECC1RESERVEDRESERVEDRESERVEDRESERVEDRESERVED其中:LSN:LogicalSectorNumber(跟壞塊管理有關(guān))ECCa,ECCb,ECCc:ECCcodeforMainareadata(ErrorCheckingandCorrection)S_ECCa,S_ECCb:ECCcodeforLSNdataBI:BadblockInformationNandflash工作原理-組成結(jié)構(gòu)以下是spare區(qū)的一83Nandflash工作原理-尋址剛才算的容量是有64Mbyte的空間,225bit<64Mbyte<226bit

也就是說需要26位地址傳送,可是看Nand的原理圖發(fā)現(xiàn)有IO0-IO7,它是怎么尋址的呢?Nandflash工作原理-尋址剛才算的容量是有64Mby84Nandflash工作原理-尋址看看下面完整的ArrayOrganizationNandflash工作原理-尋址看看下面完整的Array85Nandflash工作原理-尋址原來Nand并不是直接通過里面的存儲物理層,而是有一個(gè)專門的頁寄存器來管理的。不論是什么操作都要首先通過pageregsiter。從上圖來看,A0-A7是頁內(nèi)尋址,也叫列尋址,也就是512尋址,不過A0-A7才8位,最大也就尋址256?實(shí)質(zhì)上還有一位A8,A8是由Nand里面的某個(gè)硬件電路根據(jù)相關(guān)的命令而置為1或者0,這不用軟件來操作。例如說要尋址0~255字節(jié),這樣的話8位IO搞定了,這時(shí)候硬件電路就會把A8置為0;如果說要尋址第484字節(jié),8位就不夠了,硬件電路就會把A8置1,完成所謂的第484個(gè)字節(jié)尋址。484的二進(jìn)制是111100100,需要9位才行,A8此時(shí)就充當(dāng)?shù)?位,其余8位還是由IO完成的,這樣就可以完成512字節(jié)內(nèi)的任何尋址了。Nandflash工作原理-尋址原來Nand并不是直接通過86Nandflash工作原理-尋址A9~A25是用來進(jìn)行頁尋址的,也叫行尋址,4096塊*32頁=131072頁,用A9~A25就可以搞定這么多頁了?;谝陨峡芍?A9~A25是進(jìn)行多達(dá)上萬頁尋址的,其實(shí)還可以細(xì)分的,A9~A13是塊內(nèi)的32頁尋址,正好5位,2的5次方=32,一塊由32頁組成,A14~A25是用來進(jìn)行塊尋址的,4096塊,也足夠了。其實(shí)A14~A25還可以細(xì)分,還有個(gè)叫“層”的概念。Nand還被組織成一種形式,就是把整個(gè)Nand分成若干個(gè)層(plane),每層若干塊,每層里還有個(gè)528字節(jié)的頁寄存器。如下圖:Nandflash工作原理-尋址A9~A25是用來進(jìn)行頁尋87Nandflash工作原理-尋址K9F1208分4個(gè)層,每層1024塊,所以說A14~A15是用于plane尋址的,A16~A25用于Block尋址。Nandflash工作原理-尋址K9F1208分4個(gè)層,每88Nandflash工作原理-指令集這里簡單介紹下Nand的指令操作:Nandflash工作原理-指令集這里簡單介紹下Nand的89Nandflash工作原理-壞塊管理為什么會出現(xiàn)壞塊?由于Nand的工藝不能保證Nand的MemoryArray在其生命周期中保持性能的可靠,因此,在Nand的生產(chǎn)中及使用過程中會產(chǎn)生壞塊。說明:Nand的第一個(gè)Block經(jīng)特殊工藝處理,默認(rèn)是不會成為壞塊的,常用于系統(tǒng)的引導(dǎo)。Nandflash工作原理-壞塊管理為什么會出現(xiàn)壞塊?90NandFlash工作原理-壞塊管理壞塊的具體表現(xiàn):當(dāng)編程/擦除這個(gè)塊時(shí),不能將某些位拉高,這會造成PageProgram和BlockErase操作時(shí)的錯(cuò)誤,相應(yīng)地反映到StatusRegister的相應(yīng)位。NandFlash工作原理-壞塊管理壞塊的具體表現(xiàn):91NandFlash工作原理-壞塊管理壞塊的種類:先天性壞塊這種壞塊是在生產(chǎn)過程中產(chǎn)生的,一般芯片原廠都會在出廠時(shí)都會將壞塊第一個(gè)page的spare區(qū)的第6個(gè)byte標(biāo)記為非0xff的值。后天性壞塊這種壞塊是在Nandflash使用過程中產(chǎn)生的,如果BlockErase或者PageProgram錯(cuò)誤,就可以簡單地將這個(gè)塊作為壞塊來處理,這個(gè)時(shí)候需要把壞塊標(biāo)記起來。為了和先天性壞塊信息保持一致,將新發(fā)現(xiàn)的壞塊的第一個(gè)page的spare區(qū)的第6個(gè)Byte標(biāo)記為非0xff的值。NandFlash工作原理-壞塊管理壞塊的種類:92NandFlash工作原理-壞塊管理壞塊的處理:理解了先天性壞塊和后天性壞塊后,我們已明白Nand出廠時(shí)在spare區(qū)中已經(jīng)反映出了壞塊信息,因此,如果在擦除一個(gè)塊之前,一定要先檢查spare區(qū)的第6個(gè)byte是否是0xff,如果是就證明這是一個(gè)好塊,可以擦除;如果是非0xff,那么就不能擦除。不過,這樣處理可能會錯(cuò)殺偽壞塊,因?yàn)樵谛酒僮鬟^程中可能由于電壓不穩(wěn)定等偶然因素會造成Nand操作的錯(cuò)誤。但是,為了數(shù)據(jù)的可靠性及軟件設(shè)計(jì)的簡單化,壞塊一個(gè)也不能放過。NandFlash工作原理-壞塊管理壞塊的處理:93NandFlash工作原理-壞塊管理錯(cuò)殺壞塊的補(bǔ)救方法:如果在對一個(gè)塊的某個(gè)page進(jìn)行編程的時(shí)候發(fā)生了錯(cuò)誤就要把這個(gè)塊標(biāo)記為壞塊,首先就要把其他好的page里面的內(nèi)容備份到另外一個(gè)空的好塊里面,然后,把這個(gè)塊標(biāo)記為壞塊。當(dāng)發(fā)生“錯(cuò)殺”之后,可以在進(jìn)行完頁備份之后,再將這個(gè)塊擦除一遍,如果BlockErase發(fā)生錯(cuò)誤,那就證明這個(gè)塊是個(gè)真正的壞塊。NandFlash工作原理-壞塊管理錯(cuò)殺壞塊的補(bǔ)救方法:94Nandflash的ECC簡介ECC的全稱是ErrorCheckingandCorrection,是一種用于Nand的差錯(cuò)檢測和修正算法。如果操作時(shí)序和電路穩(wěn)定性不存在問題的話,NandFlash出錯(cuò)的時(shí)候一般不會造成整個(gè)Block或是Page不能讀取或是全部出錯(cuò),而是整個(gè)Page(例如512Bytes)中只有一個(gè)或幾個(gè)bit出錯(cuò)。ECC能糾正1個(gè)比特錯(cuò)誤和檢測2個(gè)比特錯(cuò)誤,而且計(jì)算速度很快,但對1比特以上的錯(cuò)誤無法糾正,對2比特以上的錯(cuò)誤不保證能檢測。Nandflash的ECC簡介ECC的全稱是ErrorC95Nandflash的ECC簡介ECC校驗(yàn)算法:ECC校驗(yàn)每次對256字節(jié)的數(shù)據(jù)進(jìn)行操作,包含列校驗(yàn)和行校驗(yàn)。ECC糾錯(cuò)算法:當(dāng)往NandFlash的page中寫入數(shù)據(jù)的時(shí)候,每256字節(jié)生成一個(gè)ECC校驗(yàn)和,稱之為原ECC校驗(yàn)和,保存到PAGE的OOB(out-of-band)數(shù)據(jù)區(qū)中。當(dāng)從NandFlash中讀取數(shù)據(jù)的時(shí)候,每256字節(jié)我們生成一個(gè)ECC校驗(yàn)和,稱之為新ECC校驗(yàn)和。將從OOB區(qū)中讀出的原ECC校驗(yàn)和新ECC校驗(yàn)和按位異或,若結(jié)果為0,則表示不存在錯(cuò)(或是出現(xiàn)了ECC無法檢測的錯(cuò)誤);若3個(gè)字節(jié)異或結(jié)果中存在11個(gè)比特位為1,表示存在一個(gè)比特錯(cuò)誤,且可糾正;若3個(gè)字節(jié)異或結(jié)果中只存在1個(gè)比特位為1,表示OOB區(qū)出錯(cuò);其他情況均表示出現(xiàn)了無法糾正的錯(cuò)誤。Nandflash的ECC簡介ECC校驗(yàn)算法:96Nandflash常用的軟件管理方案NandFlash由于自身的原因,會有一些限制:1不能直接在數(shù)據(jù)上進(jìn)行覆蓋,必須先擦后寫。2寫和擦有壽命。某些塊可能會用的更頻繁從而導(dǎo)致壞塊。3在出廠時(shí)會存在壞塊,在使用過程中也會產(chǎn)生壞塊。4會在讀取數(shù)據(jù)時(shí)產(chǎn)生錯(cuò)誤或讀取失敗。正是因?yàn)檫@些限制,NandFlash的操作相對比較復(fù)雜,因此需要通過軟件將NandFlash仿真為傳統(tǒng)的邏輯塊設(shè)備,便于讀擦寫等操作。SC6800H平臺目前支持FTL和XSR兩種軟件管理方案:在PDA_V2.0之前,平臺使用的是XSR解決方案,在PDA_V2.0平臺使用的是FTL解決方案。Nandflash常用的軟件管理方案NandFlash由97Nandflash常用的軟件管理方案FTL(FlashTranslationLayer)

傳統(tǒng)的嵌入式系統(tǒng)一般使用FTL方案。FTL將NandFlash仿真為一個(gè)塊設(shè)備使得NandFlash與其他常規(guī)塊存儲設(shè)備一樣。FTL是處于文件系統(tǒng)和NandFlash設(shè)備之間一個(gè)中間層。

FTL從文件系統(tǒng)層收到讀寫操作的邏輯地址。在FTL層把這些邏輯地址映射成真正的物理地址,從而正確的進(jìn)行相應(yīng)操作。由于FTL創(chuàng)建了虛擬塊進(jìn)行映射管理,所以對這些虛擬塊會有一些相應(yīng)的軟件算法,比如垃圾收集(Garbage

Collection),壞塊管理(BadBlockManagement),寫平衡算法(Wear-Leveling)等。這些算法有助于管理塊結(jié)構(gòu)和延長NandFlash的壽命。Nandflash常用的軟件管理方案FTL(FlashT98Nandflash常用的軟件管理方案FTL(FlashTranslationLayer)垃圾收集(Garbage

Collection)

在對數(shù)據(jù)進(jìn)行修改的時(shí)候,因?yàn)闆]有把原來的數(shù)據(jù)清空,這樣就會導(dǎo)致部分物理區(qū)域中的數(shù)據(jù)是無效的,即垃圾數(shù)據(jù)。通過垃圾收集技術(shù)(GarbageCollection),系統(tǒng)把要清零的塊中的有效數(shù)據(jù)先移動到其他區(qū)域,并且改變邏輯塊到物理塊的映射關(guān)系,然后對整塊進(jìn)行清零操作。

一般垃圾收集遵循兩個(gè)原則:垃圾最多(速度原則);使用的次數(shù)最少(平衡原則)。Nandflash常用的軟件管理方案FTL(FlashT99Nandflash常用的軟件管理方案FTL(FlashTranslationLayer)寫平衡算法(Wear-LevelingAlgorithm)

一般的NandFlash能保證每個(gè)塊可以擦寫10萬次。但是由于一些塊所使用的次數(shù)會比其他塊頻繁,從而導(dǎo)致更容易出現(xiàn)壞塊。

寫平衡算法(Wear-LevelingAlgorithm)就是用于保證每個(gè)塊都能得到比較均衡的使用。由于在每個(gè)塊中都有一個(gè)計(jì)數(shù)器,用于記錄該塊被擦除的次數(shù),所以寫平衡算法會自動利用這個(gè)計(jì)數(shù)器,并將被擦除次數(shù)最少的塊用于新的操作中。Nandflash常用的軟件管理方案FTL(FlashT100Nandflash常用的軟件管理方案FTL(FlashTranslationLayer)ErrorCorrectionCode

ECC分為硬件ECC和軟件ECC。ECC使用就是糾正偵測到的數(shù)據(jù)錯(cuò)誤,它保證了NandFlash的可靠性和數(shù)據(jù)完整性。而在NandFlash中采取的是“先寫后清除”的措施,如果出現(xiàn)錯(cuò)誤,原始的數(shù)據(jù)還可以使用,從而保證了數(shù)據(jù)的可恢復(fù)性。Nandflash常用的軟件管理方案FTL(FlashT101Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)XSR是SAMSUNG推出的專門用于管理NandFlash的軟件解決方案。XSR將NandFlash看作常規(guī)的塊設(shè)備,其功能同傳統(tǒng)的FTL一樣。但XSR比FTL更加強(qiáng)大。XSR處于文件系統(tǒng)和NandFlash之間。它提供給操作系統(tǒng)全部的塊設(shè)備功能,使得NandFlash就像一個(gè)常規(guī)的硬盤一樣,能更方便管理數(shù)據(jù)。Nandflash常用的軟件管理方案XSR(eXtende102Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)XSR共分為五個(gè)主要部分:1

XSR核心層(XSRCore),其中XSR核心層又可分為兩個(gè)層次:

扇區(qū)轉(zhuǎn)換層STL(SectorTranslationLayer)

塊管理層BML(BlockManagementLayer)2操作系統(tǒng)適配模塊層OAM(OSAdaptationModule)3平臺適配模塊層PAM(PlatformAdaptationModule)4底層設(shè)備驅(qū)動層LLD(LowLevelDeviceDriver)Nandflash常用的軟件管理方案XSR(eXtende103Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)扇區(qū)轉(zhuǎn)換層STL(SectorTranslationLayer)

STL(扇區(qū)轉(zhuǎn)換層)是XSR架構(gòu)中一個(gè)很重要的部分,它從事一些主要的管理任務(wù)。該層主要同扇區(qū)轉(zhuǎn)換相關(guān),將文件系統(tǒng)傳來的邏輯扇區(qū)地址(logicalsectoraddress)轉(zhuǎn)換為虛擬扇區(qū)地址(virtualsectoraddress)。

STL主要包括:地址轉(zhuǎn)換(AddressTranslation),寫平衡算法(NaturalWearLeveling),大塊優(yōu)化管理(LargeBlockOptimization),斷電保護(hù)(PoweroffRecovery),允許異步/同步操作,支持多卷(SupportingMultipleVolume)等。Nandflash常用的軟件管理方案XSR(eXtende104Nandflash常用的軟件管理方案XSR(eXtendedSectorRemapper)BML(BlockManagementLayer)

BML將從STL層傳來的虛擬地址轉(zhuǎn)換為具體的物理地址。在對NandFlash

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論