整车控制器的数据读取和写入方法
文献发布时间:2023-06-19 12:19:35
技术领域
本发明涉及整车控制领域,尤其涉及整车控制器的数据读取和写入方法。
背景技术
在整车控制器开发过程中,控制器在运行或者下电存储EEPROM的时候,存在EEPROM存储失败或错误的情况,导致这种情况发生的原因是多方面的,例如,EEPROM某个存储单元失效,或由于存储数据量较大引起调度周期混乱,或由于读写校验故障导致存储的EEPROM数据失效等。这会直接导致某些关键变量读取数据的失效,例如bms的累积充放电安时容量、soc和续驶里程等,对整车安全及用户体验的影响很大。因此,需要建立有效的容错机制,防止各种异常状态下的电动车整车控制器关键数据丢失。
目前,常见的数据保护方式,大多采用crc校验码的方式对数据进行正确性判断,然而,在大数据量的情况下,EEPROM操作时间长可能导致周期超时或者操作系统挂起超时,可见这种方式对数据的保护程度不够,且数据的恢复能力有限。
发明内容
本发明所要解决的技术问题是针对现有技术的不足,提供一种整车控制器的数据读取方法和写入方法,以及存储介质和车辆。
本发明解决上述技术问题的技术方案如下:
一种整车控制器的数据读取方法,控制器从存储器中读取数据,所述存储器划分为n个数据页和n个校验页,每个校验页用于存储对应数据页中每行数据的校验码,其中,所述n个数据页包括1个主数据页和n-1个备份数据页,所述n个校验页包括1个主校验页和n-1个备份校验页,n≥3,所述数据读取方法包括:
从所述n个数据页中读取出目标行的n组数据,并从所述n个检验页中读取出所述目标行的n个校验码,以及每个校验码对应的预存校验值;
根据所述n个校验码计算对应的n个校验值;
当所述n组数据中存在至少两组相同的数据,且所述n个校验值分别与对应的所述预存校验值相同时,则数据读取成功,将相同的数据作为所述目标行的读出数据。
本发明的有益效果是:本发明提供的数据读取方法,适用于整车控制器的关键数据保护,在读取出目标行的数据后,通过多个备份数据页的数据对数据进行判断,并通过校验码进一步判断,不仅增加数据的可靠性,同时增加了数据的可恢复性,能够保护数据的完整性,从而能够防止大数据量的情况下存储器操作时间长而导致周期超时或者操作系统挂起超时的情况发生。
本发明解决上述技术问题的另一种技术方案如下:
一种整车控制器的数据写入方法,控制器向存储器中写入数据,所述存储器划分为n个数据页和n个校验页,每个校验页用于存储对应数据页中每行数据的校验码,其中,所述n个数据页包括1个主数据页和n-1个备份数据页,所述n个校验页包括1个主校验页和n-1个备份校验页,n≥3,所述数据存储方法包括:
从所述n个数据页中读取出目标行的n组数据,当所述n组数据中存在至少一组与待写入数据不同的数据时,将所述待写入数据分别写入所述n个数据页的目标行;
从所述n个检验页中读取出所述目标行的n个校验码,当所述n个校验码中存在至少一个与待写入校验码不同的校验码时,将所述待写入校验码分别写入所述n个校验页的目标行。
本发明提供的数据写入方法,适用于整车控制器的关键数据保护,通过将数据分别写入主数据页和多个备份数据页,并将校验码分别写入主校验页和多个备份校验页,不仅增加数据的可靠性,同时增加了数据的可恢复性,能够保护数据的完整性,从而能够防止大数据量的情况下存储器操作时间长而导致周期超时或者操作系统挂起超时的情况发生。
本发明解决上述技术问题的另一种技术方案如下:
一种存储介质,所述存储介质中存储有指令,当计算机读取所述指令时,使所述计算机执行如上述技术方案所述的整车控制器的数据读取方法,或执行如上述技术方案所述的整车控制器的数据写入方法。
本发明解决上述技术问题的另一种技术方案如下:
一种车辆,所述车辆的控制器使用如上述技术方案所述的整车控制器的数据读取方法从存储器中读取数据,或,使用如上述技术方案所述的整车控制器的数据写入方法向存储器中写入数据。
本发明附加的方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明实践了解到。
附图说明
图1为本发明整车控制器的数据读取方法的实施例提供的存储器地址规划结构示意图;
图2为本发明整车控制器的数据读取方法的实施例提供的流程示意图;
图3为本发明整车控制器的数据写入方法的实施例提供的流程示意图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实施例只用于解释本发明,并非用于限定本发明的范围。
需要说明的是,电动汽车中通常使用EEPROM存储关键数据,低端车型中,通常使用软件代码保护EEPROM数据,然而其逻辑比较有限,基本不做额外的保护。当前主流的EEPROM数据保护方式,大多采用crc校验码的方式对数据进行正确性判断,对数据的保护性不强,不适用于关键数据的保护。下面以EEPROM为例,进行说明。
首先,对EEPROM的地址规划方式进行说明,如图1所示,以三个数据区和三个校验区为例,给出了一种示例性的EEPROM地址规划结构示意图。
将EEPROM的地址空间划分成128*128大小相同的区域,其中,第一块为主数据区,另外两块为备份区。备份区后为三块存放校验码的1*128的区域,第一块为主校验区,另外;两块为备份区,分别对应存储三块数据区每行的校验码。
应理解,也可以根据实际需求将地址空间划分成256*256大小相同的区域,将数据区划分为四块,将第一块作为主数据区,另外三块作为备份区,校验区同理,不再赘述。
具体地,图1中,数据页A为主数据页,数据页B、C为备份数据页,校验页a为主校验页,校验页b、c为备份校验页。数据页A中存储有128行和128列数据,每行数据都有一个校验码,数据页A共有128个校验码,校验页a中存储有这128个校验码,每行数据和每行校验码一一对应。数据页B中存储有128行和128列数据,每行数据都有一个校验码,数据页B共有128个校验码,校验页b中存储有这128个校验码,每行数据和每行校验码一一对应。数据页C和校验页c的对应关系同理,不再赘述。
例如,数据页A的A1行存储有一组数据,共128列,那么在检验页a的a1行,存储有A1的校验码。数据页B的B1行和数据页C的C1行同样存储有该组数据,是对数据页A的备份,校验页b的b1行和校验页c的c1行同样存储有该校验码,是对校验页a的备份。
这种多数据页的地址空间划分方式,有利于增加数据的可靠性,同时增加了数据的可恢复性。对应上述的地址规划,本发明采用全新的存取机制来保护数据的完整性,同时为了防止大数据量EEPROM占用系统资源过多,采用异步存取的方式,保证了其他任务的实时性,同时兼顾安全性和使数据的存取操作在可接受的时间响应范围内。下面基于以上地址规划方式,对本发明提供的数据读写方法进行进一步说明。
如图2所示,为本发明整车控制器的数据读取方法的实施例提供的流程示意图,结合图1,以3个数据页和3个校验页为例进行说明,4个数据页、5个数据页、……等等同理,不再一一赘述。控制器从EEPROM中读取数据,EEPROM划分为3个数据页和3个校验页,每个校验页用于存储对应数据页中每行数据的校验码,其中,3个数据页包括1个主数据页和2个备份数据页,3个校验页包括1个主校验页和2个备份校验页,数据读取方法包括:
S11,从3个数据页中读取出目标行的3组数据,并从3个检验页中读取出目标行的3个校验码,以及每个校验码对应的预存校验值;
需要说明的是,从3个数据页中读取出目标行的3组数据中,从主数据页读出的数据为主数据,从备份数据页读出的数据为备份数据,在正常情况下,主数据与备份数据应该是相同的。3组数据中,包含1组主数据,另外2组数据为备份数据,校验码同理,不再赘述。
应理解,数据可以为车辆运行过程中的关键数据,例如,bms的累积充放电安时容量、SOC和续驶里程等。
可选地,校验码可以为码距、奇偶检验码、海明校验码或crc校验码等。
优选地,校验码可以为crc校验码。CRC即循环冗余校验码,是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
应理解,预存校验值是在读取之前向数据页中写入数据时,根据校验码生成校验值。
S12,根据3个校验码计算对应的3个校验值;
应理解,本领域技术人员可以根据实际需求选择具体的校验算法,例如,当选择crc校验码时,可以选择CRC-4/ITU、CRC-5/EPC或CRC-6/ITU等检验算法,在此不再赘述。
S13,当3组数据中存在至少2组相同的数据,且3个校验值分别与对应的预存校验值相同时,则数据读取成功,将相同的数据作为目标行的读出数据。
需要说明的是,当划分成4个数据页和4个校验页时,会读出4组数据和4个对应的校验码,那么也可以设置成当存在3组相同的数据,且4个校验值分别与对应的预存校验值相同时,则数据读取成功。
应理解,为进一步提高数据的可靠性,也可以当3组数据中存在3组相同的数据,且3个校验值分别与对应的预存校验值相同时,则数据读取成功。
例如,假设目标行为第1行,为便于说明,假设数据仅有2列,共有3个数据页,那么读出的数据共有3组,假设分别是[256,111]、[256,111]和[25,111],那么经过比较发现,第一组数据和第二组数据相同,均是[256,111],而第三组中第1列的数据出现错误,可能是数据丢失或写入时出现错误,符合第一个条件。
假设这3组数据的校验码均为27,预存校验值均为1010,那么经过计算,发现根据校验码计算得到的校验值也均为1010,3组数据的校验码的校验值均与预存校验值相同,符合第二个条件。
那么可以将[256,111]作为成功读取出的数据。
又例如,假设读出的3组数据分别是[26,111]、[256,11]和[25,111],那么经过比较发现,3组数据均各自不同,没有相同的两组数据,那么即使每个校验值分别与对应的预存校验值相同,也读取失败。
又例如,假设3组数据的校验码为27、27和28,预存校验值均为1010,那么根据这3组数据的校验码计算得到的校验值分别为1010、1010和1011,那么经过比较发现,前两组数据的校验码的校验值与预存校验值相同,第三组数据的校验码的校验值与预存校验值不同,那么即使3组数据相同,也读取失败。
需要说明的是,当读取完目标行的数据后,就可以继续按上述方法读取下一行的数据了,可以从第1行到最后1行滚动读取。
本实施例提供的数据读取方法,适用于整车控制器的关键数据保护,在读取出目标行的数据后,通过多个备份数据页的数据对数据进行判断,并通过校验码进一步判断,不仅增加数据的可靠性,同时增加了数据的可恢复性,能够保护数据的完整性,从而能够防止大数据量的情况下存储器操作时间长而导致周期超时或者操作系统挂起超时的情况发生。
可选地,在一些实施例中,还包括:
当3组数据中不存在至少两组相同的数据,或存在至少一个校验值与对应的预存校验值不相同时,则:
当第i个数据页的目标行的校验值与对应的预存校验值相同时,将第i个数据页的目标行的数据作为目标行的读出数据;
当3个校验值与对应的预存校验值均不同时,将3组数据逐字节进行数据恢复。
例如,假设目标行为第1行,为便于说明,假设数据仅有2列,共有3个数据页,那么读出的数据共有3组,假设分别是[26,111]、[256,11]和[25,111],那么经过比较发现,3组数据均各自不同,没有相同的两组数据,假设这3组数据的校验码分别为25、26和27,预存校验值均为1010,那么根据这3组数据的校验码计算得到的校验值分别为1001、1010和1011,经过比较发现第2组数据的校验码能够匹配,那么就将第2组数据[256,11]作为读出数据。
本实施例中当数据读取时出现错误时,当无法通过数据的比对确定读出数据时,通过根据校验值选择可靠的数据作为读出数据,提高了数据保护的安全性,当校验值也不匹配时,逐字节对数据进行恢复出来,提高了数据存储的可靠度,并且能够自动地恢复数据,能够最大限度的保护关键数据。
可选地,在一些实施例中,将3组数据逐字节进行数据恢复,具体包括:
将3组数据的每个字节逐一进行对比,当至少两组数据存在相同字节时,将其余组数据对应位置的字节替换为相同字节;
根据恢复后的数据对应的检验码计算第一校验值,当第一校验值与任意一个预存校验值相同时,则数据恢复成功。
例如,假设读出的3组数据分别是[26,111]、[256,11]和[25,111],那么逐字节进行对比,首先是第一个字节,三组数据都是“2”,那么无需恢复;第二个字节,第一组数据是“6”,第二组数据是“5”,第三组数据是“5”,那么将第一组数据的“6”替换成“5”;第三个字节,第一组数据为空,第二组数据是“6”,第三组数据为空,那么将第二组数据的“6”替换成空值。依次类推,完成数据恢复。
假设第一组数据进行了数据恢复,对应的校验码为27,预存校验值为1010,那么经过计算,根据校验码27计算得到的第一校验值为1010,与预存校验值相同,数据恢复成功。
由于在实际存储过程中,在所有的错误类型中,通常缺少一个字节,或者一个字节出错的情况较为常见,因此本实施例中通过逐字节对比的方式恢复数据,能够解决数据读写错误的问题,降低读取失败出现的次数,从而提高数据的可用性。
可选地,在一些实施例中,从3个数据页中读取出目标行的3组数据之前,还包括:
从主数据页中读取出目标行的状态标志位,根据目标行的状态标志位判断是否读取目标行的数据。
例如,上一轮已经将第1行数据读取成功,那么会将第一行对应的状态标志位置为Valid,下一轮再次读到第1行的数据时,发现是valid的话,就不再进行读取。
状态标志位还可以包括Write、Error等状态,这些状态表示该行读过了或者正在写或者有故障等,这时,就不会对该行进行读操作,会继续转向下一行的判断。当本行的状态标志位为not Valid,表示没有读过或者距上次读取,数值已经改变,那么则会重新进行读取,进行后续读操作。
本实施例中,通过为每行数据添加状态标志位,能够便于数据管理,避免重复读取错误的数据,导致读取速度降低,或重复读取相同的数据。
可选地,在一些实施例中,数据读取成功,将相同的数据作为目标行的读出数据之后,还包括:
将目标行的状态标志位标注为已读取。
可以理解,在一些实施例中,可以包含如上述各实施例中的部分或全部可选实施方式。
如图3所示,为本发明整车控制器的数据写入方法的实施例提供的流程示意图,结合图1,以3个数据页和3个校验页为例进行说明,4个数据页、5个数据页、……等等同理,不再一一赘述。控制器向EEPROM中写入数据,EEPROM划分为3个数据页和3个校验页,每个校验页用于存储对应数据页中每行数据的校验码,其中,3个数据页包括1个主数据页和2个备份数据页,3个校验页包括1个主校验页和2个备份校验页,数据存储方法包括:
S21,从3个数据页中读取出目标行的3组数据,当3组数据中存在至少一组与待写入数据不同的数据时,将待写入数据分别写入3个数据页的目标行;
S22,从3个检验页中读取出目标行的3个校验码,当3个校验码中存在至少一个与待写入校验码不同的校验码时,将待写入校验码分别写入3个校验页的目标行。
需要说明的是,从3个数据页中读取出目标行的3组数据中,从主数据页读出的数据为主数据,从备份数据页读出的数据为备份数据,在正常情况下,主数据与备份数据应该是相同的。校验码同理,不再赘述。
应理解,数据可以为车辆运行过程中的关键数据,例如,bms的累积充放电安时容量、SOC和续驶里程等。
可选地,校验码可以为码距、奇偶检验码、海明校验码或crc校验码等。
优选地,校验码可以为crc校验码。CRC即循环冗余校验码,是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
应理解,在读出校验码后,计算校验码的校验值,将校验值也对应地写入存储器中,作为预存校验值。
应理解,本领域技术人员可以根据实际需求选择具体的校验算法,例如,当选择crc校验码时,可以选择CRC-4/ITU、CRC-5/EPC或CRC-6/ITU等检验算法,在此不再赘述。
需要说明的是,只有目标行的数据与待写入数据不同,才需要写入,如果从目标行读出的3组数据均与待写入数据相同,那么原则上无需再写入数据。
例如,假设需要向第5行写入数据,读出的3组数据分别是[25,71]、[25,71]和[25,71],如果待写入的数据是[25,71],那么经过比较发现,待写入数据与读出的3组数据均相同,那么无需再写入。如果待写入的数据是[25,72],那么经过比较发现,待写入的数据与3组数据不同,那么就将[25,72]写入主数据页的第5行,同时通过其余的2个数据页进行备份。
检验码的写入过程同理,不再赘述。
本实施例提供的数据写入方法,适用于整车控制器的关键数据保护,通过将数据分别写入主数据页和多个备份数据页,并将校验码分别写入主校验页和多个备份校验页,不仅增加数据的可靠性,同时增加了数据的可恢复性,能够保护数据的完整性,从而能够防止大数据量的情况下存储器操作时间长而导致周期超时或者操作系统挂起超时的情况发生。
可选地,在一些实施例中,还包括:
将新写入目标行的数据进行回读,并将新写入目标行的校验码进行回读;
将回读数据与待写入数据进行逐字节比对,并将回读校验码与待写入校验码进行逐字节比对,当回读数据与待写入数据相同,且回读校验码与待写入校验码相同时,则数据写入成功。
本实施例中,通过写入的数据和校验码进行回读,能够进一步提高数据的安全性,防止出现数据写入错误。
可选地,在一些实施例中,还包括:
当无法从3个数据页中读取出目标行的3组数据时,将目标行的状态标志位标注为写入失败;
或,当无法从3个检验页中读取出目标行的3个校验码时,将目标行的状态标志位标注为写入失败。
例如,假设存储器一直反馈繁忙,那么我们就会将这一行的状态标志位置为Write_error,即本行写操作失败,等待下次在滚动到本行后,再尝试去写。
通过对数据行进行状态标志位的标注,能够避免重复读取错误的数据,提高数据提取的效率。
可以理解,在一些实施例中,可以包含如上述各实施例中的部分或全部可选实施方式。
在本发明的其他实施例中,还提供一种存储介质,该存储介质中存储有指令,当计算机读取指令时,使计算机执行如上述任意实施例所述的整车控制器的数据读取方法,或执行如上述任意实施例所述的整车控制器的数据写入方法。
在本发明的其他实施例中,还提供一种车辆,该车辆的控制器使用如上述任意实施例所上述述的整车控制器的数据读取方法从存储器中读取数据,或,使用如上述任意实施例所上述述的整车控制器的数据写入方法向存储器中写入数据。
读者应理解,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的方法实施例仅仅是示意性的,例如,步骤的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个步骤可以结合或者可以集成到另一个步骤,或一些特征可以忽略,或不执行。
上述方法如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
- 整车控制器的数据读取和写入方法
- 直接存储器访问控制器、数据读取方法和数据写入方法