XCP 版本 1.1第 1 部分 – 概述目录摘要引言0.1 XCP 协议家族0.2 文档概述0.3 定义和缩写0.4 XCP 数据类型与 ASAM 数据类型的映射XCP 特性1.1 同步数据传输1.1.1 同步数据传输模型基本DAQ、STIM 和 ODT 概述ODT 条目对象描述表ODTDAQ 列表事件通道1.1.2 同步数据传输模型可选特性动态 DAQ 配置高级特性DAQ 配置存储与上电数据传输、主从同步、优先级、ODT 优化、位级激励1.1.3 同步数据传输方向同步数据采集DAQ同步数据激励STIM1.2 测量模式轮询、标准突发、改进突发、交替1.3 旁路BYP1.4 在线标定1.5 Flash 编程XCP 协议拓扑、通信模型、状态机、保护处理、消息格式性能限制版本管理0. 引言0.1 XCP 协议家族本文档基于 CAN 标定协议CCP2.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 规范文档描述了 CCP 的改进和通用化版本。通用化的协议定义作为协议家族的标准称为XCP通用测量与标定协议Universal Measurement and Calibration Protocol。字母 “X” 代表该协议家族成员所使用的“各种”传输层例如XCP on CAN、XCP on TCP/IP、XCP on UDP/IP、XCP on USB等。注意XCP 不向后兼容现有的 CCP 实现。0.2 文档概述XCP 规范由 5 个部分组成每个部分是一份独立的文档第 1 部分 “概述”概述 XCP 协议家族、XCP 特性和基本协议定义本文档。第 2 部分 “协议层规范”定义独立于所用传输层的通用协议。第 3 部分 “传输层规范”定义 XCP 协议如何通过特定传输层如 CAN、TCP/IP、UDP/IP传输。第 4 部分 “接口规范”定义从 XCP 主设备到 ASAM MCD 2MC 描述文件的接口以及用于计算 Seed Key 算法和校验和的接口。第 5 部分 “示例通信序列”给出使用 XCP 执行典型操作的示例序列。本文档中未明确提及的任何内容均应视为实现特定的。0.3 定义和缩写缩写描述A2LASAM 2MC 语言文件的扩展名AMLASAM 2 元语言ASAM自动化与测量系统标准化协会BYP旁路BYPassingCAL标定CALibrationCAN控制器局域网CCPCAN 标定协议CMD命令CoMmanDCS校验和CheckSumCTO命令传输对象CTR计数器CounTeRDAQ数据采集Data AcQuisitionDTO数据传输对象ECU电子控制单元ERR错误包ERRorEVE事件包EVEntLEN长度LENgthMCD测量、标定和诊断MTA存储器传输地址ODT对象描述表PAG分页PAGingPGM编程ProGraMmingPID包标识符RES命令响应包RESponseSERV服务请求包SERVICESPI串行外设接口STD标准STanDardSTIM数据激励包STIMulationTCP/IP传输控制协议/互联网协议TS时间戳Time StampUDP/IP统一数据协议/互联网协议USB通用串行总线XCP通用标定协议0.4 XCP 数据类型与 ASAM 数据类型的映射XCP 数据类型ASAM 数据类型BYTEA_UINT8WORDA_UINT16DWORDA_UINT32DLONGA_UINT641. XCP 特性XCP 提供以下基本功能同步数据采集同步数据激励在线存储器标定读/写访问标定数据页面初始化和切换用于 ECU 开发目的的 Flash 编程XCP 提供以下可选的新功能多种传输层CAN、以太网、USB 等块通信模式交错通信模式动态数据传输配置带时间戳的数据传输数据传输同步数据传输优先级化原子位修改位级数据激励与 CCP 2.1 相比XCP 改进了以下功能兼容性和规范清晰度效率和吞吐量上电数据传输数据页面冻结自动配置Flash 编程XCP 的设计遵循以下原则最小化从设备资源消耗RAM、ROM、运行时间高效通信简化从设备实现1.1 同步数据传输1.1.1 同步数据传输模型基本1.1.1.1 概述DAQ、STIM 和 ODT图1ODT 列表组织结构位于从设备存储器中的数据元素通过数据传输对象DTO进行传输DAQ从设备到主设备和STIM主设备到从设备。对象描述表ODT描述了同步数据传输对象与从设备存储器之间的映射关系。同步数据传输对象由其包标识符PID标识PID 标识了描述该同步数据传输对象内容的 ODT其他7个字节所对应的地址 和 对应参数的长度。1.1.1.2 ODT 条目ODT 中的条目通过地址、地址扩展、元素大小以地址粒度 AG 为单位以及对于表示位的元素位偏移来引用数据元素。GRANULARITY_ODT_ENTRY_SIZE_x确定了 ODT 条目所引用的数据元素的最小大小。GRANULARITY_ODT_ENTRY_SIZE_x [BYTE] AG [BYTE]地址和大小必须满足关于GRANULARITY_ODT_ENTRY_SIZE_x的对齐要求Address[AG] mod (GRANULARITY_ODT_ENTRY_SIZE_x[BYTE] / AG[BYTE]) 0SizeOf(element)[AG] mod (GRANULARITY_ODT_ENTRY_SIZE_x[BYTE] / AG[BYTE]) 0GRANULARITY_ODT_ENTRY_SIZE_x的可能值为 {1, 2, 4, 8}。ADDRESS_GRANULARITY的可能值为 {1, 2, 4}。必须满足GRANULARITY_ODT_ENTRY_SIZE_x[BYTE] mod (ADDRESS_GRANULARITY[BYTE]) 0MAX_ODT_ENTRY_SIZE_x参数表示 ODT 条目所描述元素大小的上限以地址粒度为单位。SizeOf(element)[AG] MAX_ODT_ENTRY_SIZE_x[AG]如果从设备仅支持大小为 BYTE 的元素主设备必须将多字节数据元素拆分为单字节。ODT 条目通过ODT_ENTRY_NUMBER引用。1.1.1.3 对象描述表ODTODT 条目分组在 ODT 中。如果 DAQ 列表是静态配置的MAX_ODT_ENTRIES指定该 DAQ 列表中每个 ODT 的最大条目数。如果 DAQ 列表是动态配置的MAX_ODT_ENTRIES不固定为 0。对于每个 ODTODT 条目编号ODT_ENTRY_NUMBER从 0 重新开始ODT_ENTRY_NUMBER [0, 1, ... MAX_ODT_ENTRIES(DAQ list) - 1]1.1.1.4 DAQ 列表多个 ODT 可以分组为一个DAQ 列表。XCP 允许同时激活多个 DAQ 列表。每个 DAQ 列表的采样和传输由从设备中的独立事件触发参见SET_DAQ_LIST_MODE。图2DAQ 列表组织结构如果 DAQ 列表静态配置MAX_ODT指定该 DAQ 列表的 ODT 数量。如果动态配置MAX_ODT不固定为 0。MAX_DAQ是从设备中可用的 DAQ 列表总数包括预定义的不可配置 DAQ 列表由GET_DAQ_LIST_INFO中的PREDEFINED指示和可配置的 DAQ 列表。如果DAQ_CONFIG_TYPE dynamic则MAX_DAQ MIN_DAQ DAQ_COUNT。MIN_DAQ预定义 DAQ 列表的数量编号范围[0, 1, ... MIN_DAQ - 1]。DAQ_COUNT动态分配的 DAQ 列表数量。可配置 DAQ 列表的编号范围[MIN_DAQ, MIN_DAQ1, ... MAX_DAQ - 1]。对于每个 DAQ 列表ODT 编号ODT_NUMBER从 0 重新开始。在同一个 XCP 从设备中DAQ 列表编号范围从 0 开始且必须连续DAQ_LIST_NUMBER [0,1,...MIN_DAQ-1] [MIN_DAQ,...MAX_DAQ-1]为了降低期望的传输速率可对 DAQ 列表应用传输速率预分频器参见GET_DAQ_PROCESSOR_INFO中的PRESCALER_SUPPORTED标志。无降速时预分频值必须为 1降速时预分频值大于 1。仅允许对DIRECTION DAQ的 DAQ 列表使用预分频器。允许定义不包含任何条目的“虚拟”DAQ 列表。1.1.1.5 事件通道XCP 允许同时激活多个 DAQ 列表。每个 DAQ 列表的采样和传输由从设备中的独立事件触发。事件通道是有效决定数据传输时序的通用信号源。MAX_EVENT_CHANNEL可用事件通道的数量。对于每个事件通道MAX_DAQ_LIST表示可分配给该事件通道的最大 DAQ 列表数。MAX_DAQ_LIST 0x00表示该事件可用但当前无法使用0xFF表示无限制。XCP 允许事件通道的优先级化。该优先级是从设备的固定属性因此是只读的。事件通道优先级为FF的具有最高优先级。测量变量到事件通道的分配可以在 ASAM MCD 2MC 描述文件的DAQ_EVENT部分中控制可以是固定或可变的固定分配需在测量变量处定义FIXED_EVENT_LIST工具无法更改。可变分配可提供AVAILABLE_EVENT_LIST有效事件列表若不存在则 ECU 提供的所有事件通道均可由工具分配。默认分配可提供DEFAULT_EVENT_LIST工具可更改为不同分配。如果定义了AVAILABLE_EVENT_LIST则DEFAULT_EVENT_LIST中的事件通道必须是该测量变量AVAILABLE_EVENT_LIST的子集。1.1.2 同步数据传输模型可选特性1.1.2.1 动态 DAQ 配置对于可配置的 DAQ 列表从设备可以具有关于 DAQ 列表数量、每个 DAQ 列表的 ODT 数量以及每个 ODT 的 ODT 条目数量的固定限制。从设备也可以具备完全动态配置 DAQ 列表的能力。可配置 DAQ 列表是静态还是动态配置由GET_DAQ_PROCESSOR_INFO中DAQ_PROPERTIES的DAQ_CONFIG_TYPE标志指示。图3静态和动态 DAQ 列表配置动态配置时应用其他限制参数静态动态MAX_DAQ固定值MIN_DAQ DAQ_COUNTMAX_ODT固定值MAX_ODT_DAQ_ABS / MAX_ODT_STIM_ABSMAX_ODT_ENTRIES固定值MAX_ODT_ENTRIES_ABS, MAX_ODT_ENTRIES_DAQ_ABS, MAX_ODT_ENTRIES_STIM_ABS动态 DAQ 列表配置通过命令FREE_DAQ、ALLOC_DAQ、ALLOC_ODT和ALLOC_ODT_ENTRY完成。这些命令允许在上述限制内动态分配 DAQ 列表、ODT 和 ODT 条目。如果内存不足返回负响应ERR_MEMORY_OVERFLOW此时整个 DAQ 列表配置无效。动态配置时主设备必须遵循特定顺序首先发送FREE_DAQ。然后通过ALLOC_DAQ分配可配置的 DAQ 列表数。接着通过ALLOC_ODT为所有 DAQ 列表分配所有 ODT。最后通过ALLOC_ODT_ENTRY为所有 ODT 分配所有 ODT 条目。如果顺序错误例如在ALLOC_ODT后直接发ALLOC_DAQ而无FREE_DAQ从设备返回ERR_SEQUENCE。图4静态和动态 DAQ 配置序列1.1.2.2 高级特性1.1.2.2.1 DAQ 配置存储与上电数据传输将 DAQ 配置存储到非易失存储器在以下情况下有益在重复使用、未更改的测量配置中节省测量配置时间启用上电数据传输RESUME 模式。XCP 上电数据传输RESUME 模式自 XCP 1.0 起可用。从 XCP 1.1.0 开始也可以存储 DAQ 配置而不自动启动数据传输。通过START_STOP_DAQ_LIST(Select)主设备可选择要存储的 DAQ 列表。主设备需基于所选 DAQ 列表的当前配置计算会话配置 ID内部存储并发送给从设备SET_REQUEST。如果设置了STORE_DAQ_REQ_RESUME或STORE_DAQ_REQ_NO_RESUME且满足条件从设备将所有选中的 DAQ 列表保存到非易失存储器同时存储会话配置 IDGET_STATUS返回。这允许主设备验证自动启动的 DAQ 列表是否包含预期的配置。存储时从设备首先清除非易失存储器中可能已存在的任何 DAQ 配置。STORE_DAQ_REQ位在请求完成后由从设备复位可能通过发送EV_STORE_DAQ事件包指示。1.1.2.2.1.1 不带上电数据传输的 DAQ 配置存储目的支持更快地启动未更改的 DAQ 配置DAQ/STIM。IF_DATA中的STORE_DAQ_SUPPORTED条目指示从设备可以存储 DAQ 配置。图5不带启动的存储流程可通过SET_REQUEST (STORE_DAQ_REQ_NO_RESUME)存储配置。主设备通过检查GET_STATUS返回的会话配置 ID 来检测是否存储了配置非零表示存在。1.1.2.2.1.2 带上电数据传输的 DAQ 配置存储RESUME 模式RESUME 模式是状态机的一个状态。目的是使从设备上电后直接自动开始数据传输DAQ、STIM。GET_DAQ_PROCESSOR_INFO中DAQ_PROPERTIES的RESUME_SUPPORTED标志指示从设备可设置为 RESUME 模式。图6带启动的存储流程GET_STATUS可识别从设备是否处于 RESUME 模式。GET_DAQ_LIST_MODE可识别 DAQ 列表是否属于 RESUME 模式使用的配置。若设置STORE_DAQ_REQ_RESUME从设备内部将之前用START_STOP_DAQ_LIST(select)选中的 DAQ 列表的 RESUME 位置位。RESUME 模式允许 DAQ 和 STIM 两种方向。每次上电从设备恢复 DAQ 列表并发送EV_RESUME_MODE事件包包含会话配置 ID若支持时间戳则包含当前时间戳。对于DIRECTION DAQ的 DAQ 列表从设备自动开始发送 DAQ 包对于DIRECTION STIM的 DAQ 列表从设备自动准备接收 STIM 包甚至在任何 XCP 命令发送之前。RESUME 模式意味着数据传输仅在物理通信通道启动并运行后才开始。主设备和从设备需记住发送SET_REQUEST(STORE_DAQ_REQ_RESUME)时使用的所有通信参数上电后使用相同参数。上电时从设备的解锁状态可能不同于发送存储请求时的状态。1.1.2.2.2 主从同步GET_DAQ_CLOCK命令通过计算偏移量提供同步主设备和从设备时钟的方法。1.1.2.2.3 DAQ 列表优先级XCP 允许 DAQ 列表的优先级化。DTO 的有限长度加上优先级机制确保高优先级 DAQ 列表可以以可接受的延迟中断低优先级 DAQ 列表的传输。1.1.2.2.4 ODT 优化XCP 允许在 ODT 级别进行 DTO 优化。从设备实现可使用一个或多个特定拷贝例程以充分利用 CPU 架构进行数据拷贝。优化可以最小化运行时间或最大化有效数据传输速率或两者兼有。Optimization_Method属性指示从设备使用的优化方法类型。主设备应根据此方法配置 ODT。Optimization_Method 是全局 DAQ 属性位于GET_DAQ_PROCESSOR_INFO的DAQ_KEY_BYTE中。定义的优化方法OM_DEFAULT无特殊要求考虑粒度GRANULARITY_ODT_ENTRY_SIZE_x和最大大小MAX_ODT_ENTRY_SIZE_x。OM_ODT_TYPE_16ODT 级使用类型特定拷贝例程WORD (16 Bit) 为最大类型同一 ODT 内所有条目应类型相同考虑对齐和最大大小。OM_ODT_TYPE_32同上DWORD (32 Bit) 为最大类型。OM_ODT_TYPE_64同上DLONG (64 Bit) 为最大类型。OM_ODT_ALIGNMENT同一 ODT 内允许所有数据类型但必须按对齐顺序排列大类型在前小类型在后。OM_MAX_ENTRY_SIZE仅支持固定长度的 ODT 条目例如 16 字节数据块长度由 MAX_ODT_ENTRY_SIZE_x 定义。如果 ODT 配置不符合请求的优化方法从设备可返回ERR_DAQ_CONFIG表示无法处理此时所有 DAQ 列表配置无效也可容忍配置但以非优化方式处理。1.1.2.2.5 位级激励GET_DAQ_PROCESSOR_INFO中DAQ_PROPERTIES的BIT_STIM_SUPPORTED标志指示从设备支持位级数据激励。WRITE_DAQ的BIT_OFFSET字段允许传输表示位状态的数据激励元素对于DIRECTION DAQ的测量变量关键字BIT_MASK描述用于提取单一位状态的掩码。对于DIRECTION STIM的测量变量关键字BIT_MASK描述要激励的位位置。主设备需将 BIT_MASK 转换为 BIT_OFFSET例如 Bit7 - BIT_MASK0x80 - BIT_OFFSET0x07。如果BIT_OFFSET FF该字段可忽略WRITE_DAQ应用于以字节为单位表示的普通数据元素。如果BIT_OFFSET从 0x00 到 0x1FODT 条目描述表示位状态的元素元素大小必须等于GRANULARITY_ODT_ENTRY_SIZE_x值为 0 表示位为 0值 0 表示位为 1。1.1.3 同步数据传输方向1.1.3.1 同步数据采集DAQ通过DIRECTION标志DAQ 列表可设置为同步数据采集模式。通过 PID0x00 PID 0xFB的 DAQ 包从设备将 ODT 中定义的元素内容传输给主设备。处理 ODT 时当当前 ODT 中找到大小为 0 的元素或该 ODT 所有条目处理完毕从设备进入下一个 ODT。处理 DAQ 列表时当第一个 ODT 的第一个条目大小为 0 或该列表所有 ODT 处理完毕进入下一个 DAQ 列表。从设备必须一致地采样元素。当 DAQ 列表被触发时从设备至少要对同一个 ODT 一致地采样ODT 级一致性始终保证。但采样和传输完整 DAQ 列表可能需要时间。如果在新事件周期触发时前一周期的传输尚未完成称为“过载OVERLOAD”情况。从设备可通过DAQ_PROPERTIES中的OVERLOAD_x标志指示过载。从设备对过载的反应是实现特定的。通过 ASAM MCD 2MC 中事件通道定义的CONSISTENCY DAQ从设备可指示该事件下同一 DAQ 列表的所有数据一致采样。CONSISTENCY EVENT指示该事件下所有数据一致采样。1.1.3.2 同步数据激励STIM同步数据激励是同步数据采集的逆模式。通过DIRECTION标志DAQ 列表可设置为同步数据激励模式。激励数据在 DTO 包中传输。ODT 描述 DTO 与从设备存储器的映射。通过 PID0x00 PID 0xBF的 STIM 包主设备将 ODT 中定义的元素内容传输给从设备。STIM 处理器缓冲传入的数据激励包当触发 DAQ 列表的事件发生时缓冲数据被传送到从设备存储器。1.2 测量模式1.2.1 轮询Polling图7轮询模式最简单的测量方法。每个测量值原则上通过单独的 XCP 命令由主设备请求。有效采样率取决于 XCP 从设备和主设备的性能。无时间戳机制不同测量值之间无一致性。无需为从设备配置 DAQ 列表。命令SHORT_UPLOAD推荐或SET_MTA UPLOAD。1.2.2 同步数据传输DIRECTIONDAQ突发Burst标准图8标准突发模式XCP 的标准测量模式使用优化方法读取 ECU 内部值。配置阶段主设备通过定义 ODT 并分配给 DAQ 事件来指定所有关注数据。启动后XCP 从设备独立于主设备仅基于内部 DAQ 触发事件发送 ODT。数据特征ODT 一致性ODT 完整内容在同一时刻采样。请求采样率的遵守取决于 XCP 从设备性能和完整 DAQ 消息的传输时间。可选支持时间戳。DAQ 过载是从设备生成的事件通知主设备测量需求被违反。配置命令SET_DAQ_LIST_MODE。1.2.3 同步数据传输DIRECTIONDAQ突发改进图9改进突发模式基于标准模式但使用单事件驱动的数据采样方法。数据特征DAQ 一致性一个 DAQ 的所有 ODT 在同一时刻采样。其他同标准突发。配置命令SET_DAQ_LIST_MODE。1.2.4 同步数据传输DIRECTIONDAQ交替Alternating图10交替模式低性能的精简测量模式仅用于显示 ECU 内部数据消耗 ECU 资源极少。尽管所有 ODT 形式上分配给一个 DAQ 列表但允许采样间隙且不报告因此数据不合格用于测量。不允许时间戳。复用标准测量模式配置结构但工作方式不同。每个 DAQ 事件采样一个 ODT内部延迟不会导致过载事件。因此主设备不知道完整 DAQ 的真实刷新周期仅 ODT 序列稳定。配置命令SET_DAQ_LIST_MODE使用ALTERNATING标志选择。注意不能同时设置ALTERNATING和TIMESTAMP标志。1.3 旁路BYP旁路可通过同时使用同步数据采集和同步数据激励来实现。旁路需要至少两个 DAQ 列表用于 ECU 和旁路工具之间的同步数据传输一个方向 DAQ一个方向 STIM。需要专门用于旁路的事件通道关键字COMPLEMENTARY_EVENT_CHANNEL_NUMBER可用于组合两个事件通道构建旁路光栅。图11旁路两种方法无延迟旁路函数的输入数据发送到旁路工具后原始 ECU 函数调用前输出变量在函数末尾激励输出基于同一步骤输入。有延迟一个或多个采样步输出基于前一步骤输入通常 ECU 任务结束时发送输入数据下一步骤 ECU 函数执行后刺激输出变量用于慢速传输层。1.3.1 旁路激活ECU 代码支持旁路光栅称为旁路钩子可能需要激活后才能使用实现特定建议通过 XCP 标定参数激活。1.3.2 合理性检查从设备应对接收的激励数据执行合理性检查边界和动作可通过标准标定设置。1.3.3 数据一致性若激励数据分多个 ODT 传输从设备应缓冲所有 ODT并在接收完毕后一致地激励数据。无延迟旁路时从设备可能需要等待特定时间接收所有 ODT。超时时是否使用不一致、旧数据或默认数据由实现决定可发送EV_STIM_TIMEOUT事件包。1.3.4 故障检测旁路要求每个采样步都收到所有激励数据。传输错误或通信中断时从设备应识别不稳定旁路连接并采取行动可发送EV_SESSION_TERMINATED。1.3.5 最小分离时间从设备接收多个 ODT 可能需要时间间隔参数MIN_ST_STIM用于向旁路工具指示。图12MIN_ST_STIM1.4 在线标定1.4.1 在线数据标定模型基本1.4.1.1 概述SECTOR、SEGMENT 和 PAGE图13标定数据组织从设备存储器布局描述为连续物理空间元素通过 40 位地址引用32 位 XCP 地址 8 位地址扩展。物理布局使用SECTOR扇区描述用于重编程刷写。逻辑布局使用SEGMENT段描述说明标定数据对象在存储器中的位置起始地址和大小不需符合 SECTOR 限制。PAGE页每个 SEGMENT 可有多个 PAGE描述相同地址的数据但属性不同如不同值或读写权限。任何时候对于每个 SEGMENTECU 控制算法只能访问一个 PAGEECU 访问活动页XCP 主设备也只能访问一个 PAGEXCP 访问活动页。两者可独立切换每个 SEGMENT 独立切换。1.4.1.2 逻辑布局SEGMENTSEGMENT 由 ASAM MCD2 关键字MEMORY_SEGMENT描述包含名称、地址、大小、镜像段偏移等。XCP 特定信息在IF_DATA部分。每个 SEGMENT 有地址扩展对该段内所有标定对象有效。XCP 通过SEGMENT_NUMBER引用段。同一从设备中段编号从 0 开始且连续[0, 1, ... 255]。1.4.1.3 可访问性PAGE每个 SEGMENT 可有多个 PAGE至少有一个 PAGE 0。从设备必须初始化所有 PAGE 的所有段。INIT_SEGMENT的 PAGE 0 包含初始数据。GET_CAL_PAGE获取当前 XCP 和 ECU 访问的活动页。ECU_ACCESS_x标志指示 ECU 是否能访问该页及访问条件不同时/同时/不关心。XCP_READ_ACCESS_x / XCP_WRITE_ACCESS_x标志指示 XCP 主设备读写该页的条件。每个 SEGMENT 中 PAGE_NUMBER 从 0 重新开始PAGE_NUMBER(Segment j) [0, 1, ... 255]。1.4.2 在线数据标定模型可选特性1.4.2.1 标定数据页面切换如果从设备支持GET_CAL_PAGE和SET_CAL_PAGE则支持页面切换。GET_CAL_PAGE请求当前活动页。SET_CAL_PAGE设置当前活动页XCP 或 ECU 访问。主设备完全控制页面切换从设备不能自主切换。需遵守XCP_ACCESS_TYPE和ECU_ACCESS_TYPE约束。1.4.2.2 高级特性1.4.2.2.1 标定数据页面冻结GET_PAG_PROCESSOR_INFO中PAG_PROPERTIES的FREEZE_SUPPORTED标志指示所有段可进入 FREEZE 模式。SET_SEGMENT_MODE选择要冻结的段。GET_SEGMENT_MODE识别段是否被选择冻结。STORE_CAL_REQSET_REQUEST请求从设备将标定数据保存到非易失存储器。对于 FREEZE 模式的每个段从设备将当前 XCP 活动页保存到该页的INIT_SEGMENT的 PAGE 0。完成后复位STORE_CAL_REQ位可发送EV_STORE_CAL。1.4.3 在线数据标定操作1.4.3.1 寻址图14地址计算从设备存储器布局为连续物理空间元素通过 40 位地址引用。地址扩展取自当前引用地址所属的 SEGMENT。MEMORY_SEGMENT的地址范围描述主设备可生成文件的地址编程后可使从设备正常运行。检查CHARACTERISTIC是否属于某MEMORY_SEGMENT时主设备取CHARACTERISTIC地址应用ECU_CALIBRATION_OFFSET和近指针解引用然后检查结果地址是否属于该段。SET_MTA、SHORT_UPLOAD、SHORT_DOWNLOAD使用的目标地址按上述计算并应用ADDRESS_MAPPING从源地址映射到目标地址。地址映射可能因段的不同部分而不同。1.4.3.2 主设备 - 从设备从设备需支持所有由 SECTOR 或 SEGMENT 描述的地址范围的校验和计算。所有XCP_ACCESS_ALLOWED的 PAGE 均可计算校验和。若 PAGE可读主设备可通过UPLOAD、SHORT_UPLOAD标准模式及块模式访问。若 PAGE可写主设备可通过SHORT_DOWNLOAD、DOWNLOAD_MAX标准模式及DOWNLOAD、DOWNLOAD_NEXT块模式访问还可使用MODIFY_BITS原子修改位。1.4.3.3 页面 - 页面若从设备有多个 PAGE主设备可用COPY_CAL_PAGE将数据从一个 PAGE 复制到另一个任意段的任意 PAGE但可能存在限制返回ERR_PAGE_NOT_VALID、ERR_SEGMENT_NOT_VALID或ERR_WRITE_PROTECTED。1.5 Flash 编程1.5.1 Flash 模型1.5.1.1 物理布局SECTOR图15绝对访问模式物理布局由SECTOR描述通过SECTOR_NUMBER引用编号从 0 开始连续[0, 1, ... 255]。1.5.1.2 概述Flash 过程大致分三步视用例而定前期管理如版本控制原始刷写过程编程动作后期管理如版本或校验和控制XCP 主要关注原始刷写过程提供专用编程命令不定义顺序需项目特定的“编程流程控制”PROGRAM_STARTPROGRAM_CLEARPROGRAM_FORMATPROGRAM循环可选块传输PROGRAM_VERIFYPROGRAM_RESETXCP 支持两种 Flash 访问方法绝对模式和功能模式可混合使用。1.5.1.3 绝对访问模式按地址访问图15续绝对访问模式默认模式。前提主设备已知 Flash 物理布局和要编程的数据地址。数据块通过 CTO 传输从指定 MTA 开始编程到非易失存储器MTA 后递增。可存在间隙缺失地址允许。1.5.1.4 功能访问模式按 Flash 区域访问图16功能访问模式适用于两种用例主设备不需要内存映射信息和数据地址信息。地址信息作为相对于下载软件的相对指针从 0 开始适用于压缩或加密数据。数据块通过 CTO 传输ECU 软件自动知道新 Flash 内容的起始地址取决于PROGRAM_CLEAR命令。MTA 作为块序列计数器在主设备和服务器中计数。从设备收到PROGRAM_FORMAT时计数器初始化为 1之后每个PROGRAM请求递增溢出后从 0x00 重新开始。行为类似于 ISO 14229-1 和 ISO 15765-3UDS 诊断协议。1.5.1.5 校验和控制与程序验证刷写后进行版本控制检查新内容是否适合。XCP 支持校验和控制标准校验命令及从设备内部测试例程。相关命令BUILD_CHECKSUM、PROGRAM_VERIFY。1.5.1.6 Flash 会话结束整体编程序列结束由PROGRAM_RESET命令指示从设备进入断开状态通常执行硬件复位。相关命令PROGRAM_RESET。2. XCP 协议2.1 拓扑图17XCP 拓扑XCP 基本是单主/单从通信类型所有通信由主设备发起从设备响应。使用“软”主从原则连接建立后从设备可自主发送某些消息事件、服务请求、DAQ。主设备发送 STIM 消息不期望直接响应。主设备建立通道时与特定从设备建立连续、逻辑、明确的点对点连接。从设备驱动不能处理多连接。XCP不允许“单主/多从”拓扑主设备不能广播仅GET_SLAVE_IDon CAN 例外。但允许“多个单主/单从”拓扑同时存在。XCP 允许网关主设备直接连接的网络称为主网络通过网关间接连接的称为远程网络。网关需适配不同传输层的 Header 和 Tail。2.2 XCP 通信模型2.2.1 标准通信模型图18标准通信模型连接状态下每个请求包对应一个响应包或错误包。主设备在收到前一个请求响应之前不能发送新请求。2.2.2 块传输通信模型图19主块传输图20从块传输标准模式下一请求对应一个响应。为加速上传/下载/刷写UPLOAD、SHORT_UPLOAD、DOWNLOAD、SHORT_DOWNLOAD、PROGRAM可支持块传输类似 ISO 15765-2。主块传输MASTER_BLOCK_MODE_SUPPORTED指示主设备可使用。从设备可能有块大小和最小间隔限制MIN_ST、MAX_BS由GET_COMM_MODE_INFO获取。从块传输SLAVE_BLOCK_MODE_SUPPORTED指示从设备支持主设备无限制。块传输模式与交错模式互斥。2.2.3 交错通信模型图21交错通信模型标准模式下需等待响应。为加速交错模式下主设备可在收到前一个响应前发送下一个请求。INTERLEAVED_MODE_SUPPORTED指示主设备可使用。从设备可能有队列大小限制QUEUE_SIZE由主设备遵守。与块传输互斥。2.3 状态机图22XCP 从设备状态机从设备启动时检查非易失存储器中是否有 RESUME 模式可用的 DAQ 配置。若无进入DISCONNECTED状态。DISCONNECTED无 XCP 通信会话状态、DAQ 列表和保护状态位复位仅响应CONNECTCAN 上还响应GET_SLAVE_ID。CONNECTEDCONNECT建立连接处理所有 XCP 命令并响应。USER_DEFINED 模式主设备发送CONNECT(USER_DEFINED)告诉从设备进入特殊模式不影响 XCP 驱动行为。超时规则不同主设备连续发送直到收到确认间隔 16无需 SYNCH 等。图23CONNECT USER_DEFINED 和 NORMAL 典型用法CONNECT(NORMAL)正常启动通信。连接状态下收到新的CONNECT当作断开重连。若启动时检测到 RESUME 配置从设备进入RESUME状态自动启动存储的 DAQ 列表。RESUME 状态下仅响应CONNECT保持 DTO 传输运行。DISCONNECT命令使从设备回到 DISCONNECTED。错误严重性 S0-S2 不改变状态S3致命错误导致 DISCONNECTED。2.4 保护处理XCP 为测量/激励、标定、刷写提供保护使用Seed Key机制。密钥长度足够支持非对称算法。若 XCP 主设备成功计算安全访问算法从设备允许访问相应命令。相关命令GET_STATUS、GET_SEED、UNLOCK。对于读取内存的命令UPLOAD、SHORT_UPLOAD、BUILD_CHECKSUM无法用标准安全机制保护若从设备决定隐藏信息返回ERR_ACCESS_DENIED与ERR_ACCESS_LOCKED不同表示无法解锁。注意必须始终可读取 XCP 从设备的 ID 信息GET_ID。2.5 XCP 消息帧格式图24XCP 消息帧格式XCP 消息始终在特定传输层CAN、TCP/IP 等的数据字段中传输。传输层需满足消息长度和内容不变顺序不变不重复。XCP 消息由XCP 头部、XCP 包、XCP 尾部组成。XCP 包通用协议部分包含标识字段、可选时间戳字段和数据字段第 2 部分描述。XCP 头部和尾部依赖传输层由控制字段组成第 3 部分描述。3. 性能限制3.1 通用性能参数MAX_CTOCTO 包最大长度字节范围 0x08 – 0xFF。MAX_DTODTO 包最大长度字节范围 0x0008 – 0xFFFF。范围可能因传输层而更小3.2 DAQ/STIM 特定性能参数MAX_EVENT_CHANNEL事件通道数量由EVENT_CHANNEL_NUMBER标识。MAX_DAQDAQ 列表数量由DAQ_LIST_NUMBER标识。MIN_DAQ为预定义数量DAQ_COUNT为动态配置数量。MAX_ODT_ENTRIESODT 最大条目数ODT_ENTRIES_COUNT为动态配置时的条目数。3.2.1 DAQ 特定参数MAX_ODTODT 最大数量范围 0x00 – 0xFC。MAX_ODT_ENTRY_SIZE_DAQDAQ 条目大小上限。ODT_COUNT动态配置时 DAQ 列表的 ODT 数量。ODT_NUMBERODT 编号范围 0x00 – 0xFB。3.2.2 STIM 特定参数MAX_ODT同上范围 0x00 – 0xC0。MAX_ODT_ENTRY_SIZE_STIMSTIM 条目大小上限。ODT_COUNT同上。ODT_NUMBER范围 0x00 – 0xBF。4. 版本管理4.1 XCP 协议层版本号第 2 部分描述独立于传输层的通用协议。协议层版本号为 16 位值若修改导致从设备驱动软件需要功能变更高字节递增如修改现有命令参数或添加新命令。若修改无直接影响如重述解释文本或修改 AML 描述低字节递增。从设备在CONNECT响应中仅返回协议层版本号最高有效字节。4.2 XCP 传输层版本号第 3 部分描述特定传输层的控制字段和可能的附加包。每个传输层规范有独立的版本号16 位。规则同上。从设备在CONNECT响应中仅返回当前传输层的版本号最高有效字节。
