目录
0 介绍
在电子ECU的最佳参数化(校准)中,您可以在系统运行时校准参数值,并同时获取测量信号。开发工具与ECU之间的物理连接是通过测量和校准协议进行的。XCP已成为此处的标准。首先,将简要说明XCP的基本原理和机理,然后将讨论ECU标定的应用领域和附加值。
首先,有关XCP的一些事实:
- XCP表示“通用测量和校准协议”。“X”代表任意的传输层(如CAN、CAN FD、FlexRay、Ethernet…)。
- 它由ASAM工作委员会(自动化和测量系统标准化协会)标准化的。ASAM是汽车OEM,供应商和工具生产商的组织。
- XCP是继CCP(CAN校准协议)之后的协议(可以理解为升级版,但基于CAN的部分并没有多少不同)。
- CAN校准协议的概念是允许通过CAN对内部ECU数据进行读写访问。XCP的开发旨在通过不同的传输媒介来实现此功能。然后,人们谈论CAN上的XCP,FlexRay上的XCP或以太网上的XCP。
- XCP的主要应用是内部ECU参数的测量和校准。在此,该协议提供了与ECU中的过程“事件同步”获取测量值的功能。这确保了彼此之间数据的一致性。
为了形象化XCP的基本思想,我们最初将ECU及其中运行的软件视为黑匣子。在黑框中,仅获取ECU的输入(例如CAN消息和传感器值)和ECU的输出(例如CAN消息和执行器驱动器)。关于算法内部处理的细节尚无法立即显现,只能通过对输入和输出数据的分析来确定。
现在想象一下,您已经研究了每个计算周期中ECU的行为。您可以随时获取有关算法运行方式的详细信息。您将不再拥有黑匣子,而是拥有一个具有内部流程完整视图的白框。这正是XCP所带来的!
XCP对整个开发过程能做出什么贡献?为了检查获得的开发状态的功能,开发人员可以重复执行代码。通过这种方式,开发人员可以找出算法的行为方式以及可以优化的方式。在这里,编译的代码是否在特定的硬件上运行还是以基于模型的方式开发以及应用程序是否以模型的形式运行都无关紧要。
重点放在算法过程的评估上。例如,如果算法在开发环境中(例如The MathWorks的Simulink)作为模型运行,则开发人员如果也可以获取其应用程序的中间结果以获取有关其他更改的发现,则对开发人员有帮助。在最后的分析中,此方法除了对参数的读取访问之外,什么也没有使它可以可视化和分析,并且所有这些都可以在模型运行时或在限时测试运行完成后进行回顾。如果更改了参数设置,例如,需要写访问权限。如果修改PID控制器的比例组件以使算法行为适应受控系统。无论您的应用程序在哪里运行,焦点始终是对算法过程的详细分析以及通过更改参数设置进行的优化。
运行时环境的类型和通信形式通常彼此之间存在很大差异。原因是运行时环境由不同的生产者开发,并且基于不同的解决方案方法。不同类型的协议,配置,测量数据格式等使尝试在所有开发步骤中交换参数集和结果变得徒劳。但是最后,所有这些解决方案都可以简化为在运行时进行读写访问。对此有一个标准:XCP。
XCP是ASAM标准,其版本1.0于2003年发布。首字母缩写ASAM代表“自动化和测量系统标准化协会”。供应商,车辆OEM和工具制造商均由ASAM工作组代表。XCP工作组的目的是定义可独立于特定运输介质使用的通用测量和校准协议。通过使用CCP(CAN校准协议)获得的经验也融入到开发中。
XCP是基于ASAM接口模型定义的。下图显示了测量和校准工具与XCP从站,描述文件的接口以及与更高级别的自动化系统的连接。
接口1:ECU与测量和校准系统之间的“ ASAM MCD-1 MC”
该接口描述了物理和协议的特定部分。严格来说,此处在接口ASAP1a和ASAP1b之间进行了区分。但是,ASAP1b接口从未得到普遍认可,并且出于所有实际目的,它与今天无关。XCP协议非常灵活,几乎可以充当通用的制造商独立接口的角色。例如,如今,所有测量和校准硬件制造商都提供可以通过以太网标准XCP连接的系统(xETK,VX1000等)。不再需要ASAP1b接口(正如CCP所述)。
接口2:“ ASAM MCD-2 MC” A2L ECU描述文件
如前所述,XCP以面向地址的方式工作。对对象的读或写访问始终基于地址条目。但是,最终,这意味着用户将不得不基于该地址在主服务器中搜索其ECU对象。那将非常不便。例如,为了让用户使用符号对象名称,需要一个描述对象名称和对象地址之间关系的文件。下一章专门讨论此A2L描述文件。
接口3:“ ASAM MCD-3 MC”自动化界面
此接口用于将另一个系统连接到测量和校准工具,例如,用于测试台自动化。该接口在本文档中不作进一步说明,因为它与理解XCP无关。
XCP基于主从原则。ECU是从站,而测量和校准工具是主站。从机在任何给定时间只能与一个主机通信。另一方面,主站可以同时与许多从站通信。
为了能够在整个开发过程中访问数据和配置,必须在每个运行时环境中使用XCP。需要购买,操作和维护的工具更少。这也将消除了将配置从一个工具手动复制到另一个工具的麻烦,因为该过程容易出错。这将简化迭代循环,其中将来自后续工作步骤的结果转移回先前的工作步骤。
但是,让我们将注意力从可行的事物转移到今天的可行事物:一切!XCP解决方案已经在各种工作环境中使用。本书旨在描述测量和校准协议的主要属性,并介绍其在各种运行时环境中的使用。在本书中找不到的内容:既没有详细的完整XCP规范,也没有在特定的运行时环境中集成XCP驱动程序的精确说明。它说明了关系,但没有说明各个协议和实现细节。附录中的Internet链接指的是公开可用的XCP驱动程序源代码和示例实现,可让您了解并查看实现的方式。
【程序下载链接】
1 XCP协议概述
ASAM接口模型的接口1描述了从站和主站之间的发送和接收命令以及数据。为了实现与特定物理传输层的独立性,XCP被细分为协议层和传输层。
取决于传输层,一种是指CAN上的XCP,以太网上的XCP等。早在2005年FlexRay上的XCP首次亮相时,就证明了对新传输层的可扩展性。XCP协议的当前版本为Version 1.3,该版本于2015年获得批准。
在设计协议时,应优先遵循以下原则:
- ECU中的资源使用最少
- 高效沟通
- 简单的从属实现
- 即插即用配置,仅需少量参数
- 可扩展性
XCP的一项关键功能是,它允许对从设备的内存进行读写访问。
读取访问使用户可以测量内部ECU参数的时间响应。ECU是具有离散时间行为的系统,其参数仅在特定的时间间隔更改:仅当处理器重新计算该值并将其更新到RAM中时。XCP的一大优势在于从RAM中获取测量值,这些测量值会随着ECU中的流程或事件而同步变化。这使用户可以评估ECU中基于时间的过程流与更改值之间的直接关系。这些被称为事件同步测量。相关机制将在后面详细说明。
写入访问使用户可以优化从站中算法的参数。这些访问是面向地址的,即主控和从属参考地址在存储器中的通信。因此,参数的测量本质上是作为主设备对从设备的请求而实现的:“给我存储位置0x1234的值”。对从站的参数(写访问)的校准表示:“将地址0x9876的值设置为5”。
XCP从站并非绝对需要在ECU中使用。它可以在不同的环境中实现:从基于模型的开发环境到硬件在环中的环境以及软件在环中的环境,再到用于通过JTAG,NEXUS和DAP等调试接口访问ECU存储器的硬件接口。
如何使用对ECU的读写访问权来优化算法,这有什么好处?为了能够在运行时在ECU中修改各个参数,必须可以访问它们。并非每种类型的内存都允许此过程。只能对RAM中的存储器地址执行读写访问(此处故意不包括EEPROM)。以下是各个内存技术之间差异的简要概述:对它们的了解对于理解本书的后续课程非常重要。
存储基础
如今,闪存通常集成在用于ECU的微控制器芯片中,即使没有电源也可用于长期存储代码和数据。闪存的特殊方面是,确实可以随时对单个字节进行读写访问,但是新内容的写入只能逐块进行,通常是在相当大的块中进行。
闪存的寿命有限,具体取决于最大擦除周期数(取决于特定的技术,最大值可能高达一百万个周期)。这也是最大写入周期数,因为必须始终将内存作为一个块擦除,然后才能再次写入。其原因在于存储结构:电子通过隧道二极管被“泵浦”。如下将一位存储在存储位置中:电子必须通过电绝缘层传输到存储位置中。一旦电子在绝缘层后面,它们就会与它们的电荷形成电场,当读取存储位置时,该电场将解释为1。如果该层后面没有电子,则电池信息将解释为0。确实可以这种方式设置1,但不能设置为0。设置为0(=擦除1)是在单独的擦除例程中进行的,其中存在于绝缘层后面的电子被放电。但是,由于架构原因,这种擦除例程不仅作用于单个字节,还作用于组或块级别。根据架构的不同,通常使用128或256字节的块,如果希望覆盖此类块中的一个字节,则必须先擦除整个块,然后才能写回该块的全部内容。
如果多次重复执行此擦除操作,则可能会损坏绝缘层(“隧道氧化膜”)。这意味着电子可能会慢慢泄漏出去,随着时间的流逝,某些信息将从1变为0。因此,在ECU中严重限制了允许的闪光循环数。在生产ECU中,通常仅以一位数字为单位。此限制由Flash Boot Loader监视,该加载器使用计数器来跟踪已经执行了多少次Flash操作。当超过指定数量时,Flash Boot Loader会拒绝另一个Flash请求。
RAM(随机存取存储器)需要永久供电;否则它将丢失其内容。闪存用于长期存储应用程序,而RAM用于缓冲计算的数据和其他临时信息。关闭电源会导致RAM内容丢失。与闪存相比,它易于读取和写入RAM。
这个事实很明显:如果需要在运行时更改参数,则必须确保它们位于RAM中。了解这种情况确实非常重要。这就是为什么我们将基于以下示例查看ECU中应用程序的执行情况:
在该应用中,y参数是根据传感器值x计算的。
// Pseudocode representation
a = 5;
b = 2;
y = a * x + b;
如果应用程序在ECU中闪烁,则控制器在引导后按以下方式处理此代码:x参数的值对应于传感器值。因此,应用程序必须在某个时间点轮询传感器值,然后将该值存储在分配给x参数的存储位置中。由于始终需要在运行时重写此值,因此内存位置只能位于RAM中。
计算参数y。a和b值(作为因子和偏移量)作为信息包含在闪存中。它们存储为常量。y的值也必须存储在RAM中,因为这又是唯一可以进行写访问的位置。参数x和y确切地位于RAM中的哪个位置,或a和b在闪存中的位置,是在编译器/链接器运行中设置的。这是将对象分配到唯一地址的地方。对象名称,数据类型和地址之间的关系记录在链接器映射文件中。linkermap文件是由Linker运行生成的,可以以不同的格式存在。但是,所有格式的共同点是它们至少包含对象名称和地址。
在该示例中,如果偏移b和因子a取决于特定车辆,则a和b的值必须分别适应车辆的特定条件。这意味着算法保持原样,但参数值会因车辆而异。
在ECU的正常运行模式下,应用程序从闪存运行。它不允许对单个对象进行任何写访问。这意味着无法在运行时修改位于闪存区域中的参数值。如果在运行期间可能需要更改参数值,则要修改的参数必须位于RAM中而不是闪存中。现在,参数及其初始值如何进入RAM?如何解决需要修改比同时存储在RAM中更多的参数的问题?这些问题使我们进入了校准概念的主题(请参阅第3章)。
XCP基础摘要
XCP协议的机制提供了对内存内容的读写访问。访问以面向地址的方式进行。读访问启用了RAM中参数的测量,写访问启用了RAM中参数的校准。XCP允许与ECU中的事件同步执行测量。这样可以确保测量值相互关联。每次重新开始测量时,都可以自由选择要测量的信号。为了进行写访问,必须将要校准的参数存储在RAM中。这需要校准概念。
这延生出两个重要的问题:
- XCP协议的用户如何知道RAM中测量和校准参数的正确地址?
- 校准概念是什么样的?
第2章“ ECU描述文件A2L”回答了第一个问题。校准概念的主题在第3章中讨论。
1.1 XCP协议层概述
我们本篇所讲的XCP协议的物理层和链路层是基于CAN通讯的,回顾CAN通讯基础的内容,我们再次强调一个概念通讯是分层的。XCP协议同样也是分层的,这一章节介绍协议层的内容。
XCP协议规定,主从节点间的报文格式由报头、数据包和报尾组成,如下图所示。其中,报头和报尾属于传输层的定义和处理,协议层只关心下图中红色的部分。
数据包由ID域、时间戳域和数据域组成。
下图展示了PID(Packet Identification)的定义规则:
通过XCP数据包的通信分为一个区域用于命令(CTO)和一个区域用于发送同步数据(DTO)。
上图中涉及到的缩写释义如下:
缩写 | 类型 | 释义 |
---|---|---|
CMD | Command Packet | sends commands |
RES | Command Response Packet | positive response |
ERR | Error | negative response |
EV | Event Packet | asynchronous event |
SERV | Service Request Packet | service request |
DAQ | Data AcQuisition | send periodic measured values |
STIM | Stimulation | periodic stimulation of the Slave |
通过CTO(命令传输对象)交换命令。例如,主机以这种方式发起联系。从站必须始终使用RES或ERR响应CMD。其他CTO消息是异步发送的。数据传输对象(DTO)用于交换同步测量和仿真数据。
1.1.1 ID域
交换消息时,主站和从站都必须能够确定对方发送了哪条消息。这是在标识字段中完成的。这就是为什么每个消息都以数据包标识符(PID)开头的原因。
在发送CTO时,PID字段足以识别CMD,RES或其他CTO数据包。在图7中,可以看到从主站到从站的命令使用从0xC0到0xFF的PID。XCP从站以从0xFC到0xFF的PID响应或通知主机。这导致将PID唯一地分配给单独发送的CTO。发送DTO时,将使用标识字段的其他元素(请参见第1.3.4节“ DAQ和STIM的XCP数据包寻址”)。
1.1.2 时间戳域
DTO数据包使用时间戳,但是在CTO消息的传输中这是不可能的。从站使用时间戳为时间信息提供测量值。即,主站不仅具有测量值,而且还具有获取测量值的时间点。测量值到达主站所花费的时间不再重要,因为测量值和时间点之间的关系直接来自从站。
从站发送时间戳是可选的。ASAM XCP第2部分协议层规范中进一步讨论了此主题。
1.1.3 数据域
最后,XCP数据包还包含存储在数据字段中的数据。对于CTO数据包,数据字段由不同命令的特定参数组成。DTO数据包包含从设备中的测量值,发送STIM数据时则包含来自主设备的值。
1.2 CTO概述
CTO用于将命令从主站发送到从站,并将响应从从站发送到主站。
1.2.1 XCP命令结构
从站从主站接收命令,并且必须以肯定或否定响应对其作出反应。此处的通信结构始终相同:
Command(CMD):
每个命令都分配一个唯一的编号。另外,其他特定参数可以与命令一起发送。参数的最大数量在此定义为MAX_CTO1。 MAX_CTO指示CTO数据包的最大长度(以字节为单位)。
Positive response:
Negative response:
特定参数也可以作为补充信息以否定响应的形式发送,而不仅是肯定响应。 一个例子是当主站和从站之间建立连接时。在主站和从站之间的通信开始时,主站向从站发送连接请求,而连接请求又必须做出积极响应以产生连续的点对点连接。
1.2.2 CMD
1.2.3 RES
TBD.
1.2.4 ERR
TBD.
1.2.5 EV
TBD.
1.2.6 SERV
TBD.
1.3 DTO交换-同步数据交换
如图8所示,DTO(数据传输对象)可用于交换同步测量和校准数据。从站的数据通过DAQ发送到主站-与内部事件同步。该通信分为两个阶段:在初始化阶段,主设备向从设备通信从设备应针对不同事件发送哪些数据。在此阶段之后,主设备在从设备中启动测量,然后开始实际的测量阶段。从该时间点开始,从站将所需的数据发送到主站,主站仅侦听,直到其向从站发送“测量停止”为止。测量数据采集和传输的触发由ECU中的事件控制。
主设备通过STIM将数据发送到从设备。该通信还包括两个阶段:在初始化阶段,主设备会与从设备通信,它将发送到从设备的数据。在此阶段之后,主设备将数据发送到从设备,而STIM处理器将保存数据。一旦在从站中触发了相关的STIM事件,数据就会被传输到应用程序存储器。
1.3.1 测量方法:轮询与DAQ
在解释如何从从站测量事件同步的相关数据之前,这里简要介绍另一种称为轮询的测量方法。它不是基于DTO,而是基于CTO。实际上,应该在单独的章节中解释该主题,但是对轮询的描述使我们能够以非常优雅的方式得出基于DTO的测量的必要性,因此在这一点上进行较小的讨论是有意义的。
主站可以使用SHORT_UPLOAD命令从从站请求测量参数的值。这称为轮询。这是最简单的测量情况:在已接收并执行SHORT_UPLOAD命令时发送测量参数的测量值。
1.3.2 DAQ测量方法
DAQ方法解决了以下两个轮询问题:
- 通过将测量值的获取与ECU中的事件耦合来实现测量值的相关性。在确保已完成所有计算之前,不会获取和传输测量值。
- 为了减少总线负载,测量过程分为两个阶段:在配置阶段,主站将与它感兴趣的值传达给从站,而第二阶段仅涉及将从站的测量值传输到主站。
现在如何将测量值的采集与ECU中的过程耦合?图19显示了ECU中的计算周期与参数X和Y的变化之间的关系。
让我们看一下ECU中的顺序:到达事件E1(=计算周期结束)时,便已获取所有参数并进行了计算。这意味着所有值必须彼此匹配并在此时间点关联。这意味着我们使用事件同步测量方法。这正是借助DAQ机制实现的:从站中的算法达到“计算周期完成”事件时,XCP从站会收集测量参数的值,将其保存在缓冲区中,然后将其发送到主站。这假定从站知道应该为哪个事件测量哪些参数。
事件不一定非要是周期性的,时间相等的事件,例如,对于发动机控制器,它可能是角度同步的。这使得两个事件之间的时间间隔取决于引擎的转速。单个事件,例如驾驶员激活开关,这也是时间上并非等距的事件。
用户选择信号。除了实际的测量对象外,用户还必须为测量参数选择基础事件。事件以及测量对象对事件的可能分配必须存储在A2L文件中。
站在巨人的肩上
【1】XCP_ReferenceBook_V3.0_EN.pdf
【2】Application note:Integration of the Vector CCP Driver with Vector CAN Driver ·CCP DEMO· on a Motarola HC12 microcontroller
【3】XCP Professional Measuring and Calibrating via CAN, FlexRay and Ethernet