CCP的全称是CAN Calibration Protocol (CAN标定协议),是基于CAN总线的ECU标定协议规范。CCP协议遵从CAN2.0通信规范,支持11位标准与29位扩展标识符。
CCP协议采用主从通信方式,如上图所示,其中从设备是需要标定的ECU。根据CCP协议,一个主设备可通过CAN总线与多个从设备相连接,每个从设备均有其特定地址。主设备通过每个ECU的地址,与其建立一一对应的关系。
该系统主要有如下两种模式:
- Polling模式:主设备和从设备一一对应的通信方式,即主设备询问,从设备对应回答的。当主从设备建立连接后,每次通信都是通过主设备首先发一条指令,请求从设备做出相应回应。通过返回一帧消息,提供主设备请求的数据及命令执行代码。这种通信方式实现简单,占ECU资源少,但是效率比较低。
- DAQ模式:DAQ模式与Polling模式不同,其工作状态可以脱离主设备控制,而是按一定的时间周期自动向主设备发送数据。这种通信方式效率高,但是占用CPU资源高。
CCP协议遵从CAN通信规范,所以CCP的通信都是以CAN报文的形式来传送。CCP消息统一使用8个字节数据传输,所有CCP命令和参数都被包含在8字节数据场。
CCP协议的实现包括:命令接收对象(CRO)和数据传输对象(DTO),如图1所示:
- 命令接收对象(CRO)是主设备向ECU发送消息对象,包括命令代码和命令参数,结构为:
CMD | CTR | ||||||
相关命令参数 |
CRO参数说明:
位置 | 类型 | 描 述 |
0 | 字节 | 命令代码=CMD |
1 | 字节 | 命令序号=CTR |
2…7 | 字节 | 命令参数和数据域 |
按照CCP协议,CRO格式是固定的8个字节,从设备接收的命令按照CMD代码进行解释说明。在Polling模式中,主设备发送的命令序号是有先后顺序,从设备的应答序号与其相同作一一对应,起到保护作用。
- 数据传输对象(DTO)是从设备以数据包形式对应的反馈消息。可分为三类:
- 命令返回消息CRM,从设备对应DTO返回的回答消息。
- 事件消息,反应了内部从设备状态的改变,向主设备报告ECU的错误,请求进行错误纠正或其它处理。
- DAQ消息,是一种高速的上传模式,能够按照固定设定周期自动上传ECU有关参数和数据。
CRM和事件消息结构相同:
PID | ERR | CTR | |||||
相关命令参数 |
数据场各个字节说明:
位置 | 类型 | 描 述 |
0 | 字节 | 标识符(PID) |
1 | 字节 | 错误代码(ERR) |
2 | 字节 | 命令序号(CTR) |
3~7 | 字节 | 命令参数和数据域 |
PID用来标识DTO类型,对于CRM和事件消息含义相同。ERR代码,在CRM中反映的是CRO请求执行的情况,如返回ERR为0x00,表示CRO命令正确执行。对于事件消息,ERR代码的数值表示ECU内部发生了哪种错误。
PID含义如下:
PID | 定 义 |
0xFE | DTO是CRM |
0xFF | DTO是事件消息 |
0≤n≤0xFD | DTO是DAQ |
当PID取值在[0,0xFD],表示是DAQ通信模式,要符合DAQ通信模式的格式:
PID | |||||||
相关命令参数 |
DAQ是一种高效的通信方式,它不依靠主设备,而是自主的按照设定的周期向主设备发送数据。DAQ通信结构包括三个部分:DAQ列表、ODT列表及DAQ~ODT。不同的上传周期决定不同的DAQ列表,有几个上传周期就有几个DAQ列表,同一个周期内的数据都包含在同一个DAQ列表中,结构如图2所示。
每一个DAQ列表都可以包含多个ODT列表,总的ODT个数不超过254个。每个ODT最大字节数为7个,包含7个单字节的数据信息,ODT列表中存放着需要上传的数据信息,如数据地址,数据长度及地址偏移量。
ODT列表需要转换成DAQ~ODT列表的形式才能向主设备发送数据,如图1所示。每一个ODT都有唯一的一个绝对编号,通过PID标识对应一个DAQ~ODT列表,而每一个ODT还有一个相对编号,表示其在每个DAQ列表的位置,第一个ODT编号为0。
举例如下,10ms周期间隔的DAQ列表编号为#0,20ms周期间隔的DAQ列表编号为#1,30ms周期间隔的DAQ列表编号为#2。每一个DAQ列表下有几个ODT列表,假设DAQ#0列表下对应3个ODT的相对编号为#0、#1、#2,绝对编号也为#0、#1、#2。DAQ#1列表下对应2个ODT的绝对编号为#0、#1,相对编号是承接上面DAQ#0下的ODT编号,为#3、#4,以此类推。
在使用DAQ模式进行通信时前,主设备需要对DAQ列表和ODT列表进行相关配置,具体步骤如下:
- 首先获取ECU内需要实现的DAQ列表数目及ODT列表数目。DAQ列表数目由上传数据的周期个数决定,ODT列表数目由所传数据的长度和个数决定。
- 其次向对应的ODT中添加数据内容,包括数据存储地址和数据长度。不同的数据地址、类型被写在不同的ODT中。
- 根据不同的上传周期,针对不同的DAQ列表赋予数据通道和预分频值。事件通道与上传周期一一对应,同一个DAQ列表使用相同的事件通道和预分频值,即同一个DAQ列表所有数据的上传周期相同,通过与分频值可以将数据的上传周期成倍扩大。
CCP 协议共规定了28条命令,其中11条为必选命令,17条为可选命令。每条命令都有自己的CMD代码,从设备通过CRO中的CMD代码对接收的CCP命令进行解释并执行。CCP命令代码如表1所示。
表1 CCP命令代码表
命 令 | CMD代码 | ACK应答事件(ms) | 备注 |
CONNECT | 0x01 | 25 | |
GET_CCP_VERSION | 0x1B | 25 | |
EXCHANGE_ID | 0x17 | 25 | |
GET_SEED | 0x12 | 25 | 可选 |
UNLOCK | 0x13 | 25 | 可选 |
SET_MTA | 0x02 | 25 | |
DNLOAD | 0x03 | 25 | |
DNLOAD_6 | 0x23 | 25 | 可选 |
UPLOAD | 0x04 | 25 | |
SHORT_UP | 0x0F | 25 | 可选 |
SELECT_CAL_PAGE | 0x11 | 25 | 可选 |
GET_DAQ_SIZE | 0x14 | 25 | |
SET_DAQ_PTR | 0x15 | 25 | |
WRITE_DAQ | 0x16 | 25 | |
START_STOP | 0x06 | 25 | |
DISCONNECT | 0x07 | 25 | |
SET_S_STATUS | 0x0C | 25 | 可选 |
GET_S_STATUS | 0x0D | 25 | 可选 |
BUILD_CHECKSUM | 0x0E | 30000 | 可选 |
CLEAR_MEMORY | 0x10 | 30000 | 可选 |
PROGRAM | 0x18 | 100 | 可选 |
PROGRAM_6 | 0x22 | 100 | 可选 |
MOVE | 0x19 | 30000 | 可选 |
TEST | 0x05 | 25 | 可选 |
GET_ACTIVE_CAL_PAGE | 0x09 | 25 | 可选 |
START_STOP_ALL | 0x08 | 25 | 可选 |
DIAG_SERVICE | 0x20 | 500 | 可选 |
ACTION_SERVICE | 0x21 | 5000 | 可选 |
如果ECU内部不支持DAQ通信模式,则以下指令也是可选命令:GET_DAQ_SIZE、SET_DAQ_SIZE、WRITE_DAQ、START_STOP。如果使用了SELECT_CAL_PAGE指令,则GET_ACTIVE_CAL_PAGE指令也是必须的。
CRM-DTO的ERR代码指示了CRO命令的执行情况,事件消息中的ERR代码表示ECU内部发生的错误类型,CCP协议对ERR代码的定义见表2。
表2 ERR代码列表
代码 | 描 述 | 错误等级 | 备 注 |
0x00 | 确认/无错误 | -- | 无(等待直到ACK或时间溢出) |
0x01 | DAQ处理器超载 | C0 | 无(等待直到ACK或时间溢出) |
0x10 | 指令处理器忙 | C1 | 无(等待直到ACK或时间溢出) |
0x11 | DAQ处理器忙 | C1 | 无(等待直到ACK或时间溢出) |
0x12 | 内部超时 | C1 | 无(等待直到ACK或时间溢出) |
0x18 | 请求密钥 | C1 | 无(等待直到ACK或时间溢出) |
0x19 | 阶段状态请求 | C1 | 无(等待直到ACK或时间溢出) |
0x20 | 冷启动请求 | C2 | 冷启动 |
0x21 | 标定数据初始化请求 | C2 | 标定数据初始化 |
0x22 | DAQ列表初始化请求 | C2 | DAQ列表初始化 |
0x23 | 更新代码请求 | C2 | (冷启动) |
0x30 | 未知指令 | C3 | (错误) |
0x31 | 指令句法错误 | C3 | 错误 |
0x32 | 参数超出许可范围 | C3 | 错误 |
0x33 | 访问被拒绝 | C3 | 错误 |
0x34 | 超载 | C3 | 错误 |
0x35 | 访问锁定保护 | C3 | 错误 |
0x36 | 资源/功能暂不可用 | C3 | 错误 |
对于CRM-DTO,当ERR代码为0x00时表示对CRO命令的确认及命令的正确执行,如返回其他值,则根据上表的含义分析问题。如果ECU没有收到CRO命令的情况下发生错误,会直接以事件消息发送错误代码来进行相应错误处理。CCP协议对错误等级及应对措施规定如表3所示。
表3 错误等级分类及措施
级别 | 描 述 | 措 施 | 重试次数 |
超时 | 无握手信号 | 重试 | 2 |
C0 | 警告 | -- | -- |
C1 | 伪错误(comm错误,忙,……) | 等待(ACK或超时) | 2 |
C2 | 可修复的(温度,掉电……) | 初始化 | 1 |
C3 | 不可修复的(重启,超载……) | 终止 | -- |