发明内容
本发明的目的是提供一种数据读取方法、系统、eFlash控制器及存储介质,解决现有技术中eFlash发生故障时需要一定切换时间的问题。
本发明提供的技术方案如下:
本发明提供一种数据读取系统,包括:eFlash控制器、一个主eFlash和至少一个副eFlash,且所述主eFlash和所述副eFlash在读数据前写入相同数据;
所述eFlash控制器包括数据选择单元、与所述主eFlash对应的第一eFlash控制单元,以及与所述副eFlash对应的第二eFlash控制单元,
所述第一eFlash控制单元和所述第二eFlash控制单元在CPU向所述eFlash控制器发起读指令时,同步对其对应的eFlash进行读操作;
所述数据选择单元根据读取结果选择所述主eFlash或所述副eFlash的读数据。
通过设置第一eFlash控制单元和第二eFlash控制单元,并在CPU向eFlash控制器发起读指令时,同步对主eFlash和副eFlash进行读操作,使得系统能够根据读取结果选择主eFlash或副eFlash的读数据,从而即使某个eFlash发生故障,也无需进行eFlash的切换,省去了eFlash的切换时间,提高了数据读取的实时性。
在一些实施方式中,所述数据选择单元在所述主eFlash和所述副eFlash的读数据相同时,选择所述主eFlash的读数据。
在一些实施方式中,所述第一eFlash控制单元和所述第二eFlash控制单元还用于记录其对应的eFlash的内存纠错信息,所述内存纠错信息包括可纠正错误信息和不可纠正错误信息;
所述数据选择单元在所述主eFlash和所述副eFlash的读数据不同,且至少一个eFlash发生不可纠正错误时,选择未发生不可纠正错误的一个eFlash的读数据;和/或,
所述数据选择单元在所述主eFlash和所述副eFlash的读数据不同,且各个eFlash均未发生不可纠正错误时,丢弃数据;和/或,
所述数据选择单元在所述主eFlash和所述副eFlash的读数据不同,且各个eFlash均发生不可纠正错误时,丢弃数据。
在一些实施方式中,所述eFlash控制器还包括同步校验单元,所述同步校验单元分别与所述第一eFlash控制单元、所述第二eFlash控制单元连接,用于对所述第一eFlash控制单元和所述第二eFlash控制单元是否同步进行校验,并在不同步时进行异常中断。
通过设置同步校验单元,能够对第一eFlash控制单元和第二eFlash控制单元是否同步进行校验,以保证主eFlash或副eFlash的读数据同步,便于进行后续的比较判断;且能够在第一eFlash控制单元和第二eFlash控制单元不同步时,或主eFlash和副eFlash均故障进行异常中断或锁步报错,避免系统长时间不能获取准确的读数据。
在一些实施方式中,所述同步校验单元在所述第一eFlash控制单元和所述第二eFlash控制单元行为状态不一致时进行锁步报错;和/或,
所述同步校验单元在所述主eFlash和所述副eFlash的数据使能信号不同时进行锁步报错;和/或,
所述同步校验单元在所述主eFlash和所述副eFlash的读数据不同但均未发生不可纠正错误时进行锁步报错;和/或,
所述同步校验单元在所述主eFlash和所述副eFlash的读数据均包含多bit错误时进行锁步报错。
在一些实施方式中,所述主eFlash或所述副eFlash在发生不可纠正错误时通过OTA技术对该eFlash的数据进行升级。
另外,本发明还提供一种数据读取方法,应用于eFlash控制器,所述eFlash控制器中包括数据选择单元、第一eFlash控制单元和第二eFlash控制单元,包括步骤:
在接收CPU发送的读指令时,同步控制所述第一eFlash控制单元对主eFlash,以及所述第二eFlash控制单元对副eFlash进行读操作,所述主eFlash和所述副eFlash在读数据前写入相同数据;
根据读取结果选择所述主eFlash或所述副eFlash的读数据。
在一些实施方式中,所述的据读取结果选择所述主eFlash或所述副eFlash的读数据具体包括:
在所述主eFlash和所述副eFlash的读数据相同时,选择所述主eFlash的读数据;
在所述主eFlash和所述副eFlash的读数据不同,且至少一个eFlash发生不可纠正错误时,选择未发生不可纠正错误的一个eFlash的读数据;
在所述主eFlash和所述副eFlash的读数据不同,且各个eFlash均未发生不可纠正错误时,丢弃数据;
在所述主eFlash和所述副eFlash的读数据不同,且各个eFlash均发生不可纠正错误时,丢弃数据。
另外,本发明还提供一种eFlash控制器,包括:
第一eFlash控制单元,与主eFlash连接;
第二Flash控制单元,与副eFlash连接,且在接收CPU发送的读指令时,所述第一eFlash控制单元和所述第二Flash控制单元同步对所述主eFlash和所述副eFlash进行读操作,所述主eFlash和所述副eFlash在读数据前写入相同数据;
数据选择单元,用于根据读取结果选择所述主eFlash或所述副eFlash的读数据。
另外,本发明还提供一种存储介质,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现上述的数据读取方法所执行的操作。
根据本发明提供的一种数据读取方法、系统、eFlash控制器及存储介质,通过设置第一eFlash控制单元和第二eFlash控制单元,并在CPU向eFlash控制器发起读指令时,同步对主eFlash和副eFlash进行读操作,使得系统能够根据读取结果选择主eFlash或副eFlash的读数据,从而即使某个eFlash发生故障,也无需进行eFlash的切换,省去了eFlash的切换时间,提高了数据读取的实时性。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
eFlash闪存是嵌入式系统中常用的非易失存储器,存储启动的关键信息,对其中数据的正确读取和正确性校验对系统的安全性尤为重要。为了保证系统能够稳定可靠的启动成功,一般会对eFlash数据进行校验或进行冗余设计。
冗余设计普遍采用一个主eFlash和一个备用eFlash;当主eFlash无法正常工作时,才会自动切换到另一个备用eFlash中工作,这种情况下,当检测到eFlash发生故障再切换到副eFlash的中间过程需要一定的切换时间,这个换时间对系统读取的实时性会产生一定的影响。
在一个实施例中,参考说明书附图1,本发明提供一种数据读取系统,包括:eFlash控制器3、一个主eFlash1和至少一个副eFlash2。
本申请不限定eFlash的数量,但由于eFlash同时发生故障的可能性较低,一般采用一个主eFlash1(即附图1中的eFlash1)和一个副eFlash2(即附图中的eFlash2)即可。为了保证本方案实施的可行性和准确性,主eFlash1和副eFlash2在读数据前需写入相同数据。
具体的,本申请的eFlash可配置为lock-step模式(锁步模式),当处于lock-step模式时,存在一个主eFlash1 和一个副eFlash2,可以通过寄存器配置两块eFlash的主、副关系。在使用lock-step模式前,主eFlash1和副eFlash2写入相同数据。
eFlash控制器3包括数据选择单元11、与主eFlash1对应的第一eFlash控制单元12,以及与副eFlash2对应的第二eFlash控制单元13。
第一eFlash控制单元12(即附图1中的eFlash1控制单元)和第二eFlash控制单元13(即附图1中的eFlash2控制单元)在CPU4向eFlash控制器3发起读指令时,同步对其对应的eFlash进行读操作;数据选择单元11根据读取结果选择主eFlash1或副eFlash2的读数据。
本申请的eFlash控制器3与CPU4连接,用于接收CPU4下发的指令如读指令,并向CPU4发送对应的数据如读数据。
数据选择单元11与第一eFlash控制单元12、第二eFlash控制单元13连接,用于根据读取结果选择主eFlash1或副eFlash2的读数据,并将选择的读数据发送至CPU4。数据选择单元11为现有技术中常规的数据选择模块,其具体实现方式不做限制。
本申请的核心构思是在第一eFlash控制单元12、第二eFlash控制单元13对其对应的eFlash进行读操作时,保证两侧的读操作的同步进行,对从两片eFlash 中读出的数据进行一定的数据分析,并根据分析结果对数据进行选择。由于两片eFlash 均带有ECC (ErrorChecking and Correcting,错误检查和纠正)校验和纠错功能,对于数据中出现单bit错误,ECC校验算法会自动对数据进行纠正;当出现多bit错误时寄存器会记录对应的eFlash控制单元中会产生ECC错误信息,并产生中断,ECC错误信息用于作为数据选择的依据。
通过设置第一eFlash控制单元12和第二eFlash控制单元13,并在CPU4向eFlash控制器3发起读指令时,同步对主eFlash1和副eFlash2进行读操作,使得系统能够根据读取结果选择主eFlash1或副eFlash2的读数据,从而即使某个eFlash发生故障,也无需进行eFlash的切换,省去了eFlash的切换时间,提高了数据读取的实时性。
在一个实施例中,在前述实施例的基础上,数据选择单元11根据读取结果选择主eFlash1或副eFlash2的读数据时,会根据实际情况进行调整。
数据选择单元11在主eFlash1和副eFlash2的读数据相同时,选择主eFlash1的读数据。由于系统通常是优先选择一个eFlash进行操作,即主eFlash1,在主eFlash1和副eFlash2的读数据相同时,即表明主eFlash1和副eFlash2均无故障,则继续选择主eFlash1的读数据。
优选的,第一eFlash控制单元12和第二eFlash控制单元13还用于记录其对应的eFlash的内存纠错信息,内存纠错信息包括可纠正错误信息和不可纠正错误信息。可纠正错误是指eFlash可自己进行纠错、改正的错误,如单bit错误,eFlash 通常都自带有ECC 校验和纠错功能,对于数据中出现单bit错误,ECC校验算法会自动对数据进行纠正;不可纠正错误是指eFlash无法自己进行纠错、改正的错误,如多bit错误。
数据选择单元11在主eFlash1和副eFlash2的读数据不同,且至少一个eFlash发生不可纠正错误时,选择未发生不可纠正错误的一个eFlash的读数据;
在主eFlash1和副eFlash2的读数据不同时,表明主eFlash1和副eFlash2至少一个出现故障,此时根据记录判断主eFlash1和副eFlash2是否发生不可纠正错误,若存在至少一个eFlash发生不可纠正错误时,选择未发生不可纠正错误的一个eFlash的读数据,该读数据是正确的读数据。
数据选择单元11在主eFlash1和副eFlash2的读数据不同,且各个eFlash均未发生不可纠正错误时,丢弃数据;
在主eFlash1和副eFlash2的读数据不同时,表明主eFlash1和副eFlash2至少一个出现故障,此时根据记录判断主eFlash1和副eFlash2是否发生不可纠正错误,若各个eFlash均未发生不可纠正错误时,表明出现其它异常错误,此时丢弃数据。
数据选择单元11在主eFlash1和副eFlash2的读数据不同,且各个eFlash均发生不可纠正错误时,丢弃数据。
在主eFlash1和副eFlash2的读数据不同时,表明主eFlash1和副eFlash2至少一个出现故障,此时根据记录判断主eFlash1和副eFlash2是否发生不可纠正错误,若各个eFlash均发生不可纠正错误时,则丢弃数据,并进行锁步报错,以便对主eFlash1和副eFlash2进行修复。
在一个实施例中,参考说明书附图1,在前述实施例的基础上,eFlash控制器3还包括同步校验单元14,同步校验单元14分别与第一eFlash控制单元12、第二eFlash控制单元13连接,用于对第一eFlash控制单元12和第二eFlash控制单元13是否同步进行校验,并在不同步时进行异常中断。
由于本申请的重点是保证第一eFlash控制单元12和第二eFlash控制单元13同步对其对应的eFlash进行读操作,为了判断第一eFlash控制单元12和第二eFlash控制单元13是否同步,通过设置同步校验单元14,能够对第一eFlash控制单元12和第二eFlash控制单元13是否同步进行校验,以保证主eFlash1或副eFlash2的读数据同步,便于进行后续的比较判断;且同步校验单元14能够在第一eFlash控制单元12和第二eFlash控制单元13不同步时,或主eFlash1和副eFlash2均故障进行异常中断或锁步报错,避免系统长时间不能获取准确的读数据。同步校验单元14采用现有技术,在此不做限制。
优选的,同步校验单元14在第一eFlash控制单元12和第二eFlash控制单元13行为状态不一致时进行锁步报错;和/或,同步校验单元14在主eFlash1和副eFlash2的数据使能信号不同时进行锁步报错;和/或,同步校验单元14在主eFlash1和副eFlash2的读数据不同但均未发生不可纠正错误时进行锁步报错;和/或,同步校验单元14在主eFlash1和副eFlash2的读数据均包含多bit错误时进行锁步报错。
进一步优选的,参考说明书附图2,主eFlash1或副eFlash2在发生不可纠正错误时通过OTA技术(Over-the-Air Technology,空中下载,是车载系统的在线升级技术)对该eFlash的数据进行升级。
具体的,在主eFlash1或副eFlash2在发生不可纠正错误时,会进行中断操作,中断产生后通过CPU判断是否需要进行OTA升级。
在一个实施例中,本发明还提供一种数据读取方法,应用于eFlash控制器,eFlash控制器中包括数据选择单元、第一eFlash控制单元和第二eFlash控制单元,第一eFlash控制单元和第二eFlash控制单元在CPU向eFlash控制器发起读指令时,同步对其对应的eFlash进行读操作;数据选择单元根据读取结果选择主eFlash或副eFlash的读数据。
本申请的eFlash可配置为lock-step模式(锁步模式),当处于lock-step模式时,存在一个主eFlash 和一个副eFlash,可以通过寄存器配置两块eFlash的主、副关系。在使用lock-step模式前,主eFlash和副eFlash写入相同数据。
该数据读取方法包括步骤:
S1、在接收CPU发送的读指令时,同步控制第一eFlash控制单元对主eFlash,以及第二eFlash控制单元对副eFlash进行读操作,主eFlash和副eFlash在读数据前写入相同数据;
S2、根据读取结果选择主eFlash或副eFlash的读数据。
本申请的核心构思是在第一eFlash控制单元、第二eFlash控制单元对其对应的eFlash进行读操作时,保证两侧的读操作的同步进行,对从两片eFlash 中读出的数据进行一定的数据分析,并根据分析结果对数据进行选择。由于两片eFlash 均带有ECC 校验和纠错功能,对于数据中出现单bit错误,ECC校验算法会自动对数据进行纠正;当出现多bit错误时寄存器会记录对应的eFlash 控制单元中会产生ECC错误信息,并产生中断,ECC错误信息用于作为数据选择的依据。
通过设置第一eFlash控制单元和第二eFlash控制单元,并在CPU向eFlash控制器发起读指令时,同步对主eFlash和副eFlash进行读操作,使得系统能够根据读取结果选择主eFlash或副eFlash的读数据,从而即使某个eFlash发生故障,也无需进行eFlash的切换,省去了eFlash的切换时间,提高了数据读取的实时性。
优选的,第一eFlash控制单元和第二eFlash控制单元还用于记录其对应的eFlash的内存纠错信息,内存纠错信息包括可纠正错误信息和不可纠正错误信息。可纠正错误是指eFlash可自己进行纠错、改正的错误,如单bit错误,eFlash 通常都自带有ECC 校验和纠错功能,对于数据中出现单bit错误,ECC校验算法会自动对数据进行纠正;不可纠正错误是指eFlash无法自己进行纠错、改正的错误,如多bit错误。
在一个实施例中,在上一实施例的基础上,据读取结果选择主eFlash或副eFlash的读数据具体包括:
在主eFlash和副eFlash的读数据相同时,选择主eFlash的读数据;由于系统通常是优先选择一个eFlash进行操作,即主eFlash,在主eFlash和副eFlash的读数据相同时,即表明主eFlash和副eFlash均无故障,则继续选择主eFlash的读数据。
在主eFlash和副eFlash的读数据不同,且至少一个eFlash发生不可纠正错误时,选择未发生不可纠正错误的一个eFlash的读数据;在主eFlash和副eFlash的读数据不同时,表明主eFlash和副eFlash至少一个出现故障,此时根据记录判断主eFlash和副eFlash是否发生不可纠正错误,若存在至少一个eFlash发生不可纠正错误时,选择未发生不可纠正错误的一个eFlash的读数据,该读数据是正确的读数据。
在主eFlash和副eFlash的读数据不同,且各个eFlash均未发生不可纠正错误时,丢弃数据;在主eFlash和副eFlash的读数据不同时,表明主eFlash和副eFlash至少一个出现故障,此时根据记录判断主eFlash和副eFlash是否发生不可纠正错误,若各个eFlash均未发生不可纠正错误时,表明出现其它异常错误,此时丢弃数据。
在主eFlash和副eFlash的读数据不同,且各个eFlash均发生不可纠正错误时,丢弃数据;在主eFlash和副eFlash的读数据不同时,表明主eFlash和副eFlash至少一个出现故障,此时根据记录判断主eFlash和副eFlash是否发生不可纠正错误,若各个eFlash均发生不可纠正错误时,则丢弃数据,并进行锁步报错,以便对主eFlash和副eFlash进行修复。
在一个实施例中,本发明还提供一种eFlash控制器,本申请的eFlash控制器与CPU连接,用于接收CPU下发的指令如读指令,并向CPU发送对应的数据如读数据;本申请的eFlash控制器还与主eFlash和副eFlash连接,用于在接收CPU下发的读指令时,对主eFlash和副eFlash进行读操作,以获取读数据。
eFlash控制器包括:第一eFlash控制单元、第二eFlash控制单元和数据选择单元。
第一eFlash控制单元与主eFlash连接;第二Flash控制单元与副eFlash连接,且在接收CPU发送的读指令时,第一eFlash控制单元和第二Flash控制单元同步对主eFlash和副eFlash进行读操作,主eFlash和副eFlash在读数据前写入相同数据;在主eFlash和副eFlash的读数据不同,且至少一个eFlash发生不可纠正错误时,选择未发生不可纠正错误的一个eFlash的读数据;在主eFlash和副eFlash的读数据不同,且各个eFlash均未发生不可纠正错误时,丢弃数据;在主eFlash和副eFlash的读数据不同,且各个eFlash均发生不可纠正错误时,丢弃数据。
数据选择单元,用于根据读取结果选择主eFlash或副eFlash的读数据。具体的,在主eFlash和副eFlash的读数据相同时,选择主eFlash的读数据;
通过设置第一eFlash控制单元和第二eFlash控制单元,并在CPU向eFlash控制器发起读指令时,同步对主eFlash和副eFlash进行读操作,使得系统能够根据读取结果选择主eFlash或副eFlash的读数据,从而即使某个eFlash发生故障,也无需进行eFlash的切换,省去了eFlash的切换时间,提高了数据读取的实时性。
eFlash控制器还包括同步校验单元,同步校验单元分别与第一eFlash控制单元、第二eFlash控制单元连接,用于对第一eFlash控制单元和第二eFlash控制单元是否同步进行校验,并在不同步时进行异常中断。
本申请的重点是保证第一eFlash控制单元和第二eFlash控制单元同步对其对应的eFlash进行读操作,为了判断第一eFlash控制单元和第二eFlash控制单元是否同步,通过设置同步校验单元,能够对第一eFlash控制单元和第二eFlash控制单元是否同步进行校验,以保证主eFlash或副eFlash的读数据同步,便于进行后续的比较判断;且同步校验单元能够在第一eFlash控制单元和第二eFlash控制单元不同步时,或主eFlash和副eFlash均故障进行异常中断或锁步报错,避免系统长时间不能获取准确的读数据。
优选的,同步校验单元在第一eFlash控制单元和第二eFlash控制单元行为状态不一致时进行锁步报错;和/或,同步校验单元在主eFlash和副eFlash的数据使能信号不同时进行锁步报错;和/或,同步校验单元在主eFlash和副eFlash的读数据不同但均未发生不可纠正错误时进行锁步报错;和/或,同步校验单元在主eFlash和副eFlash的读数据均包含多bit错误时进行锁步报错。
进一步优选的,主eFlash1或副eFlash2在发生不可纠正错误时通过OTA技术对该eFlash的数据进行升级。
具体的,在主eFlash1或副eFlash2在发生不可纠正错误时,会进行中断操作,中断产生后通过CPU判断是否需要进行OTA升级。
在一个实施例中,本发明还提供一种存储介质,存储介质中存储有至少一条指令,指令由处理器加载并执行以实现上述实施例的数据读取方法所执行的操作。例如,计算机可读存储介质可以是只读内存(ROM)、随机存取存储器(RAM)、只读光盘(CD-ROM)、磁带、软盘和光数据存储设备等。它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。