<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • S3C2410讀寫NandFlash分析

    發布時間:2011-3-24 13:47    發布者:techshare
    關鍵詞: nandflash , S3C2410
    一、結構分析

    S3C2410處理器集成了8位NandFlash控制器。目前市場上常見的8位NandFlash有三星公司的k9f1208、k9f1g08、k9f2g08等。k9f1208、k9f1g08、k9f2g08的數據頁大小分別為512Byte、2kByte、2kByte。它們在尋址方式上有一定差異,所以程序代碼并不通用。本文以S3C2410處理器和k9f1208系統為例,講述NandFlash的讀寫方法。

    NandFlash的數據是以bit 的方式保存在memory cell里的,一般來說,一個cell 中只能存儲一個bit,這些cell 以8 個或者16 個為單位,連成bit line,形成所謂的byte(x8)/word(x16),這就是NAND Device 的位寬。這些Line 組成Page, page 再組織形成一個Block。k9f1208的相關數據如下:

    1block=32page;1page=528byte=512byte(Main Area)+16byte(Spare Area)。

    總容量為=4096(block數量)*32(page/block)*512(byte/page)=64Mbyte

    NandFlash以頁為單位讀寫數據,而以塊為單位擦除數據。按照k9f1208的組織方式可以分四類地址: Column Address、halfpage pointer、Page Address 、Block Address。A[0:25]表示數據在64M空間中的地址。

    Column Address表示數據在半頁中的地址,大小范圍0"255,用A[0:7]表示;

    halfpage pointer表示半頁在整頁中的位置,即在0"255空間還是在256"511空間,用A[8]表示;

    Page Address表示頁在塊中的地址,大小范圍0"31,用A[13:9]表示;

    Block Address表示塊在flash中的位置,大小范圍0"4095,A[25:14] 表示;

    二、讀操作過程

    K9f1208的尋址分為4個cycle。分別是:A[0:7]、A[9:16]、A[17:24]、A[25]。

    讀操作的過程為: 1、發送讀取指令;2、發送第1個cycle地址;3、發送第2個cycle地址;4、發送第3個cycle地址;5、發送第4個cycle地址;6、讀取數據至頁末。

    K9f1208提供了兩個讀指令,‘0x00’、‘0x01’。這兩個指令區別在于‘0x00’可以將A[8]置為0,選中上半頁;而‘0x01’可以將A[8]置為1,選中下半頁。
    雖然讀寫過程可以不從頁邊界開始,但在正式場合下還是建議從頁邊界開始讀寫至頁結束。下面通過分析讀取頁的代碼,闡述讀過程。
    static void ReadPage(U32 addr, U8 *buf) //addr表示flash中的第幾頁,即‘flash地址>>9’
    {
    U16 i;
    NFChipEn(); //使能NandFlash
    WrNFCmd(READCMD0); //發送讀指令‘0x00’,由于是整頁讀取,所以選用指令‘0x00’
    WrNFAddr(0); //寫地址的第1個cycle,即Column Address,由于是整頁讀取所以取0
    WrNFAddr(addr); //寫地址的第2個cycle,即A[9:16]
    WrNFAddr(addr>>8); //寫地址的第3個cycle,即A[17:24]
    WrNFAddr(addr>>16); //寫地址的第4個cycle,即A[25]。
    WaitNFBusy(); //等待系統不忙
    for(i=0; i<512; i++)
    buf[ i] = RdNFDat(); //循環讀出1頁數據
    NFChipDs(); //釋放NandFlash
    }

    三、寫操作過程

    寫操作的過程為: 1、發送寫開始指令;2、發送第1個cycle地址;3、發送第2個cycle地址;4、發送第3個cycle地址;5、發送第4個cycle地址;6、寫入數據至頁末;7、發送寫結束指令

    下面通過分析寫入頁的代碼,闡述讀寫過程。
    static void WritePage(U32 addr, U8 *buf) //addr表示flash中的第幾頁,即‘flash地址>>9’
    {
    U32 i;
    NFChipEn(); //使能NandFlash
    WrNFCmd(PROGCMD0); //發送寫開始指令’0x80’
    WrNFAddr(0); //寫地址的第1個cycle
    WrNFAddr(addr); //寫地址的第2個cycle
    WrNFAddr(addr>>8); //寫地址的第3個cycle
    WrNFAddr(addr>>16); 寫地址的第4個cycle
    WaitNFBusy(); //等待系統不忙
    for(i=0; i<512; i++)
    WrNFDat(buf[ i]); //循環寫入1頁數據
    WrNFCmd(PROGCMD1); //發送寫結束指令’0x10’
    NFChipDs(); //釋放NandFlash
    }

    四、總結

    本文以S3C2410處理器和k9f1208系統為例講述了nand flash的讀寫過程。在讀寫過程中沒有考慮到壞塊問題,有關ecc及壞塊處理問題將在下個專題中講述。
    本文地址:http://www.portaltwn.com/thread-59735-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
    • Dev Tool Bits——使用條件軟件斷點宏來節省時間和空間
    • Dev Tool Bits——使用DVRT協議查看項目中的數據
    • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監視
    • 貿澤電子(Mouser)專區
    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷