• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于dsPIC30F6010A的并口NANDFlash驅(qū)動設計與實現(xiàn)

      2020-05-18 02:44陸鵬
      科技視界 2020年9期
      關鍵詞:字節(jié)時序命令

      陸鵬

      摘 要

      本文通過分析8位并口NAND Flash的工作時序,設計其在dsPIC30F 6010A單片機下的軟件驅(qū)動,能夠?qū)崿F(xiàn)對NAND Flash的讀寫擦除等各種操作。

      關鍵詞

      NAND Flash;dsPIC30F6010A;并口;驅(qū)動

      中圖分類號: TP316.2 ? ? ? ? ? ? 文獻標識碼: A

      DOI:10.19694/j.cnki.issn2095-2457.2020.09.044

      0 前言

      NAND Flash是嵌入式設計中常見的存儲器。8位并口NAND Flash是指數(shù)據(jù)線寬度為8位,通信接口為并行接口的NAND Flash,在其與微處理器的配合應用中,NAND Fla sh與微處理器一般采用如圖1所示的連接方式。微處理器軟件驅(qū)動的設計是根據(jù)NAND Flash的工作時序,通過配置相關寄存器進行相應操作來實現(xiàn)的。本文中NAND Flash使用Micron公司的MT29F2G08系列進行說明,微處理器則使用了Microchip公司的16位高性能單片機dsPIC30F6010A。

      1 NAND Flash信號時序

      從軟件驅(qū)動角度來講,NAND Flash最基本的操作有四種,即命令輸入、地址輸入、數(shù)據(jù)輸入、數(shù)據(jù)輸出。所有的NAND Flash接口命令都是由這四種操作組合而成,以MT29F2G08的READ PAGE命令為例,它是由兩個命令輸入操作(0x00,0x30)、五個地址輸入操作以及若干數(shù)據(jù)輸出操作組成,READ PAGE命令時序如圖2所示。

      因此如果在微處理上實現(xiàn)這四種基本操作,就能實現(xiàn)所有的接口命令,即實現(xiàn)了NAND Flash的驅(qū)動設計。

      為了實現(xiàn)這四種操作,我們需要明確兩個內(nèi)容:一,四種操作中接口信號的電平;二,接口信號及各信號之間的時間要求。這兩項內(nèi)容均在NAND Flash的器件手冊上有明確要求。以MT29F2G08為例,在它的的異步接口模式列表中(表1),我們可以得到四種操作的接口信號電平要求。以命令輸入(Comm and Input)為例,從表1中可以得到接口信號電平要求為:當CE#為低,CLE為高,ALE為低,WE#的上升沿,WP#為高時,完成命令輸入操作。

      接口信號及各信號之間的時間要求通過時序定義來得到。命令輸入的時序定義如圖3所示,接口信號的時間要求在表2中列出。因命令輸入發(fā)生在WE#上升沿,因此與WE#上升沿相關的幾個時間是設計的關鍵所在:tWP寫使能脈沖寬度時間-最小為10ns;tDS數(shù)據(jù)建立時間-最小7ns,即命令輸入后WE#需至少保持使能7ns才可以置高;tDH數(shù)據(jù)保持時間-最少5ns,即WE#置高后命令需要至少保持5ns;tCLS命令鎖存使能建立時間-最少10ns;tCLH命令鎖存使能保持時間-最小為5ns,即WE#置高后CLE需至少保持為高5ns。

      得到接口信號的電平和時間要求后,就可以在微處理器上編程實現(xiàn)對NAND Flash的各種操作。

      2 軟件驅(qū)動實現(xiàn)

      在進行NAND Flash驅(qū)動編程之前,我們需要對微處理器dsPIC30F6010A的I/O按照圖1所示的連接方式進行配置,分別將CE#、RE#, WE#、R/B#、ALE、CLE、WP#、I/O[7:0]配置到所需的I/O口,其中CE#、RE#、WE#、ALE、CLE、WP#為輸出端口,R/B#為輸入端口,I/O[7:0]在命令輸入、地址輸入、數(shù)據(jù)輸入三種操作時為輸出端口,在數(shù)據(jù)輸出操作時為輸入端口。時間方面,本例中dsPIC30F6010A系統(tǒng)時鐘設置為24MHz,因此指令周期FCY為24MHz/4為6MHz,即一條指令所用時間為167ns。

      以命令輸入操作為例,將其定義為函數(shù)FlashWriteCmd(),為函數(shù)定義一個參數(shù)cmd,根據(jù)上一小節(jié)所講,按照命令輸入的時序要求,將函數(shù)編寫如下:

      void FlashWriteCmd(unsigned char cmd)

      {

      TRISDATA &= ~(0x00FF) ; // RE0~RE7輸出

      ALE=0;

      CLE=1;

      _nop_(); ?_nop_(); //tCLS

      WE=0;

      _nop_(); ?_nop_(); _nop_(); _nop_();

      _nop_(); ?_nop_(); _nop_(); _nop_();

      _nop_(); ?_nop_(); _nop_(); _nop_();//tWP

      DATAOUT= ((DATAOUT ?& 0xFF00) | cmd);

      _nop_(); ?_nop_(); //tDS

      WE=1;

      _nop_(); ?_nop_(); ?_nop_();// tDH, tCLH

      CLE=0;

      }

      按同樣思路完成其他三種基本操作的函數(shù)編程,分別定義為:地址輸入函數(shù)FlashWriteAddr(),數(shù)據(jù)輸入函數(shù)Flash Wr itePort(),數(shù)據(jù)輸出函數(shù)FlashReadPort(),以這四個函數(shù)為基礎即可實現(xiàn)所有接口命令函數(shù),下面以接口命令READ PAGE為例說明。

      將READ PAGE命令定義為函數(shù)FlashReadByte(),為函數(shù)定義五個參數(shù),Read_num讀取字節(jié)數(shù)量,ByteAddr字節(jié)地址,PageAddr頁地址,BlockAddr塊地址,以及buf字節(jié)存儲位置。如圖1所示,READ PAGE命令需要首先發(fā)送命令0x00,然后發(fā)送五個周期的地址,再發(fā)送命令0x30,之后等待R/B#(RDY)信號為高后才能進行數(shù)據(jù)讀取,依此函數(shù)編程如下:

      void FlashReadByte(unsigned int

      Read_number,unsigned int ByteAddr,unsigned

      char PageAddr,unsigned int BlockAddr,unsigned

      char *buf)

      {

      unsigned int j,

      CE=0;

      FlashWriteCmd(0x00); //讀命令周期1

      FlashWriteAddr(ByteAddr&0xff); //寫字節(jié)低位地址

      FlashWriteAddr((ByteAddr>>8)&0x3f); //寫字節(jié)高位地址

      FlashWriteAddr(PageAddr); //寫頁地址

      FlashWriteAddr((BlockAddr>>1)&0xff); //寫塊低位地址

      FlashWriteAddr((BlockAddr>>9)&0x0F); //寫塊高位地址

      FlashWriteCmd(0x30); //讀命令周期2

      delay_us(20);

      NAND_WAITREADY();//等待RDY信號置高

      for(j=0;j

      {

      ClrWdt();

      *buf=FlashReadPort(); //讀取數(shù)據(jù)

      buf++;

      }

      CE=1;

      }

      依照類似方法可實現(xiàn)NAND Flash規(guī)定的所有接口命令。需要注意的是在實現(xiàn)函數(shù)時,要將時間留出余量,以免出現(xiàn)異常錯誤。

      3 結(jié)論

      本文介紹的驅(qū)動程序已經(jīng)應用在項目中,實際結(jié)果顯示程序功能正確、穩(wěn)定可靠。雖然驅(qū)動是基于dsPIC30F6010A單片機,但其方法可以用于任意微處理器,此外驅(qū)動可適用于任何符合ONFI1.0標準的NAND Flash器件,有良好的通用性。

      參考文獻

      [1]Rino Micheloni,Luca Crippa,Alessia Marelli.Inside NAND Flash Memories.

      [2]MT29F2G08 NAND Flash Memory Datasheet.Micron Technology,Inc.

      [3]dsPIC30F6010A/6015 Datasheet.Microchip Technology,Inc.

      猜你喜歡
      字節(jié)時序命令
      只聽主人的命令
      基于Sentinel-2時序NDVI的麥冬識別研究
      No.8 字節(jié)跳動將推出獨立出口電商APP
      No.10 “字節(jié)跳動手機”要來了?
      移防命令下達后
      基于FPGA 的時序信號光纖傳輸系統(tǒng)
      簡談MC7字節(jié)碼
      一種毫米波放大器時序直流電源的設計
      這是人民的命令
      DPBUS時序及其設定方法
      五常市| 开封市| 铜鼓县| 湾仔区| 泰宁县| 黄龙县| 徐汇区| 江达县| 舒城县| 忻城县| 子长县| 哈尔滨市| 菏泽市| 綦江县| 河北区| 正定县| 沙河市| 黎城县| 荔浦县| 通州市| 德格县| 凉城县| 黎平县| 台东市| 武威市| 沙洋县| 巨野县| 麻城市| 甘洛县| 潼南县| 贵阳市| 黑河市| 屯门区| 准格尔旗| 芮城县| 永州市| 奉节县| 碌曲县| 江口县| 津南区| 通辽市|