zoukankan      html  css  js  c++  java
  • NAND Flash大容量存储器K9F1G08U的坏块管理方法

    转: http://www.360doc.com/content/11/0915/10/7715138_148381804.shtml

    在进行数据存储的时候,我们需要保证数据的完整性,而NAND Flash大容量存储器K9F1G08U芯片由于工艺上问题,不可避免就会出现有的Block中就是某个位或某些位是块的,就是用块擦除命令也是无法擦除的,K9F1G08U数据手册也讲了坏块是存在的,对于K9F1G08U最多有20个坏块。如果数据存储到这个坏块中,就无法保证该数据存储的完整性。对于坏块的管理K9F1G08U数据手册也有它的方法去处理该坏块的方法,我根据实际经验总结出自己的一种方法。首先我们要定义一个坏块管理表:unsigned char BadBlockTable[128],此数组可以存储1024个Block状态,即每一个字节存储8个Block状态。我们要存储一批数据到NAND Flash中去某个Block时,先执行Block擦除操作,然后分析该Block的1st Page和2st Page中的每个位是否全是FFH,如果全是FFH,则在BadBlockTable数组当前Block对应的字节位给置0,否则置1。如果是1表示当前的块是不能存储数据的,这时需要更换下一个Block来存储这些数据,这样我们重复上面的动作分析再进行分析是否可以存储数据,该块能存储就存储到该块中去。

        具体实现的算法程序如下:

    Flag=TRUE;
    while(TRUE==Flag)
    {                       

    Erase_K9F1G08U_Block(K9F1G08U.HighAddress,K9F1G08U.LowAddress);               Flag=Check_K9F1G08U_Block(K9F1G08U.HighAddress/64);                   if(TRUE==Flag)//is invalid block
    {                         

    BadBlockTable[K9F1G08U.HighAddress/512]|=

    (1<<(K9F1G08U.HighAddress%8));

      K9F1G08U.HighAddress+=64;//Point to Next Block
    }
    else// is valid block ,record to BadBlockTable
      {               

    BadBlockTable[K9F1G08U.HighAddress/512]&=

    ~(1<<(K9F1G08U.HighAddress%8));
      }

    }
    for(i=0;i<sizeof(BadBlockTable);i++)                    

    Write_RAM(RAM_BANK_0,K9F1G08U_BAD_BLOCK+i,BadBlockTable[i]);

  • 相关阅读:
    运行 npm run dev 不能自动打开浏览器
    npm run dev 报错:Strings must use singlequote 的解决方法
    new和this
    new Object()、Object.create()、{}三种对象创建方式的区别
    Python 详解修饰器 附带 js使用修饰器
    Python
    react项目使用axios和Charles模拟数据接口
    react切换隐藏或显示状态(包含过渡动画)
    react里使用ref的几种方法
    js对象转数组
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3324521.html
Copyright © 2011-2022 走看看