XCP协议 Part 1 概述 --- 完整学习笔记(商用车主机厂工程师版)
文档导读与核心结论
本文定位 :基于ASAM标准文档《XCP - Part 1 - Overview - 1.0》(2003-04-08发布,Doc-ID: XCP-Part 1-Overview-1.0)整理的完整学习笔记,面向国内商用车主机厂ECU标定、测量与测试工程师。全文不省略任何协议定义、参数取值范围、约束条件与错误码,可作为XCP协议入门与工具开发/使用的案头参考。

核心结论速览
-
XCP是CCP的升级与泛化版本,不向后兼容CCP。"X"代表多种传输层(CAN/TCP-IP/UDP-IP/USB等),协议层与传输层分离设计。
-
三大核心功能:同步数据传输(DAQ采集/STIM激励/BYP旁路)、在线标定(SEGMENT/PAGE机制,支持页切换与页冻结)、Flash编程(绝对访问模式+功能访问模式)。
-
拓扑为单主单从点对点,不支持广播(唯一例外:CAN上的GET_SLAVE_ID);支持多组单主单从并存与网关桥接。
-
三种通信模型:标准(请求-应答)、块传输(加速上下传/烧录)、交错(流水线加速),块传输与交错互斥。
-
从站状态机三态:DISCONNECTED(仅响应CONNECT)、CONNECTED(正常通信)、RESUME(上电自动恢复DAQ/STIM传输)。S3致命错误回退DISCONNECTED。
-
设计原则:最小从站资源消耗(RAM/ROM/运行时)、高效通信、简单从站实现。
思维导图目录

XCP协议族概述
XCP协议族定义
XCP(Universal Measurement and Calibration Protocol,通用测量与标定协议)是基于CCP(CAN Calibration Protocol)2.1版的使用经验发展而来的改进与泛化版本。参与反馈的公司包括:Accurate Technologies Inc.、Compact Dynamics GmbH、DaimlerChrysler AG、dSPACE GmbH、ETAS GmbH、Kleinknecht Automotive GmbH、Robert Bosch GmbH、Siemens VDO Automotive AG、Vector Informatik GmbH。
关键理解:XCP中的"X"并非某个具体单词,而是泛化符号,代表协议族支持的"各种"传输层,例如:
-
XCP on CAN
-
XCP on TCP/IP
-
XCP on UDP/IP
-
XCP on USB
-
以及其他传输层
重要声明 :XCP不向后兼容已有的CCP实现。从CCP迁移到XCP需要重新开发从站驱动和主站工具。
XCP规范文档体系(5部分)
XCP规范由5个独立文档组成,各司其职:
| 部分 | 名称 | 内容 |
|---|---|---|
| Part 1 | Overview(概述) | XCP协议族概述、XCP特性、基本协议定义(即本文档) |
| Part 2 | Protocol Layer Specification(协议层规范) | 定义与传输层无关的通用协议 |
| Part 3 | Transport Layer Specification(传输层规范) | 定义XCP协议如何通过特定传输层(CAN、TCP/IP、UDP/IP等)传输 |
| Part 4 | Interface Specification(接口规范) | 定义XCP主站到ASAM MCD 2MC描述文件的接口,以及Seed & Key算法和校验和计算接口 |
| Part 5 | Example Communication Sequences(通信序列示例) | 给出XCP典型操作的示例通信序列 |
文档原则:本文档未明确提及的内容,均视为"实现相关"(implementation specific),由各ECU供应商和工具供应商自行约定。
术语与缩写表
以下为XCP文档中最常用的定义和缩写,按字母顺序排列:
| 缩写 | 全称与说明 |
|---|---|
| A2L | ASAM 2MC语言文件的扩展名(标定描述文件) |
| AML | ASAM 2 Meta Language,ASAM 2元语言 |
| ASAM | Association for Standardization of Automation and Measuring Systems,自动化与测量系统标准化协会 |
| BYP | BYPassing,旁路(功能绕过) |
| CAL | CALibration,标定 |
| CAN | Controller Area Network,控制器局域网 |
| CCP | CAN Calibration Protocol,CAN标定协议 |
| CMD | CoMmanD,命令 |
| CS | CheckSum,校验和 |
| CTO | Command Transfer Object,命令传输对象 |
| CTR | CounTeR,计数器 |
| DAQ | Data AcQuisition / Data AcQuisition Packet,数据采集/数据采集包 |
| DTO | Data Transfer Object,数据传输对象 |
| ECU | Electronic Control Unit,电子控制单元 |
| ERR | ERRor Packet,错误包 |
| EV | EVent Packet,事件包 |
| LEN | LENgth,长度 |
| MCD | Measurement Calibration and Diagnostics,测量、标定与诊断 |
| MTA | Memory Transfer Address,内存传输地址 |
| ODT | Object Descriptor Table,对象描述表 |
| PAG | PAGing,分页 |
| PGM | ProGraMming,编程 |
| PID | Packet IDentifier,包标识符 |
| RES | command RESponse packet,命令响应包 |
| SERV | SERVice request packet,服务请求包 |
| SPI | Serial Peripheral Interface,串行外设接口 |
| STD | STanDard,标准 |
| STIM | Data STIMulation packet,数据激励包 |
| TCP/IP | Transfer Control Protocol / Internet Protocol,传输控制协议/网际协议 |
| TS | Time Stamp,时间戳 |
| UDP/IP | Unified Data Protocol / Internet Protocol(注:原文如此,通常为User Datagram Protocol),用户数据报协议/网际协议 |
| USB | Universal Serial Bus,通用串行总线 |
| XCP | Universal Calibration Protocol,通用标定协议 |
XCP核心特性总览
基本特性(5项)
-
同步数据采集(Synchronous data acquisition)
-
同步数据激励(Synchronous data stimulation)
-
在线内存标定(Online memory calibration,读/写访问)
-
标定数据页初始化与切换(Calibration data page initialization and switching)
-
Flash编程(Flash Programming,用于ECU开发)
可选新特性(10项)
-
多种传输层(CAN、Ethernet、USB等)
-
块通信模式(Block communication mode)
-
交错通信模式(Interleaved communication mode)
-
动态数据传输配置(Dynamic data transfer configuration)
-
带时间戳的数据传输(Timestamped data transfer)
-
数据传输同步(Synchronization of data transfer)
-
数据传输优先级(Prioritization of data transfer)
-
原子位修改(Atomic bit modification)
-
按位数据激励(Bitwise data stimulation)
相对CCP 2.1的改进(7项)
-
兼容性与规范(compatibility and specification)
-
效率与吞吐量(efficiency and throughput)
-
上电数据传输(power-up data transfer,即RESUME模式)
-
数据页冻结(data page freezing)
-
自动配置(auto configuration)
-
Flash编程(flash programming)
设计原则(3条)
XCP三大设计原则(贯穿协议全栈的核心约束):
-
最小从站资源消耗(Minimal Slave resource consumption):RAM、ROM、运行时开销最小化
-
高效通信(Efficient communication):最大化有效数据吞吐量,最小化协议开销
-
简单从站实现(Simple Slave implementation):降低ECU侧驱动开发复杂度
同步数据传输(Synchronous Data Transfer)
同步数据传输是XCP最核心的功能,用于在主站(标定工具)与从站(ECU)之间按事件触发同步传输测量数据。分为三个方向:DAQ(从站→主站采集)、STIM(主站→从站激励)、BYP(旁路,同时使用DAQ+STIM)。
基本模型
DAQ、STIM与ODT概述
位于从站内存中的数据元素,通过**数据传输对象(DTO)**进行传输:
-
DAQ-DTO:从从站传输到主站(数据采集方向)
-
STIM-DTO:从主站传输到从站(数据激励方向)
**对象描述表(ODT,Object Descriptor Table)**描述了同步数据传输对象与从站内存之间的映射关系。
每个同步数据传输对象由其**包标识符(PID,Packet IDentifier)**标识,PID标识了描述该同步数据传输对象内容的ODT。

ODT Entry(ODT条目)
ODT中的一个条目(ODT entry)通过以下信息引用一个数据元素:
-
地址(address)
-
地址扩展(address extension)
-
元素大小(以ADDRESS_GRANULARITY为单位)
-
位偏移(bit offset,仅当数据元素表示一个位时)
地址与大小的粒度约束
对于ODT条目描述的元素地址,必须满足:
Addressmod GRANULARITY_ODT_ENTRY_SIZE_x=0Address \mod GRANULARITY\_ODT\_ENTRY\_SIZE\_x = 0AddressmodGRANULARITY_ODT_ENTRY_SIZE_x=0
对于ODT条目描述的元素大小,必须满足:
SizeOf(element)mod GRANULARITY_ODT_ENTRY_SIZE_x=0SizeOf(element) \mod GRANULARITY\_ODT\_ENTRY\_SIZE\_x = 0SizeOf(element)modGRANULARITY_ODT_ENTRY_SIZE_x=0
| 参数 | 可选值 | 说明 |
|---|---|---|
| GRANULARITY_ODT_ENTRY_SIZE_x | {1, 2, 4, 8} | ODT条目大小粒度,x代表DAQ或STIM方向 |
| ADDRESS_GRANULARITY | {1, 2, 4} | 地址粒度 |
二者必须满足关系:
GRANULARITY_ODT_ENTRY_SIZE_xmod ADDRESS_GRANULARITY=0GRANULARITY\_ODT\_ENTRY\_SIZE\_x \mod ADDRESS\_GRANULARITY = 0GRANULARITY_ODT_ENTRY_SIZE_xmodADDRESS_GRANULARITY=0
最大元素大小约束
MAX_ODT_ENTRY_SIZE_x参数指示ODT条目可描述的元素大小上限(以ADDRESS_GRANULARITY为单位)。必须满足:
SizeOf(element)≤MAX_ODT_ENTRY_SIZE_xSizeOf(element) \leq MAX\_ODT\_ENTRY\_SIZE\_xSizeOf(element)≤MAX_ODT_ENTRY_SIZE_x
工程提示:如果从站仅支持size=BYTE的元素,主站必须将多字节数据元素拆分为单个字节进行配置。这在资源受限的8位/16位MCU从站上较为常见。
ODT条目通过ODT_ENTRY_NUMBER引用。
ODT(对象描述表)
ODT条目被分组到ODT中。
-
静态配置 时:MAX_ODT_ENTRIES指定该DAQ列表中每个ODT的最大ODT条目数。
-
动态配置时:MAX_ODT_ENTRIES不固定,值为0。
每个ODT内,ODT条目的编号(ODT_ENTRY_NUMBER)从0重新开始:
ODT_ENTRY_NUMBER∈0,1,..,MAX_ODT_ENTRIES(DAQlist)−1ODT\_ENTRY\_NUMBER \in 0, 1, .., MAX\\_ODT\\_ENTRIES(DAQ list)-1ODT_ENTRY_NUMBER∈0,1,..,MAX_ODT_ENTRIES(DAQlist)−1
ODT通过ODT_NUMBER引用。
DAQ List(DAQ列表)
多个ODT可以分组为一个DAQ列表。XCP允许多个DAQ列表同时处于活动状态。每个DAQ列表的采样和传输由从站中的独立事件触发(参见SET_DAQ_LIST_MODE命令)。

DAQ列表数量参数
| 参数 | 说明 |
|---|---|
| MAX_DAQ | 从站设备中可用的DAQ列表总数。包括预定义DAQ列表(不可配置,在GET_DAQ_LIST_INFO中标记为PREDEFINED)和可配置DAQ列表。动态配置时 MAX_DAQ = MIN_DAQ + DAQ_COUNT。 |
| MIN_DAQ | 预定义DAQ列表的数量。预定义DAQ列表的DAQ_LIST_NUMBER范围为 0, 1, .., MIN_DAQ-1。 |
| DAQ_COUNT | 动态分配的DAQ列表数量。 |
| MAX_DAQ - MIN_DAQ | 可配置DAQ列表的数量。可配置DAQ列表的DAQ_LIST_NUMBER范围为 MIN_DAQ, MIN_DAQ+1, .., MAX_DAQ-1。 |
编号规则
-
每个DAQ列表内,ODT的编号(ODT_NUMBER)从0重新开始:ODT_NUMBER∈0,1,..,MAX_ODT(DAQlist)−1ODT\_NUMBER \in 0, 1, .., MAX\\_ODT(DAQ list)-1ODT_NUMBER∈0,1,..,MAX_ODT(DAQlist)−1
-
同一XCP从站设备内,DAQ列表编号从0开始且必须连续:DAQ_LIST_NUMBER∈0,1,..,MIN_DAQ−1+MIN_DAQ,MIN_DAQ+1,..,MAX_DAQ−1DAQ\_LIST\_NUMBER \in 0, 1, .., MIN\\_DAQ-1 + MIN\\_DAQ, MIN\\_DAQ+1, .., MAX\\_DAQ-1DAQ_LIST_NUMBER∈0,1,..,MIN_DAQ−1+MIN_DAQ,MIN_DAQ+1,..,MAX_DAQ−1
传输速率预分频器(Prescaler)
为降低所需传输速率,可对DAQ列表应用传输速率预分频器(参见GET_DAQ_PROCESSOR_INFO中DAQ_PROPERTIES的PRESCALER_SUPPORTED标志)。
-
不降低速率时,预分频器值必须等于1。
-
降低速率时,预分频器必须大于1。
-
预分频器仅允许用于DIRECTION = DAQ的DAQ列表。
Event Channels(事件通道)
XCP允许多个DAQ列表同时活动,每个DAQ列表的采样和传输由从站中的独立事件触发。
**事件通道(Event Channel)**是构建通用信号源的抽象,实际决定数据传输时序。
| 参数/概念 | 说明 |
|---|---|
| MAX_EVENT_CHANNEL | 可用事件通道的数量 |
| EVENT_CHANNEL_NUMBER | 事件通道编号,从0开始且必须连续:0, 1, .., MAX_EVENT_CHANNEL-1 |
| MAX_DAQ_LIST | 每个事件通道可分配的最大DAQ列表数。MAX_DAQ_LIST = 0表示无限制。 |
| 事件通道优先级 | XCP支持事件通道优先级,这是从站的固定属性(只读)。事件通道优先级 = FF 表示最高优先级。 |
测量变量到事件通道的分配
MEASUREMENT变量到事件通道的分配可在A2L文件中每个MEASUREMENT变量定义的DAQ_EVENT部分进行可选控制。分配可以是固定的 或可变的。
| 分配类型 | 机制 |
|---|---|
| 固定分配 | 在需要固定分配的MEASUREMENT变量处定义FIXED_EVENT_LIST(所有要使用的事件通道列表)。工具不能更改具有固定列表的MEASUREMENT变量的事件通道分配。 |
| 可变分配 | 可在MEASUREMENT变量处提供AVAILABLE_EVENT_LIST(该MEASUREMENT变量所有有效事件通道列表)。如果不存在此列表,工具可分配ECU提供的所有事件通道。 |
| 默认分配 | 可通过提供DEFAULT_EVENT_LIST(默认事件通道列表)支持默认分配。此默认分配可被工具更改为其他分配。如果定义了AVAILABLE_EVENT_LIST,则DEFAULT_EVENT_LIST中的事件通道必须是该MEASUREMENT变量AVAILABLE_EVENT_LIST的相同集合或子集。 |
为什么使用列表:部分MCD工具允许在多个事件中进行测量。列表为工具用户提供了简化的测量配置方式。商用车ECU(如发动机、变速箱、整车控制器)通常有多个任务周期(1ms/10ms/100ms),对应多个事件通道。
可选特性
动态DAQ配置(Dynamic DAQ Configuration)
对于可配置的DAQ列表,从站可以对DAQ列表数量、每个DAQ列表的ODT数量、每个ODT的ODT条目数量有固定限制。从站也可以支持完全动态地配置DAQ列表。
可配置DAQ列表是静态配置还是动态配置,由GET_DAQ_PROCESSOR_INFO中DAQ_PROPERTIES的DAQ_CONFIG_TYPE标志指示。
静态 vs 动态配置的参数差异
| 参数 | 静态配置(static) | 动态配置(dynamic) |
|---|---|---|
| MAX_DAQ | 固定值 | MIN_DAQ + DAQ_COUNT |
| MAX_ODT | 固定值 | MAX_ODT_ABS / MAX_ODT_DAQ_ABS / MAX_ODT_STIM_ABS |
| MAX_ODT_ENTRIES | 固定值 | MAX_ODT_ENTRIES_ABS / MAX_ODT_ENTRIES_DAQ_ABS / MAX_ODT_ENTRIES_STIM_ABS |
动态配置时仍适用的规则:
-
MIN_DAQ仍指示DAQ列表编号范围的下限
-
DAQ_COUNT指示可配置DAQ列表的数量
-
ODT条目元素大小仍需满足GRANULARITY_ODT_ENTRY_SIZE_x和MAX_ODT_ENTRY_SIZE_x规则
-
FIRST_PID分配规则不变
-
ODT_NUMBER作用域仍为DAQ列表内局部
-
ODT_ENTRY_NUMBER作用域仍为ODT内局部
-
DAQ列表连续编号规则不变
-
事件通道连续编号规则不变
动态配置命令与序列
动态DAQ列表配置使用以下命令:FREE_DAQ 、ALLOC_DAQ 、ALLOC_ODT 、ALLOC_ODT_ENTRY。这些命令允许在上述限制内动态分配DAQ列表、ODT和ODT条目。
错误处理 :如果没有足够内存分配请求的对象,从站返回ERR_MEMORY_OVERFLOW负响应。发生此错误时,整个DAQ列表配置无效。
动态配置的严格序列规则
关键约束:动态DAQ配置必须严格按照以下顺序执行,违反顺序将返回ERR_SEQUENCE错误:
-
FREE_DAQ(始终首先发送,释放所有现有配置)
-
ALLOC_DAQ(分配可配置DAQ列表数量)
-
ALLOC_ODT(为所有DAQ列表分配所有ODT)
-
ALLOC_ODT_ENTRY(为所有DAQ列表的所有ODT分配所有ODT条目)
序列违规对照表("after"表示前一个命令,"!"表示允许,"ERR"表示返回ERR_SEQUENCE):
| 当前命令 ↓ / 前一命令 → | FREE_DAQ后 | ALLOC_DAQ后 | ALLOC_ODT后 | ALLOC_ODT_ENTRY后 |
|---|---|---|---|---|
| FREE_DAQ | ! | ! | ! | ! |
| ALLOC_DAQ | ! | ! | ! | ERR |
| ALLOC_ODT | ERR | ! | ! | ERR |
| ALLOC_ODT_ENTRY | ERR | ERR | ! | ! |
这些规则确保从站可以连续地将不同对象分配到可用内存,从而优化内存使用并简化管理。
重要推论 :新的DAQ列表不能添加到已有的配置中。主站必须完全重新配置整个DAQ列表配置才能包含额外的DAQ列表。这意味着在测量过程中动态增加测量变量需要重新走完整的FREE→ALLOC序列。
高级特性
上电数据传输(RESUME模式)
RESUME模式是状态机的一个状态。其目的是在从站上电后立即自动启动数据传输(DAQ、STIM),无需主站重新配置。
GET_DAQ_PROCESSOR_INFO中DAQ_PROPERTIES的RESUME_SUPPORTED标志指示从站是否可设置为RESUME模式。
RESUME模式工作流程
-
配置阶段:主站配置DAQ列表,使用START_STOP_DAQ_LIST(Select)选择要纳入RESUME模式的DAQ列表。
-
计算会话配置ID :主站基于当前为RESUME模式选择的DAQ列表配置,计算一个Session Configuration Id,内部存储备用。
-
发送存储请求:主站通过SET_REQUEST发送Session Configuration Id给从站,并设置STORE_DAQ_REQ。
-
从站存储:
-
从站内部设置之前通过START_STOP_DAQ_LIST(select)选择的DAQ列表的RESUME位。
-
从站将所有RESUME位置位的DAQ列表保存到非易失性存储器。
-
从站将Session Configuration Id存储到非易失性存储器。
-
保存前,从站必须先清除非易失性存储器中可能已存储的任何DAQ列表配置。
-
-
存储完成指示 :GET_STATUS获取的STORE_DAQ_REQ位在请求完成后由从站复位。从站可通过发送EV_STORE_DAQ事件包指示。
-
上电恢复 :每次上电时,从站恢复DAQ列表并向主站发送EV_RESUME_MODE。
EV_RESUME_MODE事件包格式
| 位置 | 类型 | 描述 |
|---|---|---|
| 0 | BYTE | 包ID:Event 0xFD |
| 1 | BYTE | EV_RESUME_MODE:0x00 |
| 2, 3 | WORD | 从站的Session Configuration Id |
| 4..7 | DWORD | 当前从站时间戳(可选) |
-
EV_RESUME_MODE必须包含Session Configuration Id。
-
如果从站在GET_DAQ_PROCESSOR_INFO中设置了TIMESTAMP_SUPPORTED标志,EV_RESUME_MODE还必须包含数据采集时钟的当前值。时间戳格式由GET_DAQ_RESOLUTION_INFO命令指定。
RESUME模式下的自动行为
-
DIRECTION = DAQ 的DAQ列表:从站自动开始向主站传输DAQ数据包,甚至在主站发送任何XCP命令之前。
-
DIRECTION = STIM的DAQ列表:从站自动准备好接收来自主站的STIM数据包,甚至在主站发送任何XCP命令之前。
-
上电自动启动的DAQ列表,GET_DAQ_LIST_MODE的Current Mode为RESUME和RUNNING。
通信参数记忆:主站和从站都必须记住发送SET_REQUEST(STORE_DAQ_REQ)时使用的所有必要通信参数。上电时,主站和从站都必须使用这些相同参数进行自动数据传输。
RESUME模式对DAQ和STIM两个方向均允许。
主从同步(Master-slave synchronization)
GET_DAQ_CLOCK命令提供了一种通过计算偏移量来同步主站和从站设备中时钟的方法。
DAQ列表优先级(DAQ list prioritization)
XCP允许DAQ列表的优先级排序。DTO的有限长度加上优先级机制,确保具有较高优先级的DAQ列表可以在可接受的延迟内中断较低优先级DAQ列表的传输。
ODT优化(ODT optimization)
XCP允许在ODT级别进行DTO优化。为支持此特性,从站实现可以使用一个或多个特定的复制例程,以充分利用CPU架构进行数据复制。优化可以最小化运行时,或最大化有效数据传输速率,或两者兼顾。
然而,这些复制例程可能需要特定的ODT结构。为获得DAQ优化的优势,主站应以符合复制例程要求的方式配置ODT。
Optimization_Method属性指示从站实现使用的优化方法类型。主站应用它来确定配置ODT的方法。Optimization_Method是全局DAQ属性,对所有ODT和DAQ列表有效。Optimization_Method标志位于GET_DAQ_PROCESSOR_INFO的DAQ_KEY_BYTE中。
7种优化方法定义
| 优化方法 | 说明与约束 |
|---|---|
| OM_DEFAULT | 无特殊要求。必须考虑GRANULARITY_ODT_ENTRY_SIZE_DAQ、GRANULARITY_ODT_ENTRY_SIZE_STIM、MAX_ODT_ENTRY_SIZE_DAQ和MAX_ODT_ENTRY_SIZE_STIM。 |
| OM_ODT_TYPE_16 | 在ODT级别使用类型特定的复制例程。WORD(16位)是复制例程支持的最大类型。GRANULARITY_ODT_ENTRY_SIZE_DAQ和GRANULARITY_ODT_ENTRY_SIZE_STIM定义最小类型。同一ODT内所有条目应为相同类型。每个ODT条目的长度和地址必须满足ODT类型的对齐要求。必须考虑MAX_ODT_ENTRY_SIZE_DAQ和MAX_ODT_ENTRY_SIZE_STIM。 |
| OM_ODT_TYPE_32 | 在ODT级别使用类型特定的复制例程。DWORD(32位)是复制例程支持的最大类型。其余约束同OM_ODT_TYPE_16。 |
| OM_ODT_TYPE_64 | 在ODT级别使用类型特定的复制例程。QWORD(64位)是复制例程支持的最大类型。其余约束同OM_ODT_TYPE_16。 |
| OM_ODT_ALIGNMENT | 一个ODT内允许所有类型的数据。但必须按对齐顺序排列:大数据类型在前,小数据类型在后。每个ODT条目的长度和地址必须满足对齐要求。必须考虑GRANULARITY和MAX_ODT_ENTRY_SIZE参数。 |
| OM_MAX_ENTRY_SIZE | 仅支持固定长度的ODT条目(例如16字节的数据块)。长度由MAX_ODT_ENTRY_SIZE_DAQ和MAX_ODT_ENTRY_SIZE_STIM定义。长度和地址必须满足由GRANULARITY_ODT_ENTRY_SIZE_DAQ和GRANULARITY_ODT_ENTRY_SIZE_STIM确定的对齐要求。 |
配置不匹配的处理
如果ODT的配置不符合所请求的优化方法:
-
从站可以回复ERR_DAQ_CONFIG消息,表示此配置无法处理。此时所有DAQ列表的配置无效。
-
从站实现可以是宽容的(tolerant)。在这种情况下,它将处理该配置,但以非最优方式进行。
按位激励(Bitwise stimulation)
GET_DAQ_PROCESSOR_INFO中DAQ_PROPERTIES的BIT_STIM_SUPPORTED标志指示从站是否支持按位数据激励。
WRITE_DAQ 中的BIT_OFFSET字段允许传输表示位状态的数据激励元素。
-
对于DIRECTION = DAQ的DAQ列表中的MEASUREMENT,关键字BIT_MASK描述应用于测量数据的掩码,以确定单个位的状态。
-
对于DIRECTION = STIM的DAQ列表中的MEASUREMENT,关键字BIT_MASK描述需要激励的位的位置。主站必须将BIT_MASK转换为BIT_OFFSET。
转换示例:Bit7 → BIT_MASK = 0x80 → BIT_OFFSET = 0x07
| BIT_OFFSET值 | 含义 |
|---|---|
| 0xFF | 忽略此字段,WRITE_DAQ应用于以字节表示大小的普通数据元素 |
| 0x00 ~ 0x1F | ODT条目描述表示一个位状态的元素。此时DAQ元素的大小必须始终等于GRANULARITY_ODT_ENTRY_SIZE_x。元素值=0则位值=0;元素值>0则位值=1。 |
传输方向(Synchronous Data Transfer DIRECTION)
同步数据采集(DAQ)
通过DIRECTION标志,DAQ列表可设置为同步数据采集模式。通过PID范围为 0x00 ≤ PID ≤ 0xFB 的DAQ,从站必须将DAQ列表中每个ODT定义的元素内容传输给主站。
处理规则
-
ODT级别:处理ODT时,从站一旦在当前ODT中找到size = 0的元素,或已处理完该ODT的所有ODT条目,即可转到下一个ODT。
-
DAQ列表级别:处理DAQ列表时,从站一旦在该DAQ列表第一个ODT的第一个ODT条目中找到size = 0的元素,或已处理完该DAQ列表的所有ODT,即可转到下一个DAQ列表。
采样一致性与过载(OVERLOAD)
从站必须一致地采样元素。触发DAQ列表时,从站至少必须以一致的方式采样同一个ODT的数据,因此ODT级别的一致性始终得到保证。然而,从站可能需要一些时间来采样和传输包含所有ODT的完整DAQ列表。
如果在前一个周期的传输完成之前触发了新的事件周期,从站处于**"OVERLOAD situation"(过载情况)。从站设备可向主站指示此过载情况。过载指示的类型由GET_DAQ_PROCESSOR_INFO中DAQ_PROPERTIES的OVERLOAD_x**标志指示。从站对过载情况的反应是实现相关的。
商用车工程实践:在发动机ECU高速采集场景(如1ms任务周期采集曲轴信号),OVERLOAD是常见问题。优化手段包括:合理规划ODT条目布局(利用OM_ODT_TYPE_32等优化方法减少复制开销)、使用预分频器降低非关键信号采样率、利用DAQ列表优先级确保关键信号不被低优先级信号阻塞。
同步数据激励(STIM)
同步数据激励是同步数据采集的反向模式。通过DIRECTION标志,DAQ列表可设置为同步数据激励模式。
激励数据在DTO包中传输。ODT描述DTO与从站内存之间的映射。通过PID范围为 0x00 ≤ PID ≤ 0xBF 的STIM,主站必须将DAQ列表中每个ODT定义的元素内容传输给从站。
STIM处理器缓冲传入的数据激励包。当触发数据激励模式DAQ列表的事件发生时,缓冲的数据被传输到从站设备的内存。
PID范围差异:DAQ方向PID范围为0x00~0xFB(252个),STIM方向PID范围为0x00~0xBF(192个)。STIM的PID范围更窄,因为部分高PID值预留给其他用途。
旁路(BYP,Bypassing)
旁路可以通过同时使用同步数据采集和同步数据激励来实现。除了这两个基本功能外,最先进的旁路还需要对被旁路功能进行管理------此功能不属于本规范范围。
从站应对通过数据激励接收的数据执行合理性检查(plausibility checks)。这些检查的边界和动作由标准标定方法设置,不需要特殊的XCP命令。
商用车应用场景:旁路(Bypassing)在商用车ECU快速原型开发中广泛使用。例如,在整车控制器(VCU)开发初期,将原车扭矩计算算法旁路,用外部快速原型机(如dSPACE MicroAutoBox)运行新算法,通过XCP的DAQ采集原车传感器数据、STIM注入新算法输出,实现HIL(硬件在环)或实车快速验证。
在线标定(Online Calibration)
在线标定是XCP的第二大核心功能,允许主站在ECU运行时读写标定数据(如MAP曲线、参数阈值、标定常量),并通过分页机制实现标定数据的安全切换与持久化。
基本模型
SECTOR、SEGMENT与PAGE概述
从站内存布局被描述为一个连续的物理空间。元素通过40位地址引用(32位XCP地址 + 8位XCP地址扩展)。
三个核心抽象层次:
| 抽象 | 英文 | 定义与用途 |
|---|---|---|
| 扇区 | SECTOR | 描述物理布局。SECTOR的起始地址和大小在重新编程(Flash烧录)从站设备时非常重要。 |
| 段 | SEGMENT | 描述逻辑布局 。SEGMENT描述可标定数据对象在从站内存中的位置。SEGMENT的起始地址和大小不必遵守SECTOR布局的限制。 |
| 页 | PAGE | 每个SEGMENT可以有多个PAGE。同一SEGMENT的PAGE描述相同地址上的相同数据,但具有不同的属性(例如不同的值或读/写访问权限)。 |

双活动页机制
XCP引入了两个独立的"活动页"概念,可独立切换:
-
ECU访问活动页(active PAGE for ECU access):从站控制算法在任何时刻(对每个SEGMENT)只能访问一个PAGE,该PAGE称为此SEGMENT的"ECU访问活动页"。
-
XCP访问活动页(active PAGE for XCP access):使用XCP命令引用数据时,XCP主站在任何时刻(对每个SEGMENT)只能访问一个PAGE,该PAGE称为此SEGMENT的"XCP访问活动页"。
核心设计 :ECU访问活动页和XCP访问活动页可以独立切换。活动页可以针对每个SEGMENT独立切换。这意味着标定工程师可以在XCP访问页上修改标定数据(不影响ECU运行),确认无误后再一次性切换ECU访问页,实现"无扰动标定切换"。
SEGMENT逻辑布局
从站内存的逻辑布局由SEGMENT对象描述。SEGMENT描述可标定数据对象在从站内存中的位置。SEGMENT的起始地址和大小不必遵守SECTOR布局的限制。
-
SEGMENT使用标准ASAM MCD2关键字MEMORY_SEGMENT描述,包含Name、Address、Size和镜像段偏移等信息。
-
XCP特定信息位于IF_DATA部分中。
-
为实现40位地址空间,每个SEGMENT都有一个地址扩展,对位于该SEGMENT内的所有可标定对象有效。
-
XCP通过SEGMENT_NUMBER引用SEGMENT。
-
同一XCP从站设备内,SEGMENT_NUMBER从0开始且必须连续:SEGMENT_NUMBER ∈ 0, 1, .., 255。
PAGE可访问性(Accessability)
每个SEGMENT可以有多个PAGE。同一SEGMENT的PAGE描述相同地址上的相同数据,但具有不同属性(如不同的值或读/写访问权限)。
-
每个SEGMENT始终至少有1个PAGE,称为PAGE 0。
-
从站必须初始化其所有SEGMENT的所有PAGE。
-
PAGE的INIT_SEGMENT的PAGE 0包含PAGE的初始数据。
-
通过GET_CAL_PAGE,主站可以获取从站当前XCP和ECU访问的活动PAGE。
-
每个SEGMENT内,PAGE的编号(PAGE_NUMBER)从0重新开始:PAGE_NUMBER(Segment j) ∈ 0, 1, .., 255。
访问权限标志
ECU_ACCESS_x标志指示ECU是否以及如何访问此页:
- ECU可以访问此PAGE时,ECU_ACCESS_x标志指示ECU是否仅在XCP主站不同时 访问此PAGE时才能访问,还是仅在XCP主站同时 访问此页时才能访问,还是ECU不关心XCP主站是否同时访问此页。
XCP_x_ACCESS_y标志指示XCP主站是否以及如何访问此页,根据XCP主站对此页的访问类型(READABLE和/或WRITEABLE)进行区分:
-
XCP_READ_ACCESS_x:指示XCP主站是否仅在ECU不同时访问此PAGE时才能读取,还是仅在ECU同时访问此页时才能读取,还是XCP主站不需要关心ECU是否同时访问此页。
-
XCP_WRITE_ACCESS_x:指示XCP主站是否仅在ECU不同时访问此PAGE时才能写入,还是仅在ECU同时访问此页时才能写入,还是XCP主站不需要关心ECU是否同时访问此页。
可选特性
标定数据页切换(Calibration Data Page Switching)
如果从站支持可选命令GET_CAL_PAGE 和SET_CAL_PAGE,则支持页切换。
-
GET_CAL_PAGE:主站请求从站回复此SEGMENT当前ECU或XCP访问的活动PAGE。
-
SET_CAL_PAGE:主站设置此SEGMENT当前ECU或XCP访问的活动PAGE。
控制权原则 :主站对页切换拥有完全控制权 。从站不能自主切换其页面。ECU访问活动页和XCP访问活动页可以独立切换,活动页可以针对每个SEGMENT独立切换。主站还可以将所有SEGMENT同步切换到同一PAGE。主站必须遵守XCP_ACCESS_TYPE和ECU_ACCESS_TYPE给出的约束。
标定数据页冻结(Calibration Data Page Freezing)
GET_PAG_PROCESSOR_INFO中PAG_PROPERTIES的FREEZE_SUPPORTED标志指示所有SEGMENT是否可设置为FREEZE模式。
-
SET_SEGMENT_MODE:主站选择要冻结的SEGMENT。
-
GET_SEGMENT_MODE:主站识别SEGMENT是否已被选择为FREEZING。
-
SET_REQUEST中的STORE_CAL_REQ:主站请求从站将标定数据保存到非易失性存储器。
冻结机制:对于每个处于FREEZE模式的SEGMENT,从站必须将此SEGMENT的当前活动XCP PAGE保存到此PAGE的INIT_SEGMENT的PAGE 0中。
GET_STATUS获取的STORE_CAL_REQ位在请求完成后由从站复位。从站可通过发送EV_STORE_CAL事件包指示。
页冻结 vs 页切换的区别:页切换(Page Switching)是运行时在多个标定页之间切换,不涉及非易失性存储;页冻结(Page Freezing)是将当前XCP活动页的标定数据固化到非易失性存储器的初始页(PAGE 0 of INIT_SEGMENT),实现标定参数的持久化,确保下一次上电后使用新的标定值。
标定操作
寻址(Addressing)
从站内存布局被描述为一个连续的物理空间。元素通过40位地址引用(32位XCP地址 + 8位XCP地址扩展)。地址扩展取自当前引用地址所属的SEGMENT。
地址范围与归属判断
MEMORY_SEGMENT处的地址范围描述了主站可以生成可编程到从站并导致正常运行从站的文件的地址。
为检查CHARACTERISTIC是否属于MEMORY_SEGMENT,主站必须:
-
取CHARACTERISTIC处写入的地址
-
如适用,应用ECU_CALIBRATION_OFFSET
-
如适用,解引用NearPointer
-
检查结果地址是否属于MEMORY_SEGMENT
目标地址计算(用于SET_MTA、SHORT_UPLOAD、SHORT_DOWNLOAD)
对于这些命令中使用的(目标)地址,主站必须:
-
按上述方法计算地址(取CHARACTERISTIC地址 → 应用ECU_CALIBRATION_OFFSET → 解引用)
-
如适用,应用从计算出的(源)地址到映射(目标)地址的ADDRESS_MAPPING

ADDRESS_MAPPING对于SEGMENT的不同部分可以不同。
主从访问(Master - slave)
从站必须支持对所有用SECTOR或SEGMENT描述的地址范围的校验和计算。校验和计算必须对所有具有XCP_ACCESS_ALLOWED的PAGE都可行。
读/写命令与PAGE权限映射
| PAGE权限 | 可用命令 | 说明 |
|---|---|---|
| READABLE(可读) | UPLOAD、SHORT_UPLOAD | 标准模式;如支持块模式则也可在块模式下使用 |
| WRITEABLE(可写) | SHORT_DOWNLOAD、DOWNLOAD_MAX | 标准模式 |
| WRITEABLE(可写) | DOWNLOAD、DOWNLOAD_NEXT | DOWNLOAD标准模式;DOWNLOAD_NEXT需块模式支持 |
| WRITEABLE(可写) | MODIFY_BITS | 允许以原子方式修改位 |
页间复制(Page -- page)
如果XCP从站设备有多个PAGE,主站可以使用COPY_CAL_PAGE命令将数据从一个PAGE复制到另一个PAGE。
原则上,任何SEGMENT的任何PAGE都可以复制到任何SEGMENT的任何PAGE。但可能存在限制,从站通过以下错误码指示:
-
ERR_PAGE_NOT_VALID:PAGE无效
-
ERR_SEGMENT_NOT_VALID:SEGMENT无效
-
ERR_WRITE_PROTECTED:写保护
Flash编程(Flash Programming)
Flash编程是XCP的第三大核心功能,用于ECU开发阶段的程序烧录。XCP提供了专门的编程命令,支持两种访问模式,并可选用块传输模式加速。
烧录模型
SECTOR物理布局
从站内存的物理布局由SECTOR对象描述。SECTOR的起始地址和大小在重新编程(Flash烧录)从站设备时非常重要。
-
SECTOR通过SECTOR_NUMBER引用。
-
同一XCP从站设备内,SECTOR_NUMBER从0开始且必须连续:SECTOR_NUMBER ∈ 0, 1, .., 255。
概述
Flash过程三步骤
原则上,完整的Flash过程可分为三个步骤,具体用例是否需要全部步骤取决于视角:
-
前期管理(administration before):例如版本控制------检查新Flash内容是否适配ECU,需要ECU标识信息和新Flash内容标识信息。
-
原始Flash过程(original flash process):仅编程动作。这是XCP命令的焦点。
-
后期管理(administration below):例如版本或校验和控制。
XCP的边界:XCP不支持Flash过程的特殊版本控制命令。前期管理动作非常项目特定,取决于ECU需要哪些服务。ECU功能描述可以指定使用哪些标准XCP命令进行前期版本控制。后期版本控制动作可以在ECU内部完成,XCP支持一些灵活命令。
Flash编程命令列表(无序列定义)
| 命令 | 说明 |
|---|---|
| PROGRAM_START | 编程会话开始 |
| PROGRAM_CLEAR | 擦除Flash区域 |
| PROGRAM_FORMAT | 设置编程格式 |
| PROGRAM(循环) | 编程数据,可循环调用。也可选用块传输模式。 |
| PROGRAM_VERIFY | 编程验证 |
| PROGRAM_RESET | 编程会话结束,通常执行硬件复位 |
项目特定约定:所有命令的项目特定使用必须在项目特定的"programming flow control"(编程流程控制)中指定。本文档不为这个额外描述文件指定标准。实践中,每个项目都需要ECU和工具供应商之间达成项目特定协议。商用车主机厂在引入新ECU平台时,应与供应商明确此流程控制文档。
两种Flash访问模式
原始Flash过程可以用不同概念完成。XCP协议支持两种不同的Flash访问方法:
-
绝对访问模式(Absolute Access Mode):按地址访问
-
功能访问模式(Functional Access Mode):按Flash区域访问
两种方法使用相同的命令,但有时参数不同。可以混合使用,即擦除阶段使用一种访问方法,编程阶段使用另一种。推荐概念基于可用的地址和内存信息,并在项目特定编程流程控制中指定。
绝对访问模式(Absolute Access Mode):按地址访问
此模式基于一些条件,用作默认模式。Flash设备的物理布局对工具是已知的,要编程的Flash内容可用,数据的地址信息也可用。
物理布局信息是否由描述文件支持或可从ECU读出,取决于项目。存在不同的可选XCP命令用于获取不同信息。此外,工具需要所有必要的序列信息,这些信息必须在项目特定编程流程控制中指定。
编程机制
CTO中包含的指定长度(size)的数据块将被编程到非易失性存储器中,从MTA (内存传输地址)开始。MTA将在编程后按数据字节数递增(post-incremented)。

-
数据块可能被加密和/或压缩。
-
XCP传输允许Flash间隙(新Flash内容区域内缺失的地址)。
功能访问模式(Functional Access Mode):按Flash区域访问
此模式适用于两种不同用例。工具不需要内存映射信息,也不需要要编程的Flash内容的地址信息。
工具只需要关于Flash区域的信息,并以不同方式使用地址信息。地址信息表示与下载软件相关的相对指针,从零开始。此模式在与压缩或加密的下载软件结合使用时非常有用。在这种用例中,物理地址与其背后的内容之间没有直接关系。
编程机制
CTO中包含的指定长度(size)的数据块将被编程到非易失性存储器中。ECU软件自动知道新Flash内容的起始地址,这取决于PROGRAM_CLEAR命令。ECU期望新Flash内容在一个数据流中,分配由ECU自动完成。
块序列计数器(Block Sequence Counter)
在功能访问模式下,MTA用作块序列计数器,在主站和从站内部计数。块序列计数器允许在多个编程请求序列中某个编程服务失败时改进错误处理。
-
从站的块序列计数器在收到PROGRAM_FORMAT请求消息时初始化为1。
-
这意味着PROGRAM_FORMAT之后的第一个PROGRAM请求消息以块序列计数器1开始。
-
每个后续数据传输请求其值递增1。
-
达到最大值时,块序列计数器回绕,下一个数据传输请求从0x00开始。

错误处理机制(类ISO 14229-1 / ISO 15765-3)
功能访问模式的行为类似于ISO 14229-1(道路车辆 - 诊断服务 - 第1部分:规范和要求)和ISO 15765-3(道路车辆 - CAN诊断 - 第3部分:诊断服务实现)。
场景1:PROGRAM请求正确接收和处理,但正响应未到达主站
-
主站判定应用层超时,重复相同请求(包含相同块序列计数器)。
-
从站收到重复的PROGRAM请求,根据包含的块序列计数器判定这是重复请求。
-
从站立即发送正响应消息,不再将数据写入内存。
场景2:PROGRAM请求未在从站正确接收
-
从站不发送正响应消息。
-
主站判定应用层超时,重复相同请求(包含相同块序列计数器)。
-
从站收到重复的PROGRAM请求,根据包含的块序列计数器判定这是新请求。
-
从站处理服务并发送正响应消息。
在Flash会话结束时,可以可选地切换回绝对访问模式。
受影响命令:PROGRAM_CLEAR、PROGRAM_FORMAT、PROGRAM、SET_MTA
校验和控制与程序验证(Checksum Control and Program Verify)
原始Flash过程后,版本控制是有帮助的。此动作检查新Flash内容是否适配Flash的其余部分。实践中存在不同方法,但XCP仅支持校验和控制和内部测试例程的启动。
-
校验和方法:可以使用标准校验和命令(在工具内检查)完成。
-
从站内检查:XCP支持在从站内进行检查。工具可以启动从站内部测试例程,并向从站发送验证值。
受影响命令:BUILD_CHECKSUM、PROGRAM_VERIFY
烧录会话结束(End of Flash Session)
整个编程序列的结束由PROGRAM_RESET命令指示。从站设备将进入断开连接状态。通常会执行从站设备的硬件复位。
受影响命令:PROGRAM_RESET
XCP协议机制
拓扑(Topology)
XCP协议基本上是**单主/单从(single-master/single-slave)**类型的通信。任何通信始终由主站发起,从站必须根据主站的请求以适当的响应进行回应。
"软"主从原则
XCP协议使用"软"主从原则。一旦主站与从站建立了通信通道,从站被允许自主发送某些消息:
-
事件包(Events)
-
服务请求包(Service Requests)
-
数据采集消息(Data Acquisition messages)
同样,主站发送数据激励消息时,不期望从站的直接响应。
点对点连接
主站在建立通信通道时,与1个特定从站构建一个连续的、逻辑的、明确的点对点连接。从站设备驱动程序不能 处理多个连接。

拓扑约束
| 拓扑类型 | 是否允许 |
|---|---|
| 单主/单从(点对点) | ✅ 基本拓扑 |
| 单主/多从(广播) | ❌ 不允许。主站不得同时向多个从站广播XCP消息。唯一例外:CAN上的GET_SLAVE_ID可以广播。 |
| 多组单主/单从并存 | ✅ 允许。多个"单主/单从"通信通道可以在同一网络中同时活动。传输层的标识参数(如CAN上的CAN标识符)必须选择为构建独立且明确可区分的通信通道。 |
| 网关(Gateway) | ✅ 允许。网关必须能够根据主网络和远程网络使用的传输层适配XCP头和尾。网关必须在主网络中逻辑表示其远程网络的节点。 |
网络定义
-
主网络(Master Network):主站直接连接的网络。
-
远程网络(Remote Network):主站通过网关间接连接的网络。
网关拓扑示例
| 场景 | CAN标识符配置 |
|---|---|
| 主站 ↔ 从站1(直连) | 主站发送 CAN-ID = 0x100(主网络);从站1发送 CAN-ID = 0x110(主网络) |
| 主站 ↔ 从站2(直连) | 主站发送 CAN-ID = 0x200(主网络);从站2发送 CAN-ID = 0x210(主网络) |
| 主站 ↔ 从站3(从站2作网关) | 主站发送 CAN-ID = 0x300 到从站2(主网络);从站2发送 CAN-ID = 0x100 到从站3(远程网络);从站3发送 CAN-ID = 0x110 到从站2(远程网络);从站2发送 CAN-ID = 0x310(主网络) |
示例网络参数:主网络 = CAN 500000 bps,远程网络 = CAN 250000 bps。
通信模型(The XCP communication models)
标准通信模型(Standard communication model)
在连接状态下,每个请求包将由对应的响应包或错误包回应。
关键约束 :在标准通信模型中,主站设备在收到前一个请求的响应之前,不得 发送新请求。这是严格的请求-应答同步模型。

块传输通信模型(Block Transfer communication model)
在XCP标准通信模式中,每个请求包由单个响应包或错误包回应。为加速内存上传、下载和Flash编程,XCP命令UPLOAD、SHORT_UPLOAD、DOWNLOAD、SHORT_DOWNLOAD和PROGRAM可支持块传输模式,类似于ISO/DIS 15765-2。
互斥约束 :块传输通信模式与交错通信模式互斥,不能同时使用。
主站块传输(Master Block Transfer)

-
GET_COMM_MODE_INFO中COMM_MODE_OPTIONAL的MASTER_BLOCK_MODE_SUPPORTED指示主站是否可使用主站块传输模式。
-
从站设备可能对最大块大小和最小分离时间有限制。
-
通信参数MIN_ST (最小分离时间)和MAX_BS(最大块大小)通过GET_COMM_MODE_INFO命令获取。
-
主站设备有责任遵守这些限制。
从站块传输(Slave Block Transfer)

-
CONNECT中COMM_MODE_BASIC的SLAVE_BLOCK_MODE_SUPPORTED指示从站是否支持从站块传输模式。
-
主站设备不允许有任何限制。后续响应的分离时间可以为0。
-
主站设备必须支持最大可能的块大小。
交错通信模型(Interleaved communication model)

在标准通信模型中,主站设备在收到前一个请求的响应之前不得发送新请求。为加速数据传输,在交错通信模式中,主站可以在收到前一个请求的响应之前就发送下一个请求(流水线模式)。
-
GET_COMM_MODE_INFO的INTERLEAVED_MODE_SUPPORTED指示主站是否可使用交错模式。
-
从站设备可能对其可缓冲的最大连续请求数有限制。
-
通信参数QUEUE_SIZE通过GET_COMM_MODE_INFO命令获取。
-
主站设备有责任遵守此限制。
互斥约束 :交错通信模式与块传输通信模式互斥。
状态机(State machine)
XCP从站有三个主要状态:DISCONNECTED、CONNECTED、RESUME。

DISCONNECTED状态
-
XCP从站设备开始运行时,必须检查非易失性存储器中是否有可用于RESUME模式的DAQ列表配置。如果没有,从站进入DISCONNECTED状态。
-
在DISCONNECTED状态下,没有XCP通信。会话状态、所有DAQ列表和保护状态位被复位,意味着DAQ列表传输不活动,所有受保护功能需要seed and key过程。
-
在DISCONNECTED状态下,从站除了CONNECT外不处理任何XCP命令。
-
在CAN上,从站除了CONNECT外还接受GET_SLAVE_ID。
CONNECTED状态
-
CONNECT命令建立与从站的连续、逻辑、点对点连接,并将从站带入CONNECTED状态。
-
在CONNECTED状态下,从站通过响应对应的响应包或错误包来处理任何XCP命令包。
-
在CONNECTED状态下,如果主站发送DISCONNECT命令,从站进入DISCONNECTED状态。
-
在CONNECTED状态下,从站必须确认新的CONNECT,并像对待断开连接设备的CONNECT命令一样处理它。
RESUME状态
-
如果从站在启动运行时检测到非易失性存储器中有可用于RESUME模式的DAQ列表配置,从站进入RESUME状态。
-
在RESUME状态下,从站必须自动启动存储在非易失性存储器中且要用于RESUME模式的那些DAQ列表。
-
在RESUME状态下,从站除了CONNECT外不处理任何XCP命令。
-
在RESUME状态下,从站必须确认CONNECT,并像对待断开连接设备的CONNECT命令一样处理它,但保持当前DTO传输运行。
错误严重级别与状态转换
| 严重级别 | 名称 | 对状态机的影响 |
|---|---|---|
| S0 | Information(信息) | 不改变状态 |
| S1 | Warning(警告) | 不改变状态 |
| S2 | Error(错误) | 不改变状态 |
| S3 | Fatal Error(致命错误) | 将从站带入DISCONNECTED状态 |
CONNECT命令的两种模式
CONNECT(Mode = USER_DEFINED)
主站可以启动与从站的XCP通信,同时告诉从站应进入特殊的(用户定义)模式,该模式对从站XCP驱动程序的行为没有影响。
-
对于CONNECT(USER_DEFINED)命令,正常的超时处理规则不适用。
-
主站必须持续向从站发送CONNECT(USER_DEFINED),直到收到确认。
-
主站必须在命令之间使用超时值t6。
-
主站只需重复CONNECT(USER_DEFINED),无需任何SYNCH、预动作或动作。

CONNECT(Mode = NORMAL)
主站可以启动与从站的XCP通信,进入正常模式。
XCP消息(帧)格式
XCP消息始终在特定传输层(如CAN、TCP/IP、UDP/IP)的数据字段中传输。
传输层要求
-
消息的长度和内容不得改变
-
消息的序列不得改变
-
消息不得重复
帧结构
XCP消息(=帧)由三部分组成:XCP Header (XCP头)、XCP Packet (XCP包)、XCP Tail (XCP尾)。

| 组成部分 | 说明 |
|---|---|
| XCP Packet | 包含协议的通用部分,与使用的传输层无关。由标识字段(Identification Field)、可选时间戳字段(Timestamp Field)和数据字段(Data Field)组成。具体内容见XCP规范Part 2"协议层规范"。 |
| XCP Header | 取决于使用的传输层。由控制字段(Control Field)组成。 |
| XCP Tail | 取决于使用的传输层。由控制字段组成。 |
XCP Header和Tail的控制字段在不同传输层(如CAN、TCP/IP、UDP/IP)的具体内容,见XCP规范Part 3"传输层规范"。
性能参数极限(The Limits of Performance)
本章定义XCP协议的各类性能参数极限,包括通用参数和DAQ/STIM特定参数。这些参数在从站CONNECT响应或GET_XXX_INFO命令中上报,主站据此进行配置和资源规划。
通用性能参数
| 名称 | 类型 | 表示 | 取值范围 | 说明 |
|---|---|---|---|---|
| MAX_CTO | Parameter | BYTE | 0x08 -- 0xFF | CTO包的最大长度(字节) |
| MAX_DTO | Parameter | WORD | 0x0008 -- 0xFFFF | DTO包的最大长度(字节) |
说明:这两个协议参数的实际范围可能更小,取决于使用的传输层。例如,XCP on CAN受CAN数据场最大8字节(标准帧)或64字节(CAN FD)限制,MAX_CTO和MAX_DTO的实际值会远小于协议定义的上限。
DAQ/STIM特定性能参数
事件通道参数
| 名称 | 类型 | 表示 | 取值范围 |
|---|---|---|---|
| MAX_EVENT_CHANNEL | Parameter | WORD | 0x0000 -- 0xFFFF |
| MAX_EVENT_CHANNEL_ABS | Constant | WORD | 0xFFFF |
| EVENT_CHANNEL_NUMBER | Parameter | WORD | 0x0000 -- 0xFFFE |
| EVENT_CHANNEL_NUMBER_MAX | Parameter | WORD | MAX_EVENT_CHANNEL -- 1 |
| EVENT_CHANNEL_NUMBER_MAX_ABS | Constant | WORD | 0xFFFE |
MAX_EVENT_CHANNEL指示XCP从站上的事件通道数量。事件通道由EVENT_CHANNEL_NUMBER标识,从0开始计数。
DAQ列表参数
| 名称 | 类型 | 表示 | 取值范围 |
|---|---|---|---|
| MAX_DAQ | Parameter | WORD | 0x0000 -- 0xFFFF |
| MAX_DAQ_ABS | Constant | WORD | 0xFFFF |
| DAQ_COUNT | Parameter | WORD | 0x0000 -- 0xFFFF |
| MIN_DAQ | Parameter | BYTE | 0x00 -- 0xFF |
| DAQ_LIST_NUMBER | Parameter | WORD | 0x0000 -- 0xFFFE |
-
MAX_DAQ:XCP从站上的DAQ列表数量。DAQ列表由DAQ_LIST_NUMBER标识,从0开始计数。
-
MIN_DAQ:XCP从站上预定义的、只读DAQ列表数量。
-
DAQ_COUNT:用于动态配置的DAQ列表数量。
ODT条目参数
| 名称 | 类型 | 表示 | 取值范围 |
|---|---|---|---|
| MAX_ODT_ENTRIES | Parameter | BYTE | 0x00 -- 0xFF |
| ODT_ENTRIES_COUNT | Parameter | BYTE | 0x00 -- 0xFF |
| ODT_ENTRY_NUMBER | Parameter | BYTE | 0x00 -- 0xFE |
-
MAX_ODT_ENTRIES:XCP从站ODT中的最大条目数。
-
ODT_ENTRIES_COUNT:使用动态DAQ列表配置时ODT中的条目数。
-
条目由ODT_ENTRY_NUMBER标识,从0开始计数。
DAQ特定参数(ODT数量)
| 名称 | 类型 | 表示 | 取值范围 |
|---|---|---|---|
| MAX_ODT | Parameter | BYTE | 0x00 -- 0xFC |
| ODT_COUNT | Parameter | BYTE | 0x00 -- 0xFC |
| ODT_NUMBER | Parameter | BYTE | 0x00 -- 0xFB |
-
MAX_ODT:XCP从站的最大ODT数量。
-
ODT_COUNT:使用动态DAQ列表配置时DAQ列表的ODT数量。
-
ODT由ODT_NUMBER标识,从0开始计数。
STIM特定参数(ODT数量)
| 名称 | 类型 | 表示 | 取值范围 |
|---|---|---|---|
| MAX_ODT | Parameter | BYTE | 0x00 -- 0xC0 |
| ODT_COUNT | Parameter | BYTE | 0x00 -- 0xC0 |
| ODT_NUMBER | Parameter | BYTE | 0x00 -- 0xBF |
DAQ vs STIM参数差异:注意DAQ方向的ODT_NUMBER上限为0xFB(251),STIM方向的ODT_NUMBER上限为0xBF(191)。这与PID范围一致------DAQ方向PID范围0x00~0xFB,STIM方向PID范围0x00~0xBF。STIM的可用PID/ODT数量更少,因为高PID值被预留给其他用途。
版本管理(Versioning)
XCP采用协议层与传输层分离的版本管理机制,两层各自独立编号,通过兼容性矩阵确保互操作。
XCP协议层版本号(The XCP Protocol Layer Version Number)
XCP规范Part 2"协议层规范"描述XCP Packet的内容。XCP Packet是协议中与传输层无关的通用部分。
-
XCP协议层版本号指示协议层规范的版本,是一个16位值。
-
高字节递增:当协议层以需要从站驱动软件功能修改的方式修改时,高字节递增。例如:修改现有命令的参数,或向规范添加新命令。
-
低字节递增:当协议层以对从站驱动软件没有直接影响的方式修改时,低字节递增。例如:改写解释文本,或修改AML描述。
-
从站在CONNECT响应中仅返回XCP协议层版本号的最高有效字节。
XCP传输层版本号(The XCP Transport Layer Version Number)
XCP规范Part 3"传输层规范"描述不同传输层(如CAN、TCP/IP、UDP)的控制字段内容,以及特定传输层可能的额外包。
-
独立于Part 2,每个Part 3都有自己的XCP传输层版本号。
-
XCP传输层版本号指示特定Part 3规范的版本,是一个16位值。
-
高字节递增:当特定Part 3以需要从站驱动软件功能修改的方式修改时,高字节递增。
-
低字节递增:当特定Part 3以对从站驱动软件没有直接影响的方式修改时,低字节递增。
-
从站在CONNECT响应中仅返回当前传输层的XCP传输层版本号的最高有效字节。
兼容性矩阵(The Compatibility Matrix)
描述支持多种传输层XCP从站的main.a2l包含一个XCP_definitions.aml,其中包含对特定版本协议层规范的引用,以及对特定版本传输层规范的引用。
-
如果特定版本的协议层规范需要特定版本的传输层规范,这将在协议层规范中作为前提条件提及。
-
如果特定版本的传输层规范需要特定版本的协议层规范,这将在传输层规范中作为前提条件提及。
-
兼容性矩阵发布在ASAM官网:www.asam.net,路径为"Standards / ASAM MCD / I. Current specifications",给出XCP协议层版本号和XCP传输层版本号允许组合的概览。
商用车主机厂工程建议:在ECU平台选型和标定工具链建设时,应要求供应商明确XCP协议层版本号和传输层版本号,并对照ASAM兼容性矩阵验证主站工具(如INCA、CANape)与从站ECU的版本兼容性。同时,A2L文件中的XCP_definitions.aml引用版本应与ECU实际实现版本一致,避免因版本不匹配导致标定功能异常。
附录:ASAM组织信息
| 项目 | 信息 |
|---|---|
| 组织名称 | ASAM e. V.(Association for Standardization of Automation and Measuring Systems) |
| 地址 | Arnikastraße 2, D-85635 Hoehenkirchen, Germany |
| 电话 | (+49) 8102 / 895317 |
| 传真 | (+49) 8102 / 895310 |
| 邮箱 | info@asam.net |
| 官网 | www.asam.net |
文档元信息
-
文档标题:XCP - Part 1 - Overview - 1.0
-
Doc-ID:XCP-Part 1-Overview-1.0
-
版本:1.0
-
状态:Released(已发布)
-
类型:Final(最终版)
-
发布日期:2003-04-08
-
作者:Roel Schuermans(Vector Informatik GmbH)等14人,来自Vector、DaimlerChrysler、Bosch、Siemens VDO、dSPACE、Compact Dynamics、ETAS、Accurate Technologies
-
页数:58页(A4)