flash驱动编程及实验_第1页
flash驱动编程及实验_第2页
flash驱动编程及实验_第3页
flash驱动编程及实验_第4页
flash驱动编程及实验_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、Nor flash驱动编程及实验,议程,实验目的 硬件原理 软件原理 问题与讨论,实验目的,学习Flash基本原理,熟悉对Flash的读写操作过程,硬件原理,Flash简介 39VF160简介 电路连接 39VF160详细说明,Flash简介,Flash-ROM(闪存)已经成为了目前最成功、流行的一种固态内存,与 EEPROM 相比具有读写速度快,而与 SRAM 相比具有非易失、以及价廉等优势。而基于 NOR 和 NAND 结构的闪存是现在市场上两种主要的非易失闪存技术(本实验的对象是NOR FLASH) 。 Intel 于 1988 年首先开发出 NOR flash 技术,彻底改变了原先由

2、EPROM 和 EEPROM 一统天下的局面。,39VF160简介,39VF160是SST公司推出的一种Super Flash型的存储器芯片, 属于SST公司并行闪速存储器系列产品中的多功能型闪速存储器(MultiPurpose Flash)。采用2.73.6V电源供电,可方便地应用于嵌入式系统的电路设计中。低功耗,在选通情况下是15mA,在非选通的情况下是4uA。SST39VF160由SST特有的高性能的SuperFlash技术制造而成,SuperFlash技术提供了固定的擦除和编程时间,与擦除/编程周期数无关。,39VF160简介,SST39VF160功能框图,电路连接,SST39VF16

3、0的电路连接图,电路连接,SST39VF160引脚定义,其中,脚DQ6、DQ7为状态指示位。 DQ6:0与1转换是正在处于写入/擦除的算法周期,当停止转换时,内部操作完成。 DQ7:写入时,若读操作生成上次写入DQ7的数据的补码,编程完成后生成DQ7的真实数据;擦除时,DQ7产生“0”擦除后产生“1”。,39VF160详细说明,命令定义 具体操作,39VF160详细说明,命令定义 SST39VF160的存储器操作由命令来启动。SST39VF160闪速存储器的读写时序与一般存储器的读写时序相同,当OE#和CE#信号同时为低电平时,可对芯片进行读操作;当WE#和CE#信号同时为低电平进行写操作。S

4、ST39VF160通过特定的指令代码可以完成字节、扇区或整体芯片的写入和擦除操作。操作命令定义如下表所示。,39VF160详细说明,命令指令定义,注:Sax用于扇区擦出,使用A19A11地址线。Bax用于块擦出,使用 A19A15地址线。WA=编程字地址。,39VF160详细说明,具体操作 Flash存储器的操作包括对Flash的擦除和烧写,由前面所介绍的Flash存储器的工作原理可知,对Flash存储器的编程与擦除是与具体的器件型号紧密相关的,由于不同的厂商的Flash存储器在操作命令上可能会有一些细微的差别,Flash存储器的烧写、擦除程序一般不具有通用性,针对不同厂商、不同的型号的Fla

5、sh存储器,程序应做相应的修改。本文以SST 39VF160为例,其它的芯片编程方法与之类似。,39VF160详细说明,具体操作可以分为以下本个操作 擦除 烧写 状态检测,39VF160详细说明,擦除 SST39VF160的存储空间为2MB,内部划分为块,每个块又分成16个扇区。SST39VF160的块大小为32K字,扇区大小为2K字。对于该芯片的擦除操作可以通过三种途径来实现。 整体擦除(ChipErase) 块擦除(BlockErase) 扇区擦除(SectorErase),39VF160详细说明,整体擦除(ChipErase) SST39VF160包含芯片擦除功能,允许用户擦除整个存储器

6、阵列,使其变为“1”状态。这在需要快速擦除整个器件时很有用。 芯片擦除操作通过在最新一个总线周期内执行一个6字节的命令-5555H地址处的芯片擦除命令(10H)时序来启动。在第6个WE#或CE#的上升沿(无论哪一个先出现上升沿)开始执行擦除操作。擦除过程中,只有触发位或数据查询位的读操作有效。芯片擦除过程中发布的任何命令都被忽略。,39VF160详细说明,块擦除(BlockErase) SST39VF160支持块擦除功能,统一对32K字的块执行擦除操作。块擦除操作通过在最新一个总线周期内执行一个6字节的命令时序-块擦除命令(50H)和块地址(BA)来启动。 块地址在第6个WE#脉冲的下降沿锁存

7、,命令50H在第6个WE#脉冲的上升沿锁存。内部擦除操作在第6个WE#脉冲后开始执行。擦除操作是否结束由数据查询位或触发位决定,块擦除操作过程中发布的任何命令都被忽略。,39VF160详细说明,扇区擦除(SectorErase) SST39VF160还支持片内的扇区擦除功能,其操作的单位为2K字的大小。扇区操作通过在最新一个总线周期内执行一个6字节的命令时序扇区擦除命令(30H)和扇区地址(SA) 来启动。扇区地址在第6个WE#脉冲的下降沿锁存,命令30H在第6个WE#脉冲的上升沿锁存。内部擦除操作在第6个WE#脉冲后开始执行。擦除操作是否结束由数据查询位或触发位决定,扇区擦除操作过程中发布的

8、任何命令都被忽略。,39VF160详细说明,39VF160详细说明,烧写 SST39VF160以字节形式进行编程。编程前,包含字的扇区必须完全擦除。首先执行三字节装载时序,用于软件数据保护。然后,装载字节地址和数据。在字节编程操作中,地址在CE#或WE#的下降沿(不论哪一个后产生下降沿)锁存。数据在CE#或WE#的上升沿(不论哪一个先产生上升沿)锁存。最后,执行内部编程操作,该操作在第4个CE#或WE#的上升沿出现(不论哪一个先产生上升沿)之后启动。编程操作一旦启动,将在20us内完成。 在编程操作过程中,只有数据查询位和触发位的读操作有效。在内部编程操作过程中,主机可以自由执行其他任务,该过

9、程中,发送的任何命令都被忽略。,39VF160详细说明,烧写操作流程图,39VF160详细说明,状态检测 SST39VF160提供两种检测烧写和擦除操作的软件方法,以便优化系统的写周期。软件检测包括2个状态位:数据查询位(DQ7)和触发位(DQ6)。检测模式在WE#的上升沿后使能,WE#的上升沿用来启动内部的烧写或擦除操作。 非易失性写操作的结束与系统不同步,因此,数据查询位或触发位的读取可能与写周期结束同时发生。如果这样,系统就可能得到一个错误的结果,即有效数据与DQ7或DQ6发生冲突。为了防止错误的情况,当一个错误结果出现时,软件程序应当包含一个两次读被访问地址单元的循环。如果两次读取的值

10、均有效,则器件已经完成了写周期,否则拒绝接收数据。,39VF160详细说明,状态检测 SST39VF160提供两种检测烧写和擦除操作的软件方法,以便优化系统的写周期。软件检测包括2个状态位: 数据查询位 (DQ7) 和触发位 (DQ6) 检测模式在WE#的上升沿后使能,WE#的上升沿用来启动内部的烧写或擦除操作。,39VF160详细说明,数据查询位 (DQ7) 当SST39VF160正在执行内部烧写操作时,任何读DQ7的动作将得到真实数据的补码。一旦烧写操作结束,DQ7为真实的数据。 即使在内部烧写和擦除操作结束后紧接着出现在DQ7上的数据可能有效,其余的数据输出引脚上的数据也无效;只有在1u

11、s的时间间隔后执行了连续读周期,所得的整个数据总线上的数据才有效。在内部擦除操作过程中,读出的DQ7值为0。一旦内部擦除操作完成,DQ7的值为1。 对于烧写操作的第4个WE#(或CE#)脉冲的上升沿出现后,数据查询位有效。对于扇区/块擦除或芯片擦除,数据查询位在第6个WE#(或CE#)脉冲的上升沿出现后有效。,39VF160详细说明,数据查询状态检测流程图,39VF160详细说明,和触发位 (DQ6) 在内部烧写或擦除操作过程中,读取DQ6将得到1或0,即所得的DQ6在1和0之间变化。当内部烧写或擦除操作结束后,DQ6位的值不再变化。触发位在烧写操作的第4个WE#(或CE#)脉冲的上升沿后有效

12、。对于扇区/块擦除或芯片擦除,触发位在第6个WE#(或CE#)脉冲的上升沿出现后有效。,39VF160详细说明,触发位状态检测流程图,39VF160详细说明,状态检测(补充) 非易失性写操作的结束与系统不同步,因此,数据查询位或触发位的读取可能与写周期结束同时发生。如果这样,系统就可能得到一个错误的结果,即有效数据与DQ7或DQ6发生冲突。为了防止错误的情况,当一个错误结果出现时,软件程序应当包含一个两次读被访问地址单元的循环。如果两次读取的值均有效,则器件已经完成了写周期,否则拒绝接收数据。,软件原理,参考程序,参考程序,函数名称: sstSectorErase() 函数功能: 擦除指定的f

13、lash扇区. 入口参数: 扇区地址. 返 回 值: OK擦除完全正确. ERROR 有单元不能正确擦除. STATUS sstSectorErase(UINT16 *pSector) int i; volatile UINT16 *flashPtr = pSector; *(volatile UINT16 *)SST_START_ADDR + SST_ADDR_UNLOCK1) = SST_DATA_UNLOCK1;/ 第1个总线写周期 *(volatile UINT16 *)SST_START_ADDR + SST_ADDR_UNLOCK2) = SST_DATA_UNLOCK2;/ 第2

14、个总线写周期 *(volatile UINT16 *)SST_START_ADDR + SST_ADDR_UNLOCK1) = SST_SETUP_ERASE;/ 第3个总线写周期 *(volatile UINT16 *)SST_START_ADDR + SST_ADDR_UNLOCK1) = SST_DATA_UNLOCK1;/ 第4个总线写周期 *(volatile UINT16 *)SST_START_ADDR + SST_ADDR_UNLOCK2) = SST_DATA_UNLOCK2;/ 第5个总线写周期 *(volatile UINT16 *)flashPtr = SST_SECT

15、OR_ERASE;/ 第6个总线写周期(擦除指定扇区). for(i=0; iSST_SECTOR_HWORD_SIZE; i+,flashPtr+) / 校验是否全为0 xffff. if(*flashPtr != 0 xffff) return ERROR; return OK; ,参考程序,函数名称:sstWrite() 函数功能:读取缓冲区数据根据给定的长度写入指定地址. 入口参数flashAddr数据目标地址(flash). buffer数据源地址. length 要写入的字节数. 返 回 值: NULL写失败. flashPtrflash的下一个地址. UINT16 *sstWri

16、te(UINT16 *flashAddr, UINT8 *buffer, ULONG length) ULONG i, cLength; volatile UINT16 *flashPtr; volatile UINT16 *gBuffer; flashPtr = flashAddr; cLength = (length + 1)/2;/ 计算半字长度. gBuffer = (UINT16 *)buffer; while (cLength 0) *(volatile UINT16 *)SST_START_ADDR + SST_ADDR_UNLOCK1) = SST_DATA_UNLOCK1;/ 第1个总线写周期 *(volatile UINT16 *)SST_START_ADDR + SST_ADDR_UNLOCK2) = SST

温馨提示

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

评论

0/150

提交评论