基于dsPIC30F6010A的并口NANDFlash驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于dsPIC30F6010A的并口NANDFlash驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于dsPIC30F6010A的并口NANDFlash驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于dsPIC30F6010A的并口NANDFlash驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于dsPIC30F6010A的并口NANDFlash驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、    基于dspic30f6010a的并口nandflash驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)    陸鵬摘 要本文通過分析8位并口nand flash的工作時(shí)序,設(shè)計(jì)其在dspic30f 6010a單片機(jī)下的軟件驅(qū)動(dòng),能夠?qū)崿F(xiàn)對nand flash的讀寫擦除等各種操作。關(guān)鍵詞nand flash;dspic30f6010a;并口;驅(qū)動(dòng)中圖分類號: tp316.2             文獻(xiàn)標(biāo)識碼: adoi:10.19694/ki.issn2095-2457.2020.09.0440 前言nand flash

2、是嵌入式設(shè)計(jì)中常見的存儲器。8位并口nand flash是指數(shù)據(jù)線寬度為8位,通信接口為并行接口的nand flash,在其與微處理器的配合應(yīng)用中,nand fla sh與微處理器一般采用如圖1所示的連接方式。微處理器軟件驅(qū)動(dòng)的設(shè)計(jì)是根據(jù)nand flash的工作時(shí)序,通過配置相關(guān)寄存器進(jìn)行相應(yīng)操作來實(shí)現(xiàn)的。本文中nand flash使用micron公司的mt29f2g08系列進(jìn)行說明,微處理器則使用了microchip公司的16位高性能單片機(jī)dspic30f6010a。1 nand flash信號時(shí)序從軟件驅(qū)動(dòng)角度來講,nand flash最基本的操作有四種,即命令輸入、地址輸入、數(shù)據(jù)輸入、

3、數(shù)據(jù)輸出。所有的nand flash接口命令都是由這四種操作組合而成,以mt29f2g08的read page命令為例,它是由兩個(gè)命令輸入操作(0x00,0x30)、五個(gè)地址輸入操作以及若干數(shù)據(jù)輸出操作組成,read page命令時(shí)序如圖2所示。因此如果在微處理上實(shí)現(xiàn)這四種基本操作,就能實(shí)現(xiàn)所有的接口命令,即實(shí)現(xiàn)了nand flash的驅(qū)動(dòng)設(shè)計(jì)。為了實(shí)現(xiàn)這四種操作,我們需要明確兩個(gè)內(nèi)容:一,四種操作中接口信號的電平;二,接口信號及各信號之間的時(shí)間要求。這兩項(xiàng)內(nèi)容均在nand flash的器件手冊上有明確要求。以mt29f2g08為例,在它的的異步接口模式列表中(表1),我們可以得到四種操作的接

4、口信號電平要求。以命令輸入(comm and input)為例,從表1中可以得到接口信號電平要求為:當(dāng)ce#為低,cle為高,ale為低,we#的上升沿,wp#為高時(shí),完成命令輸入操作。接口信號及各信號之間的時(shí)間要求通過時(shí)序定義來得到。命令輸入的時(shí)序定義如圖3所示,接口信號的時(shí)間要求在表2中列出。因命令輸入發(fā)生在we#上升沿,因此與we#上升沿相關(guān)的幾個(gè)時(shí)間是設(shè)計(jì)的關(guān)鍵所在:twp寫使能脈沖寬度時(shí)間-最小為10ns;tds數(shù)據(jù)建立時(shí)間-最小7ns,即命令輸入后we#需至少保持使能7ns才可以置高;tdh數(shù)據(jù)保持時(shí)間-最少5ns,即we#置高后命令需要至少保持5ns;tcls命令鎖存使能建立時(shí)間

5、-最少10ns;tclh命令鎖存使能保持時(shí)間-最小為5ns,即we#置高后cle需至少保持為高5ns。得到接口信號的電平和時(shí)間要求后,就可以在微處理器上編程實(shí)現(xiàn)對nand flash的各種操作。2 軟件驅(qū)動(dòng)實(shí)現(xiàn)在進(jìn)行nand flash驅(qū)動(dòng)編程之前,我們需要對微處理器dspic30f6010a的i/o按照圖1所示的連接方式進(jìn)行配置,分別將ce#、re#, we#、r/b#、ale、cle、wp#、i/o7:0配置到所需的i/o口,其中ce#、re#、we#、ale、cle、wp#為輸出端口,r/b#為輸入端口,i/o7:0在命令輸入、地址輸入、數(shù)據(jù)輸入三種操作時(shí)為輸出端口,在數(shù)據(jù)輸出操作時(shí)為輸

6、入端口。時(shí)間方面,本例中dspic30f6010a系統(tǒng)時(shí)鐘設(shè)置為24mhz,因此指令周期fcy為24mhz/4為6mhz,即一條指令所用時(shí)間為167ns。以命令輸入操作為例,將其定義為函數(shù)flashwritecmd(),為函數(shù)定義一個(gè)參數(shù)cmd,根據(jù)上一小節(jié)所講,按照命令輸入的時(shí)序要求,將函數(shù)編寫如下:void flashwritecmd(unsigned char cmd)trisdata &= (0x00ff) ; / re0re7輸出ale=0;cle=1;_nop_();  _nop_(); /tclswe=0;_nop_();  _nop_(); _nop

7、_(); _nop_();_nop_();  _nop_(); _nop_(); _nop_();_nop_();  _nop_(); _nop_(); _nop_();/twpdataout= (dataout  & 0xff00) | cmd);_nop_();  _nop_(); /tdswe=1;_nop_();  _nop_();  _nop_();/ tdh, tclhcle=0;按同樣思路完成其他三種基本操作的函數(shù)編程,分別定義為:地址輸入函數(shù)flashwriteaddr(),數(shù)據(jù)輸入函數(shù)flash wr ite

8、port(),數(shù)據(jù)輸出函數(shù)flashreadport(),以這四個(gè)函數(shù)為基礎(chǔ)即可實(shí)現(xiàn)所有接口命令函數(shù),下面以接口命令read page為例說明。將read page命令定義為函數(shù)flashreadbyte(),為函數(shù)定義五個(gè)參數(shù),read_num讀取字節(jié)數(shù)量,byteaddr字節(jié)地址,pageaddr頁地址,blockaddr塊地址,以及buf字節(jié)存儲位置。如圖1所示,read page命令需要首先發(fā)送命令0x00,然后發(fā)送五個(gè)周期的地址,再發(fā)送命令0x30,之后等待r/b#(rdy)信號為高后才能進(jìn)行數(shù)據(jù)讀取,依此函數(shù)編程如下:void flashreadbyte(unsigned intr

9、ead_number,unsigned int byteaddr,unsignedchar pageaddr,unsigned int blockaddr,unsignedchar *buf)unsigned int j,ce=0;flashwritecmd(0x00); /讀命令周期1flashwriteaddr(byteaddr&0xff); /寫字節(jié)低位地址flashwriteaddr(byteaddr>>8)&0x3f); /寫字節(jié)高位地址flashwriteaddr(pageaddr); /寫頁地址flashwriteaddr(blockaddr>&

10、gt;1)&0xff); /寫塊低位地址flashwriteaddr(blockaddr>>9)&0x0f); /寫塊高位地址flashwritecmd(0x30); /讀命令周期2delay_us(20);nand_waitready();/等待rdy信號置高for(j=0;j<read_number;j+)< p>clrwdt();*buf=flashreadport(); /讀取數(shù)據(jù)buf+;ce=1;依照類似方法可實(shí)現(xiàn)nand flash規(guī)定的所有接口命令。需要注意的是在實(shí)現(xiàn)函數(shù)時(shí),要將時(shí)間留出余量,以免出現(xiàn)異常錯(cuò)誤。3 結(jié)論本文介紹的驅(qū)動(dòng)程序已經(jīng)應(yīng)用在項(xiàng)目中,實(shí)際結(jié)果顯示程序功能正確、穩(wěn)定可靠。雖然驅(qū)動(dòng)是基于dspic30f6010a單片機(jī),但其方法可以用于任意微處理器,此外驅(qū)動(dòng)可適用于任何符合onfi1.0標(biāo)準(zhǔn)的nand flash器件,有良好的通用性。參考文獻(xiàn)1rino micheloni,luca crippa,alessi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論