基于dsPIC30F6010A的并口NANDFlash驱动设计与实现_第1页
基于dsPIC30F6010A的并口NANDFlash驱动设计与实现_第2页
基于dsPIC30F6010A的并口NANDFlash驱动设计与实现_第3页
基于dsPIC30F6010A的并口NANDFlash驱动设计与实现_第4页
基于dsPIC30F6010A的并口NANDFlash驱动设计与实现_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、    基于dspic30f6010a的并口nandflash驱动设计与实现    陆鹏摘 要本文通过分析8位并口nand flash的工作时序,设计其在dspic30f 6010a单片机下的软件驱动,能够实现对nand flash的读写擦除等各种操作。关键词nand flash;dspic30f6010a;并口;驱动中图分类号: tp316.2             文献标识码: adoi:10.19694/ki.issn2095-2457.2020.09.0440 前言nand flash

2、是嵌入式设计中常见的存储器。8位并口nand flash是指數据线宽度为8位,通信接口为并行接口的nand flash,在其与微处理器的配合应用中,nand fla sh与微处理器一般采用如图1所示的连接方式。微处理器软件驱动的设计是根据nand flash的工作时序,通过配置相关寄存器进行相应操作来实现的。本文中nand flash使用micron公司的mt29f2g08系列进行说明,微处理器则使用了microchip公司的16位高性能单片机dspic30f6010a。1 nand flash信号时序从软件驱动角度来讲,nand flash最基本的操作有四种,即命令输入、地址输入、数据输入、

3、数据输出。所有的nand flash接口命令都是由这四种操作组合而成,以mt29f2g08的read page命令为例,它是由两个命令输入操作(0x00,0x30)、五个地址输入操作以及若干数据输出操作组成,read page命令时序如图2所示。因此如果在微处理上实现这四种基本操作,就能实现所有的接口命令,即实现了nand flash的驱动设计。为了实现这四种操作,我们需要明确两个内容:一,四种操作中接口信号的电平;二,接口信号及各信号之间的时间要求。这两项内容均在nand flash的器件手册上有明确要求。以mt29f2g08为例,在它的的异步接口模式列表中(表1),我们可以得到四种操作的接

4、口信号电平要求。以命令输入(comm and input)为例,从表1中可以得到接口信号电平要求为:当ce#为低,cle为高,ale为低,we#的上升沿,wp#为高时,完成命令输入操作。接口信号及各信号之间的时间要求通过时序定义来得到。命令输入的时序定义如图3所示,接口信号的时间要求在表2中列出。因命令输入发生在we#上升沿,因此与we#上升沿相关的几个时间是设计的关键所在:twp写使能脉冲宽度时间-最小为10ns;tds数据建立时间-最小7ns,即命令输入后we#需至少保持使能7ns才可以置高;tdh数据保持时间-最少5ns,即we#置高后命令需要至少保持5ns;tcls命令锁存使能建立时间

5、-最少10ns;tclh命令锁存使能保持时间-最小为5ns,即we#置高后cle需至少保持为高5ns。得到接口信号的电平和时间要求后,就可以在微处理器上编程实现对nand flash的各种操作。2 软件驱动实现在进行nand flash驱动编程之前,我们需要对微处理器dspic30f6010a的i/o按照图1所示的连接方式进行配置,分别将ce#、re#, we#、r/b#、ale、cle、wp#、i/o7:0配置到所需的i/o口,其中ce#、re#、we#、ale、cle、wp#为输出端口,r/b#为输入端口,i/o7:0在命令输入、地址输入、数据输入三种操作时为输出端口,在数据输出操作时为输

6、入端口。时间方面,本例中dspic30f6010a系统时钟设置为24mhz,因此指令周期fcy为24mhz/4为6mhz,即一条指令所用时间为167ns。以命令输入操作为例,将其定义为函数flashwritecmd(),为函数定义一个参数cmd,根据上一小节所讲,按照命令输入的时序要求,将函数编写如下: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;按同样思路完成其他三种基本操作的函数编程,分别定义为:地址输入函数flashwriteaddr(),数据输入函数flash wr ite

8、port(),数据输出函数flashreadport(),以这四个函数为基础即可实现所有接口命令函数,下面以接口命令read page为例说明。将read page命令定义为函数flashreadbyte(),为函数定义五个参数,read_num读取字节数量,byteaddr字节地址,pageaddr页地址,blockaddr块地址,以及buf字节存储位置。如图1所示,read page命令需要首先发送命令0x00,然后发送五个周期的地址,再发送命令0x30,之后等待r/b#(rdy)信号为高后才能进行数据读取,依此函数编程如下: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); /写字节低位地址flashwriteaddr(byteaddr>>8)&0x3f); /写字节高位地址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(); /读取数据buf+;ce=1;依照类似方法可实现nand flash规定的所有接口命令。需要注意的是在实现函数时,要将时间留出余量,以免出现异常错误。3 结论本文介绍的驱动程序已经应用在项目中,实际结果显示程序功能正确、稳定可靠。虽然驱动是基于dspic30f6010a单片机,但其方法可以用于任意微处理器,此外驱动可适用于任何符合onfi1.0标准的nand flash器件,有良好的通用性。参考文献1rino micheloni,luca crippa,alessi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论