汽车电子控制器的Flash的在线烧写方法

摘要�?/span>

本发明公开了一种汽车电子控制器的Flash的在线烧写方法,包括如下步骤:第1步,计算机通过CAN总线连接汽车电子控制器,计算机作为主设备以CCP协议与汽车电子控制器建立逻辑连接;第2步,计算机将FlashKernel文件传送至汽车电子控制器的RAM,并在RAM中运行Flash?Kernel文件;第3步,计算机作为主设备以CCP协议和所述Flash内核程序建立逻辑连接,计算机调用Flash服务程序对汽车电子控制器的Flash进行擦除、修改、覆盖。本发明可以减少ECU的设计难度,降低制作成本,同时不占用Flash空间。

申请号: CN200810043899.X 专利名称�?/span> 汽车电子控制器的Flash的在线烧写方法 申请(专利权)人�?/span> [联创汽车电子有限公司] 发明人: [陈意瑶, 单津晖, 罗来军] 其他信息�?/span>

汽车电子控制器的Flash的在线烧写方法

技术领域

本发明涉及一种汽车电子控制器的在线编程、软件下载方法。

背景技术

汽车的ECU(ELECTRONIC CONTROL UNIT,电子控制器)对整车的能量管理及各部件的协调运作起着关键作用。在监控汽车的工作状态时,常常需要对ECU中的控制软件进行重新的标定、诊断和更新。传统的调试、更新ECU中软件的方法,或者借助于JTAG(Joint Test Action Group,联合测试行动小组)接口或BDM(Background Debug Mode,背景调试模式)接口进行在线烧写,或者将ECU拆卸下来烧写再安装回去。显然,在ECU上增加额外的接口会增加ECU的制造成本,而拆卸再安装则大大增加了调试烧写的复杂程度。

目前在ECU运行期间,已经可以实现外部信号在RAM中的标定。通过专用的测量标定软件,用户可以改变RAM中的参数,但不能改变Flash中的参数。为了解决这个问题,用户可以先下载一个特定的Flash服务程序至Flash中,Flash服务程序是完成对Flash的擦除、读写等操作,然后利用该程序改变Flash中的数据。由于ECU运行时并不需要经常改写Flash中的数据,这么操作显然会浪费Flash的存储空间。

CCP(CAN Calibration Protocol,CAN标定协议)协议是一个基于CAN总线的标定协议。CCP协议采用主从方式通讯,系统中只有一个主设备,它通过CAN总线连接一个或多个从设备。主设备与从设备间通过会话实现数据传送等功能,这些功能的实现是进行标定、监控、诊断等工作的基础。CCP协议已在某些ECU标定中得到应用,但目前尚无用该协议进行ECU在线下载的方法。

发明内容

本发明所要解决的技术问题是提供一种汽车电子控制器的Flash的在线烧写方法,该方法无需使用ECU的JTAG或BDM接口,也不占用ECU的Flash存储空间,提高了ECU在线调试、更新的便利性。

为解决上述技术问题,本发明汽车电子控制器的Flash的在线烧写方法包括如下步骤:

第1步,计算机通过CAN总线连接汽车电子控制器,计算机作为主设备以CCP协议与汽车电子控制器建立逻辑连接;

第2步,计算机将Flash Kernel文件传送至汽车电子控制器的RAM,并在RAM中运行Flash Kernel文件;

第3步,计算机作为主设备以CCP协议和所述Flash内核程序建立逻辑连接,计算机调用Flash服务程序对汽车电子控制器的Flash进行擦除、修改、覆盖;

所述CCP协议从设备驱动软件包括CCP协议驱动程序和CAN总线接口驱动程序;

所述Flash Kernel文件包括CCP协议驱动程序、CAN总线接口驱动程序和Flash服务程序。

本发明使用ECU的CAN总线接口,目前汽车上大多使用CAN总线进行通信,因此ECU都具备CAN总线接口。这样无需ECU具有额外的JTAG或BDM接口,因此可以减少ECU的设计难度,减小体积并降低制作成本。同时本发明将Flash Kernel文件下载到ECU的RAM中,因此不占用ECU的Flash存储空间。

附图说明

下面结合附图和实施例对本发明作进一步详细的说明:

图1是本发明所述方法的流程图;

图2是计算机与汽车电子控制器相连接的示意图;

图3是CCP协议从设备驱动软件的模块示意图;

图4是CCP协议驱动程序的流程图;

图5是计算机向汽车ECU的RAM传送Flash Kernel文件的示意图;

图6是计算机向汽车ECU的Flash覆盖Hex文件的示意图;

图7是本发明所述方法全过程中计算机的流程图;

图8是本发明所述方法全过程中汽车ECU的流程图。

具体实施方式

请参阅图1,本发明汽车电子控制器的Flash的在线烧写方法包括如下步骤:

第1步,计算机通过CAN总线连接汽车电子控制器,计算机作为主设备以CCP协议与汽车电子控制器建立逻辑连接。

请参阅图2,计算机作为主设备和汽车电子控制器(作为从设备)相连接。计算机在硬件上具有CAN总线接口卡,汽车ECU在硬件上具有CAN总线驱动器,计算机通过CAN总线连接汽车ECU。CAN总线接口卡例如可采用Vector公司的CANape卡。计算机还具有CCP协议主设备驱动软件,包括CCP协议驱动程序和CAN总线接口驱动程序等。汽车ECU还具有CCP协议从设备驱动软件。计算机采用CANape测试标定工具对汽车ECU进行各项操作。CANape工具包含有CCP协议的所有命令模块以及根据CCP协议编写的子命令模块。

首先,配置主设备(计算机)的CANape Graphic界面。在CANape软件的菜单栏中确定需要配置Deviec选项为CCP Drive。在Driver Setting配置中,对所需的参数项要依次配置。包括:Protocol Parameters,其中CRO ID(命令发送帧)和DTO ID(数据发送帧)应与从设备(汽车ECU)中CCP.h定义一致。Flash参数项中地址段的填写应与从设备中的Flash地址空间一致。在Flash option选项中调入之前编译好的Flash Kernel文件。

其次,在CANape软件主菜单栏的Calibration选项中选择Download toFlash一栏,加载需要下载到Flash中进行覆盖的Hex文件。CANape内部会对Hex文件进行解包,将地址信息和Flash段的设置进行匹配,并且进行校验和的校验。

再次,通过CCP协议的Connect命令,建立主设备与从设备的逻辑连接。

第2步,计算机将Flash Kernel文件传送至汽车电子控制器的RAM,并在RAM中运行Flash Kernel文件。

请参阅图5,计算机以CCP协议与汽车ECU建立逻辑连接。由于CCP协议从设备驱 动软件在汽车ECU的Flash中,因此实际上是计算机与汽车ECU的Flash中的CCP协议从设备驱动软件建立逻辑连接(图中虚线所示)。然后,计算机向汽车ECU的RAM传送Flash Kernel文件,传送完毕后在汽车ECU的RAM中运行Flash Kernel文件。

首先,调用CCP协议的命令模块中的SET_MTA子模块,设置目标控制器的数据指针,确定需要下载的FLASH Kernel文件在汽车ECU的RAM中的地址。

其次,调用CCP协议的命令模块中的DOWNLOAD6模块向汽车ECU传送Flash Kernel文件,直至最后一个CAN数据帧传送完毕。

第3步,计算机作为主设备以CCP协议和所述Flash内核程序建立逻辑连接,计算机调用Flash服务程序对汽车电子控制器的Flash进行擦除、修改、覆盖。

请参阅图6,计算机以CCP协议与Flash Kernel文件建立逻辑连接。由于Flash Kernel文件在汽车ECU的RAM中,因此实际上是计算机与汽车ECU的RAM中的Flash Kernel文件建立逻辑连接(图中虚线所示)。然后,计算机调用Flash Kernel文件中的Flash服务程序对汽车ECU的Flash进行各项操作,包括擦除、修改、覆盖等。例如,计算机调用Flash服务程序对汽车电子控制器的Flash进行全部擦除,再传送一个新的Hex文件对汽车电子控制器的Flash进行全部覆盖。

首先,调用CCP协议的命令模块中的SET_MTA子模块,设置目标控制器的数据指针,确定需要下载的HEX文件(即用于覆盖汽车ECU的Flash的文件)在ECU内存中的位置。

其次,调用CCP协议的命令模块中的Clear_MTA子模块,擦除汽车ECU的Flash。

再次,调用CCP协议的命令模块中的PROGRAM6命令将需要在汽车ECU上运行的HEX文件写入FLASH中进行覆盖操作。

在上述方法的3个步骤之前,需要首先编写汽车电子控制器的CCP协议从设备驱动软件和Flash Kernel文件。

请参阅图3,CCP协议从设备驱动软件包括CCP协议驱动程序和CAN总线接口驱动程序。其中,CCP协议驱动程序用于建立符合CCP协议的通信,可以通过CANbedded工具配置生成,并且需要按照CAN 2.0的要求和CAN模块芯片资料的要求对CAN模块进行初始化,生成相应的.c和.h文件。CAN总线接口驱动程序用于建立CAN总线通信,完成CAN信息帧在CAN总线上的发送和接收,并为CCP协议驱动程序提供两个函数接口。调用CAN_vPutMsgObj()函数可以将CAN信息帧发送到CAN总线上,调用CAN_CAN_vGetMsgObj()函数可以从CAN总线上接受CAN信息帧。编写好的CCP协议从设备驱动软件可以存储在汽车ECU的Flash中。

所述Flash Kernel文件是用编译好的Hex文件改写的,包括CCP协议驱动程序、CAN总线接口驱动程序和Flash服务程序,编译后再生成Hex文件。其中的Flash服务程序实现对Flash的擦除、读写、覆盖等操作的功能。Flash Kernel文件在具体组成上分为两部分:其一为Flash Kernel Data(Flash Kernel的数据域),由FLASH、CAN、CCP驱动程序集成编译通过后的Hex文件组成;其二为Flash kernel Config(Flash Kernel的配置头文件),由Flash_kernel_Name(文件名)、Flash_kernel_file_ADDR(HEX文件的起始地址)、Flash_kernel_size(Hex文件的大小)、Flash_kernel_RAM_ADDR(Hex文件中RAM的地址)、Flash_kernel_RAM_ADDR_START(Hex文件中RAM的起始地址)组成。由于Flash Kernel 文件最终下载到汽车ECU的RAM中,因此需要在生成HEX文件时,将整段程序都定义到实际RAM区域内。

请参阅图4,这是CCP协议驱动程序的流程图。CCP协议驱动程序以一个无限循环的形式工作。首先等待主设备的CRO(命令接收帧),若CAN总线上没有CRO帧,则任务挂起。若发现主设备的CRO帧则继续执行后面的步骤。若CAN总线上有CRO帧,则CCP协议驱动程序调用CAN总线接口驱动程序的CAN_vGetMsgObj()函数来获取主设备的CRO帧。随后解析CRO命令帧,获取主设备发送的命令码及命令参数。根据该命令执行相应动作。执行完毕后,调用ccpSend()函数发送DTO(数据发送帧),在ccpSend()函数中调用CAN_vPutMsgObj()函数,回送成功执行完毕的应答帧。若需回送参数则在DTO帧中相应位置回送应答参数。CCP协议为确保主设备与从设备之间正常通信,每次发送后,程序必须通过调用CCP driver中的ccpSendCallback()子函数检查刚才的DTO是否已经发送,否则不能发送下一帧报文。针对不同的CAN driver实现,该函数调用的位置不同。当检测出DTO正常发送后,主函数将CCP标志位清空,CCP协议驱动程序回到第一步,继续等待CAN总线上的CRO帧。

请参阅图7,这是本发明所述方法全过程中主设备计算机的流程图。首先配置计算机的CANape Graphic界面,对所需的参数项要依次配置。包括:Protocol Parameters,其中CRO ID和DTO ID应与从设备汽车ECU中CCP.h定义一致。Flash参数项中地址段的填写应与汽车ECU中的Flash地址空间一致。Flash option选项中调入之前编译好的Flash Kernel文件。然后在主菜单栏的Calibration选项中选择Download to Flash一栏,加载需要下载到Flash中的Hex文件。CANape内部会对Hex文件进行解包,将地址信息和Flash段的设置进行匹配,并且进行校验和的校验。主设备界面配置好后,就开始和从设备连接传输命令。调用CCP命令模块中的SET_MTA子模块,设置目标控制器的数据指针,确定需要下载的FLASH kernel在汽车ECU的RAM中的地址。接收到ECU回送成功的应答帧后,调用DOWNLOAD6模块向汽车ECU传送Flash Kernel文件;调用DOWNLOAD模块完成最后一帧数据的下载。调用SET_MTA子模块,设置汽车ECU的数据指针,确定需要下载的HEX文件在ECU内存中的位置。调用Clear_MTA,擦除Flash。调用PROGRAM6命令将需要在ECU上运行的程序HEX文件写入FLASH中。

请参阅图8,这是本发明所述方法全过程中从设备汽车ECU的流程图。打开CAN接受中断。当总线上有CAN报文出现时,依次接受并解析执行命令。主函数通过判断标志位的状态,调用CCP driver的ccpCommand()子函数。该函数是命令处理器的主要组成部分,也是命令处理器与CAN driver的接口函数,它负责解释并执行收到的CRO命令,调用CCP driver中的其他函数,进行数据处理并组织需要反馈的数据。调用ccpCommand()子函数,依次完成设置数据指针,把Flash Kernel下载到RAM中,然后程序跳转到RAM中,运行Flash Kernel部分的程序。依次完成设置要下载的Flash的首地址,擦除Flash,最后完成对Flash的烧写。

综上所述,本发明汽车电子控制器的Flash的在线烧写方法,首先按照CCP协议编写从设备驱动软件和Flash Kernel文件。然后计算机作为主设备与汽车ECU的Flash中的从设备驱动软件进行CCP通信,传送FlashKernel文件至汽车ECU的RAM中。再后计算机作为主设备与汽车ECU的RAM中的Flash Kernel文件进行CCP通信,传送新的Hex文件 对汽车ECU的Flash进行在线烧写。该方法简便易行,有利于精简汽车ECU的硬件设计,减小汽车ECU的体积,降低汽车ECU的制造成本。同时该方法不占用汽车ECU的Flash存储空间。

具体实施方式

请参阅图1,本发明汽车电子控制器的Flash的在线烧写方法包括如下步骤:

第1步,计算机通过CAN总线连接汽车电子控制器,计算机作为主设备以CCP协议与汽车电子控制器建立逻辑连接。

请参阅图2,计算机作为主设备和汽车电子控制器(作为从设备)相连接。计算机在硬件上具有CAN总线接口卡,汽车ECU在硬件上具有CAN总线驱动器,计算机通过CAN总线连接汽车ECU。CAN总线接口卡例如可采用Vector公司的CANape卡。计算机还具有CCP协议主设备驱动软件,包括CCP协议驱动程序和CAN总线接口驱动程序等。汽车ECU还具有CCP协议从设备驱动软件。计算机采用CANape测试标定工具对汽车ECU进行各项操作。CANape工具包含有CCP协议的所有命令模块以及根据CCP协议编写的子命令模块。

首先,配置主设备(计算机)的CANape Graphic界面。在CANape软件的菜单栏中确定需要配置Deviec选项为CCP Drive。在Driver Setting配置中,对所需的参数项要依次配置。包括:Protocol Parameters,其中CRO ID(命令发送帧)和DTO ID(数据发送帧)应与从设备(汽车ECU)中CCP.h定义一致。Flash参数项中地址段的填写应与从设备中的Flash地址空间一致。在Flash option选项中调入之前编译好的Flash Kernel文件。

其次,在CANape软件主菜单栏的Calibration选项中选择Download toFlash一栏,加载需要下载到Flash中进行覆盖的Hex文件。CANape内部会对Hex文件进行解包,将地址信息和Flash段的设置进行匹配,并且进行校验和的校验。

再次,通过CCP协议的Connect命令,建立主设备与从设备的逻辑连接。

第2步,计算机将Flash Kernel文件传送至汽车电子控制器的RAM,并在RAM中运行Flash Kernel文件。

请参阅图5,计算机以CCP协议与汽车ECU建立逻辑连接。由于CCP协议从设备驱 动软件在汽车ECU的Flash中,因此实际上是计算机与汽车ECU的Flash中的CCP协议从设备驱动软件建立逻辑连接(图中虚线所示)。然后,计算机向汽车ECU的RAM传送Flash Kernel文件,传送完毕后在汽车ECU的RAM中运行Flash Kernel文件。

首先,调用CCP协议的命令模块中的SET_MTA子模块,设置目标控制器的数据指针,确定需要下载的FLASH Kernel文件在汽车ECU的RAM中的地址。

其次,调用CCP协议的命令模块中的DOWNLOAD6模块向汽车ECU传送Flash Kernel文件,直至最后一个CAN数据帧传送完毕。

第3步,计算机作为主设备以CCP协议和所述Flash内核程序建立逻辑连接,计算机调用Flash服务程序对汽车电子控制器的Flash进行擦除、修改、覆盖。

请参阅图6,计算机以CCP协议与Flash Kernel文件建立逻辑连接。由于Flash Kernel文件在汽车ECU的RAM中,因此实际上是计算机与汽车ECU的RAM中的Flash Kernel文件建立逻辑连接(图中虚线所示)。然后,计算机调用Flash Kernel文件中的Flash服务程序对汽车ECU的Flash进行各项操作,包括擦除、修改、覆盖等。例如,计算机调用Flash服务程序对汽车电子控制器的Flash进行全部擦除,再传送一个新的Hex文件对汽车电子控制器的Flash进行全部覆盖。

首先,调用CCP协议的命令模块中的SET_MTA子模块,设置目标控制器的数据指针,确定需要下载的HEX文件(即用于覆盖汽车ECU的Flash的文件)在ECU内存中的位置。

其次,调用CCP协议的命令模块中的Clear_MTA子模块,擦除汽车ECU的Flash。

再次,调用CCP协议的命令模块中的PROGRAM6命令将需要在汽车ECU上运行的HEX文件写入FLASH中进行覆盖操作。

在上述方法的3个步骤之前,需要首先编写汽车电子控制器的CCP协议从设备驱动软件和Flash Kernel文件。

请参阅图3,CCP协议从设备驱动软件包括CCP协议驱动程序和CAN总线接口驱动程序。其中,CCP协议驱动程序用于建立符合CCP协议的通信,可以通过CANbedded工具配置生成,并且需要按照CAN 2.0的要求和CAN模块芯片资料的要求对CAN模块进行初始化,生成相应的.c和.h文件。CAN总线接口驱动程序用于建立CAN总线通信,完成CAN信息帧在CAN总线上的发送和接收,并为CCP协议驱动程序提供两个函数接口。调用CAN_vPutMsgObj()函数可以将CAN信息帧发送到CAN总线上,调用CAN_CAN_vGetMsgObj()函数可以从CAN总线上接受CAN信息帧。编写好的CCP协议从设备驱动软件可以存储在汽车ECU的Flash中。

所述Flash Kernel文件是用编译好的Hex文件改写的,包括CCP协议驱动程序、CAN总线接口驱动程序和Flash服务程序,编译后再生成Hex文件。其中的Flash服务程序实现对Flash的擦除、读写、覆盖等操作的功能。Flash Kernel文件在具体组成上分为两部分:其一为Flash Kernel Data(Flash Kernel的数据域),由FLASH、CAN、CCP驱动程序集成编译通过后的Hex文件组成;其二为Flash kernel Config(Flash Kernel的配置头文件),由Flash_kernel_Name(文件名)、Flash_kernel_file_ADDR(HEX文件的起始地址)、Flash_kernel_size(Hex文件的大小)、Flash_kernel_RAM_ADDR(Hex文件中RAM的地址)、Flash_kernel_RAM_ADDR_START(Hex文件中RAM的起始地址)组成。由于Flash Kernel 文件最终下载到汽车ECU的RAM中,因此需要在生成HEX文件时,将整段程序都定义到实际RAM区域内。

请参阅图4,这是CCP协议驱动程序的流程图。CCP协议驱动程序以一个无限循环的形式工作。首先等待主设备的CRO(命令接收帧),若CAN总线上没有CRO帧,则任务挂起。若发现主设备的CRO帧则继续执行后面的步骤。若CAN总线上有CRO帧,则CCP协议驱动程序调用CAN总线接口驱动程序的CAN_vGetMsgObj()函数来获取主设备的CRO帧。随后解析CRO命令帧,获取主设备发送的命令码及命令参数。根据该命令执行相应动作。执行完毕后,调用ccpSend()函数发送DTO(数据发送帧),在ccpSend()函数中调用CAN_vPutMsgObj()函数,回送成功执行完毕的应答帧。若需回送参数则在DTO帧中相应位置回送应答参数。CCP协议为确保主设备与从设备之间正常通信,每次发送后,程序必须通过调用CCP driver中的ccpSendCallback()子函数检查刚才的DTO是否已经发送,否则不能发送下一帧报文。针对不同的CAN driver实现,该函数调用的位置不同。当检测出DTO正常发送后,主函数将CCP标志位清空,CCP协议驱动程序回到第一步,继续等待CAN总线上的CRO帧。

请参阅图7,这是本发明所述方法全过程中主设备计算机的流程图。首先配置计算机的CANape Graphic界面,对所需的参数项要依次配置。包括:Protocol Parameters,其中CRO ID和DTO ID应与从设备汽车ECU中CCP.h定义一致。Flash参数项中地址段的填写应与汽车ECU中的Flash地址空间一致。Flash option选项中调入之前编译好的Flash Kernel文件。然后在主菜单栏的Calibration选项中选择Download to Flash一栏,加载需要下载到Flash中的Hex文件。CANape内部会对Hex文件进行解包,将地址信息和Flash段的设置进行匹配,并且进行校验和的校验。主设备界面配置好后,就开始和从设备连接传输命令。调用CCP命令模块中的SET_MTA子模块,设置目标控制器的数据指针,确定需要下载的FLASH kernel在汽车ECU的RAM中的地址。接收到ECU回送成功的应答帧后,调用DOWNLOAD6模块向汽车ECU传送Flash Kernel文件;调用DOWNLOAD模块完成最后一帧数据的下载。调用SET_MTA子模块,设置汽车ECU的数据指针,确定需要下载的HEX文件在ECU内存中的位置。调用Clear_MTA,擦除Flash。调用PROGRAM6命令将需要在ECU上运行的程序HEX文件写入FLASH中。

请参阅图8,这是本发明所述方法全过程中从设备汽车ECU的流程图。打开CAN接受中断。当总线上有CAN报文出现时,依次接受并解析执行命令。主函数通过判断标志位的状态,调用CCP driver的ccpCommand()子函数。该函数是命令处理器的主要组成部分,也是命令处理器与CAN driver的接口函数,它负责解释并执行收到的CRO命令,调用CCP driver中的其他函数,进行数据处理并组织需要反馈的数据。调用ccpCommand()子函数,依次完成设置数据指针,把Flash Kernel下载到RAM中,然后程序跳转到RAM中,运行Flash Kernel部分的程序。依次完成设置要下载的Flash的首地址,擦除Flash,最后完成对Flash的烧写。

综上所述,本发明汽车电子控制器的Flash的在线烧写方法,首先按照CCP协议编写从设备驱动软件和Flash Kernel文件。然后计算机作为主设备与汽车ECU的Flash中的从设备驱动软件进行CCP通信,传送FlashKernel文件至汽车ECU的RAM中。再后计算机作为主设备与汽车ECU的RAM中的Flash Kernel文件进行CCP通信,传送新的Hex文件 对汽车ECU的Flash进行在线烧写。该方法简便易行,有利于精简汽车ECU的硬件设计,减小汽车ECU的体积,降低汽车ECU的制造成本。同时该方法不占用汽车ECU的Flash存储空间。

个性化你的检索平台
使用键盘键 进行切换