CN115756984A - 内存测试方法、装置、设备及存储介质 - Google Patents

内存测试方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN115756984A
CN115756984A CN202211453681.8A CN202211453681A CN115756984A CN 115756984 A CN115756984 A CN 115756984A CN 202211453681 A CN202211453681 A CN 202211453681A CN 115756984 A CN115756984 A CN 115756984A
Authority
CN
China
Prior art keywords
memory
data
storage unit
abnormal
determining
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
Application number
CN202211453681.8A
Other languages
English (en)
Inventor
康克勤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ecarx Hubei Tech Co Ltd
Original Assignee
Ecarx Hubei Tech Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Ecarx Hubei Tech Co Ltd filed Critical Ecarx Hubei Tech Co Ltd
Priority to CN202211453681.8A priority Critical patent/CN115756984A/zh
Publication of CN115756984A publication Critical patent/CN115756984A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)

Abstract

本申请提供一种内存测试方法、装置、设备及存储介质,涉及嵌入式技术领域,该内存测试方法包括:响应于内存测试的执行指令,基于预设测试数据和预设规则,确定向存储单元中待写入的第一数据;将第一数据写入存储单元;读取存储单元中的数据,得到第二数据;若第一数据和第二数据不同,则确定存储单元异常;若第一数据和第二数据相同,则确定存储单元正常。本申请能够准确地测试内存包含的存储单元的正确性,及时发现存储单元是否存在异常,从而有效保证内存的可靠性。

Description

内存测试方法、装置、设备及存储介质
技术领域
本申请涉及嵌入式技术领域,尤其涉及一种内存测试方法、装置、设备及存储介质。
背景技术
内存是电子设备中重要的部件之一,它是与处理器进行沟通的桥梁,电子设备中程序的运行是在内存中进行的,因此,内存的性能对电子设备的影响非常大。例如,在部署有嵌入式***的电子设备上电后,会加载动态随机存取存储器(Dynamic Random AccessMemory,DRAM)驱动程序,在DRAM驱动程序加载完成后,正常情况下DRAM可以直接运行,嵌入式***可以正常开机。但是,若DRAM出现异常,则会导致嵌入式***开机异常。
因此,为了保证DRAM的可靠性,亟需一种对嵌入式***的DRAM进行测试的有效方案。
发明内容
本申请提供一种内存测试方法、装置、设备及存储介质,以对嵌入式***的内存进行测试,来保证内存的可靠性。
第一方面,本申请提供一种内存测试方法,应用于部署有嵌入式***的设备,设备的内存包含多个存储单元,该内存测试方法包括:
响应于内存测试的执行指令,基于预设测试数据和预设规则,确定向存储单元中待写入的第一数据;
将第一数据写入存储单元;
读取存储单元中的数据,得到第二数据;
若第一数据和第二数据不同,则确定存储单元异常;若第一数据和第二数据相同,则确定存储单元正常。
可选的,基于预设测试数据和预设规则,确定向存储单元中待写入的第一数据,包括:确定向内存包含的第一个存储单元中待写入的第一数据为预设测试数据;和/或,执行以下操作,以确定向内存包含的第一个存储单元之后的存储单元中待写入的第一数据:对当前存储单元相邻的前一个存储单元所存储的第一数据进行按位处理,得到处理后的数据;确定向当前存储单元中待写入的第一数据为处理后的数据。
可选的,在确定存储单元异常之后,该内存测试方法还包括:若内存中的存储单元均异常,则终止运行嵌入式***;若内存中的部分存储单元异常,则将异常的存储单元对应的异常信息存储至通用闪存存储器的预设分区中,并将预设分区的内存标识设置为内存存在异常,异常信息包括异常的存储单元对应的存储地址信息、第一数据以及第二数据。
可选的,将异常的存储单元对应的异常信息存储至通用闪存存储器的预设分区中,并将预设分区的内存标识设置为内存存在异常之后,该内存测试方法还包括:响应于嵌入式***中主应用程序在内存启动,控制主应用程序获取内存标识;控制主应用程序在确定内存标识为内存存在异常时,获取并显示异常信息。
可选的,显示异常信息之后,该内存测试方法还包括:清除预设分区中的异常信息以及预设分区的内存标识对应的值。
可选的,在嵌入式***的启动阶段执行内存测试方法。
第二方面,本申请提供一种内存测试装置,应用于部署有嵌入式***的设备,设备的内存包含多个存储单元,该内存测试装置包括:
确定模块,用于响应于内存测试的执行指令,基于预设测试数据和预设规则,确定向存储单元中待写入的第一数据;
写入模块,用于将第一数据写入存储单元;
读取模块,用于读取存储单元中的数据,得到第二数据;
处理模块,用于若第一数据和第二数据不同,则确定存储单元异常;若第一数据和第二数据相同,则确定存储单元正常。
可选的,确定模块具体用于:确定向内存包含的第一个存储单元中待写入的第一数据为预设测试数据;和/或,执行以下操作,以确定向内存包含的第一个存储单元之后的存储单元中待写入的第一数据:对当前存储单元相邻的前一个存储单元所存储的第一数据进行按位处理,得到处理后的数据;确定向当前存储单元中待写入的第一数据为处理后的数据。
可选的,处理模块还用于:在确定存储单元异常之后,若内存中的存储单元均异常,则终止运行嵌入式***;若内存中的部分存储单元异常,则将异常的存储单元对应的异常信息存储至通用闪存存储器的预设分区中,并将预设分区的内存标识设置为内存存在异常,异常信息包括异常的存储单元对应的存储地址信息、第一数据以及第二数据。
可选的,处理模块还用于:将异常的存储单元对应的异常信息存储至通用闪存存储器的预设分区中,并将预设分区的内存标识设置为内存存在异常之后,响应于嵌入式***中主应用程序在内存启动,控制主应用程序获取内存标识;控制主应用程序在确定内存标识为内存存在异常时,获取并显示异常信息。
可选的,处理模块还用于:显示异常信息之后,清除预设分区中的异常信息以及预设分区的内存标识对应的值。
可选的,在嵌入式***的启动阶段执行内存测试方法。
第三方面,本申请提供一种电子设备,包括:处理器,以及与处理器通信连接的存储器;
存储器存储计算机执行指令;
处理器执行存储器存储的计算机执行指令,以实现如本申请第一方面所述的内存测试方法。
第四方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序指令,计算机程序指令被处理器执行时,实现如本申请第一方面所述的内存测试方法。
第五方面,一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现如本申请第一方面所述的内存测试方法。
本申请提供的内存测试方法、装置、设备及存储介质,通过响应于内存测试的执行指令,基于预设测试数据和预设规则,确定向存储单元中待写入的第一数据;将第一数据写入存储单元;读取存储单元中的数据,得到第二数据;若第一数据和第二数据不同,则确定存储单元异常;若第一数据和第二数据相同,则确定存储单元正常。本申请通过比较内存包含的每个存储单元写入的数据和读取出来的数据来确定存储单元是否存在异常,其中,写入的数据是基于预设测试数据和预设规则确定的,能够准确地测试内存包含的存储单元的正确性,及时发现存储单元是否存在异常,从而有效保证内存的可靠性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为相关技术提供的嵌入式***的基本组成示意图;
图2为本申请一实施例提供的应用场景示意图;
图3为本申请一实施例提供的内存测试方法的流程图;
图4为本申请一实施例提供的预设测试数据的示意图;
图5为本申请另一实施例提供的内存测试方法的流程图;
图6(a)为本申请一实施例提供的第一数据和第二数据进行比较的示意图;
图6(b)为本申请一实施例提供的两个不同字节进行比较的示意图;
图7为本申请一实施例提供的内存测试装置的结构示意图;
图8为本申请提供的一种电子设备结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的技术方案中,所涉及的金融数据或用户数据等信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
嵌入式***的应用日益广泛。示例性地,图1为相关技术提供的嵌入式***的基本组成示意图,如图1所示,该嵌入式***为嵌入式Linux(即一种操作***)***,图1中的高级精简指令集处理器(Advanced RISC Machines,ARM)安全固件(ARM Trusted Firmware,ATF)是ARM推出的采用ARMV8架构处理器使用的一套固件,使用ARM安全固件可以完成***级芯片(System On Chip,SOC)的初始化,实现基于SOC的功能开发需求,并能够引导嵌入式Linux***启动。ATF包括只读存储器引导加载(Read Only Memory Boot Loader,RBL)、引导加载第2阶段(Boot Loader 2,BL2)等主要启动阶段。其中,RBL是一段固化在SOC内部的引导程序,BL2主要功能是初始化双倍速率同步动态随机存储器(Double Data RateSynchronous Dynamic Random Access Memory,DDRSDRAM)、初始化通用闪存存储(Universal Flash Storage,UFS)以及引导通用引导加载程序(Universal Boot Loader,U-BOOT)启动。其中,DDRSDRAM可以简称为DDR,可以理解,DDR是DRAM的一种,具体地,DDR为低功耗双倍速率5(Low Power Double Data Rate 5,LPDDR5)类型的内存,硬件上使用两颗容量大小为8GB的内存芯片,总的物理内存容量为16GB(即8GB*2);UFS是一种存储设备;U-BOOT主要作用是初始化设备驱动程序,引导Linux内核加载。图1中的内核(KERNEL)是Linux的内核,是嵌入式Linux***的核心。根文件***(ROOT File System,ROOTFS)是嵌入式Linux***用于明确存储设备或分区上的文件的方法和数据结构。
示例性地,参考图1,以DRAM是DDR为例,在部署有嵌入式Linux***的电子设备上电后,首先会执行一段初始化程序,即RBL,RBL运行后会引导***加载其他程序,比如加载DDR驱动程序、初始化文件***等。在DDR驱动程序加载完成后,正常情况下DDR可以直接运行,嵌入式Linux***可以正常开机。但是,若DDR出现异常,则会导致嵌入式Linux***开机异常。具体地,在DDR出现异常后通常会导致以下两种情况的发生:
(1)嵌入式Linux***在BL2阶段会卡住,无法正常开机;
(2)DDR部分储存单元出现了异常,但嵌入式Linux***还能正常开机,这种情况给嵌入式Linux***运行的稳定性带来了潜在的风险。特别是在SOC增加一款新的DDR内存芯片时,由于DDR内存芯片对硬件设计和信号匹配都有强依赖,需要调试SOC和DDR之间最佳的时序匹配才能让DDR内存芯片稳定运行。
基于上述问题,为了保证内存的可靠性,本申请提供一种内存测试方法、装置、设备及存储介质,首先基于预设测试数据和预设规则对整个内存的存储单元(即地址空间)写入第一数据,然后依次读取出内存的全部存储单元中的数据,即第二数据,最后再对第一数据和第二数据进行比较,判断内存的存储单元是否存在异常。因此,能够准确地测试内存包含的所有存储单元的正确性,及时发现存储单元是否存在异常,从而有效保证内存的可靠性。
以下,首先对本申请提供的方案的应用场景进行示例说明。
图2为本申请一实施例提供的应用场景示意图。如图2所示,本应用场景中,车机210部署有嵌入式***,在车机210上电后,在嵌入式***的启动阶段,车机210里的SOC 220控制加载DRAM 230的驱动程序,在DRAM230的驱动程序加载完成后,对DRAM 230包含的多个存储单元进行测试,以确定存储单元是否存在异常。SOC 220根据存储单元的测试结果,确定是否控制嵌入式***正常开机。
需要说明的是,图2仅是本申请实施例提供的一种应用场景的示意图,本申请实施例不对图2中包括的设备进行限定,也不对图2中设备之间的位置关系进行限定。
下面,通过具体实施例对本申请的技术方案进行详细说明。需要说明的是,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
图3为本申请一实施例提供的内存测试方法的流程图,应用于部署有嵌入式***的设备,设备的内存包含多个存储单元。如图3所示,本申请实施例的方法包括:
S301、响应于内存测试的执行指令,基于预设测试数据和预设规则,确定向存储单元中待写入的第一数据。
本申请实施例中,内存测试的执行指令比如为SOC运行内存测试函数触发的执行指令。示例性地,图4为本申请一实施例提供的预设测试数据的示意图,如图4所示,假设以十六进制表示预设测试数据,则预设测试数据比如为0x6162636465666768,其中,0x表示十六进制,每两位表示一个字节,例如,0x68表示第一个字节,且为低字节,0x61表示第八个字节,且为高字节,0x6162636465666768是一个八个字节的数据。内存包含多个存储单元,每个存储单元的大小为八个字节。该步骤中的预设规则,可参考后续实施例。
示例性地,参考图1,嵌入式***上电后,首先会运行RBL,开始对嵌入式***做基本初始化操作。RBL加载成功后,由RBL从UFS中加载BL2程序到静态随机存取存储器(StaticRandom-Access Memory,SRAM)中,此时嵌入式***的上下文切换到BL2中运行。以DRAM是DDR为例,在BL2中会调用内存映射(memory_map)函数对内存地址进行映射,并初始化内存管理单元(Memory Manager Unit,MMU),MMU为固化在SOC内部的硬件模块,只有映射后的内存地址才可以被访问。memory_map函数映射的内存地址容量大小为16GB,映射的内存地址范围可以分为三段,分别用DRAM0、DRMA1和DRAM2进行表示。其中,DRAM0起始地址为0x60000000,结束地址为0x9FFFFFFF,大小为1GB;DRAM1起始地址为0xC40000000,结束地址为0xDFFFFFFFF,大小为7GB;DRAM2起始地址为0xE00000000,结束地址为0xFFFFFFFFF,大小为8GB。上述三段内存地址的总容量大小为16GB。可以理解,DRAM0、DRMA1和DRAM2为三段连续的内存地址。在BL2中调用DDR的驱动程序对应的函数(比如用ddr_init函数表示),实现对DDR控制器的初始化以及DDR内存芯片的配置。DDR控制器和DDR内存芯片开始正常工作,此时SOC运行内存测试函数(比如用mem_stress函数表示)来对内存进行测试。mem_stress函数中会继续调用内存测试子函数(比如用mem_scan函数表示),该函数传入两个形参,第一个形参为DDR的起始地址(比如用start_addr表示),第二个形参为DDR的结束地址(比如用end_addr表示)。针对上述实施例中的三段内存地址DRAM0、DRMA1和DRAM2,可以调用mem_scan函数三次,依次分别传入DRAM0、DRAM1、DRMA2的起始地址和结束地址到该函数中,从而实现对三段内存地址进行存储单元的测试操作。
该步骤中,在SOC运行内存测试函数时,即触发了内存测试的执行指令,相应地,响应于内存测试的执行指令,基于预设测试数据和预设规则,确定向存储单元中待写入的第一数据。对于如何基于预设测试数据和预设规则,确定向存储单元中待写入的第一数据,可参考后续实施例,此处不再赘述。
可选的,在嵌入式***的启动阶段执行内存测试方法。
示例性地,在嵌入式***的启动阶段先对整个内存进行测试,在启动阶段结束后,嵌入式***会运行主应用程序,主应用程序运行在内存中。
S302、将第一数据写入存储单元。
该步骤中,在确定了向每个存储单元中待写入的第一数据后,可以将第一数据写入存储单元。示例性地,以S301步骤示例的内存地址段DRAM0为例,DRAM0包含多个存储单元,多个存储单元是连续的,可以从DRAM0起始地址0x60000000开始,将第一个存储单元对应的第一数据写入第一个存储单元,将第二个存储单元对应的第一数据写入第二个存储单元,以此类推,直至向最后一个存储单元写入其对应的第一数据。
S303、读取存储单元中的数据,得到第二数据。
示例性地,在将第一数据写入内存包含的所有存储单元后,可以依次读取每个存储单元中的数据,即得到每个存储单元对应的第二数据。
S304、若第一数据和第二数据不同,则确定存储单元异常;若第一数据和第二数据相同,则确定存储单元正常。
该步骤中,将每个存储单元对应的第一数据和第二数据进行比较,若第一数据和第二数据不同,则确定存储单元异常;若第一数据和第二数据相同,则确定存储单元正常。在确定内存包含的所有存储单元均正常后,表示内存测试通过,嵌入式***可以正常引导运行主应用程序。对于内存包含的所有存储单元均异常或者部分存储单元异常的情况,具体处理方式可参考后续实施例,此处不再赘述。
本申请实施例提供的内存测试方法,通过响应于内存测试的执行指令,基于预设测试数据和预设规则,确定向存储单元中待写入的第一数据;将第一数据写入存储单元;读取存储单元中的数据,得到第二数据;若第一数据和第二数据不同,则确定存储单元异常;若第一数据和第二数据相同,则确定存储单元正常。本申请实施例通过比较内存包含的每个存储单元写入的数据和读取出来的数据来确定存储单元是否存在异常,其中,写入的数据是基于预设测试数据和预设规则确定的,能够准确地测试内存包含的存储单元的正确性,及时发现存储单元是否存在异常,从而有效保证内存的可靠性。
图5为本申请另一实施例提供的内存测试方法的流程图。在上述实施例的基础上,本申请实施例对内存测试方法进行进一步说明。如图5所示,本申请实施例的方法可以包括:
本申请实施例中,图3中S301步骤可以进一步包括如下的S501和S502两个步骤:
S501、响应于内存测试的执行指令,确定向内存包含的第一个存储单元中待写入的第一数据为预设测试数据。
示例性地,假设第一数据用变量pattern表示,将pattern的值初始化为预设测试数据,预设测试数据比如为0x6162636465666768,则pattern的初始值为0x6162636465666768。该步骤中,响应于内存测试的执行指令,可以确定向内存包含的第一个存储单元中待写入的第一数据为pattern的初始值,即0x6162636465666768。可以再设置一个变量compare_val,用于后续步骤中第一数据和第二数据进行比较使用。具体地,将pattern的初始值赋值给compare_val,对应的操作方法为:compare_val=pattern(赋值操作),即compare_val的初始值为0x6162636465666768。
S502、执行以下操作,以确定向内存包含的第一个存储单元之后的存储单元中待写入的第一数据:对当前存储单元相邻的前一个存储单元所存储的第一数据进行按位处理,得到处理后的数据;确定向当前存储单元中待写入的第一数据为处理后的数据。
示例性地,假设用内存地址变量p表示每个存储单元,p开始时表示第一个存储单元,在内存包含的第一个存储单元中写入作为第一数据的预设测试数据后,对p进行加1操作,表示指向内存的下一个存储单元,即第二个存储单元,需要对第一个存储单元所存储的第一数据进行按位处理,来得到第二个存储单元对应的待写入的第一数据。具体地,基于S501步骤的示例,确定了向第一个存储单元中待写入的第一数据为pattern的初始值,即0x6162636465666768,则对pattern的初始值通过如下公式进行按位处理,来得到更新后的pattern的值:
pattern=(pattern&0xff)<<56|(pattern>>8)
基于上述公式获得的更新后的pattern的值为0x6861626364656667。将更新后的pattern的值与pattern的初始值相比较,可以发现,pattern的初始值的第一个字节右移到了第八个字节,即为更新后的pattern的值。因此,可以确定第二个存储单元对应的待写入的第一数据为更新后的pattern的值,即0x6861626364656667。
以此类推,基于上述公式,可以确定第二个存储单元之后的每个存储单元中待写入的第一数据。参考S301步骤的示例,DRAM0的第一个存储单元中待写入的第一数据为预设测试数据,可以基于上述公式,确定DRAM0的第一个存储单元之后的存储单元中待写入的第一数据、DRMA1包含的每个存储单元中待写入的第一数据以及DRAM2包含的每个存储单元中待写入的第一数据。
S503、将第一数据写入存储单元。
该步骤的具体描述可以参见图3所示实施例中S302的相关描述,此处不再赘述。
S504、读取存储单元中的数据,得到第二数据。
该步骤的具体描述可以参见图3所示实施例中S303的相关描述,此处不再赘述。
S505、若第一数据和第二数据不同,则确定存储单元异常;若第一数据和第二数据相同,则确定存储单元正常。
示例性地,参考S301步骤的示例,以DRAM0为例,设置一个内存地址变量q和一个变量k。其中,q赋值为DRAM0的起始地址,即q=0x6000000,用q表示每个存储单元。获取q对应的第一个存储单元中的数据,赋值给k,则k表示从DRAM0的第一个存储单元读取出来的数据(即第二数据)。假设k=0x6162636465666768,参考S501步骤的示例,将k和compare_val(初始值为0x6162636465666768)进行比较,可以确定k和compare_val相同,则可以确定第一个存储单元正常。
从DRAM0中读取了第一个存储存单元的数据后,对q进行加1操作,表示指向内存的下一个存储单元,即第二个存储单元,继续读取第二个存储单元中的数据。对compare_val的初始值通过上述公式进行按位处理,来得到更新后的compare_val的值,即:compare_val=(compare_val&0xff)<<56|(compare_val>>8)。将从第二个存储单元中读取出来的第二数据与更新后的compare_val的值进行比较,若该第二数据与更新后的compare_val的值相同,则可以确定第二个存储单元正常;若该第二数据与更新后的compare_val的值不相同,则可以确定第二个存储单元异常。以此类推,直至将DRAM0中所有存储单元的数据读取完成,并与相应的compare_val变量值进行比较,来确定DRAM0是否包含有异常的存储单元。在测试完DRAM0后,可以采用上述方式继续测试DRMA1包含的存储单元以及DRAM2包含的存储单元,直至将内存的所有存储单元测试完成。
S506、若内存中的存储单元均异常,则终止运行嵌入式***。
示例性地,若内存中的存储单元均异常,比如mem_scan函数持续写入异常或者读取异常,则终止运行嵌入式***,即嵌入式***无法正常开机。此时可以通过接入串口设备,将嵌入式***打印的异常日志(log)信息显示出来。异常的log信息可以分析出内存的地址以及地址对应的数据,从数据的值可以定位到出错的数据引脚,进而定位出现异常的内存芯片,缩小排查范围,为后续分析问题提供参考依据。示例性地,图6(a)为本申请一实施例提供的第一数据和第二数据进行比较的示意图,如图6(a)所示,假设内存中有n个存储单元,用内存地址变量q指向内存中不同的存储单元。左图中是第二数据,其中,0x6162636465666768是读取出来的q对应的第一个存储单元中的数据,q+1表示第二个存储单元,从第二个存储单元中读取出来的数据为0x6861626364656467,q+2表示第三个存储单元,依此类推,可以从每个存储单元中读取相应的第二数据。右图中compare_val是需要和第二数据进行比较的数据值,可以理解为第一数据。假设q+1读取出来的值为0x6861626364656467,而对应的compare_val的值为0x6861626364656667,可以看出,两者的值不一样。q+1读取出来的值的第二个字节为0x64,compare_val的第二个字节为0x66,说明第二个存储单元读取的数据存在错误。
进一步地,图6(b)为本申请一实施例提供的两个不同字节进行比较的示意图,如图6(b)所示,基于图6(a)的示例,在确定q+1读取出来的值的第二个字节为0x64,compare_val的第二个字节为0x66之后,可以将字节0x64转换为二进制数据为0110 0100,将字节0x66转换为二进制数据为0110 0110。可以看出,0110 0100与0110 0110的第二个比特(比如用bit1表示)不同,出现了翻转,即q+1的数据值对应的0x64这个字节的第二个bit本来应该为1,但是读取出来的却是0,又由于0x64是第二个字节,所以可以判断是第九个数据引脚出现了异常。以LPDDR5为例,SOC中有两个DDR控制器,SOC有4个通道,每2个通道对应一个内存芯片,一个内存芯片里也有2个通道,因此,可以根据出错的DDR存储单元推断出是哪一个内存芯片存在异常,进而可以缩小问题排查范围。
S507、若内存中的部分存储单元异常,则将异常的存储单元对应的异常信息存储至通用闪存存储器的预设分区中,并将预设分区的内存标识设置为内存存在异常。
其中,异常信息包括异常的存储单元对应的存储地址信息、第一数据以及第二数据。
示例性地,若mem_scan函数只是测试出部分存储单元异常,则不会终止嵌入式***的运行,而是会正常开机,这个时候用户往往是无感知的。出现部分存储单元异常并不会影响嵌入式***开机,原因是嵌入式***运行的时候不一定会访问出现异常的存储单元。部分存储单元异常的情况有潜在的风险,一旦内存不稳定,极易造成嵌入式***崩溃。因此,mem_scan函数在测试到部分存储单元异常后,将异常的存储单元对应的异常信息存储至UFS的预设分区的指定地址处,该预设分区比如为逻辑单元分区1(即lun1),并将lun1分区的内存标识设置为内存存在异常(比如用true表示)。
需要说明的是,本申请不对S506和S507步骤执行的先后顺序进行限定。
S508、响应于嵌入式***中主应用程序在内存启动,控制主应用程序获取内存标识。
S509、控制主应用程序在确定内存标识为内存存在异常时,获取并显示异常信息。
示例性地,在嵌入式***启动阶段结束后,会运行主应用程序,控制主应用程序获取内存标识,在确定内存标识为内存存在异常(即为true)时,获取并显示异常信息,比如将异常信息显示到屏幕中,便于提醒用户排查内存异常。
S510、清除预设分区中的异常信息以及预设分区的内存标识对应的值。
该步骤中,在显示异常信息后,可以清除预设分区中的异常信息以及预设分区的内存标识对应的值,比如将内存标识对应的值设置为空。
本申请实施例提供的内存测试方法,通过响应于内存测试的执行指令,确定向内存包含的第一个存储单元中待写入的第一数据为预设测试数据;执行以下操作,以确定向内存包含的第一个存储单元之后的存储单元中待写入的第一数据:对当前存储单元相邻的前一个存储单元所存储的第一数据进行按位处理,得到处理后的数据;确定向当前存储单元中待写入的第一数据为处理后的数据;将第一数据写入存储单元;读取存储单元中的数据,得到第二数据;若第一数据和第二数据不同,则确定存储单元异常;若第一数据和第二数据相同,则确定存储单元正常;若内存中的存储单元均异常,则终止运行嵌入式***;若内存中的部分存储单元异常,则将异常的存储单元对应的异常信息存储至通用闪存存储器的预设分区中,并将预设分区的内存标识设置为内存存在异常;响应于嵌入式***中主应用程序在内存启动,控制主应用程序获取内存标识;控制主应用程序在确定内存标识为内存存在异常时,获取并显示异常信息。本申请实施例通过比较内存包含的每个存储单元写入的数据和读取出来的数据来确定存储单元是否存在异常,其中,写入的数据是基于预设测试数据和预设规则确定的,能够准确地测试内存包含的存储单元的正确性,及时发现存储单元是否存在异常,从而有效保证内存的可靠性。另外,在确定内存中的部分存储单元异常时,控制主应用程序获取并显示异常信息,能够及时提醒用户排查异常的原因,避免出现因为部分存储单元异常导致嵌入式***不稳定的问题。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图7为本申请一实施例提供的内存测试装置的结构示意图,应用于部署有嵌入式***的设备,设备的内存包含多个存储单元。如图7所示,本申请实施例的内存测试装置700包括:确定模块701、写入模块702、读取模块703和处理模块704。其中:
确定模块701,用于响应于内存测试的执行指令,基于预设测试数据和预设规则,确定向存储单元中待写入的第一数据。
写入模块702,用于将第一数据写入存储单元。
读取模块703,用于读取存储单元中的数据,得到第二数据。
处理模块704,用于若第一数据和第二数据不同,则确定存储单元异常;若第一数据和第二数据相同,则确定存储单元正常。
在一些实施例中,确定模块701可以具体用于:确定向内存包含的第一个存储单元中待写入的第一数据为预设测试数据;和/或,执行以下操作,以确定向内存包含的第一个存储单元之后的存储单元中待写入的第一数据:对当前存储单元相邻的前一个存储单元所存储的第一数据进行按位处理,得到处理后的数据;确定向当前存储单元中待写入的第一数据为处理后的数据。
可选的,处理模块704还可以用于:在确定存储单元异常之后,若内存中的存储单元均异常,则终止运行嵌入式***;若内存中的部分存储单元异常,则将异常的存储单元对应的异常信息存储至通用闪存存储器的预设分区中,并将预设分区的内存标识设置为内存存在异常,异常信息包括异常的存储单元对应的存储地址信息、第一数据以及第二数据。
可选的,处理模块704还可以用于:将异常的存储单元对应的异常信息存储至通用闪存存储器的预设分区中,并将预设分区的内存标识设置为内存存在异常之后,响应于嵌入式***中主应用程序在内存启动,控制主应用程序获取内存标识;控制主应用程序在确定内存标识为内存存在异常时,获取并显示异常信息。
可选的,处理模块704还可以用于:显示异常信息之后,清除预设分区中的异常信息以及预设分区的内存标识对应的值。
可选的,在嵌入式***的启动阶段执行内存测试方法。
本实施例的装置,可以用于执行上述任一所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图8为本申请提供的一种电子设备结构示意图。如图8所示,该电子设备800可以包括:至少一个处理器801和存储器802。
存储器802,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机执行指令。
存储器802可能包含高速随机存取存储器(Random Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
处理器801用于执行存储器802存储的计算机执行指令,以实现前述方法实施例所描述的内存测试方法。其中,处理器801可能是一个中央处理器(Central ProcessingUnit,CPU),或者是特定集成电路(Application Specific Integrated Circuit,ASIC),或者是被配置成实施本公开实施例的一个或多个集成电路。
可选的,该电子设备800还可以包括通信接口803。在具体实现上,如果通信接口803、存储器802和处理器801独立实现,则通信接口803、存储器802和处理器801可以通过总线相互连接并完成相互间的通信。总线可以是工业标准体系结构(Industry StandardArchitecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果通信接口803、存储器802和处理器801集成在一块芯片上实现,则通信接口803、存储器802和处理器801可以通过内部接口完成通信。
本申请还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当处理器执行计算机执行指令时,实现如上内存测试方法的方案。
本申请还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如上的内存测试方法的方案。
上述的计算机可读存储介质,上述可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random AccessMemory,SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable ReadOnly Memory,EEPROM),可擦除可编程只读存储器(Erasable Programmable Read OnlyMemory,EPROM),可编程只读存储器(Programmable Read Only Memory,PROM),只读存储器(Read Only Memory,ROM),磁存储器,快闪存储器,磁盘或光盘。可读存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息。当然,可读存储介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(Application Specific IntegratedCircuits,ASIC)中。当然,处理器和可读存储介质也可以作为分立组件存在于内存测试装置中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (10)

1.一种内存测试方法,其特征在于,应用于部署有嵌入式***的设备,所述设备的内存包含多个存储单元,所述内存测试方法包括:
响应于内存测试的执行指令,基于预设测试数据和预设规则,确定向所述存储单元中待写入的第一数据;
将所述第一数据写入所述存储单元;
读取所述存储单元中的数据,得到第二数据;
若所述第一数据和所述第二数据不同,则确定所述存储单元异常;若所述第一数据和所述第二数据相同,则确定所述存储单元正常。
2.根据权利要求1所述的内存测试方法,其特征在于,所述基于预设测试数据和预设规则,确定向所述存储单元中待写入的第一数据,包括:
确定向所述内存包含的第一个存储单元中待写入的第一数据为所述预设测试数据;
和/或,执行以下操作,以确定向所述内存包含的第一个存储单元之后的存储单元中待写入的第一数据:对当前存储单元相邻的前一个存储单元所存储的第一数据进行按位处理,得到处理后的数据;确定向所述当前存储单元中待写入的第一数据为所述处理后的数据。
3.根据权利要求1或2所述的内存测试方法,其特征在于,在确定所述存储单元异常之后,还包括:
若所述内存中的存储单元均异常,则终止运行所述嵌入式***;
若所述内存中的部分存储单元异常,则将异常的存储单元对应的异常信息存储至通用闪存存储器的预设分区中,并将所述预设分区的内存标识设置为内存存在异常,所述异常信息包括异常的存储单元对应的存储地址信息、第一数据以及第二数据。
4.根据权利要求3所述的内存测试方法,其特征在于,所述将异常的存储单元对应的异常信息存储至通用闪存存储器的预设分区中,并将所述预设分区的内存标识设置为内存存在异常之后,还包括:
响应于所述嵌入式***中主应用程序在所述内存启动,控制所述主应用程序获取所述内存标识;
控制所述主应用程序在确定所述内存标识为内存存在异常时,获取并显示所述异常信息。
5.根据权利要求4所述的内存测试方法,其特征在于,所述显示所述异常信息之后,还包括:
清除所述预设分区中的异常信息以及所述预设分区的内存标识对应的值。
6.根据权利要求1或2所述的内存测试方法,其特征在于,在所述嵌入式***的启动阶段执行所述内存测试方法。
7.一种内存测试装置,其特征在于,应用于部署有嵌入式***的设备,所述设备的内存包含多个存储单元,所述内存测试装置包括:
确定模块,用于响应于内存测试的执行指令,基于预设测试数据和预设规则,确定向所述存储单元中待写入的第一数据;
写入模块,用于将所述第一数据写入所述存储单元;
读取模块,用于读取所述存储单元中的数据,得到第二数据;
处理模块,用于若所述第一数据和所述第二数据不同,则确定所述存储单元异常;若所述第一数据和所述第二数据相同,则确定所述存储单元正常。
8.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1至6中任一项所述的内存测试方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序指令,所述计算机程序指令被处理器执行时,实现如权利要求1至6中任一项所述的内存测试方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的内存测试方法。
CN202211453681.8A 2022-11-21 2022-11-21 内存测试方法、装置、设备及存储介质 Pending CN115756984A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211453681.8A CN115756984A (zh) 2022-11-21 2022-11-21 内存测试方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211453681.8A CN115756984A (zh) 2022-11-21 2022-11-21 内存测试方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN115756984A true CN115756984A (zh) 2023-03-07

Family

ID=85333213

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211453681.8A Pending CN115756984A (zh) 2022-11-21 2022-11-21 内存测试方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN115756984A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116434821A (zh) * 2023-03-14 2023-07-14 深圳市晶存科技有限公司 一种测试lpddr4颗粒的***及方法
CN116564399A (zh) * 2023-04-20 2023-08-08 深圳市晶存科技有限公司 芯片测试方法、装置、电子设备及计算机可读存储介质
CN116913351A (zh) * 2023-09-13 2023-10-20 合肥康芯威存储技术有限公司 一种存储设备数据丢失测试方法、装置、介质及设备

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116434821A (zh) * 2023-03-14 2023-07-14 深圳市晶存科技有限公司 一种测试lpddr4颗粒的***及方法
CN116434821B (zh) * 2023-03-14 2024-01-16 深圳市晶存科技有限公司 一种测试lpddr4颗粒的***及方法
CN116564399A (zh) * 2023-04-20 2023-08-08 深圳市晶存科技有限公司 芯片测试方法、装置、电子设备及计算机可读存储介质
CN116564399B (zh) * 2023-04-20 2024-04-02 深圳市晶存科技有限公司 芯片测试方法、装置、电子设备及计算机可读存储介质
CN116913351A (zh) * 2023-09-13 2023-10-20 合肥康芯威存储技术有限公司 一种存储设备数据丢失测试方法、装置、介质及设备
CN116913351B (zh) * 2023-09-13 2023-12-26 合肥康芯威存储技术有限公司 一种存储设备数据丢失测试方法、装置、介质及设备

Similar Documents

Publication Publication Date Title
CN115756984A (zh) 内存测试方法、装置、设备及存储介质
CN112331253B (zh) 一种芯片的测试方法、终端和存储介质
US6336176B1 (en) Memory configuration data protection
US9262283B2 (en) Method for reading kernel log upon kernel panic in operating system
US20230195994A1 (en) Chip design verification system, chip design verification method, and computer readable recording media with stored program
CN102541469A (zh) 固件存储***中数据保护的方法、设备及***
CN107301042A (zh) 一种带自检功能的SoC应用程序引导方法
US4368532A (en) Memory checking method
CN111104246A (zh) 提升dram的错误检测与纠错的验证效率的方法、装置、计算机设备及存储介质
CN111857882B (zh) 可扩展的ssd开卡固件加载方法、装置、计算机设备及存储介质
CN110990207B (zh) 基于Whitley平台的BPS内存测试方法、***、终端及存储介质
US20240176887A1 (en) Method for Running Startup Program of Electronic Device, and Electronic Device
US9442831B1 (en) Automated testing of program code for processing a simple boot flag data structure
US20130124925A1 (en) Method and apparatus for checking a main memory of a processor
US10922023B2 (en) Method for accessing code SRAM and electronic device
CN113377421B (zh) 一种软硬件版本信息的检测方法、装置、设备及介质
CN116820849A (zh) 内存spd读写测试方法、装置、电子设备和存储介质
CN117215966B (zh) 一种芯片sdk接口的测试方法、测试装置及电子设备
CN115586981B (zh) 一种防止sio信号丢失的方法、***、计算机和存储介质
CN112464499B (zh) 非易失芯片擦写数据检查方法、装置、存储介质和终端
CN115269446A (zh) 一种隔离内存的方法和装置
JPH01118933A (ja) シングルチップマイクロコンピュータ
WO2015147829A1 (en) System and method of run-time continuous memory check for embedded systems
CN118262776A (zh) Lpddr的dbi功能测试方法、装置、设备及介质
CN117971331A (zh) 电子设备的***调试方法、装置、电子设备及存储介质

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