XCP协议在汽车电子开发中起着重要的作用,可能每天都在用,但是确并不清除XCP协议到底是什么。 本文将说明XCP协议的前世今生,并分析其具体是如何通信的,以及XCP的功能和协议内容。 为了避免文章太长,分两个部分。
1 XCP协议的来源
提及XCP协议,不得不从ASAM说起。文章源自线束工程师之家-https://www.suncve.com/introduction-to-xcp-part-1/
随着汽车电子的高速发展,汽车上的ECU越来越多,各控制器间协同工作,控制着不同的部件。文章源自线束工程师之家-https://www.suncve.com/introduction-to-xcp-part-1/
电子控制单元作为汽车系统中的大脑,通过采集输入信息,比如加速踏板,制动踏板,巡航,起停等,采用特定的算法计算输出,为了达到理想的控制效果,算法中包含较多的可标定参数,根据不同的输入和工况等调整。文章源自线束工程师之家-https://www.suncve.com/introduction-to-xcp-part-1/
ECU中的程序由软件工程师设计开发,而软件工程师并不能准确将这些参数设置成合理值,这些参数是需要在实验中根据我们追求的经济性、动力性、舒适性和满足排放法规等来设置,这部分工作是由标定工程师(或应用工程师)在软件开发后利用改变参数分析性能反复迭代最终测定,因此标定工程师就需要对不同参数进行获取(读操作)和标定(写操作)。这时候,就需要有个测量和标定标准来规范大家的操作。文章源自线束工程师之家-https://www.suncve.com/introduction-to-xcp-part-1/
在1990年代,几个德系OEM和TIER1—奥迪,宝马,奔驰,大众,BOSCH,ETAS和Vector等,一起成立了一个协会,叫做ASAM。文章源自线束工程师之家-https://www.suncve.com/introduction-to-xcp-part-1/
ASAM(Association for Standardisation of Automation and Measuring Systems,自动化和测量系统标准协会)是一个非营利性组织,是汽车工业中的标准协会,致力于数据模型,接口及语言规范等领域。不要小瞧这个协会,除了我们今天提到的测试和标定标准,还有诊断、ECU网络、软件开发、自动化测试、数据管理和分析、仿真等范畴都在遵循它制定的标准。文章源自线束工程师之家-https://www.suncve.com/introduction-to-xcp-part-1/
成立之初,ASAM发布的CCP(CAN Calibration Protocol)协议,它是一种基于CAN总线的ECU标定协议,采用CCP协议可以快速而有效地实现对汽车电控单元的标定。现在仍然有许多汽车厂商还在使用。文章源自线束工程师之家-https://www.suncve.com/introduction-to-xcp-part-1/
有了CCP协议后,ASAM意识到随着整车网络需求的发展,CAN总线已经无法满足整车需求,智能化和网联化要求FlexRay,以太网的加入。2003年左右,在CCP协议的基础上,ASAM又提出了XCP(Universal Measurement and Calibration Protocol)协议。“XCP”中"X"是Universal,通用的,表示能适配它能够支持多种底层网络协议和总线类型。文章源自线束工程师之家-https://www.suncve.com/introduction-to-xcp-part-1/
2 XCP协议概述
XCP的主要应用于测量和标定ECU内部参数。此协议能够使数据采集工作与ECU内部运行的任务和中断同步,从而保证每当ECU软件更新参数时,能快速采集到所需的参数值。基于以太网的XCP传输层协议可以使用TCP或UDP,不仅适用于物理控制单元,还可用于测量和调整虚拟控制单元。文章源自线束工程师之家-https://www.suncve.com/introduction-to-xcp-part-1/
文章源自线束工程师之家-https://www.suncve.com/introduction-to-xcp-part-1/
XCP允许对内存直接进行读写访问:这样在读访问中就可以用来测量来自内存的参数数值,写访问中就可以用于调整内存中参数的数值。
3 XCP协议框架
为了确保传输网络的独立性,XCP被分成一个协议和一个传输层。由于XCP在功能方面增强了很多,所以不能向后兼容CAN标定协议(CCP)。同时ASAM已经对XCP协议定义了下列传输层为标准:
- 基于CAN的XCP
- 基于LIN的XCP
- 基于SxI(SPI、SCI)的XCP
- 基于以太网(TCP/UDP)的XCP
- 基于USB的XCP
- 基于FlexRay的XCP
XCP由ASAM 标准化并且取代了古老的CAN标定协议(CCP)。相较于CCP协议,XCP在功能上做了许多改进,包括:
- 支持任何物理层协议,不仅限于CAN
- 优化了控制单元资源的利用率
- 同步数据激励
- 支持启动测量
- 通过块传输命令优化通信
- 即插即用配置
- 通过测量控件内的时间戳从而精确测量数据采集。
采用一主多从的模式,单个主机可以同时与多个从机通讯。主机通过下发命令与从机建立连接,解锁,读取数据,修改参数等操作。所有XCP通信都以名为“XCP数据包”的数据对象形式传输。
XCP数据包有两种类型。
命令传输对象(CTO:Command Transfer Object)被用来传输一般的控制命令:控制命令(CMD),命令响应(RES),错误包(ERR)事件包(EV)以及服务请求数据包(SERV)。
数据传输对象(DTO:Data Transfer Object)被用于传输同步数据采集数据(DAQ)和同步数据激励数据(STIM)。
CMD: Command
RES: Response
ERR: Error
EV: Event
SERV: Service Request Processor
DAQ: Data Acquisition
STIM: Stimulation
XCP实现测量与控制设备中的事件同步进行,从而确保测得值具有相关性。待测量的信号可以在每次重启系统时预先选定。
写访问要求待调整的参数位于RAM内。XCP的用户需要知道测量和调整值在内存中的确切地址。该地址可以通过控制单元说明文件(A2L文件)获得。XCP的一大优势是它能够从与控制单元内的程序或事件同步变化的内存上获取测量数据,从而使用户能够识别控制单元中的时间次序与这些变化值之间的直接关联,这被称为事件同步测量。
4 XCP协议数据结构
主、从设备之间每次传输的数据都采用XCP帧的格式,包含一个XCP报头、XCP数据包和XCP报尾。XCP帧支持的传输层可将这三个帧元素映射到相应的传输帧格式。
XCP数据包包含独立于所选传输机制的协议数据,携带标识、时间戳和实际数据。PID是标识字段的一部分,用于标记数据包及数据包内部的数据值。
基于以太网的XCP既可以使用TCP也可以使用UDP。这两种结合方式各有优缺点。
选择使用哪一种可根据使用场景决定。例如,如果要记录完整的跟踪数据,需要接收来自网络的每一个帧数据,若是在传输过程中有任何丢失,则必须重传,并保证其顺序正确如初。这种场景下必须使用TCP。
与此相反,在对设备进行实时测量时,它的信号数据仅在获得下一个样本时才有效。如果测得的数据在传输过程中丢失,但下一个样本证实丢失的数据无效,那么就没有必要重传先前的报文,这种场景使用UDP即可。
XCP报头包含长度信息和一个可用于检测数据包丢失情况的计数器。主设备每发送一个数据包,就将计数器的值増加一,从设备的做法也是如此。两个计数器相互独立。多个XCP数据包可以合并到同一个UDP数据包中,但一个XCP数据包不可以分成多个数据包。UDP和TCP的XCP报尾为空。
5 ECU说明文件和数据记录文件
XCP使用时总是与ECU说明文件配合使用,这个文件就是ASAP2(A2L)文件。该文件包含使用XCP所需的必要信息,包括关于ECU参数、内存变量和ECU内存详细地址信息以及如何解锁访问XCP功能的安全信息。XCP还可以从ECU上传数据,向ECU下载数据以及对ECU重新编程。为了实现这些功能,XCP Master必须知晓ECU不同内存区的详细信息。
A2L是基于ECU软件生成的,ECU软件的对象包含在A2L文件中,源代码更改后A2L文件也会进行更改。A2L文件的结构如下图。
标定数据记录文件使用MDF格式,全称(Measurement Data Format),即测量数据格式,是ASAM(自动化及测量系统标准协会)定义的。INCA、CANape等工具录制的测量数据,都是MDF格式。
1991年发布的第一个公开版本是MDF 2.0(.dat);MDF 3.0(.mdf)于2002年发布,多年来,逐步扩展。当前的非ASAM版本MDF 3.3仍完全向后兼容所有MDF 2.x和3.x版本。但是,由于文件内部链接使用32位数据类型,因此专有MDF 3.x格式的文件大小限制为4GB。
2009年发布了ASAM MDF 4.0(.mf4),克服了先前MDF3.x版本的大小限制,并提供了一系列新功能,例如通过XML的灵活可扩展性,自定义信号分组,事件或附件。但是,由于诸如链接的64位数据类型之类的根本更改,MDF 4.x不再与MDF 3.x 兼容。当前最新版本为2012年ASAM MDF 4.1。
来源:汽车ECU设计
推荐阅读: