1.本公开涉及
存储器技术领域,具体而言,涉及一种存储器
测试方法、装置、设备及可读存储介质。
背景技术:
2.动态随机存取存储器(dynamic random access memory,dram)是依靠其内部电容电位来记录其逻辑值的,但是电容因各方面的技术困难无可避免地有显著的漏电(放电)现象而导致电位下降,因此需要周期性地对高电位电容进行充电而保持其电位稳定,这就是dram的刷新。dram刷新操作分为两种:自动刷新(auto refresh,ar)与自刷新(self refresh,sr)。
3.在dram测试中,sr测试是一项重要的测试,用于测试dram的数据保持能力。系统层进行sr测试可采用两种方法,一种是通过系统预设的待机模式时进行sr测试,单次测试耗费时间较长;另一种是通过专门的程序直接反复进出sr。但相关技术中的系统层sr测试的压力不够,系统dram空闲很多,只有遇到时序问题或者运行程序测试程序的dram段内容出错造成系统卡住或者系统恐慌(panic)才能发现dram有问题,测试出错误概率比较小,可能需要进行多次测试,整体耗费时间比较长。
4.如上
所述,如何提高测试的效率提供成为亟待解决的问题。
5.在所述背景技术部分公开的上述信息仅用于加强对本公开的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
技术实现要素:
6.本公开的目的在于提供一种存储器测试方法、装置、设备及可读存储介质,至少在一定程度上提高sr测试的效率。
7.本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
8.根据本公开的一方面,提供一种存储器测试方法,包括:执行进入自刷新命令,以使待测试存储器进入自刷新状态;执行离开自刷新命令,以使所述待测试存储器离开所述自刷新状态;运行预选
模块对应的测试程序,以对所述待测试存储器的为所述预选模块分配的地址段进行测试;读取所述待测试存储器的空间中未分配地址段上的数据,以对所述待测试存储器的未分配地址段进行测试;在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤,以对所述待测试存储器进行测试。
9.根据本公开的一实施例,所述未分配地址段包括填充地址段和预留地址段;所述读取所述待测试存储器的未分配地址段上的数据,以对所述待测试存储器的未分配地址段进行测试包括:读取所述待测试存储器的填充地址段上的数据,获取数据读取结果;将所述数据读取结果与预设测试数据进行比较,根据比较结果获得所述待测试存储器的填充地址段的测试结果。
10.根据本公开的一实施例,所述方法还包括:执行在所述待测试存储器的填充地址段写入所述预设测试数据的操作。
11.根据本公开的一实施例,所述方法还包括:获取所述待测试存储器的空间大小;根据所述待测试存储器的空间大小获得所述填充地址段对应的存储器空间大小和所述预留地址段对应的存储器空间大小。
12.根据本公开的一实施例,所述方法还包括:获得所述待测试存储器的测试结果;根据所述待测试存储器的空间大小和所述测试结果调整所述填充地址段对应的存储器空间大小和所述预留地址段对应的存储器空间大小。
13.根据本公开的一实施例,所述方法还包括:从已分配待测试存储器的地址段的多个设备模块中确定所述预选模块。
14.根据本公开的一实施例,所述运行预选模块对应的测试程序,以对所述待测试存储器的为所述预选模块分配的地址段进行测试包括:运行所述预选模块对应的测试程序,根据所述测试程序的运行情况获得所述待测试存储器的为所述预选模块分配的地址段的测试结果。
15.根据本公开的一实施例,所述方法还包括:设置休眠恢复时间;所述执行离开自刷新命令包括:根据所述待测试存储器进入自刷新状态的时间和所述休眠恢复时间进行计时,在计时结束时执行所述离开自刷新命令。
16.根据本公开的一实施例,所述读取所述待测试存储器的空间中未分配地址段上的数据包括:根据所述待测试存储器进入自刷新状态的时间和所述休眠恢复时间进行计时,在计时结束时读取所述待测试存储器的空间中未分配地址段上的数据。
17.根据本公开的一实施例,所述运行预选模块对应的测试程序,以对所述待测试存储器的为所述预选模块分配的地址段进行测试包括:在所述执行进入自刷新命令之前,运行预选模块对应的测试程序;所述执行进入自刷新命令,以使待测试存储器进入自刷新状态包括:执行所述进入自刷新命令,以使所述待测试存储器进入自刷新状态,在所述待测试存储器进入自刷新状态时所述测试程序暂停运行;所述执行离开自刷新命令,以使所述待测试存储器离开所述自刷新状态包括:执行所述离开自刷新命令,以使所述待测试存储器离开所述自刷新状态,在所述待测试存储器离开所述自刷新状态时所述测试程序恢复运行。
18.根据本公开的一实施例,所述在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤,以对所述待测试存储器进行测试包括:在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤,根据进入自刷新状态的情况获得所述待测试存储器的测试结果。
19.根据本公开的一实施例,所述在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤包括:获取当前自刷新次数;在所述当前自刷新次数小于预设自刷新次数的情况下,判定不满足测试结束条件,返回所述执行进入自刷新命令的步骤。
20.根据本公开的再一方面,提供一种存储器测试装置,包括:进入自刷新命令执行模块,用于执行进入自刷新命令,以使待测试存储器进入自刷新状态;离开自刷新命令执行模块,用于执行离开自刷新命令,以使所述待测试存储器离开所述自刷新状态;测试程序运行模块,用于运行预选模块对应的测试程序,以对所述待测试存储器的为所述预选模块分配
的地址段进行测试;数据读取测试模块,用于读取所述待测试存储器的空间中未分配地址段上的数据,以对所述待测试存储器的未分配地址段进行测试;测试结束判断模块,用于在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤,以对所述待测试存储器进行测试。
21.根据本公开的一实施例,所述未分配地址段包括填充地址段和预留地址段;所述数据读取测试模块包括:数据读取模块,用于读取所述待测试存储器的填充地址段上的数据,获取数据读取结果;数据读取测试结果获得模块,用于将所述数据读取结果与预设测试数据进行比较,根据比较结果获得所述待测试存储器的填充地址段的测试结果。
22.根据本公开的一实施例,所述装置还包括:测试数据写入模块,用于执行在所述待测试存储器的填充地址段写入所述预设测试数据的操作。
23.根据本公开的一实施例,所述装置还包括:存储器的空间大小获取模块,用于获取所述待测试存储器的空间大小;预留空间大小获得模块,用于根据所述待测试存储器的空间大小获得所述填充地址段对应的存储器空间大小和所述预留地址段对应的存储器空间大小。
24.根据本公开的一实施例,所述装置还包括:测试结果获得模块,用于获得所述待测试存储器的测试结果;预留空间大小调整模块,用于根据所述待测试存储器的空间大小和所述测试结果调整所述填充地址段对应的存储器空间大小和所述预留地址段对应的存储器空间大小。
25.根据本公开的一实施例,所述装置还包括:预选模块确定模块,用于从已分配待测试存储器的地址段的多个设备模块中确定所述预选模块。
26.根据本公开的一实施例,所述测试程序运行模块,还用于运行所述预选模块对应的测试程序,根据所述测试程序的运行情况获得所述待测试存储器的为所述预选模块分配的地址段的测试结果。
27.根据本公开的一实施例,所述装置还包括:休眠恢复时间设置模块,用于设置休眠恢复时间;所述离开自刷新命令执行模块,还用于根据所述待测试存储器进入自刷新状态的时间和所述休眠恢复时间进行计时,在计时结束时执行所述离开自刷新命令。
28.根据本公开的一实施例,所述数据读取测试模块,还用于根据所述待测试存储器进入自刷新状态的时间和所述休眠恢复时间进行计时,在计时结束时读取所述待测试存储器的空间中未分配地址段上的数据。
29.根据本公开的一实施例,所述测试程序运行模块,还用于在所述执行进入自刷新命令之前,运行预选模块对应的测试程序;所述进入自刷新命令执行模块,还用于执行所述进入自刷新命令,以使所述待测试存储器进入自刷新状态,在所述待测试存储器进入自刷新状态时所述测试程序暂停运行;所述离开自刷新命令执行模块,还用于执行所述离开自刷新命令,以使所述待测试存储器离开所述自刷新状态,在所述待测试存储器离开所述自刷新状态时所述测试程序恢复运行。
30.根据本公开的一实施例,所述测试结果获得模块,还用于在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤,根据进入自刷新状态的情况获得所述待测试存储器的测试结果。
31.根据本公开的一实施例,所述测试结束判断模块包括:自刷新次数获取模块,用于
获取当前自刷新次数;所述测试结束判断模块,还用于在所述当前自刷新次数小于预设自刷新次数的情况下,判定不满足测试结束条件,返回所述执行进入自刷新命令的步骤。
32.根据本公开的再一方面,提供一种设备,包括:存储器、处理器及存储在所述存储器中并可在所述处理器中运行的可执行指令,所述处理器执行所述可执行指令时实现如上述任一种方法。
33.根据本公开的再一方面,提供一种计算机可读存储介质,其上存储有计算机可执行指令,所述可执行指令被处理器执行时实现如上述任一种方法。
34.本公开的实施例提供的存储器测试方法,通过执行进入自刷新命令使待测试存储器进入自刷新状态,执行离开自刷新命令使待测试存储器离开自刷新状态,然后运行预选模块对应的测试程序,以对待测试存储器的为预选模块分配的地址段进行测试,再读取待测试存储器的空间中未分配地址段上的数据,以对待测试存储器的未分配地址段进行测试,然后在判定不满足测试结束条件时,返回执行进入自刷新命令的步骤以对待测试存储器进行sr测试,从而可实现在sr测试的同时兼顾压力测试,提高测试的效率。
35.应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
36.通过参照附图详细描述其示例实施例,本公开的上述和其它目标、特征及优点将变得更加显而易见。
37.图1示出本公开实施例中一种示例性安卓系统启动架构。
38.图2根据一示例性实施例示出了内核层进行自刷新测试的步骤示意图。
39.图3示出本公开实施例中一种存储器测试方法的流程图。
40.图4示出了图3中所示的步骤s302至s304及s310在一实施例中的处理过程示意图。
41.图5是根据图4示出的一种自刷新测试流程示意图。
42.图6是根据一示例性实施例示出的一种系统进入休眠的流程示意图。
43.图7是根据图6示出的一种早期休眠机制中在内核层的实现示意图。
44.图8是根据图3至图5示出的一种存储器测试流程示意图。
45.图9是根据图3至图8示出的一种dram测试中dram访问实现示意图。
46.图10示出本公开实施例中一种存储器测试装置的框图。
47.图11示出本公开实施例中另一种存储器测试装置的框图。
48.图12示出本公开实施例中一种电子设备的结构示意图。
具体实施方式
49.现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施例使得本公开将更加全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
50.此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施
例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、装置、步骤等。在其它情况下,不详细示出或描述公知结构、方法、装置、实现或者操作以避免喧宾夺主而使得本公开的各方面变得模糊。
51.此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本公开的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。符号“/”一般表示前后关联对象是一种“或”的关系。
52.在本公开中,除非另有明确的规定和限定,“连接”等术语应做广义理解,例如,可以是电连接或可以互相通讯;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本公开中的具体含义。
53.图1示出了可以应用本公开的存储器测试方法或存储器测试装置的示例性安卓(android)系统启动架构。android系统启动是一个从下层向上层的过程:加载器(loader)102层
→
内核(kernel)104层
→
本地服务(native)106层
→
应用框架(包括c++framework 108和java framework 110)层
→
应用程序(apps)112层。android系统启动时,在loader 102层会引导芯片从固化在只读存储器(read-only memory,rom)中的预设代码开始执行(boot rom阶段),然后加载引导程序到随机访问存储器(random access memory,ram);接着启动ram中的引导程序(boot loader阶段),实现检查ram、初始化参数等功能。在其他各层从下往上依次启动若干进程,实现系统启动中各个模块的加载。
54.相关技术中的sr测试可在三个阶段进入:1)boot loader阶段,2)kernel层启动阶段,3)应用程序层启动阶段(也称为系统阶段或android阶段),在高层启动阶段进入sr测试需要调用低层的进程。在boot loader阶段引导程序可以运行在静态随机存取存储器(static random access memory,sram),在动态随机存取存储器(dynamic random access memory,dram)初始化完成后,即可以对dram进行读写,可以做到dram的全尺寸(size)测试。在这个阶段对dram进行sr测试,可以通过直接写模式寄存器(mode register,mr)命令,对dram进行sr测试,例如系统级测试(system level test,slt)、封装芯片级(packaged chip level)的功能性测试(functional test,ft)可采用这种方式。这种方式通过中央处理器(central processing unit,cpu)直接写mr命令让dram进入sr,以及通过cpu直接发读写命令去读写dram,有以下缺点:cpu直接操作dram,没有中间过程;只是单纯的操作dram,不涉及系统其他模块;只能测试出dram本身的时序错误和功能错误。
55.在kernel层启动阶段,所有设备都在dram上运行且由kernel层管理,在此阶段dram进入sr,dram不能访问,所以所有设备都必须停止运行。图2根据一示例性实施例示出了kernel层进行sr测试的步骤示意图。如图2所示,以linux内核为例,可采用三种进入休眠(suspend)的方式:冻结(freeze)、待机(standby)和ram休眠(suspend to ram,str),在用户空间2006向“/sys/power/state”文件分别写入“freeze”、“standby”、“mem”,即可触发这几种休眠。在kernel层2004按以下三个步骤进入休眠。
56.(1)冻结用户态进程和内核态任务,停止kernel层当前运行的任务(s204)。
57.(2)调用注册的设备的休眠的回调函数,依次让各设备进入suspend状态(s206),
停止各设备的运行。
58.(3)休眠核心设备和使cpu进入休眠态(s208,s210,s212,s214)。
59.其中冻结进程是内核把进程列表中所有的进程的状态都设置为停止,并且保存所有进程的上下文。这些是为了退出sr的时候能恢复到进sr状态前状态下的数据(s232)。kernel层2004休眠处理完成后进入加载器层2002,平台进入休眠(s216),休眠开始,sr自动进行,直至休眠恢复时间,退出平台休眠(s218),然后进入kernel层的恢复过程。kernel层的恢复过程s220至s230与步骤s214、s212
……
s204等一一对应,直至用户空间2006中恢复进入休眠前的状态(s232)。
60.在内核层2004及加载器层2002,休眠及恢复过程涉及到电源管理(power management,pm)核心(core)、设备(device)pm、各个设备的驱动、平台相关(platform dependent)pm、cpu控制(control)中断请求(interrupt request,irq)等多个模块,涉及控制台切换(console switch)、过程冻结(process freeze)、cpu热拔插(hotplug)、唤醒(wakeup)处理等多个过程。
61.在系统阶段进入sr测试,可以采用两种方式:1)通过单独的程式反复进出sr;2)待机测试。其中,第一种方式通过单独的程式反复进出sr可以测试dram的数据保持能力,当系统进入sr后,如果dram数据没有保持住,就会出现有些数据变化,这个时候退出sr,又重新读写dram,如果错误的数据正好是代码段或者数据段,从而程序就会挂掉,这样就不能再进入sr。例如设置100次进出sr,如果系统挂掉,则测试结果获得的记录(log)可能只有几十次,这样就可以知道sr可能有问题,可以做进一步故障排除(debug),查看具体故障的原因。第二种方式是利用android系统自身的省电的算法,例如没有屏幕操作15秒后就黑屏,30分钟没有操作就进入睡眠模式等,这个时候dram就是进入sr模式,但这套算法需要耗费较长的时间。
62.在系统阶段进入sr也会经过kernel层休眠过程(参照图6)。相关技术中在这两个阶段进行sr测试具有以下缺点:1)系统压力不够,此时系统dram空闲很多,只有遇到时序问题或者运行程序的dram段内容出错造成系统卡住或者系统panic才能发现问题,测试出错误概率比较小,可能需要进行多次测试,整体耗费时间比较长。
63.因此,本公开实施例提供了一种系统级sr测试方法,通过执行进入自刷新命令使待测试存储器进入自刷新状态,执行离开自刷新命令使待测试存储器离开自刷新状态,然后运行预选模块对应的测试程序,以对待测试存储器的为预选模块分配的地址段进行测试,再读取待测试存储器的空间中未分配地址段上的数据,以对待测试存储器的未分配地址段进行测试,然后在判定不满足测试结束条件时,返回执行进入自刷新命令的步骤以对待测试存储器进行sr测试,从而可实现在sr测试的同时兼顾压力测试,提高测试的效率。
64.图3是根据一示例性实施例示出的一种存储器测试方法的流程图。如图3所示的方法例如可以应用于对运行android系统的dram进行测试。
65.参考图3,本公开实施例提供的方法30可以包括以下步骤。
66.在步骤s302中,执行进入自刷新命令,以使待测试存储器进入自刷新状态。
67.在步骤s304中,执行离开自刷新命令,以使待测试存储器离开自刷新状态。
68.在一些实施例中,可在系统阶段通过执行对应的命令进出sr,具体实施方式可参照图4及图5。
69.在一些实施例中,在系统阶段进入sr可以通过执行命令使系统进入休眠来实现,系统阶段进入休眠的实施方式可参照图6和图7。
70.在步骤s306中,运行预选模块对应的测试程序,以对待测试存储器的为预选模块分配的地址段进行测试。
71.在一些实施例中,整个dram被分为很多区段,有些地址段在开机时被分配给特定模块(module)。在单独进行suspend(通过程式反复进出sr)或空闲(idle)待机测试的情况下,系统的很多模块都没有运行,例如usb(universal serial bus,通用串行总线)模块、gpu(graphics processing unit,图形处理器)模块等等,因此可在开始进出sr之前,从已分配待测试存储器的地址段的多个设备模块中确定预选模块,在每次出sr之后运行预选模块的测试程序,具体实施方式可参照图8的测试流程和图9的dram访问实现示意。
72.在步骤s308中,读取待测试存储器的空间中未分配地址段上的数据,以对待测试存储器的未分配地址段进行测试。
73.在一些实施例中,未分配地址段可以包括填充地址段和预留地址段,读取待测试存储器的填充地址段上的数据,获取数据读取结果,然后将数据读取结果与预设测试数据进行比较,根据比较结果获得待测试存储器的填充地址段的测试结果。
74.在一些实施例中,可以在步骤s302之前,执行在待测试存储器的填充地址段写入预设测试数据的操作。可以先获取待测试存储器的空间大小,然后根据待测试存储器的空间大小获得填充地址段对应的存储器空间大小和预留地址段对应的存储器空间大小,再在填充地址段写入预设测试数据。
75.在步骤s310中,在判定不满足测试结束条件时,返回执行进入自刷新命令的步骤,以对待测试存储器进行测试。
76.在一些实施例中,例如,测试结束条件可以是达到预设自刷新次数。再例如,测试结束条件也可以是达到预设测试时长。
77.在一些实施例中,可以在测试结束时获得待测试存储器的测试结果,测试结果可以包括通过进出sr得到的数据保持能力、黄金数据比对结果以及模块运行测试结果。然后根据待测试存储器的空间大小和测试结果调整填充地址段对应的存储器空间大小和预留地址段对应的存储器空间大小。
78.根据本公开实施例提供的存储器测试方法,通过执行进入自刷新命令使待测试存储器进入自刷新状态,执行离开自刷新命令使待测试存储器离开自刷新状态,然后运行预选模块对应的测试程序,以对待测试存储器的为预选模块分配的地址段进行测试,再读取待测试存储器的空间中未分配地址段上的数据,以对待测试存储器的未分配地址段进行测试,然后在判定不满足测试结束条件时,返回执行进入自刷新命令的步骤以对待测试存储器进行sr测试,从而可实现在sr测试的同时兼顾压力测试,提高测试的效率。
79.图4示出了图3中所示的步骤s302至s304及s310在一实施例中的处理过程示意图。如图4所示,本公开实施例中,sr测试的过程可以进一步包括以下步骤。
80.步骤s402,设置休眠恢复时间。
81.步骤s404,执行进入自刷新命令,以使待测试存储器进入自刷新状态。
82.步骤s406,根据待测试存储器进入自刷新状态的时间和休眠恢复时间进行计时,在计时结束时执行离开自刷新命令,以使待测试存储器离开自刷新状态。
83.步骤s408,获取当前自刷新次数。
84.步骤s410,在当前自刷新次数小于预设自刷新次数的情况下,判定不满足测试结束条件,返回执行进入自刷新命令的步骤。
85.图5是根据图4示出的一种sr测试流程示意图。可以采用android操作系统的设备对dram进行测试,例如可以是手机等终端设备。如图5所示,开始测试(s502)后,设备进入亮屏倒计时(s504),倒计时结束进入sr(s506)。测试程序按照设定的休眠恢复时间对sr状态进行倒计时(s508),倒计时结束出sr(s510)。出sr后获得已经进出sr的次数,计算与预设自刷新次数相比的剩余次数(s512),若剩余次数为0则结束测试(s514)。若剩余次数不为0则保存sr测试数据(s516)后,返回步骤s504准备下一次进出sr。
86.图6是根据一示例性实施例示出的一种系统进入休眠的流程示意图。图6以android系统中的早期休眠(early suspend)机制为例对休眠唤醒流程进行示意。如图6所示,应用程序层的应用程序(application,app)(例如可以是app a)可以创建、申请及释放唤醒锁(wake_lock)(s602),框架层的电源管理(power manager)申请进入睡眠(sleep)(s604),检查灭屏原因,判断是否直接进入睡眠(s606),检查系统状态,发送广播(s608),更新系统状态(s610)。在java本地接口(java native interface,jni)层,在powermangerserivce检查系统已经没有wake_lock时,接收通知进行睡眠处理(s612)。然后在硬件抽象层(hardware abstraction layer,hal)抽象化了从用户空间到内核空间硬件设备的访问,判断是否进行early suspend,将wake_lock信息传递到内核空间,进行系统调用(s614)。在内核层的休眠(s616)及唤醒过程可参照图2中步骤s204至步骤s230,内核层中实现该过程的模块可参照图7。
87.图7是根据图6示出的一种早期休眠机制中在内核层的实现示意图。如图7所示,hal系统调用内核层的早期休眠管理(early suspend manager)模块702和唤醒锁管理(wake_lock manager)模块704。早期休眠管理模块702包括早期休眠模块7022和晚期恢复模块7024,管理屏幕及背光驱动7062、触摸屏驱动7064和摄像头驱动706等等,控制这些驱动进行休眠及恢复;唤醒锁管理模块704通过linux休眠管理模块7042管理cpu驱动7082、wi-fi(无线通信技术)驱动7084、蓝牙(bluetooth,bt)驱动7086,控制这些驱动进行休眠及恢复。
88.图8是根据图3至图5示出的一种存储器测试流程示意图。如图8所示,android系统启动(s802),获取设备系统权限,首先设置休眠恢复时间(s804),例如可分别设置进入sr的时间(休眠时间)和出sr的时间(恢复时间),也可设定进入sr的时间和sr状态的持续时间。然后选择待运行的模块(s806),选定的模块即为本次测试的预选模块。然后获取待测试存储器的空间大小,并根据待测试存储器的空间大小获得填充地址段对应的存储器空间大小和预留地址段(也称为自由空间、free空间)对应的存储器空间大小(s808)。然后执行在待测试存储器的填充地址段写入预设测试数据(即指图8中的黄金数据)的操作(s810)。然后运行在步骤s806选定的预选模块对应的测试程序(s812)。接着,根据预设的时间执行进入自刷新命令(s814),以使待测试存储器进入自刷新状态,在待测试存储器进入自刷新状态时测试程序暂停运行。根据待测试存储器进入自刷新状态的时间和休眠恢复时间进行计时,在计时结束时执行离开自刷新命令(s816),以使待测试存储器离开自刷新状态,在待测试存储器离开自刷新状态时测试程序恢复运行(s818),并根据测试程序的运行情况获得待
测试存储器的为预选模块分配的地址段的测试结果。可根据待测试存储器进入自刷新状态的时间和休眠恢复时间进行计时,例如可在上层设置定时器休眠和唤醒的时间,然后传到底层,由定时器具体执行。在计时结束时读取待测试存储器的填充地址段上的数据,获取数据读取结果,将数据读取结果与预设测试数据进行比较(s820),根据比较结果获得待测试存储器的填充地址段的测试结果。获得为预选模块分配的地址段的测试结果、填充地址段的测试结果以及根据进入自刷新状态的情况获得的sr测试的结果为循环测试中本次测试的测试结果(s822),在循环未结束(例如当前自刷新次数小于预设自刷新次数)的情况下返回进入自刷新命令的步骤s814。若循环结束(例如当前自刷新次数不小于预设自刷新次数),则结束本次测试(s824)。
89.图9是根据图3至图8示出的一种dram测试中dram访问实现示意图。如图9所示,以低功耗双倍数据速率同步动态随机存取内存(low power double data rate sdram(synchronous dynamic random-access memory),lpddr)(如lpddr4)为例,整个dram地址段被分为很多区间,包括系统段902、usb段904、wi-fi/bt段906、osd(on screen display,)段908、gpu段910和自由段912,其大小如系统段902为0m(b)~128m(b),usb段904为128m(b)~256m(b)等等,有些是在开机时候就被分配给特定模块,剩下自由(free)的才能供系统启动后cpu临时申请使用。设备的这些外部模块,例如cpu、usb、wi-fi/bt等等,向dram发送的命令,首先通过对应的总线(例如cpu利用高级高性能总线(advanced high-performance bus,ahb)或高级可拓展接口(advanced extensible interface,axi),其余模块利用高级外围总线(advanced peripheral bus))发送到管理模块emi(external memory interface,外部存储器接口)进行处理,emi包括与外部模块对应的多个端口,可以对外部模块发过来的命令进行优先级、访问顺序等管理。然后emi再将命令发给控制器(controller)执行,controller通过物理层(phy)访问dram对应的地址段,执行具体访问dram动作。
90.参照图8,在测试过程中,在步骤s806例如可以从图9中的usb模块和gpu模块选择一个待运行模块。在步骤s810针对图9中的自由段912,根据dram大小(size)以及自由段912部分大小(例如1.5gb~4gb)来准备填充数据的大小,要预估出准备运行预选模块所需要的dram空间大小(即预留地址段对应的存储器空间大小),预留出的size不能太大也不能太小,预留太小系统运行空间不够,预留过大造成测试效果变差。将固定的数据填充到填充地址段,可以把自由段912大部分占满。每次退出suspend,针对已经被分配的空间,在步骤s818依次轮流让这些模块运行起来,看系统是否挂(hang)住或者是否运行正常,来判断dram数据是否出错,例如本次测试预选模块为usb,则下次测试预选模块为gpu,可以测试为该模块分配的这部分dram空间。在步骤s820针对free部分读出其数据与黄金(golden)数据(data)进行对比,看是否有数据出现错误。顶层要设计好和底层接口,模块运行测试和底层黄金数据检测同时进行,例如可采用图8中计时的方法,当系统进sr时底层的模块也是会被暂停,系统退出sr的时候会被重新运行,底层模块可以设置计时器,计时到时进行数据比对。
91.根据本公开实施例提供的存储器测试方法,对于待测试的存储器在未分配地址段填充一定大小的数据,在每次进出sr时读取该段的数据并将已分配内存的模块运行起来,提高了sr测试的压力,使测试更接近用户使用场景,测试效率较高。
92.图10是根据一示例性实施例示出的一种存储器测试装置的框图。如图10所示的装置例如可以应用于对运行android系统的dram进行测试。
93.参考图10,本公开实施例提供的装置100可以包括进入自刷新命令执行模块1002、离开自刷新命令执行模块1004、测试程序运行模块1006、数据读取测试模块1008和测试结束判断模块1010。
94.进入自刷新命令执行模块1002可用于执行进入自刷新命令,以使待测试存储器进入自刷新状态。
95.离开自刷新命令执行模块1004可用于执行离开自刷新命令,以使待测试存储器离开自刷新状态。
96.测试程序运行模块1006可用于运行预选模块对应的测试程序,以对待测试存储器的为预选模块分配的地址段进行测试。
97.数据读取测试模块1008可用于读取待测试存储器的空间中未分配地址段上的数据,以对待测试存储器的未分配地址段进行测试。
98.测试结束判断模块1010可用于在判定不满足测试结束条件时,返回执行进入自刷新命令的步骤,以对待测试存储器进行测试。
99.图11是根据一示例性实施例示出的另一种存储器测试装置的框图。如图11所示的装置例如可以应用于对运行android系统的dram进行测试。
100.参考图11,本公开实施例提供的装置110可以包括休眠恢复时间设置模块1101、进入自刷新命令执行模块1102、离开自刷新命令执行模块1104、预选模块确定模块1105、测试程序运行模块1106、存储器的空间大小获取模块11072、预留空间大小获得模块11074、测试数据写入模块11076、数据读取测试模块1108、测试结束判断模块1110、测试结果获得模块1112、预留空间大小调整模块1114,其中数据读取测试模块1108可以包括数据读取模块11082和数据读取测试结果获得模块11084,测试结束判断模块1110可以包括自刷新次数获取模块11102。
101.休眠恢复时间设置模块1101可用于设置休眠恢复时间。
102.进入自刷新命令执行模块1102可用于执行进入自刷新命令,以使待测试存储器进入自刷新状态。
103.进入自刷新命令执行模块1102还可用于执行进入自刷新命令,以使待测试存储器进入自刷新状态,在待测试存储器进入自刷新状态时测试程序暂停运行。
104.离开自刷新命令执行模块1104可用于执行离开自刷新命令,以使待测试存储器离开自刷新状态。
105.离开自刷新命令执行模块1104还可用于根据待测试存储器进入自刷新状态的时间和休眠恢复时间进行计时,在计时结束时执行离开自刷新命令。
106.离开自刷新命令执行模块1104还可用于执行离开自刷新命令,以使待测试存储器离开自刷新状态,在待测试存储器离开自刷新状态时测试程序恢复运行。
107.预选模块确定模块1105可用于从已分配待测试存储器的地址段的多个设备模块中确定预选模块。
108.测试程序运行模块1106可用于运行预选模块对应的测试程序,以对待测试存储器的为预选模块分配的地址段进行测试。
109.测试程序运行模块1106还可用于在执行进入自刷新命令之前,运行预选模块对应的测试程序。
110.测试程序运行模块1106还可用于运行预选模块对应的测试程序,根据测试程序的运行情况获得待测试存储器的为预选模块分配的地址段的测试结果。
111.存储器的空间大小获取模块11072可用于获取待测试存储器的空间大小。
112.预留空间大小获得模块11074可用于根据待测试存储器的空间大小获得填充地址段对应的存储器空间大小和预留地址段对应的存储器空间大小。
113.测试数据写入模块11076可用于执行在待测试存储器的填充地址段写入预设测试数据的操作。
114.数据读取测试模块1108可用于读取待测试存储器的空间中未分配地址段上的数据,以对待测试存储器的未分配地址段进行测试。未分配地址段包括填充地址段和预留地址段。
115.数据读取测试模块1108还可用于根据待测试存储器进入自刷新状态的时间和休眠恢复时间进行计时,在计时结束时读取待测试存储器的空间中未分配地址段上的数据。
116.数据读取模块11082可用于读取待测试存储器的填充地址段上的数据,获取数据读取结果。
117.数据读取测试结果获得模块11084可用于将数据读取结果与预设测试数据进行比较,根据比较结果获得待测试存储器的填充地址段的测试结果。
118.测试结束判断模块1110可用于在判定不满足测试结束条件时,返回执行进入自刷新命令的步骤,以对待测试存储器进行测试。
119.自刷新次数获取模块11102可用于获取当前自刷新次数。
120.测试结束判断模块1110还可用于在当前自刷新次数小于预设自刷新次数的情况下,判定不满足测试结束条件,返回执行进入自刷新命令的步骤。
121.测试结果获得模块1112可用于获得待测试存储器的测试结果。
122.测试结果获得模块1112还可用于在判定不满足测试结束条件时,返回执行进入自刷新命令的步骤,根据进入自刷新状态的情况获得待测试存储器的测试结果。
123.预留空间大小调整模块1114可用于根据待测试存储器的空间大小和测试结果调整填充地址段对应的存储器空间大小和预留地址段对应的存储器空间大小。
124.本公开实施例提供的装置中的各个模块的具体实现可以参照上述方法中的内容,此处不再赘述。
125.图12示出本公开实施例中一种电子设备的结构示意图。需要说明的是,图12示出的设备仅以计算机系统为示例,不应对本公开实施例的功能和使用范围带来任何限制。
126.如图12所示,设备1200包括中央处理单元(cpu)1201,其可以根据存储在只读存储器(rom)1202中的程序或者从存储部分1208加载到随机访问存储器(ram)1203中的程序而执行各种适当的动作和处理。在ram 1203中,还存储有设备1200操作所需的各种程序和数据。cpu1201、rom 1202以及ram 1203通过总线1204彼此相连。输入/输出(i/o)接口1205也连接至总线1204。
127.以下部件连接至i/o接口1205:包括键盘、鼠标等的输入部分1206;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分1207;包括硬盘等的存储部分
1208;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分1209。通信部分1209经由诸如因特网的网络执行通信处理。驱动器1210也根据需要连接至i/o接口1205。可拆卸介质1211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1210上,以便于从其上读出的计算机程序根据需要被安装入存储部分1208。
128.特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理单元(cpu)1201执行时,执行本公开的系统中限定的上述功能。
129.需要说明的是,本公开所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。
130.附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
131.描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括进入自刷新命令执行模块、离开自刷新命令执行模块、测试程序运行模块、数据读取测试模块和测试结束判断模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,数据获取模块还可以被描述为“执行进入自刷新命令的模块”。
132.作为另一方面,本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
133.执行进入自刷新命令,以使待测试存储器进入自刷新状态;执行离开自刷新命令,以使待测试存储器离开自刷新状态;运行预选模块对应的测试程序,以对待测试存储器的为预选模块分配的地址段进行测试;读取待测试存储器的空间中未分配地址段上的数据,以对待测试存储器的未分配地址段进行测试;在判定不满足测试结束条件时,返回执行进入自刷新命令的步骤,以对待测试存储器进行测试。
134.以上具体地示出和描述了本公开的示例性实施例。应可理解的是,本公开不限于这里描述的详细结构、设置方式或实现方法;相反,本公开意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
技术特征:
1.一种存储器测试方法,其特征在于,包括:执行进入自刷新命令,以使待测试存储器进入自刷新状态;执行离开自刷新命令,以使所述待测试存储器离开所述自刷新状态;运行预选模块对应的测试程序,以对所述待测试存储器的为所述预选模块分配的地址段进行测试;读取所述待测试存储器的空间中未分配地址段上的数据,以对所述待测试存储器的未分配地址段进行测试;在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤,以对所述待测试存储器进行测试。2.根据权利要求1所述的方法,其特征在于,所述未分配地址段包括填充地址段和预留地址段;所述读取所述待测试存储器的未分配地址段上的数据,以对所述待测试存储器的未分配地址段进行测试包括:读取所述待测试存储器的填充地址段上的数据,获取数据读取结果;将所述数据读取结果与预设测试数据进行比较,根据比较结果获得所述待测试存储器的填充地址段的测试结果。3.根据权利要求2所述的方法,其特征在于,还包括:执行在所述待测试存储器的填充地址段写入所述预设测试数据的操作。4.根据权利要求2所述的方法,其特征在于,还包括:获取所述待测试存储器的空间大小;根据所述待测试存储器的空间大小获得所述填充地址段对应的存储器空间大小和所述预留地址段对应的存储器空间大小。5.根据权利要求4所述的方法,其特征在于,还包括:获得所述待测试存储器的测试结果;根据所述待测试存储器的空间大小和所述测试结果调整所述填充地址段对应的存储器空间大小和所述预留地址段对应的存储器空间大小。6.根据权利要求1所述的方法,其特征在于,还包括:从已分配待测试存储器的地址段的多个设备模块中确定所述预选模块。7.根据权利要求1所述的方法,其特征在于,所述运行预选模块对应的测试程序,以对所述待测试存储器的为所述预选模块分配的地址段进行测试包括:运行所述预选模块对应的测试程序,根据所述测试程序的运行情况获得所述待测试存储器的为所述预选模块分配的地址段的测试结果。8.根据权利要求1所述的方法,其特征在于,还包括:设置休眠恢复时间;所述执行离开自刷新命令包括:根据所述待测试存储器进入自刷新状态的时间和所述休眠恢复时间进行计时,在计时结束时执行所述离开自刷新命令。9.根据权利要求8所述的方法,其特征在于,所述读取所述待测试存储器的空间中未分配地址段上的数据包括:
根据所述待测试存储器进入自刷新状态的时间和所述休眠恢复时间进行计时,在计时结束时读取所述待测试存储器的空间中未分配地址段上的数据。10.根据权利要求1所述的方法,其特征在于,所述运行预选模块对应的测试程序,以对所述待测试存储器的为所述预选模块分配的地址段进行测试包括:在所述执行进入自刷新命令之前,运行预选模块对应的测试程序;所述执行进入自刷新命令,以使待测试存储器进入自刷新状态包括:执行所述进入自刷新命令,以使所述待测试存储器进入自刷新状态,在所述待测试存储器进入自刷新状态时所述测试程序暂停运行;所述执行离开自刷新命令,以使所述待测试存储器离开所述自刷新状态包括:执行所述离开自刷新命令,以使所述待测试存储器离开所述自刷新状态,在所述待测试存储器离开所述自刷新状态时所述测试程序恢复运行。11.根据权利要求1所述的方法,其特征在于,所述在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤,以对所述待测试存储器进行测试包括:在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤,根据进入自刷新状态的情况获得所述待测试存储器的测试结果。12.根据权利要求1所述的方法,其特征在于,所述在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤包括:获取当前自刷新次数;在所述当前自刷新次数小于预设自刷新次数的情况下,判定不满足测试结束条件,返回所述执行进入自刷新命令的步骤。13.一种存储器测试装置,其特征在于,包括:进入自刷新命令执行模块,用于执行进入自刷新命令,以使待测试存储器进入自刷新状态;离开自刷新命令执行模块,用于执行离开自刷新命令,以使所述待测试存储器离开所述自刷新状态;测试程序运行模块,用于运行预选模块对应的测试程序,以对所述待测试存储器的为所述预选模块分配的地址段进行测试;数据读取测试模块,用于读取所述待测试存储器的空间中未分配地址段上的数据,以对所述待测试存储器的未分配地址段进行测试;测试结束判断模块,用于在判定不满足测试结束条件时,返回所述执行进入自刷新命令的步骤,以对所述待测试存储器进行测试。14.一种设备,包括:存储器、处理器及存储在所述存储器中并可在所述处理器中运行的可执行指令,其特征在于,所述处理器执行所述可执行指令时实现如权利要求1-12任一项所述的方法。15.一种计算机可读存储介质,其上存储有计算机可执行指令,其特征在于,所述可执行指令被处理器执行时实现如权利要求1-12任一项所述的方法。
技术总结
本公开提供一种存储器测试方法、装置、设备及存储介质,涉及存储器技术领域。该方法包括:执行进入自刷新命令,以使待测试存储器进入自刷新状态;执行离开自刷新命令,以使待测试存储器离开自刷新状态;运行预选模块对应的测试程序,以对待测试存储器的为预选模块分配的地址段进行测试;读取待测试存储器的空间中未分配地址段上的数据,以对待测试存储器的未分配地址段进行测试;在判定不满足测试结束条件时,返回执行进入自刷新命令的步骤,以对待测试存储器进行测试。该方法提高了存储器测试的效率。的效率。的效率。
技术研发人员:
杨伟
受保护的技术使用者:
长鑫存储技术有限公司
技术研发日:
2021.09.24
技术公布日:
2023/3/27