基于NANDFLASH的嵌入式系统代码存储及启动方法与流程

文档序号:11230128阅读:736来源:国知局
基于NAND FLASH的嵌入式系统代码存储及启动方法与流程

本发明涉及的是一种用于多层单元闪存的nandflash的嵌入式系统代码存储及启动方法。



背景技术:

在现有技术中,公知的技术是ecc是“errorcorrectingcode”的简写,中文名称是“错误检查和纠正”。ecc是一种能够实现“错误检查和纠正”的技术,ecc内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。

嵌入式系统是指面向特定应用设计、执行专用功能并被内部计算机控制的设备或者系统。一般而言,嵌入式系统的构架可以分成四个部分:处理器、存储器、输入输出(i/o)和软件。随着芯片技术的发展和应用范围更加广泛,目前嵌入式系统中的系统文件和应用数据存储,普遍使用单一的存储介质,以往单独用于存储系统启动代码的norflash存储器已被价格更加低廉,容量更大的nandflash存储器所取代。系统的启动代码与操作系统文件,应用文件都使用统一的nandflash存储芯片。

目前在嵌入式系统中广泛使用的是mlcnandflash存储介质。mlc全称为multi-levelcell,多层单元闪存,mlc通过使用大量的电压等级,数据密度比较高。但同是也带来了擦除次数更少,以及更高的数据出错率等问题。随着mlcnandflash存储器在嵌入式系统中的广泛使用,迫切需要一种基于mlcnandflash存储器的嵌入式系统代码存储和启动的设计方案。



技术实现要素:

本发明的目的就是针对现有技术所存在的不足,而提供一种基于nandflash的嵌入式系统代码存储及启动方法,该方案使得在平均页编程次数和数据稳定性均比较差的mlcnandflash可以适应启动代码存储和引导的应用性。该方法通过使用在特定的默认位置存储启动代码,在代码附加的文件头中存储额外的代码存储位置信息以加速启动过程中的代码搜索和查询,使用最小固定页长来存储启动代码,使用增强的ecc纠错能力来保护存储代码,启动时扫描默认序列位置读取存储器中的数据,一旦读取到一个完整和正确的头文件即可使用头文件中存储的位置信息来确定启动代码的存储位置,使用基于eccframe的拼凑机制来保证系统启动的可靠性和完整性。

本方案是通过如下技术措施来实现的:一种基于nandflash的嵌入式系统代码存储方法,包括如下步骤:

1)在默认的代码存储位置存储启动代码;

2)在启动代码附加的文件头中存储额外的代码存储位置信息,以加速启动过程中的代码搜索和查询;

3)使用小于nandflash物理页大小的存储空间来存储的代码;

4)使用ecc检查和纠正存储代码,增强代码存储的可靠性;

所述的步骤1)中默认的代码存储位置包括4个ce#,每个ce#上面8个特定位置;每一份拷贝应保存在这32个默认起始位置中的一个,使引导代码可以在这些位置找到系统的启动代码。

每一份拷贝都带有相同的文件头,文件头存储了拷贝的数量,及每一份拷贝的存储位置。

一种基于nandflash的嵌入式系统代码启动方法,包括如下步骤:

1)系统启动后,首先初始化cpu工作状态,然后进行内存初始化,并完成nandflash初始化;

2)按照默认的位置,逐个扫描是否有有效的文件头存在,如果有有效的文件头,则进入步骤3),否则结束扫扫描并退出;

3)根据文件头中记录的信息,开始加载固件;

4)先从当前拷贝开始,如果在加载某页代码的过程中,出现不可纠正的eccframe错误,则从邻近的拷贝的对应位置,读取相应的frame来尝试进行拼凑,如果继续错误则遍历其他拷贝,直到读取正确,转入下一页,如果全部错误则退出,并标记出错的eccframe,并将标记表传递给系统。

本方案的有益效果可根据对上述方案的叙述得知,由于在该方案中。

由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。

附图说明

图1为本发明具体实施方式的启动流程图。

图2为默认的位置图。

具体实施方式

为能清楚说明本方案的技术特点,下面通过一个具体实施方式,并结合其附图,对本方案进行阐述。

通过附图可以看出,本方案的一种基于nandflash的嵌入式系统代码存储方法,包括如下步骤:

1)在默认的代码存储位置存储启动代码;默认的代码存储位置包括4个ce#,每个ce#上面8个特定位置;每一份拷贝应保存在这32个默认起始位置中的一个,使以保证bootrom或其他的引导代码可以帮助在这些位置找到系统的启动代码。

2)在启动代码附加的文件头中存储额外的代码存储位置信息,以加速启动过程中的代码搜索和查询;文件头具有如下特性:使用第一个page来保存,固定长度512bytes,使用80bitsecc纠错,每一份拷贝(copy)都带有相同的文件头(header)。header存储了copy的数量,及每一份拷贝的存储位置。当某一份拷贝读取过程中,某一个eccframe出现不可纠正的错误时,无需再扫描其他copy的位置,可以直接使用header中的copy位置信息,去指定的位置上尝试读取其他copy。

3)使用小于nandflash物理页大小的存储空间来存储的代码;保证可以适应大多数的nandflash,使用远小于物理页size的存储空间来存储的代码,从而可以使用更多的ecc纠错码。

4)使用ecc检查和纠正存储代码,增强代码存储的可靠性;文件头使用512bytes+80bitsecc纠错能力进行保护;codepage在空间允许的情况下,使用尽可能多的ecc纠错能力,比如可以利用减少每页存储的eccframecount,增加存储页数量的方法来保证每个eccframe可以使用更多的纠错位,页内有更多的空间可以用来存储循环冗余校验位,增强代码存储的可靠性。以此来消除由于使用mlcnandflash所带来的数据保持能力降低和位比特出错几率增加的消极影响。

一种对于上述存储方法嵌入式系统代码启动方法,包括如下步骤:

1)系统启动后,首先初始化cpu工作状态,然后进行内存初始化,并完成nandflash初始化;

2)按照默认的位置,逐个扫描是否有有效的文件头存在,如果有有效的文件头,则进入步骤3),否则结束扫扫描并退出;

3)根据文件头中记录的信息,开始加载固件;

4)先从当前拷贝开始,如果在加载某页代码的过程中,出现不可纠正的eccframe错误,则从邻近的拷贝的对应位置,读取相应的frame来尝试进行拼凑,如果继续错误则遍历其他拷贝,直到读取正确,转入下一页,如果全部错误则退出,并标记出错的eccframe,并将标记表传递给系统。降低启动代码的完整性粒度,由通常的copy级,page级调低到eccframe级。这样的设计保证只要所有copy中的相同page的相同frame没有同时损坏,就可以在frame级拼凑出一份完整的

本发明并不仅限于上述具体实施方式,本领域普通技术人员在本发明的实质范围内做出的变化、改型、添加或替换,也应属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1