CN102637461A - 支持坏块闪存扫描的启动方法 - Google Patents
支持坏块闪存扫描的启动方法 Download PDFInfo
- Publication number
- CN102637461A CN102637461A CN2012100580900A CN201210058090A CN102637461A CN 102637461 A CN102637461 A CN 102637461A CN 2012100580900 A CN2012100580900 A CN 2012100580900A CN 201210058090 A CN201210058090 A CN 201210058090A CN 102637461 A CN102637461 A CN 102637461A
- Authority
- CN
- China
- Prior art keywords
- firmware
- flash memory
- scanning
- piece
- storage space
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种支持坏块闪存扫描的启动方法,在与非闪存上分配一个存储空间用于存放固件,并在固件下载时,首先对所述存储空间进行坏块扫描,把下载的固件存放到好块中,并存储多份备份;主机引导接入的与非闪存启动;依据主机引导时依次扫描到的与非闪存在所述存储空间查找固件,并对查找到的固件进行错误校验,然后对错误校验通过的固件进行加载;若当前固件错误校验不通过且无法修正时,则依序查找下一份可用固件;若在所述存储空间查找溢出时,进入启动失败处理步骤。依据本发明的支持坏块闪存扫描的启动方法提高与非闪存正常启动的概率。
Description
技术领域
本发明涉及一种程序的装载与启动方法,具体是与非闪存固件的装载启动方法。
背景技术
根据与非闪存(NAND Flash)的技术要求,在出厂时允许有不多于2%的坏块(bad block),主要目的在于允许可接受比例的坏块存在可以增加产能,降低生产的成本。因此,在与非闪存的生产中会产生一些随机的坏块。为了防止数据存储到这些坏的单元中,这些坏块在IC烧录前首先必须先被识别,并被标识,隔离,用户不可见,因此这种类型的坏块并不会影响与非闪存的使用。
实际上坏块分为两种,一种是上述的在生产中过程中产生的坏块;另一种则是在使用中产生的坏块。对于后者,这是由于与非闪存只能执行有限的读和擦除次数,并且所有的闪存也都会因磨损而不能在使用。尽管使用中产生的坏块不可能被工厂所标识,但通常一个块在擦除或者烧录其一个页被报失败时,依据存储管理算法,此块也会被标识成坏块,以后就不能再访问。
支持与非闪存启动的固件也被存储在闪存上,一般对用户不可见,当然,与非闪存属于可升级闪存,用户也可以下载新版本的固件对既有的固件进行更新。一般情况下,一个闪存只有一份固件,并被固定存放在块0上(出厂前坏块被屏蔽,存储管理定义第一个好块为第0块)。随着技术的发展,固件安全性越来越多的被提出,因此,现在很多与非闪存会有一个固件加一个备份,以提高固件正常启动的成功率。当使用中存放固件的块成为坏块时,就无法进行固件的加载,导致启动失败。
一般来说,对闪存存储器会通过ECC(Error Correcting Code,错误纠正码)技术进行保护,如果读取页时发生ECC错误,则说明该块已经为坏块。但ECC仅能校验并修正部分很简单的错误,坏块无法通过ECC进行修复。
发明内容
显然,存放固件的存储空间是否损坏会影响固件最终能否被加载,而影响闪存的启动,因此,本发明的目的提供一种基于坏块扫描的闪存启动方法,提高与非闪存正常启动的概率。
那么,为了实现上述发明目的,一个技术方案表述如下:
一种支持坏块闪存扫描的启动方法,在与非闪存上分配一个存储空间用于存放固件,并在固件下载时,首先对所述存储空间进行坏块扫描,把下载的固件存放到好块中,并存储多份备份;
主机引导接入的与非闪存启动;
依据主机引导时依次扫描到的与非闪存在所述存储空间查找固件,并对查找到的固件进行错误校验,然后对错误校验通过的固件进行加载;若当前固件错误校验不通过且无法修正时,则依序查找下一份可用固件;若在所述存储空间查找溢出时,进入启动失败处理步骤。
依据上述方法,在固件下载时,首先对分配的用于存放固件的与非闪存进行坏块扫描,确保固件存储在好块中,并存储多份备份。从而,大大降低了因为无法读取固件而不能启动的概率。这里需要注意,固件不再是固定在存放在与非闪存的块0,而是被约束地存放在独立开辟的一个存储空间里,这种结构未必就会降低闪存的启动速度,假定在查找存储空间的第一个块时就命中,启动速度与既有的启动方法一样。查找被限定在有限的存储空间内,可以防止扫描固件过长而导致启动变慢。
上述支持坏块闪存扫描的启动方法,所述存储空间为与非闪存的第0块到第N块,其中N为100~250。
上述支持坏块闪存扫描的启动方法,所述固件包含用于标识该固件的固件头,且固件头被存储到分配的好块的第0页,并且该固件头包含固件代码存储所占用的总页数,并对应地包含有页号;从而,在执行查找时,以固件头为条件查找,并在查找到固件后依此加载各页上的固件代码。
上述支持坏块闪存扫描的启动方法,加载各页上的代码前要进行页错误校验,若错误校验失败且不能修正,则查找下一份固件。
上述支持坏块闪存扫描的启动方法,在多通道闪存控制器中,在闪存启动时,从通道0依次扫描各通道接入的与非闪存中存放的固件,直到找到相应固件并加载,或者在遍历各通道而没有查找到相应固件后进入启动失败处理步骤。
上述支持坏块闪存扫描的启动方法,所述启动失败处理步骤为等待下载固件。
上述支持坏块闪存扫描的启动方法,在使用MLC或TLC架构的与非闪存中对分配的用于存放固件的存储空间在存放固件前,先依据厂商提供的存储优化方法优化该存储区域。
上述支持坏块闪存扫描的启动方法,固件代码在分配的块中随机写入到被优化的页中。
附图说明
图1为依据本发明的一种支持坏块闪存扫描的启动方法所依赖的体系结构示意图。
图2为一种支持坏块闪存扫描的启动方法流程图。
具体实施方式
参照说明书附图1,片上系统(SoC,system on chip)包括ARM核及配置的内部存储器——ROM和RAM,其中ROM存放引导代码,用于引导片上系统启动,一般通过片上总线连接与非闪存控制器,图中的与非闪存控制器支持多通道模式。
与非闪存通过闪存控制器接入片上系统,成为外部存储器,扩展内存。
图下下部表示的固件的存放结构,一种支持坏块闪存扫描的启动方法,在与非闪存上分配一个存储空间用于存放固件,图中表示为与非闪存的前200块。
固件结构包括固件文件头,然后是存放在其后的页上的固件代码,其中固件头存放有固件长度、固件存储的所有的页位置,必要情况下,以及其他的配置信息,主要用于固件的识别。
参见说明书附图2所示的一种支持坏块闪存扫描的启动方法流程图,其包括以下步骤:
步骤100,CPU在启动时,存放在ROM中的引导代码进行初始的初始化,通过闪存控制器读取所有通道中的闪存查找固件。
对于设计比较复杂的与非闪存控制器来说,会设计多通道连接与非闪存,以达到并行读写处理数据的效果。对于这类与非闪存控制器来说,设计系统启动方式通常的做法是从某一固定通道上的闪存读取固件,这种做法死板,可靠性也差,。依据本发明,改为扫描所有通道上闪存内的固件,加大了读取固件成功的命中率。
此外,并行扫描进行占用较少的资源,且扫描速度并不会太慢。
步骤101,依次判断各通道中是否有与非闪存接入,若有与非闪存接入,通过与非闪存控制器预定义的协议,读取与非闪存ID及闪存类型,以适应多种与非闪存的启动,并且为后续步骤提供匹配的处理方法。
若无与非闪存接入,与非闪存控制器则处于休眠的待激活状态,以节省能耗。
步骤102,判断当前通道数是否为最大通道数,如果是,则表明没有与非闪存接入,则转入步骤110,否则转入步骤103。
步骤110,图中表现为没有找到固件,等待下载固件;其实等待下载是一种联机状态,如果脱机状态,表示的是一种待机状态。
当然,如果实际与非闪存设备接入,而没有被识别,只是启动失败,那可能的情况是相关与非闪存设备需要重新刷机。
步骤103,判断当前块是否超出了预定的固件存储区,如果是,表明在连接在该通道上的与非闪存没有找到相关固件,那么切换到步骤102,查找下一通道连接的与非闪存。
如果当前块在预定的固件存储区,则转入步骤104。
关于固件存储区,及分配的用于存放固件的存储区域,为了降低启动的时间,分配固件存储区最好是与非闪存的前200块,不仅能够存放足够多的固件,而且会减少扫描的时间。为了能够存放足够多的备份,分配的存储空间最好不要小于100块,并且后续的内容还会涉及到对存储结构的优化,能够被用来存放固件的比较好的块可能较少。并且随着与非闪存的使用,块的磨损不可避免,处于系统区(如存放固件的区域)与数据区磨损均衡的考量,分配的存储空间最好不要小于100块,据此可以使闪存的整体使用寿命延长。当然,也不能分配的过大,否则会占用比较多的存储空间,并且关于磨损均衡的进一步考虑,分配过多就会产生浪费。同时,如前所述,分配过大,会产生启动过慢的情形。因此,最多不要超过250块。当然,所分配的块都位于闪存的前部,读取速度快。
参见说明书附图1下部,固件并没有连续的存放在所述存储区域,而是被随机的分配到好的块中,可以提高固件存储的安全性。
当需要下载固件时或者重新下载固件时,需要对分配的存储区域进行坏块扫描,并且下载的固件随机存放到好的块中,并作多个备份;对于重新下载的固件,如果还有空闲块,把重新下载的固件存放到空闲块中;否则,擦除脏块,存放新的固件。
步骤104,读取固件发生无法纠正的ECC错误时,会扫描下一个分配的存储区域的与非闪存块。
扫描时,首先查找具有固件文件头的当前与非闪存块,即步骤105,然后按照固件文件头中包含的固件总页数以及固件各页存储的位置依次加在固件代码至RAM,即步骤106和步骤108。
对于步骤105和步骤106可以没有严格的顺序关系,虽然理应判断查找到的当前块是否含有固件文件头似乎更应该在前,之后才有可能存在读取的ECC错误,不过ECC校验也可以在判断固件头之前。
那么更准确的表述为如果当前与非闪存块没有固件文件头或者读取发生无法纠正的ECC错误时,会扫描存储空间的下一个与非闪存块,即进行步骤103。
ECC错误发生在读块和读块内容两个方面,读块更多的表现在读取固件文件头,若没有读到固件文件头(存放在相应块的第0页,可以直接命中),然后在读到固件文件头后,就可以依据前述的读取方法读取其后的固件代码,读固件代码的时候可能也会产生ECC错误(步骤107),因此,ECC校验表现在读取固件头,避免加载错误的固件,也表现在读取固件代码,避免加载损坏的固件,从而,可以有效地避免产生因加载错误或者损坏的固件导致主机(嵌入式系统)死锁。
一旦固件读取成功,启动的控制权转给固件,即加载固件,由固件引导初始化。
如前所述,在每个存放固件的块中,固件头部分放在页0里,固件头中包含了固件代码部分存放所需要占用的页数,及存放的具体页号和必要的配置信息。这里针对MLC、TLC Flash进行了固件存储优化,同时兼容SLC Flash存储,固件代码不需要连续放置,可分别放置在优化选择的页中。这样,按照不同Flash特性,把固件存放在优化的flash块中某页上,可显著的提高固件存储寿命。
与非闪存按照存储单元进行分类,目前有三种架构,分别是MLC架构、TLC架构和SLC架构,其中,SLC 和MLC分别是Single Layer Cell(单层单元)和Multi-Level Cell(多层单元)的缩写,SLC的特点是成本高、容量小、速度快,而MLC的特点是容量大成本低,但是速度慢。MLC的每个单元是2bit的,相对SLC来说整整多了一倍。不过,由于每个MLC存储单元中存放的资料较多,结构相对复杂,出错的几率会增加,必须进行错误修正,这个动作导致其性能大幅落后于结构简单的SLC闪存。TLC与MLC具有相似的特点,是Triple-Level Cell的缩写,即3bit/cell,即三层单元,它的寿命更短,速度更慢,但也更便宜。
为了提高固件的存储寿命,在采用成本较低的MLC和TLC时,要对与非闪存进行优化。关于与非闪存的优化,各闪存厂商均提供了说明文档,给出了匹配的优化方法。
优化之后的页被存放到固件文件头中,这样就可以被固件代码存放到优化的与非闪存的某页上,从而,可以显著地提高固件的存储寿命。
传统方法一般把固件存储在NOR Flash上,但价格较高;或者把固件存储在NAND Flash的块0(闪存厂商保证块0为好块)或者固定的某几块上,如果块0或者使用的固定块擦写次数达到一定极限时,就无法完成固件启动。
本方法采用一定的固件存放范围,在该范围内,可以任意选择好与非闪存块存储固件。可以有效的避开坏块,动态选择正确固件进行加载,灵活性高,安全性强。
传统方法只能从通道0中读取固件,本方法能灵活的从各通道读取固件,增加了灵活性,可靠性。
传统方法存储固件没有有效利用MLC、TLC的特性,本方法对此进行了优化,提高了固件存储寿命。
另外,这里的支持坏块闪存扫描指的是能够在使用中产生坏块的情况下扫描坏块并下载固件。
Claims (8)
1.一种支持坏块闪存扫描的启动方法,其特征在于,在与非闪存上分配一个存储空间用于存放固件,并在固件下载时,首先对所述存储空间进行坏块扫描,把下载的固件存放到好块中,并存储多份备份;
主机引导接入的与非闪存启动;
依据主机引导时依次扫描到的与非闪存在所述存储空间查找固件,并对查找到的固件进行错误校验,然后对错误校验通过的固件进行加载;若当前固件错误校验不通过且无法修正时,则依序查找下一份可用固件;若在所述存储空间查找溢出时,进入启动失败处理步骤。
2.根据权利要求1所述的支持坏块闪存扫描的启动方法,其特征在于,所述存储空间为与非闪存的第0块到第N块,其中N为100~250。
3.根据权利要求1所述的支持坏块闪存扫描的启动方法,其特征在于,所述固件包含用于标识该固件的固件头,且固件头被存储到分配的好块的第0页,并且该固件头包含固件代码存储所占用的总页数,并对应地包含有页号;从而,在执行查找时,以固件头为条件查找,并在查找到固件后依此加载各页上的固件代码。
4.根据权利要求3所述的支持坏块闪存扫描的启动方法,其特征在于,加载各页上的代码前要进行页错误校验,若错误校验失败且不能修正,则查找下一份固件。
5.根据权利要求1所述的支持坏块闪存扫描的启动方法,其特征在于,在多通道闪存控制器中,在闪存启动时,从通道0依次扫描各通道接入的与非闪存中存放的固件,直到找到相应固件并加载,或者在遍历各通道而没有查找到相应固件后进入启动失败处理步骤。
6.根据权利要求1或5所述的支持坏块闪存扫描的启动方法,其特征在于,所述启动失败处理步骤为等待下载固件。
7.根据权利要求1所述的支持坏块闪存扫描的启动方法,其特征在于,在使用MLC或TLC架构的与非闪存中对分配的用于存放固件的存储空间在存放固件前,先依据厂商提供的存储优化方法优化该存储区域。
8.根据权利要求7所述的支持坏块闪存扫描的启动方法,其特征在于,固件代码在分配的块中随机写入到被优化的页中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210058090.0A CN102637461B (zh) | 2012-03-07 | 2012-03-07 | 支持坏块闪存扫描的启动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210058090.0A CN102637461B (zh) | 2012-03-07 | 2012-03-07 | 支持坏块闪存扫描的启动方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102637461A true CN102637461A (zh) | 2012-08-15 |
CN102637461B CN102637461B (zh) | 2014-12-03 |
Family
ID=46621824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210058090.0A Active CN102637461B (zh) | 2012-03-07 | 2012-03-07 | 支持坏块闪存扫描的启动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102637461B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104077167A (zh) * | 2014-07-11 | 2014-10-01 | 杭州华三通信技术有限公司 | 基于nand flash的启动加载方法和装置 |
CN104346282A (zh) * | 2013-07-26 | 2015-02-11 | 北京兆易创新科技股份有限公司 | 一种非易失性闪存配置信息的存储、上电方法和装置 |
WO2015154541A1 (zh) * | 2014-04-12 | 2015-10-15 | 天津瑞发科半导体技术有限公司 | Usb固态盘固件存储装置 |
CN105868046A (zh) * | 2015-01-22 | 2016-08-17 | 深圳市硅格半导体有限公司 | 存储装置中管理、写入及加载固件代码的方法 |
CN110109708A (zh) * | 2019-04-25 | 2019-08-09 | 深圳忆联信息系统有限公司 | 一种控制器NandBoot机制的方法及其系统 |
CN110879759A (zh) * | 2018-09-06 | 2020-03-13 | 爱思开海力士有限公司 | 控制器及其操作方法 |
TWI733157B (zh) * | 2019-01-18 | 2021-07-11 | 合肥杰發科技有限公司 | 一種加快嵌入式系統啟動速度的方法及其嵌入式系統 |
TWI783842B (zh) * | 2021-12-29 | 2022-11-11 | 瑞昱半導體股份有限公司 | 記憶體壞塊掃描方法及其電路系統 |
CN115495024A (zh) * | 2022-11-16 | 2022-12-20 | 石家庄科林电气股份有限公司 | 基于NandFlash的录波文件存储方法、装置、终端及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005013125A1 (en) * | 2003-08-01 | 2005-02-10 | Symbian Software Limited | A method of accessing data in a computing device |
CN1902583A (zh) * | 2003-12-31 | 2007-01-24 | 桑迪士克股份有限公司 | 快闪存储器系统起动操作 |
CN1932778A (zh) * | 2006-07-23 | 2007-03-21 | 海信集团有限公司 | 一种对nand flash存储器进行虚拟空间管理的方法 |
CN101930373A (zh) * | 2009-06-19 | 2010-12-29 | 中兴通讯股份有限公司 | 一种片上系统启动的方法和装置 |
-
2012
- 2012-03-07 CN CN201210058090.0A patent/CN102637461B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005013125A1 (en) * | 2003-08-01 | 2005-02-10 | Symbian Software Limited | A method of accessing data in a computing device |
CN1902583A (zh) * | 2003-12-31 | 2007-01-24 | 桑迪士克股份有限公司 | 快闪存储器系统起动操作 |
CN1932778A (zh) * | 2006-07-23 | 2007-03-21 | 海信集团有限公司 | 一种对nand flash存储器进行虚拟空间管理的方法 |
CN101930373A (zh) * | 2009-06-19 | 2010-12-29 | 中兴通讯股份有限公司 | 一种片上系统启动的方法和装置 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104346282A (zh) * | 2013-07-26 | 2015-02-11 | 北京兆易创新科技股份有限公司 | 一种非易失性闪存配置信息的存储、上电方法和装置 |
WO2015154541A1 (zh) * | 2014-04-12 | 2015-10-15 | 天津瑞发科半导体技术有限公司 | Usb固态盘固件存储装置 |
CN104077167A (zh) * | 2014-07-11 | 2014-10-01 | 杭州华三通信技术有限公司 | 基于nand flash的启动加载方法和装置 |
CN105868046A (zh) * | 2015-01-22 | 2016-08-17 | 深圳市硅格半导体有限公司 | 存储装置中管理、写入及加载固件代码的方法 |
CN105868046B (zh) * | 2015-01-22 | 2018-11-13 | 深圳市硅格半导体有限公司 | 存储装置中管理、写入及加载固件代码的方法 |
CN110879759A (zh) * | 2018-09-06 | 2020-03-13 | 爱思开海力士有限公司 | 控制器及其操作方法 |
CN110879759B (zh) * | 2018-09-06 | 2023-08-18 | 爱思开海力士有限公司 | 控制器及其操作方法 |
TWI733157B (zh) * | 2019-01-18 | 2021-07-11 | 合肥杰發科技有限公司 | 一種加快嵌入式系統啟動速度的方法及其嵌入式系統 |
CN110109708A (zh) * | 2019-04-25 | 2019-08-09 | 深圳忆联信息系统有限公司 | 一种控制器NandBoot机制的方法及其系统 |
TWI783842B (zh) * | 2021-12-29 | 2022-11-11 | 瑞昱半導體股份有限公司 | 記憶體壞塊掃描方法及其電路系統 |
CN115495024A (zh) * | 2022-11-16 | 2022-12-20 | 石家庄科林电气股份有限公司 | 基于NandFlash的录波文件存储方法、装置、终端及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102637461B (zh) | 2014-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102637461B (zh) | 支持坏块闪存扫描的启动方法 | |
CN101782871B (zh) | 信息处理装置、处理器及存储器管理方法 | |
CN100504814C (zh) | 闪存的区块管理方法 | |
US9053808B2 (en) | Flash memory with targeted read scrub algorithm | |
US20190146911A1 (en) | Memory system and operating method thereof | |
US7937523B2 (en) | Memory system with nonvolatile semiconductor memory | |
US8452911B2 (en) | Synchronized maintenance operations in a multi-bank storage system | |
CN102135927B (zh) | 一种基于nand flash的系统引导方法和装置 | |
US20140164681A1 (en) | Systems and Methods for Intelligent Flash Management | |
CN104051018B (zh) | 非易失性存储器装置及其操作方法 | |
US20120131263A1 (en) | Memory storage device, memory controller thereof, and method for responding host command | |
CN101946286A (zh) | 用于模拟每单元单个位的nand闪存的每单元多个位的nand闪存的控制器 | |
CN101551780B (zh) | 一种电视机及其数据存储方法、装置 | |
US20110131366A1 (en) | Memory management unit and memory management method | |
CN103985411A (zh) | 待调度验证的非易失性写入缓冲器数据保留 | |
CN106170833A (zh) | 在数据存储系统中的具有模块化擦除的数据管理 | |
CN103562883A (zh) | 存储器装置中的动态存储器高速缓存大小调整 | |
US20130290659A1 (en) | Memory system | |
CN103778964B (zh) | 一种NAND Flash烧写数据的处理、使用方法及装置、系统 | |
US20120221773A1 (en) | Nonvolatile semiconductor memory device | |
CN103246610A (zh) | 基于单类型存储器的嵌入式系统的动态存储管理方法 | |
US8914587B2 (en) | Multi-threaded memory operation using block write interruption after a number or threshold of pages have been written in order to service another request | |
CN106445398A (zh) | 一种基于新型存储器的嵌入式文件系统及其实现方法 | |
CN102736932B (zh) | 镜像文件、镜像文件的制作方法及多系统的启动引导方法 | |
CN101408864B (zh) | 用于断电时的数据保护方法及使用此方法的控制器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |