SAM4E单片机之旅——16、NAND Flash读写

发布者:CrystalBreeze最新更新时间:2017-01-07 来源: eefocus关键字:SAM4E  单片机  NAND  Flash读写 手机看文章 扫描二维码
随时随地手机看文章

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

 

一、 接线

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

wps_clip_image-17474

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

wps_clip_image-1894

 

二、 NAND Flash

  • 组织结构与寻址

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

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

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

    wps_clip_image-30709

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

  • 读写时序

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

    wps_clip_image-13318

    该命令首先拷贝整个页到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使用

  1. 准备

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

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

    1
    #define CONF_BOARD_NAND
  2. Flash 初始化

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

    1
    2
    3
    4
    5
    6
    7
    8
    struct nand_flash_raw nf_raw;
    memset((void*)&nf_raw, 0, sizeof(nf_raw));
     
    // Init NAND Flash, and get informations into nf_raw
    if (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数目等。

  3. 基本操作

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Get NAND's information from nf_raw
    const struct nand_flash_model* nf_mod = &(nf_raw.model);
    int num_block = nand_flash_model_get_device_size_in_blocks(nf_mod);
    // Erase all block
    printf("Erasing NAND Flash...\n\r");
    int error;
    for (int i = 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. \n\r", i);
        }
    }

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


关键字:SAM4E  单片机  NAND  Flash读写 引用地址:SAM4E单片机之旅——16、NAND Flash读写

上一篇:SAM4E单片机之旅——17、通过UART进行标准IO
下一篇:SAM4E单片机之旅——15、触屏输入与SPI通信

推荐阅读最新更新时间:2024-03-16 15:29

AT89S51单片机计数器的设计
1.实验任务 利用AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,用来指示当前计数的数据;用P1.4-P1.7作为预置数据的输入端,接四个拨动开关K1-K4,用P3.6/WR和P3.7/RD端口接两个轻触开关,用来作加计数和减计数开关。具体的电路原理图如下图所示 2.电路原理图 图4.12.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P1.0-P1.3端口用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L4上;要求:P1.0对应着L1,P1.1对应着L2,P1.2对应着L3,P1.3对应着L4; (2).把“单片机系统”区域中的P3.0/RXD,P3.1/TXD,P3.2/IN
[单片机]
AT89S51<font color='red'>单片机</font>计数器的设计
STM32F103单片机PWM单脉冲输出模式
  通常输出PWM波形的时候是一直输出的。但是在电机控制中往往只需要输出一定个数的脉冲,不需要一直输出,那么这就需要每次输出PWM时,输出的脉冲个数可控。要实现这个功能,一般有三种方法。   方法一: void TIM1_PWM_Init(u16 arr, u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitSturcture;
[单片机]
STM32F103<font color='red'>单片机</font>PWM单脉冲输出模式
基于单片机控制的带锁相环三路智能同步采集卡设计
    摘要: 介绍了一种自行设计的以87C196嵌入式单片机为控制器核心并带有锁相环的智能同步采集卡,并较为详细地阐述了其设计思想和设计过程。     关键词: 单片机  智能化  锁相环  同步采集  倍频器     电力系统是数据采集系统的主要应用领域之一,随着电力系统进一步朝着“大电网、大容量、大机组”的方向发展,发、输、配电过程要求高度自动化已成为不可逆转的趋势。因此,其对应的“发、输、配”环节对相应的自动装置、继电保护装置、故障检测及诊断装置等性能提出了更新更高的要求。而数据采集子(卡)系统作为这些装置的“排头兵”,其性能直接影响着这些装置的整体性能,同时也在一定程度上影响着整个电力系统运行的
[工业控制]
PIC单片机在智能双电源装置中的应用
作者Email: c8051@21cn.com 1. 智能双电源装置的简介 随着对供电可靠性的要求也越来越高,很多场合用两路电源来保证供电的可靠性。当常用电源异常,智能双电源装置能自动切换到备用电源,智能双电源装置就是这种在两路电源之间进行可靠切换、以保证供电的装置。在医院、宾馆和矿山等有广泛的应用。 智能双电源装置由开关本体和控制器两部分组成。开关本体由电机通过机械联锁机构控制常用电源的断路器和备用电源的断路器的分合,进而控制电源的切换。控制器通过对电压的采样来判断电源是否异常,如果出现异常应产生相应的切换。 2. PIC16F877A的简介 美国Microchip公司的PIC 8位单片机其生产史1
[单片机]
可监测人体脉搏波及心率的健康鼠标
  脉搏波的波形特征与心血管疾病密切相关,为此用户需要一种简单、实时的便携装置。通过安装在正常使用鼠标时大拇指触摸到的鼠标位置的反射式脉搏波光电传感器采集脉搏波信号,信号经过滤波、放大和A/D转换后,利用单片机对脉搏波信号处理并得出心率数据,最后通过USB接口连接电脑端软件显示。将鼠标和反射式光电传感器结合制成成品之后,经过实际测试,传感器能够很好的测得手指脉搏波并输出。这种可监测人体脉搏波及心率的健康鼠标可以在用户使用鼠标的不经意状态时检测并记录脉搏波及心率。   人体脉搏波中蕴藏着丰富的生理病理信息,大量的临床实测结果证实,脉搏波的特征与心血管疾病有着密切的关系。脉搏波所表现出来的形态、强度、速率与节律等方面的综合信息的确在
[单片机]
Python 和OpenMV如何玩转 STM32 MCU
如今网络边缘侧的机器学习现状如何?哪些工具可以帮助工程师收集数据并执行推断运算?在哪里可以找到ST MEMS,它们对现实生活中的产品有哪些影响?本文是我们即将举行的STM32全国研讨会系列的第二篇专题文章。在第14届STM32全国研讨会上,我们将通过应用演示、产品展示以及工程师与观众互动回答问题的方式,来与蝶粉社区近距离交流。在STM32全国研讨会专题系列报道第一部分我们着重介绍了云连接方面的用例,如一款新的智能门铃功能演示,还介绍了工业和数据安全相关应用。 今天,我们将重点探讨人工智能、计算以及感知技术。 人工智能与计算 Qeexo 和STM32Cube.AI 当今边缘机器学习解决方案的种类越来越多,本届STM32全国
[嵌入式]
利用80C31单片机串行口实现多个LED显示的一种简单方法
    摘要: 介绍利用80C31单片机串行口、廉价的74HC164和74HC244集成块实现多个LED显示的一种简单方法,利用该方法设计的多路LED显示系统具有硬件结构简单、软件编程容易和价格低廉的特点。     关键词: 单片机  串行口  LED  显示  80C31 在单片机系统中,常常用数码管(LED)做显示器。一般的显示器为4位或8位,即需要4个或8个LED。实现这种显示的方法比较多,也比较简单。但是,对于多个LED显示,就必须采取必要的措施才能实现。本文介绍一种设计方法,利用该方法设计的多路LED显示系统具有硬件结构简单,软件编程方便,价格低廉的特点,经在储蓄所大屏幕利率显示屏中应用,效果很好。
[应用]
STM32单片机半主机模式的应用
在keil中编程时常会遇到__use_no_semihosting_swi的警告,这时你就是进入了半主机模式。 在嵌入式的编程中你是避免不了使用printf、fopen、fclose等函数的但是因为嵌入式的程序中并没有对这些函数的底层实现,使得设备运行时会进入软件中断BAEB处,这时就需要__use_no_semihosting_swi这 个声明,使程序遇到这些文件操作函数时不停在此中断处,具体操作如下,将下列程序加入你的工程中: #pragmaimport(__use_no_semihosting_swi)#pragmaimport(_main_redirection)constchar__stdin_name[150]
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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