本发明属于数据处理,涉及拖拉机基础软件开发设计领域,具体涉及一种拖拉机车载ecu的dflash的数据存储方法。
背景技术:
1、拖拉机的主控程序控制着拖拉机的各项工作功能,是拖拉机工作的软件核心。主控程序存储在拖拉机的控制单元上。拖拉机上的ecu在初始刷机的时候和正常工作的时候都需要对部分重要数据进行存储,存储的内容包括但不限于初始数据、标定数据、里程、启动次数、故障等等,在拖拉机上一般有两种存储方式,一种是外部的eeprom,通过spi协议进行通信,刷写速度较慢;一种是主控芯片内部的dflash(dataflash),刷写速度快;拖拉机上一般情况下存储都会使用主控芯片内部的dflash进行数据存储,但是dflash的刷写次数存在上限,大部分芯片的dflash都在100k次左右,当超过存储限值后,dflash上的数据存储就会变得不稳定,可能会发生数据丢失或无法写入的情况,这样会对拖拉机造成极大的损失,最严重的情况会导致拖拉机无法正常工作,因此需要对dflash的使用进行适当的优化,延长控制器的dflash的使用次数,以便拖拉机拥有更长的使用寿命。
技术实现思路
1、有鉴于此,为解决上述现有技术的不足,本发明的目的在于提供一种拖拉机车载ecu的dflash的数据存储方法,延长dflash的使用次数,从而延长拖拉机正常使用的生命周期,解决了拖拉机上主控芯片dflash的刷写次数较少的问题。
2、为实现上述目的,本发明所采用的技术方案是:
3、一种拖拉机车载ecu的dflash的数据存储方法,实现对dflash的数据写入、数据读取和数据擦除,将dflash区域进行再分区, dflash的擦除与写入遵循以下步骤:
4、s1、执行初始化操作,读取ecu 数据;
5、s2、进入数据写入主循环,包括以下步骤:
6、s21、检测钥匙开关ign状态,当钥匙开关ign稳定掉电1500ms后生成触发数据存储标志;
7、s22、当检测到数据存储标志后正式进入存储程序,以页为单位进行数据整理,将数据进行校验值的计算,然后整理进要存储的数组;
8、s23、读取当前dflash的状态,如果处于非busy状态,则开始进行数据的写入;
9、s24、执行数据的写入,获取上次写入的地址范围,本次的写入从上次写入地址的结束处开始;
10、s25、当数据写入完毕后将数据保存结束标志置1,并将dflash的busy标志清掉;
11、s26、当检测到数据保存结束标志后,软件控制ecu进行断电处理,至此数据存储结束;
12、s3:以片区为单位,按照步骤s1和步骤s2中前置条件判断是否进行指定片区擦除操作。
13、进一步的,数据的读取是在主函数之前的初始化阶段完成的,所述的步骤s1的具体步骤为:
14、s11、ecu上电,dflash初始化;
15、s12、读取dflash初始化函数返回值,确认当前是否初始化成功,读取dflash相关的寄存器状态,判断当前要读取的dflash的状态是否正常,如果异常,则擦除当前dflash片区的数据并清除dflash的状态寄存器,如果正常则执行后续的相关操作;
16、s13、读取最新存储的数据,并将数据赋值给接收数据的变量或数组;
17、s14、数据读取结束,整体功能初始化结束,进入主循环。
18、具体的,所述步骤s13中数据赋值具体步骤为:
19、当前 dflash片区寄存器值正常,读取该片区数据,计算相应的crc32的值,执行步骤c;
20、当前 dflash片区的状态寄存器异常,擦除异常的dflash片区,如果另一个片区正常且有数据,则读取另一个片区的数据,并将读到的数据通过crc32进行计算得到校验结果,然后执行后续操作;
21、计算得到的校验结果与存储的校验结果进行比对,如果校验数据一致,则证明本组数据无问题可以进行正常的数据赋值,如果校验不通过则读取地址更为靠前的数据,直到读到需要的数据;
22、如果读取不到正常的数据,读取ecu内存入的初始化数据并赋值给对应的变量,然后执行后续操作。
23、具体的,所述步骤s21中稳定掉电指钥匙开关ign状态从高电平变为低电平,并且低电平连续维持1500ms未发生变化。
24、进一步的,所述的步骤s22中数据整理具体内容为:
25、以页为单位,每页的0-3个字节存储保存当前片区的id,每页的4-7个字节保存事先分配好的组号,中间116个字节保存需要存储的重要数据,最后四个字节保存crc32校验后的结果。
26、进一步的,所述步骤s24具体分为以下几种情况:
27、若ecu为初次刷入程序掉电则数据从dflash0的起始地址开始写入数据,依次写入准备好的数据;
28、判断当前要写入的区域是否处于该片区的倒数第三次所在的区域,如果是,则需要擦除另外一个片区,为之后的数据写入做准备,如果不是,则进行普通的数据写入,执行普通的数据写入操作;
29、判断当前要写入的区域是否处于该片区的最后一个区域,如果是,先正常进行数据存储,然后更改下一组的数据存储的片区id,方便下次的数据写入;
30、除以上情况外执行一般数据写入操作,无需特殊处理。
31、本发明的有益效果是:
32、本发明的dflash的数据存储方法,对主芯片内部的dflash区域进行再分区,增加存储和读取时的校验机制和回滚机制,将有限bank和大小的dflash适当放大若干倍的可使用次数,可以在拖拉机的生命周期内几十倍的增加ecu内dflash的使用次数,一定程度上延长了主控芯片dflash区域的使用寿命,极大的延长了拖拉机的正常使用寿命;
33、本发明的dflash的数据存储方法,仅需更改不同的dflash bank以及相关的地址和单次写入的页数即可在不同的主控芯片上实现类似的数据存储效果和延长dflash使用次数的效果。
1.一种拖拉机车载ecu的dflash的数据存储方法,实现对dflash的数据写入、数据读取和数据擦除,其特征在于,将dflash区域进行再分区, dflash的擦除与写入遵循以下步骤:
2.根据权利要求1所述的一种拖拉机车载ecu的dflash的数据存储方法,其特征在于,数据的读取是在主函数之前的初始化阶段完成的,所述的步骤s1的具体步骤为:
3.根据权利要求2所述的一种拖拉机车载ecu的dflash的数据存储方法,其特征在于,所述步骤s13中数据赋值具体步骤为:
4.根据权利要求1所述的一种拖拉机车载ecu的dflash的数据存储方法,其特征在于,所述步骤s21中稳定掉电指钥匙开关ign状态从高电平变为低电平,并且低电平连续维持1500ms未发生变化。
5.根据权利要求1述的一种拖拉机车载ecu的dflash的数据存储方法,其特征在于,所述的步骤s22中数据整理具体内容为:
6.根据权利要求5述的一种拖拉机车载ecu的dflash的数据存储方法,其特征在于,所述步骤s24具体分为以下几种情况: