NAND Flash与S3C2410的接口电路

发布者:平和的心情最新更新时间:2016-12-04 来源: eefocus关键字:NAND  Flash  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连接的方式。

摘要 以三星公司K9F2808UOB - jutyy - jutyy的博客


  图1  NAND Flash接口电路

  1.3  控制器工作原理

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

摘要 以三星公司K9F2808UOB - jutyy - jutyy的博客


  图2  NAND Flash与S3C2410连接电路

  2  Flash烧写程序原理及结构

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

  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为程序流程图。

摘要 以三星公司K9F2808UOB - jutyy - jutyy的博客


  图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;}

  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所列。

摘要 以三星公司K9F2808UOB - jutyy - jutyy的博客


  表1  校检数据组成

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

摘要 以三星公司K9F2808UOB - jutyy - jutyy的博客


  图4  列校验和生成规则

  数学表达式为:

摘要 以三星公司K9F2808UOB - jutyy - jutyy的博客


  当向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中数据对比,可以得出结论,驱动在系统中运行良好。

摘要 以三星公司K9F2808UOB - jutyy - jutyy的博客


  表2  测试结果

  结语

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


关键字:NAND  Flash  S3C2410  接口电路 引用地址:NAND Flash与S3C2410的接口电路

上一篇:S3C2440上看门狗(Watchdog)驱动开发实例讲解
下一篇:NandFlash驱动超详细分析(一)

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

NAND闪存深入解析
对于许多消费类音视频产品而言,NAND闪存是一种比硬盘驱动器更好的存储方案,这在不超过4GB的低容量应用中表现得犹为明显。随着人们持续追求功耗更低、重量更轻和性能更佳的产品,NAND正被证明极具吸引力。   NAND闪存阵列分为一系列128kB的区块(block),这些区块是NAND器件中最小的可擦除实体。擦除一个区块就是把所有的位(bit)设置为“1”(而所有字节(byte)设置为FFh)。有必要通过编程,将已擦除的位从“1”变为“0”。最小的编程实体是字节(byte)。一些NOR闪存能同时执行读写操作(见下图1)。虽然NAND不能同时执行读写操作,它可以采用称为“映射(shadowing)”的方法,在系统级实现这一点。这种方法在
[模拟电子]
<font color='red'>NAND</font>闪存深入解析
基于TMS320C6701控制多片AD9852的接口电路的设计
摘要:提出了利用数字信号处理芯片TMS320C6701控制三片直接数字频率合成器AD9852的接口电路设计方案,重点分析了使多片AD9852同步工作的关键技术。 关键词:DDS AD9852 DSP TMS320C6701 同步 直接数字频率合成器(DDS)因具有频率转换时间短、频率分辨率高、输出相位连续、可编程控制和全数字化结构、便于集成等优越性能,在雷达、通信、电子对抗等电子系统中应用越来越广泛。目前,在相控阵雷达和多路信号波形发生器等一些应用场合,开始出现同时使用多片DDS芯片输出多路同步信号波形的趋势。笔者在三通道雷达中频信号模拟器的设计中,使用数字信号处理芯片TMS320C6701对三片直接数字频率合成器芯片AD98
[嵌入式]
S3C2440 Nand Flash驱动(分析MTD层并制作NAND驱动)(二十三)
1、本节使用的nand flash型号为K9F2G08U0C,它的命令如下: 1.1 我们以上图的Read ID(读ID)为例,它的时序图如下: 首先需要使用CE片选 1)使能CLE 2)发出0x90命令,并发出WE写脉冲 3)复位CLE,然后使能ALE 4)发出0x00地址,并发出WE写脉冲 5)设置CLE和ALE为低电平 6)while判断nRE(读使能)是否为低电平 7)读出8个I/O的数据,并发出RE上升沿脉冲 (我们的nand flash为8个I/O口) 1.2 nand flash 控制器介绍 在2440中有个nand flash 控制器,它会自动控制CLE,ALE那些
[单片机]
S3C2440 <font color='red'>Nand</font> <font color='red'>Flash</font>驱动(分析MTD层并制作<font color='red'>NAND</font>驱动)(二十三)
HOLTEK新推出HT67F60A/70A最佳性价比、功能强大的A/D LCD Flash MCU系列
继現有的TinyPowerTM A/D with LCD型Flash MCU HT67Fxx系列,Holtek再推出HT67F60A、HT67F70A,除承袭原有多样完整的功能外,并将程序空间推展到32KWords,同时使用Holtek新推出的加强型MCU核心,增加跨Bank内存的存取指令,使指令数达百个以上,同时搭配优化的C语言编译程序,让程序更精简更有效率及弹性。非常适用于各种小家电、量测仪表、工业控制、医疗健康器材等产品。 全系列MCU,涵盖完整并多样化的功能,包含有16K、32K Word Flash程序内存、1024、2048Byte数据存储器、128Byte Data EEPROM及16 Level S
[单片机]
HOLTEK新推出HT67F60A/70A最佳性价比、功能强大的A/D LCD <font color='red'>Flash</font> MCU系列
FSMC的定义 RAM 和ROM却别 nor flash 和nondflash的区别
一FSMC的定义 英文名是(Flexible Static Memory Controller)即 可变静态存储控制器。是STM32系列采用一种新型的存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。 利用FSMC就是发现32内存不够,或者其他原因需要外接内存,所以要用FSMC功能 外加内存。 二 我发现百度词条讲的很清楚。我提出来几个 给细讲一下。 FSMC技术优势 ①支持多种静态存储器类型。STM32通过FSMC可以与SRAM、ROM、PSRAM、NOR Flash和NANDFlash存储器的引脚直接相连。 ②支持丰富的存储操作方法。FSMC
[单片机]
STM8 FLASH寄存器
FLASH控制寄存器1(FLASH_CR1) 地址偏移值:0x00 复位值:0x00 位7:4 保留位,必须保持为0 位3 HALT:停机(Halt)模式下掉电 该位可由软件来置位或清零。 0:当MCU在停机(Halt)模式时FLASH处于掉电模式 1:当MCU在停机(Halt)模式时FLASH处于运行模式 位2 AHALT:活跃停机(Active halt)模式下掉电 0:当MCU在活跃停机模式时FLASH处于掉电模式 1:当MCU在活跃停机模式时FLASH处于运行模式 位1 IE:FLASH中断使能 0:中断禁止 1:中断使能。当FLASH_IAPSR寄存器中的EOP或WR_PG_DIS位被置位时产生中断 位0
[单片机]
STM8 <font color='red'>FLASH</font>寄存器
终端需求递延Q3NAND市场持续供过于求
    欧债风波为 2012下半年的全球经济复苏带来不确定性, NAND Flash 业者也担心传统下半年电子业旺季效应将会有旺季不旺的状况。 根据 TrendForce 旗下研究部门 DRAMeXchange 表示,目前除了记忆卡及UFD市场需求依然疲弱外,因受到部分新的软硬体零组件上市递延的影响,使得一些 NAND Flash 终端应用如智慧型手机、平板电脑及Ultrabook新机型上市的 NAND Flash 备货需求递延到8月下旬到11月初,因此第三季 NAND Flash市场持续呈现供过于求的状况,由于2012上半年 NAND Flash价格持续走跌,明显侵蚀到 NAND Flash供应商的获利率,近期部分NAND Fl
[手机便携]
存储器下半年迎来供不应求?2Q涨势成下半年风向球
存储器产业2024年从价格谷底回升,虽然农历年长假影响供应链拉货意愿、全球经济复苏缓慢,存储器供应链对于第2季实质需求仍有抱持观望,不过上游存储器原厂在第1季供货持续紧缩。 业界预期,即使上半年的市场终端需求不如预期,原厂仍将力撑DRAM及NAND Flash价格温和调涨,为了因应传统旺季报到加剧供应紧俏,不排除第2季再掀起一波补货涨价潮,预料第2季的价格涨势将成为下半年产业风向球。 业界指出,虽然海外代理市场仍维持备货需求,但国内景气陷入低迷阴霾,在外界一片看好存储器需求回温成长下,不乏保守看待的业者认为,短期内存储器市场价格的调涨幅度将趋缓,存储器原厂与终端业者将进入议价拉锯战,藉由供给减少影响,以推升存储器价格走扬。 存储
[半导体设计/制造]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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