汽车标定协议之CCP从入门到精通一篇就够了
在看这篇文章之前,我们先了解CCP协议是什么?CCP得作用是什么? CCP是“CAN Calibration
Protocal”的缩写,是基于CAN实现的一种最为基本的测量标定协议。
例如:我们学习STM32时经常通过串口助手(上位机)将传感器的数据打印出来,这就是测量。我们通过串口助手将数据发送之MCU,MCU通过串口助手(上位机)拿到数据对变量进行赋值,这就是标定。
而CCP是在CAN通信的基础上实现的测量与标定,当然CCP的测量与标定功能更加强大。
CCP协议基本概念
在学习CCP协议之前,我们需要先学一些CCP的理论知识,不过这部分看不懂也没关系,先有个印象,后面会通过CCP的实际报文来结合理论分析。
CCP的测量模式分为两种:一种是POLLING(轮询模式),一种是DAQ(固定周期)。
POLLING模式,就是一问一答得形式,上位机发送一条指令,从机(ECU)回复一条。这种模式实现简单,但缺点显而易见,占内存,效率低。
DAQ模式,DAQ模式就是固定周期将测量数据发送至上位机。举个例子:强哥是卖鱼的,鱼呢比较受欢迎卖的很好,没鱼了就打电话叫老默送点鱼,老默发现每次送的鱼基本都差不多,于是和强哥商量就立下哥规矩,草鱼呢一天送一次,鲈鱼呢两天送一次,不用天天打电话说了。有别的需求在打电话沟通。因此,CCP就定义了DAQ模式,需要将数据按传输速率分组,每一组称为一个DAQ List,每一个List里面定义了多个ODT(数据列表),专门存储数据的地址,数据长度等相关信息。CCP可以有多个DAQ列表,每个DAQ列表传输速率不同,多个列表可同时启动。
CCP协议数据类型
CCP将CAN传输的报文分为以下几种类型:
CRM:命令返回消息,从设备发送到主设备的一种消息,包含命令/错误代码和命令计数器。
CRO:上位机发送到ECU的命令消息报文。
DTO:ECU响应上位机的消息报文。
CCP协议报文格式
CRO报文结构:
CRO是上位机发送至ECU的命令报文。
第一个字节CMD:表示命令位,例如标定命令、测量命令等。具体命令后面讲诉。
第二个字节CTR:表示计数位,也就是该字节没发一个CRO就会加1,加到255后重置为0。
第2-7个字节Data:根据CMD而定,具体数据我们后面讲诉。
DTO报文结构
DTO是ECU回复上位机命令的报文
第一个字节PID:表示ECU回复的命令位,0xFF表示正相应回复,0xFE表示负响应回复。正相应回复会携带数据发送至上位机,负响应回复会携带错误码发送至上位机。
第二个字节ERR:上诉提到的错误码,0x00表示无错误。
第三个字节CTR:表示计数位,此为回复至上位机时与上位机发送的CRO中的CTR一致。
第3-7字节Data:根据PID而定,具体数据后序讲诉。
常用CRO与DTO
CONNECT——建立连接(0x01):
示例:
上位机发送CRO至ECU报文如下:
01 C6 00 00 00 00 00 00
参数如下:
第1字节01:连接命令(CMD)
第2字节C6:CTR计数
第3-8字节00:不必理会
ECU响应上位机DTO白问如下:
FF 00 C6 FE 00 00 00 00
参数如下:
第1字节FF:正响应命令(PID)
第2字节00:无错误
第3字节C6:CTR计数
第4-8字节00:不必理会
DISCONNECT ——断开连接(0X07)
示例:
上位机发送CRO至ECU报文如下:
07 C7 01 00 00 00 00 00
参数如下:
第1字节07:断开连接命令(CMD)
第2字节C7:CTR计数
第3字节01:结束会话
第4-8字节:不必理会
ECU响应上位机DTO报文如下:
FF 00 C8 FE 00 00 00 00
参数如下:
第1字节FF:正响应命令(PID)
第2字节00:无错误
第3字节C8:CTR计数
第4-8字节:不必理会
数据标定命令-设置内存传输地址(0X02)
此命令用于进行数据标定,在数据标定之前需要先用此命令进行内存定位,然后向定位的内存写入数据,写入数据命令见下一条。
示例:
上位机发送CRO至ECU报文如下:
02 03 00 00 40 00 11 10
参数如下:
第1字节02:设置内存传输地址命令(CMD)
第2字节03:CTR计数
第3字节00:MAT号
第4字节00:扩展地址
第5-8字节:变量地址
ECU响应上位机DTO报文如下:
FF 00 03 00 00 00 00 00
参数如下:
第1字节FF:正响应命令(PID)
第2字节00:无错误
第3字节03:CTR计数
第4-8字节:不必理会
数据下载(0x03)
此命令用于标定数据,与上一条命令结合使用。
示例:
上位机发送CRO至ECU报文如下:
03 10 02 01 00 00 00 00
参数如下:
第1字节03:数据下载命令(CMD)
第2字节10:CTR计数
第3字节02:变量字节数
第4-8字节:01为标定的数据
ECU响应上位机DTO报文如下:
FF 00 10 00 00 00 00 00
参数如下:
第1字节FF:正响应命令(PID)
第2字节00:无错误
第3字节10:CTR计数
第4-8字节:不必理会
数据上载(0X0F)
数据上载也就是ECU数据上载至上位机,对数据的测量。
示例:
上位机发送CRO至ECU报文如下:
0F 11 02 00 40 00 11 10
参数如下:
第1字节0F:数据上载命令(CMD)
第2字节11:CTR计数
第3字节02:变量字节数
第3字节00:扩展地址
第5-8字节:变量地址
ECU响应上位机DTO报文如下:
FF 00 11 01 00 00 00 00
参数如下:
第1字节FF:正响应命令(PID)
第2字节00:无错误
第3字节11:CTR计数
第4-8字节00 00 00 00 01:变量值
上诉命令一般用于POLLING模式,下面我们讲解DAQ命令。
DAQ常用命令与流程
获取DAQ List大小-0x14
示例:
上位机发送CRO至ECU报文如下:
14 07 02 00 00 00 01 01
ECU响应上位机DTO报文如下:
FF 00 07 1E 3C 00 05 00
设置DAQ指针-0x15
此命令与设置内存传输地址类似,需要先定位DAQ-ODT位置然后向,该目标写入变量地址,与下一条指令配合使用。
示例:
**上位机发送CRO至ECU报文如下:**指向向DAQ0-ODT0
15 08 00 00 00 00 00 00
ECU响应上位机DTO报文如下:
FF 00 08 00 00 00 00 00
向DAQ列表写入标识符地址-0x16
此命令与上一条命令配合使用,指向DAQ-ODT后写入标识符地址,DAQ会周期性的将地址上的数据发送至上位机。
示例:
**上位机发送CRO至ECU报文如下:
16 09 02 00 40 00 11 10
ECU响应上位机DTO报文如下:
FF 00 09 00 00 00 00 00
开启DAQ传输-0x06
示例:
**上位机发送CRO至ECU报文如下:
08 0C 01 00 00 00 00 00
ECU响应上位机DTO报文如下:
FF 00 0C 00 00 00 00 00