CCP学习二——通信流程
1 概述
CCP通信按信息传输方式分为:POLLING(问答)和DAQ方式
按功能模式分为三种:SESSION(会话)、CAL(标定)、DAQ(查询)
工作流程一般为,程序初始化完成后,通过SET_S_STATE设置节点当前工作状态(Session/CAL/DAQ),若触发CAL和DAQ,需要在初始化时对该功能进行初始化。
正常情况下设置为会话模式(SESSION),需要CAL和DAQ时在进行初始化。
可以看出CCP通信协议的分为这四大模块,初始化、会话、标定、DAQ数据传输。
PS:“冷启动”包含:
① 连接:建立主从设备之间的逻辑连接,
② seed&key 登录程序,
③ 自动会话配置(EXCHANGE ID),除非被覆盖,
④ 自动代码更新,如果主设备支持。
1.1.初始化
应用程序完成CAN Driver初始化后,调用CCP功能前需要对其进行初始化,按顺序如下:
命令 描述 备注
TEST 物理连接 测试是否物理连接建立起来,返回ECU的station address,该命令在可选命令中
CONNECT 通信连接 建立点对点(master-slave)的物理链接,声明接下来的命令都是针对当前从节点发送的,直到另一从节点被选中,此时当前的节点处于暂时断开状态。从设备不响应任何指令,除非先用带正确station address信息的CONNECT命令链接。
GET_CCP_VERSION 获取CCP版本 协议三原则:大版本号一定要相同;小版本号主节点大于等于从节点主节点支持有Non-Optional命令(初始化)
EXCHANGE_ID 交换ID CCP主站和从站交换id以实现自动会话配置。根据从服务器返回的ID,可能包含自动分配数据采集设置文件(Plug’n’Play)。
GET_SEED 获取SEED EXCHANGE_ID 执行完后,自动将MTA0设置到相关位置,接到该命令后返回SEED,用来加密交互。
UNLOCK 发送KEY解锁 与SEED和加密style配合,计算出Key,返回功能权限信息,三种权限CAL、DAQ及PGM需要三次**。
SET_S_STATUS 设置状态位 设置ECU内CCP通信状态,一般进入等待状态。bit 0 CAL初始化完成; bit 1 DAQ初始化完成 ;bit 2 保存DAQlist设置,上电开始传输;bit 6 CAL参数掉电不丢失 ;bit 7 Session in progress
解锁完成后,依据任务的分配,系统工作状态可以设置为以下三种状态:
① 等待会话状态,接收命令,触发命令操作
② 继续初始化CAL和DAQ,例如:设置DAQ掉电不丢失,上电自动传输,此时需要设置为DAQ初始化完成状态
③ DISCONNECT,休眠当前节点。多ECU并行工作时,初始化时把所有节点都初始化,断开连接把每个ECU设置为休眠状态,通过CONNECT再唤醒具体ECU,切换工作。单节点工作时不需要此命令,直接进入某种工作状态。
1.2.会话状态
会话状态主要定义具体应用协议,接受具体代码,执行相关命令,返回结果数据。典型函数两条:
ACTION SERVICE:行动响应(Action Service)
DIAG SERVICE:诊断服务(Diagnostic Service)
都是先发送协议命令,从节点接收到命令信息后按照执行具体行动,并自动设置MTA0到要返回的数据存储首地址,通过DTO带回要返回信息长度。信息量大时调用UPLOAD读取,信息量小于3bytes,直接附在DTO未定义位返回,例如执行结果,增加执行效率。
UPLOAD、DNLOAD两个函数也可以实现会话服务,但传递数据需要先调用SETMTA指定具体存储地址,容易造成内存区存储混乱,且传输效率低,主要应用于批量数据传输。而
ACTION SERVICE和DIAG SERVICE传递的是握手信息,不需要明确传递参数的具体存储地址。DNLOAD 6相同。
SHORT UP与UPLOAD命令区别在于和MTA0无关,
CRO自带存储区首地址,且执行完后MTA0不自增,适用于小量单次数据上传。
2.CCP具体功能的实现例子
2.1.Session log-in
CONNECT (逻辑连接)
CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45
GET_CCP_VERSION (版本一致)
CRO 0x1B 0x27 0x02 0x01
DTO 0xFF 0x00 0x27 0x02 0x01
EXCHANGE_ID (交换身份标识)
CRO 0x17 0x23
DTO 0xFF 0x00 0x23 0x04 0x02 0x03 0x03
GET_SEED (得到秘钥种子,返回秘钥)
CRO 0x12 0x23 0x02
DTO 0xFF 0x00 0x23 0x01 0x14 0x15 0x16 0x17
UNLOCK (通过接收到的秘钥,解除保护)
CRO 0x13 0x23 0x14 0x15 0x16 0x17
DTO 0xFF 0x00 0x23 0x02
SET_S_STATUS (设置会话状态,设置一个或多个状态位)
CRO 0x0C 0x23 0x81
DTO 0xFF 0x00 0x23
2.2.Calibration Data Initialization
CONNECT (连接,如果已经连接,跳过)
CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45
SET_S_STATUS (设置会话状态(xxxx xxx0)CAL=off)
CRO 0x0C 0x23 0x81
DTO 0xFF 0x00 0x23
Loop
SET_MTA (设置内存传输地址到目的块)
CRO 0x02 0x23 0x00 0x02 0x34 0x00 0x20 0x00
DTO 0xFF 0x00 0x23
BUILD_CHKSUM (构建内存块的校验和)
CRO 0x0E 0x23 0x00 0x00 0x80 0x00
DTO 0xFF 0x00 0x23 0x02 0x12 0x34
DOWNLOAD (下载,如果校验和不匹配)
CRO 0x03 0x23 0x05 0x10 0x11 0x12 0x13 0x14
DTO 0xFF 0x00 0x23 0x02 0x34 0x00 0x20 0x05
SELECT_CAL_PAGE (选择标定数据页)
CRO 0x11 0x23
DTO 0xFF 0x00 0x23
SET_S_STATUS (设置会话状态 bit CAL=1(xxxx xxx1))
CRO 0x0C 0x23 0x81
DTO 0xFF 0x00 0x23
2.3.DAQ list Initialization
CONNECT (连接,如果已经连接,跳过)
CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45
SET_S_STATUS (设置会话状态 DAQ=0(xxxx xx|0x))
CRO 0x0C 0x23 0x81
DTO 0xFF 0x00 0x23
GET_DAQ_SIZE (分配DAQ列表,参考Organization of DAQ)
CRO 0x14 0x23 0x03 ------ 0x01 0x02 0x03 0x04
DTO 0xFF 0x00 0x23 0x10 0x08
Loop
SET_DAQ_PTR (设置目标指针)
CRO 0x15 0x23 0x03 0x05 0x02
DTO 0xFF 0x00 0x23
WRITE_DAQ (写列表数据)
CRO 0x15 0x23 0x02 0x01 0x02 0x00 0x42 0x00
DTO 0xFF 0x00 0x23
SET_S_STATUS (设置会话状态 DAQ=1(xxxx xx1x))
CRO 0x0C 0x23 0x81
DTO 0xFF 0x00 0x23
STATRT_STOP (开始DAQ- DTOs的数据传输,设置参数)
CRO 0x06 0x23 0x01 0x03 0x07 0x02 0x00 0x01
DTO 0xFF 0x00 0x23
2.4.Code Update
CONNECT (连接,如果已经连接,跳过)
CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45
SET_MTA (设置内存传输地址到开始地址)
CRO 0x02 0x23 0x00 0x02 0x34 0x00 0x20 0x00
DTO 0xFF 0x00 0x23
CLEAR_MEMORY (清除从设备的内存)
CRO 0x10 0x23 0x00 0x00 0x80 0x20
DTO 0xFF 0x00 0x23
Loop
PROGRAM (程序 取决于扇区或设备的大小)
CRO 0x18 0x23 0x03 0x10 0x11 0x12
DTO 0xFF 0x00 0x23 0x02 0x34 0x00 0x20 0x03
PROGRAM (SIZE=0,程序结束)
CRO 0x18 0x23 0x03 0x10 0x11 0x12
DTO 0xFF 0x00 0x23 0x02 0x34 0x00 0x20 0x03
2.5.Block DownLoad
CONNECT (连接,如果已经连接,跳过)
CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45
SET_MTA (设置内存传输地址到目的块)
CRO 0x02 0x23 0x00 0x02 0x34 0x00 0x20 0x00
DTO 0xFF 0x00 0x23
DOWNLOAD (下载,相应的数据块大小被下载)
CRO 0x03 0x23 0x05 0x10 0x11 0x12 0x13 0x14
DTO 0xFF 0x00 0x23 0x02 0x34 0x00 0x20 0x05
2.6.Block UpLoad
CONNECT (连接,如果已经连接,跳过)
CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45
SET_MTA (设置内存传输地址到源数据块)
CRO 0x02 0x23 0x00 0x02 0x34 0x00 0x20 0x00
DTO 0xFF 0x00 0x23
UPLOAD (上传)
CRO 0x04 0x23 0x04
DTO 0xFF 0x00 0x23 0x10 0x11 0x12 0x13
3.附录:
错误码矩阵