- CCP协议介绍
CCP的全称是CAN Calibration Protocol (CAN标定协议),是基于CAN总线的ECU标定协议规范。CCP协议遵从CAN2.0通信规范,支持11位标准与29位扩展标识符。
-
- CCP通信方式
CCP协议采用主从通信方式,如上图所示,其中从设备是需要标定的ECU。根据CCP协议,一个主设备可通过CAN总线与多个从设备相连接,每个从设备均有其特定地址。主设备通过每个ECU的地址,与其建立一一对应的关系。
该系统主要有如下两种模式:
- Polling模式:主设备和从设备一一对应的通信方式,即主设备询问,从设备对应回答的。当主从设备建立连接后,每次通信都是通过主设备首先发一条指令,请求从设备做出相应回应。通过返回一帧消息,提供主设备请求的数据及命令执行代码。这种通信方式实现简单,占ECU资源少,但是效率比较低。
- DAQ模式:DAQ模式与Polling模式不同,其工作状态可以脱离主设备控制,而是按一定的时间周期自动向主设备发送数据。这种通信方式效率高,但是占用CPU资源高。
- CCP消息格式
CCP协议遵从CAN通信规范,所以CCP的通信都是以CAN报文的形式来传送。CCP消息统一使用8个字节数据传输,所有CCP命令和参数都被包含在8字节数据场。
CCP协议的实现包括:命令接收对象(CRO)和数据传输对象(DTO),如图1所示:
- 命令接收对象(CRO)是主设备向ECU发送消息对象,包括命令代码和命令参数,结构为:
CRO参数说明:
位置 |
类型 |
描 述 |
0 |
字节 |
命令代码=CMD |
1 |
字节 |
命令序号=CTR |
2…7 |
字节 |
命令参数和数据域 |
按照CCP协议,CRO格式是固定的8个字节,从设备接收的命令按照CMD代码进行解释说明。在Polling模式中,主设备发送的命令序号是有先后顺序,从设备的应答序号与其相同作一一对应,起到保护作用。
- 数据传输对象(DTO)是从设备以数据包形式对应的反馈消息。可分为三类:
- 命令返回消息CRM,从设备对应DTO返回的回答消息。
- 事件消息,反应了内部从设备状态的改变,向主设备报告ECU的错误,请求进行错误纠正或其它处理。
- DAQ消息,是一种高速的上传模式,能够按照固定设定周期自动上传ECU有关参数和数据。
CRM和事件消息结构相同:
数据场各个字节说明:
位置 |
类型 |
描 述 |
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通信模式的格式:
-
- DAQ模式的数据通信
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命令代码
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指令也是必须的。
-
- ERR代码
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 |
不可修复的(重启,超载……) |
终止 |
-- |