CCP2.1协议基础知识

1. 前言

1.1 名词介绍

  • ASAP – Arbeitskreis Standardisierung von Applicationssystem,应用系统标准化小组;
  • CCP – CAN Calibration Protocol,CAN标定协议;
  • CRO – Command receive object,指令接收单元;
  • CRM – Command Return Message,应答指令;
  • DAQ – Data Acquisition,快速数据采集;
  • DTO – Data Transmission Object,数据传输单元;
  • MCS – measurement and Calibration System,测量校准接口;

1.2 ASAM标准

ASAM标准结构
ASAM MCD1a:定义ECU与校准/测量系统间的逻辑与物理接口(协议);
ASAM MCD1b:定义应用程序与校准/测量系统间的接口(软件接口、MCS驱动);
ASAM MCD2:定义数据库,包括标定数据库(A2L数据)和诊断数据库(Open Diagnostic data eXchange);
ASAM-MCD3:操作和控制标定系统的远程接口;
注:ASAP=ASAM;ASAP1=ASAM-MCD 1MC、ASAP2=ASAM-MCD 2MC、ASAP3=ASAM-MCD 3MC

2. CCP简介

CAN Calibration Protocol,CAN标定协议;由校验系统制造商IHK开发和引进。由ASAP接管,属于ASAM MCD1a标准部分。具有较高的可扩展性,可安装在低速总线的8位控制单元中,也可以在高性能动力传动系统控制单元中提供高速数据采集,是一种面向连接的应用层通讯协议。CCP协议所处位置如下图所示:
img
遵从于主从模式(1个master–n个slaves),主设备(标定工具、诊断-检测工具、测量系统等),CCP通过CAN定义控制器与主设备进行通信。

3. CCP应用

1、ECU开发领域;
2、ECU功能和环境测试系统;
3、受控设备测试系统和试验台(内燃机/齿轮箱/悬架系统/气候控制系统/车身系统/防抱死系统等);
4、车载测试和车辆预测系统;
5、其他基于CAN的分布式电子控制系统的非汽车控制系统;

4. CCP通讯方式

4.1 polling(查询模式)

由主设备主动向从设备发送指令,从设备做出反馈应答,“一问一答”模式(“答”指的是反馈指令执行情况)。若是主设备要求进行DAQ操作,那就将操作传达给DAQ处理器,让其完成DAQ操作;
效率相对较低,实现简单,占用ECU内存空间少;

4.2 DAQ(数据采集)

主设备发送一条请求指令后,从设备按照一定周期自动向主设备上报数据;效率高,实现复杂,数据量大,占用ECU内存空间大;

5. CCP消息对象

5.1 指令接收报文(CRO)

数据传输方向:master -> slave
报文中携带一个指令和在从设备中执行的指令参数;
实现CAN间的内部功能执行和内存传输;

注意事项:
1、必须以DTO作为指令反馈/应答报文,来确认执行指令是否成功;
2、CRO比DTO具有更高的优先级;
3、数据长度必须是8Byte,未使用字节为任意值;
报文格式如下:
报文格式

5.2 数据传输报文(DTO)

数据传输方向:slave -> master
DTO分为如下几类消息:
1、错误返回消息CRM(code return message),CRO反馈报文;数据长度必须是8Byte,未使用字节为任意值;PID=0xFF;
2、事件消息,如检测到内部错误后执行错误恢复等;PID=0xFE;
3、数据采集,DTO中包含测量数据,如DAQ-ODT;

数据格式如下图所示:
DTO数据格式定义

指令交互模型如下图所示:
交互图

5. CCP-DAQ

5.1 DAQ数据

DAQ可以看成是一系列的ODT(对象描述符表)。
ODT结构如下:
对象描述符表

DAQ-Lsit结构如下图所示:带有3个ODT的DAQ列表
(1)ODT元素中包含ECU内存元素的地址、地址扩展名、字节长度(地址扩展名和字节长度是可选的);
(2)一个ODT表最多可被7个ECU内存元素映射,若是ECU数据元素最大为1Byte(若有ECU不支持多字节数据,则可能需要将多字节元素数据拆分为单字节,保证所有ODT中元件的一致性);
(3)ODT中定义的元素被传输到DAQ-DTO中,进而发送到主设备;
(4)多个ODT形成一个DAQ列表(ODT的数量一般有一定限制);
(5)ODT-PID取值范围:0≤ N≤ 0xFD;
(6)每个测量周期的字节数=NUM_ODT * 7;
(7)RAM字节需求=NUM_ODT * 14+NUM_DAQ * 4;
(8)CCP处理效率与响应延迟时间、总线波特率、总线负载情况、以及消息对象的总线优先级等因素都是相关的;

当前事件结束前有新的事件发生,ECU会如何处理?
(1)结束当前事件的处理;

优点:DAQ列表中ODT会有缺失(从工具中可以明显看到);
缺点:当缺失较多时,便会造成某些数据无法测量;

(2)继续处理当前事件,跳过新事件处理;

优点:数据是完整的,但参数数据类型不完整;
缺点:若是对采样率数据获取,无法获得准确的采样信息;

如何建立ODT数据?
(1)清除ECU当前数据列表,通过GET_DAQ_SIZE使ECU重新为DAQ分配内存;
(2)在一个循环中,使用参数DAQ list number、ODT number、ODT WRITE中的元素号、元素大小、地址扩展、32位基址,设置_DAQ_PTR,直到ODT完成,并对进一步的ODT重复此过程。

5.2 DAQ模式

DAQ处理器依据主机需要(主机配置好所有要读取的变量,并关联到ECU),定时向CAN总线发送DAQ数据;

6. CCP指令

6.1 指令功能

(1)随机读取ECU中的RAM和ROM数据;
(2)同步循环或驱动事件数据的采样;
(3)同步校准和测量数据采集;
(4)同时处理多个ECU;
(5)flash编程技术;
(6)即插即用;
(7)校准RAM;
(8)访问保护与安全;

6.2 指令分类

6.2.1 通用控制指令

用于执行从设备功能;主从设备建立初始化逻辑连接后,由主设备对整个数据传输过程进行控制,同时从设备必须对主设备的所有指令做出应答(命令返回码和错误码);

6.2.2 数据采集指令

用于向从设备连续采集数据;数据传输过程是由主设备开启,从设备执行;

6.3 指令列表

CCP指令列表如下:指令码列表

错误分类如下表:
错误类别

错误码列表如下所示:指令返回码列表

6.4 指令解析

6.4.1 CONNECT

节点地址以小端模式表达;
CRO数据结构

返回的DTO数据结构

6.4.2 EXCHANG_ID

主从节点之间交换ID进行自动会话配置。
CRO数据结构

返回的DTO数据结构
资源掩码如下图所示:
简化的资源可用性掩码和资源保护码
资源可用性:值为TRUE,则指定的资源或功能可用;
资源保护:值为TRUE,则指定的资源或功能受到保护,防止未经授权的访问(需要解锁);

6.4.3 GET_SEED

获取“解锁授权访问请求”数据,一次GET_SEED指令只能请求一个资源/功能。
CRO数据结构

返回的DTO数据结构
保护状态:若为FALSE,则不需要进行解锁数据便可解锁请求功能。

6.4.4 UNLOCK

使用密钥数据进行解密。
CRO数据结构

返回的DTO数据结构

6.4.5 SET_MTA

设置内存传输地址,为所有后续的内存传输 进行基指针(32bit+扩展名)。
CRO数据结构
MTA number:用于标识不同的传输地址位置(指针);
MTA0由DNLOAD、UPLOAD、DNLOAD_6、SELECT_CAL_PAGE、CLEAR_MEMORY、PROGRAM和PROGRAM_6命令使用。MTA1由MOVE命令使用。
返回值DTO的数据格式

6.4.6 DNLOAD

将CRO中固定大小的数据块从当前内存传输地址0(MTA0)复制到内存中,MTA0指针将按照事件数据块大小累加。
CRO数据格式

返回码DTO数据结构

6.4.7 DNLOAD_6

将CRO中固定大小6Byte的数据块从当前内存传输地址0(MTA0)复制到内存中,MTA0指针将加6。
DNLOAD_6的CRO数据结构

返回码DTO的数据结构

6.4.8 UPLOAD

将当前MTA0开始的指定长度(大小)的数据块复制到相应的DTO数据字段中,MTA0指针按照数据实际大小移动。
UPLOAD返回码的DTO数据结构

6.4.9 SHORT_UP

将源地址开始的指定长度(大小)的数据块复制到相应的DTO数据字段中,MTA0指针保持不变。
SHORT_UP的CRO数据结构

6.4.10 SELECT_CAL_PAGE

依据ECU执行情况,若是初始化的MTA0指向校准数据页的开头,那么该页将被选为当前活动页面。
SELECT_CAL_PAGE的CRO数据结构

SELECT_CAL_PAGE返回码DTO的数据结构

6.4.11 GET_DAQ_SIZE

获取指定DAQ列表的大小作为可用对象描述符(ODT)的数量,并清除当前列表。如果指定的列表编号不可用,则应返回size=0。初始化DAQ列表,并停止该列表的数据采集。
可将单个CAN标识符分配给DAQ列表,以配置多ECU数据采集。此功能是可选的。如果给定的标识符不可能,则返回错误代码。
29位CAN标识符由最高有效位集标记。
GET_DAQ_SIZE的CRO数据结构

GET_DAQ_SIZE返回码的DTO数据结构
DAQ列表的ODT的PID确定方式 :PID=DAQ List的第一个PID + ODT编号

6.4.12 SET_DAQ_PTR

初始化DAQ列表指针,以便后续写入DAQ列表。
SET_DAQ_PTR的CRO数据结构

SET_DAQ_PTR返回码的DTO数据结构

6.4.13 WRITE_DAQ

将一个条目(单个DAQ元素的描述)写入由DAQ列表指针定义的DAQ列表(请参见ET_DAQ_PTR)。
定义以下DAQ元素大小:1字节、2字节(字类型)、4字节(长/浮点类型)。
ECU可能不支持单个元素为2或4字节元素大小的单独地址扩展,该限制可在从设备描述文件中定义,主设备需要关注该限制。
从设备负责确保数据采集单元的所有字节在传输时保持一致。
WRITE_DAQ的CRO数据结构

WRITE_DAQ返回码DTO数据格式

6.4.14 START_STOP

启动或停止数据采集,或准备指定DAQ列表的同步启动。
说明:
最后一个ODT编号,指定DAQ应该传输那些ODT。
事件通道号指定有效确定数据传输定时的通用信号源。
预分频器可用与降低期望传输速率,其因子必须大于或等于1。
模式参数定义:0x00停止指定的DAQ列表,0x01启动指定的DAQ列表,0x02为同步启动准备DAQ列表。
启动/停止模式参数=0x02(准备启动数据传输)使用提供的参数配置DAQ列表,但不启动指定列表的数据采集。此参数用于同步启动所有配置的DAQ列表。如果从设备不能执行数据采集的同步启动,则如果该参数为真(非零),则从设备可以启动数据传输。
事件通道和DAQ列表的ECU特性可以在从设备中描述。
START_STOP的CRO数据结构

6.4.15 DISCONNECT

断开从设备的连接。
说明:
断开可以是临时的,将从设备设置为“离线”状态;临时断开连接不会停止DAQ消息的传输,MTA值、DAQ设置、会话状态和保护状态不受临时断开连接的影响,保持不变;如果ECU支持恢复功能,并且恢复位是通过SET_SESSION_STATUS命令设置的,则DAQ相关功能的行为类似于临时断开连接;DAQ的保护状态保持解锁状态。
或设置参数为0x01终止校准会话,终止会话将使所有状态信息无效,并重置从属保护状态。
Station address:以小端字节顺序(低字节优先)。
DISCONNECT的CRO数据结构

DISCONNECT返回码DTO数据格式

6.4.16 SET_S_STATUS

设置从设备的会话状态。
SET_S_STATUS的CRO数据结构
如下为会话状态:
会话状态位读取/写入从设备,并在通电、会话注销和适用故障条件下清除。
会话状态

SET_S_STATUS返回码DTO数据结构

6.4.17 GET_S_STATUS

GET_S_STATUS的CRO数据结构
附加状态信息(additional status information-optional)的使用取决于制造商和/或项目,不属于本协议规范的一部分。例如,其他状态信息可能包含增量校验和结果,用于跟踪当前会话活动。
如果返回信息不包含附加状态信息,则附加状态信息限定符必须为FALSE(0)。如果附加状态信息不为FALSE,则可以使用它来确定附加状态信息的类型。
GET_S_STATUS的DTO结构

6.4.18 BUILD_CHKSUM

返回由MTA0(内存传输区域开始地址)和块大小定义的内存块的校验和结果。校验和算法可能是特定于制造商或项目,它不是本规范的一部分。
BUILD_CHKSUM的CRO结构

BUILD_CHKSUM的DTO数据结构

6.4.19 CLEAR_MEMORY

擦除EPROM,MTA0指向需要擦除的内存地址。
CLEAR_MEMORY的CRO数据结构

CLEAR_MEMORY的DTO数据结构

6.4.20 PROGRAM

指定长度数据块将编程到非易失性存储器(FLASH、EEPROM)中,从当前MTA0开始。MTA0指针将按“指定长度”值增加。
PROGRAM的CRO数据结构

PROGRAM的DTO数据结构

6.4.21 PROGRAM_6

CRO中包含的长度为6字节的数据块将被编程到非易失性存储器(闪存、EEPROM)中,从当前MTA0开始。MTA0指针将后加6。
PROGRAM_6的CRO数据结构

PROGRAM_6的DTO数据结构

6.4.22 MOVE

指定长度的数据块将从MTA 0(源指针)定义的地址复制到MTA 1(目标指针)定义的地址。
MOVE的CRO数据结构

MOVE的DTO数据结构

6.4.23 DIAG_SERVICE

从设备执行请求的服务,并自动将内存传输地址MTA0设置到CCP主设备(主机)随后可以上载请求的诊断服务返回信息的位置。
DIAG_SERVICE的CRO数据结构

DIAG_SERVICE的DTO数据结构

6.4.24 ACTION_SERVICE

从设备执行请求服务,并自动将内存传输地址MTA0设置到CCP主设备随后可以上载请求的操作服务返回信息的位置(如果适用)。
ACTION_SERVICE的CRO数据结构

ACTION_SERVICE的DTO数据结构

6.4.25TEST

测试具有指定站地址的从机是否可用于CCP通信。
此命令不会建立逻辑连接,也不会触发指定从属服务器中的任何活动。
工作站地址为小端模式(低字节优先)。
TEST的CRO数据结构

TEST的DTO数据结构

6.4.26 START_STOP_ALL

以同步方式启动所有DAQ列表的周期性传输,这些DAQ列表使用之前发送的START_STOP命令(START/STOP modus=2)配置为“准备启动”。该命令用于停止所有DAQ列表的定期传输,包括未同步启动的DAQ列表。
START_STOP_ALL的CRO数据结构

START_STOP_ALL的DTO数据结构

6.4.27 GET_ACTIVE_CAL_PAGE

返回从设备中当前处于活动状态的校准页面的起始地址。
GET_ACTIVE_CAL_PAGE的CRO数据结构

GET_ACTIVE_CAL_PAGE的CRO数据结构

6.4.28 GET_CCP_VERSION

主设备和从设备中使用,进行协议版本的相互标识,以调制到合适的协议版本。
此命令应在EXCHANGE_ID命令之前执行。
GET_CCP_VERSION的CRO数据结构

GET_CCP_VERSION的DTO数据结构

6.5 指令实例

6.5.1 会话登录

命令描述备注
CONNECT逻辑连接
GET_CCP_VERSION获取CCP协议版本
EXCHANGE_ID交换节点标识符即插即用
GET_SEED获取key的seed数据若使用seed&key
UNLOCK使用接收到的密钥解密若使用seed&key
SET_S_STATUS设置会话状态

6.5.2 块数据下载

命令描述备注
CONNECT逻辑连接若连接,则直接通过
SET_MTA将内存传输地址设置为目标块
UPDOWN进行块数据下载

6.5.3 块数据上传

命令描述备注
CONNECT逻辑连接若连接,则直接通过
SET_MTA将内存传输地址设置为目标块
UPLOAD进行块数据上传

6.5.4 校验数据初始化

命令描述备注
CONNECT逻辑连接
SET_S_STATUS设置会话状态
loopn*
SET_MTA(loop start)将内存传输地址设置为目标块
BUILD_CHKSUM构建块的校验和
DOWNLOAD(loop stop)若是校验和不匹配,继续下载
SELECT_CAL_PAGE选择校准数据页面
SET_S_STATUS设置会话状态位CAL=1表示当前正在运行校准会话

6.5.5 数据采集列表初始化

可以看做是一个基础的标定过程。

命令描述备注
CONNECT逻辑连接
SET_S_STATUS设置会话状态DAQ=0
GET_DAQ_SIZE获取DAQ大小,创建DAQ列表
loopn*
SET_DAQ_PTR(loop start)设置DAQ数据指针
WRITE_DAQ(loop stop)填充DAQ列表数据
SET_S_STATUS设置会话状态位DAQ=1
START_STOP开始传输DAQ-DTO数据,并设置相关参数

6.5.6 代码更新

命令描述备注
CONNECT逻辑连接
SET_MTA内存传输地址设置为目标块
CLEAR_MEMORY清除从设备的内存
loopn*
PROGRAM(loop start-stop)程序取决与扇区大小
PROGRAMsize=0程序结束

注: 该服务(代码更新)可以嵌入到EPROM中;

7. CCP版本管理

7.1 版本机制

主版本: 0~255
次版本: 0~9

7.2 兼容要求

(1)主从设备的主版本号必须相同,否则主从设备间无法进行通讯;
(2)主设备与从设备应该具有相同或更高的协议版本(主要和次要协议版本号),从设备仅需要支持一个协议版本;
(3)为确保协议的一致性,主从设备必须支持所有基础指令(即非可选指令);

8. CCP错误处理与状态转换

错误状态转换
冷启动(cold start) :
(1)主从设备之间建立的逻辑链路;
(2)seed&key登录程序(在“校验数据初始化” “DAQ列表初始化” “会话运行”状态下,该程序会被重复请求加载);
(3)被重写的自动会话配置;
(4)自动代码更新(需要主机支持);

不同指令接收错误码的不同含义

CCP CommandCCP Err Code
Access denied 0x33Parameters out of range 0x32Access locked 0x35DAQ list init request 0x22
CONNECT当前无法进行会话无效的节点地址
EXCHANGE_ID非法主ID
UNLOCK不合法的密钥
SET_MTA没有权限读取数据非法的MTA,基址,地址扩展
DNLOAD写错误(ROM只读)数据块>5Byte
DNLOAD_6写错误(ROM只读)接受数据块<6Byte
UPLOAD没有权限读取数据数据块>5Byte
SHORT_UP没有权限读取数据块数据>5Byte,基地址、扩展地址非法
SELECT_CAL_PAGE当前版本不支持
GET_DAQ_SIZE无DAQ特权非法的DAQ列表编号;错误的CAN ID
SET_DAQ_PTR无DAQ特权未知的DAQ列表,非法的ODT
WRITE_DAQ无DAQ特权非法的元素/基地址/扩展地址大小
START_STOPDAQ列表不存在最后一次ODT/线路传输非法,间隔和起止参数非法使用了未配置的DAQ列表
DISCONNECT当前操作不可以断开连接无效的节点地址,无效的指令参数
SET_S_STATUS状态位违反主设备优先级当前状态位设置非法
GET_S_STATUS会话状态不可访问

9. CCP数据传输效率要求

针对5000kbit/s波特率总线和节点的典型负载条件;
突发传输和异步数据采集

10. CCP多点连接的广播技术

1.广播地址
若是所有相关从站识别出了一个公共的广播地址(除专用从站地址外),则CCP主设备可以连接到这些从站;
2.嵌套连接指令到多个节点不断开连接
每个从设备必须独立的对指令报文做应答,主设备也必须对每个应答做验证;
该技术在同步和速度方面有一定优势,但在连接期间的错误处理变得更复杂度;

11. CCP实现分析

11.1 CCP driver关系图

逻辑结构图

11.2 Vector-CCP参考代码

硬件适配需要修改部分:
#define CCP_STATION_ADDR 0
#define CCP_STATION_ID "ECU00001" /* Plug&Play station identification */
#define CCP_DTO_ID 1 /* CAN identifier ECU -> Master*/
#define CCP_CRO_ID 2 /* CAN identifier Master -> ECU */
CCP宏开关:
#define CCP_SEED_KEY
CCP与CAN总线系统的交互接口:
void ccpBootInit (int cro_id, int dto_id)//can初始化
void ccpBootTransmitCrm (unsigned char *msg)//CAN发动1帧数据
int ccpBootReceiveCro (unsigned char *msg)//CAN接收1帧数据
int ccpBootTransmitCrmPossible( void ) //检测发送寄存器是否为空,才可以继续发送
CCP的简单调用流程

11.3 CCP中CAN部分驱动程序能力要求

(1)CAN控制器的初始化;
(2)传输检测;
(3)传输CAN消息;
(4)接收CAN消息;

12. 常见标定工具

公司名称工具名称
vectorCANape
ETASIncar
ATIVision
IntrepidcsVehicle Spy

13. 疑问

(1)CCP如何获取CAN总线上的数据,是CAN事先定义好数据地址的吗?
(2)主设备是应该尽量做到CCP版本兼容的吗?
(3)CCP是如何与ECU之间通讯的?
(4)桌面应用需要我们自己开发吗?还是使用第三方软件?
(5)CCP驱动代码是要集成到测试系统端,还是ECU控制器端?
(6)一套CCP代码接口中,应该包括测试系统通讯的接口和ECU通信接口?
(7)ASAM 标准结构中的“驱动程序”指的是什么驱动程序?
(8)CAN初始化的作用是什么,一般是谁做的,什么时候做?
(9)DAQ中ODT表数有规定吗?
(10)temp模板文件和 *.CAN文件是做什么的,我们的开发过程中需要使用到吗?

参考链接:
视频教程:CCP代码集成讲解(来源于B站)
代码下载:vector-CCP-XCP
网站:vector官网ASAM CCP讲解地址

  • 12
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值