问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

XCP协议详解:通用测量和标定协议

创作时间:
作者:
@小白创作中心

XCP协议详解:通用测量和标定协议

引用
CSDN
1.
https://m.blog.csdn.net/csd_jerry/article/details/143373372

XCP(通用测量和标定协议)是汽车电子控制单元(ECU)开发过程中不可或缺的技术。本文将为您详细介绍XCP协议的工作原理、指令结构、测量模式以及性能分析等内容,帮助您全面了解这一重要技术。

XCP简介

XCP旨在为电子控制单元的开发流程提供支持。使用XCP协议可以访问ECU的内存,可以读出数据,以进行测量信号等操作,也可以写回数据,以进行标定参数等操作。这样的测量和标定的工作原理是什么?我们在电脑上使用测量和标定工具,例如CANape,这时我们可以在任何带有XCP接口的ECU上进行测量和标定。ECU和CANape之间的连接是通过Vector硬件接口卡建立的。我们可以把XCP驱动程序想象成告密者,它可以泄露内部信息,也可以根据请求更改内部变量的值。XCP协议遵从主从模式进行通信。CANape等测量和标定工具充当Master,XCP驱动程序则充当Slave。XCP驱动程序与ECU的CAN驱动程序通信,所以是通过CAN控制器连接到CAN总线。另一方面,XCP Master也通过硬件接口卡连接到CAN总线。Master可以通过CAN报文向Slave发送请求。例如Master要从ECU读取温度信息,则XCP读取请求将通过CAN总线以CAN报文的形式发送到Slave,然后XCP slave对CAN报文中包含的读取请求进行解析。接着它访问RAM并读出温度变量的值,并将值打包在新的CAN报文中,通过CAN总线再次发送回Master.Master收到报文后将立即对其处理,例如显示在CANape的Graphic窗口。

现在,我们详细介绍CAN报文中的XCP指令结构。Master始终使用某个指定的CAN-ID来发送指令(例如ID 0x200),slave也始终使用某个指定的CAN-ID进行应答(例如ID 0x201).每对Master-Slave连接都使用其自身的一对指定ID组。XCP指令本身位于CAN报文的数据场(Data Field)。CAN总线的数据场最大是8个字节。XCP指令的每一个字节包含一个称为PID的包标识符,Slave通过查看该PID即可确定执行哪条指令。举个例子,PID 0xF4表示SHORT_UPLOAD指令,也就是之前介绍的读取指令。剩余的7个字节包含Slave执行指令所需的信息。对于SHORT_UPLOAD指令,该信息为:请求的存储单元的地址。Slave可以发送肯定或者否定响应。肯定响应包含PID FF以及所请求字节的值。

下图中CANape标定窗口中的XCP指令序列代表真实标定流程。

标定流程从SET_MTA指令(PID:0XF6)开始。该指令为后续的内存访问设定一个起始地址。在本例中,内存访问的起始地址为0x00 00 00 96。

收到对SET_MTA指令的肯定响应后,Master继续发送DOWNLOAD指令(PID:0XF0)将数据(在本例中,该数据为值0x0A,1个字节)写入Slave的内存,也就是内存地址指针标记的存储单元。写入完成后,Master会发送SHORT_UPLOAD指令(CMD:0xF4)回读更改后存储单元的值,来完成标定流程。SHORT_UPLOAD指令包含起始地址(0x00 00 00 96)和数据长度(1个字节)。SHORT_UPLOAD指令还将用于从ECU连续读取多个单一值,这一点将在下一章介绍XCP提供的测量模式中讨论。

Polling模式

XCP提供两种不同的测量模式:Polling模式和同步数据采集模式(简称DAQ模式)。

CANape用户在测量配置窗口中可配置信号测量模式。

在本章中,你将了解Polling模式及其通信结构。在本章的末尾,我们将介绍这种测量模式的优缺点。

用户在CANape的测量配置中将需要测量的信号添加到测量信号列表。然后用户必须设置所需的测量模式及测量速率。XCP协议提供了两种不同的测量模式:Polling模式和DAQ(Data Acquisiton)模式。我们应该选择哪一种模式?接下来介绍两种模式以及它们的优缺点。①Polling模式。假设我们仅使用Polling模式以及10ms速率测量单个信号。我们将在图中时间线上显示不同的XCP请求和响应。为了测量单个信号值,Master将发送一个SHORT_UPLOAD指令,其中包含所请求信号的地址。Slave的响应将包含被测量的值。该值现在可以在CANape中显示,例如在Graphic窗口中显示。基于所选速率10ms后,Master将再发送一个SHORT_UPLOAD指令,测量所请求信号的另一个值。同样,对应的响应包含将包含该信号值,该值随后也将在Graphic窗口中显示。相应的请求响应序列将每10ms重复一次,直到测量结束。所以,使用Polling模式,始终需要两条XCP报文才能读出单个信号值。当然,我们通常不仅是测量单个信号,而是需要测量多个信号。所以,我们向测量信号列表中再添加一个信号,看看会发生什么。第二个信号也将使用Polling模式进行测量,并且同样采用10ms速率。每个SHORT_UPLOAD指令只能请求测量一个信号值。因此为了测量两个信号,将发送两个不同的SHORT_UPLOAD指令,分别用于测量两个信号。Master一次只能发出一个XCP请求。因此在收到前一个SHORT_UPLOAD指令的响应后,才能发送第二个SHORT_UPLOAD指令,这意味着两个测量到的值之间短暂延时。如前所述,同一对请求和响应序列将根据所选测量速率每10ms重复一次。多个信号值不能被同时测量,也就是不能同步测量。每两个信号值之间的测量存在延时,也就是只能异步测量。在整个测量期间,Master将一次又一次地每个周期内发送包含相同地址信息的SHORT_UPLOAD指令。总之,作为一种测量模式,Polling模式虽然易于理解和实现,但也存在一些严重的缺陷。使用Polling模式无法同步测量数据,也就是无法在同一精确的时间采集多个信号。Polling模式的请求和响应结构会产生不可忽视的额外总线负载。对于带宽非常有限的总线网络,如CAN总线,这甚至会导致报文延迟或导致严重的通信和功能错误。XCP提供的第二种测量模式可以弥补Polling模式的缺点,就是DAQ模式。如前所述,Polling模式按请求和响应结构运行,对信号的任何测量都需要Master在每个周期内发起。因此,在整个测量过程中,我们将观测到双向通信,也就是请求和响应在Master和Slave之间来回发送。但DAQ模式并不按这种请求和响应结构运行。一旦测量开始,Slave将在每个周期独立测量所选信号,并使用XCP报文将其发送到Master。因此,我们将只会观测到报文从Slave单向发送到Master。与Polling模式相比,在DAQ模式下,因测量带来的总线负载会小很多。而且报文将包含同步测量的信号值。

同步数据采集

在本章中,你将了解XCP协议最重要的功能,即使用DAQ模式同步测量数据。我们将介绍DAQ模式的各个阶段以及通信结构,并将DAQ模式与已知的Polling模式进行比较。简而言之,我们将介绍如何实现具有不同测量速率的DAQ测量模式,以及如何决定使用哪些速率来测量信号。

与Polling模式相比,任一DAQ测量模式的测量速率始终是固定的。这意味着你可能需要配置多种DAQ测量模式以供选择。比如一种速率固定为10ms,另一种速率固定为50ms,第三种固定为100ms。同样,与Polling模式相同,作为CANape用户,我们需要决定应使用哪种DAQ模式。当然,最关键的是如何给测量信号选择最合适的测量模式。每种DAQ测量模式在一开始都有一个短暂的初始化阶段。在这个阶段,Master会告知Slave应采用哪种DAQ测量模式测量哪些信号。这将通过多个XCP请求(固定的请求和响应序列)完成。在该初始化阶段,Master只向Slave发送一次关于应该测量哪些信号的信息。因此,slave必须将此信息存储在ECU RAM中所谓的DAQ列表中。使用同一DAQ测量模式测量的所有信号将被分布到同一DAQ列表中。发送所有初始化指令后,Master将发送最后一个XCP指令告知Slave开始进行测量。发送这个指令后,Master将在剩余的测量过程中保持静默,并等待Slave测量和发送被请求的信号值。在测量阶段,我们可以观测到Slave会在每个周期发送一串XCP报文。本例中测量周期为10ms,且Master在这过程中未发出任何请求。显然,这些报文包含被测量的信号值。与Polling模式相比,这些信bianl号值都是同步测量的,也就是同一时间被采集的。这是DAQ模式相比较于Polling模式的两个主要优势之一。DAQ模式的第二个关键优势是,产生的总线负载会小很多,因为Slave无需Master发出请求便可测量和发送信号值。当然,这只有设定了触发机制才有效,该机制会提醒Slave在每个周期测量和发送信号值,这个触发机制必须在ECU的软件中以XCP Event的形式实现。每个DAQ测量模式都对应一个单独可被循环触发的XCP Event。假设XCP Slave提供了三种DAQ测量模式,其测量速率分别为10ms、50ms和100ms.在这种情况下,必须在ECU的软件中实现以上三种触发速率的XCP Event。然后,我们在CANape中只能使用这三种DAQ测量模式,但我们选择哪一种DAQ模式来测量信号?接下来,我们将详细介绍XCP Event的实现,以解答最后一个关键的问题。下面有个源代码片段, 我们将使用该片段进行讨论。为便于理解,这里我们将源代码进行简化显示。大多数情况下,ECU都是周期性运行。例如某项任务1,可能使用循环计数器每10ms执行一次。另一项任务2,可能每50ms执行一次。如果要以10ms速率实现DAQ测量模式,必须调用任务1中的XCP Event。相应地,调用任务中的XCP Event可以实现速率为50ms的DAQ测量模式。大多数内部变量也是在这类周期性任务中计算的,例如测量列表中的信号,我们示例中前两个信号是在任务1中计算的。因此,每10ms将计算这些变量的新值。第三个信号是在任务2中计算的,因为每50ms更新一次。考虑到这点,显然只能以10ms速率测量前两个信号,以50ms速率测量第三个信号。如果我们以更快的速率测量这些信号,这将产生额外的负载,但却没有包含任何新的信息。如果以更慢的速率测量信号,则无法测量每个计算出来的信号值,并且会丢失部分信号值。总之,我们现在应该明白,对于每个信号,只有一种DAQ测量模式是适合的,即该DAQ模式的测量速率与信号的计算速率一致,或者与读入(比如从外部传感器)信号的速率相同。但是大多数情况下,我们的测量工具并不提供该信息。

性能分析

在本章中,你将了解DAQ测量的两个限制因素。我们将介绍VX1000系统,该系统通过高数据吞吐量和高测量速率来克服这些限制。

DAQ测量性能取决于两个因素。第一个因素是XCP通信的可用带宽,所有XCP报文都是通过现有传输层发送的。在本例中,Master与Slave通过can报文交换了XCP报文。这些被打包在CAN、FlexRay或Ethernet报文内部的XCP报文,会在通信网络中产生额外的总线负载。因此,DAQ测量带宽取决于网络空闲的可用总线负载。如果can网络的带宽介于250kB/s到1MB/s之间,这会对测量带来明显的限制。第二个限制因素是ECU分配给XCP驱动程序的计算能力,一般来说XCP驱动程序无法以快于1ms的速率进行测量。如果你的测量需要高数据吞吐量或高速率采集,基于现有CAN网络或FlexRay网络的XCP测量将无法满足要求。针对这些应用需求,Vector提供了VX1000系统。VX1000系统是一个可拓展的解决方案,以保证高数据吞吐量和高测量速率的极佳性能,来满足你的测量需求。使用VX1000系统,测量数据吞吐量可超过100MB/s,测量速率可快与10us。VX1000基础模块通过XCP on Ethernet的方式连接到CANape,同时它通过ECU的即插设备(POD)连接到ECU的调试接口,此时ECU不需要XCP驱动程序,而只需要VX1000驱动程序添加到ECU软件中。任何来自CANape的XCP请求将由VX1000基础模块处理。ECU内存中的内存将通过调试接口读出,这对ECU实时运行不会产生什么影响。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号