CCP解决方案

CCP解决方案

标定工作的划分

CCP标定协议的本质是基于CAN总线实现对ECU内存地址的读写操作。

 

标定工程师按照职能可以分为两类:标定软件开发工程师 和 标定执行工程师。

根据我司当前科室职能划分,标定工作也可分为三部分:

1、 网络科或软件科的主导工程师开发标定软件,搭好框架,要使软件具备可标定的程度;

2、 算法科的标定工程师在此基础上,进行二次开发,实现所有变量的可标定。

3、 环境仓标定、路试标定

 

本文主要描述标定工作的第一部分,以奇瑞M31T、力帆820EV两个项目为例,讨论如何移植现成的CCP模块代码,主要工作包括:代码移植修改、内存地址划分、A2L文件编辑、软件调试。

 

CCP模块代码移植、修改

1、代码移植

CCP模块代码文件如下:

CCP解决方案_第1张图片
 

 

可以将所有文件均存放于工程的同一文件夹目录下。

 

2、代码修改

移植完成后,要修改接口函数,以匹配当前工程。如下:

ApplCCP_MainFantion:任务函数,需要10ms时间调用

CCP_CRO_Indication:回调函数,CanIf模块在收到报文后,调用此函数传递报文信息

CCP_DTO_Confirmation:回调函数,CanIf模块在成功发送DTO报文后,调用此函数

ccpSend:此函数内部,需要调用CanIf的接口函数,实现DTO的报文发送

 

在完成上述修改前,需要先在工程中添加CCP模块的请求报文 (CRO) 和响应报文 (DTO) 。

 

 

 

内存地址划分

1、标定量的存储位置

目前来看,工程中的标定量都会以Const的形式定义,并且给一个初始值。代码如下:

CCP解决方案_第2张图片
 

 

上述变量在编译的时候,会一起被放入代码段CAL2_ROM_SECTION中,而此代码段又会存放在flash里,所以无法实现写操作。

 

2、开辟RAM标定段

为了能对标定量进行修改,采取的策略是:在RAM中开辟一段和CAL2_ROM_SECTION一样大小的RAM地址区域CAL2_RAM_SECTION。两个section的地址内容存在一一映射的关系。

在ECU刚上电时,CCP代码会将Flash标定段的内容,复制到RAM的标定段中。在标定时,就可以修改RAM标定段的变量内容,模拟各种标定条件。

 CCP解决方案_第3张图片

 

注:要及时修改ApplCCP.c文件中,关于两个标定段起始地址和长度的数值,以免发生严重错误。

 

修改完RAM标定段后,仍然不会发挥作用。因为应用层代码(模型代码)依然调用的是Flash标定段中的变量。所以,还需要修改代码,使其他模块代码中访问Flash标定段变量的,改为访问RAM标定段变量。这属于标定工作第二部分内容,由算法工程师负责,这里不做描述。

 

3、内存地址的读操作

内存地址可以在全地址空间范围内读取,无论是Flash还是RAM,所以如果仅仅是读取内存里的内容,无需划分内存

 

A2L文件编辑

A2L文件定义了以下内容:

1、 参考页(reference page,即Flash标定段)的起始地址及长度

2、 工作页(working page, 即RAM标定段)的起始地址及长度

3、 波特率

4、 请求报文(CRO)和响应报文(DTO)的CAN ID

5、 内存段(起始地址、长度):要覆盖hex文件的地址范围

6、 标定量

7、 监测量

 

A2L文件被导入INCA工程后,即可进行标定。

A2L文件的编辑用普通的NotePad++软件即可。

1、 参考页、工作页的定义

参考页及工作页的起始地址和长度要和代码工程所规定的Flash、RAM标定段保持一致。

见以下示例(参考页地址:0x7C30; 工作页地址:0x3F00; 长度:0x100):

 CCP解决方案_第4张图片

 

2、波特率

以125Kbps波特率为例,定义如下:

BAUDRATE 0x01E848

3、报文ID

文件中有多处CAN ID的描述,依次找出替换掉即可

 

4、内存段

标定数据要以hex文件的形式,导入到INCA工程中进行标定。A2L文件在编辑时,要定义多个内存段,至少要覆盖hex文件的地址范围。

如下示例:

1、 hex内存范围

 CCP解决方案_第5张图片

 

2、A2L内存段地址范围

 CCP解决方案_第6张图片

 

其中,涉及到参考页地址范围的覆盖,要用特定的格式,见中间内存段定义的格式

 

5、标定量

根据生成的map文件的各变量的地址及长度,在A2L文件中定义需要标定的变量。

 

例如, 在map文件中查得标定量KeHVC_sw_NdColdTD的地址为0x007C30,长度为2 个字节,则A2L标定量定义如下:

 CCP解决方案_第7张图片

 

A2L标定量定义时,会有“CHARACTERISTIC”字符,其中定义了起始地址(0x007C30)、数据类型(__UWORD_S)、最小值(0)、最大值(65535)。

 

标定量必须定义在Flash 标定段 CAL2_ROM_SECTION中。

6、监测量

根据生成的map文件的各变量的地址及长度,在A2L文件中定义需要监测的变量。

如下:

 CCP解决方案_第8张图片

 

A2L监测量定义时,会有“MEASUREMENT”字符,其中定义了起始地址(0x003F00)、数据类型(UWORD)、最小值(0)、最大值(65535)

 

若标定量和监测量的地址有映射关系时(如CAL2_ROM_SECTION  和 CAL2_RAM_SECTION),修改了标定量时,监测量的值也会同步进行修改。

 

 

软件调试

在建好INCA工程,且导入所需文件(A2L、Hex)后,PC机连上ETAS设备,可以进行标定软件的调试。此时CAN总线接上Fire,可以观察、分析CCP报文内容,来排查问题。

 

INCA工程的具体使用,这里不再描述。

 

经验总结

在CCP模块移植的过程中,要注意芯片平台。

项目

芯片

CPU

地址表示

M31T

MPC5606

32 bit

4个字节

820EV

MC9S12XEP100

16 bit

采用Page方法寻址,地址有两种表示方法:

1、 local地址:用2个字节表示

2、 global地址:用3个字节表示

 

所以,若直接移植CCP代码到820EV平台中,由于820EV平台中,指针寻址方式默认为2个字节地址寻址(加上__far指针修饰符时,才能进行3字节地址寻址)。所以,若标定量处于global地址范围中,则需要对代码进行额外的修改,才能正常工作,否则会出错。

 

当前为方便起见,在内存划分的时候,使标定量均放在local地址(2字节表示),避免使用global地址。这样,就不需要加__far修饰符,也能正常工作。

(即使CCP代码地址都用4个字节表示,但由于此时local地址的高2个字节均为0,只有2个低字节地址起作用,程序依然是兼容的)

你可能感兴趣的:(vehicle,electronics)