XCP协议简介
文章目录
- XCP协议简介
- 一、概要
-
- 分类:
- 优点:
- 功能:
- 通信方式:
- 二、主从模式
- 三、网络和传输模式
- 四、CTO & DTO
- 五、报文格式和PID
- 六、访问测量/校准对象
- 七、测量
-
- 1、异步测量
-
- 1、SHORT_UPLOAD命令:
- 2、SHORT_UPLOAD应答:
- 2、同步测量
-
- 1、ECU的控制应用程序:
- 2、主结点:
- 3、从结点:
- 3、XCP与同步测量相关的术语和概念
-
- 1、元素(Element):
- 2、对象描述表(ODT):
- 3、ODT条目(Entry):
- 4、DAQ列表(List):
- 5、事件通道(Event Channel):
- 4、同步测量的处理
- 5、测量对象和DTO报文
- 6、同步测量的选项
-
- 1、动态DAQ:
- 2、带时间戳的DAQ:
- 3、校准
- 八、XCP的趋势和应用实例
一、概要
XCP:Universal Calibration Protocol,通用校准协议,主要用于直接在软件上更改某些参数;例如:标定时是需要经常修改各种参数的,如果每次修改参数都需要编译调试生成再下载这一系列步骤的话,是非常影响工作效率的,所以使用XCP进行标定是非常便捷的。
分类:
- CAN
- Ethernet
- FlexRay
- USB
- SPI
- LIN
- 。。。
优点:
- 当ECU运行的时候,可以实时记录ECU内存中的变量;
- 可以具有真实物理意义和单位的数值来直接读写ECU变量,比如RPM、温度、开关等,而不是以原始的字节、位来读取;
- 实时改变ECU内存中的变量值,测试中实时改变ECU行为和性能,而不需重新编译ECU程序;
- 标定过程中,数据记录功能可以获取和记录全面的数据。
功能:
- 随机读取ECU中RAM和ROM数据
- 测量数据采样
- 标定数据采样和传输
- 同时处理多个ECU系统
- F1ash编程技术
通信方式:
- 查询(polling)模式
- DAQ(Data Acquisition Command)模式
二、主从模式
XCP协议中,主测量点又称为“XCP主结点”端是canape,连接PC上位机,被测量点又称“XCP从结点”端是ECU;采用主从通信模式,即主结点发送命令连接并开始,从结点在接收到后,再向主结点发送应答。可以采用一主多从的形式。
图1 主从模式示意图
主结点向每个从结点发送命令,并接收从结点返回的应答。
图2 主多从模式示意图
车载网络上连接一个测量/校准工具(= XCP主结点)后,可以通过XCP协议访问作为测量对象的各个ECU(= XCP从结点)。
三、网络和传输模式
XCP有三种传输模式:
- 标准模式
- 块传输模式
- 交错模式
图3 传输模式
四、CTO & DTO
在XCP中,除了主结点和从结点之间的传输方向的差异之外,要传输的内容还被分为“与XCP本身的控制相关的通信”和“与数据相关的通信”两种类型,以及定义在每个网络上传输的报文的格式。
XCP通信使用“命令传输对象”(CTO)和“数据传输对象” (DTO)来区分(主从通信)。XCP主设备可以在总线上向ECU通过CTO发送命令。ECU会在执行完请求的服务后以同样的途径进行应答。CTO会提供:CMD(命令), RES (响应), ERR (错误), EV (事件) 和 SERV (服务请求处理机)。
数据传输对象DAQ(数据采集)和STIM(激励)用于以事件驱动方式从内存中读取测量变量或者向XCP从设备的内存中写入变量值。
CTO被称为“命令传送对象(CTO:Command Transfer Object)”;与XCP自身的控制命令和应答等相关的对象。控制命令从主结点发送,对命令的应答是从从结点发送。
DTO被称为“数据传送对象(DTO:Data Transfer Object)”,与同步从结点(ECU)获取数据测量结果以及进行数据变更相关联的对象。同步数据变更被称为“激励(Stimulation)”。
图4 XCP主结点/从结点间的对象
五、报文格式和PID
MAX_CTO:CTO的最大报文长度(字节)
MAX_DTO:DTO的最大报文长度(字节)
图5 CTO和DTO的报文结构
所有的XCP报文都在这个最大报文长度内,命令和响应等内容都在一个报文中完成的。而且在报文格式中,每个字段按两种类型分配给CTO和DTO报文。此外,报文的第一个字节是被称为“PID”的标识符,是被用来区分是怎样的报文。
主结点对从结点进行XCP控制时使用“命令(CMD)”,此时的PID在“0xC0”到“0xFF”的范围内。从结点对这个命令返回肯定应答的情况下,使用“应答(RES)”,此时PID变为“0xFF”。
图6 报文的标识符(PID)
除了测量/校准的同步数据交换之外,所有其它的都是通过主结点发送命令,从结点将返回肯定应答来完成的。
六、访问测量/校准对象
XCP的测量/校准,是通过对ECU内部的软件的访问来实现的。具体而言,针对要测量/校准的对象的内存区间,通过指定对应的“XCP地址”的方式进行访问。
XCP地址与普通的微控制器中的地址几乎相同,但XCP使用了32位的XCP地址和8位的扩展地址。也就是说,主结点对从结点的访问,可以有32 + 8 = 40位的地址空间。这个地址与XCP的实际ECU内存不需要完全匹配,其字节序(Endian)也可以针对每个从结点来选择。因此,在车载网络上可以连接到多个ECU,即使存在不同的地址空间(16位,32位),或者不同的地址字节序,主结点都可以经过适当处理,使得所有的都可以测量/校准。
七、测量
1、异步测量
XCP除了同步测量,还可以做异步测量。异步测量是使用主结点发送的命令,通过指定的XCP地址来提取从结点的ECU内部的数据,并通过从结点的应答将该数据传送给主结点,如此循环往复来实现的。为了取出数据,使用PID为“0xF4”的命令“SHORT_UPLOAD”。这个命令和应答的格式如下所述。
1、SHORT_UPLOAD命令:
CTO 0字节位置,指定为PID“0xF4”
CTO 1字节位置,指定为取出字节数。最大为MAX_CTO – 1字节
CTO 2字节位置,保留字段
CTO 3字节位置,指定为要读出的8位扩展地址
CTO 4~7字节位置,指定为要读出的32位地址
2、SHORT_UPLOAD应答:
CTO 0字节位置,指定为PID“0xFF”
CTO 1~MAX_CTO字节位置,指定为取出的数据
2、同步测量
为了使测量与ECU的控制相匹配,有必要由ECU确定测量时机,并在数据取出来后由从结点发送到主结点。这种数据通信是通过DTO来完成的。
主结点在进行同步测量之前,通过命令指定要取出的数据的XCP地址,从结点在等到同步测量开始命令后,使用DTO发送到主结点。因此,在同步测量的情况下,不是通过命令和应答的组合,而是通过测量周期或事件,由从结点发送DTO报文到主结点。
以下是对同步测量中,对ECU的控制应用程序的测量时机,主结点和从结点的任务分割的说明。
1、ECU的控制应用程序:
当到达测量的控制周期,或者事件发生时,进行处理并通知到XCP从结点。
2、主结点:
确定要同步测量的内存及其测量周期,指定同步测量的XCP地址,并使用命令启动和停止同步测量。
3、从结点:
它管理从主结点指定的同步测量的XCP地址。然后,从检测的开始同步测量后,直到停止之前,会根据上述ECU的控制应用程序传达的被管理的XCP地址,从取出内存值并发送DTO报文。
3、XCP与同步测量相关的术语和概念
关于同步测量,在XCP标准文档中使用了各种术语。这里我们解释一下主要的术语和概念。
1、元素(Element):
通过XCP地址来指定的一个测量对象的内存。
2、对象描述表(ODT):
(ODT:Object Description Table),归并元素的测量内存,在一个DTO报文中聚集最多的可发送的内存的表。
3、ODT条目(Entry):
为创建ODT的元素的测量对象的XCP地址。
4、DAQ列表(List):
这是一个ODT的集合。这决定了在一个同步测量的周期或者事件触发时要测量的内存数量。ODT与一个DTO报文相关联,由MAX_DTO – PID决定了最大的大小,但由于实际测量的内存可能会大于此值,因此分为了ODT和DAQ列表。
5、事件通道(Event Channel):
在同步测量的控制周期和事件触发的通道,也即是“种类”的意思。同步测量的时序都是基于这个事件通道的。
4、同步测量的处理
在同步测量中,ECU的控制应用程序向从结点发送测量的时机,将执行怎样的处理。
(1)控制应用程序要通知从结点测量时机。这个通知通常是将事件通道作为参数,来调用从结点的驱动过程来实现的。
(2)针对主结点以ODT条目来指定的测量对象的内存地址,从结点使用缓冲区来管理,在每次被控制应用程序调用时,都会根据该缓冲区来读取指定地址的内存。
(3)读取的内存以ODT为单位合并,并以DAQ列表来生成DTO报文。
元素和ODT条目、DAQ列表和ECU控制应用程序之间的关系。当ECU的控制应用程序集成了Vector的从结点驱动程序后,调用C语言函数“XcpEvent(事件通道)”,就会根据ODT条目的缓冲区,从ECU内存中读出元素的值来创建出DTO报文。
5、测量对象和DTO报文
作为测量对象的元素从在ECU内存,到在网络上传输的DTO报文之间的关系。
根据ODT条目测量的七个元素的结果,取出的“0x19”“0x6C”“0xF0”“0xBF”“0xC0”“0xA9”“0x02”,作为一个ODT的DTO报文就创建好了。在这个DTO报文中,PID包含在第一个字节,测量时元素的内容被包括从第二个开始的字节中。像这样的,PID的值是从“0”到“0xFB”的DTO报文被称为“DAQ”。
从作为测量对象的ECU内存、管理测量对象的ODT的DAQ列表、决定测量时机的控制应用应用程序和用于区分测量时机的事件通道开始,到最后使用DTO报文将测量数据发送到主结点,就实现了同步测量。
6、同步测量的选项
DAQ基本原理为:主机一次性配置好所有要读取的变量,并关联ECU端的不同事件channel,一旦ECU对应的事件发生(例如每隔100ms),主动上传数据给主机。
1、动态DAQ:
通过增加管理测量目标的DAQ列表中的ODT及其条目的数量,可以增加测量的测量点的数量。而且通过维持与要测量的事件通道数量一样多的DAQ列表,可以对ECU的所有测量时机进行测量。但是这些数量的增加会增大ECU中的管理缓冲区,因此会消耗ECU的内存。
而且如果ECU具有10ms和25ms的控制周期,有的10ms的控制周期中测量的测量点的数量很大,别的25ms的控制周期中测量的测量点的数量也很大,根据测量的场景不同,测量点的数量会有不同。对于这样的应用程序,有一种称为“动态DAQ”的功能,可以允许从结点动态更改每次测量的DAQ列表、ODT和ODT条目的数量。相反的,如果在集成XCP驱动程序时,这些数量是预先确定的,则称为“静态DAQ”。一个从结点将具有静态或动态DAQ功能。
2、带时间戳的DAQ:
在主从结点间的通信中,如果因为加入网关而造成时间差,又或者因为使用无线通信,使得通信时间出现波动的情况下,同步测量中的测量时间对于主结点来说是“不确定”的。为了防止这种情况,要使用“带时间戳的DAQ”。在从结点侧,包含测量时间的时间戳的DAQ,通过DTO报文传送给主结点。而收到这个报文的主结点,可以读出所添加的时间戳来知道正确的测量时间。
3、校准
校准是为了重写ECU内部软件中的参数,而从主结点发送指定XCP地址的命令和重写数据的命令,从结点会对应的导出适当的参数地址、执行重写,并返回一个应答。图18显示了,根据XCP主结点发送的XCP扩张地址“0”、XCP地址“0x0041D5C8”,将该地址开始的2字节的参数,重写为“0x0064”的示例的跟踪结果。