NAND Flash的驱动程序设计

发布者:龙腾少年最新更新时间:2013-03-18 来源: dzsc关键字:NAND  Flash  K9F2808UOB  S3C2410 手机看文章 扫描二维码
随时随地手机看文章

  引言

  当前各类嵌入式系统开发设计中,存储模块设计是不可或缺的重要方面。NOR和 NAND是目前市场上两种主要的非易失闪存技术。NOR Flash存储器的容量较小、写入速度较慢,但因其随机读取速度快,因此在嵌入式系统中,常用于程序代码的存储。与NOR相比,NAND闪存的优点是容量大,但其速度较慢,因为它的I/O端口只有8或16个,要完成地址和数据的传输就必须让这些信号轮流传送。NAND型Flash具有极高的单元密度,容量可以比较大,价格相对便宜。

  本文以三星公司的 K9F2808UOB芯片为例,介绍了NAND Flash的接口电路与驱动的设计方法。文中介绍了开发NAND Flash驱动基本原理,意在简化嵌入式系统开发过程。

  1  NAND Flash工作原理

  S3C2410板的NAND Flash支持由两部分组成:集成在S3C2410 CPU上的NAND Flash控制器

  和NAND Flash存储芯片。要访问NAND Flash中的数据,必须通过NAND Flash控制器发送命令才能完成。所以, NAND Flash相当于S3C2410的一个外设,并不位于它的内存地址区。

  1.1  芯片内部存储布局及存储操作特点

  一片NAND Flash为一个设备, 其数据存储分层为:1设备=4 096块;1块=32页;1页=528字节=数据块大小(512字节)+OOB块大小(16字节)。在每一页中,最后16字节(又称OOB,Out?of?Band)用于NAND Flash命令执行完后设置状态用,剩余512字节又分为前半部分和后半部分。可以通过NAND Flash命令00h/01h/50h分别对前半部、后半部、OOB进行定位,通过NAND Flash内置的指针指向各自的首地址。

  存储操作特点有: 擦除操作的最小单位是块;NAND Flash芯片每一位只能从1变为0,而不能从0变为1,所以在对其进行写入操作之前一定要将相应块擦除(擦除即是将相应块的位全部变为1);OOB部分的第6字节(即517字节)标志是否是坏块,值为FF时不是坏块,否则为坏块。除OOB第6字节外,通常至少把OOB的前3字节用来存放NAND Flash硬件ECC码。

  1.2  NAND Flash接口电路

  首先介绍开发板的硬件设计,图1为NAND Flash接口电路。其中开关SW的1、2连接时R/B表示准备好/忙,2、3连接时nWAIT可用于增加读/写访问的额外等待周期。在S3C2410处理器中已经集成了NAND Flash控制器,图2为微控制器与NAND Flash连接的方式。

  1.3  控制器工作原理

  NAND Flash控制器在其专用寄存器区(SFR)地址空间中映射有属于自己的特殊功能寄存器,就是通过将NAND Flash芯片的内设命令写到其特殊功能寄存器中,从而实现对NAND Flash芯片读、检验和编程控制。特殊功能寄存器有:NFCONF、NFCMD、NFADDR、NFDATA、NFSTAT、NFECC。

  2  Flash烧写程序原理及结构

  基本原理:将在SDRAM中的一段存储区域中的数据写到NAND Flash存储空间中。烧写程序在纵向上分三层完成。第一层: 主烧写函数,将SDRAM中一段存储区域的数据写到NAND Flash存储空间中。第二层: 该层提供对NAND Flash进行操作的页读、写及块擦除等函数。第三层:为第二层提供具体NAND Flash控制器中对特殊功能寄存器进行操作的核心函数,该层也是真正将数据在SDRAM和NAND Flash之间实现传送的函数。其中第二层为驱动程序的设计关键所在,下面对该层的读、写(又称编程)、擦除功能编码进行详细介绍。[page]

  2.1  NAND Flash Read

  功能:读数据操作以页为单位,读数据时首先写入读数据命令00H,然后输入要读取页的地址,接着从数据寄存器中读取数据,最后进行ECC校验。

  参数说明:block,块号;page,页号;buffer,指向将要读取到内存中的起始位置;返回值1,读成功,返回值0:读失败。

  static int NF_ReadPage(unsigned int block, unsigned int page, unsigned char *buffer){

  NF_RSTECC(); /* 初始化 ECC */

  NF_nFCE_L(); /* 片选NAND Flash芯片*/

  NF_CMD(0x00); /* 从A区开始读 *//* A0~A7(列地址) */

  NF_ADDR(0); /* A9A16(页地址) */

  NF_ADDR(blockPage&0xff); /* A17A24,(页地址) */

  NF_ADDR((blockPage>>8)&0xff);/* A25, (页地址) */

  NF_ADDR((blockPage>>16)&0xff);/* 等待NAND Flash处于再准备状态 */

  ReadPage();/* 读整个页, 512字节 */

  ReadECC();/* 读取ECC码 */

  ReadOOB();/* 读取该页的OOB块 *//* 取消NAND Flash 选中*/

  NF_nFCE_H();/* 校验ECC码, 并返回 */

  Return (checkEcc())}

  2.2  NAND Flash Program

  功能:对页进行编程命令, 用于写操作。

  命令代码:首先写入00h(A区)/01h(B区)/05h(C区), 表示写入那个区; 再写入80h开始编程模式(写入模式),接下来写入地址和数据; 最后写入10h表示编程结束。图3为程序流程图。

  参数说明:block,块号;page,页号;buffer,指向内存中待写入NAND Flash中的数据起始位置;返回值0,写错误,返回值1,写成功。

  static int NF_WritePage(unsigned int block, unsigned int page, unsigned char *buffer){

  NF_RSTECC(); /* 初始化 ECC */

  NF_nFCE_L(); /* 片选NAND Flash芯片*/

  NF_CMD(0x0); /* 从A区开始写 */

  NF_CMD(0x80); /* 写第一条命令 *//* A0~A7(列地址) */

  NF_ADDR(0);/* A9A16(页地址) */

  NF_ADDR(blockPage&0xff);/* A17A24(页地址) */

  NF_ADDR((blockPage>>8)&0xff); /* A25(页地址) */

  NF_ADDR((blockPage>>16)&0xff);/* 写页为512B到NAND Flash芯片 */

  WRDATA(); /*OOB一共16字节,每一个字节存放什么由程序员自己定义, 在Byte0 Byte2存ECC检验码,Byte6 存放坏块标志*/

  WRDATA(); /* 写该页的OOB数据块 */

  CMD(0x10); /* 结束写命令 */

  WAITRB();/* 等待NAND Flash处于准备状态 *//* 发送读状态命令给NAND Flash */

  CMD(0x70);

  if (RDDATA()&0x1) { /*如果写有错, 则标示为坏块,取消NAND Flash 选中*/

  MarkBadBlock(block);

  return 0;

  } else { /* 正常退出, 取消NAND Flash 选中*/

  return 1;}[page]

  2.3  NAND Flash Erase

  功能:块擦除命令。

  命令代码:首先写入60h进入擦写模式,然后输入块地址,接下来写入D0h, 表示擦写结束。

  参数说明:block,块号;返回值0,擦除错误(若是坏块直接返回0;若擦除出现错误则标记为坏块然后返回0),返回值1,成功擦除。

  static int NF_EraseBlock(unsigned int block){/* 如果该块是坏块, 则返回 */

  if(NF_IsBadBlock(block)) return 0;

  NF_nFCE_L(); /* 片选NAND Flash芯片*/

  NF_CMD(0x60); /* 设置擦写模式 *//* A9A16(Page Address) , 是基于块擦除*/

  NF_ADDR(blockPage&0xff);

  NF_ADDR((blockPage>>8)&0xff); /* A25(Page Address) */

  NF_ADDR((blockPage>>16)&0xff); NF_CMD(0xd0); WAITRB();CMD(0x70);

  if(RDDATA()&0x1){/*如有错,标为坏块,取消Flash选中*/

  MarkBadBlock(block);

  return 0;

  } else { /* 退出, 取消Flash 选中*/

  return 1;}

  3  ECC校检原理与实现

  由于NAND Flash的工艺不能保证NAND的Memory Array在其生命周期中保持性能可靠,因此在NAND的生产及使用过程中会产生坏块。为了检测数据的可靠性,在应用NAND Flash的系统中一般都会采用一定的坏区管理策略,而管理坏区的前提是能比较可靠地进行坏区检测。如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个块或是页不能读取或全部出错,而是整个页(例如512字节)中只有一位或几位出错。对数据的校验常用的有奇偶校验、CRC校验等,而在NAND Flash处理中,一般使用一种专用的校验——ECC。ECC能纠正单位错误和检测双位错误,而且计算速度很快,但对1位以上的错误无法纠正,对2位以上的错误不保证能检测。ECC一般每256字节原始数据生成3字节ECC校验数据,这3字节共24位分成两部分:6位的列校验和16位的行校验,多余的2位置1,如表1所列。

  首先介绍ECC的列校检。ECC的列校验和生成规则如图4所示,“^”表示“位异或”操作。由于篇幅关系,行校检不作介绍,感兴趣的读者可以参考芯片datasheet,在三星公司网站可以免费下载。

  数学表达式为:

  当向NAND Flash的页中写入数据时,每256字节生成一个ECC校验和,称之为原ECC校验和,保存到页的OOB数据区中。当从NAND Flash中读取数据时,每256字节生成一个ECC校验和,称之为新ECC校验和。校验的时候,根据上述ECC生成原理不难推断:将从OOB区中读出的原ECC校验和与新ECC校验和按位异或,若结果为0,则表示无错(或者出现了 ECC无法检测的错误);若3字节异或结果中存在11位为1,表示存在一个位错误,且可纠正;若3个字节异或结果中只存在1位为1,表示 OOB区出错;其他情况均表示出现了无法纠正的错误。

  4  UBOOT下功能验证

  实现UBOOT对NAND Flash的支持主要是在命令行下实现对NAND Flash的操作。对NAND Flash实现的命令为:nand info、nand device、nand read、nand write、nand erease、nand bad。用到的主要数据结构有:struct nand_flash_dev和struct nand_chip,前者包括主要的芯片型号、存储容量、设备ID、I/O总线宽度等信息,后者是对NAND Flash进行具体操作时用到的信息。由于将驱动移植到UBoot的方法不是本文重点,故不作详细介绍。

  验证方式:通过TFTP将数据下载到SDRAM中,利用nand read、nand write、nand erease三个命令对NAND Flash进行读、编程、擦写测试。测试结果如表2所列。和datasheet中数据对比,可以得出结论,驱动在系统中运行良好。

  结语

  现在嵌入式系统应用越来越广泛,而存储器件又是嵌入式系统必不可少的一部分,NAND Flash在不超过4 GB容量的需求下,较其他存储器件优势明显。本文所设计的驱动并未基于任何操作系统,可以方便地移植到多种操作系统和Boot Loader下,对于简化嵌入式系统开发有一定的实际意义。

关键字:NAND  Flash  K9F2808UOB  S3C2410 引用地址:NAND Flash的驱动程序设计

上一篇:在VIM中实现对嵌入式软件的调试
下一篇:用Allegro对s3c2410的BGA封装布线

推荐阅读最新更新时间:2024-03-16 13:20

利用NAND Flash实现对嵌入式系统的远程更新
引言 嵌入式系统在各个领域有着广泛的应用,嵌入式系统的维护与升级也变得日益重要。由于新技术的不断涌现和对系统功能、性能等要求的不断提高,开发者必须能够针对系统进行升级和维护,以延长系统的使用周期,改善系统性能,增强系统适应性。 传统的嵌入式升级方式通常由维护人员到达设备现场进行重新烧写系统或者更换Flash存储部件,当设备数量庞大并且分布范围广泛时,这种升级维护方式的工作量将非常大,而且耗费的时间长、成本高。随着嵌入式技术的迅速发展,嵌入式系统的远程升级技术得到了快速发展。参考文献提出了一种基于GPRS的嵌入式系统软件的远程在线升级,通过GPRS网络实现对ARM嵌入式终端的系统软件进行在线升级。这种方法的不足在于无法实
[单片机]
利用<font color='red'>NAND</font> <font color='red'>Flash</font>实现对嵌入式系统的远程更新
2019年NAND Flash洗牌淘汰赛一触即发
从2017年供不应求的荣景,NAND Flash市况在2018年进入风云变色的调整期,生产业者持续扩大64层3D TLC NAND供货,新一代制程技术及更大容量规格正伺机而出,供过于求与终端市场买气不足,导致2018年NAND Flash跌价幅度超过6成。 到2018年底,每GB价格已下探至0.08美元,逐渐逼近部分厂商的成本价,在跌价、扩产等多重因素影响下,2019年市况风云诡谲,供应链洗牌淘汰赛一触即发,也为全球产业的竞合局势更加增添烟消四起的氛围。 NAND位元产出连年成长 终端市场乱象横生 DRAM与NAND Flash存储器市场在过去几年几经产业跌宕,在供过于求压力下,2015~2016年市价下滑,
[手机便携]
2019年<font color='red'>NAND</font> <font color='red'>Flash</font>洗牌淘汰赛一触即发
采用C51与插拔式FLASH闪存设计无纸记录仪
  ATMEL公司推出的带有看门狗功能的单片机AT89C55WD带有20K的程序存储器,是8051系列中一款较为先进的产品,其看门狗功能可以大大提高产品的稳定性,大容量的内部程序存储器可以容纳功能丰富的软件。   以往的许多无纸记录仪均采用3.5英寸软盘作为数据存贮介质,但软盘存贮的可靠性差、存储容量有限、成本较高等诸多缺点实在难以克服。   作为一种高科技的非易失性存储设备,FLASH闪存首先在数码相机、PDA、移动电话等数字产品当中得到了应用,随着工艺的进步和价格的下降,逐步向其他应用领域扩展,其容量大、功耗低、速度快、不易受损等优点正受到人们越来越多的青睐,而且最大的好处是,随着技术水平的进步,FLASH闪存的容量也在不断
[应用]
旺宏电子总经理:NAND下半年持续缺货
据台湾媒体报道,旺宏电子总经理卢志远表示,今年下半年三大主力产品唯读式存储器(ROM)、NAND型快闪存储器及NOR型快闪存储器市况都很好,随着旺季出货可望比上半年成长;并预期NAND型快闪存储器下半年持续缺货,明年供需状况仍不易平衡。 旺宏今年第一季及第二季持续交出获利的成绩,淡季不淡。下半年迎接旺季,其中,ROM可望受惠游戏机的传统旺季;NOR型快闪存储器仍处于配销模式,看好强劲需求来自于每个应用领域、产品容量。旺宏总经理卢志远表示,公司NOR型快闪存储器市占率自2008的仅占4%一路成长,目前达26%已居全球之冠;预期今年全年供不应求的状况持续,明年待进一步观察。至于2018年全球供需是否趋于平衡,预料仍不易达到。 卢志远分
[半导体设计/制造]
stm32f407学习笔记之flash模拟eeprom
stm32f407zgt6的flash有1M容量,总共分为11个扇区,每个扇区的地址和大小如下所示 #define ADDR_FLASH_SECTOR_0 ((u32)0x08000000) //扇区0起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_1 ((u32)0x08004000) //扇区1起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_2 ((u32)0x08008000) //扇区2起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_3 ((u32)0x0800C000) //扇区3
[单片机]
s3c2440对K9F2G08UOB Nand Flash的简单操作函数
功能:先擦除一块nand flash地址,然后往里面写一字符串,最后再读出来 实现,擦除、写、读功能。 芯片型号:K9F2G08UOB /**************************************************** 擦除nand flash 0x500000 地址 主函数:erase.c ****************************************************/ #define NFCONF *(volatile unsigned long *)0x4E000000 #define NFCONT *(volatile unsigned long *)0x4E000004
[单片机]
海力士06年表现强劲,PMP/MP3用NAND闪存功不可没
据iSuppli公司,借助于消费者对便携媒体播放器(PMP)/MP3播放器的需求大增,海力士半导体2006年在全球消费电子芯片市场中表现出色。 在iSuppli的2006年顶级消费电子芯片供应商排行榜上,韩国海力士的名次上升一位至第五位,取代了日本的瑞萨科技。海力士排名上升,要归功于该公司用于PMP/MP3产品的NAND闪存销售强劲。 2006年总体PMP/MP3单位出货量为1.781亿台,比2005年的1.287亿大增38.4%。海力士2006年PMP/MP3方面的销售额达到8.31亿美元,比2005年的5.82亿美元增长42.9%。该增幅是PMP/MP3市场的三大芯片供应商中最高的。另外两家供应商是韩国三星电子和日本东芝。
[焦点新闻]
MSP430 flash写入(三)
/* --COPYRIGHT--,BSD_EX * Copyright (c) 2012, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above c
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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