一种基于NAND存储器的系统启动方法及系统与流程

文档序号:12469643阅读:284来源:国知局
一种基于NAND存储器的系统启动方法及系统与流程

本发明涉及NAND存储器领域,尤其涉及一种基于NAND存储器的系统启动方法及系统。



背景技术:

NAND存储器(NAND FLASH)一种比较常用的存储介质,适用于大量数据的存储,在频繁上传或更新大文件的设备中更有市场,比如:MP3播放器、数码相机和USB驱动器都使用NAND存储器。NAND存储器技术的发展方向是芯片更小、读写周期更长、电压需求更低,这些改进将使NAND存储器技术的应用更广泛。

基于NAND存储器的硬件特性:数据在读写时候相对容易错误,所以为了保证数据的正确性,必须要有对应的检测和纠错机制,此机制被叫做ECC(Error Correcting Code,错误检查和纠正),NAND存储器会存在坏的数据块,因此,需要ECC来校验读取的数据,以维持数据的完整性,NAND存储器的每一个page上都包括冗余区域,该区域能存储ECC代码及其它像磨损评级或逻辑到物理块映射之类的信息。同样,由于NAND存储器的多样性,NAND存储器的芯片启动代码中的ECC部分多采用芯片所支持的最高ECC,比如:全部采用80bit ECC,而实际NAND存储器可能需要的是40bit ECC或60bit ECC,之所以尽可能采用最高ECC是为了简化芯片启动代码,并保证芯片能兼容各种不同的NAND存储器。

NAND存储器中,几个数据点电压分布有可能会平移,只要这几个数据点电压分布没有叠加就可以通过Read Retry模式恢复,从而保证能够正确读取NAND存储器中的数据。Read Retry,是指NAND存储器在读数据出错同时ECC又无法纠正的情况下,NAND存储器内部提供的一种重新读取数据的方式,在重新读取数据的时候需要设置新的Retry Level,即参考电压,然后用不同的Retry Level再读取数据,不同的Retry Level由不同的Retry参数序列设置。

由于芯片启动代码是固化在芯片里面,后续没有办法修改,而NAND存储器不间断有新品上市,并且由于新制成的NAND存储器的Read Retry的方法也会随之变化,这时候芯片要启动新的NAND存储器就必须有对应的机制,来适应NAND存储器的变化。

在现有的针对NAND存储器的芯片启动代码中多数采用更高的ECC以及通用Retry Level多备份的方式来兼容具有不同Read Retry需求的NAND存储器,以减小出错概率。



技术实现要素:

本发明的目的是提供一种基于NAND存储器的系统启动方法及系统,能够自适应不同NAND存储器的Read Retry需求,使芯片启动代码更好地兼容不同的NAND存储器,从而解决在一些使用场景下,由于没有对应的Read Retry而无法使NAND存储器正常启动的情况。

本发明提供的技术方案如下:

一种基于NAND存储器的系统启动方法,包括S10:NAND存储器中Retry命令序列参数的读取方法,包括步骤:步骤S100上电后,从NAND存储器多个参数备份的page里,根据芯片启动代码的规则依次读取数据,若读取数据成功,则执行步骤S110;所述步骤S100还包括:步骤S101若读取数据失败,则继续从下一个page里读取数据;其中,所述芯片启动代码包括:预设的ECC、格式和通用Retry Level;所述芯片启动代码的规则是指:预设的ECC和格式;所述参数包括:所述Retry命令序列参数;步骤S110检查所述读取的数据是否是全ff,若是,则执行步骤S101,若否,则执行步骤S120;步骤S120判断所述读取的数据的头部数据特征码是否为参数特征码,若是,则所述读取的数据为Retry命令序列参数,执行步骤S130;步骤S130对NAND存储器多个参数备份的page里读取的所述Retry命令序列参数进行crc计算并校验,若校验正确,则将所述Retry命令序列参数保存到系统内存中,并执行步骤S210;若校验不正确,则未获取正确的所述Retry命令序列参数,直接执行步骤S210;S20:NAND存储器中系统启动代码的读取方法,包括步骤:步骤S210从NAND存储器烧录有系统启动代码的page里,根据芯片启动代码的规则依次读取所述系统启动代码;步骤S230若所述系统启动代码读取失败,则根据NAND存储器中读取的所述Retry命令序列参数设置新的Retry Level;步骤S240根据所述新的Retry Level再次读取NAND存储器中的所述系统启动代码;步骤S250当成功将NAND存储器中的所述系统启动代码读完后,跳到系统内存中完成系统启动。

进一步优选地,所述S10:NAND存储器中Retry命令序列参数的读取方法中,所述步骤S120还包括:判断所述读取的数据的头部数据特征码是否为参数特征码,若否,则执行步骤S200;所述S20:NAND存储器中系统启动代码的读取方法中,所述步骤S210之前还包括:步骤S200判断所述读取的数据是否为所述系统启动代码数据,若是,则继续执行步骤S210,若否,则反馈所述错误信息给芯片启动代码,并执行步骤S410;所述基于NAND存储器的系统启动方法,还包括S40:芯片启动代码接到错误信息反馈时的操作方法,包括步骤:步骤S410芯片启动代码跳到另一个启动设备进行系统启动。

进一步优选地,所述S20:NAND存储器中系统启动代码的读取方法中,所述步骤S210和所述步骤S230之间还包括步骤:步骤S220若所述系统启动代码数据读取失败,判断是否可以通过所述预设的ECC和通用Retry Level成功读取所述系统启动代码数据,若还是读取失败,则执行步骤S230,若读取成功,则执行步骤S250。

进一步优选地,所述S20:NAND存储器中系统启动代码的读取方法中,还包括:步骤S260若所述系统启动代码无法成功读取,则反馈所述错误信息给芯片启动代码,并执行步骤S410。

进一步优选地,还包括S30:系统启动后的Retry命令序列参数的烧录方法,包括步骤:步骤S300当系统启动后,根据芯片启动代码的规则依次读取系统内存中的Retry命令序列参数,若没有读取到所述Retry命令序列参数,则执行步骤S310;步骤S310读取NAND存储器的ID;步骤S320根据读取的所述NAND存储器的ID,获取对应的所述Retry命令序列参数并保存在系统内存中;步骤S340对系统内存中的所述Retry命令序列参数进行crc计算并校验,若校验正确,则在系统内存中读取数据出错时,按照所述Retry命令序列参数重新读取数据,若校验不正确,则执行步骤S310;步骤S350若读取了所述NAND存储器的ID,并获取了对应的所述Retry命令序列参数,在校验正确后,根据芯片启动代码的规则,把所述校验正确后的Retry命令序列参数依次存入NAND存储器的各个page中进行参数备份。

进一步优选地,所述S30:系统启动后的Retry命令序列参数的烧录方法中,所述步骤S320具体包括:步骤S321根据读取的所述NAND存储器的ID,获取对应的Retry规则;步骤S322将所述Retry规则根据预设规则转化为对应的Retry参数序列;步骤S323根据所述Retry参数序列,依次设置对应的Retry Level;步骤S324将所述Retry Level转化为对应的NAND控制器的Retry命令序列参数。

进一步优选地,所述S30:系统启动后的Retry命令序列参数的烧录方法中,所述步骤S320和所述步骤S340之间还包括:步骤S330计算所述Retry命令序列参数的第一crc,并把计算的所述第一crc放在所述Retry命令序列参数的头部。

进一步优选地,所述S30:系统启动后的Retry命令序列参数的烧录方法中,所述步骤S340中对所述Retry命令序列参数进行crc计算并校验具体包括:步骤S341计算系统内存中的所述Retry命令序列参数的第二crc;步骤S342获取所述系统内存中的Retry命令序列参数中的头部的所述第一crc;步骤S343将所述第一crc与所述第二crc进行比较,若一致,则校验正确,若不一致,则校验不正确。

本发明还提供一种系统,包括:NAND存储器、中央处理器、系统内存;所述NAND存储器与所述中央处理器电连接;所述系统内存与所述中央处理器电连接;所述NAND存储器包括:page,存储有参数,以及,系统启动代码;其中,所述参数包括:Retry命令序列参数;所述系统内存,进一步用于若从NAND存储器多个参数备份的page里读取的所述Retry命令序列参数进行crc校验正确,则将所述Retry命令序列参数保存到系统内存中;所述中央处理器包括:数据读取模块,从所述NAND存储器多个参数备份的page里,根据芯片启动代码的规则依次读取数据;若读取数据失败,则继续从下一个page里读取数据;以及,从NAND存储器烧录有系统启动代码的page里,根据芯片启动代码的规则依次读取所述系统启动代码;以及,若所述系统启动代码读取失败,则根据所述Retry命令序列参数设置的新的Retry Level再次读取NAND存储器中的所述系统启动代码;其中,所述芯片启动代码包括:预设的ECC、格式和通用Retry Level;所述芯片启动代码的规则包括:预设的ECC和格式;数据判断模块,检查所述读取的数据是否是全ff;以及,若所述读取的数据不是全ff,则进一步判断所述读取的数据的头部数据特征码是否为参数特征码;计算校验模块,对NAND存储器多个参数备份的page里读取的所述Retry命令序列参数进行crc计算并校验;设置模块,若所述系统启动代码读取失败,则根据NAND存储器中读取的所述Retry命令序列参数设置新的Retry Level;启动模块,当成功将NAND存储器中的所述系统启动代码读完后,跳到所述系统内存中完成系统启动。

进一步优选地,所述数据判断模块,若所述读取的数据的头部数据特征码不是参数特征码时,进一步用于判断所述读取的数据是否为所述系统启动代码数据;所述中央处理器还包括:错误反馈模块,若所述读取的数据不是所述系统启动代码,则反馈所述错误信息给芯片启动代码;所述启动模块,进一步用于若接收到所述错误信息,芯片启动代码跳到另一个启动设备进行系统启动。

进一步优选地,所述中央处理器还包括:读取判断模块,若所述系统启动代码数据读取失败,所述读取判断模块判断是否可以通过所述预设的ECC和通用Retry Level成功读取所述系统启动代码数据。

进一步优选地,错误反馈模块,进一步用于若所述系统启动代码无法成功读取,则反馈所述错误信息给芯片启动代码。

进一步优选地,所述数据读取模块,当系统启动后,进一步用于根据芯片启动代码的规则依次读取系统内存中的Retry命令序列参数;以及,若没有读取到所述Retry命令序列参数,则读取NAND存储器的ID;以及,若系统内存中的所述Retry命令序列参数进行crc校验正确时,在系统内存中读取数据出错时,按照所述Retry命令序列参数重新读取数据;所述中央处理器还包括:参数获取模块,若系统内存中没有读取到所述Retry命令序列参数或对系统内存中的所述Retry命令序列参数进行crc检验不正确时,根据读取的所述NAND存储器的ID,获取对应的所述Retry命令序列参数;所述计算校验模块,进一步用于对系统内存中的所述Retry命令序列参数进行crc计算并校验;所述系统内存,进一步用于将根据读取的所述NAND存储器的ID获取的对应的所述Retry命令序列参数保存到所述系统内存中;所述page,若读取了所述NAND存储器的ID,并获取了对应的所述Retry命令序列参数,在校验正确后,进一步用于根据芯片启动代码的规则,把校验正确后的所述Retry命令序列参数依次存入NAND存储器的各个page中进行参数备份。

进一步优选地,所述参数获取模块具体包括:规则获取子模块,根据读取的所述NAND存储器的ID,获取对应的Retry规则;序列转化子模块,将所述Retry规则根据预设规则转化为对应的Retry参数序列;设置子模块,根据所述Retry参数序列,依次设置对应的Retry Level;参数转化子模块,将所述Retry Level转化为对应的NAND控制器的Retry命令序列参数。

进一步优选地,所述计算校验模块,进一步用于计算所述Retry命令序列参数的第一crc,并把计算的所述第一crc放在所述Retry命令序列参数的头部。

进一步优选地,所述计算校验模块包括:计算子模块,计算系统内存中的所述Retry命令序列参数的第二crc;获取子模块,获取所述系统内存中的Retry命令序列参数中的头部的所述第一crc;检验子模块,将所述第一crc与所述第二crc进行比较,若一致,则校验正确,若不一致,则校验不正确。

与现有技术相比,本发明的有益效果在于:

1、本发明的NAND存储器中存储有其适应其自身的Retry命令序列参数,在读取NAND存储器的数据(例如:系统启动代码)出错、无法通过芯片启动代码中的ECC及通用Retry Level进行数据校正、恢复时,可以根据NAND存储器中保存的Retry命令序列参数设置新的Retry Level,从而在Read Retry模式中,重新读取NAND存储器中的数据,提高了固有的芯片启动代码对不同的NAND存储器的兼容性,也降低了NAND存储器无法正常启动的概率。

2、在读取NAND存储器中的数据时,需要解析到最后才能知道读取的数据的类型,一般来说,由于NAND存储器中存有针对其自身型号的Retry命令序列参数,因此,第一步会先对读取的数据进行判断,检索NAND存储器中是否存在此Retry命令序列参数,如果存在的话,就先读取这个Retry命令序列参数,校验正确后将其保存到系统内存中,然后再读取NAND存储器中的系统启动代码,若读取出错,就根据读取到的Retry命令序列参数设置新的Retry Level,重新读取系统启动代码,完成数据的Read Retry;若读取的数据是系统启动代码,则说明NAND存储器中没有与其对应的Retry命令序列参数,只能先读取系统启动代码、使系统启动后,在后续过程中根据NAND存储器的ID得到其对应的Retry命令序列参数后,再备份到NAND存储器的page中。这样在下次从此NAND存储器进行系统启动时,就可以用此Retry命令序列参数进行Read Retry,提高系统对NAND存储器的兼容性。

3、在芯片启动代码中有预设的ECC和通用Retry Level,在读取NAND存储器的数据出错时,会根据情况通过预设的ECC和通用Retry Level进行校正,这里的通用Retry Level是因化在芯片启动代码中的,并不是根据NAND存储器的ID量身打造的,因此,对于一些新出的或比较冷门的NAND存储器没用,若读取数据出错时,无法通过预设的ECC进行校正的话,可能也无法利用通用Retry Level进行Read Retry,也就无法从NAND存储器中读取正确的数据,导致NAND存储器无法正常启动,也可以理解为NAND存储器不兼容。

4、在通过NAND存储器进行系统启动过程中,若NAND存储器中读取的数据既不是Retry命令序列参数也不是系统启动代码,则说明操作过程中存在错误,也就无法从NAND存储器进行系统启动,这时候就会反馈错误信息给芯片启动代码,保证芯片启动代码可以从另一个启动设备进行系统启动。

5、当系统启动后,会先根据芯片启动代码的规则读取先前保存在系统内存中的Retry命令序列参数,若没有讲到此Retry命令序列参数,则说明NAND存储器中没有与其对应的Retry命令序列参数,因此,会读取当前NAND存储器的ID,获取其对应的Retry命令序列参数,先保存在系统内存中,然后经过计算并校验正确后,再将其备份到NAND存储器的page中。当下次从此NAND存储器进行系统启动时,当读取其存储的数据出错又无法通过预设的ECC和通用Retry Level进行校正时,可以多一种数据读取、校正方法,即通过此Retry命令序列参数进行Read Retry,提高NAND存储器与芯片启动代码的兼容性。

6、根据NAND存储器的ID,首先获取的Retry规则,每个NAND存储器的Retry规则会有所不同,因此需要将它们根据预设的规则转换成同一格式的Retry参数序列;转换成相同规则的Retry参数序列后,就可以设置对应的Retry Level,由于从NAND存储器中读取数据需要芯片中对应的NAND存储器的控制器进行控制,因此,需要将此Retry Level再次转换为此控制器可以识别的Retry命令序列参数进行保存;当Retry命令序列参数经过校验正确后,在读取数据出错时,NAND存储器的控制器可以执行此Retry命令序列参数,设置新的Retry Level重新读取数据,完成Read Retry。

7、当系统启动后,会再次对系统内存中的Retry命令序列参数进行计算其的第一crc,并把此第一crc放在Retry命令序列参数的头部,为后续读取到此Retry命令序列参数时进行计算并校验时,提供比对基础。

8、在系统内存中读取到Retry命令序列参数时,会先计算读取到的Retry命令序列参数的第二crc,然后再将此第二crc与Retry命令序列参数的头部的第一crc进行比较,若一致,则校验正确;在芯片启动代码读取NAND存储器中的Retry命令序列参数时,进行计算并校验的过程与此相似。

本发明的基于NAND存储器的系统启动方法及系统,根据NAND存储器的ID,将其对应的Retry命令序列参数备份到NAND存储器的各个page中,在系统启动过程中,若读取NAND存储器中的数据出错,又无法通过预设的ECC和通用Retry Level校正的情况下,多了一种保证读取数据成功的方法,利用与NAND存储器本身对应的Retry命令序列参数设置新的Retry Level,重新读取数据,进行Read Retry,大大提高了固有的芯片启动代码对NAND存储器的兼容性,从而解决在一些使用场景下,由于没有合适的Retry命令序列参数而导致从NAND存储器进行系统启动失败的情况。

附图说明

下面将以明确易懂的方式,结合附图说明优选实施方式,对一种基于NAND存储器的系统启动方法及系统的上述特性、技术特征、优点及其实现方式予以进一步说明。

图1是本发明基于NAND存储器的系统启动方法一个实施例的流程图;

图2是本发明基于NAND存储器的系统启动方法另一个实施例的流程图;

图3是本发明基于NAND存储器的系统启动方法另一个实施例的流程图;

图4是本发明系统一个实施例的结构示意图;

图5是本发明系统另一个实施例的结构示意图。

附图标号说明:

100.NAND存储器,110.page,200.中央处理器,210.数据读取模块,220.数据判断模块,230.计算校验模块,231.计算子模块,232.获取子模块,233.校验子模块,240.设置模块,250.启动模块,260.错误反馈模块,270.读取判断模块,280.参数获取模块,281.规则获取子模块,282.序列转化子模块,283.设置子模块,284.参数转化子模块,300.系统内存。

具体实施方式

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。

为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。

在本发明的一个实施例中,如图1所示,一种基于NAND存储器的系统启动方法,包括S10:NAND存储器中Retry命令序列参数的读取方法,包括步骤:步骤S100上电后,从NAND存储器多个参数备份的page里,根据芯片启动代码的规则依次读取数据,若读取数据成功,则执行步骤S110;所述步骤S100还包括:步骤S101若读取数据失败,则继续从下一个page里读取数据;其中,所述芯片启动代码包括:预设的ECC、格式和通用Retry Level;所述芯片启动代码的规则是指:预设的ECC和格式;所述参数包括:所述Retry命令序列参数;步骤S110检查所述读取的数据是否是全ff,若是,则执行步骤S101,若否,则执行步骤S120;步骤S120判断所述读取的数据的头部数据特征码是否为参数特征码,若是,则所述读取的数据为Retry命令序列参数,执行步骤S130;步骤S130对NAND存储器多个参数备份的page里读取的所述Retry命令序列参数进行crc计算并校验,若校验正确,则将所述Retry命令序列参数保存到系统内存中,并执行步骤S210;若校验不正确,则未获取正确的所述Retry命令序列参数,直接执行步骤S210;S20:NAND存储器中系统启动代码的读取方法,包括步骤:步骤S210从NAND存储器烧录有系统启动代码的page里,根据芯片启动代码的规则依次读取所述系统启动代码;步骤S230若所述系统启动代码读取失败,则根据NAND存储器中读取的所述Retry命令序列参数设置新的Retry Level;步骤S240根据所述新的Retry Level再次读取NAND存储器中的所述系统启动代码;步骤S250当成功将NAND存储器中的所述系统启动代码读完后,跳到系统内存中完成系统启动。

具体的,NAND存储器的数据存储结构分层为:块(block),块又分为页(page),可以理解为1设备(device)=A块(block);1块=B页/行(page/row);1页=C字节=数据区域(D字节)+冗余区域(E字节),这里的A/B/C/D/E是指代数字。由于NAND存储器的多样性,其block的数量不一样,导致后续的page大小也不固定,为了简化芯片启动代码,控制NAND存储器的芯片启动代码多采用page short mode,page short mode是指每个page并不写满,比如一个8K大小的page,只写入1K的有效数据,同样4K、16K等的page都按照1K写入有效数据,这样根据芯片启动代码读取NAND存储器中的数据时并不需要读取NAND的ID来确认page的大小,而只要依次每个page读1K的数据就可以保证有效数据的读取。根据芯片启动代码的规则中的格式,就可以理解为在每个page中读取1K的数据这种方式来读取NAND存储器中的数据。

从NAND存储器进行的系统启动,在上电后,首先是想要读取NAND存储器中的Retry命令序列参数,读取到数据后,先会判断读取的数据是否是全ff,全ff意味着并没有读取到有效数据,即当前的page并没有写入数据,因此需要快速跳到另外block中的page里重新读取数据,具体的操作过程例如:可以将page跳跃128个后再读取数据。

虽然一开始想要读取的是Retry命令序列参数,但是只有当读取的数据解析到最后时才知道它的数据类型,若它的头部数据特征码为参数特征码,则说明读取的数据为Retry命令序列参数;这时候,就会对读取的Retry命令序列参数进行crc(Cyclic Redundancy Check,循环冗余校验)计算,即计算从NAND存储器中读取的Retry命令序列参数的第二crc,并与其头部中的第一crc进行比较,若一致,则校验成功,这一步的校验是为了保证读取到的Retry命令序列参数的正确性,只有它正确才能保证后续利用此Retry命令序列参数进行Read Retry的时候成功读取数据。在校验正确后,会将此Retry命令序列参数保存到系统内存中,为后续系统启动后读取数据出错时提供Read Retry的机会。crc是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。

当成功获取到正确的Retry命令序列参数后,会继续读取存储在NAND存储器中的系统启动代码,在读取系统启动代码出错时,会根据读取到的Retry命令序列参数进入Read Retry模式,根据读取到的Retry命令序列参数设置新的Retry Level,再用这些新的Retry Level来尝试重新读取系统启动代码,由于这里的Retry命令序列参数是特别针对当前NAND存储器本身而存在的,因此读取数据成功的机率大大提高;当成功将NAND存储器中的所述系统启动代码读完后,就跳到系统内存中完成系统启动。

优选地,所述S10:NAND存储器中Retry命令序列参数的读取方法中,所述步骤S120还包括:判断所述读取的数据的头部数据特征码是否为参数特征码,若否,则执行步骤S200;所述S20:NAND存储器中系统启动代码的读取方法中,所述步骤S210之前还包括:步骤S200判断所述读取的数据是否为所述系统启动代码数据,若是,则继续执行步骤S210,若否,则反馈所述错误信息给芯片启动代码,并执行步骤S410;所述基于NAND存储器的系统启动方法,还包括S40:芯片启动代码接到错误信息反馈时的操作方法,包括步骤:步骤S410芯片启动代码跳到另一个启动设备进行系统启动。

具体的,当对上电后一开始从NAND存储器中读取的数据进行判断,发现它不是Retry命令序列参数,而是系统启动代码时,则说明NAND存储器中不存在与此NAND存储器相适应的Retry命令序列参数,跳过读取Retry命令序列参数的步骤,直接读取系统启动代码;若发现读取的数据既不是Retry命令序列参数,也不是系统启动代码,则说明读取数据出现错误,因此,需要将错误信息反馈给芯片启动代码,让芯片启动代码从另一个启动设备进行系统启动。

优选地,所述S20:NAND存储器中系统启动代码的读取方法中,所述步骤S210和所述步骤S230之间还包括步骤:步骤S220若所述系统启动代码数据读取失败,判断是否可以通过所述预设的ECC和通用Retry Level成功读取所述系统启动代码数据,若还是读取失败,则执行步骤S230,若读取成功,则执行步骤S250。

具体的,芯片启动代码中包括了预设的ECC和通用Retry Level,当从NAND存储器中读取数据(系统启动代码也是数据的一种)出错时,会先通过预设的ECC进行校正,若不行,会再通过通用Retry Level重新读取数据,预设的ECC和通用Retry Level都是包含在芯片启动代码中的,而芯片启动代码是固化的,不管有没有读取到NAND存储器自适应的Retry命令序列参数,都会通过预设的ECC和通用Retry Level进行数据校正,若通过此读取数据成功,则无需利用读取的Retry命令序列参数重新读取数据。

优选地,S20:NAND存储器中系统启动代码的读取方法中,还包括:步骤S260若所述系统启动代码无法成功读取,则反馈所述错误信息给芯片启动代码,并执行步骤S410。

具体的,即使有适应NAND存储器本身的Retry命令序列参数,也不能保证每次一定能成功读取NAND存储器中的数据。因此,在从NAND存储器进行系统启动时,若碰到无法成功读取NAND存储器中的系统启动代码时,会将错误信息反馈芯片启动代码,当芯片启动接收到错误信息反馈时,会及时从下一个启动设备进行启动,保证成功启动系统。

优选地,还包括S30:系统启动后的Retry命令序列参数的烧录方法,包括步骤:步骤S300当系统启动后,根据芯片启动代码的规则依次读取系统内存中的Retry命令序列参数,若没有读取到所述Retry命令序列参数,则执行步骤S310;步骤S310读取NAND存储器的ID;步骤S320根据读取的所述NAND存储器的ID,获取对应的所述Retry命令序列参数并保存在系统内存中;步骤S340对系统内存中的所述Retry命令序列参数进行crc计算并校验,若校验正确,则在系统内存中读取数据出错时,按照所述Retry命令序列参数重新读取数据,若校验不正确,则执行步骤S310;步骤S350根据芯片启动代码的规则,把所述Retry命令序列参数依次存入NAND存储器的各个page中进行参数备份。

优选地,所述S30:系统启动后的Retry命令序列参数的烧录方法中,所述步骤S320具体包括:步骤S321根据读取的所述NAND存储器的ID,获取对应的Retry规则;步骤S322将所述Retry规则根据预设规则转化为对应的Retry参数序列;步骤S323根据所述Retry参数序列,依次设置对应的Retry Level;步骤S324将所述Retry Level转化为对应的NAND控制器的Retry命令序列参数。

具体的,上述S30:系统启动后的Retry命令序列参数的烧录方法是中系统内存中运行的,此与前面在NAND存储器中读取数据(例如:Retry命令序列参数和系统启动代码)时的运行空间不同,因此,在系统启动后,会再次读取系统内存中的Retry命令序列参数,并进行计算及校验,校验正确后,在后续系统内存中读取数据出错时,利用此Retry命令序列参数设置新的Retry Level来重新读取数据,提高数据读取的成功率。当没有读取到系统内存中的Retry命令序列参数,说明在前面读取NAND存储器中的数据时没有读取到或者没有读取到正确的Retry命令序列参数,因此需要将与NADN存储器的ID对应的Retry命令序列参数烧录到NAND存储器中,具体的步骤为:

读取当前系统中NAND存储器的ID,然后根据此ID获取对应的Retry规则,每个NAND存储器都有其自己的规则,需要将它们转换为同一种规则才可以实现后续的操作;故,将获取的Retry规则根据预设规则转化为对应的Retry参数序列,这里的预设规则是本领域技术人员通用的规则,在这里不做具体描述;然后就可以根据此Retry参数序列依次设置对应的Retry Level,为后续数据读取出错时,进行Read Retry模式打下基础;之所以要将Retry Level转换为NAND控制器(NAND存储器的控制器)对应的Retry命令序列参数是因为NAND存储器是需要由NAND控制器来控制读写数据的,因此,需要转换成NAND控制器可以识别的代码(即,Retry命令序列参数),在获取了NAND存储器对应的Retry命令序列参数后,需要将此Retry命令序列参数保存在系统内存中,为后续进行校验提供基础。系统内存中的数据都是芯片启动代码从NAND存储器搬运到系统内存中的,这些的数据的规则也符合NAND存储器中的规则,因此,在系统内存中读取这些数据出错时,可以通过Retry命令序列参数对其进行Read Retry。

当读取到系统内存中的Retry命令序列参数时,需要对其进行crc计算并校验,因系统启动前和系统启动后的运行空间不同,在搬运数据过程中也可能出错,导致数据丢失等问题,所以这里需要再次对读取到的Retry命令序列参数进行校验,保证其正确性。若校验正确,则在后续系统内存中读取数据出错时,可以通过此Retry命令序列参数进入Read Retry模式,重新读取数据,提高系统读取数据的成功率。

有两种情况需要对NAND存储器烧录Retry命令序列参数,一种是NAND存储器当中本身就没有Retry命令序列参数,即在系统启动后,按照芯片启动代码的规则依次读取系统内存中的Retry命令序列参数,但没有读取到所述Retry命令序列参数;另一种是在系统内存中读取到了Retry依次读取系统内存中的Retry命令序列参数,若没有读取到所述Retry命令序列参数,但在后续计算校验过程中校验不正确,这种情况也是需要对NAND存储器重新烧录Retry命令序列参数。总的来说,就是经过了查找NAND存储器的ID,并获取了对应的Retry命令序列参数并经过校验正确后,就需要向NAND存储器各个page存储此校验正确后的Retry命令序列参数进行参数备份。

优选地,所述S30:系统启动后的Retry命令序列参数的烧录方法中,所述步骤S320和所述步骤S340之间还包括:步骤S330计算所述Retry命令序列参数的第一crc,并把计算的所述第一crc放在所述Retry命令序列参数的头部。

优选地,所述S30:系统启动后的Retry命令序列参数的烧录方法中,所述步骤S340中对所述Retry命令序列参数进行crc计算并校验具体包括:步骤S341计算系统内存中的所述Retry命令序列参数的第二crc;步骤S342获取所述系统内存中的Retry命令序列参数中的头部的所述第一crc;步骤S343将所述第一crc与所述第二crc进行比较,若一致,则校验正确,若不一致,则校验不正确。

具体的,当获取了NAND存储器的ID对应的Retry命令序列参数,需要计算其第一crc并放在其头部,为后续进行crc计算并校验提供比对基础。

对在系统内存中读取到的Retry命令序列参数进行crc计算,得到第二crc,并把这第二crc跟Retry命令序列参数头部中的第一crc比较,若一致,则校验正确,确定当前读取的Retry命令序列参数是正确的参数,保证了后续数据读取出错时可以有正确的Retry Level来重新读取。

在本发明的另一个实施例中,如图2、图3所示,一种基于NAND存储器的系统启动方法,包括S10:NAND存储器中Retry命令序列参数的读取方法,包括步骤:步骤S100上电后,从NAND存储器多个参数备份的page里,根据芯片启动代码的规则依次读取数据,若读取数据成功,则执行步骤S110;所述步骤S100还包括:步骤S101若读取数据失败,则继续从下一个page里读取数据;其中,所述芯片启动代码包括:预设的ECC、格式和通用Retry Level;所述芯片启动代码的规则是指:预设的ECC和格式;所述参数包括:所述Retry命令序列参数;步骤S110检查所述读取的数据是否是全ff,若是,则执行步骤S101,若否,则执行步骤S120;步骤S120判断所述读取的数据的头部数据特征码是否为参数特征码,若是,则所述读取的数据为Retry命令序列参数,执行步骤S130,若否,则执行步骤S200;步骤S130对NAND存储器多个参数备份的page里读取的所述Retry命令序列参数进行crc计算并校验,若校验正确,则将所述Retry命令序列参数保存到系统内存中,并执行步骤S210;若校验不正确,则未获取正确的所述Retry命令序列参数,直接执行步骤S210;S20:NAND存储器中系统启动代码的读取方法,包括步骤:步骤S200判断所述读取的数据是否为所述系统启动代码数据,若是,则继续执行步骤S210,若否,则反馈所述错误信息给芯片启动代码,并执行步骤S410;步骤S210从NAND存储器烧录有系统启动代码的page里,根据芯片启动代码的规则依次读取所述系统启动代码;步骤S220若所述系统启动代码数据读取失败,判断是否可以通过所述预设的ECC和通用Retry Level成功读取所述系统启动代码数据,若还是读取失败,则执行步骤S230,若读取成功,则执行步骤S250;步骤S230若所述系统启动代码读取失败,则根据NAND存储器中读取的所述Retry命令序列参数设置新的Retry Level;步骤S240根据所述新的Retry Level再次读取NAND存储器中的所述系统启动代码;步骤S250当成功将NAND存储器中的所述系统启动代码读完后,跳到系统内存中完成系统启动;步骤S260若所述系统启动代码无法成功读取,则反馈所述错误信息给芯片启动代码,并执行步骤S410;S30:系统启动后的Retry命令序列参数的烧录方法,包括步骤:步骤S300当系统启动后,根据芯片启动代码的规则依次读取系统内存中的Retry命令序列参数,若没有读取到所述Retry命令序列参数,则执行步骤S310;步骤S310读取NAND存储器的ID;步骤S320根据读取的所述NAND存储器的ID,获取对应的所述Retry命令序列参数并保存在系统内存中;所述步骤S320具体包括:步骤S321根据读取的所述NAND存储器的ID,获取对应的Retry规则;步骤S322将所述Retry规则根据预设规则转化为对应的Retry参数序列;步骤S323根据所述Retry参数序列,依次设置对应的Retry Level;步骤S324将所述Retry Level转化为对应的NAND控制器的Retry命令序列参数;步骤S330计算所述Retry命令序列参数的第一crc,并把计算的所述第一crc放在所述Retry命令序列参数的头部;步骤S340对系统内存中的所述Retry命令序列参数进行crc计算并校验,若校验正确,则在系统内存中读取数据出错时,按照所述Retry命令序列参数重新读取数据,若校验不正确,则执行步骤S310;所述步骤S340中对所述Retry命令序列参数进行crc计算并校验具体包括:步骤S341计算系统内存中的所述Retry命令序列参数的第二crc;步骤S342获取所述系统内存中的Retry命令序列参数中的头部的所述第一crc;步骤S343将所述第一crc与所述第二crc进行比较,若一致,则校验正确,若不一致,则校验不正确;步骤S350若读取了所述NAND存储器的ID,并获取了对应的所述Retry命令序列参数,在校验正确后,根据芯片启动代码的规则,把所述校验正确后的Retry命令序列参数依次存入NAND存储器的各个page中进行参数备份;S40:芯片启动代码接到错误信息反馈时的操作方法,包括步骤:步骤S410芯片启动代码跳到另一个启动设备进行系统启动。

具体的,在NAND存储器中烧录其自身对应的Retry命令序列参数,使芯片启动代码能够更好地兼容不同的NAND存储器,并且在无需改变芯片启动代码的情况下,能够很好地兼容各种新出的NAND存储器,使其Read Retry能够正常工作,在对应的Retry Level下重新读取数据,提高NAND存储器中数据读取的成功率,解决在某些从NAND存储器进行系统启动的场景下,由于无法进行对应的Read Retry(即NAND存储器中没有对应的Retry命令序列参数)而导致系统启动失败的情况。

在本发明的另一个实施例中,如图4所示,一种系统,包括:NAND存储器100、中央处理器200、系统内存300;所述NAND存储器100与所述中央处理器200电连接;所述系统内存300与所述中央处理器200电连接;所述NAND存储器100包括:page 110,存储有参数,以及,系统启动代码;其中,所述参数包括:Retry命令序列参数;所述系统内存300,进一步用于若从NAND存储器100多个参数备份的page里读取的所述Retry命令序列参数进行crc校验正确,则将所述Retry命令序列参数保存到系统内存300中;所述中央处理器200包括:数据读取模块210,从所述NAND存储器100多个参数备份的page里,根据芯片启动代码的规则依次读取数据;若读取数据失败,则继续从下一个page里读取数据;以及,从NAND存储器100烧录有系统启动代码的page里,根据芯片启动代码的规则依次读取所述系统启动代码;以及,若所述系统启动代码读取失败,则根据所述Retry命令序列参数设置的新的Retry Level再次读取NAND存储器中的所述系统启动代码;其中,所述芯片启动代码包括:预设的ECC、格式和通用Retry Level;所述芯片启动代码的规则包括:预设的ECC和格式;数据判断模块220,检查所述读取的数据是否是全ff;以及,若所述读取的数据不是全ff,则进一步判断所述读取的数据的头部数据特征码是否为参数特征码;计算校验模块230,对NAND存储器多个参数备份的page里读取的所述Retry命令序列参数进行crc计算并校验;设置模块240,若所述系统启动代码读取失败,则根据NAND存储器中读取的所述Retry命令序列参数设置新的Retry Level;启动模块250,当成功将NAND存储器中的所述系统启动代码读完后,跳到所述系统内存中完成系统启动。

具体的,中央处理器可以理解为CPU(Central Processing Unit),是一块集成的芯片,芯片启动代码是固化在CPU中的,CPU与NAND存储器电连接,CPU中包含了NAND存储器的控制器,可以在此NAND存储器的控制器的控制下读取NAND存储器中的数据。

NAND存储器中存储有与它型号对应的Retry命令序列参数,首先读取此Retry命令序列参数,经过校验正确后,再读取NAND存储器中存储的系统启动代码,若系统启动代码读取出错,CPU就根据此Retry命令序列参数设置新的Retry Level,进入Read Retry模式,在新的Retry Level下重新读取数据。

优选地,所述数据判断模块220,若所述读取的数据的头部数据特征码不是参数特征码时,进一步用于判断所述读取的数据是否为所述系统启动代码数据;所述中央处理器还包括:错误反馈模块260,若所述读取的数据不是所述系统启动代码,则反馈所述错误信息给芯片启动代码;所述启动模块,进一步用于若接收到所述错误信息,芯片启动代码跳到另一个启动设备进行系统启动。

具体的,虽然一开始想要读取NAND存储器中的数据为Retry命令序列参数,但是读取的数据需要解析到最后才知道它的数据类型,当读取的数据是系统启动代码数据时,说明NAND存储器中未包含有它特定的Retry命令序列参数,那就跳过读取Retry命令序列参数的步骤,直接读取NAND存储器中系统启动代码;若读取的数据既不是Retry命令序列参数,也不是系统启动代码(系统启动代码本身也是一种数据,因此它和系统启动代码数据的意义等同),则说明读取数据过程中遇到了不可修正的错误,需要将错误信息反馈给芯片启动代码,让它即时做出相应的操作。在从NAND存储器进行系统启动时,若在启动过程中,芯片启动代码接收到了错误信息,就会选择跳到另一个启动设备进行系统启动。

优选地,所述中央处理器200还包括:读取判断模块270,若所述系统启动代码数据读取失败,所述读取判断模块判断是否可以通过所述预设的ECC和通用Retry Level成功读取所述系统启动代码数据。

具体的,芯片启动代码中本身就包含有预设的ECC和通用Retry Level,这是为了在碰到数据读取出错时,可以进行及时的校正或用此通用Retry Level重新读取数据。通用Retry Level是针对大部分NAND存储器,而对于新出的NAND存储器可能无法有效地进行数据恢复,因此,为了提高芯片启动代码对各种NAND存储器的兼容性,会在其page里烧录其特定的Retry命令序列参数。

优选地,错误反馈模块260,进一步用于若所述系统启动代码无法成功读取,则反馈所述错误信息给芯片启动代码。

具体的,在读取NAND存储器中的数据出错后,且无法进行修复的情况下,会反馈错误信息给芯片启动代码,让它能够及时做出后续的操作。读取NAND存储器中的数据出错有多种情况,例如:一开始就无法读取NAND存储器中的数据;可以读取NAND存储器中Retry命令序列参数,但在读取系统启动代码时出错,又无法通过各种途径校正,保证成功读取所有的芯片启动代码等,在这些情况下,芯片启动代码都会接收到反馈的错误信息。

优选地,所述数据读取模块210,当系统启动后,进一步用于根据芯片启动代码的规则依次读取系统内存中的Retry命令序列参数;以及,若没有读取到所述Retry命令序列参数,则读取NAND存储器的ID;以及,若系统内存中的所述Retry命令序列参数进行crc校验正确时,在系统内存中读取数据出错时,按照所述Retry命令序列参数重新读取数据;所述中央处理器200还包括:参数获取模块280,若系统内存中没有读取到所述Retry命令序列参数或对系统内存中的所述Retry命令序列参数进行crc检验不正确时,根据读取的所述NAND存储器的ID,获取对应的所述Retry命令序列参数;所述计算校验模块230,进一步用于对系统内存中的所述Retry命令序列参数进行crc计算并校验;所述系统内存300,进一步用于将根据读取的所述NAND存储器的ID获取的对应的所述Retry命令序列参数保存到所述系统内存中;所述page,若读取了所述NAND存储器的ID,并获取了对应的所述Retry命令序列参数,在校验正确后,进一步用于根据芯片启动代码的规则,把校验正确后的所述Retry命令序列参数依次存入NAND存储器的各个page中进行参数备份。

具体的,从NAND存储器中读取系统启动代码成功后,就会跳到系统内存中进行系统启动,从NAND存储器中读取系统启动代码可以理解为将NAND存储器中的系统启动代码保存到系统内存,为后续的系统启动打下基础。

系统启动后,会读取先前保存在系统内存中的Retry命令序列参数,若成功读取到Retry命令序列参数,则会对它进行计算及校验,只有校验正确,才会在后续读取数据出错时用此Retry命令序列参数重新读取数据。前面从NAND存储器中读取Retry命令序列参数时也会进行计算及校验,这是由芯片启动代码完成的,而系统内存中读取的Retry命令序列参数是由系统启动代码完成的,这两者的运行空间不同的,因此,两者并不重复。

若没有在系统内存中读取到Retry命令序列参数,则说明NAND存储器中没有它对应的Retry命令序列参数,因此,需要读取NAND存储器的ID,获取它的ID对应的Retry命令序列参数,然后将其保存在系统内存中,为后续对系统内存中读取到的Retry命令序列参数进行crc校验提供基础。

只要读取了NAND存储器的ID,并获取了对应的Retry命令序列参数,就说明NAND存储器中无Retry命令序列参数或者保存的Retry命令序列参数不正确,需要重新烧录进正确的Retry命令序列参数;因此,在读取了所述NAND存储器的ID,并获取了对应的所述Retry命令序列参数,在校验正确后,会把校验正确后的Retry命令序列参数保存到NAND存储器的各个page中进行参数备份。

优选地,所述参数获取模块280具体包括:规则获取子模块281,根据读取的所述NAND存储器的ID,获取对应的Retry规则;序列转化子模块282,将所述Retry规则根据预设规则转化为对应的Retry参数序列;设置子模块283,根据所述Retry参数序列,依次设置对应的Retry Level;参数转化子模块284,将所述Retry Level转化为对应的NAND控制器的Retry命令序列参数。

具体的,每个NAND存储器的规则不同,因此,需要将其对应的Retry规则按照预设的规则转化为同一种规则的Retry参数序列,然后根据此Retry参数序列,依次设置对应的Retry Level,方便后续数据读取出错后,用此Retry Level重新读取数据。

优选地,所述计算校验模块230,进一步用于计算所述Retry命令序列参数的第一crc,并把计算的所述第一crc放在所述Retry命令序列参数的头部。

优选地,所述计算校验模块230包括:计算子模块231,计算系统内存中的所述Retry命令序列参数的第二crc;获取子模块232,获取所述系统内存中的Retry命令序列参数中的头部的所述第一crc;检验子模块233,将所述第一crc与所述第二crc进行比较,若一致,则校验正确,若不一致,则校验不正确。

具体的,在获取了Retry命令序列参数后,会计算其第一crc,并把此第一crc放在头部,为后续校验提供了基础。

而在对Retry命令序列参数进行校验过程中,会先计算它的第二crc,再将第二crc和第一crc进行比较,若一致,则说明读取的Retry命令序列参数是正确的,没有在传输过程中发生错误,可以利用此Retry命令序列参数在后续数据读取出错时进行Read Retry。

在本发明的另一个实施例中,如图5所示,一种系统,包括:NAND存储器100、中央处理器200、系统内存300;所述NAND存储器200与所述中央处理器200电连接;所述系统内存300与所述中央处理器200电连接;所述NAND存储器100包括:page 110,存储有参数,以及,系统启动代码;其中,所述参数包括:Retry命令序列参数;若读取了所述NAND存储器的ID,并获取了对应的所述Retry命令序列参数,在校验正确后,进一步用于根据芯片启动代码的规则,把校验正确后的所述Retry命令序列参数依次存入NAND存储器的各个page中进行参数备份;所述系统内存300,进一步用于若从NAND存储器多个参数备份的page里读取的所述Retry命令序列参数进行crc校验正确,则将所述Retry命令序列参数保存到系统内存中;进一步用于将根据读取的所述NAND存储器的ID获取的对应的所述Retry命令序列参数保存到所述系统内存中;所述中央处理器200包括:数据读取模块210,从所述NAND存储器多个参数备份的page里,根据芯片启动代码的规则依次读取数据;若读取数据失败,则继续从下一个page里读取数据;以及,从NAND存储器烧录有系统启动代码的page里,根据芯片启动代码的规则依次读取所述系统启动代码;以及,若所述系统启动代码读取失败,则根据所述Retry命令序列参数设置的新的Retry Level再次读取NAND存储器中的所述系统启动代码;当系统启动后,进一步用于根据芯片启动代码的规则依次读取系统内存中的Retry命令序列参数;以及,若没有读取到所述Retry命令序列参数,则读取NAND存储器的ID;以及,若系统内存中的所述Retry命令序列参数进行crc校验正确时,在系统内存中读取数据出错时,按照所述Retry命令序列参数重新读取数据;其中,所述芯片启动代码包括:预设的ECC、格式和通用Retry Level;所述芯片启动代码的规则包括:预设的ECC和格式;数据判断模块220,检查所述读取的数据是否是全ff;以及,若所述读取的数据不是全ff,则进一步判断所述读取的数据的头部数据特征码是否为参数特征码;若所述读取的数据的头部数据特征码不是参数特征码时,进一步用于判断所述读取的数据是否为所述系统启动代码数据;计算校验模块230,对NAND存储器多个参数备份的page里读取的所述Retry命令序列参数进行crc计算并校验;进一步用于对系统内存中的所述Retry命令序列参数进行crc计算并校验;进一步用于计算所述Retry命令序列参数的第一crc,并把计算的所述第一crc放在所述Retry命令序列参数的头部;所述计算校验模块包括:计算子模块231,计算系统内存中的所述Retry命令序列参数的第二crc;获取子模块232,获取所述系统内存中的Retry命令序列参数中的头部的所述第一crc;检验子模块233,将所述第一crc与所述第二crc进行比较,若一致,则校验正确,若不一致,则校验不正确;设置模块240,若所述系统启动代码读取失败,则根据NAND存储器中读取的所述Retry命令序列参数设置新的Retry Level;启动模块250,当成功将NAND存储器中的所述系统启动代码读完后,跳到所述系统内存中完成系统启动;进一步用于若接收到所述错误信息,芯片启动代码跳到另一个启动设备进行系统启动;错误反馈模块260,若所述读取的数据不是所述系统启动代码,则反馈所述错误信息给芯片启动代码;进一步用于若所述系统启动代码无法成功读取,则反馈所述错误信息给芯片启动代码;读取判断模块270,若所述系统启动代码数据读取失败,所述读取判断模块判断是否可以通过所述预设的ECC和通用Retry Level成功读取所述系统启动代码数据;参数获取模块280,若系统内存中没有读取到所述Retry命令序列参数或对系统内存中的所述Retry命令序列参数进行crc检验不正确时,根据读取的所述NAND存储器的ID,获取对应的所述Retry命令序列参数;所述参数获取模块280具体包括:规则获取子模块281,根据读取的所述NAND存储器的ID,获取对应的Retry规则;序列转化子模块282,将所述Retry规则根据预设规则转化为对应的Retry参数序列;设置子模块283,根据所述Retry参数序列,依次设置对应的Retry Level;参数转化子模块284,将所述Retry Level转化为对应的NAND控制器的Retry命令序列参数。

具体的,将根据NAND存储器的ID,获取的对应的Retry命令序列参数存入NAND存储器,使芯片启动代码能够更好地兼容各种不同的NAND存储器,降低不同NAND存储器的由于没有对应的Retry命令序列参数而无法启动的情况,提升使用效果。

在本发明的另一个实施例中,以H27UBG8T2CTR这个现代20nm的NAND存储器为例,这个NAND存储器的Retry规则的特点是每个NAND存储器的Retry规则都存储在otp(One Time Programmable,一次性可编程)block里面,需要专门的命令读取,并且每个NAND存储器的Retry规则是不同的;首先通过otp block的读取命令从NAND存储器中读出完整的内容,并按照异或规则检验后取得正确的Retry规则。

然后根据此Retry规则获取对应的Retry Level,然后将每个Retry Level转换为NAND控制器的Retry命令序列参数并保存,首先将NAND控制器的cmd fifo地址换成Retry命令序列参数保存的内存地址,然后从level0开始持续到level7依次调用set level函数进入Read Retry模式,由于fifo已经更换为内存地址,这样实际上并没真正写入fifo,而是在内存里,NAND存储器并没有真正进入Read Retry模式,level7完了以后将内存fifo数据计算crc,并调用wirte page的接口依次把Retry命令序列参数写入固定的page里面,并保证跨block和block里面的page都有Retry命令序列参数保存;最后恢复内存fifo为正常NAND控制器的fifo地址,保证后续的命令正常进行。

芯片启动代码启动后,首先依次从各个page读取Retry命令序列参数并校验,通过后,按照level0到level7的顺序依次还原fifo数据;后续真正的数据(例如:系统启动代码)读取如果发现错误且ECC和通用Retry Level无法校正,就依据fifo数据依次把对应的level的fifo数据写入NAND控制器的cmd fifo里面进入Read Retry模式,重新读取数据。

应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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