XCP表示"Universal Measurement and Calibration Protocol",X表示支持多用传输协议。
XCP支持CAN Eth FlexRay Sxl USB等多种协议。
XCP协议主要分为三个部分MCD-1 MCD-2 MCD-3.
MCD-1主要介绍XCP驱动层,xcp是如何进行数据传输的。
MCD-2主要介绍A2L文件的格式描述
MCD-3主要介绍自动化标定的工具
本文仅介绍XCP 驱动部分
2、XCP 数据格式
XCP协议分为Master 和Salve,由标定上位机(Canape)构成Master,ECU构成Salve。主从机之间采用XCP Packet 交互。
其中XCP Header与XCP Tail是TCP/UDP协议下的控制字,当采用CAN传输时,不需要关注。
PID: Packet Identifier,定义如下
XCP包含两种通讯模式CTO,DTO.
CTO:Commadn Transfer Object
DTO:Data Transfer Object
当采用CTO模式时,主从之间总是采用一问一答的方式进行交互。每个CTO命令都会 有一个Response 或者Error响应。
当采用DTO模式时,DTO的数据会需要根据Event关联
CMD数据包由PID和DATA组成。
命令码PID如下:
当采用DTO的方式时,从机主动上报测量数据。从机通过EV数据包,告知主机上报数据。
依据CTO 与DTO两种传输方式,产生两种不同的参数测量过程。
1、Polling
2、Event
Poling是基于CTO的方式,当主机请求一个数据的测量时,从机返回这个值。当多个值存在依赖关系时,这种请求方式就无法体现多个测量值的依赖关系。
Polling是基于CTO的问答机制,进行数据测量
主机通过PID 0xF4(SHORT_UPLOAD)请求了0x0021A1BD地址的数据
从机响应了PID 0xFF(RES)返回改地址的数据0x1E
Event是基于DTO的方式,主机不在主动请求测量数据,采用从机主动上报的方式执行。当多个测量数据完成时,从机调用Xcp_Event接口。触发DTO数据的主动上报。
每个XCP Event都会对应一个DAQ List,这些DAQ List 包含了这个Event所需要上传的全部数据。这些数据以ODT(Object Data Table)的形式组成,每个ODT对应一个PID编号
在由ODT组成一个DAQ LIST
Static DAQ list:
静态DAQlist 是集成在ECU中的,通过A2L文件。上位机可以获取到这个List中的信息。
一个DAQ List 由N个ODT组成,每个ODT对应N个测量Entry.
Dynamic DAQ list:
XCP提供三个命令配置动态DAQ,
DAQ LIST在传输过程中,以ODT为最小的传输单元。
在传输ODT的过程中,主要以relative ODT numbers 和 absolute ODT number。两种方式对应两种传输的数据接口
当采用absolute ODT number时,每个ODT的编号在A2L文件中都是固定的,依次递增。
当采用relative ODT number时,每个ODT仅代表当前DAQ LIST内的ODT编号。同时增加absolute DAQ list number进行区分。
在系统运行过程中,进行参数标定。但是XCP不会修改程序中固化的参数值。
主机发送0xF6 (SET_MEA) 表示需要0x0021C02C地址的值
从机返回0xFF (RES)
主机发送0xF0(DOWNLOAD)命令,将修改的值下发
从机返回0xFF
主机发送0xF4(SHROT_UPLOAD),获取修改后的值
从机返回0xFF(RES)和修改之后的值
修改之后的数据,XCP不进行保存处理。ECU可以在下电过程中保存。
XCP提供paramset filer,通过这个文件可以保存当前标定的参数值,上位机可以在下次标定时,将标定参数传输给ECU。
上位机也可以通过修改elf文件,直接将标定参数修改进ECU的烧录文件中。
XCP提供类似UDS的27服务,主机在进行connet请求时,需要先进行解锁。
从机发送Seed 给到主机,主机返回对应的Key。从机核对这个Key值,Key值符合期,则解锁成功。
Bypassing,就是将ECU的数据测量出来,Bypass Hardawre获取ECU的数据,并返回给ECU。同时ECU将不再使用内部的计算数据,而是采用Bypass Hardware提供的数据。
当旁路发生时,ECU不再使用算法A计算出来的数据,而是使用外部的计算数据。这里应该是算法A不再执行了。
AUTOSAR中定义XCP以下几个接口
1.void Xcp_Init(const Xcp_ConfigType* Xcp_ConfigPtr)
2.void Xcp_GetVersionInfo(Std_VersionInfoType* versioninfo)
3.voidXcp_SetTransmissionMode(NetworkHandleTypeChannel,
Xcp_TransmissionModeType Mode)
4.Xcp_RxIndication(传输层接口,根据不同的传输层有不同的命名)
5.void Xcp_TxConfirmation(PduIdType TxPduId,Std_ReturnType result
)(同上)
6.Std_ReturnType Xcp_TriggerTransmit(PduIdType TxPduId,PduInfoType* PduInfoPtr)
CAN实现XCP时,主要实现
Xcp_CanRxIndication
Xcp_CanTxConfirmation
Xcp_CanTriggersmit
XCP在AUTOSAR架构中不经过PDUR,与NM CANTP J1939TP一样。下层是CanIf,CanIf收到报文后,根据报文ID找到对应的User.最后找到对应的上层。
请参考下一篇:AUTOSAR_CanIf的设计