基于CCP的汽车控制器的匹配标定的设计
2 基于CCP协议的接口程序实现
基于CCP协议进行标定,需要MCS与ECU的应用程序都能够支持CCP协议,这部分应用程序称为CCP driver。本文采用Vector提供的free CCP driver[2]。由于CCP协议基于CAN总线,因此CCP driver与ECU的结合主要分为与CAN driver及与其他应用程序两方面。
CCP driver与CAN driver的结合如图3,主要分为以下两方面:
图3 CCP标定程序接口
·发送端:DTO通过CAN driver的发送子函数以CAN报文的格式上传给MCS。
·接收端:主设备发送的命令以CAN报文的格式首先进入CAN driver的接收子函数,由其判断为CRO后,进一步交给命令处理器处理。
命令处理器作为CCP driver的一个主要组成部分,负责将接收到的CRO,通过其CRM代码进行命令解释,执行相应操作,组织反馈数据并调用CAN发送子函数。DAQ处理器支持DAQ工作模式,当命令处理器判断收到的命令为DAQ请求后,进一步将数据传给DAQ处理器,由DAQ处理器组织数据并直接调用CAN 发送子函数,以DAQ-DTO的形式定期向主设备上传。
基于CCP协议的基本CAN通信流程如图4所示。ECU接收到报文后,转入CAN接收子函数,在常规接收流程后,对报文的ID标识符进行判断,如为CRO_ID,则将CCP标志位(Ccp_indicator)置位。由于采用中断方式接收报文,为了避免占用过多中断时间而影响其他函数或中断级别较低的程序运行,在对ID标识符进行判断后,并不直接在函数中调用CCP driver的命令处理器。命令处理器的调用会在主函数中进行。
图4 接口程序基本流程图
主函数通过判断标志位的状态,调用CCP driver的ccpCommand()子函数。该函数是命令处理器的主要组成部分,也是命令处理器与CAN driver的接口函数,它负责解释并执行收到的CRO命令,调用CCP driver中的其他函数,进行数据处理并组织需要反馈的数据。
ccpCommand()通过调用CAN driver中的CCP发送子函数ccpSend()发送一帧DTO。ccpSend()须在CAN driver中实现,由CCP driver调用。按实际情况,将CAN发送子函数直接以ccpSend()的形式实现,或在保留原有发送子函数的基础上添加一个ccpSend()子函数,在其中调用CAN发送子函数,以完成DTO的发送。
CCP协议为确保主设备与ECU之间正常通信,每次发送后,程序必须通过调用CCP driver中的ccpSendCallback()子函数检查刚才的DTO是否已经发送,否则不能发送下一帧报文。针对不同的CAN driver实现,该函数调用的位置不同。最后主函数将CCP标志位清空,等待下一条CRO命令。
一个完整的CCP driver 接口还包括与ECU其他应用程序的接口。每次单片机初始化后,主函数调用一次CCP driver的CCP初始化子函数ccpInit(),将上次标定残留在ECU内存中的数据清空,为下次标定与测量做准备。
CCP协议共定义了28条命令,每条命令在CCP driver中都对应一组相应的子函数,代表不同的功能,如EEPROM标定、DAQ工作模式等。用户可根据实际需要,选择实现其中部分或全部功能。每增加一个新的功能,必须在底层程序中添加开放该项功能的程序接口[3]。如对EEPROM标定,首先ECU应用程序中应包含EEPROM模块子函数,同时还需实现命令处理器与EEPROM模块之间的调用接口。
3 利用CANape实现基于CCP的标定
CANape[4]是德国Vector公司出品的一款基于ASAP标准的ECU测试和标定工具。它通过一个控制器硬件接口与ECU相连,两者之间常用的物理连接是基于CCP协议的CAN总线。只有控制器的底层程序中有支持CCP协议的程序接口, CANape才能与控制器通信。
CANape提供了多种功能:在线数据评估、离线评估、数据管理、FLASH编程、参数标定及ASAP2数据编辑器等。此外,测试过程中由CAN总线上传的数据还可以通过CANape在计算机显示和保存,以进行离线标定和数据评估。
3.1 ASAP2控制器描述文件及ASAP2编辑器
CANape与控制器间的通信需要一个描述文件支持,这个文件称为ASAP2控制器描述文件[4]。CANape对控制器的参数标定和数据测量都是基于这个文件,该文件记录了控制器中各参数的详细信息,如标定参数和测量变量在控制器中的存储地址、存储结构、数据类型和转换公式等。在CANape中,每个标定参数和测量数据都会有一个变量名,如发动机温度、冷却水温度。当CANape需要访问某个变量,就在ASAP2描述文件中根据变量名,找到该变量在控制器中的存储地址、数据长度等信息,然后进行操作,如图5。
图5 ASAP2控制器描述文件
为了方便用户对ASAP2文件进行维护和修改,CANape集成了一个ASAP2数据库编辑器,用以生成和修改ASAP2控制器描述文件。所有的信息都能通过对话框的形式进行设置和修改。该数据库编辑器还能工作在独立模式下,以生成一个ASAP2格式的控制器描述文件。
当ECU底层程序修改后,一些标定参数和测量数据的内存地址可能发生变动,CANape虽然仍能进行标定,但修改的已不是原来需要标定的参数,而是程序变动后原先地址下当前存放的某个新的未知数据。为了简化手工修改地址的繁琐,防止因为随意修改某个数据而破坏程序的正常运行,CANape支持通过linker map文件自动更新ASAP2文件里的信息。Map文件是ECU底层程序在编译时由编译器生成的一种映射文件,通过Map文件可以自动更新ASAP2文件。
3.2 CANape使用配置
每个需要标定的ECU都要在CANape中进行配置。
CANape共定义了28条命令,用以实现不同的功能,在配置页面里均有复选框与其对应。控制器的配置必须与CCP Driver在ECU底层程序的具体实现相匹配,只有对某个功能的程序接口已经开放,才能在CANape中选择使用该项功能[2][5]。
3.3 CANape中的参数标定
在CANape中,需要标定的变量称为标定参数,CANape将标定定义为修改驻扎在ECU内存中的变量的内容。CANape支持多种标定方法。这里标定方法指如何对标定参数所在的内存区域进行初始化、数据改写及保存。根据标定参数所在不同地址空间(ROM、FLASH或EEPROM),CANape规定了不同的标定方法。
当标定参数需要存放在FLASH或ROM中时,在ECU上电初始化后,程序首先将标定参数的初始值复制到RAM中,在CANape中该段用来存放标定参数的RAM称为Calibration RAM。标定过程中,CANape修改Calibration RAM中的参数值。标定全部结束后,再将该段RAM中的内容复制回FLASH或ROM中。
当标定参数存放在EEPROM中,有两种标定方法。第一种与上述方法相同,首先将标定参数复制到RAM中,标定结束后再将RAM中的数据覆盖到EEPROM。此外,也可对EEPROM中的参数直接进行改写,实现这种方法需要对EEPROM进行频繁擦写操作,但不占用额外的RAM空间。
由于汽车电子网络系统已开始得到广泛的使用,基于网络连接的电子控制单元的匹配标定和传统的匹配标定方法已有了很大的不同,特别是基于CAN总线的匹配标定技术,目前已成为研究和应用的重点。
采用CANape进行基于CCP的匹配标定,实现了标定工具和内容的统一。根据这种方法能够快速有效地进行汽车电子控制单元的匹配标定,在实际开发应用中取得了良好的效果。
- 基于CCP协议利用CANape进行电控单元标定(06-11)
- 另类传感器观念:汽车传感器(3)(11-30)