1.本申请涉及芯片技术领域,特别涉及一种密钥编程方法、密钥编程系统、电子设备及计算机可读存储介质。
背景技术:2.在超大规模集成电路中,常常需要在芯片出厂前将一些数据如温度传感器校验值、电压检测器校验值、芯片id、外围接口如spi/uart/i2c等关闭信息、根密钥等编程为指定的预设值储存到芯片中,以使芯片在工作模式下上电后能够正常工作。在芯片出厂后的使用过程中,这些值都不能被改变。因此就用到otp(one time programmable的英文缩写,意思是一次性可编程)器件来存储这些数据。otp存储器的存储区域默认值是全零,每比特只能编程一次且只能从0编程为1。相关技术通常通过控制芯片的管脚输入和cpu配置总线一样时序来模拟cpu的配置行为,触发otp控制器,使其调用密钥生成器产生密钥,并将密钥随机编程到otp密钥区域中,最后通过读取otp密钥区域中的值确定otp密钥区域是否被成功编程写入。然而,通过读取otp密钥区域中的值的方式仅能确定密钥是否被成功便成,若otp密钥区域没有被正确编程,则很难确定故障原因,无法快速完成故障定位。
3.因此,相关技术存在的无法快速完成故障定位的问题,是本领域技术人员需要解决的技术问题。
技术实现要素:4.有鉴于此,本申请的目的在于提供一种密钥编程方法、密钥编程系统、电子设备及计算机可读存储介质,可以快速准确地完成故障定位。
5.为解决上述技术问题,本申请提供了一种密钥编程方法,包括:
6.在检测到写入指令时,向密钥生成器发送密钥请求;
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.判断所述密钥内容是否为全0或全1;
35.若为全0或全1,则确定未接收到所述目标密钥;
36.若不为全0和全1,则确定接收到所述目标密钥。
37.本申请还提供了一种密钥编程系统,包括测试机台、密钥生成器和电子设备,所述电子设备包括一次性编程区域、第一寄存器和第二寄存器,所述电子设备还包括:
38.请求发送模块,用于在检测到写入指令时,向密钥生成器发送密钥请求;
39.目标密钥判断模块,用于判断是否接收到所述密钥生成器发送的目标密钥;
40.密钥生成故障确定模块,用于若未接收到所述目标密钥,则确定发生密钥生成故障,并将第一寄存器设置为生成错误状态;
41.写入编程模块,用于若接收到所述目标密钥,则将所述目标密钥编程入一次性编程区域,并根据编程结果对第二寄存器进行设置。
42.本申请还提供了一种电子设备,包括存储器和处理器,其中:
43.所述存储器,用于保存计算机程序;
44.所述处理器,用于执行所述计算机程序,以实现上述的密钥编程方法。
45.本申请还提供了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现上述的密钥编程方法。
46.本申请提供的密钥编程方法,在检测到写入指令时,向密钥生成器发送密钥请求;
判断是否接收到密钥生成器发送的目标密钥;若未接收到目标密钥,则确定发生密钥生成故障,并将第一寄存器设置为生成错误状态;若接收到目标密钥,则将目标密钥编程入一次性编程区域,并根据编程结果对第二寄存器进行设置。
47.可见,该方法分两步执行密钥写入的过程。在检测到写入指令时,说明确定需要将目标密钥写入到一次性编程区域,因此向密钥生成器发送密钥请求。密钥生成器可能无法提供目标密钥,因此在发送密钥请求后判断是否接收到目标密钥,目标密钥为符合要求的密钥。若未接收到目标密钥,则可以确定发生过年了密钥生成故障,因此通过将第一寄存器设置为生成错误状态表明具体故障类型。若接收到目标密钥,则将目标密钥编程入一次性编程区域,即尝试向一次性编程区域写入目标密钥,由于目标密钥的写入可能出现故障,尝试可能成功也可能失败,因此在编程写入后根据编程结果对第二寄存器进行设置,以便在尝试失败后利用第二寄存器表明故障类型。利用第一寄存器表示目标密钥的获取情况,并在成功获取目标密钥时利用第二寄存器表明目标密钥的写入情况,可以在发生故障时通过第一寄存器或第二寄存器准确地得知发生故障的原因,快速准确地完成故障定位,解决了相关技术存在的无法快速完成故障定位的问题。
48.此外,本申请还提供了一种密钥编程系统、电子设备及计算机可读存储介质,同样具有上述有益效果。
附图说明
49.为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
50.图1为本申请实施例提供的一种密钥编程方法流程图;
51.图2为本申请实施例提供的一种寄存器访问总线信号时序图;
52.图3为本申请实施例提供的一种密钥生成接口信号时序图;
53.图4为本申请实施例提供的一种具体的第二寄存器设置过程流程图;
54.图5为本申请实施例提供的一种密钥编程系统的结构示意图;
55.图6为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
56.为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
57.请参考图1,图1为本申请实施例提供的一种密钥编程方法流程图。该方法包括:
58.s101:在检测到写入指令时,向密钥生成器发送密钥请求。
59.需要说明的是,本实施例中的部分或全部步骤可以由一次性可编程设备中的otp控制器执行,一次性可编程设备的具体类型不做限定。一次性可编程设备在生产时,需要向其中输入多种数据,包括各种校验值、信息、id和密钥等。其中大部分信息为固定值,例如校
验值,而对于密钥来说,由于不同设备对应的密钥不同,需要即时生成,因此在发现写入密钥的过程中发生错误时,存在两种可能的故障原因,第一种为密钥生成故障,即没有生成正确的密钥,第二种为密钥写入故障,即密钥没有被正确写入对应的一次性编程区域。相关技术仅能检测到密钥是否被成功写入,无法确定具体发生了哪些故障,因此无法快速完成对故障的定位。
60.为了解决上述问题,本实施例采用第一寄存器和第二寄存器分别对可能发生的故障进行表征,以便快速准确地完成故障定位。具体的,在检测到写入指令时,可以确定需要将密钥写入到一次性编程区域内,因此向密钥生成器发送密钥请求,以便生成目标密钥。本实施例并不限定密钥生成器的具体类型,例如可以为trng器件,trng即true random number generation,真随机数发生器。密钥生成器还可以为伪随机数生成器,或者为其他随机数生成器。在本实施例中,可以将密钥生成器确定为trng器件。
61.本实施例并不限定写入指令的具体形式,例如可以为高电平信号,在一种可行的实施方式中,第一寄存器用于对目标密钥的生成情况进行表征,因此可以将其中的部分比特位设置为可被读写的状态,通过修改第一寄存器中比特位的方式向otp控制器发送写入指令。具体的,写入指令可以由cpu或ate(automatic test equipment,自动测试设备)机台发送,因此可以向cpu(中央处理器)、ate机台开放第一寄存器的读写权限,以便允许其对第一寄存器进行读写。可以理解的是,由于otp控制器在发生故障时可以通过第一寄存器和第二寄存器表征具体的故障类型,即通过第一寄存器和第二寄存器向外传输故障类型的信息,因此ate机台或cpu等必然具有第一寄存器和第二寄存器的读权限。当需要采用对第一寄存器进行设置的方式发送写入指令时,还可以向ate机台开放对第一寄存器的写权限。需要说明的是,本实施例中的第一寄存器和第二寄存器可以为两个单独的寄存器,或者可以为同一个寄存器对应的不同比特位,即在对某些比特位进行读写时,该寄存器为第一寄存器,对另外一些比特位进行读写时,该寄存器为第二寄存器,第一寄存器和第二寄存器分别对应的比特位区域可以相互隔离。
62.请参考图2,图2为本申请实施例提供的一种寄存器访问总线信号时序图。ate机台等可以利用寄存器访问总线对第一寄存器进行访问,实现对第一寄存器的读或写。其中,寄存器访问总线可以为pad(programmable analog device)寄存器配置总线,其中,pad_cfg_cs为片选信号,高有效。pad_cfg_wr信号为读写控制信号,在pad_cfg_cs为高电平时,若pad_cfg_wr为低电平,则表示读有效,若pad_cfg_wr为高电平,则表示写有效。pad_cfg_be表示要操作4个比特中的哪一个比特。pad_cfg_addr表示要操作的寄存器地址;pad_cfg_rdata表示读取到的寄存器值,期仅在pad_cfg_rdy信号为高电平时有效;pad_cfg_wdata表示要写入该寄存器地址的对应比特的写数据,仅在pad_cfg_cs为高电平、pad_cfg_wr为高电平且pad_cfg_be为非0时有效。pad_cfg_rdy表示若该操作为读寄存器操作,则表示读数据有效,若该操作为写寄存器操作,则表示写数据已成功写入对应寄存器地址的比特位。
63.在一种具体的实施方式中,可以通过对第一寄存器的状态进行设置的方式发送写入指令。具体的,第一寄存器中的各个比特位的描述如表1所示:
64.表1第一寄存器描述表
[0065][0066][0067]
其中,ro权限表示只读权限,rw权限表示该比特位允许读写。通过将第0比特位修改为1的方式发送写入指令。otp控制器当检测到第0比特位被修改为1后,确认检测到写入指令,向密钥生成器发送密钥请求。密钥请求的具体形式不做限定,在一种可行的实施方式中,可以通过密钥生成器和otp之间的密钥生成接口发送密钥请求。请参考图3,图3为本申请实施例提供的一种密钥生成接口信号时序图。其中,otp_trng_gen_start信号即为表1中的trng_start信号,otp_trng_gen_mode信号为表1中的trng_mode信号,trng_gen_done为表1中的trng_done信号,trng_data_valid为表1中的trng_data_invalid信号,trng_data即为生成的密钥。为了密钥安全,生成的密钥并不会允许ate机台对其进行访问。若otp控制器获取到了密钥生成器发送的密钥,则可以利用其执行后续步骤,或者将其存储于触发器中,以便等待执行后续步骤,触发器的具体型号等不做限定。
[0068]
s102:判断是否接收到密钥生成器发送的目标密钥。
[0069]
在发送密钥请求后,otp控制器需要判断是否接收到密钥生成器响应于密钥请求而发送的目标密钥。需要说明的是,目标密钥为合法的密钥,即并不是密钥生成器生成的所有密钥均为目标密钥,某些无法起到保密作用的密钥并不是目标密钥,比如全零的密钥。因此可以理解的是,判断是否获取到目标密钥的步骤可以包括两个步骤,第一步骤为判断是否接收到密钥生成器发送的密钥,第二步骤为判断接收到的密钥是否为目标密钥。在确定接收到目标密钥后,可以执行s104步骤,在确定未接收到目标密钥后,可以执行s103步骤。
[0070]
s103:确定发生密钥生成故障,并将第一寄存器设置为生成错误状态。
[0071]
若确定未接收到目标密钥,则说明密钥生成过程发生故障,因此可以确定发生密钥生成故障,此时可以将第一寄存器设置为生成错误状态,以便利用第一寄存器表征故障类型。通过将第一寄存器设置为生成错误状态,可以允许ate机台等通过读取第一寄存器中的值了解故障类型,实现故障的快速定位。需要说明的是,本实施例并不限定将第一寄存器设置为生成错误状态的具体方式。由于未接收到目标密钥可能存在两种情况,第一种情况为没有接收到密钥生成器发送的密钥,第二种情况为接收到了密钥生成器发送的密钥,但是该密钥并不是目标密钥。对于第一种情况,可以设置等待阈值,在等待时长大于等待阈值时确定发生密钥生成故障,此时对第一寄存器的设置方式可以为不做任何设置,即保留其现有设置。基于表1来说,保留现有设置的情况下,trng_done信号将保持为0,其可以表示密钥生成未完成。对于第二种情况,可以修改第一寄存器中用于表示密钥是否为目标密钥的比特位,基于表1来说,该比特位即为trng_data_invalid,目标密钥即为非全0或全1的密
钥。通过将trng_data_invalid信号设置为1,可以表示获取的密钥不是目标密钥。可以理解的是,利用第一寄存器可以使ate机台快速进行故障定位,即确定目标密钥是否生成成功,若想要确定目标密钥生成故障的原因,还可以读取其他信息,例如一次性可编程设备的其它寄存器或者密钥生成器的相关寄存器。
[0072]
s104:将目标密钥编程入一次性编程区域,并根据编程结果对第二寄存器进行设置。
[0073]
若确定获取到了目标密钥,则可以尝试向一次性编程区域内写入目标密钥,一次性编程区域可以为otp控制器对应的任意一次性存储区域,其具体地址可以根据需要进行设置,设置方式不做限定,例如可以在通过设置第一寄存器的状态时同时对第一寄存器中用于表示写入地址的比特位进行设置。由于在向一次性编程区域写入目标密钥匙可能发生故障,导致目标密钥编程失败,因此在尝试写入目标密钥后,根据编程结果对第二寄存器进行设置,以便通过第二寄存器对编程结果进行表征,在发生故障时对故障进行表征,快速完成故障定位。进一步,分别利用第一寄存器和第二寄存器对密钥写入过程中可能出现的两种故障进行表征,可以无需读取目标密钥的具体内容实现对是否发生故障的判断,避免造成密钥泄漏,在目标密钥被成功写入一次性编程区域时保证密钥的可靠性。
[0074]
应用本申请实施例提供的密钥编程方法,分两步执行密钥写入的过程。在检测到写入指令时,说明确定需要将目标密钥写入到一次性编程区域,因此向密钥生成器发送密钥请求。密钥生成器可能无法提供目标密钥,因此在发送密钥请求后判断是否接收到目标密钥,目标密钥为符合要求的密钥。若未接收到目标密钥,则可以确定发生过年了密钥生成故障,因此通过将第一寄存器设置为生成错误状态表明具体故障类型。若接收到目标密钥,则尝试向一次性编程区域写入目标密钥,由于目标密钥的写入可能出现故障,尝试可能成功也可能失败,因此在尝试写入后根据编程结果对第二寄存器进行设置,以便在尝试失败后利用第二寄存器表明故障类型。利用第一寄存器表示目标密钥的获取情况,并在成功获取目标密钥时利用第二寄存器表明目标密钥的写入情况,可以在发生故障时通过第一寄存器或第二寄存器准确地得知发生故障的原因,快速准确地完成故障定位,解决了相关技术存在的无法快速完成故障定位的问题。
[0075]
基于上述实施例,本实施例将对其中的部分步骤进行具体说明,请参考图4,图4为本申请实施例提供的一种具体的第二寄存器设置过程流程图,包括:
[0076]
s201:将目标密钥编程入一次性编程区域写入编程,监控写入编程的编程过程,得到编程结果。
[0077]
在得到目标密钥后,利用目标密钥对一次性变成区域进行写入编程,并将控写入编程的编程过程。写入编程的具体方式与实际写入方式相同,在写入编程时监控其具体编程过程,编程过程可以表明目标密钥的具体写入过程,例如一次性编程区域内各个比特位是否被成功编程,以便得到对应的编程结果。具体的,若某一个比特位没有被编程成功,则可以确定编程结果为失败,若全部比特位均没有被编程成功,则可以确定编程结果为失败,若部分或全部的比特位无法被编程,则可以确定编程结果为失败。
[0078]
本实施例并不限定写入编程的具体时机。在一种实施方式中,可以在获取到目标密钥后立即进行写入编程;在另一种实施方式中,可以将目标密钥写入触发器,即在触发器中暂时存储,在检测到编程指令后开始尝试将触发器中的目标密钥写入一次性编程区域。
本实施例并不限定编程指令的具体检测方式,与写入指令类似的,向ate机台等开放第二寄存器的写权限,ate机台等可以通过设置第二寄存器的状态发送编程指令,otp控制器通过检测第二寄存器的状态来检测编程指令。
[0079]
s202:若编程结果为成功,则确定密钥编程成功,并将第二寄存器设置为编程成功状态。
[0080]
若编程结果为成功,即成功将目标密钥写入一次性编程区域,此时可以确定密钥编程成功,并将第二寄存器设置为编程成功状态。通过将第二寄存器设置为编程成功状态,可以通过第二寄存器表明编程成功,允许ate机台等通过读取第二寄存器的方式确定目标密钥的编程结果。
[0081]
s203:若编程结果为失败,则确定发生密钥编程故障,并将第二寄存器设置为编程失败状态。
[0082]
若编程结果为失败,即目标密钥没有被成功写入一次性编程区域,此时可以确定发生密钥编程故障,并将第二寄存器设置为编程失败状态。通过将第二寄存器设置为编程失败状态,可以通过第二寄存器表明发生了密钥编程故障,允许ate机台等通过读取第二寄存器的方式确定发生了密钥编程故障,快速完成故障定位。进一步的,在一种可行的实施方式中,将第二寄存器设置为编程失败状态的步骤可以包括:
[0083]
步骤11:基于编程过程将第二寄存器设置为目标编程失败状态。
[0084]
通过监控编程过程,可以了解具体的写入编程执行情况,由于密钥编程故障可能存在不同的故障情况,例如任意一个或多个比特位编程失败都会导致编程结果为失败,因此可以基于监控的编程过程,根据编程过程将第二寄存器设置为对应的目标编程失败状态,ate机台等可以通过读取第二寄存器确定发生密钥编程故障,并基于目标编程失败状态分析具体的故障原因。在一种具体的实施方式中,第二寄存器中的各个比特位的描述如表2所示:
[0085]
表2第二寄存器描述表
[0086]
[0087][0088]
其中,ate机台等可以通过将第0比特位置为0x0d,即将otpc_start比特写为1,并将otpc_cmd信号写为3’h6的方式来表示要编程密钥区域,即发送编程指令,在key_area写为0时表示编程密钥低128比特。otp控制器检测到第二寄存器被设置为上述状态后确认检测到编程指令,将触发器内保存的128比特随机数编程到otp密钥的低128比特区域。ate机台等通过读第二寄存器第7比特位状态查询密钥区域是否完毕,正常情况下密钥区编程完毕后第8比特位和第7比特位返回0x03,即表示正常编程完毕。若第8比特位和第7比特位返回的值为2’h1,则表示编程完毕且编程失败。进一步的,可以通过读取比特22:9查看哪一个otp物理比特编程失败,并进一步分析编程失败的原因。
[0089]
进一步的,还可以采用blank check(空白检测操作)的方式对是否发生密钥编程故障进行检测。具体的,在将目标密钥编程入一次性编程区域写入编程之前,还可以包括:
[0090]
步骤21:执行空白检测操作,得到第一检测结果。
[0091]
步骤22:判断第一检测结果是否为成功;
[0092]
步骤23:若第一检测结果为成功,则执行将目标密钥编程入一次性编程区域的步骤。
[0093]
空白检测操作用于检测一次性编程区域是否为空白区域,即全0区域,其具体检测方式可以参考相关技术,本实施例在此不再赘述。由于otp控制器对应的一次性编程区域在未被使用时为空白区域,且全0密钥必然不是目标密钥,因此若目标密钥被成功写入,则一次性变成区域必然不是空白区域。因此在进行写入编程之前可以先进行一次空白检测操作,得到第一检测结果。若第一检测结果为成功,则说明一次性编程区域之前并未被编程过,可以被编程。若第一检测结果不为成功,则说明该芯片为废片。需要说明的是,步骤21至步骤23可以在编程前执行,以便在编程前判断一次性编程区域是否能够被写入,在确定能够写入后再进行写入,避免对无法写入的一次性编程区域进行编程,造成计算资源的浪费。在另一种实施方式中,也可以不执行步骤21至步骤23,直接执行步骤24至步骤27,即认为所有出厂芯片均不是废片。
[0094]
相应的,在将目标密钥编程入一次性编程区域写入编程之后,在根据编程结果对第二寄存器进行设置之前,还包括:
[0095]
步骤24:执行空白检测操作,得到目标检测结果。
[0096]
步骤25:若判断目标检测结果是否为失败。
[0097]
步骤26:若目标检测结果不为失败,则确定密钥编程失败,编程结果为失败。
[0098]
步骤27:若目标检测结果为成功,则确定密钥编程成功,编程结果为成功。
[0099]
在写入编程后,进行一次空白检测操作,得到目标检测结果,若目标检测结果为失败,则说明一次性编程区域被成功编程,因此可以确定密钥编程成功,否则确定密钥编程失败,发生密钥编程故障。该方法同样可以在不读取一次性编程区域具体值的情况下判断是否发生密钥编程故障,在防止目标密钥泄漏的条件下可以对是否发生密钥编程故障进行二次检测,对通过读取第二寄存器的值得到的编程结果进行验证。
[0100]
基于上述实施例,再判断是否接收到目标密钥时,可以先判断是否接收到密钥生成器发送的密钥,并根据密钥的获取情况选择不同的信息判断是否接收到目标密钥。具体的,判断是否接收到密钥生成器发送的目标密钥的步骤可以包括:
[0101]
步骤31:判断是否接收到密钥生成器发送的密钥。
[0102]
步骤32:若未接收到密钥,则利用等待时长判断是否接收到目标密钥。
[0103]
步骤33:若接收到密钥,则根据密钥内容判断是否接收到目标密钥。
[0104]
在判断是否接收到目标密钥时,需要先判断是否接收到是否获取到密钥,因为如果没有获取到密钥,则必然不可能获取到目标密钥。若未接收到密钥,则说明密钥生成器可能无法生成密钥,或者说明密钥生成器正在生成密钥,这种情况下可以统计等待时长,并利用等待时长判断是否接收到目标密钥。若接收到了密钥,则可以根据密钥的具体内容,即密钥内容,判断接收到的迷药是否为目标密钥。具体的,步骤32可以包括:
[0105]
步骤41:判断等待时长是否大于预设时长。
[0106]
步骤42:若大于预设时长,则确定未接收到目标密钥。
[0107]
步骤43:若未大于预设时长,则更新等待时长。
[0108]
本实施例中,可以对等待接收密钥的最长等待时间进行设置,即设置预设时长,预设时长的具体大小不做限定。在确定未接收到密钥生成器发送的密钥时,可以统计等待时长,并判断等待时长是否大于预设时长。若等待时长已经大于预设时长,则可以确定密钥接收超时,而没有获取到密钥必然没有获取到目标密钥,此时可以确定未接收到目标密钥。若等待时长未大于预设时长,则并不能说明无法接受到目标密钥,目标密钥可能正在被生成或正在传输。因此可以更新等待时长,以便重新执行步骤41时进行再次判断,直至接收到密钥或等待时长大于预设时长。
[0109]
具体的,步骤33可以包括:
[0110]
步骤51:判断密钥内容是否为全0或全1。
[0111]
步骤52:若为全0或全1,则确定未接收到目标密钥。
[0112]
步骤53:若不为全0和全1,则确定接收到目标密钥。
[0113]
在本实施例中,目标密钥为非全0且非全1的密钥,因此在获取到密钥后,判断密钥内容是否为全0或全1。若为全0或全1,则确定未接收到目标密钥,否则确定接收到目标密钥。
[0114]
下面对本申请实施例提供的密钥编程系统进行介绍,下文描述的密钥编程系统与上文描述的密钥编程方法可相互对应参照。
[0115]
请参考图5,图5为本申请实施例提供的一种密钥编程系统的结构示意图,包括测
试机台、密钥生成器和电子设备,所述电子设备包括一次性编程区域、第一寄存器和第二寄存器,电子设备还包括:
[0116]
请求发送模块110,用于在检测到写入指令时,向密钥生成器发送密钥请求;
[0117]
目标密钥判断模块120,用于判断是否接收到所述密钥生成器发送的目标密钥;
[0118]
密钥生成故障确定模块130,用于若未接收到所述目标密钥,则确定发生密钥生成故障,并将第一寄存器设置为生成错误状态;
[0119]
写入编程模块140,用于若接收到所述目标密钥,则将所述目标密钥编程入一次性编程区域,并根据编程结果对第二寄存器进行设置。
[0120]
可选地,写入编程模块140,包括:
[0121]
写入编程单元,用于利用所述目标密钥对所述一次性编程区域进行写入编程,监控所述写入编程的编程过程,得到所述编程结果;
[0122]
第一设置单元,用于若所述编程结果为成功,则确定密钥编程成功,并将所述第二寄存器设置为编程成功状态;
[0123]
第二设置单元,用于若所述编程结果为失败,则确定发生密钥编程故障,并将所述第二寄存器设置为编程失败状态。
[0124]
可选地,第二设置单元,包括:
[0125]
失败设置子单元,用于基于所述编程过程将所述第二寄存器设置为目标编程失败状态。
[0126]
可选地,还包括:
[0127]
第一空白检测模块,用于执行空白检测操作,得到目标检测结果;
[0128]
目标检测结果判断模块,用于判断所述目标检测结果是否为失败;
[0129]
失败确定模块,用于若所述目标检测结果不为失败,则确定密钥编程失败,所述编程结果为失败;
[0130]
成功确定模块,用于若所述目标检测结果为成功,则确定密钥编程成功,所述编程结果为成功。
[0131]
可选地,还包括:
[0132]
第二空白检测模块,用于执行所述空白检测操作,得到第一检测结果;
[0133]
第一检测结果判断模块,用于判断所述第一检测结果是否为成功;
[0134]
相应的,所述写入编程模块140为确定所述第一检测结果为成功,将所述目标密钥编程入一次性编程区域的模块。
[0135]
可选地,目标密钥判断模块120,包括:
[0136]
接收判断模单元,用于判断是否接收到所述密钥生成器发送的密钥;
[0137]
等待时长判断单元,用于若未接收到所述密钥,则利用等待时长判断是否接收到所述目标密钥;
[0138]
内容判断单元,用于若接收到所述密钥,则根据密钥内容判断是否接收到所述目标密钥。
[0139]
可选地,等待时长判断单元,包括:
[0140]
预设时长判断子单元,用于判断所述等待时长是否大于预设时长;
[0141]
第一未接收确定子单元,用于若大于所述预设时长,则确定未接收到所述目标密
钥;
[0142]
更新子单元,用于若未大于所述预设时长,则更新所述等待时长。
[0143]
可选地,内容判断单元,包括:
[0144]
内容判断子单元,用于判断所述密钥内容是否为全0或全1;
[0145]
第二未接收确定子单元,用于若为全0或全1,则确定未接收到所述目标密钥;
[0146]
接受确定子单元,用于若不为全0和全1,则确定接收到所述目标密钥。
[0147]
下面对本申请实施例提供的电子设备进行介绍,下文描述的电子设备与上文描述的密钥编程方法可相互对应参照。
[0148]
请参考图6,图6为本申请实施例提供的一种电子设备的结构示意图。其中电子设备100可以包括处理器101和存储器102,还可以进一步包括多媒体组件103、信息输入/信息输出(i/o)接口104以及通信组件105中的一种或多种。
[0149]
其中,处理器101用于控制电子设备100的整体操作,以完成上述的密钥编程方法中的全部或部分步骤;存储器102用于存储各种类型的数据以支持在电子设备100的操作,这些数据例如可以包括用于在该电子设备100上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器102可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(static random access memory,sram)、电可擦除可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、可擦除可编程只读存储器(erasable programmable read-only memory,eprom)、可编程只读存储器(programmable read-only memory,prom)、只读存储器(read-only memory,rom)、磁存储器、快闪存储器、磁盘或光盘中的一种或多种。
[0150]
多媒体组件103可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器102或通过通信组件105发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口104为处理器101和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件105用于电子设备100与其他设备之间进行有线或无线通信。无线通信,例如wi-fi,蓝牙,近场通信(near field communication,简称nfc),2g、3g或4g,或它们中的一种或几种的组合,因此相应的该通信组件105可以包括:wi-fi部件,蓝牙部件,nfc部件。
[0151]
电子设备100可以被一个或多个应用专用集成电路(application specific integrated circuit,简称asic)、数字信号处理器(digital signal processor,简称dsp)、数字信号处理设备(digital signal processing device,简称dspd)、可编程逻辑器件(programmable logic device,简称pld)、现场可编程门阵列(field programmable gate array,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述实施例给出的密钥编程方法。
[0152]
下面对本申请实施例提供的计算机可读存储介质进行介绍,下文描述的计算机可读存储介质与上文描述的密钥编程方法可相互对应参照。
[0153]
本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述的密钥编程方法的步骤。
[0154]
该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0155]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0156]
本领域技术人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应该认为超出本申请的范围。
[0157]
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
[0158]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系属于仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语包括、包含或者其他任何变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
[0159]
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。