发明名称 对Flash存储器的数据存储结构进行数据操作的方法
摘要 本发明涉及Flash存储器领域。本发明的Flash存储器的数据存储结构的每个页面的存储单位内包括存储数据的数据存储空间和一备用空间。所述的备用空间的被定义为以下几部分:文件名称记录区、页面名称记录区、页面存储状态记录区、页面状态记录区、块擦除次数记录区、数据校验码记录区。对如上所述的Flash存储器的数据存储结构进行数据操作方法,具体是:包括系统初始化步骤和数据操作步骤,该数据操作步骤包括:存储空间的分配和释放操作、抗掉电保护操作、均衡磨损操作、坏块处理、数据校验操作。本发明优化Flash存储器的数据存储结构及其数据操作的控制方式,在读写操作中对Flash存储进行均衡处理,及进行抗掉电处理和ECC处理机制设计,避免了已有Flash存在的缺陷。
申请公布号 CN102081577B 申请公布日期 2013.02.13
申请号 CN201110008672.3 申请日期 2011.01.12
申请人 厦门雅迅网络股份有限公司 发明人 庄宗辉;黄希煌;钟可华;陈从华;潘胜
分类号 G06F12/06(2006.01)I;G06F11/08(2006.01)I 主分类号 G06F12/06(2006.01)I
代理机构 厦门市诚得知识产权代理事务所(普通合伙) 35209 代理人 黄典湘
主权项 对Flash存储器的数据存储结构进行数据操作的方法,其特征在于:所述的Flash存储器的数据存储结构是每个页面的存储单位内包括存储数据的数据存储空间和一备用空间,所述的备用空间的被定义为以下几部分:文件名称记录区,用于存放文件名称数据;页面名称记录区,用于存放页面名称数据;页面存储状态记录区,用于存放页面存储状态位数据和块存储状态位数据;页面状态记录区,用于存放页面系列号数据和页面数据长度数据;块擦除次数记录区,用于存放块的擦除次数数据;数据校验码记录区,用于存放数据校验码数据;所述的数据操作方法包括系统初始化步骤和数据操作步骤;其中,系统初始化步骤包括:步骤a:获取Flash存储器的各种硬件参数;步骤b:遍历扫描Flash存储器的每个页面的存储单位内的备份空间,通过读取页面存储状态记录区内的块存储状态位数据判断该页面是不是坏块,如果是坏块,再次进行坏块判定确认,如果仍是坏块,则标识此块为坏块后停止对本页面所属块中其他页面的扫描,进入到下一个块的页面的扫描;步骤c:对于非坏块,通过读取页面状态记录区的页面数据长度数据判断该块中的所有页面是否均为干净页面,如果是,则将此块挂载到空闲块链表上;步骤d:对于非干净页面,通过读取页面存储状态记录区内的页面存储状态位数据来判断当前数据是否有效,如果一个块中的所有页面的数据都是无效数据,表示这个块可以擦除,将其挂载到待擦除链表上;步骤e:对于具有有效数据的页面,通过读取文件名称记录区内的文件名称 数据判断该页面所属的文件的文件链表是否存在于内存,若不存在,则用此文件名称创建一新文件链表;步骤f:对于文件链表已经存在的页面,通过读取页面名称记录区的页面名称数据来判断该页面是否在相同文件名称的文件链表上存在页面名称节点,若不存在,挂载该页面;步骤g:对于页面名称节点已存在于文件链表的页面,通过读取页面状态记录区的页面系列号数据判断其系列号是否最大,若不是最大,将该页面的页面存储状态位数据标识为无效;步骤h:对于页面系列号为最大的页面,挂载该页面于相同文件名称的文件链表上;步骤i:通过空闲块链表和文件链表,统计出当前空闲块个数信息和文件个数信息;步骤j:将Flash存储器的每个页面的存储单位内的备份空间中存储的信息按一定的数据结构读到内存,挂载到系统组织信息的双向链表上,并且驻留在内存中,最后建立系统的数据结构;其中,数据操作步骤包括:存储空间的分配和释放操作和/或抗掉电保护操作和/或均衡磨损操作和/或坏块处理和/或数据校验操作;所述的存储空间的分配和释放操作具体是:新的数据文件创建时,指定或由系统按顺序产生一个文件名称,从当前的空闲块链表头获取,且分配一个干净的空闲块,同一个数据文件各个页面的备份空间中存放的文件名称相同,页面名称按顺序从0开始递增;数据写入时,新页面从当前具有相同文件名称且页面存储状态记录区的页面 存储状态位标识为未使用的页面开始分配,如果当前块已经写满用完,则页面存储状态记录区的块存储状态位标志为满,重新分配一个新的干净的空闲块,且保持其的文件名称不变;删除一个数据文件时,系统会根据文件名称找到所有相同文件名称的块,确认这些块中当前没有正在执行读写操作后,按顺序执行块擦除动作,然后逐个挂回空闲块链表上;所述的抗掉电保护操作具体是:每个页面的页面系列号数据第一次写时都为0,以后每次写具有同一文件名称和页面名称的页面的时候都加1;所述的均衡磨损操作具体是:每个页面的块擦除次数记录区内的块的擦除次数数据第一次操作时都为0,以后每次数据操作的时候都加1,系统根据块的擦除次数来决定该擦除之后的块在块空闲链表上的前后顺序,擦除次数较少块在块空闲链表上排序靠前,同样擦除次数的块以其挂载于块空闲链表的先后顺序排序;所述的坏块处理具体是:系统对每个页面写完数据后马上读取该数据并与数据缓存区中的写入前数据进行比较,如果发现不完全匹配,则表示此页面所在的块可能出现坏块,先将该块当前存储的有效数据转移到另外一个块上,待转移成功,再将可能的坏块进行重新擦除后写入待写数据,如果依然不正常,则明确将此块标志为坏块,系统在后续的运行中,只要读到这个块的坏块的块存储状态位数据,便自动跳转到下一个块;所述的数据校验操作具体是:系统在数据每次在写入之前会先通过ECC校验算法算出存储数据的校验码,然后同时将校验码写入页面的备份空间,读取数据时,将读取的数据先计算出ECC校验值,再将得出的ECC校验值同数据校验码记录区的数据校验码数据进行比较,如果不一致,表明出现了错误, 最后调用ECC修正算法,进行数据补救。
地址 361008 福建省厦门市软件园二期观日路46号