CCP(CAN Calibration Protocol) CAN标定协议(用于标定系统与ECU之间的通信)
CCP协议在应用层,使用CAN的数据帧来传输命令
CRO数据帧(主设备想从设备发送)
CRO报文:CCP报文帧格式为CMD + CTR + DATA,即Command、Counter、Data,其中Command是一些列的命令标号,为人为规定,Counter计数用,Counter根据发送消息的先后顺序进行赋值,例如第一条发送的CRO其CTR为01,相对应的,从机对其进行应答的相应报文的CTR值也应该为01,第二条的CTR值为02,以此类推。CCP协议共规定了28条命令。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hPAXq7vf-1682574673463)(D:\ScreenShoot\2345_image_file_copy_20230415_1.jpg)]
- CRO命令的第一个字节为CMD,命令代码,命令表一共有28条命令
- CRO命令的第二个字节为CTR,命令计数器,由上位机计数
- CRO命令的剩余六个字节为命令参数,每个命令有不同参数
DTO(从设备想主设备发送)
DTO报文:分为三种类型报文,分别是CRM-DTO(命令返回消息),EVENT-DTO(事件消息),DAQ-DTO
CRM类型:用于反馈CRO命令的报文
第一个字节为PID,表示类型,CRM类型为0xff
第二个ERR字节,表示错误类别,命令返回码表一共有18条命令,0x00是无错误,CRM类型就对应0x00
第三个CTR字节,表示回答的哪条CRO命令,两者的CTR要对应起来
剩余的五个字节为参数
Event Message类型:用于反馈错误的报文
第一个字节为PID,表示类型,EM类型为0xfe
第二个ERR字节,表示错误类别,命令返回码表一共有18条命令,0x00是无错误,EM类型对应命令返回码表除0x00的剩余17条命令
第三个CTR字节,表示回答的哪条CRO命令,两者的CTR要对应起来
剩余的五个字节为参数
CRM-DTO和EVENT-DTO共用上一种报文结构,第一个字节PID(data packet ID)用于判断报文属于那一类型,PID = 0xFF为CRM(正常命令的被动响应),PID = 0xFE(错误事件的主动响应)为EVENT,其它的都是DAQ,第二个字节ERR(error code),第三个字节为代码指令计数器CTR,其它字节为指令代码相关的返回参数和数据
DAQ类型:用于定期反馈数据
DAQ-DTO(数据采集)报文除了第一个字节为PID外,其余字节都是返回数据
CRM-DTO发生在Polling模式下,是针对主设备发送的CRO消息的应答
EVENT-DTO事件消息发生在ECU内部错误时由ECU主动发送,这类DTO不需要事先收到主设备的CRO,一旦ECU发生内部错误,会主动向主设备发生这一消息,报告内部情况。
基本概念
-
ECU
Electronic Control Unit(电子控制单元):一种具有中央处理单元的电子装置,其外围电路可执行编程功能。
-
CRM
Command Return Message(命令返回消息) : 从从设备发送到主设备的一种消息,包含命令/错误代码和命令计数器。
-
CRO
Command Receive Object(命令接收对象) :从主设备发送到从设备的消息。
-
DTO
Data Thansmission Object (数据传输对象):从设备发送到主设备的消息(命令返回消息或事件消息或数据采集消息)。
-
DAQ
Data Acquisition:从从设备向主设备发送的用于从ECU快速数据采集的过程和消息的定义。
-
ODT
Obiect Descriptor Table: 元素(变量)列表,用于组织数据采集。
DAQ列表
按照不同的上传周期,ECU内部需要多个DAQ列表。例如有三个信号,上传周期分别为10ms、20ms、30ms,那么就需要3个DAQ列表,而同一上传周期的数据/变量(OTD)都被归类在同一个DAQ列表内,这些ODT被称作ODT列表,一个DAQ列表内部最多可以包含7个ODT列表。
ODT列表
七个ODT组成一个ODT列表,每一个ODT的最大元素数目为7,可以存放7个单字节数据变量的信息,其内容包括数据变量的存放地址,数据长度及其偏移地址。ODT列表需要通过DAQ-DTO方式才能向主设备发送,由于每一个ODT都有唯一的绝对编号,该编号即为DAQ-DTO的PID,排在最前面的ODT相对编号为0。绝对编号是对于所有ODT来说的,每一个ODT的绝对编号都不相同。相对编号是相对于当前DAQ列表而言,不同DAQ列表的ODT,其相对编号可能会相同。正是因为单帧有八字节数据,而ODT编号需要占用一字节,因此在DAQ-DTO中只剩下7字节来用于ODT的传输,而又因为CCP无法进行跨帧的数据/命令传输,所以一个ODT最大只能存储7字节数据。又因为PID的长度为8位,因此ODT的总数不能超过254个(0~0xFD)(通过修改PID长度可以增加ODT总数,但会减少单个ODT的长度)
命令编号 | 功能 |
---|---|
0x01 | CONNECT——建立连接 |
0x02 | SET_MTA——设置内存传输地址 |
0x03 | DNLOAD——数据下载 |
0x04 | UPLOAD——数据上传 |
0x06 | STOP_START——开始/停止/准备数据传输 |
0x07 | DISCONNECT——断开连接 |
0x08 | STSRT_STOP_ALL——开始/停止数据传输 |
0x0C | SET_S_STATUS——设置Session状态 |
0x0D | GET_S_STATUS——获取Session状态 |
0x0E | BUILD_CHECKSUM——计算校验和 |
0x12 | GET_SEED——获取被请求资源的种子 |
0x13 | UNLOCK——解锁保护 |
0x14 | GET_DAQ_SIZE——获取DAQ list大小 |
0x15 | SET_DAQ_PTR——设置DAQ list指针 |
0x16 | WRITE_DAQ —— 写DAQ list入口 |
0x1B | GET_CPP_VERSION——获取CCP版本 |
流程介绍
可提供功能:
1.随机读取ECU中RAM和ROM中的数据
2.测量数据采样
3.标定数据的采样和传输
4.同时处理多个ECU系统
5.flash编程技术
ECU地址(Intel格式,低字节在前)
错误等级:
C0:警告
C1:伪错误
C2:可修复错误
C3:不可修复
0x31:命令句法错误,与传输命令信息有误相关
使用CCP协议的意义:
在我们对板卡下载烧录完程序后如果我们要更改参数,则需要再次编辑编译烧录会使工作变得更加繁琐,引入CCP协议后我们可以通过CCP中的相关操作指令对RAM、PORTS、ROM、FLASH读取,写RAM、PORTS、FLASH
DAQ下的定期传输需要用到ODT(Objetc Descriptor Table,元素变量列表)
DAQ通信设置
在使用DAQ通信前,主设备需要对DAQ列表及ODT列表进行配置
-
获取ECU内部DAQ列表数量和ODT数目,DAQ列表数量由上传的数据周期决定,每个不同周期对应一个DAQ列表。ODT列表数则由每个周期下上传的数据个数及长度决定
-
向相应的ODT填入数字,及数据的存储地址和数据长度,随后根据类型和上传周期被写在不同DAQ的不同ODT中
-
上传周期由事件通道(Event Channel)和预分频值(Prescaler)决定.事件周期可以理解为ECU每多少ms触发一次,若为10,则说明ECU每10ms触发一次该事件。预分频值可以理解为:以事件通道的时间为基准进行分频,我们以此来复用事件通道。若预分频值设定为2,则将某一事件以20ms的周期进行触发,但使用的仍然是同一个DAQ列表。
-
启动DAQ,进行数据采集
DAQ Initlize and Start data transmission
Command | Description | Remark |
---|---|---|
CONNECT (0x01) | Connect | Bypass, if already connected |
GET_DAQ_SIZE (0x14) | Get the number of ODTS in DAQ | |
(loop ) | n | |
SET_DAQ_PTR (0x15) | Set DAQ List number,ODT List number,ODT Element(Id) number | |
WRITE_DAQ (0x16) | Set DAQ transfer bytes,extension address(DAQ element),Address of DAQ Element | |
START_STOP (0x06) | Set Mode select,DAQ list number,last ODT number(the current DAQ list should be transmission the last ODT number),Event channel number ,transmission prescaler | prepare data tranmission |
START_STOP_ALL (0x08) | start data transmission |
SHORT_UP(Short Upload)
后续会持续完善内容……