本发明涉及一种boot-rom兼容多种nand-flash重读的方法,属于计算机存储领域。
背景技术:
对于目前主流的nand-flash,原厂均要求驱动使用重读(readretry)的方法访问,重读是指当读取到的数据有误时,可通过原厂指定的特殊命令修改nand-flash的配置,重新读取尝试得到正确数据,从而增强数据保持能力。
实际应用中,当前的软件驱动均支持此操作,而boot-rom中没有支持。第一,由于不同厂家、不同制程的重读方法差异很大,而boot-rom中的nand-flash操作代码有体积限制,不能把每种重读方法兼容进去;第二,boot-rom在ic流片完成后即固定,不能更改,对于后期出现的新的重读参数,boot-rom无法更新。
nand-flash是一种被广泛使用的大容量存储设备,具有容量大,单位价格低的特点,但由于市场竞争激烈,其制程一直在缩小以降低成本,伴随着制程缩小,nand-flash的稳定性越来越差,为了保证数据可靠性,重读的读取方法也相应地出现了。数据是以电荷的形式存储在nand-flash内部,随着存放时间、擦除次数的增长,电荷会随机泄漏,导致该位置的电压信息与刚写入时不一致,若仍以原有的电压阈值进行判断,则会导致读出信息错误,“重读”的作用就在于调整电压判断阈值,从而把变化了的数据正确读取到。因此,对于任何情况下对nand-flash的访问,都应该支持重读操作。
但实际上,如上文所述,由于代码体积限制、更新限制,目前的boot-rom设计是无法支持重读。为了应对没有重读支持的风险,在不增加成本的情况下,大多都是采用多个数据备份的方式,若允许增加成本,可采用二级引导的方法,即采用足够稳定可靠的存储介质作为一级引导设备。
技术实现要素:
针对现有技术的不足,本发明的技术方案提供了一种boot-rom兼容多种nand-flash重读的方法,本方法把不同的重读方法抽象为若干具有共性的子操作,并在boot-rom中实现了一个解析器,用于处理这类子操作。一种重读方法实为一个子操作集,烧写固件时把子操作集信息写入到nand-flash内部,因此,只要boot-rom启动时读取到该操作集信息,即可获取到针对该款nand-flash的重读方法,从而实现重读操作功能。
本发明的技术方案包括一种boot-rom兼容多种nand-flash重读的方法,其特征在于,该方法包括:a.将控制符、命令、多个地址及多个写数据设置为一个子操作,其中,多个子操作对应一个子操作集,每个子操作集对应一种nand-flash的重读操作;b.烧写固件时,根据nand-flash的子操作集信息,生成对应的子操作数据表,并将子操作数据表写入nand-flash对应位置;c.boot-rom启动时,使用解析器对nand-flash的子操作数据表进行搜索,若查找到对应的子操作数据表,则执行重读操作,若没有查找到对应的子操作数据表,则不提供重读功能。
根据所述的boot-rom兼容多种nand-flash重读的方法,所述的控制符包括:用于指定对应的子操作的发送命令个数、发送地址个数及发送数据个数。
根据所述的boot-rom兼容多种nand-flash重读的方法,所述的子操作集包括:重读时的初始化子操作集、循环子操作集及退出子操作集。
根据所述的boot-rom兼容多种nand-flash重读的方法,所述子操作数据表包括:索引信息,用于在重读操作期间,索引信息定位所需子操作的位置,存储初始化动作、循环配置参数动作及退出动作信息,其中不同动作对应不同的子操作数据内容;子操作数据,用于指示重读操作步骤及存放相关操作数。
本发明的有益效果为:不增加硬件成本;在多个备份基础上,进一步增加boot-rom数据的可靠性。
附图说明
图1所示为根据本发明实施方式的总体流程图;
图2所示为根据本发明实施方式的重读流程图;
图3所示为根据本发明实施方式的子操作数据表烧写流程图;
图4所示为根据本发明实施方式的boot-rom流程图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。本发明的boot-rom兼容多种nand-flash重读的方法适用于boot-rom内存数据的处理。
图1所示为根据本发明实施方式的总体流程图。a.将控制符、命令、多个地址及多个写数据设置为一个子操作,其中,多个子操作对应一个子操作集,每个子操作集对应一种nand-flash的重读操作;b.烧写固件时,根据nand-flash的子操作集信息,生成对应的子操作数据表,并将子操作数据表写入nand-flash对应位置;c.boot-rom启动时,使用解析器对nand-flash的子操作数据表进行搜索,若查找到对应的子操作数据表,则执行重读操作,若没有查找到对应的子操作数据表,则不提供重读功能。
图2所示为根据本发明实施方式的重读流程图。任意一个重读操作都可以看作以下三部分组成:重读初始化子操作集、循环子操作集、重读退出子操作集,依照图2完成重读操作。
图3所示为根据本发明实施方式的子操作数据表烧写流程图;
图4所示为根据本发明实施方式的boot-rom流程图。boot-rom包含了一个处理子数据数据的解析器,启动过程中,会首先搜索子数据数据表,若能找到,则表示支持重读操作,并在需要重读时触发重读操作,若不能找到,则不提供重读功能。
本发明的技术方案进一步公开了子数据的组成示意图和子数据数据表组成示意图,分别如下表1和表2所示。
表1
表2
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。