CAN/CANFD
CCP/UDS
Bootloader/OTA
ECU/VCU/FCU
Simulink/ECUCoder
Ethernet
Hardware
Download
上一篇
下一篇
XCP标定协议
一.XCP协议概述
二.XCP协议框架
三.XCP协议数据结构
四.XCP通信模式
五.XCP的应用
回到顶部
XCP标定协议
一.XCP协议概述
二.XCP协议框架
三.XCP协议数据结构
四.XCP通信模式
五.XCP的应用
回到顶部
# XCP标定协议 ## 一.XCP协议概述
XCP(Universal Measurement and Calibration Protocol),即通用测试和标定协议,X代表不同的传输层上传输,例如CAN/CAN FD、Ethernet、FlexRay、SCI、SPI、USB。可以通过不同类型的总线测量和标定ECU内部参数。 XCP的前身叫做CCP(CAN Calibration Protocol),是一种仅针对CAN接口的测量标定协议。随着整车网络需求的不断发展,现如今,CAN总线已经无法完全满足整车需求,智能化和网联化需要以太网等的加入。ASAM在CCP协议的基础上,又提出了XCP协议标准,能够适配多种网络传输协议和总线类型。 ## 二.XCP协议框架
为了确保传输网络的独立性,XCP分为协议层和传输层。 协议层供了一种通用通信标准,为不同的总线移植通信代码时,协议层的内容不需要修改,可以节省大量时间。 传输层提供了各类通信总线的接口标准,根据实际的物理连接选择对应的标准,如图2-1: - 基于CAN的XCP - 基于LIN的XCP - 基于SxI(SPI、SCI)的XCP - 基于以太网(TCP/UDP)的XCP - 基于USB的XCP - 基于FlexRay的XCP ![](images/2023-01-04-13-40-24.png)
图2-1 XCP框架
相较于CCP协议,XCP在功能上做了许多改进,包括: - 支持多种物理层协议,不仅限于CAN - 优化了控制单元资源的利用率 - 同步数据激励 - 支持启动测量 - 通过块传输命令优化通信 - 即插即用配置 - 通过测量控件内的时间戳精确测量数据采集 ## 三.XCP协议数据结构
XCP协议中分为主机Master 和从机Salve,通过XCP Packet 进行交互,XCP Packet如图3-1所示。 ![](images/2023-01-12-15-01-54.png)
图3-1 XCP消息帧格式
XCP Header与XCP Tail属于传输层的内容,在TCP/UDP协议中为控制字节,在CAN传输时直接忽略。 XCP Packet属于协议层内容,其中分为认证域(Identification Field)、采样时间域(Timestamp Field)和数据域(Data Field)。 认证域:PID必须存在,作为每一帧XCP消息的编号。用作CAN通信时,PID长度为1个字节,其定义的各类功能,如表3-1所示。FILL用于描述报文对齐信息,DAQ表示DAQ列表的标识符,在CAN通信中可以直接忽略。 采样时间域:传输时间戳信息,Timestamp数据长度为1~4个字节,在CAN通信中可以直接忽略。 数据域:存放上位机与ECU传递的有效数据,用作CAN通信时,长度为0~7个字节。 | 基础标准指令STD | CODE | 备注 | | ----------------------- | -------- | ------ | | CONNECT | 0xFF | 必选指令,用于建立与ECU的连接,指令包含ECU的地址等信息,在建立连接后,外部设备可以向ECU发送其它指令。 | | DISCONNECT | 0xFE | 必选指令,用于断开与ECU的连接,在断开连接后,外部设备不能再向ECU发送指令。 | | GET_STATUS | 0xFD | 必选指令,用于获取ECU的状态信息,可以返回ECU的运行状态、错误码等信息。 | | SYNCH | 0xFC | 必选指令,用于同步ECU和外部设备的信息,可以确保ECU和外部设备在同一时间点上进行通信。 | | GET_COMM_MODE_INFO | 0xFB | 可选命令 | | GET_ID | 0xFA | 可选命令 | | SET_REQUEST | 0xA9 | 可选命令 | | GET_SEED | 0xF8 | 可选命令 | | UNLOCK | 0xF7 | 可选命令 | | SET_MTA | 0xF6 | 可选命令 | | UPLOAD | 0xF5 | 可选命令 | | SHORT_UPLOAD | 0xF4 | 可选命令 | | BUILD_CHECKSUM | 0xF3 | 可选命令 | | TRANSPORT_LAYER_CMD | 0xF2 | 可选命令 | | USER_CMD | 0xF1 | 可选命令 | | **标定功能指令CAL** | **CODE** | **备注** | | DOWNLOAD | 0xF0 | 必选指令,用于向ECU写入数据,可以包含写入的地址、长度、数据等信息。 | | DOWNLOAD_NEXT | 0xEF | 可选命令 | | DOWNLOAD_MAX | 0xEE | 可选命令 | | SHORT_DOWNLOAD | 0xED | 可选命令 | | MODIFY_BITS | 0xEC | 可选命令 | | **标定页面切换指令PAG** | **CODE** | **备注** | | SET_CAL_PAGE | 0xEB | 可选命令 | | GET_CAL_PAGE | 0xEA | 可选命令 | | GET_PAG_PROCESSOR_INFO | 0xE9 | 可选命令 | | GET_SEGEMENT_INFO | 0xE8 | 可选命令 | | GET_PAGE_INFO | 0xE7 | 可选命令 | | SET_SEGEMENT_MODE | 0xE6 | 可选命令 | | GET_SEGEMENT_MODE | 0xE5 | 可选命令 | | COPY_CAL_PAGE | 0xE4 | 可选命令 | | **DAQ传输指令DAQ** | **CODE** | **备注** | | CLEAR_DAQ_LIST | 0xE3 | | | SET_DAQ_PTR | 0xE2 | | | WRITE_DAQ | 0xE1 | | | SET_DAQ_LIST_MODE | 0xE0 | | | GET_DAQ_LIST_MODE | 0xDF | 可选命令 | | START_STOP_DAQ_LIST | 0xDE | | | START_STOP_SYNCH | 0xDD | | | GET_DAQ_CLOCK | 0xDC | 可选命令 | | READ_DAQ | 0xDB | 可选命令 | | GET_DAQ_PROCESSOR_INFO | 0xDA | 可选命令 | | GET_DAQ_RESOLUTION_INFO | 0xD9 | 可选命令 | | GET_DAQ_LIST_INFO | 0xD8 | 可选命令 | | GET_DAQ_EVENT_INFO | 0xD7 | 可选命令 | | FREE_DAQ | 0xD6 | | | ALLOC_DAQ | 0xD5 | | | ALLOC_ODT | 0xD4 | | | ALLOC_ODT_ENTRY | 0xD3 | | | WRITE_DAQ_MULTIPLE | 0xC7 | 可选命令 | | **数据刷写指令PGM** | **CODE** | **备注** | | PROGRAM_START | 0xD2 | | | PROGRAM_CLEAR | 0xD1 | | | PROGRAM | 0xD0 | | | PROGRAM_RESET | 0xCF | | | GET_PGM_PROCESSOR_INFO | 0xCE | 可选命令 | | GET_SECTOR_INFO | 0xCD | 可选命令 | | PROGRAM_PREPARE | 0xCC | 可选命令 | | PROGRAM_FORMAT | 0xCB | 可选命令 | | PROGRAM_NEXT | 0xCA | 可选命令 | | PROGRAM_MAX | 0xC9 | 可选命令 | | PROGRAM_VERIFY | 0xC8 | 可选命令 |
表3-1 XCP Packet PID与任务的对应关系
CAN协议与XCP Packet的对应关系如图3-2所示。 ![](images/2023-01-12-16-57-29.png)
图3-2 CAN协议与XCP Packet的对应关系
## 四.XCP通信模式
XCP采用一主多从的通信模式,单个主机可以同时与多个从机通信。主机通过下发命令与从机建立连接,解锁,读取数据,修改参数等操作,以"XCP数据包”的数据对象形式传输。XCP数据包有两种类型:命令传输对象(CTO:Command Transfer Object)和数据传输对象(DTO:Data Transfer Object)。 - 命令传输对象CTO,包含5种形式: - CMD:控制命令,PID范围为0xC0~0xFF,主机向从机发送的命令请求,从机按照该编号执行相应命令,CTO数据结构如下所示。 | 位置 | 定义 | | ------------------ | ------------- | | 字节0 | PID:0xC0~0xFF | | 字节1~(CTO数据域字节长度-1) | 命令数据 | - RES:命令响应,PID=0xFF,从机接收到主机的CMD后,成功执行命令,并且向主机返回命令响应数据包,CTO数据结构如下所示。 | 位置 | 定义 | | ------------------ | -------- | | 字节0 | PID=0xFF | | 字节1~(CTO数据域字节长度-1) | 命令响应数据 | - ERR:错误响应,PID=0xFE,从机接收到主机的CMD后,执行命令时发生错误,从机向主机返回错误响应数据包,CTO数据结构如下所示。 | 位置 | 定义 | | ------------------ | ---------- | | 字节0 | PID=0xFE | | 字节1 | 错误代码 | | 字节2~(CTO数据域字节长度-1) | 错误响应数据(可选) | - EV:报告事件,PID=0xFD,当从机发现自身出现了异常的事件时,从机会主动向主机发送报告事件数据包,CTO数据结构如下所示。 | 位置 | 定义 | | ------------------ | ---------- | | 字节0 | PID=0xFD | | 字节1 | 事件代码 | | 字节2~(CTO数据域字节长度-1) | 事件报告数据(可选) | - SERV:请求主机执行服务,PID=0xFC,当从机需要主机执行某些服务是时,从机会主动向主机发送请求主机执行服务数据包,CTO结构如下所示。 | 位置 | 定义 | | ------------------ | ---------- | | 字节0 | PID=0xFC | | 字节1 | 事件代码 | | 字节2~(CTO数据域字节长度-1) | 事件报告数据(可选) | - 数据传输对象DTO,包含2种形式: - DAQ:传输同步数据包,在DAQ模式下,从机周期性上传数据。 - STIM:同步激励数据,在DAQ模式下,主机周期性的向从机下载数据。 PID为ODT列表的绝对编号,关于ODT的内容请查看《[CCP标定协议](./ccp.html)》中的“2.3.DAQ模式下的数据通信”,在DAQ模式下,XCP Packet中的FILL可以用来描述报文对齐信息,DAQ可以表示DAQ列表的标识符,TIMSTAMP可以表示事件戳,DATA用来存放数据,建议采用PID+DATA的模式进行通信,则XCP on CAN与CCP协议一致,方便两者在必要的场合下相互移植。 XCP数据对象传输形式如图4-1所示。 ![](images/2023-01-04-14-38-03.png)
图4-1 XCP数据对象传输形式
## 五.XCP的应用
XCP标定协议是CCP的升级版本,XCP对CCP进行了扩展与补充。XCP相比CCP最大的升级是XCP能够适配多种网络传输协议和总线类型而不再仅限于CAN总线。在实际应用中,对于支持CAN总线的ECU,通常使用CCP标定协议。对于不支持CAN总线的ECU,则需要使用XCP on Ethernet,XCP on LIN等。