前面

标定离不开 CCP/XCP协议,本文对CCP进行一个简单介绍。
CCP的全称是CAN Calibration Protocol,是基于CAN总线的ECU标定协议,采用主从通信方式。通过ASAP2文件对电子控制单元(ECU)的标定部分进行描述。
标定工具在ASAP2文件的支持下,找到变量在ECU中的实际物理地址,并按APAP2文件中定义的转换格式,ECU收到标定工具发送的命令后,对变量进行存储或修改。

CCP消息格式

CCP协议可通过两帧报文实现数据传输:分别是命令接收对象(Command Receive Object,CRO)和命令传输对象(Data Transmission Object,DTO)。
CRO报文格式如图4-19所示。CRO的数据场为8个字节,第0个字节为命令代码,第一个字节为命令计数器。第2到7位是与命令相关的参数。
image.png
DTO可分为命令返回消息(CRM-DTO)、DAQ-DTO和事件消息DTO三类。
CRM-DTO和事件消息DTO报文格式相同,报文格式如图4-20所示。第0个字节表示DTO的类型,第1个字节表示错误代码,第2个字节表示命令序号,其余5个字节表示参数数据域。
image.png
DAQ-DTO只用于DAQ通信模式,其报文格式略有不同,第0个字节表示PID号,其余7个字节表示命令参数。
image.png

CCP数据通信

主设备采用Vector公司的CANape标定工具,在对ECU进行标定与测量前,必须让从设备ECU内部包含CCP协议。
image.png
CCP协议总共规定了28条命令,其中11条是必选命令。主设备可要求ECU通过Polling模式或DAQ模式上传数据。

命令 功能描述 PID 命令 功能描述 PID
CONNECT 连接命令 0x01 SET_DAQ_PTR 指定DAQ中某个ODT 0x15
SET_MIT 设定MTA地址 0x02 UPLOAD 上传最多5个数据字节 0x04
DNLOAD 下载最多5个数据字节 0x03 EXCHANGE_ID 获取ECU标识符 0x17
GET_CCP_VERSION 获取CCP版本 0x1B PROGRAM 最多5个字节FLASH编程 0x18
TEST 测试是否连接 0x05 MOVE 从MTA0拷贝到MTA1 0x19
START_STOP 开始/停止某个DAQ 0x06 DIAG_SERVICE 诊断服务 0x20
DISCONNECT 断开连接 0x07 ACTION_SERVICE 激活服务 0x21
START_STOP_ALL 开始/停止全部DAQ 0x08 GET_S_STATUS 获取当前状态 0x0D
GET_ACTIVE_CAL_PAGE 获取当前页 0x09 DNLOAD_6 下载6个字节数据 0x23
CLEAR_MEMORY 擦除FLASH地址 0x10 SHORT_UP 不用MTA上传数据 0x0F
SELECT_CAL_PAGE 页切换 0x11 WRITE_DAQ 设定元素地址 0x16
GET_SEED 获取种子 0x12 SET_S_STATUS 设置当前状态 0x0C
UNLOCK 解锁 0x13 BUILD_CHKSUM 计算校验和 0x0E
GET_DAQ_SIZE 获取指定DAQ列表大小 0x14 PROGRAM_6 6个字节FLASH编程 0x22

Polling模式通信流程如图4-22所示。首先通过CONNECT命令建立通信连接,然后通过SET_MTA设置数据上传的起始地址。主设备请求上传数据超过5个字节,可通过UPLOAD命令请求从设备以MTA0为起始地址,完成指定字节数的数据上传。当从设备完成数据上传后,MAT0的地址指针会增加相应的字节数,可保持数据传输的连续性。当主设备需求的数据字节小于5个字节时,通过SHORT_UP命令完成数据的上传。
image.png
DAQ模式通信流程如图4-23所示。首先通过CONNECT命令建立逻辑连接,然后通过SET_S_STATUS命令设置状态字节DAQ等于0,表示DAQ初始化未完成,接着通过GET_DAQ_SIZE获取DAQ列表的大小。通过SET_S_STATUS命令设置DAQ入口地址指针,主设备通过WRITE_DAQ命令分n次将数据写入DAQ列表中的每个ODT中。完成DAQ列表配置后,主设备通过SET_S_STATUS命令设置状态字节DAQ等于1,表示DAQ列表初始化完成。最后通过START_STO命令,开始DAQ通信。
image.png