STM32CubeMX系列教程20:Nand Flash

发布者:superstar11最新更新时间:2020-06-20 来源: eefocus关键字:STM32CubeMX系列  Nand  Flash 手机看文章 扫描二维码
随时随地手机看文章

一、Nand Flash 简介


Flash 中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。功能性分为两种:

NOR Flash:允许随机存取存储器上的任何区域,以编码应用为主,其功能多与运算相关

Nand Flash:主要功能是存储资料,适合储存卡之类的大量数据的存储。


本章以K9F1G08U0E芯片为例讲解Nand Flash。


二、Nand Flash存储结构


一个Nand Flash由多个块(Block)组成,每个块里面又包含很多页(page)。每个页对应一个空闲区域/冗余区域(spare area),这个区域不是用来存储数据的,用于放置数据的校验值检测和纠错的。


块,是Nand Flash的擦除操作的基本/最小单位。

页,是Nand Flash的写入操作的基本/最小的单位。

从上图可知,K91FG080U0E包含1024 Blocks,每个Block包含 64 Pages,每个Page包含2K Bytes数据空间 + 64 Bytes冗余空间。故总大小=1024 Blocks  x 64 Pages x (2K+ 64) B = (1024 + 32) MBits = 1G Bits。


K91G08U0E功能框图如下:


三、Nand Flash引脚功能说明


上图是常见的Nand Flash所拥有的引脚(Pin)所对应的功能,简单翻译如下:


  1. I/O0 ~ I/O7:用于输入地址/数据/命令,输出数据

  2. CLE:Command Latch Enable,命令锁存使能,在输入命令之前,要先在模式寄存器中,设置CLE使能

  3. ALE:Address Latch Enable,地址锁存使能,在输入地址之前,要先在模式寄存器中,设置ALE使能

  4. CE#:Chip Enable,芯片使能,在操作Nand Flash之前,要先选中此芯片,才能操作

  5. RE#:Read Enable,读使能,在读取数据之前,要先使CE#有效。

  6. WE#:Write Enable,写使能,在写取数据之前,要先使WE#有效。

  7. WP#:Write Protect,写保护

  8. R/B#:Ready/Busy Output,就绪/忙,主要用于在发送完编程/擦除命令后,检测这些操作是否完成,忙,表示编程/擦除操作仍在进行中,就绪表示操作完成.

  9.  Vcc:Power,电源

  10. Vss:Ground,接地

  11. N.C:Non-Connection,未定义,未连接

(字母上面带横杠说明引脚是低电平有效,为书写方便,在字母后面加“#”表示)


四、可变存储控制器(FMC)


FMC,即可变存储控制器,为STM32系列单片机的接口,本章就是通过这个接口控制NAND FLAHS。

FMC 功能块可连接:同步/异步静态存储器、 SDRAM 存储器和 NAND Flash。其主要用途有:

  • 将 AHB 数据通信事务转换为适当的外部器件协议

  • 满足外部存储器器件的访问时间要求

        

说得复杂一点,FMC个功能就是将读写stm32内部地址操作转换为输出满足外部存储器的时序读写外部存储器。例如对STM32内部Ox8000 0000地址写入一个数据,FMC控制器会控制对应的管脚输出一个满足Nand Flash的时序,发送一个数据到Nand Flash设备。同理读取读取内部的寄存器,也会生成一个时序从Nand Flash读取一个数据。因此通过FMC控制外设非常简单,只需读写STM32内部寄存器即可实现对外部存储器的读写操作。我们只需配置好FMC时序寄存器,使产生的时序满足外部存储器的访问时间要求。


FMC框图如上图,所有外部存储器共享地址、数据和控制信号, 但有各自的片选信号。 FMC 一次只能访问一个外部器件。其中FMC_A[25:0],FMC_D[31:00]为地址线和数据线,由于Nand Flash地址线和数据线复用,故配置时地址线和数据线是一样的。Nand Flash接口如下图(摘自Open746I-C原理图)。

FMC的存储区域外部储存分配图如图。其中Nand Flash为储存区域3,4x64MB。起始地址为0x8000 0000。

五、Nand Flash控制时序


和前面介绍的串行Nor Flash芯片W25Q128FV类似,Nand Flash也是通过指令控制的,在这里简单讲解一下Nand Flash的控制时序,讲解这部分只要是为了加深对Nand Flash的了解,和学习看时序图,实际编程的时候是不需要用到的,这部分ST公司已经提供nand flash的库了,我们只需调用函数控制Nand flash即可,不需要再理会底层。

   下面为Nand Flash操作指令:


如下编程操作和读操作的时序。首先先拉低NCE片选,只有选中芯片才能让他工作。

Nand Flash是通过 ALE/CLE 来区分数据线上的数据是命令(CLE有效),地址(ALE有效)还是数据(CLE/ALE都无效)。通过NWE/NRE来区分数据线上的数据是写操作(NWE有效)还是读操作(NRE有效)。


下面为发送命令的时序图,已经对应的时间参数表:



用FMC控制Nand Flash 我们只需要知道访问波形图中的四个时间参数既可。

从上这三个图我们可以知道:

        MEMxSET = tCLS - tWP >= 0ns

        MEMxWAIT = tWP  >= 12ns

        MEMxHOLED = tCLH >= 5ns

        MEMxHIZ = tCLS - tDS >= 0ns

六、新建工程

复制串口printf的工程,修改文件夹名。击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置,选择NCE3开启NAND Flash,数据地址线选择8 bits,Ready or Busy选择 NWAIT。

    

FMC配置NAND Flash如下:使能ECC校验,建立保存等待等时间参数设置可以见上一节的时序图时间参数。


FMC是挂载到AHB时钟线上,频率等于系统时钟频率,即216M,时钟周期为 1 /216 MHz = ~4.6ns。


NAND属性信息根据前面介绍的K91FG080U0E存储结构配置。


生成报告以及代码,编译程序。在fmc.c文件中可以看到初始化函数。在stm32f7xx_hal_nand.h头文件中可以看到NAND Flash的操作函数。


声明变量: RxBuffer,TxBnffer为读写缓存,大小可以Nand flash一页的长度;NAND_ID储存ID信息,WriteReadAddr为存储Nand Flash操作地址。


/* USER CODE BEGIN PV */

/* Private variables ---------------------------------------------------------*/

/* for K9F1G08 */

#define NAND_PAGE_SIZE             ((uint16_t)0x0800) /* 2 * 1024 bytes per page w/o Spare Area */

 

NAND_IDTypeDef NAND_ID;

NAND_AddressTypeDef WriteReadAddr;

 

static uint8_t TxBuffer [NAND_PAGE_SIZE];

static uint8_t RxBuffer [NAND_PAGE_SIZE];

uint16_t i;

/* USER CODE END PV */


添加应用程序,程序中先读取Nand Flash ID,然后配置操作地址,对页进行擦除,写,读等操作。


  /* USER CODE BEGIN 2 */

  printf("rnNandFlash Example rnrn");

     

  /* Read the NAND memory ID */                                                                  

  HAL_NAND_Read_ID(&hnand1, &NAND_ID);

 

  printf("Nand Flash ID = 0x%02X,0x%02X,0x%02X,0x%02X  ",NAND_ID.Maker_Id, NAND_ID.Device_Id,

                                                 NAND_ID.Third_Id, NAND_ID.Fourth_Id );

  if ((NAND_ID.Maker_Id == 0xEC) && (NAND_ID.Device_Id == 0xF1)

        && (NAND_ID.Third_Id == 0x80) && (NAND_ID.Fourth_Id == 0x15))

  {

        printf("Type = K9F1G08U0Arn");

  }

  else if ((NAND_ID.Maker_Id == 0xEC) && (NAND_ID.Device_Id == 0xF1)

        && (NAND_ID.Third_Id == 0x00) && (NAND_ID.Fourth_Id == 0x95))

  {

        printf("Type = K9F1G08U0Brn");     

  }

  else if ((NAND_ID.Maker_Id == 0xAD) && (NAND_ID.Device_Id == 0xF1)

        && (NAND_ID.Third_Id == 0x80) && (NAND_ID.Fourth_Id == 0x1D))

  {

        printf("Type = HY27UF081G2Arn");       

  }

  else

  {

        printf("Type = Unknowrn");

  }

     

  /* NAND memory address to write to */

  WriteReadAddr.Zone = 0x00;

  WriteReadAddr.Block = 0x00;

  WriteReadAddr.Page = 0x00;

 

  /* Erase the NAND first Block */

  HAL_NAND_Erase_Block(&hnand1,&WriteReadAddr);

 

  /* Fill the buffer to send */

  for (i = 0; i < NAND_PAGE_SIZE; i++ )

  {

     TxBuffer[i] = i;

  }

 

  /* Write data to FMC NAND memory */

  HAL_NAND_Write_Page(&hnand1, &WriteReadAddr, TxBuffer, 1);

  printf("rnWritten to the number of£º rn");

  for(i = 0; i < 2048; i++)

      printf("0x%02X r",TxBuffer[i]);

 

  HAL_Delay(100);

  /* Read data from FMC NAND memory */

  HAL_NAND_Read_Page(&hnand1, &WriteReadAddr, RxBuffer, 1);

  printf("rnRead receive: rn");

  for(i = 0; i < 2048; i++)

      printf("0x%02X r",RxBuffer[i]); 


关键字:STM32CubeMX系列  Nand  Flash 引用地址:STM32CubeMX系列教程20:Nand Flash

上一篇:STM32CubeMX系列教程21:SDRAM
下一篇:STM32CubeMX系列教程19:Quad-SPI

推荐阅读最新更新时间:2024-11-12 01:38

基于Nand Flash的VIVI装载器的分析与改进
引言 在操作系统启动前,要先运行一段程序.这段程序就是BootLoader,即启动装载程序,它相当于PC机上的BIOS。通过这段程序,可以实现硬件设备的初始化,建立内存卒问映射等一系列初始化工作,从而将系统的软硬件环境初始化为一个合适的状态.以便为装载操作系统作好准备。在系统加电或复位后,CPU通常都是从一个预先定义的地址上取指令,而在嵌入式系统中,通常将某种类型的固态存储设备(如ROM、FIash等)映射到此地址处。通过烧写工具把BootLoader的映像烧写到这种固态存储设备上,在系统加电或复位后CPU就可以从这种固态存储设备上取指令执行BootLoader以实现系统的启动。由于在ROM及Flash等存储设备中程序的执行速度与
[单片机]
宜鼎打造工控SSD超凡规格 全新3D NAND TLC SSD效能倍增
新一代闪存3TS5-P,主打DWPD2规格,首推高阶储存市场 全球工控储存大厂宜鼎国际,将推出针对高阶市场应用的储存方案3TS5-P ,采用3D NAND TLC ,并符合JESD219负载标准,特别针对高速读写和长时间运作进行耐用测试,并优化硬件与固件设计,平均故障间隔时间 (MTBF)高于业界标准,为巨量数据用户与高阶应用提供更耐久的读写负荷需求。此外,全新的3D NAND TLC SSD系列支持各种外型规格,并特别设计动态温控调节功能,可使硬盘维持长时间稳定运行,不仅提供快速的访问速度,更让系统平稳无虞。 宜鼎全新的3D NAND TLC SSD系列3TS5-P,将闪存高尖技术带入工业级市场,采用高阶组件,并提
[嵌入式]
宜鼎打造工控SSD超凡规格 全新3D <font color='red'>NAND</font> TLC SSD效能倍增
长江存储NAND闪存芯片生产机台进场安装
    国家存储器基地项目芯片生产机台正式进场安装,这标志着国家存储器基地从厂房建设阶段进入量产准备阶段。长江日报记者了解到,设备搬入、调试将耗费3个月左右的时间,然后开始小规模试产,如顺利,今年四季度,中国首批拥有完全自主知识产权的32层三维NAND闪存芯片有望在光谷实现量产。   去年9月,国家存储器基地项目(一期)一号生产及动力厂房提前一个月实现封顶;如今,又提前20天实现了芯片生产机台搬入。紫光集团董事长兼长江存储董事长赵伟国介绍,生产机台搬入对生产环境的要求很高,必须放在无尘室中并且提供相应的保障支持。因此,机台搬入说明厂房内部的洁净室、电气设备等内部装修已经陆续完成,这比厂房封顶的技术含量更高,难度更大。   9个月建
[半导体设计/制造]
MSP430 FLASH结构 InfoA(1080H-10FFh)和InfoB(1000H-10FFH)
Flash 存储器被分割成两部分: 主存储器和信息存储器, 两者在操作上没有什么 区别。两部分的区别在于段的大小和物理地址的不同 Flash 存储器被分割成两部分:主存储器和信息存储器,两者在操作上没有什么区别。两部分的区别在于段的大小和物理地址的不同。 每个主存储区和信息存储区由若干个段组成。举例Easy430f2132学习板上的主芯片2132来说,f2132由8KB+256Bflash的资源。 8K的flash是主存储区,专门用来存储代码或信息的。该存储区被划分为若干个段,每个段的大小为512B,可以推断,f2132共有8KB/512B=16段。 256B的信息段被划分为4个段,分别为A,B,C,D四个段,每段大
[单片机]
MSP430 <font color='red'>FLASH</font>结构 InfoA(1080H-10FFh)和InfoB(1000H-10FFH)
NAND需求点火 模块厂Q3旺
    存储器大厂美光(Micron)昨(20)日召开法说会,执行长Mark Durcan看好下半年NAND Flash旺季,并指出未来12个月,NAND市场产能供给增加的幅度有限,但需求十分强劲,几乎可用贪婪的需求(insatiable demand)来形容,因此对下半年NAND市场抱持乐观正面看法。      根据集邦科技旗下DRAMeXchange调查,由于全球4大供应商近一年来没有扩产动作,加上制程微缩难度太高导致速度放缓,第3季NAND Flash位元成长率恐低于10%,但因行动装置及固态硬盘(SSD)市场进入旺季,业界看好NAND Flash价格在第3季有机会大涨2成,本季大幅拉升NAND芯片库存的广颖(4973)、创见
[手机便携]
HOLTEK推出HT68FB240 Low Speed USB Flash MCU
Holtek USB Flash MCU又多了1个新成员I/O型的Low Speed USB 8-bit Flash MCU -- HT68FB240。如之前所推出的HT66FB5x0与HT68FB5x0一样,HT68FB240均提供ICP / ISP / IAP等烧录模式,支持在线更新功能,可高达百万次的擦写次数。HT68FB240适用于鼠标、键盘、Gamepad、电视游戏外围、USB下载型遥控器、USB Key网络安全、有线或无线的计算机外设与消费性产品等。HT68FB240特别考虑到碳膜键盘的应用需求,研发出无需额外增加被动组件便可轻易克服碳膜高电阻值应用问题。 HT68FB240兼容于USB 2.0规范,并符合工规 (-40
[单片机]
兆易创新24nm SPI NAND Flash,开启国产化 Flash新时代
半导体器件供应商兆易创新GigaDevice (股票代码 603986) 宣布,正式推出全国产化24nm工艺节点的4Gb SPI NAND Flash产品——GD5F4GM5系列。该系列产品实现了从设计研发、生产制造到封装测试所有环节的纯国产化和自主化,并已成功量产,标志着国内SLC NAND Flash产品正式迈入24nm先进制程工艺时代。该创新技术产品有助于进一步丰富兆易创新的存储类产品线,为客户提供更优化的大容量代码存储解决方案。 如今各类电子设备的功能日趋复杂,在一些新兴的、甚至紧凑型应用中都需要预装嵌入式操作系统,对存储容量的需求在不断提升。高可靠、大容量的代码存储需求成为业界广泛诉求。SLC NAND在市场兼具性价
[嵌入式]
兆易创新24nm SPI <font color='red'>NAND</font> <font color='red'>Flash</font>,开启国产化 <font color='red'>Flash</font>新时代
三星宣布量产全球首个3D垂直闪存V-NAND
三星电子在存储技术上的领先的确无可匹敌,今天又宣布已经批量投产全球第一个采用3D垂直设计的NAND闪存“V-NAND”。这年头,3D堆叠已经成了潮流,处理器、内存什么的都要堆起来。 三星的V-NAND单颗芯片容量128Gb(16GB),内部采用三星独有的垂直单元结构,通过3D CTF电荷捕型获闪存技术、垂直互连工艺技术来连接3D单元阵列。 三星称,这种新闪存的拓展能力是普通2xnm平面型闪存的两倍以上,可靠性提升最少2倍、最多10倍,而且写入性能也可达到1xnm NAND闪存的两倍。Tb(128GB)级别的闪存芯片指日可待。 早在2006年,三星就研发了CTF技术。在这种结构的NAND闪存中,电荷被临时存放在
[手机便携]
三星宣布量产全球首个3D垂直闪存V-<font color='red'>NAND</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved