<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > NAND Flash的驅(qū)動程序設(shè)計方案

          NAND Flash的驅(qū)動程序設(shè)計方案

          作者: 時間:2012-04-03 來源:網(wǎng)絡(luò) 收藏
          TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 3em; PADDING-TOP: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BACKGROUND-COLOR: rgb(255,255,255); orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" align=center>按此在新窗口瀏覽圖片
          圖2 NAND Flash與S3C2410連接電路

          2 Flash燒寫程序原理及結(jié)構(gòu)

            基本原理:將在SDRAM中的一段存儲區(qū)域中的數(shù)據(jù)寫到NAND Flash存儲空間中。燒寫程序在縱向上分三層完成。第一層: 主燒寫函數(shù),將SDRAM中一段存儲區(qū)域的數(shù)據(jù)寫到NAND Flash存儲空間中。第二層: 該層提供對NAND Flash進(jìn)行操作的頁讀、寫及塊擦除等函數(shù)。第三層:為第二層提供具體NAND Flash控制器中對特殊功能寄存器進(jìn)行操作的核心函數(shù),該層也是真正將數(shù)據(jù)在SDRAM和NAND Flash之間實現(xiàn)傳送的函數(shù)。其中第二層為驅(qū)動程序的設(shè)計關(guān)鍵所在,下面對該層的讀、寫(又稱編程)、擦除功能編碼進(jìn)行詳細(xì)介紹。

          2.1 NAND Flash Read

            功能:讀數(shù)據(jù)操作以頁為單位,讀數(shù)據(jù)時首先寫入讀數(shù)據(jù)命令00H,然后輸入要讀取頁的地址,接著從數(shù)據(jù)寄存器中讀取數(shù)據(jù),最后進(jìn)行ECC校驗。

            參數(shù)說明:block,塊號;page,頁號;buffer,指向?qū)⒁x取到內(nèi)存中的起始位置;返回值1,讀成功,返回值0:讀失敗。

          static int NF_ReadPage(unsigned int block, unsigned int page, unsigned char *buffer){
            NF_RSTECC(); /* 初始化 ECC */
            NF_nFCE_L(); /* 片選NAND Flash芯片*/
            NF_CMD(0x00); /* 從A區(qū)開始讀 *//* A0~A7(列地址) */
            NF_ADDR(0); /* A9A16(頁地址) */
            NF_ADDR(blockPage0xff); /* A17A24,(頁地址) */
            NF_ADDR((blockPage>>8)0xff);/* A25, (頁地址) */
            NF_ADDR((blockPage>>16)0xff);/* 等待NAND Flash處于再準(zhǔn)備狀態(tài) */
            ReadPage();/* 讀整個頁, 512字節(jié) */
            ReadECC();/* 讀取ECC碼 */
            ReadOOB();/* 讀取該頁的OOB塊 *//* 取消NAND Flash 選中*/
            NF_nFCE_H();/* 校驗ECC碼, 并返回 */
            Return (checkEcc())}

          2.2 NAND Flash Program

            功能:對頁進(jìn)行編程命令, 用于寫操作。

            命令代碼:首先寫入00h(A區(qū))/01h(B區(qū))/05h(C區(qū)), 表示寫入那個區(qū); 再寫入80h開始編程模式(寫入模式),接下來寫入地址和數(shù)據(jù); 最后寫入10h表示編程結(jié)束。圖3為程序流程圖。

          按此在新窗口瀏覽圖片
          圖3 寫程序流程

            參數(shù)說明:block,塊號;page,頁號;buffer,指向內(nèi)存中待寫入NAND Flash中的數(shù)據(jù)起始位置;返回值0,寫錯誤,返回值1,寫成功。

          static int NF_WritePage(unsigned int block, unsigned int page, unsigned char *buffer){
            NF_RSTECC(); /* 初始化 ECC */
            NF_nFCE_L(); /* 片選NAND Flash芯片*/
            NF_CMD(0x0); /* 從A區(qū)開始寫 */
            NF_CMD(0x80); /* 寫第一條命令 *//* A0~A7(列地址) */
            NF_ADDR(0);/* A9A16(頁地址) */
            NF_ADDR(blockPage0xff);/* A17A24(頁地址) */
            NF_ADDR((blockPage>>8)0xff); /* A25(頁地址) */
            NF_ADDR((blockPage>>16)0xff);/* 寫頁為512B到NAND Flash芯片 */
            WRDATA(); /*OOB一共16字節(jié),每一個字節(jié)存放什么由程序員自己定義, 在Byte0 Byte2存ECC檢驗碼,Byte6 存放壞塊標(biāo)志*/
            WRDATA(); /* 寫該頁的OOB數(shù)據(jù)塊 */
            CMD(0x10); /* 結(jié)束寫命令 */
            WAITRB();/* 等待NAND Flash處于準(zhǔn)備狀態(tài) *//* 發(fā)送讀狀態(tài)命令給NAND Flash */
            CMD(0x70);
            if (RDDATA()0x1) { /*如果寫有錯, 則標(biāo)示為壞塊,取消NAND Flash 選中*/
            MarkBadBlock(block);
            return 0;
            } else { /* 正常退出, 取消NAND Flash 選中*/
            return 1;}

          2.3 NAND Flash Erase

            功能:塊擦除命令。



          關(guān)鍵詞: 模擬電路 模擬芯片 德州儀器 放大器 ADI 模擬電子

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();