一种安全烧写闪存的方法及数据写入方法

文档序号:6782327阅读:299来源:国知局
专利名称:一种安全烧写闪存的方法及数据写入方法
技术领域
本发明涉及一种内存烧写方法,尤其涉及一种安全烧写闪存的方法及数 据写入方法。
背景技术
Flash (闪存)是嵌入式系统中常用的存储设备, 一般用来保存掉电不 丟失的数据,例如bootloader(引导加载程序)、kernel image (内核镜像)、 filesystem (文件系统)等。 一般的NAND Flash (与非闪存)在其最前面的 启动块中不会有坏块的,所以在此启动块空间可以保存一些不能发生错误的 数据;而其余的部分,有可能会产生一些坏块,这跟生产厂家的生产质量有 关。
烧写NAND Flash的方法^艮多,市场上有很多种NAND Flash烧写器。 图1所示的烧写方式,是指定一个地址,将数据整个烧写进去,并不考虑 Flash内部是否有坏块的情况。如果Flash内部有坏块,将会导致写入的数据 不完整,如果写入的是kemel image,那么在系统启动时,系统就无法正常 运行。
如图2所示,另外一种烧写方法是用JTAG (Joint Test Action Group, 联合测试行动组)口烧写Flash的时候将重要的数据(例如kernel image) 分别烧录在两个地址下,相当于做了一个备份,如果一块出了问题,则从备 份中的对应的块中读取数据。
上述方法中,很可能出现将数据保存在Flash的坏块上的情况,如果保 存的是操作系统镜像,则会导致整个系统不能运行
发明内容
本发明要解决的技术问题是提供一种安全烧写闪存的方法,保证数据都 写入闪存中完好的数据块。
为了解决上述问题,本发明提供了一种安全烧写闪存的方法,包括将
待写入数据写入闪存中时,每次将数据写入闪存的一存储单元后,判断此存 储单元是否无坏块,如果无坏块,确定此存储单元为有效存储单元,否则,
跳过此存储单元在下一个存储单元重新写入数据;将标识闪存中有效存储单 元位置的信息做为索引,并将所述索引写入闪存的启动块中。
进一步地,将数据写入所述存储单元后,根据系统设定规则计算写入此 存储单元的数据所对应的冗余校验数据,并将写入此存储单元的数据读出, 根据所述规则计算读出数据对应的冗余校验数据,判断两次计算得到的冗余 数据是否相同,如果相同,确定此存储单元无坏块,否则,确定此存储单元 有坏块。
进一步地,将数据写入闪存后,系统启动时或启动后,根据所述索引中 有效存储单元位置的信息将各个有效存储单元中的数据读出,并写入系统内 存;所述有效存储单元位置的信息是指有效存储单元的首地址。
进一步地,所述闪存为与非闪存。
进一步地,在与非闪存中写入数据时,每页分两次写入每写入256字 节的数据后,根据此256字节的数据计算得到8字节的冗余校验数据,将写 入的256字节数据读出,计算读出的256字节数据对应的8字节冗余校验数 据,判断两次计算得到的冗余4t验数据是否相同;如果每页分两次写入时分 别判断其写入和读出的数据对应的冗余检验数据均相同,确定此页为有效 页,否则,跳过此页,在下一页重新写该页的凝^居。
进一步地,所述待写入数据为内核镜像文件数据、引导程序可执行文件 数据或文件系统数据。
进一步地,在与非闪存中写入数据时,通过联合测试行动组接口或串口 或通用串行总线接口将待写入数据写入到同步动态随机存取存储器中,再从 所述同步动态随机存取存储器中读出写入与非闪存中。本发明还提供了一种数据写入方法,包括将待写入数据写入闪存中时, 每次将数据写入闪存的一存储单元后,判断此存储单元是否无坏块,如果无 坏块,确定此存储单元为有效存储单元,否则,跳过此存储单元在下一个存 储单元重新写入数据。
进一步地,将数据写入所述存储单元后,根据系统设定规则计算写入此 存储单元的数据所对应的冗余校验数据,并将写入此存储单元的数据读出, 根据所述规则计算读出数据对应的冗余校验数据,判断两次计算得到的冗余 数据是否相同,如果相同,确定此存储单元无坏块,否则,确定此存储单元 有坏块。
进一步地,在闪存中写入数据时,每页分两次写入每写入256字节 的数据后,根据此256字节的数据计算得到8字节的冗余校验数据,将写入 的256字节数据读出,计算读出的256字节数据对应的8字节冗余校验数据, 判断两次计算得到的冗余检验数据是否相同;如果每页分两次写入时判断其 写入和读出的数据对应的冗余检验数据均相同,确定此页为有效页,否则, 跳过此页,在下一页重新写该页的数据。
与其他烧写Flash的方法相比,本发明的方法可以保证数据都写在完好 的Flash数据块上,保证了数据不会因为Flash的质量问题而丢失。


图1是现有技术中不考虑Flash中有坏块的烧写方法示意图2是现有技术中考虑Flash有坏块并只做备份的烧写方法示意图3是本发明的烧写方法的流程图4是本发明中烧写方法的示意图。
具体实施例方式
本发明的方法包括在闪存中写入数据时,每次将数据写入闪存的一存 储单元后,判断此存储单元是否无坏块,如果无坏块,确定此存储单元为有效存储单元,否则,跳过此存储单元在下一个存储单元重新写入数据;确定
闪存中各个有效存储单元的首地址做为索引,并将所述索引写入闪存的启动
块中;上述方法可解决由于NAND Flash质量问题导致重要数据(尤其是操 作系统镜像数据)保存失败的问题,保证数据都写在完好的Flash数据块上。
如图3所示,本发明中烧写内存的方法包括以下步骤
步骤301,将待写入数据写入闪存中时,每次将数据写入闪存的一存储 单元后,判断此存储单元是否无坏块,如果无坏块,确定此存储单元为有效 存储单元,否则,跳过此存储单元在下一个存储单元重新写入数据;
写入数据时,每次将数据写入一存储单元时,根据系统设定规则计算写 入此存储单元的数据所对应的冗余校验数据,将写入此存储单元的数据读 出,并根据上述系统设定规则计算读出数据所对应的冗余数据,判断两次计 算得到的冗余数据是否相同,如果相同,则确定段存储单元为有效存储单元, 在此存储单元结束位置继续写入数据,否则,跳过此存储单元,在下一个存 储单元重新写入数据。
上述存储单元的大小为512字节,NAND Flash的一个页(page)为 512+16字节,在NAND Flash中写入数据时,每页分两次写每写256字 节的数据时,根据此256字节的数据产生8字节的冗余校验数据,写入256 字节数据后,将其读出,同时计算读出的256字节数据对应的8字节冗余校 验数据,判断两次计算得到的冗余检验数据是否相同,如果每页分两次写入 时判断其写入和读出的数据对应的冗余检验数据均相同,则说明此页中无坏 块,否则说明此页中有坏块,则跳过此页,在下一页重新写该页的内容。
根据256字节的数据计算其对应的冗余校验数据的方法很多,此处不再 赘述。
步骤302,将标识闪存中各个有效存储单元位置的信息做成一个索引, 保存在闪存的启动块中。
可以将闪存中各个有效存储单元的首地址做成索引;
系统启动时或启动后,根据上述索引将Flash中的数据从各个存储单元读出。
NAND Flash在最开始的启动块中没有坏块,在NAND Flash中写入数 据时,将所有有效页的首地址做成一个索引,保存在NAND Flash的启动块 中中。
因为无法通过JTAG 口直接将数据写到NAND Flash中,所以可以先将 待写入的数据写入到系统的SDRAM (同步动态随机存取存储器)中,再将 其写入到NAND Flash中。待写入的数据可以是内核镜像文件数据、引导程 序可执行文件数据、文件系统数据,可以将待写入的数据通过JTAG 口或串 口或USB (通用串行总线)接口写入到系统的SDRAM中。
下面以烧写内核镜像文件数据为例,说明本发明的方法
步骤1 、将内核镜像文件数据通过JTAG 口写入到SDRAM中;
步骤2 、将内核镜像文件数据从SDRAM中写入NAND Flash中;
在NAND Flash中写入数据时,每页分两次写每写256字节的数据时, 根据此256字节的数据产生8字节的冗余校验数据,写入256字节数据后, 将其读出,同时计算读出的256字节数据对应的8字节冗余校验数据,和写 入时产生的8字节的冗余检验相比较,若相同,则说明Flash中写入256字 节的存储空间良好,判断此页为有效页,否则说明写入256字节的存储空间 中有坏块,则跳过此页,在下一页重新写该页的内容。
步骤3、将所有有效页的首地址做成一个索引,保存在Flash的启动块 中;系统启动运行时或启动后,根据上述索引将Flash中的数据逐页读出;
例如,bootloader引导加载程序的首地址为0x00000000;
索引的首:l也址为0x1000;
内核4竟^f象存力文的首地址为0x4000。
其中,在NAND Flash中写入数据时,系统运行可l^行程序 writefiletoflash,可执行程序writefiletoflash中包括写Flash函数;读Flash 函数;比较冗余校验码函数;打开文件函数;关闭文件函数;还包括保存 地址索引的^:组。步骤4、将内核镜像文件数据根据上述方法写入NAND Flash后,系统 上电启动时,根据上述索引将NANDFlash中的数据逐页读入到内存中并完 成系统启动。
如图4所示的本发明中烧写方法的示意图中,写入内核镜像文件数据 时,跳过Flash中的坏块,进行内核镜像文件数据的存储。根据Flash的有 效页构建的索引位于Flash的启动块中。
与其他烧写NANDFlash的方法相比,虽然烧写的速度慢,而且需要额 外的空间保存地址索引,但能够保证数据都写在完好的Flash页,保证了数 据不会因为Flash的质量问题而丢失。
上述方法中既适用于软件操作系统也适用于嵌入式操作系统。
本发明还提出了一种数据写入方法,包括将待写入数据写入闪存中时, 每次将数据写入闪存的一存储单元后,判断此存储单元是否无坏块,如果无 坏块,确定此存储单元为有效存储单元,否则,跳过此存储单元在下一个存 储单元重新写入数据。其原理与上述方法同理,此处不再赘述。
本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况 些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1、一种安全烧写闪存的方法,其特征在于,将待写入数据写入闪存中时,每次将数据写入闪存的一存储单元后,判断此存储单元是否无坏块,如果无坏块,确定此存储单元为有效存储单元,否则,跳过此存储单元在下一个存储单元重新写入数据;将标识闪存中有效存储单元位置的信息做为索引,并将所述索引写入闪存的启动块中。
2、 如权利要求l所述的方法,其特征在于,将数据写入所述存储单元后,根据系统设定规则计算写入此存储单元的 数据所对应的冗余校验数据,并将写入此存储单元的数据读出,根据所述规 则计算读出数据对应的冗余校验数据,判断两次计算得到的冗余数据是否相 同,如果相同,确定此存储单元无坏块;否则,确定此存储单元有坏块。
3、 如权利要求1或2所述的方法,其特征在于,将数据写入闪存后,系统启动时或启动后,根据所述索引中有效存储单 元位置的信息将各个有效存储单元中的数据读出,并写入系统内存;所述有 效存储单元位置的信息是指有效存储单元的首地址。
4、 如权利要求1或2所述的方法,其特征在于, 所述闪存为与非闪存。
5、 如权利要求4所述的方法,其特征在于,在与非闪存中写入数据时,每页分两次写入每写入256字节的数据后, 根据此256字节的数据计算得到8字节的冗余校验数据,将写入的256字节 数据读出,计算读出的256字节数据对应的8字节冗余校验数据,判断两次 计算得到的冗余检验数据是否相同;如果每页分两次写入时分别判断其写入 和读出的数据对应的冗余检验数据均相同,确定此页为有效页;否则,跳过 此页,在下一页重新写该页的数据。
6、 如权利要求l所述的方法,其特征在于,所述待写入数据为内核镜像文件数据、引导程序可执行文件数据或文件 系统数据。
7、 如权利要求4所述的方法,其特征在于,在与非闪存中写入数据时,通过联合测试行动组接口或串口或通用串行 总线接口将待写入数据写入到同步动态随机存取存储器中,再从所述同步动 态随机存取存储器中读出写入与非闪存中。
8、 一种数据写入方法,其特征在于,将待写入数据写入闪存中时,每次将数据写入闪存的一存储单元后,判 断此存储单元是否无坏块,如果无坏块,确定此存储单元为有效存储单元, 否则,跳过此存储单元在下一个存储单元重新写入数据。
9、 如权利要求8所述的方法,其特征在于,将数据写入所述存储单元后,根据系统设定规则计算写入此存储单元的 数据所对应的冗余校验数据,并将写入此存储单元的数据读出,根据所述规 则计算读出数据对应的冗余校验数据,判断两次计算得到的冗余数据是否相 同,如果相同,确定此存储单元无坏块;否则,确定此存储单元有坏块。
10、 如权利要求9所述的方法,其特征在于,在闪存中写入数据时,每页分两次写入每写入256字节的数据后, 根据此256字节的数据计算得到8字节的冗余校验数据,将写入的256字节 数据读出,计算读出的256字节数据对应的8字节冗余校验数据,判断两次 计算得到的冗余检验数据是否相同;如果每页分两次写入时判断其写入和读 出的数据对应的冗余检验数据均相同,确定此页为有效页;否则,跳过此页, 在下一页重新写该页的数据。
全文摘要
本发明公开了一种安全烧写闪存的方法及数据写入方法,安全烧写闪存的方法包括将待写入数据写入闪存中时,每次将数据写入闪存的一存储单元后,判断此存储单元是否无坏块,如果无坏块,确定此存储单元为有效存储单元,否则,跳过此存储单元在下一个存储单元重新写入数据;将标识闪存中有效存储单元位置的信息做为索引,并将所述索引写入闪存的启动块中。本发明的方法可以保证数据都写在完好的闪存数据块上,保证了数据不会因为闪存的质量问题而丢失。
文档编号G11C29/04GK101567217SQ200810093230
公开日2009年10月28日 申请日期2008年4月23日 优先权日2008年4月23日
发明者孟祥飞 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1