XCP协议系列介绍01-看了就会的XCP协议
本文框架
- 0. 前言
- 1. XCP是什么?
- 2. XCP用来做什么?
- 3. XCP一般工作过程
- 4. XCP命令简介
- 4.1 数据包简介
- 4.2 数据包报文格式
- 4.3 数据传输方式
- 5. XCP测量
- 5.1 异步测量(Poling)
- 5.1.1 SHORT_UPLOAD命令
- 5.1.2 SHORT_UPLOAD应答
- 5.1.3 Poling模式特点
- 5.2 DAQ测量
- 5.3 DAQ基本原理
- 5.3.1DAQ基本原理
- 5.3.2 动态DAQ
- 6 XCP标定
- 6.1 地址映射
- 6.1.1 硬件方式(Overlay)
- 6.1.2 软件方式(Offset偏移)
- 6.2 TC3xx系列Overlay
- 7 A2L文件格式
- 8 XCP的实际应用
- 8.1 XCP工具简介
- 9. XCP系列文章汇总
0. 前言
本文将对XCP是什么?做什么?一般工作过程,测量及标定等基本内容用最直白的语言掰开揉碎详细介绍,满足大家对XCP初步的认识,耐心看完本文你就会对XCP有基本掌握,收藏反复看效果更好。
另外,如果你对XCP实战有更高需求,可移步到XCP实战专栏,满足更高进阶需求。
实战系列导读快速链接:XCP实战系列导读
1. XCP是什么?
XCP表示“通用测量和校准协议”。“X”代表任意的传输层(如CAN、CANFD、FlexRay、Ethernet…)。由ASAM工作委员会(自动化和测量系统标准化协会)标准化。ASAM是汽车OEM,供应商和工具生产商的组织。
XCP是继CCP(CAN校准协议)之后的协议升级版,基于CAN的部分基本没有改变。XCP的开发旨在通过不同的传输媒介来实现此功能。
2. XCP用来做什么?
XCP的主要应用是内部ECU参数的测量和标定。在汽车软件开发中,常会遇到需要在实车或者台架调试时才能确定的变量,例如发动机控制器的点火角等参数,可能根据汽车的负载不一样需要调整,这个时候就可通过XCP来标定。
XCP主要的用处以下总结为四点:测量、标定、刷新及对ECU进行旁路仿真。
其中主要用测量、标定及刷新功能,旁路功能用的相对较少。
3. XCP一般工作过程
首先XCP是主从的工作结构,主节点(Master)即一个上位机,我们定义它为测试系统,当然也可以理解为我们使用的XCP工具,一个主节点可以连接多个从节点(Slave),整个测试系统的连接如下所示:
Master(带上位机的笔记本)<–>CAN工具(CANape/INCA等)<–>Slave(ECU-可多个)
1).将Master和Slave通过设备连接起来,通过发命令的方式建立连接;
2).通过上位机工具观测之前定义好的一些变量,例如速度,转矩,电压等参数;
3)可进行在线标定,一般是先在一个存储区(RAM)定义的变量找出一个比较好的参数,然后将这个比较好的参数固化下来,擦除原来的数据写入到另外一个映射好的存储区(flash);
4).通过将标定完成的软件烧录到ECU中,使用其编程的功能。
4. XCP命令简介
4.1 数据包简介
XCP的数据包分为两类:CTO(Command Transfer Object)与DTO(Data Transfer Object)
如将命令按传递方向,可划分如下:
CMD:指的是上位机下发给下位机的一些命令,比如连接命令FF,解锁,获取状态等一些和下位机交互的命令;
STIM:你可以理解为一种上位机向下位机大量发数据的一种方式,相当于反向的DAQ;用于数据标定时,上位机向下位机修改参数。
Response:肯定应答,指的下位机答复上位机的命令;
Error:否定应答上位机的命令;
Event:事件,指下位机发生某事件时通知上位机;
Service:指下位机在某些情况下,需要上位机执行一些动作,可理解为请求上位机服务。
DAQ:下位机上传数据给上位机。
4.2 数据包报文格式
主、从设备之间每次传输的数据都采用XCP帧的格式,包含一个XCP报头、XCP数据包和XCP报尾。XCP帧支持的传输层可将这三个帧元素映射到相应的传输帧格式。
PID是标识字段的一部分,用于标记数据包及数据包内部的数据值。
CTO与DTO报文XCP Packet包格式如下:
主结点对从结点进行XCP控制时使用“命令(CMD)”,此时的PID在“0xC0”到“0xFF”的范围内。从结点对这个命令返回肯定应答的情况下,使用“应答(RES)”,此时PID变为“0xFF”。
4.3 数据传输方式
标准传输模式:
在标准通信模型中,对从机的每个请求都有一个响应。除了 XCP 在 CAN 上,不允许多个从机对主机的命令做出响应。因此,每条 XCP 消息总是可以追溯到一个唯一的从机。这种模式是通信中的标准情况。
块传输模式:
块传输模式是可选的,可以节省大量数据传输(例如上传或下载操作)的时间。尽管如此,在这种模式下,性能问题必须朝着从机的方向考虑。因此,必须保持两个命令之间的最小时间,命令总数必须限制在最大值的上限。
交错传输模式:
交错模式也是出于性能原因而提供的,在典型通讯模式中,主机在收到上一条指令的回复前不会发送下一条指令,为提高通讯的效率,交错通讯模型可以不等待回复直接再发送下一条指令。但是这种方法也是可选的,并且与块传输模式相反,它在实践中没有相关性。
5. XCP测量
参数测量本质上是作为主设备对从设备的请求而实现的:“读取存储位置0x1234的值”。按测量方式可分为异步测量与同步测量。
5.1 异步测量(Poling)
即Poling模式,Poling是最简单的测量方法,它不是基于DTO,而是基于CTO。对需要采集的变量进行挨个轮询。
主站可以使用SHORT_UPLOAD命令从从站请求测量参数的值。这称为轮询。这是最简单的测量情况:在已接收并执行SHORT_UPLOAD命令时发送测量参数的测量值。
异步测量是使用主结点发送的命令,通过指定的XCP地址来提取从结点的ECU内部的数据,并通过从结点的应答将该数据传送给主结点,如此循环往复来实现的。为了取出数据,使用PID为“0xF4”的命令“SHORT_UPLOAD”。这个命令和应答的格式如下所述。
5.1.1 SHORT_UPLOAD命令
0字节 指定为PID“0xF4”
1字节 指定为取出字节数。最大为MAX_CTO -1字节
2字节 保留字段
3字节 指定为要读出的8位扩展地址
4-7字节 指定为要读出的32位地址
5.1.2 SHORT_UPLOAD应答
CTO 0字节位置,指定为PID“0xFF” CTO 1~MAX_CTO字节位置,指定为取出的数据
Poling模式下的特性:
5.1.3 Poling模式特点
1)Poling模式下的时间戳机制不能使用;
2)不同测量值时间上没有一致性。
3)包含2条报文(上位机请求和Slave响应),影响总线负载率
5.2 DAQ测量
为了使测量与ECU的控制相匹配,有必要由ECU确定测量时机,并在数据取出来后由从结点发送到主结点。这种数据通信是通过DTO来完成的。
主结点在进行同步测量之前,通过命令指定要取出的数据的XCP地址,从结点在等到同步测量开始命令后,使用DTO发送到主结点。因此,在同步测量的情况下,不是通过命令和应答的组合,而是通过测量周期或事件,由从结点发送DTO报文到主结点。
ODT:同步数据传输对象与从机内存之间的映射关系(Object Descriptor Table)
DAQ: 位于从机的数据元素通过数据传输对象(Data AcQuisition),传输到主机,决定了在一个同步测量的周期或者事件触发时要测量的内存数量。
每个事件周期(Event)可对应多个DAQ,一个DAQ包括多个ODT List,一个ODT包括多个变量。
5.3 DAQ基本原理
5.3.1DAQ基本原理
主机一次性配置好所有要读取的变量,并关联ECU端的不同事件channel,一旦ECU对应的事件发生(例如每隔100ms),主动上传数据给主机。
5.3.2 动态DAQ
通过增加管理测量目标的DAQ列表中的ODT及其条目的数量,可以增加测量的测量点的数量。而且通过维持与要测量的事件通道数量一样多的DAQ列表,可以对ECU的所有测量时机进行测量。但是这些数量的增加会增大ECU中的管理缓冲区,因此会消耗ECU的内存。
而且如果ECU具有10ms和20ms的控制周期,有场景下10ms的控制周期中测量的测量点的数量很大,有场景下20ms的控制周期中测量的测量点的数量也很大,即根据测量的场景不同,测量点的数量需求会有不同。对于这样的应用程序,有一种称为“动态DAQ”的功能,可以允许从结点动态更改每次测量的DAQ列表、ODT和ODT条目的数量。相反的,如果在集成XCP驱动程序时,这些数量是预先确定的,则称为“静态DAQ”。一个从结点将具有静态或动态DAQ功能。
即同样ECU内存情况下,可以通过减少10ms的DAQ来增加20ms的数量,在总的内存范围中动态调整。
动态DAQ分配过程
动态DAQ列表配置使用FREE_DAQ、ALLOC_DAQ、ALLOC_ODT和ALLOC_ODT_ENTRY命令完成。这些命令允许在上述限制范围内动态分配多个DAQ列表、多个ODT到DAQ列表以及多个ODT list到ODT。如果没有足够的内存来分配请求的对象,这些命令会得到一个ERR_MEMORY_溢出作为负响应。如果发生错误内存溢出,则完整的DAQ列表配置无效。
在动态DAQ列表配置序列开始时,主机始终首先必须发送一个FREE_DAQ。其次,对于ALLOC_DAQ,主机必须分配可配置DAQ列表的数量。然后,主机必须使用ALLOC_ODT命令将所有ODT分配给所有DAQ列表。最后,主机必须使用ALLOC_ODT_ENTRY命令将所有ODT条目分配给所有DAQ列表的所有ODT。
6 XCP标定
对从站的参数(写访问)的标定简单可理解为:“将地址0x1234的值设置为5”。
在理解标定之前需要对参考页、工作页与激活页有所了解:
参考页(Reference Page):可以理解为定义的逻辑地址对应Flash上的一块地址,参考页的属性在标定过程是可读不可写;
工作页(Working Page):可以理解为定义的逻辑地址对应RAM上的一块地址,工作页的属性是可读可写。
激活页(Activiting Page):就是指选择激活的一个页,比如激活工作页或者激活参考页等。
标定过程:激活参考页(仅可读),读取当前的参数,比如PID中的比例因子 P,然后切换激活页,激活工作页(可读可写),可以在工作页在线修改参数,来获得较好标定值,最后,需要将优化后的P参数写入到原来参考页上,这样就完成了一个参数的标定。
6.1 地址映射
下面我们讲讲两种地址映射方式:硬件方式与软件方式
6.1.1 硬件方式(Overlay)
有些芯片是支持硬件地址映射的,比如英飞凌TC系列,其工作方式比较简单,就是在切换激活的工作页时,通过操作寄存器完成地址映射。
如当寄存器Reg1 = 0时,激活页是参考页,逻辑地址0x000~0x200 对应的Flash中的0x100~0x300;
切换激活页为工作页时,寄存器Reg1=1,对应逻辑地址0x000~0x200
对应Ram中的0x000~0x200;
6.1.2 软件方式(Offset偏移)
通过加入一个offset偏移量来实现,还是以上面的例子为例:
激活页->参考页
逻辑地址 0x000~0x200 -> Offset=0x100 Flash地址0x100~0x300
=(逻辑地址+Offset)
激活页->工作页
逻辑地址 0x000~0x200 -> Offset=0x000 Flash地址0x000~0x200
=(逻辑地址+Offset)
6.2 TC3xx系列Overlay
将数据访问从原始目标内存(“目标Flash地址”)重定向到Overlay内存(“重定向地址”)的原理如下所示:
数据访问Overlay使用Overlay范围(“Overlay Blocks”)定义。每个Overlay Block定义一个地址空间的连续范围,访问被重定向到该范围。每个Overlay Block都配置有以下内容参数:
Overlay Block目标Base地址-要重定向的目标地址范围的起始地址;
Overlay Block大小-要重定向的地址范围的大小;
Overlay Block重定向Base地址-重定向的起始地址。
在AURIX TM中,每个TriCore实例最多可使用32个Overlay范围。Overlay内存Block的大小可以是2nx32字节,n=0到12。这使Block大小的范围从32字节到128 KB。
每个Overlay Block有3个相关寄存器,用于独立配置这些参数。Overlay参数的配置如下所示:
目标Base地址在OTARx寄存器中进行配置,
OverlayBlock大小用OMAKX寄存器进行配置,
重定向Base地址使用RABRx寄存器进行配置。
7 A2L文件格式
相对A2L文件格式有详细了解可以去博主另一篇专门介绍A2L文件的文章(博文名称:XCP-A2L文件解析)中查看,下面部分仅做简单概述。
A2L文件是采用ASAP2指定的一套类XML语言的描述性语言(采用开标签和关标签来描述信息)书写的文件,是一种方便XCP进行工作的描述性文件,可以将其理解为一个通讯矩阵,包含了通讯接口(CAN,USB等,项目信息、ECU信息、标定变量信息、测量变量信息等。
一般A2l框架如下:
/begin PROJECT /*表示一整个项目,一个文件一个项目*/
/begin HEADER /*描述项目信息,包括项目编号,项目版本等信息*/
/end HEADER/begin MODULE Device/*描述ECU需要的所有信息,一个ECU对应一个MODULE块*//begin MOD_PAR /*管理ECU的数据,CPU 客户 编号等等,最重要的是内存的分段分页管理,类似DSP中的CMD文件*//end MOD_PAR /begin MOD_COMMON/*一般性描述信息,比如大小端,数据的对齐方式*//end MOD_COMMON/begin CHARACTERISTIC/*定义标定变量,包含被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息*//end CHARACTERISTIC /*可定义多个*//begin AXIS_PTS/end AXIS_PTS/begin MEASUREMENT/*定义测量变量,包含了被测量的变量的名字,地址,长度,计算公式,精度,最大最小值等信息*//end MEASUREMENT/*可定义多个*//begin COMPU_METHOD/*定义计算公式,及原始值和物理值之前的转换关系 如phy = ax+b*//end COMPU_METHOD/begin COMPU_TAB /*定义原始值和物理值的映射关系 一般是枚举变量*//end COMPU_TAB/begin FUNCTION/end FUNCTION/begin GROUP/end GROUP/begin RECORD_LAYOUT/*定义标定变量的物理存储结构(一维,二维表,三维表等)*//end RECORD_LAYOUT/end MODULE Device
/end PROJECT
以上信息块可分为两类:
8 XCP的实际应用
8.1 XCP工具简介
CANape、INCA、SPY等。
9. XCP系列文章汇总
- XCP实战系列介绍01-测量与标定底层逻辑介绍
- XCP实战系列介绍02-A2L文件详尽解析
- XCP实战系列介绍03-英飞凌TC3xx芯片Overlay概述及开发过程介绍
- XCP实战系列介绍04-CANape工程配置超详细介绍
- XCP实战系列介绍05-CANape观测功能手把手教学
- XCP实战系列介绍06-CANape标定及标定后hex生成操作指导
- XCP实战系列介绍07-使用ASAP2 Editor生成A2l文件详解
- XCP实战系列介绍08-基于Vehicle Spy进行XCP测量的工程配置详解
- XCP实战系列介绍09-基于Vehicle Spy进行XCP测量步骤详解
- XCP实战系列介绍10-基于CANoe实现XCP测量功能详细介绍
- XCP实战系列介绍11-几个常用的XCP命令解析
- XCP实战系列介绍12-基于Vector_Davinci工具的XCP配置介绍(一)
- XCP实战系列介绍13-基于Vector_Davinci工具的XCP配置介绍(二)
- XCP实战系列介绍14-基于Vector_Davinci工具的XCP配置介绍(三)
- XCP实战系列介绍15-XCP故障排查指导
XCP协议系列介绍01-看了就会的XCP协议相关推荐
- XCP实战系列介绍04-CANape工程配置超详细介绍
本文框架 1.概述 2.新建CANape工程 3. Device配置 3.1 新建Device 3.2 输入Device名称 3.3 配置Network 3.4 选择A2l文件 3.5 确认报文ID与 ...
- XCP实战系列介绍06-CANape标定及标定后hex生成操作指导
本文框架 1.概述 2. CANape工程建立 3. XCP标定及后处理介绍 3.1 CANape标定 3.2 标定数据保存 3.3保存标定结果到原hex 3.4 将标定结果copy到hex中 3.5 ...
- XCP实战系列介绍10-基于CANoe实现XCP测量功能详细介绍
本文框架 1.概述 2. 使用指导 2.1 使用前提 2.2 获取变量地址 2.3 建立XCP通讯 2.4 发送需观测变量的地址及数据长度 2.5 读取应答数据 3. 操作流程汇总 1.概述 在前面一 ...
- XCP实战系列介绍02-A2L文件详尽解析
本文框架 1.概述 2.A2L文件解析 2.1 A2l 文件总览 2.2 HEADER 2.3 MODULE 2.3.1 A2ML 2.3.2 MOD_PAR与MOD_COMMON 2.3.3 IF_ ...
- XCP实战系列介绍03-英飞凌TC3xx芯片Overlay概述及开发过程介绍
本文框架 1.概述 2. Overlay相关寄存器介绍 2.1 全局寄存器 2.2 单独Block相关寄存器 3. 基于TC3xx芯片Overlay的开发流程 3.1 开发流程及操作汇总 3.2 开发 ...
- 手机技巧:常见的Note、Max、Pro、Plus、Mate系列介绍,看完你就懂了!
目前主流的手机厂商都会以Note.Max.Pro.Plus.Mate来区分手机的品牌系列,可能会有一些朋友比较好奇,今天小编带大家来了解一下Note.Max.Pro.Plus.Mate这些代表的含义, ...
- XCP实战系列介绍16-XCP标定过程指令解析
本文框架 1.前言 2. XCP标定过程指令解析 1.前言 前面几篇文章我们介绍了XCP底层原理,配置方法及基于CANape,CANoe或Vehicle SPY进行观测或标定的方法,在本篇中我们将对标 ...
- XCP实战系列介绍14-基于Vector_Davinci工具的XCP配置介绍(三)
本文框架 1.概述 2. 其他模块配置 2.1 XCP初始化 3. 手工代码部分 3.1 周期函数添加 3.2 DAQ Event调用 3.3 XCP模块本身代码 3.4 标定量的添加 1.概述 在对 ...
- 02 Xcp协议层介绍
Xcp协议层介绍 XCP 数据在 Master 和 Slave 之间以基于消息的方式进行交换.整个"XCP 消息帧"嵌入在传输层的帧中(XCP ON Ethernet 嵌入UDP报 ...
最新文章
- java内存泄漏问题排查
- 纯 CSS 实现波浪效果!
- Windows Phone开发者注册秘籍
- Excel函数公式 (日期函数)
- phpstorm—下载安装配置教程
- 微信网页授权功能来获取用户信息(昵称或头像)之php实现
- 2013年最佳Android平板
- xen虚拟机管理工具xm与virsh用法
- MATLAB插值问题
- 41 MM配置-采购-采购订单-STO配置-定义凭证类型和可用性检查设置
- gg修改器修改数值没有用怎么办_风灵月影是谁?风灵月影修改器大全
- mysql安装sql文件怎么打开_sql文件用什么打开?如何打开sql文件?
- UDP数据包大小设定
- 特斯拉为什么要“干掉”保险丝和继电器?
- 阿里云总监课第四期:阿里褚霸携专家团独家分享弹性计算最佳实践
- GIS-坐标系-EPSG(二次整理)
- django系列9 --- 迁移相关
- PAT 甲级 1048 Find Coins
- ​LeetCode刷题实战317:离建筑物最近的距离
- java算法——通过身份证号获取出生的年月日