当前位置:文档之家› Nand Flash 介绍及高通nand flash驱动

Nand Flash 介绍及高通nand flash驱动

Nand Flash 介绍及高通nand flash驱动
Nand Flash 介绍及高通nand flash驱动

Nand Flash 介绍及高通nand flash驱动

1. Nand Flash 相关概念

1.1 NOR flash与nand flash

1) Nor flash 写速度要比Nand flash 慢得多,Nor flash的读速度比Nand flash快得多。

2.)Nor flash 可以挂上CPU 芯片的地址线,不需要额外的sdram 就可直接在Nor flash 中直接运行,而Nand flash 需要代码搬运到Ram中运行,所以需要Boot loader,需要额外的sdram 的开销。

3)Nandflash需要做badblock检测和ecc校验;每个page中需有一块区域标识坏块信息,而 Nor flash 没有badblock 和ecc 校验的概念。

4)Nand flash最小的program单位为page,而Nor flash 可以对bit进行

1.2 什么是SLC和MLC

SLC,Single Level Cell:单个存储单元,只存储一位数据,表示成1或0.

对于数据的表示,单个存储单元中内部所存储电荷的电压,和某个特定的阈值电压Vth,相比,如果大于此Vth值,就是表示1,反之,小于Vth,就表示0.

MLC,Multi Level Cell:与SLC相对应,就是单个存储单元,可以存储多个位,比如2位,4位等。其实现机制,就是,通过控制内部电荷的多少,分成多个阈值,通过控制里面的电荷多少,而达到我们所需要的存储成不同的数据。比如,假设输入电压是Vin=4V那么,可以设计出2的2次方=4个阈值, 1/4 的Vin=1V,2/4的Vin=2V,3/4的Vin=3V,Vin=4V,分别表示2位数据00,01,10,11。对于写入数据,就是充电,通过控制内部的电荷的多少,对应表示不同的数据。

另,nand flash:

页大小是512+16=528的称为small page

页大小是2048+64=2112的称为large page

1.3 Nand flash的组成结构

图2 Nand flash 物理存储单元的阵列组织结构

NAND Flash 的数据是以bit 的方式保存在memory cell,一般来说,一个cell 中只能存储一个bit。这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device 的位宽。这些Line 会再组成Page。

如上图flash的结构,每个page包含2012Byte,每64 个page 形成一个Block, 8192个block形成整个flash。 page=2012Byte=2048(Main

Area)+64byte(Spare Area)

2 .Nand flash 命令及寻址方式:

Nand flash的操作,一般都用通用的命令。如下图表示nand flash操作的相关命令。

图3 Nand flash 相关操作命令

2.1 Nand Flash 寻址方式

Block是NAND Flash中最大的操作单元,擦除就是按照block为单位完成的而编程/读取是按照page为单位完成的。

所以,按照这样的组织方式可以形成所谓的三类地址:

-Block Address 块地址

-Page Address 页地址

-Column Address 页内偏移地址

图4 Nand flash的地址周期组成

NAND Flash的地址表示为:

Block Address|Page Address in block|Column Address

地址传送顺序是Column Address,Page Address,Block Address。

由于地址只能在I/O[7:0]上传递,因此,必须采用移位的方式进行。

Column address就是表示页内的地址

如上flash的读看,此nand flash地址周期共有4个,2个列(Column)周期,2个行(Row)周期。而对于对应地,我们可以看出,实际上,列地址A0~A10,就是页内地址,地址范围是从0到2047,而对出的A11,理论上可以表示2048~4095,但是实际上,我们最多也只用到了2048~2011,用于表示页内的oob区域,其大小是64字节

Row address 表示页号即页地址:

A12~A30,称作页号,页的号码,可以定位到具体是哪一个页。而其中,A18~A30,表示对应的块号,即属于哪个块。由于共有8192块故用13位表示

A12~A17,表示块中的那一页,由于1块有64个页故用6位表示。

2.2 操作过程的解释

下面以nand flash的读操作来解释nand flash的工作过程及相关时序。

图5 Nand flash 读操作时序

对于读操作的,上面图中标出来的,1-6个阶段,具体是什么含义。

(1)操作准备阶段:此处是读(Read)操作,所以,先发一个图5中读命令的第一个阶段的0x00,表示,让硬件先准备一下,接下来的操作是读。

(2)发送两个周期的列地址。也就是页内地址,表示,我要从一个页的什么位

置开始读取数据。

(3)接下来再传入三个行地址。对应的也就是页号。

(4)然后再发一个读操作的第二个周期的命令0x30。接下来,就是硬件内部自

己的事情了。

(5)Nand Flash内部硬件逻辑,负责去按照你的要求,根据传入的地址,找到哪个块中的哪个页,然后把整个这一页的数据,都一点点搬运到页缓存中

去。而在此期间,你所能做的事,也就只需要去读取状态寄存器,看看对

应的位的值,也就是R/B#那一位,是1还是0,0的话,就表示,系统是busy,仍在”忙“(着读取数据),如果是1,就说系统活干完了,忙清

了,已经把整个页的数据都搬运到页缓存里去了,你可以接下来读取

你要的数据了。

(6)通过Nand Flash的控制器中的数据寄存器中写入你要读取多少个字节(by te)/字(word),然后就可以去Nand Flash的控制器的FIFO中,一点点读取你要的数据了。至此,整个Nand Flash的读操作就完成了。

3 Nand flash 坏块及ECC校验

Nand flash 中都会存在坏块,管理坏块是nand flash的重要工作,如果有文件系统,则文件系统会管理flash的坏块,如果没有则我们需要自己管理flash 的坏块。

3.1 bad block及其标记

在一个block里有1个或多个bit的状态不能稳定的编程,就没法使用它。如果一个block(128KByte)有一个Bit是坏的,那么整个block放弃使用。一般整个nand flash的最大坏块率为2%。

编程或擦除操作之后,重要的是读状态寄存器,因为它确认是否成功地完成了编程或擦除操作。如果操作失败,要把该区块标记为损坏且不能再使用。以前已编写进去的数据要从损坏的区块中搬出,转移到新的(好的)存储块之中。管理器件的软件负责映射坏块并由好的存储块取而代之。初始化软件仅仅需要扫描所有区块确定以确定哪个为坏,然后建一个坏块表供将来参考。

bad block有2种,一种是initial bad block,另一种是runtime bad block。所谓initial bad block就是出厂时就是坏块的

1) initial bad block:initial bad block的标记是保证坏块的前2个page 里的spare area里的第一个字节的内容不会是0xFF。已page为2K为例,如果前2个page其中一个的2048地址(从0开始计数,以后都是这种计数方式)上的数据(就是spare area的第一个字节)是0xFF,那么这个块不是initial bad block。值得注意的一点是bad block的标记会被erase掉成0xFF,所以有可能会误被认为是good block。所以在对每一个block earse之前一定要判断是不

是bad block,否则将bad block的标志erase了,以后使用的时候会误被当作good block,从而有可能带来数据损失。

2) runtime bad block:对于runtime的bad block,就是使用中出现的bad block,可以从erase或program后对成功与否的判断来决定这个block是否变成bad block,如果是的话则标记。一般标记的法则和initial bad block一样,在前两个page的spare area的第一个byte上写非0xFF值,

在msm7625平台linux侧nand flash驱动中标记坏块函数msm_nand_block_markbad;其方法就是把块的第一页全部写为0.

3.2 Nand flash ECC

NAND需要ECC以确保数据完整性。NAND闪存的每一个页面上都包括额外的存储空间,它就是64个字节的空闲区(每512字节的扇区有16字节)(以2K page flash为例)。该区能存储ECC代码及其逻辑到物理块映射之类的信息。ECC能在硬件或软件中执行,但是,硬件执行有明显的性能优势。在编程操作期间,ECC 单元根据扇区中存储的数据来计算误码校正代码。数据区的ECC代码然后被分别写入到各自的空闲区。当数据被读出时,ECC代码也被读出;运用反操作可以核查读出的数据是否正确。

能校正的错误的数量取决于所用算法的校正强度。在硬件或软件中包含ECC,就提供了强大的系统级解决方案。最简单的硬件实现方案是采用简单的汉明(Simple Hamming)码,但是,只能校正单一位错误。瑞德索罗门(Reed-Solomon)码提供更为强大的纠错,并被目前的控制器广为采用。此外,BCH码由于比瑞德索罗门方法的效率高,应用也日益普及。

4nand flash page layout

nand flash中包含有main区和spare(oob)区,main区存储的为我们需要的数据区。

而spare区存储的为ECC等数据。一般文件系统中会用到spare区域,比如把逻辑页与物理页的映射关系存储在spare区中。

Main区的ECC校验保存在SPARE区,SPARE空间比较大的NAND会对MAIN的ECC校验再进行ECC校验,相当于是spare区的一部分数据也进行了ECC,这部分存储位置因为很小,所以坏的可能性很小。

所以对应nand flash的校验可以main区数据校验,也可以main与spare 一起校验,还有一种就是不需要校验也就是raw方式操作。所以也有不同的page layout。

5 高通平台nand flash驱动

高通平台已对nand flash驱动做的比较完善,实际需要做的工作不多。相关驱

动详细代码在/drvier/flash下:

同统一对flash操作的接口在nand_flash.c中的flash_nand_ops中,

struct fs_device_data flash_nand_ops =

{

/* Device dispatch table - public interface */

flash_nand_device_name, /* Device Name */

flash_nand_maker_id, /* Maker Identification

*/

flash_nand_device_id, /* Device Identification

*/

flash_nand_block_count, /* Block Count */

flash_nand_block_size, /* Pages in block */

flash_nand_page_size, /* Page Size */

flash_nand_total_page_size, /* Total Page Size */

flash_nand_device_type, /* Device Type */

flash_nand_device_width, /* Device Width */

/* As these are device dependent these function ptrs are overwritten

* by the device probed */

flash_nand_op_not_initialized, /* Bad Block Check */

flash_nand_mark_block_bad, /* Mark Bad Block */

flash_nand_write_page, /* Write Page */

flash_nand_erase_block, /* Erase Block */

0, /* Read Pointer */

flash_nand_read_page, /* Read Page */

flash_nand_is_page_erased, /* Is Page Erased

*/

0, /* Partial Write */

0, /* Begin Erase Block */

. . .

. . .

. . .

};

Flash的操作函数flash_nand_ops为通用的一个flash 操作的接口。根据

flash的的不同会设置具体的flash操作函数。我们用到的对flash的底层操作

函数在flash_nand_ctlr_a_device_probe函数中定义。具体的操作函数在

flashi_nand_ctlr_d.c中

priv->ctlr.write_page =

flash_nand_ctlr_a_write_page;

priv->ctlr.read_page =

flash_nand_ctlr_a_read_page;

priv->ctlr.erase_block =

flash_nand_ctlr_a_erase_block;

priv->ctlr.is_page_erased =

flash_nand_ctlr_a_is_page_erased;

priv->ctlr.is_block_erased =

flash_nand_ctlr_a_is_block_erased;

priv->ctlr.mark_block_bad =

flash_nand_ctlr_a_mark_block_bad;

priv->ctlr.read_spare_bytes =

flash_nand_ctlr_a_read_spare_bytes;

priv->ctlr.set_ecc_state =

flash_nand_ctlr_a_set_ecc_state;

priv->ctlr.read_mpages =

flash_nand_ctlr_a_read_mpages;

priv->ctlr.read_spare_udata =

flash_nand_ctlr_a_read_spare_udata;

priv->ctlr.read_page_and_udata =

flash_nand_ctlr_a_read_page_and_udata;

priv->ctlr.mark_block_bad =

flash_nand_ctlr_a_mark_block_bad;

priv->ctlr.reconfigure = NULL;

我们做改动的主要是针对具体flash的型号参数信息,配置一些系统参数,

比如\AMSS\products\7625\secboot\cfg_data\ebi2目录下有ebi2.cfg文件,

该文件就是对bootloader配置flash的相关参数,;还有在

flash_nand_samsung.c的flash_device_config_data samsung_devices_array[]

数组中添加我们需要用的flash的信息等。

6 Linux 侧nand flash驱动

6.1 linux中 nand flash 的驱动结构

MSM7625中与nand flash底层相关的代码有msm_nand.c common.c nand_partitions.c。其中主要的底层访问接口在msm_nand.c中。

由于7225平台为双CPU,在linux侧也需要nand flash的驱动接口。

对应7225平台,flash的分区信息在arm9侧(高通amss侧),所以在linux 侧第一步需要获取系统的分区信息,获取那几个分区是给linux侧用的。

Nand flash 在linux中的device结构,如下:

msm_nand_data的相关分区信息会在系统启动时候调用static int get_nand_partitions(void)函数,来填充。该函数获取arm9侧的分区信息,已分区名字作为判断是否属于arm11侧分区。

后面的动作和标准linux设备驱动的结构差不多,首先probe等

对应的驱动函数为msm_nand.c中

msm_nand_probe :Probe函数中会读取flash的ID,判断我们用的ID是否支持,如果匹配不到对应的flash ID号,则返回出错。读取ID后会初始化相关flash控制器相关寄存器设置,并且关联底层flash操作函数,后把获取的分区信息,注册到系统。

Linux侧在对flash相关控制器设置时候,需要与高通侧的flash设置一致,否则会导致出现两边读写不匹配现象。

6.2 linux访问nand flash的接口

Nand flash注册成功后每个分区会有2个访问的设备节点,如/dev/mtd0 /dev/mtdblock0 表示一个物理分区。

1)字符设备形式访问分区。

以linux侧字符设备形式来访问,是通过/dev/mtd0 节点来访问的。

访问相关接口在mtdchar.c文件中,

这样范围nand flash 可以像访问其他字符设备一样的访问方式。可以对flash 读,写,擦除,坏块检查等操作。

由于以字符设备形式访问,没有管理坏块的机制,所以在已mtdchar接口做

flash操作时候就需要自己管理坏块。

高通中的升级操作,就是用到mtdchar 字符设备来对flash操作的。

2)以块设备来访问nand flash。

一般我们系统对nand flash的操作都是用块设备形式来访问的。都会挂载一个文件系统来对nand falsh操作。块设备访问的接口相关代码有mtdblock.c mtdblock_ro.c等。

Nand flash访问结构层次

挂载文件系统时候会对nand flash的分区进行扫描,坏块检查等动作。文件系统会管理坏块。例如我们用的是yaffs2文件系统。挂载命令如下:Muont –t yaffs2 /dev/mtdblock0 /mnt/flash

当挂载成功后我们就可以在/mnt/flash下直接进行cp拷贝文件,建立目录等操作。

管理nand flash的文件系统有很多,一般有jffs2, yaffs, cramfs, romfs, ramdisk, 等。常用的是jffs2,和yaffs.其中jffs2主要是应用与nor flash。Yaffs文件系统主要应用与nand flash。具体对文件系统的了解可以参考相关文件系统资料

NandFlash简介

NandFlash简介 分类:Linux2013-03-06 14:34 2945人阅读评论(0) 收藏举报 Flash Memory中文名字叫闪存,是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)的存储器。 从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的入硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了,比如大家常用的内存,不论是以前的SDRAM,DDR SDRAM,还是现在的DDR2,DDR3等,都是断电后,数据就没了。 FLASH的分类:功能特性分为两种:一种是NOR型闪存,以编码应用为主,其功能多与运算相关;另一种为NAND型闪存,主要功能是存储资料,如数码相机中所用的记忆卡。 NOR FLASH和NAND FLASH NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM 一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结结,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。 NOR的读速度比NAND稍快一些。 NAND的写入速度比NOR快很多。 NAND的4ms擦除速度远比NOR的5s快。 大多数写入操作需要先进行擦除操作。 NAND的擦除单元更小,相应的擦除电路更少 在NOR Flash中, 所有的存储区域都保证是完好的, 同时也拥有相同的耐久性。在硬模中专门制成了一个相当容量的扩展存储单元—他们被用来修补存储阵列中那些坏的部分,这也是为了保证生产出来的产品全部拥有完好的存储区域。为了增加产量和降低生产成本, NAND Flash 器件中存在一些随机bad block 。为了防止数据存储到这些坏的单元中, bad block 在IC烧录前必须先识别。在一些出版物中, 有人称bad block 为“bad block”, 也有人称bad block 为“invalid block”。其实他们拥有相同的含义, 指相同的东西。 从实际的应用上来说, NOR Flash与NAND Flash主要的区别在于接口。NOR Flash拥有完整的存取-映射访问接口, 它拥有专门的地址线和数据线, 类似与EPROM。然而在NAND Flash中没有专门的地址线。它发送指令,地址和数据都通过8/16位宽的总线(I/O接口)到内部的寄存器。 SLC/MLC基本原理

NAND Flash中文版资料

NAND Flash 存储器 和 使用ELNEC编程器烧录NAND Flash 技术应用文档 Summer 翻译整理 深圳市浦洛电子科技有限公司 August 2006

目录 一. 简介 ----------------------------------------------------------------------------------- 1 二. NAND Flash与NOR Flash的区别 -------------------------------------------- 1 三. NAND Flash存储器结构描叙 --------------------------------------------------- 4 四. 备用单元结构描叙 ---------------------------------------------------------------- 6 五. Skip Block method(跳过坏块方式) ------------------------------------------ 8 六. Reserved Block Area method(保留块区域方式)----------------------------- 9 七. Error Checking and Correction(错误检测和纠正)-------------------------- 10 八. 文件系统 ------------------------------------------------------------------------------10 九. 使用ELNEC系列编程器烧录NAND Flash -------------------------------- 10 十. Invalid Block Management drop-down menu -------------------------------- 12 十一. User Area Settings3 -------------------------------------------------------- 13 十二. Solid Area Settings --------------------------------------------------------- 15 十三. Quick Program Check-box ---------------------------------------------- 16 十四. Reserved Block Area Options --------------------------------------------17 十五. Spare Area Usage drop-down menu ------------------------------------18

linux下的fpga驱动

#ifndef _FPGA_H_ #define _FPGA_H_ #define INTMSK (0x4A000008) #define EINTMASK (0x560000A4) #define S3C2410_ENABLE_EINT8_23 (~(1<<5)) #define S3C2410_ENABLE_EINT18 (~(1<<18)) #undef PDEBUG /* undef it, just in case */ #define DEBUG //调试时添加此行程序,实际产品中需要注释掉 #ifdef DEBUG # define PDEBUG(fmt, args...) printk( KERN_WARNING "fpga: " fmt, ## args) #else # define PDEBUG(fmt, args...) /* not debugging: nothing */ #endif #define DEVICE_NAME "FPGA" #ifndef FPGA_NR_DEVS #define FPGA_NR_DEVS 1 /*设备数*/ #endif #define FPGAMEM_SIZE 1024/*FPGA每次产生中断可以读取到缓存的数据大小*/ #define FPGACMD_SIZE 3 /*FPGA每次产生中断可以读取到缓存的数据大小*/ #define FPGA_ADDR_START (0x08000000) //nGCS1地址 #define FPGA_ADDR_SIZE 0x30 //申请IO内存的大小 #define FPGA_ADDR_DATA 0x10 //FPGA数据寄存器偏移地址 #define FPGA_ADDR_CMD 0x14 //FPGA命令寄存器偏移地址 /* 定义幻数,定义一个字符,8位,用于检测是否是这类设备,ioctl-number.txt中给出了已经使用的幻数,定义的时候注意避免冲突*/ #define FPGA_IOC 'k' /* 定义命令,这里的命令都是unsigned int类型*/ #define FPGA_IOC_ALLON _IO(FPGA_IOC, 0) // #define FPGA_IOC_ALLDOWN _IO(FPGA_IOC, 1) // #define FPGA_IOC_SET _IOW(FPGA_IOC, 2, int) // #define FPGA_IOC_CLEAR _IOW(FPGA_IOC, 3, int)// #define FPGA_IOC_MAXNR 4 //定义命令的最大序列号

基于FPGA直流电动机驱动的设计

河南大学2014届本科毕业论文 论文题目 基于FPGA直流电动机驱动的设计 论文作者姓名:______________ 作者学号:___1003618004_______ 所在学院:民生学院 所学专业:_电子信息科学与技术_ 导师姓名职称:___ _______ 论文完成时间: 2014年04月24日 _ I

河南大学民生学院本科毕业论文 目录 摘要: ..................................................................................... 错误!未定义书签。 0 前言 (2) 1 绪论 (2) 1.1 课题的来源 (2) 1.2 课题研究的目的及意义 (3) 1.3 课题国内外研究现状 (4) 1.4 课题实质性展现 (4) 2直流电动机的概括 (4) 2.1 直流电动机的基本构成 (4) 2.2 直流电动机的工作原理 (5) 2.3 直流电动机的性能 (6) 3 直流电动机的控制及PWM(脉宽调制) (7) 3.1 控制器的控制电路 (7) 3.2 转子位置传感器 (8) 3.3 直流电动机的控制原理详解 (9) 3.4 直流电机转速控制与PWM脉宽调制 (11) 4 FPGA及其组成的控制器 (12) 4.1 FPGA芯片 (13) 4.2 VHDL硬件描述语言 (14) 4.3 运用FPGA来实现对直流电动机的控制 (15) 4.4 PWM(脉宽调制信号) (16) 4.5速度检测 (19) 5 结论 (20) 参考文献 (20) II

基于FPGA的直流电机驱动的设计 电子信息技术在如今的社会中已然达到迅猛发展阶段,国家也在大力加强电子商务领域的引导性投资,可见其在当今社会中的重要性。 电子技术的发展方向。可以说模拟电子技术是电子技术的根本,在调制解调,功率放大,信号放大、整流稳压等电路方面具有非常重要作用,移动通信等领域都不可或缺。电子技术的另外一个重要组成部分数字电子技术同等重要的,和模拟电子技术相对比,数字电子技术具有稳定性好,精度高,抗干扰性强的优势。也正是因为数字电子的这些优势使得它在一些领域的发展更胜于模拟电子,数字滤波器就是一个很好的证明。 数字电子技术目前也在向两个截然相反的方向发展,一是基于通用处理器的软件开发技术,如单片机、bps等技术,它们是在一个通用处理器的基础上结合少量的硬件电路设计来完成系统的硬件电路,而将主要精力集中在算法、数据处理等软件层次上的系统方法。另一个方向是基于CPLD/FPGA的可编程逻辑器件的系统开发,其特点是将算法、数据加工等工作全部融入系统的硬件设计当中,在“线与线的互联”当中完成对数据的加工。 单片机微处理器作为核心来实现直流电机的控制已然跟不上时代发展的需求。由此电机控制器也由模拟分立原件构成的电路向数模混合、全数字方向发展。此文章主要研究了FPGA芯片在直流电机控制器中的作用。文章详细的介绍了直流电机的类型、结构、工作原理、PWM调速原理和FPGA集成芯片。后对所需应用的硬件语言VHDL方面知识也进行了介绍。从而为论文的具体设计部分提供了理论基础。FPGA的电机控制中,最基本的作用有三:组合逻辑、计数器、状态机。 关键词: FPGA芯片;直流电机;硬件描述语言(VHDL);PWM;现场可编程门阵列 DC motor driven FPGA-based design Electronic information technology in today's society has already reached the rapid development stage, countries are vigorously strengthen the field of electronic commerce to guide investment, and its importance in today's society . Direction of development of electronic technology. It can be said analog electronics technology is the fundamental electronic technology, the modem, power amplification, signal amplification, rectification regulators and other aspects of the circuit has a very important role in areas such as mobile communications are indispensable. Another important part of the digital electronic technology as important as electronic technology, and the relative ratio of analog electronics, digital electronics technology has good stability, high accuracy, strong anti-interference advantages. It is also because of these advantages make it the development of digital electronics in some areas more than analog electronics, digital filter is a good proof. Digital electronic technology is also currently the two diametrically opposite 1

海力士NANDFlash选型

Q1’2011 DATABOOK Rev 0.1

NAND Flash –SLC / MLC / TLC AND Flash N NAND Flash SLC COMPONENT Product Tech Density Block Size Stack Vcc/Org Package Availability Remark HY27US08281A 90nm 128Mb 16KB Mono 3.3v/X8TSOP/USOP Now HY27US08561A 90nm 256Mb 16KB Mono 3.3v/X8TSOP/USOP/FBGA Now HY27US08121B 70nm 512Mb 16KB Mono 3.3v/X8TSOP/USOP/FBGA Now H27U518S2C 57nm 512Mb 16KB Mono 3.3v/X8TSOP Now HY27US081G1M 70nm 1Gb 16KB Mono 3.3v/X8USOP Now HY27UF081G2A 70nm 1Gb 128KB Mono 3.3v/X8TSOP/USOP/FBGA Now HY27US081G2A 70nm 1Gb 128KB Mono 1.8v/X8FBGA Now H27U1G8F2B 48nm 1Gb 128KB Mono 3.3v/X8TSOP,FBGA Now H27U1G8F2B 48nm 1Gb 128KB Mono 1.8v/X8FBGA Now H27U1G8F2CTR 32nm 1Gb 128KB Mono 1.8v/X8TSOP Q4 '11H27U1G8F2CFR 32nm 1Gb 128KB Mono 1.8v/X8FBGA Q4 '11HY27UF082G2B 57nm 2Gb 128KB Mono 3.3v/X8TSOP,FBGA, LGA Now H27U2G8F2C 41nm 2Gb 128KB Mono 3.3v/X8TSOP Now HY27UF084G2B 57nm 4Gb 128KB Mono 3.3v/X8TSOP Now H27U4G8F2D 41nm 4Gb 128KB Mono 3.3v/X8TSOP Now HY27UG088G5(D)B 57nm 8Gb 128KB DDP 3.3v/X8TSOP Now 2CE/Dual CH.H27U8G8G5D 41nm 8Gb 128KB Mono 3.3v/X8TSOP Now H27QBG8GDAIR-BCB 32nm 32Gb 512KB DDP 1.8v/x8VFBGA Now 2CE/Dual CH.H27QCG8HEAIR-BCB 32nm 64Gb 512KB QDP 1.8v/x8VFBGA Now 4CE/Dual CH.H27QDG8JEAJR-BCB 32nm 128Gb 512KB ODP 1.8v/x8 JFBGA Feb. '11 4CE/Dual CH.NAND Flash MLC COMPONENT Product Tech Density Block Size Stack Vcc/Org Package Availability Remark H27U8G8T2B 48nm 8Gb 512KB Mono 3.3v/X8TSOP Now H27UAG8T2M 48nm 16Gb 512KB(4KB Page)Mono 3.3v/X8TSOP/VLGA Now H27UAG8T2A 41nm 16Gb 512KB(4KB Page)Mono 3.3v/X8TSOP Now H27UBG8U5A 41nm 32Gb 512KB(4KB Page)DDP 3.3v/X8TSOP Now H27UBG8T2M 41nm 32Gb 512KB(4KB Page)Mono 3.3v/X8VLGA Now H27UBG8T2A 32nm 32Gb 2MB(8KB Page)SDP 3.3v/x8TSOP / VLGA Now H27UCG8VFA 41nm 64Gb 512KB(4KB Page)QDP 3.3v/X8TSOP Now H27UCG8UDM 41nm 64Gb 512KB(4KB Page)DDP 3.3v/X8VLGA Now Dual CH.H27UCG8U5(D)A 32nm 64Gb 2MB(8KB Page)DDP 3.3v/x8TSOP / VLGA Now Dual CH. LGA H27UCG8T2M 26nm 64Gb 2MB(8KB Page)SDP 3.3v/x8VLGA Now H27UDG8VEM 41nm 128Gb 512KB(4KB Page)QDP 3.3v/X8VLGA Now 4CE,Dual CH.H27UDG8V5(E)A 32nm 128Gb 2MB(8KB Page)QDP 3.3v/x8TSOP / VLGA Now 4CE,Dual CH.H27UEG8YEA 32nm 256Gb 2MB(8KB Page)ODP 3.3v/x8VLGA Now 4CE,Dual CH.H27UAG8T2B 32nm 16Gb 2MB(8KB Page)SDP 3.3v/x8TSOP Now H27UBG8T2B 26nm 32Gb 2MB(8KB Page)SDP 3.3v/x8TSOP Now Legacy H27UCG8U2B 26nm 64Gb 2MB(8KB Page)DDP 3.3v/x8TSOP Jan. '11Legacy H27UDG8V2B 26nm 128Gb 2MB(8KB Page)QDP 3.3v/x8FBGA-100Feb. '11HS(ONFi2.2)H27UEG8Y2B 26nm 256Gb 2MB(8KB Page) ODP 3.3v/x8 FBGA-100 Mar. '11 HS(ONFi2.2)NAND Flash TLC COMPONENT Product Tech Density Block Size Stack Vcc/Org Package Availability Remark H27UAG8M2M 41nm 16Gb 768KB (4KB page)SDP 3.3V/x8VLGA Now H27UBG8M2A 32nm 32Gb 1MB (4KB page) SDP 3.3V/x8 VLGA Now

NOR-FLASH驱动文档(SST39VF1601)

NOR-FLASH驱动文档(SST39VF1601)2012-03-30 00:57:33 NOR-FLASH是最早出现的Flash Memory,目前仍是多数供应商支持的技术架 构.NOR-FLASH在擦除和编程操作较少而直接执行代码的场合,尤其是纯代码存储的应用中广泛使用,但是由于NOR-FLASH只支持块擦除,其擦除和编程速度较慢,而块尺寸又较大,导致擦除和编程操作所花费的时间很长,所以在纯数据存储和文件存储的应用中显得力不从心. NOR-FLASH的特点是: 1. 程序和数据可存放在同一芯片上,FLASH芯片拥有独立的数据总线和地址总线,能快速随 机读取,并且允许系统直接从Flash中读取代码执行,而无需先将代码下载至RAM中再执行; 2. 可以单字节或单字读取,但不能单字节擦除,必须以部分或块为单位或对整片执行擦除操 作,在执行写操作之前,必需先根据需要对部分,块或整片进行擦除,然后才能写入数据。 以SST系列NOR-FLASH芯片为例介绍FLASH的使用方法及驱动. 首先,在驱动的头文件中,要根据芯片的具体情况和项目的要求作如下定义: 1. 定义操作的单位,如 typedef unsigned char BYTE; // BYTE is 8-bit in length typedef unsigned short int WORD; // WORD is 16-bit in length typedef unsigned long int Uint32; // Uint32 is 32-bit in length 在这里地址多是32位的,芯片写操作的最小数据单位为WORD,定义为16位,芯片读操作的最小数据单位是BYTE,定义为8位. 2. 因为芯片分为16位和32位的,所以对芯片的命令操作也分为16位操作和32位操作(命令 操作在介绍具体的读写过程中将详细介绍). #ifdef GE01 /*宏NorFlash_32Bit,若定义了为32位NorFlash,否则为16位NorFlash*/ #define NorFlash_32Bit #endif 3. 根据芯片的情况,定义部分(段)和块的大小. #define SECTOR_SIZE 2048 // Must be 2048 words for 39VF160X #define BLOCK_SIZE 32768 // Must be 32K words for 39VF160X

NandFlash的基础知识

NAND FLASH的基础知识 NAND Flash 的数据是以bit 的方式保存在memory cell,一般来说,一个cell 中只能存储一个bit。这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device 的位宽。这些Line 会再组成Page,(Nand Flash 有多种结构,我使用的Nand Flash 是K9F1208,下面内容针对三星的K9F1208U0M),每页528Byte,每32 个page 形成一个Block, Sizeof(block)=16kByte = 32 page = 32 * 528 byte Numberof(block)=64Mbyte/16kbyte=4096 1page=528byte=512byte(Main Area)+16byte(Spare Area) Nand flash 以页为单位读写数据,而以块为单位擦除数据。按照这样的组织方式可以形成所谓的三类地址: --Block Address -- Page Address --Column Address 对于NAND Flash 来讲,地址和命令只能在I/O[7:0]上传递,数据宽度是8 位。 512byte需要9bit来表示,对于528byte系列的NAND,这512byte被分成1st half和2nd half,各自的访问由地址指针命令来选择,A[7:0]就是所谓的column address。32 个page 需要5bit 来表示,占用A[13:9],即该page 在块内的相对地址。Block的地址是由A14 以上的bit 来表示,例如512Mbit的NAND,共4096block,因此,需要12 个bit 来表示,即A[25:14],如果是1Gbit 的528byte/page的NAND Flash,则block address用A[26:24]表示。而page address就是blcok address|page address in block NAND Flash 的地址表示为:Block Address|Page Address in block|halfpage pointer|Column Address 地址传送顺序是Column Address,Page Address,Block Address。由于地址只能在I/O[7:0]上传递,因此,必须采用移位的方式进行。例如,对于512Mbit x8 的NAND flash,地址范围是0~0x3FF_FFFF,只要是这个范围内的数值表示的地址都是有效的。以NAND_ADDR 为例: ◆第1 步是传递column address,就是NAND_ADDR[7:0],不需移位即可传递到I/O[7:0] 上,而halfpage pointer 即bit8 是由操作指令决定的,即指令决定在哪个halfpage 上进行读写。而真正的bit8 的值是don't care 的。 ◆第2 步就是将NAND_ADDR 右移9 位,将NAND_ADDR[16:9]传到I/O[7:0]上 ◆第3 步将NAND_ADDR[24:17]放到I/O 上 ◆第4 步需要将NAND_ADDR[25]放到I/O 上因此,整个地址传递过程需要4 步才能 完成,即4-step addressing。 如果NAND Flash 的容量是256Mbit 以下,那么,block adress 最高位只到bit24,因此寻址只需要3 步。下面,就x16 的NAND flash 器件稍微进行一下说明。由于一个page 的main area 的容量为256word,仍相当于512byte。但是,这个时候没有所谓的1st halfpage 和2nd halfpage 之分了,所以,bit8就变得没有意义了,也就是这个时候bit8 完全不用管,地址传递仍然和x8 器件相同。除了,这一点之外,x16 的NAND使用方法和x8 的使用方法完全相同。 正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块nand flash也分为若干block,每个block分为如干page。一般而言,block、page之间的关系随着芯片的不同而不同,典型的分配是这样的

浅谈NorFlash的原理及其应用

浅谈NorFlash的原理及其应用 NOR Flash NOR Flash是现在市场上两种主要的非易失闪存技术之一。Intel 于1988年首先开发出NOR Flash 技术,彻底改变了原先由EPROM(Erasable Programmable Read-Only-Memory电可编程序只读存储器)和EEPROM(电可擦只读存储器Electrically Erasable Programmable Read - Only Memory)一统天下的局面。紧接着,1989年,东芝公司发表了NAND Flash 结构,强调降低每比特的成本,有更高的性能,并且像磁盘一样可以通过接口轻松升级。NOR Flash 的特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。NOR 的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响到它的性能。NAND的结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于Flash的管理需要特殊的系统接口。性能比较 flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash 器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。执行擦除时块尺寸的不同进一步拉大了NOR和NAND之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。 l 、NOR的读速度比NAND稍快一些。 2、NAND的写入速度比NOR快很多。 3 、NAND的4ms擦除速度远比NOR的5s快。 4 、大多数写入操作需要先进行擦除操作。 5 、NAND的擦除单元更小,相应的擦除电路更少。此外,NAND 的实际应用方式要比NOR复杂的多。NOR可以直接使用,并可在上面直接运行代码;而NAND需要I/O接口,因此使用时需要驱动程序。不过当今流行的操作系统对NAND结构的Flash都有支持。此外,Linux内核也提供了对NAND结构的Flash的支持。详解 NOR

Nand Flash存储结构及控制方法

Nand Flash存储结构及控制方法(K9F1G08) 2011-02-26 15:05:59| 分类:默认分类 | 标签: mini2440nandflash k9f1g08 |字号订阅 一、NAND Flash介绍和NAND Flash控制器的使用 NAND Flash在嵌入式系统中的作用,相当于PC上的硬盘 常见的Flash有NOR Flash和NAND Flash,NOR Flash上进行读取的效率非常高,但是擦除和写操作的效率很低,容量一般比较小;NAND Flash进行擦除和写操作的效率更高,并且容量更大。一般NOR Flash用于存储程序,NAND Flash 用于存储数据。 1)NAND Flash的物理结构 笔者用的开发板上NAND Flash型号是K9F1G08,大小为128M,下图为它的封装和外部引脚 I/O0-I/O7 数据输入/输出 CLE 命令锁存使能 ALE 地址锁存使能 CE 芯片使能 RE 读使能 WE 写使能 WP 写保护 R/B 就绪/忙输出信号 Vcc 电源 Vss 地 N.C 不接 K9F1G08功能结构图如下

K9F1G08内部结构有下面一些功能部件 ①X-Buffers Latches & Decoders:用于行地址 ②Y-Buffers Latches & Decoders:用于列地址 ③Command Register:用于命令字 ④Control Logic & High Voltage Generator:控制逻辑及产生Flash所需高压 ⑤Nand Flash Array:存储部件 ⑥Data Register & S/A:数据寄存器,读、写页时,数据存放此寄存器 ⑦Y-Gating ⑧I/O Buffers & Latches ⑨Global Buffers ⑩Output Driver

总结NAND FLASH控制器的操作

NAND FLASH相对于NOR FLASH而言,其容量大,价格低廉,读写速度都比较快,因而得到广泛应用。NOR FLASH的特点是XIP,可直接执行应用程序, 1~4MB时应用具有很高的成本效益。但是其写入和擦除的速度很低直接影响了其性能。 NAND FLASH不能直接执行程序,用于存储数据。在嵌入式ARM应用中,存储在其中的数据通常是读取到SDROM中执行。因为NAND FLASH主要接口包括 几个I/O口,对其中的数据都是串行访问,无法实现随机访问,故而没有执行程序。 NAND FLASH接口电路是通过NAND FLAH控制器与ARM处理器相接的,许多ARM处理器都提供NAND FLASH控制器,为使用NAND FLASH带来巨大方便。 K9F2G08U0B是三星公司的一款NAND FLASH产品。 K9F2G08U0B包含8个I/O,Vss、Vcc、以及控制端口(CLE、ALE、CE、RE、WE、WP、R/B)。其存储结构分块。 共2K 块 每块大小16 页 每页大小2K + 64BYTE 即容量=块数×页数×每页大小=2K×16×(2K + 64BYTE)=256M BYTE + 8M BYTE NAND FLASH控制器提供了OM[1:0]、NCON、GPG13、GPG14、GPG15共5个信号来选择NAND FLASH启动。 OM[1:0]=0b00时,选择从NAND FLASH启动。 NCON:NAND FLASH类型选择信号。 GPG13:NAND FLASH页容量选择信号。 GPG14:NAND FLASH地址周期选择信号。 GPG15:NAND FLASH接口线宽选择。0:8bit总线宽度;1:16bit总线宽度。 访问NAND FLASH 1)发生命令:读、写、还是擦除 2)发生地址:选择哪一页进行上述操作 3)发生数据:需要检测NAND FLASH内部忙状态 NAND FLASH支持的命令: #define CMD_READ1 0x00 //页读命令周期1 #define CMD_READ2 0x30 //页读命令周期2 #define CMD_READID 0x90 //读ID 命令 #define CMD_WRITE1 0x80 //页写命令周期1 #define CMD_WRITE2 0x10 //页写命令周期2 #define CMD_ERASE1 0x60 //块擦除命令周期1 #define CMD_ERASE2 0xd0 //块擦除命令周期2 #define CMD_STATUS 0x70 //读状态命令 #define CMD_RESET 0xff //复位 #define CMD_RANDOMREAD1 0x05 //随意读命令周期1

Xilinx FPGA PCIE Linux驱动程序

// (c) Copyright 2009 聳2009 Xilinx, Inc. All rights reserved. // // This file contains confidential and proprietary information // of Xilinx, Inc. and is protected under U.S. and // international copyright and other intellectual property // laws. // // DISCLAIMER // This disclaimer is not a license and does not grant any // rights to the materials distributed herewith. Except as // otherwise provided in a valid license issued to you by // Xilinx, and to the maximum extent permitted by applicable // law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND // WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES // AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING // BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- // INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and // (2) Xilinx shall not be liable (whether in contract or tort, // including negligence, or under any other theory of // liability) for any loss or damage of any kind or nature // related to, arising under or in connection with these // materials, including for any direct, or any indirect, // special, incidental, or consequential loss or damage // (including loss of data, profits, goodwill, or any type of // loss or damage suffered as a result of any action brought // by a third party) even if such damage or loss was // reasonably foreseeable or Xilinx had been advised of the // possibility of the same. // // CRITICAL APPLICATIONS // Xilinx products are not designed or intended to be fail- // safe, or for use in any application requiring fail-safe // performance, such as life-support or safety devices or // systems, Class III medical devices, nuclear facilities, // applications related to the deployment of airbags, or any // other applications that could lead to death, personal // injury, or severe property or environmental damage // (individually and collectively, "Critical // Applications"). Customer assumes the sole risk and // liability of any use of Xilinx products in Critical // Applications, subject only to applicable laws and // regulations governing limitations on product liability. // // THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS // PART OF THIS FILE AT ALL TIMES. //-------------------------------------------------------------------------------- //-- Filename: xbmd.c //-- //-- Description: XBMD device driver. //-- //-- XBMD is an example Red Hat device driver which exercises XBMD design //-- Device driver has been tested on Red Hat Fedora FC9 2.6.15. //--------------------------------------------------------------------------------

NANDFLASH 常见问题汇总

NAND flash常见问题汇总 掉程序(这里专指使用NAND flash的主板掉程序),这是一个让工程师浑身发毛的问题,特别是用着用着程序就没有了,往往这个时候很多工程师都无法下手,问题出现的时候你可能根本不在旁边,无法看到问题现象,而且通过测量信号也很难发现问题的原因,这个时候很多工程师可能会采用更换主板器件的方式,用排除法来定位问题,基本上换一个NAND flash就可以解决问题了。这个时候很多工程师可能就会表示NAND flash有问题,需要换厂商,换品牌。但其实还可以更加深入的去了解问题的原因,这里我总结一下我遇到过得NAND flash掉程序的情况及原因。 1.电源电压不稳导致的NAND flash程序错误 很多时候,产品在客户手中出现了问题,工程师把产品拿回来,重新烧录程序产品可以上电启动,反复测试并不会出现掉程序的情况。如果这种产品是带有电池的产品,就可以考虑一下是否在客户实际使用中是用电池的情况,当电池的电量比较低,或者在极端情况下,程序对于电池电量的检测阈值较低,这个时候主控就有可能刚刚可以启动,但是很快电量不够,NAND flash内的程序乱掉,从而无法正常启动。 解决方法可以在程序中加入或者提高电池电量检测的阈值,保证所有芯片在这个阈值上均可以正常工作。 2.DRAM工作状态不正常导致的NAND flash程序错误 主控, DRAM和NAND flash基本构成了一个产品的最小系统。当系统中的任何一环出现问题,整个系统就可能出现问题。但是当DRAM出现问题时,有可能反映出来的是NAND flash 出错,掉程序或者查明NAND flash坏块过多。对于这种情况,处理起来就会复杂一些。如果直接重新烧录程序,系统又能正常工作,则说明之前存储在NAND flash中的程序确实乱了,但是NAND flash的功能正常,特别是SLC规格的1bit ECC 的NAND flash,出错概率非常小。因为对于NAND flash来说,只有当写数据或者擦除数据时,数据可能产生坏块,当程序只是读取的状态时,由于不涉及电荷的改变,所以NAND flash一般不会出现问题。但从程序的调试端口读到NAND flash坏块很多时,看是否有更深入的调试工具,例如JTAG等调试工具,可以深入调试NAND flash的情况。有些时候,因为一些程序误操作,导致将原本good block的标志位标记成了bad block。用过JTAG调试工具可以修改标志位,并且重新打标,重新烧录一遍程序,有可能主板又能重新启动了。 3.坏块管理未做好 因为NAND flash都面临着可能出现坏块的问题,所以必须应该对于坏块进行管理,在规格书中可以看到,坏块产生的三种情况,在编程的时候,在擦出的时候,在读取的时候。对于这几种情况下,程序应该怎么操作,规格书中也有流程图来说明,在读取和擦除中,如果出现失败情况,就需要重新坏一个块进行目标块的转移,并且对于当前块进行标识,在坏块表中进行更新。通过对于坏块表的维护,达到程序避免写入坏块中的情况。在读取程序时,也需要对于ECC进行校验,保证读取的程度是真实可靠的。但是很多工程师可能由于对于坏块管理做的不够仔细,导致产品在实际使用中,会出现掉程序的问题。工程师也应该从程序方面着手,分析一下程序对于坏块部分管理是否完善。 从上面三种类型只是部分说明了关于掉程序这个问题的一些原因。特别是对于1bit ECC 的SLC NAND flash大部分适用,工程师们可以进行参考。

相关主题
文本预览
相关文档 最新文档