【底软】NANDFlash与NORFLASH

来源:互联网 发布:淘宝代销赚钱吗 编辑:程序博客网 时间:2024/06/13 23:02


1、FLASH器件一共有3种操作:读取、擦除和编程。对于FLASH而言,写0与写1是两个不同的操作,写0称为编程,而写1称为擦除。

2、FLASH的可靠性主要表现在两个方面:(1)耐久性;(2)电荷保持特性;

3、NANDFLASH的两大优势是低成本和高性能,但其弱点是可靠性,影响NAND可靠性的因素有两点:

(1)位翻转;NAND能够比较可靠地保存信息,但是在读取操作时存在一定机率出现位翻转现象,机率不是很高,但比NORFLASH高;

(2)坏块;NAND要保证低成本这个优势,就无法保证出厂时百分之百都是有效块,一般允许有2%坏块,因此需要对NAND器件进行扫描,进行坏块标记;

4、NAND可靠性可以通过三点进行保证:

(1)磨损平衡;避免将文件持续写到同一个block中,使不同block的磨损率相当,从而延长器件寿命;

(2)ECC校验;NAND因为位翻转问题,会较高概率出现单bit错误,通过ECC算法校验可以使出错概率降低好几个数量级;

(3)块坏管理技术;NAND因有坏块存在,必须对坏块进行管理;

5、NAND与NOR差异比较:

(1)NOR读取速度(约35ns)比NAND(约50ns)稍快一些;

(2)NOR结构的FLASH可以随机读取,而NAND结构的FLASH只能按page或block连续读取;

(3)NAND写入速度要比NOR快,典型的要快10倍;

(4)NAND擦除速度(毫秒级)比NOR(秒级)快;

(5)NOR可以片内执行程序,适合存储程序代码; NAND可以做到大容量,适合存储大量数据;

(6)NAND无法做到百分之百都是有效块,必须进行块坏管理;

6、NAND操作特点:擦除以block为单位;读取和写入以page为单位;

7、NAND第一个page包括数据区和空间区,空闲区通常用于ECC校验码、耗损均衡和其它信息。ECC能够在硬件或软件中执行,显然在硬件上可以提高性能,在写入数据时,产生的ECC值存储在Spare区,读取数据时,计算的ECC校验码会与Spare区的ECC校验码进行对比,以判断数据是否正确。编程和擦除操作后,需要读取状态寄存器,确认是否完成操作,如果操作失败,标记为坏块,坏块标记位于Spare区的第一个位置,若Spare区第一个位置的值不是0xFF,则该块为坏块。

8、一个block只要有一个page操作失败,则该page的Spare区将标记为坏块,表明该block为Bad block。

9、一个NANDC控制器,一般集成在CPU中,提供硬件ECC功能,只需要将NANDC与外接NAND芯片连接即可;

10、NandFlash芯片手册可到各半导体公司官网下载,比如镁光Micro:http://www.micron.com/ ;飞索Spansion:http://www.spansion.com/Pages/Default.aspx

11、NandFlash驱动的接口函数一般如下:

#define UINT32unsigned int#define UINT8unsigned char/*定义驱动各接口函数类型*/typedef UINT32 (* NAND_DRIVER_FUN_INIT)(void);typedef UINT32 (* NAND_DRIVER_FUN_ERASE)(UINT32 blockNum);typedef UINT32 (* NAND_DRIVER_FUN_WRITE)(UINT32 chunkNum,  UINT32 offsetInChunk,  UINT32 length,  UINT8* pData);typedef UINT32 (* NAND_DRIVER_FUN_READ)(UINT32 chunkNum, UINT32 offsetInChunk, UINT32 length, UINT8* pData);typedef UINT32 (* NAND_DRIVER_FUN_WRITE_WITH_ECC)(UINT32 chunkNum,   UINT32 offsetInChunk,   UINT32 length,   UINT8* pData);typedef UINT32 (* NAND_DRIVER_FUN_READ_WITH_ECC)(UINT32 chunkNum,  UINT32 offsetInChunk,  UINT32 length,  UINT8* pData,  UINT32 *pBitFlip);typedef UINT32 (* NAND_DRIVER_FUN_READ_SPARE)(UINT32 chunkNum,   UINT32 offsetInChunk,   UINT32 length,   UINT8* pData);typedef struct NAND_FLASH_DRIVER{NAND_DRIVER_FUN_INITNandFlashInit;/*NandFlash初始化接口函数*/NAND_DRIVER_FUN_ERASENandFlashErase;/*NandFlash擦除接口函数*/NAND_DRIVER_FUN_WRITENandFlashWrite;/*NandFlash写接口函数*/NAND_DRIVER_FUN_READNandFlashRead;/*NandFlash读接口函数*/NAND_DRIVER_FUN_WRITE_WITH_ECCNandFlashWriteWithEcc;/*NandFlash带ECC写接口函数*/NAND_DRIVER_FUN_READ_WITH_ECCNandFlashReadWithEcc;/*NandFlash带ECC读接口函数*/NAND_DRIVER_FUN_READ_SPARENandFlashReadSpare;/*NandFlash读空闲区接口函数*/}NAND_DRIVER;

12、对于Norflash,操作有Read、Write、Erase三种:

(1)Read;一般Norflash的读操作都不需要写命令字,直接根据地址读取即可;

(2)Write;Write操作其实可以分为两种:Write buffer和Program,Write buffer需要写命令字将数据写到buffer中,再写命令字把buffer中的数据写到Norflash中。Write buffer可以一次性写入32字节,但不能跨块执行;而Program则直接写命令字把数据写到Norflash中。

(3)Erase;Erase操作也可以分为两种:Chip Erase和Section Erase,Chip Erase可以擦除任何一个没有锁定的区域,Section Erase则是按块进行擦除。



0 0
原创粉丝点击