NAND Flash的驱动程序设计方案
2.2 NAND Flash Program
功能:对页进行编程命令, 用于写操作。
命令代码:首先写入00h(A区)/01h(B区)/05h(C区), 表示写入那个区; 再写入80h开始编程模式(写入模式),接下来写入地址和数据; 最后写入10h表示编程结束。图3为程序流程图。
图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(blockPage0xff);/* 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(blockPage0xff);
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所列。
表1 校检数据组成
首先介绍ECC的列校检。ECC的列校验和生成规则如图4所示,“^”表示“位异或”操作。由于篇幅关系,行校检不作介绍,感兴趣的读者可以参考芯片datasheet,在三星公司网站可以免费下载。
图4 列校验和生成规则
数学表达式为:
当向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 writ
模拟电路 模拟芯片 德州仪器 放大器 ADI 模拟电子 相关文章:
- 12位串行A/D转换器MAX187的应用(10-06)
- AGC中频放大器设计(下)(10-07)
- 低功耗、3V工作电压、精度0.05% 的A/D变换器(10-09)
- PIC16C5X单片机睡眠状态的键唤醒方法(11-16)
- 用简化方法对高可用性系统中的电源进行数字化管理(10-02)
- 利用GM6801实现智能快速充电器设计(11-20)