色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > NAND Flash嵌入式存儲系統(tǒng)結(jié)構(gòu)分析

          NAND Flash嵌入式存儲系統(tǒng)結(jié)構(gòu)分析

          作者: 時間:2011-04-24 來源:網(wǎng)絡(luò) 收藏

            

            2.2 各分區(qū)宏定義

            #define FLASH_BLOCK_SIZE 0x40000 //16 KB/Block

            #define FLASH_PAGE_SIZE 0x200 //512 B/Page

            #define FLASH_SECTOR_SIZE 0x200

            //1Page=1Sector(only K9F2808U0C)

            #define FLASH_BLOCKS_TABLE 3//壞塊映射表存放塊數(shù)

            #define FLASH_SWAP_BLOCKS 5 //交換區(qū)的塊數(shù)

            #define FLASH_BAD_BLOCKS_REMAP 50

            //壞簇重映區(qū)的塊數(shù)

            #define FLASH_MAX_ADDR 0xFFFFFF

            //最大字節(jié)地址

            各分區(qū)首地址計算公式:

            FLASH_BLOCK_TABLE_ADDR=FLASH_MAX_ADDR+

            1-3*FLASH_BLOCK_SIZE);

            FLASH_SWAP_BLOCK_ADDR=(FLASH_BLOCK_

            TABLE_ADDR-5*FLASH_BLOCK_SIZE);

            FLASH_BAD_BLOCK_REMAP_ADDR=(FLASH_SWAP_

            BLOCK_ADDR-50*FLASH_BLOCK_SIZE);

            FLASH_MAX_SECTOR_ADDR=(FLASH_MAX_ADDR-

            3*FLASH_BLOCK_TABLE_ADDR-5*FLASH_SWAP_

            BLOCK_ADDR-50*FLASH_BAD_BLOCK_REMAP_ADDR);

            文件管理的最大字節(jié)地址。

            任意地址Addr:

            所在塊地址:Addr(~(FLASH_BLOCK_SIZE-1));

            塊內(nèi)偏移地址:Addr(FLASH_BLOCK_SIZE-1);

            塊中的頁:(Addr(FLASH_BLOCK_SIZE-1))/FLASH_

            PAGE_SIZE;

            2.3 分區(qū)功能設(shè)計

            壞塊映射區(qū)存放復(fù)制3份的壞塊信息BBI(Bad Block Information)表。復(fù)制3份是預(yù)防突然斷電,造成BBI表數(shù)據(jù)丟失。選擇最后3個塊,主要是出于固件設(shè)計。當(dāng)首次上電,固件程序通過讀取 ID,獲得設(shè)備的容量等信息,然后從Flash的最后一塊中尋找BBI表,如果最后一塊沒有發(fā)現(xiàn)BBI表,則認(rèn)為此塊為壞塊,繼續(xù)前移尋找,依此類推,直到在預(yù)留的3個塊中找到,并將其數(shù)據(jù)讀入到在主控芯片為其開設(shè)的RAM中。如果還找不到,則固件認(rèn)為該片F(xiàn)lash沒有BBI表。

            交換塊區(qū)是對 Flash進(jìn)行擦除或?qū)懖僮鲿r用來臨時存放數(shù)據(jù),共分配5個塊。選取5塊是出于可靠性設(shè)計。用一個數(shù)組FlashSwapBlockStatus[FLASH_SWAP_BLOCKS]記錄交換塊狀態(tài):有效還是已經(jīng)損壞。初始化時,固件認(rèn)為所有的交換塊都是有效塊,在隨后對其進(jìn)行擦除或?qū)懖僮鲿r,通過讀Flash狀態(tài)寄存器判斷該交換塊的真實狀態(tài),并記錄在數(shù)組中。交換塊的管理圍繞固件請求返回當(dāng)前可用交換塊地址或當(dāng)前正在使用的交換塊地址,并判斷標(biāo)記當(dāng)前使用的交換塊狀態(tài)為壞。

            壞塊映射區(qū)是當(dāng)主機(jī)向數(shù)據(jù)區(qū)寫數(shù)據(jù)時,檢測到當(dāng)前塊(數(shù)據(jù)區(qū))為壞塊時,將數(shù)據(jù)寫到壞塊映射區(qū)中的相應(yīng)好塊中,并且將這兩個塊的塊地址記錄到BBI表中,以后主機(jī)若要對當(dāng)前塊(數(shù)據(jù)區(qū))訪問時,只需讀BBI表就可以找到相應(yīng)映射塊,從而代替壞塊的訪問。這樣就使文件所見邏輯塊地址LBA(Logical Block Address)變成連續(xù)的,但實際上物理塊地址PBA(Physical Block Address)可能并不連續(xù)。上述方法就是壞塊管理的精髓。出于保守設(shè)計本文共選50塊作為重映塊。用數(shù)組FlashRemapBlockStatus[FLASH_BAD_BLOCKS_REMAP]標(biāo)識壞塊映射區(qū)的狀態(tài):未使用、已使用還是已經(jīng)損壞。初始化時認(rèn)為壞塊映射區(qū)中所有塊都是好塊。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉