当前位置:首页 > 单片机 > 单片机
[导读]这次大概介绍了一下NAND Flash,以及在ASF中使用它的方法。一、 接线这个开发板搭载了一个256 MB,8位的NAND Flash(MT29F2G08ABAEA)。引脚接线如下:偷个懒,直接上引脚复用的图。其中PC14表明该NAND FLASH需要作为

这次大概介绍了一下NAND Flash,以及在ASF中使用它的方法。

一、 接线

这个开发板搭载了一个256 MB,8位的NAND Flash(MT29F2G08ABAEA)。引脚接线如下:

偷个懒,直接上引脚复用的图。其中PC14表明该NAND FLASH需要作为SMC的外设0使用。通过使用NANDOE和NANDWE引脚说明需要使用芯片的NAND Flash控制逻辑。另外,PC18复用为输入引脚,用以查询芯片的状态。

二、 NAND Flash

组织结构与寻址

NAND Flash的容量较大。整片Flash分为若干个块(Block),每个Block分为若干个页(Page)。在每个页中,除了数据区域,也包含若干“多余”的区域,用来进行ECC等操作。在进行擦除操作是,基本单位是“块”;而编程的基本单位是“页”。

另外,NAND Flash的物理特性决定了其在编程时,每个bit只能从1变成0。所以在写入前,必须先对该块进行擦除(擦除时把所有位置为1)。

该Flash的结构如下(忽略plane):

在寻址时,是通过行地址和列地址指定储存单元的。其中行地址表示页的编号,列地址表示指定在目标地址在该页的位置。

读写时序

因为没有地址线,所以读写较为复杂。读写时,需要先发送相应操作命令,然后发送地址,才能进行数据传输。一个简单的“页读取”操作时序图如下:

该命令首先拷贝整个页到NAND Flash的cache寄存器中,然后在需要输出的时候,再从指定的列地址开始输出。

PS,该NAND Flash支持在上电的时候自动送出第一页的数据,所以经过适当的配置,也是可以通过它进行Boot的。

CE# Don’t Care

在给NAND Flash发送完命令后,Flash需要一个准备的过程。在这个过程中,需要保持片选信号的有效。(据说否则Flash就会进入低功耗状态)

一个简单的方法是使用GPIO直接控制这个引脚。在ASF中使用的即是这个方法。

另外的方法即是使用Flash的“CE# Don’t Care”功能。开启这个功能后,即使片选无效,Flash也会进行工作。这样做的好处是不用再手动控制片选信号线外;同时可以在Flash进行内部操作时,可以进行其他的片选。比如在一块Flash忙时,可以给另外一块Flash发送命令。但是,开启这个功能可能会增加Flash的功耗。

三、 ASF中NAND Flash使用

准备

在ASF Wizard中添加“NAND Flash on EBI”模块。

在conf_board.h中进行如下声明,记得调用board_init():

1#define CONF_BOARD_NAND

Flash 初始化

在board_init()之后,调用nand_flash_raw_initialize()即可完成NAND Flash的初始化工作。

12345678structnand_flash_raw nf_raw;memset((void*)&nf_raw, 0, sizeof(nf_raw));// Init NAND Flash, and get informations into nf_rawif(nand_flash_raw_initialize(&nf_raw, 0,BOARD_NF_COMMAND_ADDR, BOARD_NF_ADDRESS_ADDR, BOARD_NF_DATA_ADDR)) {MainExit();}

该函数中,会对SMC和若干引脚进行配置;同时对Bus matrix进行设置,以使用芯片提供的NAND Flash逻辑功能。

然后会对NAND Flash进行重置。接着就会读取该Flash的ID,并根据该ID检测Flash的参数,如page大小,block数目等。

基本操作

在nand_flash_raw.h中还提供了一些比较基础的操作。

以下代码对所有的块进行擦除,若在擦除中碰到错误,则打印出来(这里printf会通过UART0口打印,以后有机会会说怎么实现):

12345678910111213// Get NAND's information from nf_rawconststructnand_flash_model* nf_mod = &(nf_raw.model);intnum_block = nand_flash_model_get_device_size_in_blocks(nf_mod);// Erase all blockprintf("Erasing NAND Flash...nr");interror;for(inti = 0; i < num_block; i++) {error = nand_flash_raw_erase_block(&nf_raw, i);if(error == NAND_COMMON_ERROR_BADBLOCK) {printf("-E- Block %u is BAD block. nr", i);}}

还有page的写入、读取和拷贝等操作就不一一列举了……


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

单片机是一种嵌入式系统,它是一块集成电路芯片,内部包含了处理器、存储器和输入输出接口等功能。

关键字: 单片机 编写程序 嵌入式

在现代电子技术的快速发展中,单片机以其高度的集成性、稳定性和可靠性,在工业自动化、智能家居、医疗设备、航空航天等诸多领域得到了广泛应用。S32单片机,作为其中的佼佼者,其引脚功能丰富多样,是实现与外部设备通信、控制、数据...

关键字: s32单片机引脚 单片机

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB

单片机编程语言是程序员与微控制器进行交流的桥梁,它们构成了单片机系统的软件开发基石,决定着如何有效、高效地控制和管理单片机的各项资源。随着微控制器技术的不断发展,针对不同应用场景的需求,形成了丰富多样的编程语言体系。本文...

关键字: 单片机 微控制器

单片机,全称为“单片微型计算机”或“微控制器”(Microcontroller Unit,简称MCU),是一种高度集成化的电子器件,它是现代科技领域的关键组件,尤其在自动化控制、物联网、消费电子、汽车电子、工业控制等领域...

关键字: 单片机 MCU

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

在当前的科技浪潮中,单片机作为嵌入式系统的重要组成部分,正以其强大的功能和广泛的应用领域受到越来越多行业的青睐。在众多单片机中,W79E2051以其卓越的性能和稳定的工作特性,成为市场上的明星产品。本文将深入探讨W79E...

关键字: 单片机 w79e2051单片机

单片机,又称为微控制器或微处理器,是现代电子设备中的核心部件之一。它集成了中央处理器、存储器、输入输出接口等电路,通过外部信号引脚与外部设备进行通信,实现对设备的控制和管理。本文将详细介绍单片机的外部信号引脚名称及其功能...

关键字: 单片机 微控制器 中央处理器

随着科技的飞速发展,单片机和嵌入式系统在现代电子设备中的应用越来越广泛。它们不仅提高了设备的智能化水平,还推动了各行各业的创新与发展。在单片机和嵌入式系统的开发中,编程语言的选择至关重要。本文将深入探讨单片机和嵌入式系统...

关键字: 单片机 嵌入式系统 电子设备
关闭
关闭