一种ECU程序刷写和检测方法转让专利

申请号 : CN201511022536.4

文献号 : CN105608370B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 向玉德钟发平张彤朱建新于海生雷文龙

申请人 : 科力远混合动力技术有限公司

摘要 :

本发明提供了一种ECU程序刷写和检测方法,系统复位ECU初始化,建立存储空间映射;根据EEPROM区、RAM区中读取的标识信息,判断是否进入BootLoader程序,如果进入则执行S3的进入BootLoader程序的相关步骤,否则执行S4运行应用程序,并周期性的循环检测是否有ECU检测请求或者刷写请求;若有ECU检测请求,则执行S5的检测相关步骤;若有ECU刷写请求,则执行S6的刷写相关步骤。本发明方法,安全性较高。

权利要求 :

1.一种ECU程序刷写和检测方法,其特征在于:按以下步骤:

S1:系统复位ECU初始化,包括初始化微控制器、系统时钟、CAN通信,建立存储空间映射;

S2:读取存储空间的EEPROM区中APP模式用区的应用程序有效标识,读取RAM区中BootLoader模式与APP模式共享RAM区的应用程序请求跳转到BootLoader程序的标识,和BootLoader模式与APP模式default RAM区的用户强制要求进入BootLoader程序的标识;若应用程序有效标识为无效或应用程序请求跳转到BootLoader程序标识为跳转或用户强制要求进入BootLoader程序标识为强制要求进入,则执行S3,否则执行S4;

S3:进入BootLoader程序,包括:(1)初始化BootLoader FlashDriver编程驱动程序,将BootLoader FlashDriver编程驱动程序从BootLoader FlashDriver编程驱动程序代码区拷贝到BootLoader FlashDriver编程驱动程序映射区,并标记ECU进入BootLoader刷写模式;(2)接收上位机下载的程序文件,将应用程序设置为无效,在将程序文件写入APP程序区之前先调用BootLoader FlashDriver编程驱动程序映射区中的FlashDriver擦除指令,然后调用编程指令,直到完成所有的程序文件写入;(3)通过CHECKSUM校验,检查刷写是否正确,如果不正确则等待系统复位;如果刷写成功,则更新应用程序为有效,并将APP有效标识写入EEPROM中的BootLoader模式用区;(4)删除BootLoader FlashDriver编程驱动程序映射区中的程序,然后调用APP入口函数AppMain(),执行S4;

S4:运行应用程序,并周期性的循环检测是否有ECU检测请求或者刷写请求;若有ECU检测请求,则执行S5;若有ECU刷写请求,则执行S6;

S5:ECU接收到检测请求后,进入检测模式运行,与上位机进行问-答式通信,完成ECU输入或者输出端口的检测;

S6:ECU接收到刷写请求后,读取包括车辆运行工况、发动机工况、车速、发动机转速的信息,确定系统安全后,触发系统复位,并设置应用程序请求跳转到BootLoader程序的标识为跳转。

2.如权利要求1所述的一种ECU程序刷写和检测方法,其特征在于:所述S5步骤具体为:

首先,HOST发出控制指令,ECU接收到后解析控制指令,并根据控制指令要求读取传感器输入信号或者控制执行器输出,然后根据控制指令要求和硬件在环系统HIL反馈的实际状态对控制结果进行对比分析,并反馈给HOST,最后由HOST对所有的控制指令和检测结果进行统计分析,完成ECU输入或者输出端口的检测。

3.如权利要求1或2所述的一种ECU程序刷写和检测方法,其特征在于:若所述S3步骤中BootLoader刷写中断,则系统复位后再进入BootLoader刷写模式。

4.如权利要求1或2所述的一种ECU程序刷写和检测方法,其特征在于:所述BootLoader模式用代码区是具有防止被擦除和被编程操作功能的代码区。

说明书 :

一种ECU程序刷写和检测方法

技术领域

[0001] 本发明涉及一种ECU程序刷写和检测方法。

背景技术

[0002] 在汽车电控单元ECU产品开发、生产以及售后服务等各个阶段,不便于采用DEBUG方式进行程序下载,需要采用CAN总线通信来完成程序更新刷写,此时就需要在ECU里运行引导程序BootLoader来完成软件系统启动和程序更新刷写。
[0003] 引导程序BootLoader通常包含三个部分:系统启动引导程序,CAN通信驱动程序,FlashDriver编程驱动程序;其中前两部分通常固化在ECU中。针对第三部分FlashDriver编程驱动程序,如果固化在ECU中,就有可能意外调用,而将导致严重的错误;因此通常采用两次下载的方式,即第一次下载上位机将FlashDriver编程驱动程序下载到ECU的RAM中,第二次下载的是需要更新的代码和数据,运行在RAM中的FlashDriver负责将需要更新的代码和数据写入到指定的存储区域。

发明内容

[0004] 本发明旨在提供一种安全性较高的ECU刷写和检测方法。
[0005] 本发明通过以下方案实现:
[0006] 一种ECU程序刷写和检测方法,按以下步骤:
[0007] S1:系统复位ECU初始化,包括初始化微控制器、系统时钟、CAN通信,建立存储空间映射;所述存储空间分为BootLoader模式用代码区、APP(即应用程序)模式用代码区、RAM区和EEPROM区;所述BootLoader模式用代码区包括BootLoade FlashDriver编程驱动程序代码区、BootLoader程序区、复位中断向量表;APP模式用代码区包括APP入口函数、APP程序区、APP重映射中断向量表;RAM区包括BootLoader模式与APP模式共享RAM区、BootLoader模式与APP模式default RAM区、BootLoader FlashDriver编程驱动程序映射区;EEPROM区包括BootLoader模式用区和APP模式用区;BootLoader模式用代码区中的复位中断向量表只会处理系统复位中断,并将其他中断指向APP模式用代码区中的APP重映射中断向量表,也就是说BootLoader程序包含了复位中断服务程序,APP程序包含了非复位中断服务程序。BootLoader模式与APP模式共享RAM区记录了由应用程序请求跳转到BootLoader程序的标识;EEPROM区中的BootLoader模式用区用于保存应用程序APP的有效标识信息,记录是否有可正常运行的应用程序;EEPROM中的APP模式用区则留给APP程序使用;S2:读取存储空间的EEPROM区中APP模式用区的应用程序有效标识,读取RAM区中BootLoader模式与APP模式共享RAM区的应用程序请求跳转到BootLoader程序的标识,和BootLoader模式与APP模式default RAM区的用户强制要求进入BootLoader程序的标识;若应用程序有效标识为无效或应用程序请求跳转到BootLoader程序标识为跳转或用户强制要求进入BootLoader程序标识为强制要求进入,则执行S3,否则执行S4;
[0008] S3:进入BootLoader程序,包括:(1)初始化BootLoader FlashDriver编程驱动程序,将BootLoader FlashDriver编程驱动程序从BootLoader FlashDriver编程驱动程序代码区拷贝到BootLoader FlashDriver编程驱动程序映射区,并标记ECU进入BootLoader刷写模式;(2)接收上位机下载的程序文件,将应用程序设置为无效,在将程序文件写入APP程序区之前先调用BootLoader FlashDriver编程驱动程序映射区中的FlashDriver擦除指令,然后调用编程指令,直到完成所有的程序文件写入;(3)通过CHECKSUM校验,检查刷写是否正确,如果不正确则等待系统复位;如果刷写成功,则更新应用程序为有效,并将APP有效标识写入EEPROM中的BootLoader模式用区;(4)删除BootLoader FlashDriver编程驱动程序映射区中的程序,然后调用APP入口函数AppMain(),执行S4;
[0009] S4:运行应用程序,并周期性的循环检测是否有ECU检测请求或者刷写请求;若有ECU检测请求,则执行S5;若有ECU刷写请求,则执行S6;
[0010] S5:ECU接收到检测请求后,进入检测模式运行,与上位机进行问-答式通信,完成ECU输入或者输出端口的检测;
[0011] S6:ECU接收到刷写请求后,读取包括车辆运行工况、发动机工况、车速、发动机转速的信息,确定系统安全后,触发系统复位,并设置应用程序请求跳转到BootLoader程序的标识为跳转。
[0012] 所述S5步骤具体为:首先,HOST发出控制指令,ECU接收到后解析控制指令,并根据控制指令要求读取传感器输入信号或者控制执行器输出,然后根据控制指令要求和硬件在环系统HIL反馈的实际状态对控制结果进行对比分析,并反馈给HOST,最后由HOST对所有的控制指令和检测结果进行统计分析,完成ECU输入或者输出端口的检测。
[0013] 若所述S3步骤中BootLoader刷写中断,则系统复位后再进入BootLoader刷写模式。
[0014] BootLoader模式代码区位于有保护功能的FLASH区域,通过设定专门的寄存器,使得BootLoader模式代码区是具有防止被擦除和被编写操作功能的代码区。在进入BootLoader刷写模式后,BootLoader模式用代码区中的BootLoader FlashDriver编程驱动程序会被从BootLoader FlashDriver编程驱动程序代码区拷贝到RAM区中的BootLoader FlashDriver编程驱动程序映射区,也就是说BootLoader模式代码区中的BootLoader FlashDriver编程驱动程序代码区只是用来存放代码,而不会被调用执行。
[0015] 本发明的一种ECU程序刷写和检测方法,分离BootLoader FlashDriver编程驱动程序的代码区和映射区,将BootLoader FlashDriver编程驱动程序代码区中的BootLoader FlashDriver复制到BootLoader FlashDriver编程驱动程序映射区,刷写完成后删除BootLoader FlashDriver编程驱动程序映射区里的代码,防止BootLoader FlashDriver编程驱动程序被意外调用执行。同时为了确保安全性,根据用户的刷写请求,通过结合车辆运行工况如车速、发动机转速等变量值判定系统是否可以进入BootLoader刷写模式,确保安全的进入刷写模式。完成程序刷写后,可以根据用户的指令进入检测模式,通过CAN通信采用问答的方式实现电控单元ECU的输入、输出端的检测。本发明的ECU程序刷写和检测方法,安全性较高。

附图说明

[0016] 图1:实施例1中ECU程序刷写和检测流程图
[0017] 图2:实施例1中ECU存储空间示意图
[0018] 图3:实施例1中ECU检测流程框图

具体实施方式

[0019] 以下结合实施例对本发明作进一步说明,但本发明并不局限于实施例之表述。
[0020] 实施例1
[0021] 一种ECU程序刷写和检测方法,其流程图如图1所示,按以下步骤:
[0022] S1:系统复位ECU初始化,包括初始化微控制器、系统时钟、CAN通信,建立存储空间映射;如图2所示,存储空间分为BootLoader模式用代码区、APP(即应用程序)模式用代码区、RAM区和EEPROM区;BootLoader模式用代码区包括BootLoade FlashDriver编程驱动程序代码区、BootLoader程序区、复位中断向量表;APP模式用代码区包括APP入口函数、APP程序区、APP重映射中断向量表;RAM区包括BootLoader模式与APP模式共享RAM区、BootLoader模式与APP模式default RAM区、BootLoader FlashDriver编程驱动程序映射区;EEPROM区包括BootLoader模式用区和APP模式用区;BootLoader模式用代码区中的复位中断向量表只会处理系统复位中断,并将其他中断指向APP模式用代码区中的APP重映射中断向量表,也就是说BootLoader程序包含了复位中断服务程序,APP程序包含了非复位中断服务程序。BootLoader模式与APP模式共享RAM区记录了由应用程序请求跳转到BootLoader程序的标识;EEPROM区中的BootLoader模式用区用于保存应用程序APP的有效标识信息,记录是否有可正常运行的应用程序;EEPROM中的APP模式用区则留给APP程序使用;
[0023] S2:读取存储空间的EEPROM区中APP模式用区的应用程序有效标识,读取RAM区中BootLoader模式与APP模式共享RAM区的应用程序请求跳转到BootLoader程序的标识,和BootLoader模式与APP模式default RAM区的用户强制要求进入BootLoader程序的标识;若应用程序有效标识为无效或应用程序请求跳转到BootLoader程序标识为跳转或用户强制要求进入BootLoader程序标识为强制要求进入,则执行S3,否则执行S4;
[0024] S3:进入BootLoader程序,包括:(1)初始化BootLoader FlashDriver编程驱动程序,将BootLoader FlashDriver编程驱动程序从BootLoader FlashDriver编程驱动程序代码区拷贝到BootLoader FlashDriver编程驱动程序映射区,并标记ECU进入BootLoader刷写模式;(2)接收上位机下载的程序文件,将应用程序设置为无效,在将程序文件写入APP程序区之前先调用BootLoader FlashDriver编程驱动程序映射区中的FlashDriver擦除指令,然后调用编程指令,直到完成所有的程序文件写入;(3)通过CHECKSUM校验,检查刷写是否正确,如果不正确则等待系统复位;如果刷写成功,则更新应用程序为有效,并将APP有效标识写入EEPROM中的BootLoader模式用区;(4)删除BootLoader FlashDriver编程驱动程序映射区中的程序,然后调用APP入口函数AppMain(),执行S4;
[0025] S4:运行应用程序,并周期性的循环检测是否有ECU检测请求或者刷写请求;若有ECU检测请求,则执行S5;若有ECU刷写请求,则执行S6;
[0026] S5:ECU接收到检测请求后,进入检测模式运行,如图3所示:首先,HOST发出控制指令,ECU接收到后解析控制指令,并根据控制指令要求读取传感器输入信号或者控制执行器输出,然后根据控制指令要求和硬件在环系统HIL反馈的实际状态对控制结果进行对比分析,并反馈给HOST,最后由HOST对所有的控制指令和检测结果进行统计分析,完成ECU输入或者输出端口的检测。
[0027] S6:ECU接收到刷写请求后,读取包括车辆运行工况、发动机工况、车速、发动机转速的信息,确定系统安全后,触发系统复位,并设置应用程序请求跳转到BootLoader程序的标识为跳转。
[0028] 若S3步骤中BootLoader刷写中断,则系统复位后再进入BootLoader刷写模式。
[0029] BootLoader模式代码区位于有保护功能的FLASH区域,通过设定专门的寄存器,使得BootLoader模式代码区是具有防止被擦除和被编写操作功能的代码区。在进入BootLoader刷写模式后,BootLoader模式用代码区中的BootLoader FlashDriver编程驱动程序会被从BootLoader FlashDriver编程驱动程序代码区拷贝到RAM区中的BootLoader FlashDriver编程驱动程序映射区,也就是说BootLoader模式代码区中的BootLoader FlashDriver编程驱动程序代码区只是用来存放代码,而不会被调用执行。