增压泵厂家
免费服务热线

Free service

hotline

010-00000000
增压泵厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

NAND Flash的驱动程序设计 免费猫

发布时间:2020-02-17 12:43:49 阅读: 来源:增压泵厂家

NAND Flash的驱动程序设计

参数说明: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.3NAND 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;}

3ECC校检原理与实现

由于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校检数据组成

老马识途的故事

罗威纳犬的养殖技术

木牛流马故事

哈密旗袍