CN117746966A - 注错测试***、注错测试方法及相关装置 - Google Patents
注错测试***、注错测试方法及相关装置 Download PDFInfo
- Publication number
- CN117746966A CN117746966A CN202311734718.9A CN202311734718A CN117746966A CN 117746966 A CN117746966 A CN 117746966A CN 202311734718 A CN202311734718 A CN 202311734718A CN 117746966 A CN117746966 A CN 117746966A
- Authority
- CN
- China
- Prior art keywords
- error
- command
- state
- erasure
- flash memory
- 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.)
- Pending
Links
- 238000002347 injection Methods 0.000 title claims abstract description 429
- 239000007924 injection Substances 0.000 title claims abstract description 429
- 238000012360 testing method Methods 0.000 title claims abstract description 54
- 238000010998 test method Methods 0.000 title abstract description 11
- 238000000034 method Methods 0.000 claims description 78
- 238000012545 processing Methods 0.000 claims description 63
- 230000005540 biological transmission Effects 0.000 claims description 33
- 230000010365 information processing Effects 0.000 claims description 33
- 238000004891 communication Methods 0.000 claims description 6
- 230000001960 triggered effect Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 9
- 239000000243 solution Substances 0.000 description 7
- 230000032683 aging Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 239000007787 solid Substances 0.000 description 4
- 230000007774 longterm Effects 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 239000008187 granular material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请实施例涉及存储设备应用领域,公开了一种注错测试***、注错测试方法及相关装置,注错测试***包括注错信息处理***,注错信息处理***包括主处理器和协处理器,通过主处理器用于根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,并将第一命令结构体传输至协处理器,协处理器用于接收第一命令结构体,根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误,本申请能够根据需求灵活注入擦除错误或编程错误,并且无需批量规模测试就能稳定产生错误,从而提高注入擦除错误或编程错误的效率。
Description
技术领域
本申请涉及存储设备应用领域,特别是涉及一种注错测试***、注错测试方法及相关装置。
背景技术
掉电非易失性设备,例如:闪存设备,是用于存储数据的掉电非易失性设备。闪存(NAND Flash)是闪存设备的主要存储介质,由于闪存自身特性或者软件逻辑缺陷,闪存设备在使用过程中会出现擦除错误、编程错误等错误,每种错误对应不同的处理流程。
由于闪存设备在正常使用过程中,很难触发到擦除错误和编程错误,无法快速验证每种错误处理流程的有效性和稳定性,因此,需要分别对闪存设备的擦除错误处理流程和编程错误处理流程进行主动验证。目前,通常采用老化测试触发错误,从而对各种错误处理流程进行主动验证。
在实现本申请过程中,发明人发现现有技术中至少存在如下问题:现有技术依赖长期的老化测试,需要进行批量规模测试才能稳定产生错误,耗时长。
发明内容
本申请实施例提供一种注错测试***、注错测试方法及相关装置,以根据需求灵活注入擦除错误或编程错误,并且无需批量规模测试就能稳定产生错误,从而提高注入擦除错误或编程错误的效率。
本申请实施例提供以下技术方案:
第一方面,本申请实施例提供一种注错测试***,该注错测试***应用于掉电非易失性设备,该注错测试***包括注错信息处理***,注错信息处理***用于根据注错信息向掉电非易失性设备注入擦除错误或编程错误,注错信息处理***包括主处理器和协处理器;
主处理器用于根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,并将第一命令结构体传输至协处理器;
协处理器用于接收第一命令结构体,并根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误,其中,操作状态包括写入状态或擦除状态。
第二方面,本申请实施例提供一种存储控制芯片,包括:
如第一方面的注错测试***。
第三方面,本申请实施例提供一种掉电非易失性设备,包括:
如第二方面的存储控制芯片;
至少一个掉电非易失性介质,与存储控制芯片通信连接。
第四方面,本申请实施例提供一种注错测试方法,应用于第三方面的掉电非易失性设备,该注错测试方法包括:
根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,其中,命令错误类型包括编程失败错误、编程超时错误、擦除失败错误或擦除超时错误;
根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误,其中,编程错误包括编程失败错误或编程超时错误,擦除错误包括擦除失败错误或擦除超时错误。
第五方面,本申请实施例还提供了一种非易失性计算机可读存储介质,非易失性计算机可读存储介质存储有计算机可执行指令,计算机可执行指令用于使掉电非易失性设备能够执行第四方面的注错测试方法。
本申请实施例的有益效果是:区别于现有技术的情况下,本申请实施例提供一种注错测试***,该注错测试***应用于掉电非易失性设备,该注错测试***包括注错信息处理***,注错信息处理***用于根据注错信息向掉电非易失性设备注入擦除错误或编程错误,注错信息处理***包括主处理器和协处理器;主处理器用于根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,并将第一命令结构体传输至协处理器;协处理器用于接收第一命令结构体,根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误,其中,操作状态包括写入状态或擦除状态。
通过注错信息处理***包括主处理器和协处理器,主处理器用于根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,协处理器用于根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存状态中的就绪标志,以生成相应类型的擦除错误或编程错误,本申请能够根据需求灵活注入擦除错误或编程错误,并且无需批量规模测试就能稳定产生错误,从而提高注入擦除错误或编程错误的效率。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是本申请实施例提供的一种掉电非易失性设备的结构示意图;
图2是本申请实施例提供的一种注错测试***的结构示意图;
图3是本申请实施例提供的一种注错测试***的具体结构示意图;
图4是本申请实施例提供的一种注错测试方法的流程示意图;
图5是本申请实施例提供的一种注错信息存储***获取注错命令,并将注错命令存储至注错命令池的流程示意图;
图6是本申请实施例提供的一种注错信息传输***遍历注错命令池,将注错信息同步进第一命令结构体的流程示意图;
图7是本申请实施例提供的一种在第一命令结构体中的命令错误类型为编程失败错误时,主处理器配置编程失败错误的标记位的流程示意图;
图8是本申请实施例提供的一种协处理器将写入状态中的编程失败标记位设置为第一数值,以生成编程失败错误的流程示意图;
图9是本申请实施例提供的一种主处理器处理编程失败错误的流程示意图;
图10是本申请实施例提供的一种协处理器将闪存就绪状态中的就绪标志设置为第二数值,以生成编程超时错误的流程示意图;
图11是本申请实施例提供的一种主处理器处理编程超时错误的流程示意图;
图12是本申请实施例提供的另一种掉电非易失性设备的结构示意图;
图13是本申请实施例提供的一种存储控制芯片的结构示意图。
附图标号说明:
标号 | 名称 | 标号 | 名称 |
100 | 掉电非易失性设备 | 101 | 连接器 |
102 | 存储控制芯片 | 103 | 其他***单元 |
104 | 缓存单元 | 105 | 掉电非易失性介质 |
200 | 注错测试*** | 201 | 注错信息处理*** |
202 | 注错信息存储*** | 203 | 注错信息传输*** |
2011 | 主处理器 | 2012 | 协处理器 |
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
此外,下面所描述的本申请各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
在对本申请进行详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释:
(1)编程失败错误
在编程(写入)操作中,如果无法成功将数据写入目标存储器或无法正确编程数据,就会发生编程失败错误(Programming Failure Error)。
(2)编程超时错误
在编程操作中,如果写入操作超过了预定的时间限制而未能完成,就会发生编程超时错误(Programming Timeout Error)。
(3)擦除失败错误
在擦除操作中,如果无法成功将目标存储器的数据擦除或无法正确擦除数据,就会发生擦除失败错误(Erase Failure Error)。
(4)擦除超时错误
在擦除操作中,如果擦除操作超过了预定的时间限制而未能完成,就会发生擦除超时错误(Erase Timeout Error)。
下面结合说明书附图具体地阐述本申请的技术方案。
请参阅图1,图1是本申请实施例提供的一种掉电非易失性设备的结构示意图;
在本申请实施例中,掉电非易失性设备包括闪存设备。闪存设备,例如:固态硬盘(Solid State Drives,SSD),是采用固态电子存储芯片阵列而制成的硬盘。
如图1所示,掉电非易失性设备100包括连接器101、存储控制芯片102、其他***单元103、缓存单元104和掉电非易失性介质105。
其中,连接器101,连接存储控制芯片102与主机,用于与主机通信,主机例如:计算机或者服务器;存储控制芯片102,连接连接器101、其他***单元103、缓存单元104和掉电非易失性介质105,用于作为控制运算单元,管理掉电非易失性设备的内部***,存储控制芯片102包括但不限于固态硬盘控制器;***单元103,连接存储控制芯片102,包括串口、传感器、寄存器、电源芯片等部件;缓存单元104,连接存储控制芯片102,作为缓存、算法表存储单元,缓存单元104一般为动态随机存取存储器(Dynamic Random Access Memory,DRAM)。
其中,掉电非易失性介质105,作为掉电非易失性设备100的存储介质,在本申请实施例中,掉电非易失性介质105包括闪存介质,也称作闪存、Flash、Flash存储器或Flash颗粒,作为存储单元,用于存储用户数据、***数据等。存储控制芯片102与掉电非易失性介质105之间呈现多个通道,一个通道独立连接一个掉电非易失性介质,例如:通道0连接一个掉电非易失性介质、通道1连接一个掉电非易失性介质、……、通道x连接一个掉电非易失性介质。
由于闪存自身特性或者软件逻辑缺陷,闪存设备在使用过程中会出现擦除错误、编程错误等错误,每种错误对应不同的处理流程。然而闪存设备在正常使用过程中,很难触发到擦除错误和编程错误,无法快速验证每种错误处理流程的有效性和稳定性,因此,需要分别对闪存设备的擦除错误处理流程和编程错误处理流程进行主动验证。
目前,通常采用老化测试触发错误,从而对闪存设备的各种错误处理流程进行主动验证。然而,这种方式依赖长期的老化测试,需要进行批量规模测试才能稳定产生错误,耗时长。
基于此,本申请实施例提供一种注错测试***,通过注错信息处理***包括主处理器和协处理器,主处理器用于根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,协处理器用于根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存状态中的就绪标志,以生成相应类型的擦除错误或编程错误,本申请能够根据需求灵活注入擦除错误或编程错误,并且无需批量规模测试就能稳定产生错误,从而提高注入擦除错误或编程错误的效率。
请参阅图2,图2是本申请实施例提供的一种注错测试***的结构示意图;
在本申请实施例中,注错测试***应用于掉电非易失性设备,掉电非易失性设备包括掉电非易失性介质,例如:该注错测试***应用于闪存设备,掉电非易失性介质为闪存介质。
如图2所示,注错测试***200包括注错信息处理***201,注错信息处理***201包括主处理器2011和协处理器2012。其中,主处理器2011与协处理器2012通信连接。
其中,注错信息处理***201用于根据注错信息向掉电非易失性设备注入擦除错误或编程错误,其中,注错信息包括命令错误类型,命令错误类型包括编程失败错误、编程超时错误、擦除失败错误或擦除超时错误,擦除错误包括擦除失败错误或擦除超时错误,编程错误包括编程失败错误或编程超时错误。
主处理器2011,连接协处理器2012,用于根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,并将第一命令结构体传输至协处理器2012。其中,第一命令结构体包括命令错误类型和错误类型标记位,错误类型标记位包括编程失败错误的标记位、擦除失败错误的标记位或超时标记位。主处理器包括但不限于中央处理器(CentralProcessing Unit,CPU),优选地,主处理器为ARM CPU。
协处理器2012,连接主处理器2011,用于接收第一命令结构体,并根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误。其中,操作状态包括写入状态或擦除状态,写入状态为掉电非易失性设备进行数据写入操作的状态,擦除状态为掉电非易失性设备进行数据擦除操作的状态,闪存就绪状态为掉电非易失性设备准备进行数据读取操作、数据写入操作或数据擦除操作的状态,第一标记位包括编程失败标记位或擦除失败标记位。协处理器包括但不限于微控制单元(Micro Control Unit,MCU),优选地,协处理器为MCU。
具体的,协处理器2012用于根据编程失败错误的标记位,更改写入状态中的编程失败标记位,以生成编程失败错误;或者,根据擦除失败错误的标记位,更改擦除状态中的擦除失败标记位,以生成擦除失败错误;或者,在命令错误类型为编程超时错误时,根据超时标记位更改闪存就绪状态中的就绪标志,以生成编程超时错误;或者,在命令错误类型为擦除超时错误时,根据超时标记位更改闪存就绪状态中的就绪标志,以生成擦除超时错误。
请参阅图3,图3是本申请实施例提供的一种注错测试***的具体结构示意图;
如图3所示,注错测试***200包括注错信息存储***202、注错信息传输***203与注错信息处理***201。其中,注错信息传输***203分别与注错信息存储***202、注错信息处理***201通信连接。
注错信息存储***202,连接注错信息传输***203,用于获取注错命令,并将注错命令存储至注错命令池。其中,注错命令包括注错信息,注错信息包括命令错误类型、通道号(Channel)、片选信号(CE)、物理块号(Block)、Die/Lun、闪存页号(Page)、平面位图、存储变量和注入错误的次数中的至少一种。
在本申请实施例中,注错命令为写命令或擦除命令,当注错命令为写命令时,命令错误类型包括编程失败错误或编程超时错误;当注错命令为擦除命令时,命令错误类型包括擦除失败错误或擦除超时错误。
通道号是闪存输入通道的数字或标识符;片选信号用于指示需要进行读取操作的闪存芯片,每一闪存芯片具有唯一的片选信号;物理块号是闪存所在最小擦除单元的数字或标识符;Die/Lun是闪存接收和执行命令的基本单元;闪存页号是闪存所在最小读写操作单元的数字或标识符。其中,Die/Lun、通道号、片选信号、物理块号、闪存页号属于闪存地址。平面位图(Plane BitMap)用于指示被选择注入错误的平面(Plane),具体的,平面位图作为一个变量,其中的每个位对应一个Plane,需要注入错误的Plane对应的位设置为1,其他Plane对应的位设置为0。
存储变量用于标记任一注错命令是否已持久化存储,即指示注错命令在下次上电后可以被触发或在本次工作过程中可以被触发,存储变量的数值可以为第一数值或第二数值。存储变量主要是用来测试上电过程的异常处理流程,当存储变量的数值为第一数值时,表示当前的注错命令需要掉电再上电才能生效,即在下次上电后可以被触发;当存储变量的数值为第二数值时,表示当前的注错命令在本次工作过程中可以被触发。第一数值和第二数值可由本领域技术人员根据实际情况进行设置,在本申请实施例中不做限制。示例性地,第一数值为1,第二数值为0。
注入错误的次数表示输入的一条注错命令最多被匹配的次数,每匹配一次,这个变量会减一,直到数值为0,表示该条注错命令失效,该变量一般用来测试需要多次出错才能触发的编程错误处理流程场景或擦除错误处理流程场景。
在本申请实施例中,注错信息存储***202包括注错命令池,注错命令池位于闪存设备的内存。注错信息存储***202具体用于:获取注错命令,并在注错命令为合法命令时,将注错命令存储至注错命令池。
具体的,闪存设备预先在内存中划分部分存储空间作为注错命令池,注错命令池用于存储预设数量的注错命令所包含的注错信息,例如:预设数量为128条时,闪存设备在内存中创建一个大小为128的数组或链表,用于表示注错命令池。其中,预设数量可由本领域技术人员根据实际情况进行设置,在本申请实施例中不做限制。
闪存设备接收命令注入工具输入的注错命令,并由注错信息存储***202判断该注错命令是否为合法命令。若该注错命令为合法命令,则注错信息存储***202将该注错命令存储至注错命令池;否则,注错信息存储***202不存储该注错命令。
其中,命令注入工具包括但不限于NVMe CLI,NVMe CLI是一种命令行界面工具,它通过计算机***与闪存设备之间的通信接口与闪存设备进行通信,例如:NVMe CLI通过PCIe总线与闪存设备进行通信。注错命令可以通过NVMe CLI的自定义命令(VU命令)被注入至闪存设备,其中,VU命令是基于NVMe协议框架留给厂商允许厂商自定义的命令,VU命令可由本领域技术人员根据实际情况进行设置,在本申请实施例中不做限制。
在闪存设备接收到NVMe CLI输入的注错命令后,注错信息存储***202通过判断该注错命令中的命令错误类型、通道号、片选信号是否均处于有效范围内,确定该注错命令是否为合法命令。
具体的,在注错命令为写命令时,若该注错命令中的命令错误类型为编程失败错误或编程超时错误,且该注错命令中的通道号位于该闪存设备支持的通道号范围,且该注错命令中的片选信号位于该闪存设备支持的片选信号范围,则该注错命令为合法命令,否则,该注错命令为非法命令。
在注错命令为擦除命令时,若该注错命令中的命令错误类型为擦除失败错误或擦除超时错误,且该注错命令中的通道号位于该闪存设备支持的通道号范围,且该注错命令中的片选信号位于该闪存设备支持的片选信号范围,则该注错命令为合法命令,否则,该注错命令为非法命令。其中,闪存设备支持的通道号范围与片选信号范围可由本领域技术人员根据实际情况进行设置,在本申请实施例中不做限制。
可以理解的是,若该注错命令为合法命令,则注错信息存储***202可以通过将该注错命令添加到数组的末尾或链表的尾部的方式,实现将注错命令存储到注错命令池中。若该注错命令不为合法命令,不存储该注错命令能够避免向闪存设备注入一条无效的命令。
在本申请实施例中,注错信息存储***202还用于恢复注错命令。具体的,闪存设备包括掉电非易失性介质,该掉电非易失性介质为闪存介质,例如:掉电非易失性介质为Nor Flash。在注错信息存储***202将获取的注错命令存储至注错命令池之后,注错信息存储***202将注错命令池中的所有注错命令写入Nor Flash,在下次上电过程中注错信息存储***202判断Nor Flash中存储的任一注错命令的存储变量的数值是否为第一数值,例如:是否为1。
若某一注错命令的存储变量的数值为1,则注错信息存储***202将该注错命令恢复至注错命令池,从而在后续由注错信息传输***203触发该注错命令。可以理解的是,若掉电非易失性介质中存储的任一注错命令的存储变量的数值为第二数值,例如:为0时,则该条注错命令在本次工作过程中可以被注错信息传输***203触发,不需要掉电再上电才能生效。
在本申请实施例中,注错信息存储***202还用于获取命令注入工具输入的删除命令,根据该删除命令删除闪存设备中存储的注错命令。具体的,闪存设备中存储的注错命令存在于注错命令池或NorFlash中,在需要删除某一注错命令时,注错信息存储***202通过获取NVMe CLI输入的删除命令,触发删除该注错命令。其中,删除命令以VU命令的形式被注入至闪存设备,该删除命令用于触发注错信息存储***删除注错命令,删除命令的具体内容可由本领域技术人员根据实际情况进行设置,在本申请实施例中不做限制。
注错信息传输***203,连接注错信息处理***201与注错信息存储***202,用于在写过程或擦除过程中遍历注错命令池,在第二命令结构体的信息与注错命令池中的某一注错命令的注错信息匹配时,将注错信息同步进第一命令结构体。其中,第二命令结构体为注错命令的结构体。第二命令结构体包括命令错误类型、通道号、片选信号、物理块号、Die/Lun、闪存页号、平面位图、存储变量和注入错误的次数,第二命令结构体的信息包括命令错误类型、通道号、片选信号、物理块号、Die/Lun、闪存页号、平面位图。
具体的,在NVMe CLI以VU命令的形式输入某一注错命令时,第二命令结构体为该条注错命令下发下来传输的结构体。在写过程或擦除过程中注错信息传输***203遍历注错命令池,判断第二命令结构体的Die/Lun、通道号、片选信号、物理块号、闪存页号、命令错误类型、平面位图是否与注错命令池中的某一注错命令的注错信息匹配。
若第二命令结构体的Die/Lun、通道号、片选信号、物理块号、闪存页号与注错命令池中的某一注错命令的Die/Lun、通道号、片选信号、物理块号、闪存页号相同,且该第二命令结构体的命令错误类型与该注错命令中的命令错误类型相同,且该第二命令结构体的平面位图与该注错命令中的平面位图有交集,则注错信息传输***203确定该第二命令结构体的信息与该注错命令的注错信息匹配,即注错命中,将该注错命令的注错信息中的命令错误类型、平面位图传递赋值给第一命令结构体中相应的变量。否则,注错信息传输***203确定该第二命令结构体的信息与注错命令池中的每一注错命令的注错信息均不匹配,不进行后续操作。
例如:当第二命令结构体HOST_CMD_DESC_T的Die/Lun、通道号、片选信号、物理块号、闪存页号、命令错误类型、平面位图与注错命令池中的一条注错命令的结构体errInj_t中的Die/Lun、通道号、片选信号、物理块号、闪存页号、命令错误类型、平面位图相匹配时,注错信息传输***203将errInj_t中的命令错误类型、平面位图的具体值分别传递赋值给第一命令结构体中表示命令错误类型的变量与表示平面位图的变量,可以理解的是,第一命令结构体仅保留了注错信息中的命令错误类型与平面位图,第一命令结构体还可以携带除注错信息外的其它信息。
在本申请实施例中,注错信息传输***203还用于控制第一命令结构体逐层传输至最底层操作闪存设备的代码位置,例如:按照BE命令调度层(dispatch)、BE命令提交层(submit)、闪存控制器层的顺序,逐层传输至最底层操作闪存设备的代码位置。当第一命令结构体传输至闪存控制器层时,注错信息处理***201需要根据第一命令结构体注入相应类型的擦除错误或编程错误。
相比于现有方案无法深入闪存操作的最底层处进行注错,本申请通过第一命令结构体逐层往闪存操作的最底层进行传输,能够使得注错信息伴随第一命令结构体在写过程或擦除过程中一层层向闪存底层传递,进而到达最底层操作闪存设备的代码位置。
在本申请实施例中,注错信息传输***201还用于:若掉电非易失性介质中存储的任一注错命令的存储变量的数值为第二数值,则在本次掉电非易失性设备的工作过程中触发该注错命令。具体的,若某一注错命令的存储变量的数值为0,则该注错命令在本次闪存设备的工作过程中可以被触发,不需要掉电再上电才能生效。当注错信息存储***202将该注错命令存储至注错命令池之后,注错信息传输***203在本次闪存设备的工作过程中确定该注错命令命中后触发该注错命令,即注错信息传输***203确定第二命令结构体的信息与该注错命令的注错信息匹配后,将该注错信息同步进第一命令结构体,并在第一命令结构体传输至最底层操作闪存设备的代码位置时,注错信息处理***201根据第一命令结构体注入相应类型的擦除错误或编程错误。
注错信息处理***202,连接注错信息传输***201,用于根据第一命令结构体中的命令错误类型,向闪存设备注入擦除失败错误、擦除超时错误、编程失败错误或编程超时错误。
其中,主处理器2011,连接协处理器2012,用于根据第一命令结构体中的命令错误类型,确定需要注入的擦除错误或编程错误的类型,从而配置第一命令结构体中对应的错误类型标记位,将第一命令结构体传输至协处理器。
协处理器2012,连接主处理器2011,用于根据第一命令结构体中的错误类型标记位,更改写入状态中的编程失败标记位,以向闪存设备注入编程失败错误,或者,更改擦除状态中的擦除失败标记位,以向闪存设备注入擦除失败错误,或者,更改闪存就绪状态中的就绪标志,以向闪存设备注入编程超时错误或擦除超时错误。
在本申请实施例中,在注错命令为写命令时,第一命令结构体中的命令错误类型包括编程失败错误或编程超时错误,操作状态为写入状态,相应地,错误类型标记位包括编程失败错误的标记位或超时标记位,第一标记位包括编程失败标记位。
在命令错误类型为编程失败错误时,主处理器具体用于:配置写操作的命令参数;将命令参数填充至第一命令结构体中;将第一命令结构体中编程失败错误的标记位设置为第一数值;将第一命令结构体传输至协处理器。
具体的,在第一命令结构体中的命令错误类型为编程失败错误时,主处理器进入写命令提交流程,即配置写操作的命令参数,将配置的命令参数值填充到第一命令结构体的相应字段中,其中,写操作的命令参数包括但不限于写入地址、待写入数据、数据长度,写入地址为写入该待写入数据的地址、待写入数据为实际要写入的数据内容、数据长度为待写入数据的长度。由于闪存设备需要注入编程失败错误,因此,还需要将注错信息携带进命令参数,即将第一命令结构体中编程失败错误的标记位设置为第一数值,例如:编程失败错误的标记位为isErrInjWriteErr,将isErrInjWriteErr变量的数值设置为1。然后主处理器将第一命令结构体传输至协处理器,从而使得注错信息能够跟随命令参数最终一起提交至协处理器。
在命令错误类型为编程失败错误时,协处理器具体用于:接收主处理器发送的第一命令结构体;在第一命令结构体中编程失败错误的标记位为第一数值时,查询闪存状态;在查询到闪存状态为闪存就绪状态后,将写入状态中的编程失败标记位设置为第一数值,并将写入状态发送给主处理器。其中,闪存状态为闪存设备的当前工作状态,闪存状态包括闪存就绪状态、擦除状态、写入状态或读取状态等。
具体的,协处理器在接收到主处理器发送的第一命令结构体之后,判断第一命令结构体中编程失败错误的标记位是否为第一数值,例如:是否为1。若第一命令结构体中编程失败错误的标记位不为第一数值,例如:编程失败错误的标记位为0时,则表明当前闪存设备不需注入编程失败错误,不进行后续步骤。
若第一命令结构体中编程失败错误的标记位为第一数值,则协处理器查询闪存状态,通过判断就绪标志是否为第一数值,确定查询到的闪存状态是否为闪存就绪状态。若就绪标志为第一数值,例如:就绪标志Ready为1,则确定查询到的闪存状态为闪存就绪状态,协处理器将写入状态中的编程失败标记位设置为第一数值,例如:将编程失败标记位设置为1,并在完成写操作后将写入状态发送给主处理器。若就绪标志不为第一数值,例如:就绪标志Ready为0,则确定查询到的闪存状态不为闪存就绪状态,协处理继续查询闪存状态,直至查询到的闪存状态为闪存就绪状态。
在命令错误类型为编程失败错误时,主处理器还用于:接收协处理器发送的写入状态;在写入状态中的编程失败标记位为第一数值时,确定产生编程失败错误,并处理编程失败错误。
具体的,在协处理完成写入操作并向主处理器返回写入状态后,主处理器接收协处理器发送的写入状态,判断写入状态中的编程失败标记位是否为第一数值,例如:是否为1。若写入状态中的编程失败标记位为第一数值,例如:编程失败标记位为1,则主处理器确定产生编程失败错误,并进入编程错误处理流程,处理该编程失败错误。其中,编程错误处理流程包括主处理器向闪存转换层发送编程错误码,闪存转换层更换待写入数据的存储位置并重新下发写命令,以及后端执行写操作的流程。该编程错误处理流程为现有技术,在此不再赘述。若写入状态中的编程失败标记位不为第一数值,例如:编程失败标记位为0,则主处理器确定未产生编程失败错误,不进行后续步骤。
在命令错误类型为编程超时错误时,主处理器具体用于:配置写操作的命令参数;将命令参数填充至第一命令结构体中;将第一命令结构体中的超时标记位设置为第一数值;将第一命令结构体传输至协处理器。
具体的,在第一命令结构体中的命令错误类型为编程超时错误时,主处理器进入正常的写命令提交流程,即配置写操作的命令参数,将配置的命令参数值填充到第一命令结构体的相应字段中。由于闪存设备需要注入编程超时错误,因此,还需要将注错信息携带进命令参数,即将第一命令结构体中超时标记位设置为第一数值,例如:超时标记位为isErrInjTimeout,将isErrInjTimeout变量的数值设置为1。然后主处理器将第一命令结构体传输至协处理器,从而使得注错信息能够跟随命令参数最终一起提交至协处理器。
在命令错误类型为编程超时错误时,协处理器具体用于:接收主处理器发送的第一命令结构体;在第一命令结构体中的超时标记位为第一数值时,查询闪存状态;在查询到闪存状态为闪存就绪状态后,将闪存就绪状态中的就绪标志设置为第二数值,以使协处理器不断查询闪存状态,从而触发主处理器处理编程超时错误。
具体的,协处理器在接收到主处理器发送的第一命令结构体之后,判断第一命令结构体中超时标记位是否为第一数值,例如:是否为1。若第一命令结构体中超时标记位不为第一数值,例如:超时标记位为0时,则表明当前闪存设备不需注入编程超时错误,不进行后续步骤。
若第一命令结构体中超时标记位为第一数值,则协处理器查询闪存状态,通过判断就绪标志是否为第一数值,确定查询到的闪存状态是否为闪存就绪状态。若就绪标志为第一数值,例如:就绪标志Ready为1,则确定查询到的闪存状态为闪存就绪状态,协处理将闪存就绪状态中的就绪标志设置为第二数值,例如:将就绪标志设置为0,使得协处理器一直处于查询闪存状态的循环当中,从而触发主处理器超时,进而主处理器进入超时错误处理流程。
若就绪标志不为第一数值,例如:就绪标志Ready为0,则确定查询到的闪存状态不为闪存就绪状态,协处理继续查询闪存状态,直至查询到的闪存状态为闪存就绪状态。其中,超时错误处理流程包括硬件复位过程和后端现场恢复过程,该超时错误处理流程为现有技术,在此不再赘述。
在命令错误类型为编程超时错误时,主处理器还用于:判断当前时刻是否查询到协处理器发送的写入状态;若当前时刻查询到协处理器发送的写入状态,且写入状态中的编程失败标记位为第一数值,则确定产生编程失败错误,并处理编程失败错误;若当前时刻未查询到协处理器发送的写入状态,且在第一预设时间段内未查询到协处理器发送的写入状态,则确定产生编程超时错误,并处理编程超时错误。其中,第一预设时间段为从主处理器第一次查询写入状态的时刻起始的一段时间,第一预设时间段可由本领域技术人员根据实际情况进行设置,在本申请实施例中不做限制。示例性地,第一预设时间段为15秒。
具体的,在主处理器将第一命令结构体发送至协处理器之后,主处理器查询写入状态,判断当前时刻是否查询到协处理器发送的写入状态。若当前时刻未查询到协处理器发送的写入状态,则主处理器判断第一预设时间段内是否查询到协处理器发送的写入状态。若主处理器在第一预设时间段内未查询到协处理器发送的写入状态,则主处理器确定产生编程超时错误,并进入超时错误处理流程,处理该编程超时错误。若主处理器在第一预设时间段内查询到协处理器发送的写入状态,则主处理器判断写入状态中的编程失败标记位是否为第一数值。
若当前时刻查询到协处理器发送的写入状态,则主处理器判断写入状态中的编程失败标记位是否为第一数值。若编程失败标记位为第一数值,则主处理器确定产生编程失败错误,并进入编程错误处理流程,处理该编程失败错误;若编程失败标记位不为第一数值,则主处理器确定未产生编程失败错误,不进行后续步骤。
在本申请实施例中,在注错命令为擦除命令时,第一命令结构体中的命令错误类型包括擦除失败错误或擦除超时错误,操作状态为擦除状态,相应地,错误类型标记位包括擦除失败错误的标记位或超时标记位,第一标记位包括擦除失败错误的标记位。
在命令错误类型为擦除失败错误时,主处理器具体用于:配置擦除操作的命令参数;将命令参数填充至第一命令结构体中;将第一命令结构体中擦除失败错误的标记位设置为第一数值;将第一命令结构体传输至协处理器。
具体的,在第一命令结构体中的命令错误类型为擦除失败错误时,主处理器进入正常的擦除命令提交流程,即配置擦除操作的命令参数,将配置的命令参数值填充到第一命令结构体的相应字段中,其中,擦除操作的命令参数包括但不限于擦除地址、擦除长度,擦除地址为待擦除数据的起始地址,擦除长度为待擦除数据的数据长度。由于闪存设备需要注入擦除失败错误,因此,还需要将注错信息携带进命令参数,即将第一命令结构体中擦除失败错误的标记位设置为第一数值,例如:擦除失败错误的标记位为isErrInjEraseFailed,将isErrInjEraseFailed变量的数值设置为1。然后主处理器将第一命令结构体传输至协处理器,从而使得注错信息能够跟随命令参数最终一起提交至协处理器。
在命令结构体中的命令错误类型为擦除失败错误时,协处理器用于:接收主处理器发送的第一命令结构体;在第一命令结构体中擦除失败错误的标记位为第一数值时,查询闪存状态;在查询到闪存状态为闪存就绪状态后,将擦除状态中的擦除失败标记位设置为第一数值,并将擦除状态发送给主处理器。
具体的,协处理器在接收到主处理器发送的第一命令结构体之后,判断第一命令结构体中擦除失败错误的标记位是否为第一数值,例如:是否为1。若第一命令结构体中擦除失败错误的标记位不为第一数值,例如:擦除失败错误的标记位为0时,则表明当前闪存设备不需注入擦除失败错误,不进行后续步骤。
若第一命令结构体中擦除失败错误的标记位为第一数值,则协处理器查询闪存状态,通过判断就绪标志是否为第一数值,确定查询到的闪存状态是否为闪存就绪状态。若就绪标志为第一数值,例如:就绪标志Ready为1,则确定查询到的闪存状态为闪存就绪状态,协处理将擦除状态中的擦除失败标记位设置为第一数值,例如:将擦除失败标记位设置为1,并在完成擦除操作后将擦除状态发送给主处理器。
若就绪标志不为第一数值,例如:就绪标志Ready为0,则确定查询到的闪存状态不为闪存就绪状态,协处理继续查询闪存状态,直至查询到的闪存状态为闪存就绪状态。
在命令错误类型为擦除失败错误时,主处理器还用于:接收协处理器发送的擦除状态;在擦除状态中的擦除失败标记位为第一数值时,确定产生擦除失败错误,并处理擦除失败错误。
具体的,在协处理完成擦除操作并向主处理器返回擦除状态后,主处理器接收协处理器发送的擦除状态,判断擦除状态中的擦除失败标记位是否为第一数值,例如:是否为1。若擦除状态中的擦除失败标记位为第一数值,则主处理器确定产生擦除失败错误,并进入擦除错误处理流程,处理该擦除失败错误。其中,擦除错误处理流程包括主处理器向闪存转换层发送擦除错误码,闪存转换层将之前执行擦除操作的物理块标记为坏块,并选择一个新的物理块进行擦除操作的流程。该擦除错误处理流程为现有技术,在此不再赘述。若擦除状态中的擦除失败标记位不为第一数值,例如:擦除失败标记位为0,则主处理器确定未产生擦除失败错误,不进行后续步骤。
在命令错误类型为擦除超时错误时,主处理器具体用于:配置擦除操作的命令参数;将命令参数填充至第一命令结构体中;将第一命令结构体中的超时标记位设置为第一数值;将第一命令结构体传输至协处理器。
具体的,在第一命令结构体中的命令错误类型为擦除超时错误时,主处理器进入正常的擦除命令提交流程,即配置擦除操作的命令参数,将配置的命令参数值填充到第一命令结构体的相应字段中。由于闪存设备需要注入擦除超时错误,因此,还需要将注错信息携带进命令参数,即将第一命令结构体中超时标记位设置为第一数值,例如:超时标记位为isErrInjTimeout,将isErrInjTimeout变量的数值设置为1。然后主处理器将第一命令结构体传输至协处理器,从而使得注错信息能够跟随命令参数最终一起提交至协处理器。
在命令错误类型为擦除超时错误时,协处理器具体用于:接收主处理器发送的第一命令结构体;在第一命令结构体中的超时标记位为第一数值时,查询闪存状态;在查询到闪存状态为闪存就绪状态后,将闪存就绪状态中的就绪标志设置为第二数值,以使协处理器不断查询闪存状态,从而触发主处理器处理擦除超时错误。
具体的,协处理器在接收到主处理器发送的第一命令结构体之后,判断第一命令结构体中超时标记位是否为第一数值,例如:是否为1。若第一命令结构体中超时标记位不为第一数值,例如:超时标记位为0时,则表明当前闪存设备不需注入擦除超时错误,不进行后续步骤。
若第一命令结构体中超时标记位为第一数值,则协处理器查询闪存状态,通过判断就绪标志是否为第一数值,确定查询到的闪存状态是否为闪存就绪状态。若就绪标志为第一数值,例如:就绪标志Ready为1,则确定查询到的闪存状态为闪存就绪状态,协处理将闪存就绪状态中的就绪标志设置为第二数值,例如:将就绪标志设置为0,使得协处理器一直处于查询闪存状态的循环当中,从而触发主处理器超时,进而主处理器进入超时错误处理流程。
若就绪标志不为第一数值,例如:就绪标志Ready为0,则确定查询到的闪存状态不为闪存就绪状态,协处理继续查询闪存状态,直至查询到的闪存状态为闪存就绪状态。
在命令错误类型为擦除超时错误时,主处理器还用于:判断当前时刻是否查询到协处理器发送的擦除状态;若当前时刻查询到协处理器发送的擦除状态,且擦除状态中的擦除失败标记位为第一数值,则确定产生擦除失败错误,并处理所述擦除失败错误;若当前时刻未查询到协处理器发送的擦除状态,且在第二预设时间段内未查询到协处理器发送的擦除状态,则确定产生擦除超时错误,并处理擦除超时错误。其中,第二预设时间段为从主处理器第一次查询擦除状态的时刻起始的一段时间,第二预设时间段可由本领域技术人员根据实际情况进行设置,在本申请实施例中不做限制。示例性地,第二预设时间段为15秒。
具体的,在主处理器将第一命令结构体发送至协处理器之后,主处理器查询擦除状态,判断当前时刻是否查询到协处理器发送的擦除状态。若当前时刻未查询到协处理器发送的擦除状态,则主处理器判断第二预设时间段内是否查询到协处理器发送的擦除状态。若主处理器在第二预设时间段内未查询到协处理器发送的擦除状态,则主处理器确定产生擦除超时错误,并进入超时错误处理流程,处理该擦除超时错误。若主处理器在第二预设时间段内查询到协处理器发送的擦除状态,则主处理器判断擦除状态中的擦除失败标记位是否为第一数值。
若当前时刻查询到协处理器发送的擦除状态,则主处理器判断擦除状态中的擦除失败标记位是否为第一数值。若擦除失败标记位为第一数值,则主处理器确定产生擦除失败错误,并进入擦除错误处理流程,处理该擦除失败错误;若擦除失败标记位不为第一数值,则主处理器确定未产生擦除失败错误,不进行后续步骤。
相比于现有方案依赖长期的老化测试,需要进行批量规模测试才能稳定产生错误,耗时长,本申请通过主处理器配置第一命令结构体中对应的错误类型标记位,协处理器根据该错误类型标记位,更改写入状态中的编程失败标记位,以向闪存设备注入编程失败错误,更改擦除状态中的擦除失败标记位,以向闪存设备注入擦除失败错误,或者,更改闪存就绪状态中的就绪标志,以向闪存设备注入编程超时错误或擦除超时错误,能够模拟闪存设备在使用过程中出现的各种编程错误场景或擦除错误场景,不需要批量规模测试即可稳定注入相应类型的编程错误或擦除错误,提高注错测试效率,而且能够排除软件处理流程中的潜在问题,提高软件开发效率和闪存设备的稳定性。
在本申请实施例中,通过提供一种注错测试***,该注错测试***应用于闪存设备,该注错测试***包括注错信息处理***,注错信息处理***用于根据注错信息向闪存设备注入擦除错误或编程错误,注错信息处理***包括主处理器和协处理器;主处理器用于根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,并将第一命令结构体传输至协处理器;协处理器用于接收第一命令结构体,根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误,其中,操作状态包括写入状态或擦除状态,写入状态为闪存设备进行数据写入操作的状态,擦除状态为闪存设备进行数据擦除操作的状态,闪存就绪状态为闪存设备准备进行数据读取操作、数据写入操作或数据擦除操作的状态。
通过注错信息处理***包括主处理器和协处理器,主处理器用于根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,协处理器用于根据错误类型标记位更改写入状态中的第一标记位,或者更改闪存状态中的就绪标志,以生成相应类型的擦除错误或编程错误,本申请能够根据需求灵活注入擦除错误或编程错误,并且无需批量规模测试就能稳定产生错误,从而提高注入擦除错误或编程错误的效率。
请参阅图4,图4是本申请实施例提供的一种注错测试方法的流程示意图;
其中,该注错测试方法,应用于闪存设备,具体的,该注错测试方法应用于闪存设备的存储控制芯片,存储控制芯片包括图2或图3中的注错测试***,注错测试***包括注错信息处理***,注错信息处理***包括主处理器和协处理器。
如图4所示,该注错测试方法,包括:
步骤S401:根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位;
具体的,注错信息处理***中的主处理器根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,并将第一命令结构体传输至协处理器。其中,命令错误类型包括编程失败错误、编程超时错误、擦除失败错误或擦除超时错误,错误类型标记位包括编程失败错误的标记位、擦除失败错误的标记位或超时标记位。
在本申请实施例中,在根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位的步骤之前,方法还包括:注错信息存储***获取注错命令,并将注错命令存储至注错命令池;注错信息传输***遍历注错命令池,将注错信息同步进第一命令结构体。
具体的,请参阅图5,图5是本申请实施例提供的一种注错信息存储***获取注错命令,并将注错命令存储至注错命令池的流程示意图;
如图5所示,注错信息存储***获取注错命令,并将注错命令存储至注错命令池的流程,包括:
步骤S501:获取注错命令;
具体的,注错信息存储***接收命令注入工具输入的注错命令,例如:注错信息存储***接收NVMe CLI通过VU命令输入的注错命令,其中,注错命令为写命令或擦除命令,注错命令包括注错信息,注错信息包括命令错误类型、通道号、片选信号、物理块号、Die/Lun、闪存页号、平面位图、存储变量和注入错误的次数中的至少一种。
步骤S502:判断注错命令是否为合法命令;
具体的,在注错命令为写命令时,若该注错命令中的命令错误类型为编程失败错误或编程超时错误,且该注错命令中的通道号位于该闪存设备支持的通道号范围,且该注错命令中的片选信号位于该闪存设备支持的片选信号范围,则该注错命令为合法命令,否则,该注错命令为非法命令。
在注错命令为擦除命令时,若该注错命令中的命令错误类型为擦除失败错误或擦除超时错误,且该注错命令中的通道号位于该闪存设备支持的通道号范围,且该注错命令中的片选信号位于该闪存设备支持的片选信号范围,则该注错命令为合法命令,否则,该注错命令为非法命令。
若注错命令为合法命令,则进入步骤S503;若注错命令为非法命令,则该注错命令是无效的,不需存储,结束流程。
步骤S503:将注错命令存储至注错命令池。
具体的,若注错命令为合法命令,则注错信息存储***将该注错命令存储至注错命令池。
在本申请实施例中,闪存设备包括掉电非易失性介质,掉电非易失性介质为闪存介质,例如:掉电非易失性介质为NorFlash。在注错信息存储***将注错命令存储至注错命令池之后,方法还包括:将注错命令池中的所有注错命令写入掉电非易失性介质;若掉电非易失性介质中存储的任一注错命令的存储变量的数值为第一数值,则在下次上电过程中将该注错命令恢复至注错命令池,以在下次上电后触发该注错命令;若掉电非易失性介质中存储的任一注错命令的存储变量的数值为第二数值,则在本次闪存设备的工作过程中触发该注错命令。示例性地,第一数值为1,第二数值为0。
具体的,在注错信息存储***将获取的注错命令存储至注错命令池之后,注错信息存储***将注错命令池中的所有注错命令写入闪存设备的NorFlash。
若某一注错命令的存储变量的数值为第一数值,则该注错命令需要掉电再上电才能生效。在下次上电过程中注错信息存储***判断NorFlash中存储的任一注错命令的存储变量的数值是否为1。若某一注错命令的存储变量的数值为1,则注错信息存储***将该注错命令恢复至注错命令池,从而在后续由注错信息传输***触发该注错命令。
若某一注错命令的存储变量的数值为第二数值,则该注错命令在本次闪存设备的工作过程中可以被触发,不需要掉电再上电才能生效。由注错信息传输***在本次闪存设备的工作过程中确定该注错命令命中后触发该注错命令,即注错信息传输***确定第二命令结构体的信息与该注错命令的注错信息匹配后,将该注错信息同步进第一命令结构体。
在本申请实施例中,方法还包括:获取命令注入工具输入的删除命令,根据该删除命令删除闪存设备中存储的注错命令。
具体的,闪存设备中存储的注错命令存在于注错命令池或NorFlash中,在需要删除某一注错命令时,注错信息存储***通过获取NVMe CLI输入的删除命令,触发删除该注错命令。
注错信息传输***遍历注错命令池,将注错信息同步进第一命令结构体。
请参阅图6,图6是本申请实施例提供的一种注错信息传输***遍历注错命令池,将注错信息同步进第一命令结构体的流程示意图;
如图6所示,注错信息传输***遍历注错命令池,将注错信息同步进第一命令结构体的流程,包括:
步骤S601:判断注错命令池中是否存储有注错命令;
具体的,注错信息传输***在写过程或擦除过程中遍历注错命令池,判断注错命令池中是否存储有注错命令。若注错命令池中存储有注错命令,则进入步骤S602;若注错命令池中没有存储注错命令,即注错命令池为空,则在本次闪存设备的工作过程中没有需要触发的注错命令,结束流程。
步骤S602:判断第二命令结构体的信息是否与注错命令池中的某一注错命令的注错信息匹配;
具体的,在NVMe CLI以VU命令的形式输入某一注错命令时,第二命令结构体为该条注错命令下发下来传输的结构体,第二命令结构体包括命令错误类型、通道号、片选信号、物理块号、Die/Lun、闪存页号、平面位图、存储变量和注入错误的次数。
在写过程或擦除过程中注错信息传输***遍历注错命令池,判断第二命令结构体的Die/Lun、通道号、片选信号、物理块号、闪存页号、命令错误类型、平面位图是否与注错命令池中的某一注错命令的注错信息匹配。
若第二命令结构体的Die/Lun、通道号、片选信号、物理块号、闪存页号与注错命令池中的某一注错命令的Die/Lun、通道号、片选信号、物理块号、闪存页号相同,且该第二命令结构体的命令错误类型与该注错命令中的命令错误类型相同,且该第二命令结构体的平面位图与该注错命令中的平面位图有交集,则注错信息传输***确定该第二命令结构体的信息与该注错命令的注错信息匹配,即注错命中,进入步骤S603。
否则,注错信息传输***确定该第二命令结构体的信息与注错命令池中的每一注错命令的注错信息均不匹配,返回步骤S601。
步骤S603:将注错信息同步进第一命令结构体。
具体的,若注错信息传输***确定第二命令结构体的信息与注错命令池中的某一注错命令的注错信息匹配,则将该注错命令的注错信息中的命令错误类型、平面位图的具体值,分别传递赋值给第一命令结构体中表示命令错误类型的变量与表示平面位图的变量。
在本申请实施例中,方法还包括:若掉电非易失性介质中存储的任一注错命令的存储变量的数值为第二数值,则在本次闪存设备的工作过程中触发该注错命令。
具体的,若某一注错命令的存储变量的数值为0,则该注错命令在本次闪存设备的工作过程中可以被触发,不需要掉电再上电才能生效。当注错信息存储***将该注错命令存储至注错命令池之后,注错信息传输***在本次闪存设备的工作过程中确定该注错命令命中后触发该注错命令,即注错信息传输***确定第二命令结构体的信息与该注错命令的注错信息匹配后,将该注错信息同步进第一命令结构体。
在本申请实施例中,方法还包括:控制第一命令结构体逐层传输至最底层操作闪存设备的代码位置。
具体的,注错信息传输***控制第一命令结构体按照BE命令调度层、BE命令提交层闪存控制器层的顺序逐步传输至最底层操作闪存设备的代码位置,从而在第一命令结构体传输至闪存控制器层时,由注错信息处理***根据第一命令结构体中的命令错误类型,注入相应类型的擦除错误或编程错误。
进一步地,注错信息处理***中的主处理器在获取到第一命令结构体后,根据第一命令结构体中的命令错误类型,配置第一命令结构体中的错误类型标记位。
在本申请实施例中,主处理器根据第一命令结构体中的命令错误类型,配置第一命令结构体中的错误类型标记位,包括:在第一命令结构体中的命令错误类型为编程失败错误时,主处理器配置编程失败错误的标记位。
具体的,请参阅图7,图7是本申请实施例提供的一种在第一命令结构体中的命令错误类型为编程失败错误时,主处理器配置编程失败错误的标记位的流程示意图;
如图7所示,在第一命令结构体中的命令错误类型为编程失败错误时,主处理器配置编程失败错误的标记位的流程,包括:
步骤S701:进入写命令提交流程;
具体的,在第一命令结构体中的命令错误类型为编程失败错误时,主处理器进入写命令提交流程,即配置写操作的命令参数,将配置的命令参数值填充到第一命令结构体的相应字段中,其中,写操作的命令参数包括但不限于写入地址、待写入数据、数据长度。
步骤S702:将第一命令结构体中编程失败错误的标记位设置为第一数值;
具体的,主处理器将第一命令结构体中编程失败错误的标记位设置为第一数值,例如:将编程失败错误的标记位设置为1。
步骤S703:将第一命令结构体传输至协处理器。
具体的,主处理器将配置完命令参数与编程失败错误的标记位的第一命令结构体传输至协处理器。
在本申请实施例中,主处理器根据第一命令结构体中的命令错误类型,配置第一命令结构体中的错误类型标记位,还包括:在第一命令结构体中的命令错误类型为编程超时错误时,主处理器配置超时标记位。
具体的,在第一命令结构体中的命令错误类型为编程超时错误时,主处理器配置超时标记位的流程,包括步骤S(1)-步骤S(3):
步骤S(1):进入写命令提交流程;
具体的,在第一命令结构体中的命令错误类型为编程超时错误时,主处理器进入写命令提交流程,即配置写操作的命令参数,将配置的命令参数值填充到第一命令结构体的相应字段中。
步骤S(2):将第一命令结构体中的超时标记位设置为第一数值;
具体的,主处理器将第一命令结构体中的超时标记位设置为第一数值,例如:将超时标记位设置为1。
步骤S(3):将第一命令结构体传输至协处理器。
具体的,主处理器将配置完命令参数与超时标记位的第一命令结构体传输至协处理器。
在本申请实施例中,主处理器根据第一命令结构体中的命令错误类型,配置第一命令结构体中的错误类型标记位,还包括:在第一命令结构体中的命令错误类型为擦除失败错误时,主处理器配置擦除失败错误的标记位。
具体的,在第一命令结构体中的命令错误类型为擦除失败错误时,主处理器配置擦除失败错误的标记位的流程,包括步骤S(4)-步骤S(6):
步骤S(4):进入擦除命令提交流程;
具体的,在第一命令结构体中的命令错误类型为擦除失败错误时,主处理器进入擦除命令提交流程,即配置擦除操作的命令参数,将配置的命令参数值填充到第一命令结构体的相应字段中,其中,擦除操作的命令参数包括但不限于擦除地址、擦除长度。
步骤S(5):将第一命令结构体中擦除失败错误的标记位设置为第一数值;
具体的,主处理器将第一命令结构体中擦除失败错误的标记位设置为第一数值,例如:将擦除失败错误的标记位设置为1。
步骤S(6):将第一命令结构体传输至协处理器。
具体的,主处理器将配置完命令参数与擦除失败错误的标记位的第一命令结构体传输至协处理器。
在本申请实施例中,主处理器根据第一命令结构体中的命令错误类型,配置第一命令结构体中的错误类型标记位,还包括:在第一命令结构体中的命令错误类型为擦除超时错误时,主处理器配置超时标记位。
具体的,在第一命令结构体中的命令错误类型为擦除超时错误时,主处理器配置超时标记位的流程,包括步骤S(7)-步骤S(9):
步骤S(7):进入擦除命令提交流程;
具体的,在第一命令结构体中的命令错误类型为擦除超时错误时,主处理器进入擦除命令提交流程,即配置擦除操作的命令参数,将配置的命令参数值填充到第一命令结构体的相应字段中。
步骤S(8):将第一命令结构体中的超时标记位设置为第一数值;
具体的,主处理器将第一命令结构体中的超时标记位设置为第一数值,例如:将超时标记位设置为1。
步骤S(9):将第一命令结构体传输至协处理器。
具体的,主处理器将配置完命令参数与超时标记位的第一命令结构体传输至协处理器。
在本申请实施例中,通过主处理器根据第一命令结构体中的命令错误类型,配置第一命令结构体中的错误类型标记位,并将第一命令结构体传输至协处理器,本申请能够使得注错信息能够跟随命令参数最终一起提交至协处理器。
步骤S402:根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误。
具体的,注错信息处理***中的协处理器接收主处理器发送的第一命令结构体,并根据第一命令结构体中的错误类型标记位,更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误。其中,操作状态包括写入状态或擦除状态,编程错误包括编程失败错误或编程超时错误,擦除错误包括擦除失败错误或擦除超时错误,第一标记位包括编程失败标记位或擦除失败标记位。
在本申请实施例中,根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误的步骤,包括:在编程失败错误的标记位为第一数值,且闪存状态为闪存就绪状态时,将写入状态中的编程失败标记位设置为第一数值,以生成编程失败错误。
具体的,请参阅图8,图8是本申请实施例提供的一种协处理器将写入状态中的编程失败标记位设置为第一数值,以生成编程失败错误的流程示意图;
如图8所示,协处理器将写入状态中的编程失败标记位设置为第一数值,以生成编程失败错误的流程,包括:
步骤S801:接收主处理器发送的第一命令结构体;
步骤S802:判断第一命令结构体中编程失败错误的标记位是否为第一数值;
具体的,协处理器判断第一命令结构体中编程失败错误的标记位是否为1。若第一命令结构体中编程失败错误的标记位为1,则进入步骤S803;若第一命令结构体中编程失败错误的标记位不为1,则结束流程。
步骤S803:查询闪存状态;
步骤S804:判断查询到的闪存状态是否为闪存就绪状态;
具体的,协处理器通过判断就绪标志是否为第一数值,确定查询到的闪存状态是否为闪存就绪状态。若就绪标志为第一数值,例如:就绪标志Ready为1,则确定查询到的闪存状态为闪存就绪状态,进入步骤S805;若就绪标志不为第一数值,例如:就绪标志Ready为0,则确定查询到的闪存状态不为闪存就绪状态,返回步骤S803。
步骤S805:将写入状态中的编程失败标记位设置为第一数值。
具体的,协处理将写入状态中的编程失败标记位设置为1,并在完成写操作后将写入状态发送给主处理器。
进一步地,在协处理器将写入状态发送给主处理器之后,主处理器根据写入状态确定是否产生编程失败错误,并在确定产生编程失败错误时,进入编程错误处理流程,处理该编程失败错误。
具体的,请参阅图9,图9是本申请实施例提供的一种主处理器处理编程失败错误的流程示意图;
如图9所示,主处理器处理编程失败错误的流程,包括:
步骤S901:接收协处理器发送的写入状态;
具体的,在协处理完成写入操作并向主处理器返回写入状态后,主处理器接收协处理器发送的写入状态。
步骤S902:判断写入状态中的编程失败标记位是否为第一数值;
具体的,主处理器判断写入状态中的编程失败标记位是否为1,若编程失败标记位为1,则进入步骤S903;若编程失败标记位不为1,例如:编程失败标记位为0,则结束流程。
步骤S903:进入编程错误处理流程。
具体的,编程错误处理流程包括主处理器向闪存转换层发送编程错误码,闪存转换层更换待写入数据的存储位置并重新下发写命令,以及后端执行写操作的流程。
在本申请实施例中,根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误的步骤,还包括:在命令错误类型为编程超时错误,且超时标记位为第一数值,且闪存状态为闪存就绪状态时,将闪存就绪状态中的就绪标志设置为第二数值,以生成编程超时错误。
具体的,请参阅图10,图10是本申请实施例提供的一种协处理器将闪存就绪状态中的就绪标志设置为第二数值,以生成编程超时错误的流程示意图;
如图10所示,协处理器将闪存就绪状态中的就绪标志设置为第二数值,以生成编程超时错误的流程,包括:
步骤S1001:接收主处理器发送的第一命令结构体;
步骤S1002:判断第一命令结构体中超时标记位是否为第一数值;
具体的,协处理器判断第一命令结构体中超时标记位是否为1。若第一命令结构体中超时标记位为1,则进入步骤S1003;若第一命令结构体中超时标记位不为1,则结束流程。
步骤S1003:查询闪存状态;
步骤S1004:判断查询到的闪存状态是否为闪存就绪状态;
具体的,协处理器通过判断就绪标志是否为第一数值,确定查询到的闪存状态是否为闪存就绪状态。若就绪标志为第一数值,例如:就绪标志Ready为1,则确定查询到的闪存状态为闪存就绪状态,进入步骤S1005;若就绪标志不为第一数值,例如:就绪标志Ready为0,则确定查询到的闪存状态不为闪存就绪状态,返回步骤S1003。
步骤S1005:将闪存就绪状态中的就绪标志设置为第二数值。
具体的,协处理将闪存就绪状态中的就绪标志设置为0,从而协处理器一直处于查询闪存状态的循环当中,即重复步骤S1003-步骤S1005,触发主处理器超时。
进一步地,在协处理器触发主处理器超时之后,主处理器确定是否产生编程超时错误,并在确定产生编程超时错误时,进入超时错误处理流程,处理该编程超时错误。
具体的,请参阅图11,图11是本申请实施例提供的一种主处理器处理编程超时错误的流程示意图;
如图11所示,主处理器处理编程超时错误的流程,包括:
步骤S1101:查询写入状态;
具体的,在主处理器将第一命令结构体发送至协处理器之后,主处理器查询由协处理器发送的写入状态。
步骤S1102:判断当前时刻是否查询到协处理器发送的写入状态;
具体的,若当前时刻主处理器查询到协处理器发送的写入状态,则进入步骤S1103;若当前时刻主处理器未查询到协处理器发送的写入状态,则进入步骤S1104。
步骤S1103:判断写入状态中的编程失败标记位是否为第一数值;
具体的,主处理器判断写入状态中的编程失败标记位是否为1,若编程失败标记位为1,则进入步骤S1505;若编程失败标记位不为1,例如:编程失败标记位为0,则结束流程。
步骤S1104:判断当前时刻是否处于第一预设时间段内;
具体的,主处理器在当前时刻未查询到协处理器发送的写入状态后,判断当前时刻是否处于第一预设时间段内,其中,第一预设时间段为从主处理器第一次查询写入状态的时刻起始的一段时间,例如:第一预设时间段为15秒。若当前时刻处于从主处理器第一次查询写入状态的时刻起始的15秒内,则返回步骤S1101;若当前时刻超出从主处理器第一次查询写入状态的时刻起始的15秒内,则表明主处理器在第一预设时间段内未查询到协处理器发送的写入状态,进入步骤S1106。
步骤S1105:进入编程错误处理流程;
具体的,若编程失败标记位为第一数值,则主处理器确定产生编程失败错误,并进入编程错误处理流程,处理该编程失败错误。
步骤S1106:进入超时错误处理流程。
具体的,若主处理器在第一预设时间段内未查询到协处理器发送的写入状态,则主处理器确定产生编程超时错误,并进入超时错误处理流程,处理该编程超时错误。其中,超时错误处理流程包括硬件复位过程和后端现场恢复过程。
在本申请实施例中,根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误的步骤,还包括:在擦除失败错误的标记位为第一数值,且闪存状态为闪存就绪状态时,将擦除状态中的擦除失败标记位设置为第一数值,以生成擦除失败错误。
具体的,在擦除失败错误的标记位为第一数值,且闪存状态为闪存就绪状态时,协处理器将擦除状态中的擦除失败标记位设置为第一数值,以生成擦除失败错误,包括步骤S(10)-步骤S(14):
步骤S(10):接收主处理器发送的第一命令结构体;
步骤S(11):判断第一命令结构体中擦除失败错误的标记位是否为第一数值;
具体的,若第一命令结构体中擦除失败错误的标记位为1,则进入步骤S(12);若第一命令结构体中擦除失败错误的标记位不为1,则结束流程。
步骤S(12):查询闪存状态;
步骤S(13):判断查询到的闪存状态是否为闪存就绪状态;
具体的,若就绪标志为第一数值,例如:就绪标志Ready为1,则确定查询到的闪存状态为闪存就绪状态,进入步骤S(14);若就绪标志不为第一数值,例如:就绪标志Ready为0,则确定查询到的闪存状态不为闪存就绪状态,返回步骤S(12)。
步骤S(14):将擦除状态中的擦除失败标记位设置为第一数值。
具体的,协处理将擦除状态中擦除失败标记位设置为1,并在完成擦除操作后将擦除状态发送给主处理器。
进一步地,在协处理器将擦除状态发送给主处理器之后,主处理器根据擦除状态确定是否产生擦除失败错误,并在确定产生擦除失败错误时,进入擦除错误处理流程,处理该擦除失败错误,具体包括步骤S(15)-步骤S(17):
步骤S(15):接收协处理器发送的擦除状态;
具体的,在协处理完成擦除操作并向主处理器返回擦除状态后,主处理器接收协处理器发送的擦除状态。
步骤S(16):判断擦除状态中的擦除失败标记位是否为第一数值;
具体的,主处理器判断写入状态中的编程失败标记位是否为1,若编程失败标记位为1,则进入步骤S(17);若擦除失败标记位不为1,例如:编程失败标记位为0,则结束流程。
步骤S(17):进入擦除错误处理流程。
具体的,擦除错误处理流程包括主处理器向闪存转换层发送擦除错误码,闪存转换层将之前执行擦除操作的物理块标记为坏块,并选择一个新的物理块进行擦除操作的流程。
在本申请实施例中,根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误的步骤,还包括:在命令错误类型为擦除超时错误,且超时标记位为第一数值,且闪存状态为闪存就绪状态时,将闪存就绪状态中的就绪标志设置为第二数值,以生成擦除超时错误。
具体的,在命令错误类型为擦除超时错误,且超时标记位为第一数值,且闪存状态为闪存就绪状态时,协处理器将闪存就绪状态中的就绪标志设置为第二数值,以生成擦除超时错误,包括步骤S(18)-步骤S(22):
步骤S(18):接收主处理器发送的第一命令结构体;
步骤S(19):判断第一命令结构体中超时标记位是否为第一数值;
具体的,协处理器判断第一命令结构体中超时标记位是否为1。若第一命令结构体中超时标记位为1,则进入步骤S(20);若第一命令结构体中超时标记位不为1,则结束流程。
步骤S(20):查询闪存状态;
步骤S(21):判断查询到的闪存状态是否为闪存就绪状态;
具体的,协处理器通过判断就绪标志是否为第一数值,确定查询到的闪存状态是否为闪存就绪状态。若就绪标志为第一数值,例如:就绪标志Ready为1,则确定查询到的闪存状态为闪存就绪状态,进入步骤S(22);若就绪标志不为第一数值,例如:就绪标志Ready为0,则确定查询到的闪存状态不为闪存就绪状态,返回步骤S(20)。
步骤S(22):将闪存就绪状态中的就绪标志设置为第二数值。
具体的,协处理将闪存就绪状态中的就绪标志设置为0,从而协处理器一直处于查询闪存状态的循环当中,即重复步骤S(20)-步骤S(22),触发主处理器超时。
进一步地,在协处理器触发主处理器超时之后,主处理器确定是否产生擦除超时错误,并在确定产生擦除超时错误时,进入超时错误处理流程,处理该擦除超时错误,具体包括步骤S(23)-步骤S(28):
步骤S(23):查询写入状态;
具体的,在主处理器将第一命令结构体发送至协处理器之后,主处理器查询由协处理器发送的写入状态。
步骤S(24):判断当前时刻是否查询到协处理器发送的写入状态;
具体的,若当前时刻主处理器查询到协处理器发送的写入状态,则进入步骤S(25);若当前时刻主处理器未查询到协处理器发送的写入状态,则进入步骤S(26)。
步骤S(25):判断写入状态中的擦除失败标记位是否为第一数值;
具体的,主处理器判断写入状态中的擦除失败标记位是否为1,若擦除失败标记位为1,则进入步骤S(27);若擦除失败标记位不为1,例如:擦除失败标记位为0,则结束流程。
步骤S(26):判断当前时刻是否处于第二预设时间段内;
具体的,主处理器在当前时刻未查询到协处理器发送的擦除状态后,判断当前时刻是否处于第二预设时间段内,其中,第二预设时间段为从主处理器第一次查询擦除状态的时刻起始的一段时间,例如:第二预设时间段为15秒。若当前时刻处于从主处理器第一次查询擦除状态的时刻起始的15秒内,则返回步骤S(23);若当前时刻超出从主处理器第一次查询擦除状态的时刻起始的15秒内,则表明主处理器在第二预设时间段内未查询到协处理器发送的擦除状态,进入步骤S(28)。
步骤S(27):进入擦除错误处理流程;
具体的,若擦除失败标记位为第一数值,则主处理器确定产生擦除失败错误,并进入擦除错误处理流程,处理该擦除失败错误。
步骤S(28):进入超时错误处理流程。
具体的,若主处理器在第二预设时间段内未查询到协处理器发送的写入状态,则主处理器确定产生擦除超时错误,并进入超时错误处理流程,处理该擦除超时错误。
在本申请实施例中,提供一种注错测试方法,该注错测试方法应用于注错测试***,该注错测试方法包括:根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,其中,命令错误类型包括编程失败错误、编程超时错误、擦除失败错误或擦除超时错误;根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误,其中,编程错误包括编程失败错误或编程超时错误,擦除错误包括擦除失败错误或擦除超时错误。
通过根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误,本申请能够根据需求灵活注入擦除错误或编程错误,并且无需批量规模测试就能稳定产生错误,从而提高注入擦除错误或编程错误的效率,而且能够排除软件处理流程中的潜在问题,提高软件开发效率和闪存设备的稳定性。
请参阅图12,图12是本申请实施例提供的另一种掉电非易失性设备的结构示意图;
在本申请实施例中,该掉电非易失性设备应用上述实施例中的注错测试方法,优选地,该掉电非易失性设备为闪存设备。
如图12所示,掉电非易失性设备100包括存储控制芯片102和至少一个掉电非易失性介质105。图12中以一个掉电非易失性介质105为例,掉电非易失性介质105与存储控制芯片102通信连接
存储控制芯片102,连接掉电非易失性介质105,用于执行上述任一实施例中的注错测试方法。
请参阅图13,图13是本申请实施例提供的一种存储控制芯片的结构示意图;
如图13所示,存储控制芯片102包括注错测试***200。
结合图2,注错测试***200包括注错信息处理***201,注错信息处理***201包括主处理器2011和协处理器2012。其中,主处理器2011与协处理器2012通信连接。
其中,注错信息处理***201用于根据注错信息向闪存设备注入擦除错误或编程错误;主处理器2011,连接协处理器2012,用于根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,并将第一命令结构体传输至协处理器;协处理器2012,连接主处理器2011,用于接收第一命令结构体,并根据错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误。
在一些实施例中,注错测试***200还包括注错信息存储***202与注错信息传输***203。注错信息存储***202与注错信息传输***203的具体作用请参阅图3的相关内容,在此不再赘述。
在本申请实施例中,提供一种存储控制芯片,该存储控制芯片包括注错测试***,本申请能够根据注错信息灵活注入相应类型的编程错误或擦除错误,并且无需批量规模测试就能稳定产生错误,从而提高注入擦除错误或编程错误的效率。
掉电非易失性介质105,连接存储控制芯片102,用于存储注错命令池中的所有注错命令。其中,该掉电非易失性介质为闪存介质,例如:NorFlash。
在本申请实施例中,提供一种掉电非易失性设备,该掉电非易失性设备包括存储控制芯片和至少一个掉电非易失性介质。本申请能够通过掉电非易失性设备执行上述任一实施例中的注错测试方法,从而能够需求灵活注入擦除错误或编程错误,提高注入擦除错误或编程错误的效率。
本申请实施例还提供了一种非易失性计算机存储介质,非易失性计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,可使得上述一个或多个处理器可执行上述任意方法实施例中的注错测试方法。
以上所描述的装置或设备实施例仅仅是示意性的,其中作为分离部件说明的单元模块可以是或者也可以不是物理上分开的,作为模块单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络模块单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用直至得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;在本申请的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上的本申请的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (12)
1.一种注错测试***,其特征在于,所述注错测试***应用于掉电非易失性设备,所述注错测试***包括注错信息处理***,所述注错信息处理***用于根据注错信息向掉电非易失性设备注入擦除错误或编程错误,所述注错信息处理***包括主处理器和协处理器;
所述主处理器用于根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,并将所述第一命令结构体传输至所述协处理器;
所述协处理器用于接收所述第一命令结构体,并根据所述错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误,其中,所述操作状态包括写入状态或擦除状态。
2.根据权利要求1所述的***,其特征在于,所述编程错误与所述命令错误类型均包括编程失败错误或编程超时错误,所述错误类型标记位包括编程失败错误的标记位或超时标记位;
在所述命令错误类型为编程失败错误或编程超时错误时,所述主处理器具体用于:
配置写操作的命令参数;
将所述命令参数填充至第一命令结构体中;
将第一命令结构体中编程失败错误的标记位或超时标记位设置为第一数值;
将所述第一命令结构体传输至所述协处理器。
3.根据权利要求2所述的***,其特征在于,所述第一标记位包括编程失败标记位;
在所述命令错误类型为编程失败错误时,所述协处理器具体用于:
接收主处理器发送的所述第一命令结构体;
在第一命令结构体中编程失败错误的标记位为第一数值时,查询闪存状态,其中,所述闪存状态为掉电非易失性设备的当前工作状态;
在查询到所述闪存状态为闪存就绪状态后,将写入状态中的编程失败标记位设置为第一数值,并将所述写入状态发送给所述主处理器;
在所述命令错误类型为编程失败错误时,所述主处理器还用于:
接收所述协处理器发送的所述写入状态;
在所述写入状态中的编程失败标记位为第一数值时,确定产生编程失败错误,并处理所述编程失败错误。
4.根据权利要求2所述的***,其特征在于,
在所述命令错误类型为编程超时错误时,所述协处理器具体用于:
接收主处理器发送的所述第一命令结构体;
在第一命令结构体中的超时标记位为第一数值时,查询闪存状态;
在查询到所述闪存状态为闪存就绪状态后,将所述闪存就绪状态中的就绪标志设置为第二数值,以使所述协处理器不断查询闪存状态,从而触发所述主处理器处理所述编程超时错误;
在所述命令错误类型为编程超时错误时,所述主处理器还用于:
判断当前时刻是否查询到协处理器发送的写入状态;
若当前时刻查询到协处理器发送的写入状态,且所述写入状态中的编程失败标记位为第一数值,则确定产生编程失败错误,并处理所述编程失败错误;
若当前时刻未查询到协处理器发送的写入状态,且在第一预设时间段内未查询到协处理器发送的写入状态,则确定产生编程超时错误,并处理所述编程超时错误。
5.根据权利要求1所述的***,其特征在于,所述擦除错误与所述命令错误类型均包括擦除失败错误或擦除超时错误,所述错误类型标记位包括擦除失败错误的标记位或超时标记位;
在所述命令错误类型为擦除失败错误或擦除超时错误时,所述主处理器具体用于:
配置擦除操作的命令参数;
将所述命令参数填充至第一命令结构体中;
将第一命令结构体中擦除失败错误的标记位或超时标记位设置为第一数值;
将所述第一命令结构体传输至所述协处理器。
6.根据权利要求5所述的***,其特征在于,所述第一标记位包括擦除失败标记位;
在所述命令结构体中的命令错误类型为擦除失败错误时,所述协处理器用于:
接收主处理器发送的所述第一命令结构体;
在所述第一命令结构体中擦除失败错误的标记位为第一数值时,查询闪存状态,其中,所述闪存状态为掉电非易失性设备的当前工作状态;
在查询到所述闪存状态为闪存就绪状态后,将擦除状态中的擦除失败标记位设置为第一数值,并将所述擦除状态发送给所述主处理器;
在所述命令错误类型为擦除失败错误时,所述主处理器还用于:
接收协处理器发送的所述擦除状态;
在所述擦除状态中的擦除失败标记位为第一数值时,确定产生擦除失败错误,并处理所述擦除失败错误。
7.根据权利要求5所述的***,其特征在于,
在所述命令错误类型为擦除超时错误时,所述协处理器具体用于:
接收主处理器发送的所述第一命令结构体;
在第一命令结构体中的超时标记位为第一数值时,查询闪存状态;
在查询到所述闪存状态为闪存就绪状态后,将所述闪存就绪状态中的就绪标志设置为第二数值,以使所述协处理器不断查询闪存状态,从而触发所述主处理器处理所述擦除超时错误;
在所述命令错误类型为擦除超时错误时,所述主处理器还用于:
判断当前时刻是否查询到协处理器发送的擦除状态;
若当前时刻查询到协处理器发送的擦除状态,且所述擦除状态中的擦除失败标记位为第一数值,则确定产生擦除失败错误,并处理所述擦除失败错误;
若当前时刻未查询到协处理器发送的擦除状态,且在第二预设时间段内未查询到协处理器发送的擦除状态,则确定产生擦除超时错误,并处理所述擦除超时错误。
8.根据权利要求1-7任一项所述的***,其特征在于,所述注错测试***还包括注错信息存储***和注错信息传输***,其中,
所述注错信息存储***,连接所述注错信息传输***,用于获取注错命令,并将所述注错命令存储至注错命令池,其中,所述注错命令包括注错信息;
所述注错信息传输***,连接所述注错信息存储***与所述注错信息处理***,用于在写过程或擦除过程中遍历所述注错命令池,在第二命令结构体的信息与所述注错命令池中的某一注错命令的注错信息匹配时,将所述注错信息同步进第一命令结构体,其中,所述第二命令结构体为注错命令的结构体。
9.一种存储控制芯片,其特征在于,包括:
如权利要求1-8任一项所述的注错测试***。
10.一种掉电非易失性设备,其特征在于,包括:
如权利要求9所述的存储控制芯片;
至少一个掉电非易失性介质,与所述存储控制芯片通信连接。
11.一种注错测试方法,其特征在于,应用于权利要求10所述的掉电非易失性设备,所述方法包括:
根据注错信息中的命令错误类型,配置第一命令结构体中的错误类型标记位,其中,所述命令错误类型包括编程失败错误、编程超时错误、擦除失败错误或擦除超时错误;
根据所述错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误,其中,所述编程错误包括编程失败错误或编程超时错误,所述擦除错误包括擦除失败错误或擦除超时错误。
12.根据权利要求11所述的方法,其特征在于,所述操作状态包括写入状态或擦除状态,所述错误类型标记位包括编程失败错误的标记位、擦除失败错误的标记位或超时标记位,所述第一标记位包括编程失败标记位或擦除失败标记位;
所述根据所述错误类型标记位更改操作状态中的第一标记位,或者更改闪存就绪状态中的就绪标志,以生成相应类型的擦除错误或编程错误,包括:
在所述编程失败错误的标记位为第一数值,且闪存状态为闪存就绪状态时,将写入状态中的编程失败标记位设置为第一数值,以生成所述编程失败错误,其中,所述闪存状态为掉电非易失性设备的当前工作状态;
在所述命令错误类型为编程超时错误,且所述超时标记位为第一数值,且所述闪存状态为闪存就绪状态时,将所述闪存就绪状态中的就绪标志设置为第二数值,以生成所述编程超时错误;
在所述擦除失败错误的标记位为第一数值,且所述闪存状态为闪存就绪状态时,将擦除状态中的擦除失败标记位设置为第一数值,以生成所述擦除失败错误;
在所述命令错误类型为擦除超时错误,且所述超时标记位为第一数值,且所述闪存状态为闪存就绪状态时,将所述闪存就绪状态中的就绪标志设置为第二数值,以生成所述擦除超时错误。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311734718.9A CN117746966A (zh) | 2023-12-15 | 2023-12-15 | 注错测试***、注错测试方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311734718.9A CN117746966A (zh) | 2023-12-15 | 2023-12-15 | 注错测试***、注错测试方法及相关装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117746966A true CN117746966A (zh) | 2024-03-22 |
Family
ID=90278618
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311734718.9A Pending CN117746966A (zh) | 2023-12-15 | 2023-12-15 | 注错测试***、注错测试方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117746966A (zh) |
-
2023
- 2023-12-15 CN CN202311734718.9A patent/CN117746966A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10664355B2 (en) | Data storage device performing recovery operation after sudden power-off and operating method thereof | |
CN106297865B (zh) | 控制半导体存储器件的控制器及其操作方法 | |
CN102132354B (zh) | 闪存中的数据的快速低功率读取 | |
KR20100113083A (ko) | 셀당 단일 비트 nand 플래시 메모리를 에뮬레이팅하기 위한 셀당 다수 비트 nand 플래시 메모리에 대한 제어기 | |
KR20210070379A (ko) | 메모리 서브-시스템의 요구 시 리프레시 동작을 수행하는 방법 | |
US20060224821A1 (en) | System for parallel updating flash memory and method for the same | |
CN110196684A (zh) | 数据存储装置、其操作方法以及具有其的存储*** | |
US10818328B2 (en) | Nonvolatile memory device, operation method of the nonvolatile memory device, and operation method of memory controller controlling the nonvolatile memory device | |
DE102010006139A1 (de) | System und Verfahren zur Finalisierung eines Halbleiterspeichers | |
CN108389600B (zh) | 数据储存装置以及参数改写方法 | |
CN115587011A (zh) | 管理存储装置中的调试日志的方法 | |
CN107045484B (zh) | 数据存储装置 | |
US20150234741A1 (en) | Command Execution Using Existing Address Information | |
US20200089598A1 (en) | Reconfigurable simulation system and method for testing firmware of storage | |
US10901653B2 (en) | Electronic device | |
CN110083305A (zh) | 存储器***及其操作方法 | |
CN117746966A (zh) | 注错测试***、注错测试方法及相关装置 | |
JP2008027326A (ja) | システムコントローラ、該システムコントローラを有するフラッシュメモリシステム、フラッシュメモリモジュールの制御方法 | |
CN105988737A (zh) | 存储***、包括其的计算***以及操作存储***的方法 | |
CN116521057A (zh) | 数据处理***、其操作方法及其存储装置 | |
CN110609596A (zh) | 数据储存装置的开发***以及产品化方法 | |
KR102523967B1 (ko) | 데이터 저장 장치 및 그것의 동작 방법 및 그것을 포함하는 데이터 처리 시스템 | |
CN109933282B (zh) | 存储器***及其操作方法 | |
CN115114193A (zh) | 存储器***、存储器***的控制方法及主机装置 | |
KR102649657B1 (ko) | 데이터 저장 장치 및 동작 방법, 이를 포함하는 스토리지 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |