日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]這次大概介紹了一下NAND Flash,以及在ASF中使用它的方法。一、 接線這個開發(fā)板搭載了一個256 MB,8位的NAND Flash(MT29F2G08ABAEA)。引腳接線如下:偷個懶,直接上引腳復(fù)用的圖。其中PC14表明該NAND FLASH需要作為

這次大概介紹了一下NAND Flash,以及在ASF中使用它的方法。

一、 接線

這個開發(fā)板搭載了一個256 MB,8位的NAND Flash(MT29F2G08ABAEA)。引腳接線如下:

偷個懶,直接上引腳復(fù)用的圖。其中PC14表明該NAND FLASH需要作為SMC的外設(shè)0使用。通過使用NANDOE和NANDWE引腳說明需要使用芯片的NAND Flash控制邏輯。另外,PC18復(fù)用為輸入引腳,用以查詢芯片的狀態(tài)。

二、 NAND Flash

組織結(jié)構(gòu)與尋址

NAND Flash的容量較大。整片F(xiàn)lash分為若干個塊(Block),每個Block分為若干個頁(Page)。在每個頁中,除了數(shù)據(jù)區(qū)域,也包含若干“多余”的區(qū)域,用來進行ECC等操作。在進行擦除操作是,基本單位是“塊”;而編程的基本單位是“頁”。

另外,NAND Flash的物理特性決定了其在編程時,每個bit只能從1變成0。所以在寫入前,必須先對該塊進行擦除(擦除時把所有位置為1)。

該Flash的結(jié)構(gòu)如下(忽略plane):

在尋址時,是通過行地址和列地址指定儲存單元的。其中行地址表示頁的編號,列地址表示指定在目標(biāo)地址在該頁的位置。

讀寫時序

因為沒有地址線,所以讀寫較為復(fù)雜。讀寫時,需要先發(fā)送相應(yīng)操作命令,然后發(fā)送地址,才能進行數(shù)據(jù)傳輸。一個簡單的“頁讀取”操作時序圖如下:

該命令首先拷貝整個頁到NAND Flash的cache寄存器中,然后在需要輸出的時候,再從指定的列地址開始輸出。

PS,該NAND Flash支持在上電的時候自動送出第一頁的數(shù)據(jù),所以經(jīng)過適當(dāng)?shù)呐渲茫彩强梢酝ㄟ^它進行Boot的。

CE# Don’t Care

在給NAND Flash發(fā)送完命令后,F(xiàn)lash需要一個準(zhǔn)備的過程。在這個過程中,需要保持片選信號的有效。(據(jù)說否則Flash就會進入低功耗狀態(tài))

一個簡單的方法是使用GPIO直接控制這個引腳。在ASF中使用的即是這個方法。

另外的方法即是使用Flash的“CE# Don’t Care”功能。開啟這個功能后,即使片選無效,F(xiàn)lash也會進行工作。這樣做的好處是不用再手動控制片選信號線外;同時可以在Flash進行內(nèi)部操作時,可以進行其他的片選。比如在一塊Flash忙時,可以給另外一塊Flash發(fā)送命令。但是,開啟這個功能可能會增加Flash的功耗。

三、 ASF中NAND Flash使用

準(zhǔn)備

在ASF Wizard中添加“NAND Flash on EBI”模塊。

在conf_board.h中進行如下聲明,記得調(diào)用board_init():

1#define CONF_BOARD_NAND

Flash 初始化

在board_init()之后,調(diào)用nand_flash_raw_initialize()即可完成NAND Flash的初始化工作。

12345678structnand_flash_raw nf_raw;memset((void*)&nf_raw, 0, sizeof(nf_raw));// Init NAND Flash, and get informations into nf_rawif(nand_flash_raw_initialize(&nf_raw, 0,BOARD_NF_COMMAND_ADDR, BOARD_NF_ADDRESS_ADDR, BOARD_NF_DATA_ADDR)) {MainExit();}

該函數(shù)中,會對SMC和若干引腳進行配置;同時對Bus matrix進行設(shè)置,以使用芯片提供的NAND Flash邏輯功能。

然后會對NAND Flash進行重置。接著就會讀取該Flash的ID,并根據(jù)該ID檢測Flash的參數(shù),如page大小,block數(shù)目等。

基本操作

在nand_flash_raw.h中還提供了一些比較基礎(chǔ)的操作。

以下代碼對所有的塊進行擦除,若在擦除中碰到錯誤,則打印出來(這里printf會通過UART0口打印,以后有機會會說怎么實現(xiàn)):

12345678910111213// Get NAND's information from nf_rawconststructnand_flash_model* nf_mod = &(nf_raw.model);intnum_block = nand_flash_model_get_device_size_in_blocks(nf_mod);// Erase all blockprintf("Erasing NAND Flash...nr");interror;for(inti = 0; i < num_block; i++) {error = nand_flash_raw_erase_block(&nf_raw, i);if(error == NAND_COMMON_ERROR_BADBLOCK) {printf("-E- Block %u is BAD block. nr", i);}}

還有page的寫入、讀取和拷貝等操作就不一一列舉了……


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉