STM32增强型微控制器访问NAND Flash学习笔记_第1页
STM32增强型微控制器访问NAND Flash学习笔记_第2页
STM32增强型微控制器访问NAND Flash学习笔记_第3页
STM32增强型微控制器访问NAND Flash学习笔记_第4页
STM32增强型微控制器访问NAND Flash学习笔记_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、一、了解NAND Flash Flash即是存储芯片的一种,其结合了ROM和RAM的特点,既具备电可擦除编程的性能,又可以快速读取数据,数据不会因断电丢失。目前市面上Flash主要有NOR Flash和NAND Flash。简单的理解就是,NOR Flash具有随机存取和随字节执行写操作的能力,即可以访问到存储器内部的任意一个字节,且具有读取速度快等特点,它占据1MB16MB闪存的大部分市场,根据其读取数据速度快的特点主要应用在代码存储;而NAND Flash以“页”为单位进行对数据的读写操作,且具有写入和擦除速度快等特点,它应用在8MB256MB的产品中,根据其特点主要应

2、用在数据存储上。以型号HY27UF081G2A的NAND Flash芯片为例,其总线宽度为8bit,总内存大小为1Gbit(即128MB),共分为1024块(Block),每块又分为64页(Page),每页共2KB(main memory)+64B(spare memory),main memory用来存放数据,spare memory用来标记已坏的块区和保存对main memory的ECC校验码等(正常情况下不用)。更多的HY27UF081G2A资料参照相关Datasheet。 二、了解HY27UF081G2A芯片引脚功能和NAND Flash接口时序

3、及控制命令1、引脚说明图1  引脚图图2  引脚名称        2、地址周期图3  地址周期其中A10A0表示页内地址偏移(表示02047字节,1页大小即为2K)      A11表示上半页或者下半页(这位程序员无需关心,决定A10A0时也间接决定了A11)      A17A12表示页地址(表示063页)  &#

4、160;   A27A18表示块地址(表示01023块)由于NAND Flash访问的单位是“页”,设置访问地址时只需要确定A27A12的值即可确定到某一页,如果要从页内的某一位置开始访问,则根据需要设置A10A0位来确定从页内第几个字节开始访问,如:要访问存储空间为第3块的第5页,且从第100字节开始进行访问,则对应的4个Cycle周期的地址信号为:1 st :0x64  , 2 nd :0x00   ,  3 rd :0xC5

5、60; ,  4th :0x00 3、了解控制命令,如下所示图4  控制命令 4、了解接口时序,对该存储器进行访问操作有读取芯片ID、读页数据、写页数据,块擦除等共有13种,每种不同的操作对应不用的接口时序,此处只例举其中的4种操作:读取芯片ID、读页数据、写页数据、块擦除相应的接口时序图,更多操作参阅其Datasheet。图5  读取芯片ID时序图6  读取一页数据图7  写一页数据(页编程)图8  块擦除 同时应注意一些时

6、序参数,如在上几幅时序图中出现的tAR(ALE至RE的延时),tCLR(CLE至RE的延时)等等,这些时间参数都有不同的取值范围(ns级别),时序图中出现的Col Add1、Col Add2为列地址表示页内地址偏移,对应4个Cycle地址中的第1、第2个,Row Add1、Row Add2为行地址标识某块某页地址,对应4个Cycle地址中的第3、第4个。更多详细资料参见相关Datasheet。 三、STM32F10x增强型控制器的FSMC模块      FSMC(可变静态存储控制器)是STM32系列微控制器采用的一

7、种新型的存储器扩展技术,可根据系统的需要方便的进行不用类型大容量静态存储器的扩展;简单的理解FSMC模块可对多种外接存储器进行控制,其主要包括NOR Flash、NAND Flash、PC卡,下面对访问NANDFlash介绍。 1、STM32F10x控制器与HY27UF081G2A的对接先看STM32F10x控制器提供的NAND Flash接口(这里为8位的NAND闪存)图9  STM32F10x控制器的NAND Flash接口接口各信号对应的GPIO口为:A17 : PD12A16 : PD11D0:7

8、 : PD14,PD15,PD0,PD1,PE7,PE8,PE9,PE10NCEx : 这里使用NCE2,对应GPIO口为PD7NOE(=NER) : PD4NWE : PD5NWAIT/INT3:2 : PD6(根据情况使用该引脚信号,这里不使用) 结合HY27UF081G2A的引脚功能说明,STM32与HY27UF081G2A的连线方式选择如下:            STM32F1

9、0x的NAND接口                  HY27UF081G2A引脚                  D0:7-IO0IO7        &#

10、160;         A17-ALE                  A16-CLE这里使用PG6接到R/B,在检测NAND Flash               

11、;   NEC2-CE                  NOE-RE                  NWE-WEPG6-R/B(是否忙时直接读取PG6引脚上的电平来判断) 2、NAND地址映像及

12、功能介绍图10  存储器映像和时序寄存器(这里只用块2来控制访问NAND Flash) 通用和属性空间又可以在低256K字节部分画分为三个区图11  存储块选择应用软件使用这三个区访问NAND Flash存储器:发送命令至NAND Flash:对命令区任意地区写入命令即可。指定NAND Flash的地址:对地址区任意地址写入地址命令即可,一个NAND地址有4或5个字节(这里使用的HY27UF081G2A芯片为4个字节),需要连续地执行对地址区的写才能输出完整的操作地址。    读写数据

13、:软件只需对数据区任意一个地址写入或读出数据即可。注:因为NAND Flash存储器自动累加其内部的操作地址,读写数据时没有必要变换数据区的地址,即不必对连续的地址区操作;应用软件使用这三个区进行访问NAND Flash之前要先完成对相应的管理寄存器的初始化配置,下面介绍相应的管理配置寄存器。 3、STM32的NAND Flash存储器块通过以下一组寄存器来管理配置控制寄存器:FSMC_PCRx中断状态寄存器:FSMC_SRxECC寄存器:FSMC_ECCRx通用存储器空间的时序寄存器:FSMC_MEMx属性存储器空间的时序寄存器:FSMC_PATTxI/O空间的时序寄存器:FSMC

14、_PIOx注:这里用的是块2部分,因此上面寄存器中的x=2。 对于要只控制NAND Flash存储器,上面的三个时序寄存器中只用到FSMC_MEMx,配置该寄存器来控制NAND通用存储空间的访问时序,该寄存器中保存着访问时序的4个时间参数(MEMsSET+1、MEMxHIZ+1、MEMxWAIT+1、MEMxHOLD+1),每个时间参数的具体说明可参阅STM32相应Datasheet。访问时序图如下:图12  STM32的NAND通用存储空间的访问时序 对NAND Flash的简单控制访问(读、写、擦除等)这里只需要配置FSMC_PCRx和FSMC_ME

15、Mx这两个寄存器就够了,对NAND Flash复杂的控制访问(检测坏块、ECC校验等)此处不做研究。FSMC_PCRx和FSMC_MEMx寄存器功能参阅STM32相关Datasheet。 四、STM32F10x控制器访问HY27UF081G2A过程针对于简单的读、写、擦除等访问,则过程为:1、管理寄存器FSMC_PCRx和FSMC_MEMx初始化      2、通过访问通用空间的命令区、数据区、地址区完成对NAND Flash的读、写、擦除等操作。 软件实现过程:(在此之前要完成系统时钟配置、相应的总线时

16、钟使能、相应GPIO口的初始化工作,这里不再进行说明)1、管理寄存器FSMC_PCRx和FSMC_MEMx初始化FSMC_PCRx = 0x00060048;(设置ECC页面大小2048字节、ALE至RE的延时为1个HCLK,CLE至RE的延时为1个HCLK,使能ECC电路,设置总线宽度为8位,设置存储器类型为NAND Flash,关闭模块功能,关闭模块等待功能)  FSMC_MEMx = 0x01020301;      /设置MEMsSET+1 = 4个HCLK、MEMxHIZ+1 = 3个HCLK、/MEMx

17、WAIT+1 = 4个HCLK、MEMxHOLD+1 = 4个HCLKFSMC_PCRx |= 0x00000002;      /使能模块功能      2、对NAND Flash的读、写、擦除等操作根据HY27UF081G2A的接口时序来对STM32的NAND通用命令、数据、地址区进行访问操作:      预先宏定义命令、数据、地址区的地址空间:     

18、0;#define  NAND_DATA   0x70000000            /数据空间      #define  NAND_CMD   0x70010000            /命

19、令空间      #define  NAND_ADDR  0x70020000            /地址空间      根据HY27UF081G2A的地址周期(图3)、命令控制(图4)、接口时序(图5、6、7、8)得到-      如读取ID操作:

20、0;     u32 data;            /u32 即 unsigned int(32位系统中即为4字节)      *(vu8 *)(NAND_CMD) = 0x90; /vu8 即 volatile unsigned char*(vu8 *)(NAND_CMD) = 0x00;   

21、;   data = *(uv32*)(NAND_DATA);此时data中的四个字节就包含了从HY27UF081G2A中读出来的芯片ID。-如读第3块、第5页的全部数据,则4个周期地址分别为:1st:0x00,2st:0x00,3st:0xC5,4st:0x00。            u8 pbuf2048,i;      /1页有2048字节*(vu8 *)(NAND_CMD) =

22、 0x00;*(vu8 *)(NAND_ADDR) = 0x00;*(vu8 *)(NAND_ADDR) = 0x00;*(vu8 *)(NAND_ADDR) = 0xC5;*(vu8 *)(NAND_ADDR) = 0x00;*(vu8 *)(NAND_CMD) = 0x30;while(GPIO_ReadInputDataBit(GPIOG,GPIO_PIN_6) = 0);/等待PG6引脚被拉高for(i=0;i<2048;i+)      pbufi = *(vu8 *)(NAND_DATA);此时pbuf2048保存了

23、从NAND Flash的第3块第5页读出来的全部数据。-如读第3块、第5页的全部数据,则4个周期地址分别为:1st:0x00,2st:0x00,3st:0xC5,4st:0x00。       u8 pbuf2048 = 0x00,i,status = 0x00;*(vu8 *)(NAND_CMD) = 0x80;*(vu8 *)(NAND_ADDR) = 0x00;*(vu8 *)(NAND_ADDR) = 0x00;*(vu8 *)(NAND_ADDR) = 0xC5;*(vu8 *)(NAND_ADDR) = 0x00

24、;for(i=0;i<2048;i+)      *(vu8 *)(NAND_DATA) = pbufi;*(vu8 *)(NAND_CMD) = 0x10;while(GPIO_ReadInputDataBit(GPIOG,GPIO_PIN_6) = 0);/等待PG6引脚被拉高*(vu8 *)(NAND_CMD) = 0x70;/发送读状态寄存器命令for(i=0;i<10000;i+)      /多次读取状态寄存器      status = *(vu8 *)(NAND_DATA);      if(status & 0x40) = 0x40)      /如果状态寄存器的BIT6为1,则写入数据成功,结束循环           &#

温馨提示

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

评论

0/150

提交评论