您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > XCP协议与A2L协议详细分析
一、XCP协议和A2L文件–A2L(ASAP2)解析ASAP2标准是一个比较复杂的标准,详细的一条一条讲解标准内容并没有太大的价格,我们将主要以一种应用的方式来带领大家认识ASAP2标准理解作为ASAP2表现形式的A2L文件的作用,最后学会如何阅读和修改A2L文件。首先我们要搞清楚什么是A2L什么是ASAP2标准,简单来说ASAP2标准是ASAM组织制定的一套标准,该标准规定了上位机(Master)和ECU(Slave)之间的通讯所需要的所有信息(可以是XCPonCAN,XCPonUSB等,也可以是CCP,还可以是UDS),而A2L文件就是ASAP2标准的表现形式,符合ASAP2标准的A2L文件主要含有两部分内容:ECU的描述信息和通讯方式的描述信息。什么是ASAP2标准ASAP2标准是ASAM在1998年提出来的,现在它的名字叫做ASAMMCD-2MC/D,是ASAP标准中的第二部分。整个ASAP有3部分内容,ASAP1描述了上位机(Master)和ECU(Slave)之间的通讯协议,我们这个系列文章介绍的XCP以及它的前身CCP都是属于ASAP1标准,ASAP2规定了Master端如何去描述和解析Slave端的信息,ASAP3规定了如何使用第三方工具和设备操作和控制上位机(Master),例如如何使用台架软件来控制标定测量工具去对ECU进行控制和测试。ASAP2标准目前的版本为v1.6,对应的文件全名为:ASAM_MCD-2MC_DataSpecifcation_V1.6.pdf什么是A2L文件前边介绍了,A2L文件是基于ASAP2标准书写完成的,那么A2L文件到底是什么东西了。首先它是采用ASAP2指定的一套类XML语言的描述性语言(采用开标签和关标签来描述信息)书写的文件,它里边包含了某个特定的ECU中的软件和系统信息,还包含了上位机和ECU通讯方式的约定,它用来指导上位机和ECU的通讯交互过程,让他们对交互的信息有一致的认识,从而是上位机工具准确且友好的将ECU中的信息展现给用户。下面我们来看一下A2L文件的结构和组成。PROJECT{HEADER{...}/*Projectdescription*/MODULEDevice{MOD_PAR{...}/*Controlunitmanagementdata*/MOD_COMMON{...}/*Module-wide(ECUspecific)definitions*/CHARACTERISTIC{...}/*Adjustableobjects*/CHARACTERISTIC{...}...AXIS_PTS{...}/*Axispointsobjects*/AXIS_PTS{...}...MEASUREMENT{...}/*Measurementobjects*/MEASUREMENT{...}...COMPU_METHOD{...}/*Conversionmethod*/COMPU_METHOD{...}...COMPU_TAB{...}/*Conversiontables*/COMPU_TAB{...}...FUNCTION{...}/*Functionallocations*/FUNCTION{...}...GROUP{...}/*Groups*/GROUP{...}...RECORD_LAYOUT{...}/*Recordlayoutsofadjustableobjects*/RECORD_LAYOUT{...}}}/*ENDOFPROJECT*/一个A2L文件只能有一个Project(项目),而项目中至少要有一个Module,A2L文件的注释和C语言的注释方式是一样的,支持/**/和//两种方式。上边文件结构中,不同的文件块都有着重要的意义:•HEADER:这个块里边包含了项目信息,包括项目编号,项目版本等信息。•MODULE:这个块里边包含了在标定测量层面来描述ECU需要的所有信息,一个ECU对应一个MODULE块,MODULE由许多子块来组成。oMOD_PAR:这个块里包含了用于管理ECU的数据,例如客户名,编号,CPU类型,ECU的内存分配等,其中最重要的就是ECU的内存分配,开发人员需要根据ECU内存分段情况定义MEMORYSEGMENT和SEGMENT里边的PAGE,这里的SEGMENT/PAGE的概念和在线标定中的概念是一致的,请参考在线标定篇章,一个MODULE里边只能出现一次;oMOD_COMMON:这个块用来指定ECU的一些标准的一般性描述信息,比如大小端,数据的对齐方式,FLOAT变量的处理方式等,一个MODULE里边只能出现一次;oCHARACTERISTIC:这个块用来定义标定变量,里边包含了可以被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息,一个MODULE里边可以出现很多次这样的块,也就是说一个ECU可以有很多的标定变量;oAXIS_PTS:这个块用来定义数组或查表变量对应的轴的类型,它将被RECORD_LAYOUT块来引用,一个ECU里边可以有很多种不同的轴类型,用于实现查表和插值;oMEASUREMENT:这个块用来定义测量变量,里边包含了可以被测量的变量的名字,地址,长度,计算公式,精度,最大最小值等信息,一个MODULE里边可以出现很多次这样的块,也就是说一个ECU可以有很多的测量变量;oCOMPU_METHOD:用于定义计算公式,及原始值和物理值之前的转换关系,这些公司可以被标定变量和测量变量来引用,从而将原始值转换成便于用户阅读和使用的物理值;oCOMPU_TAB:这个块用来定义原始值和物理值的映射关系,是一种特殊的转换关系,它一般应用于枚举变量,例如我们想采集一个代表XCP状态机的变量,分别为0对应DISCONNECTED,1对应CONNECTED,2对应RESUME,那么我们就可以把这样的映射关系定义层一个COMPU_TAB,然后关联到对应的变量上,这时候如果上位机采集到1这样的原始值,它就可以将当前的状态显示成“CONNECTED”字样,方便用于阅读和使用;oFUNCTION:这个块不是必须;oGROUPS:这个块这个把标定变量和测量变量按照一定的逻辑(比如功能模块)组织起来,在上位机工具中形成一个下拉菜单,使得用于可以从中选择变量,这个块不是必须的;oRECORD_LAYOUT:这个块用来定义标定变量的物理存储结构(单个变量,二维表,三维表等)。上述的这些信息块可以分为两类,一类是随着ECU和XCP实施完成以后就确定的,这类信息一经确定以后再后续的使用过程中是不需要修改的,例如大小端,MEMORYSEGMENT内存分配等,上述HEADER/MOD_PAR/MOD_COMMON属于这一类,另外一类是当ECU软件有所调整的时候就会变化的,例如已有的标定变量和测量变量的地址,甚至变量名,或者可能会新增变量,上述CHARACTERISTIC/AXIS_PTS/MEASUREMENT/COMPU_METHOD/COMPU_TAB/FUNCTION/GROUPS/RECORD_LAYOUT属于这一类。在第二类中改动最多的尤其是CHARACTERISTIC和MEASUREMENT快中的变量地址信息,因为每次软件变化重新编译都会造成这部分信息的更新,地址更新导致的块信息更新需要手动的更改A2L文件才能使得A2L和当前的软件配置起来,只有两者相匹配才能实现正确的标定和测量。A2L块示例1.测量变量vechicle_speed可以进行如下定义,该变量处于RAM中,对应的地址是0xD0001234,它的范围是[0-230],它在ECU中以一个UWORD类型来表示,原始值和物理值的转换关系为:Phy=0.003XRaw,即Ax+B中A=0.003,B=0v/beginMEASUREMENTVEH_SPDVehicleSpeed.UWORDVehicle_Speed_Conversion00.0000000.000000230.000000ECU_ADDRESS0xD0001234DISPLAY_IDENTIFIERvehicle_speed/endMEASUREMENT/beginCOMPU_METHODVehicle_Speed_ConversionAx+BRAT_FUNC%4.3factCOEFFS0.01.00.0000000.00.00.003000000/endCOMPU_METHOD2.测量变量xcp_state代表XCP的状态,可以进行如下定义,它处于RAM中,在ECU中的地址是0xD0005678,它是一个枚举量,0对应DISCONNECTED,1对应CONNECTED,2对应RESUME/beginMEASUREMENTXCP_STATEXCPstateUBYTEXCP_STATE_ENUM00.0000000.0000002.000000ECU_ADDRESS0xD0005678DISPLAY_IDENTIFIERxcp_state/endMEASUREMENT/beginCOMPU_METHODXCP_STATE_ENUMTAB_VERB%10.4COMPU_TAB_REFXCP_STATE_ENUM_TAB/endCOMPU_METHOD/beginCOMPU_VTABXCP_STATE_ENUM_TABTAB_VERB30DISCONNECTED1CONNECTED2RESUME/endCOMPU_VTAB3.标定变量Current_threshold可以进行如下定义,它处在FLASH标定区域,在ECU中的地址是0x00012345,它的范围是[-20,20],是一个有符号量,精度为0.125,即Phy=0.125XRaw/beginCHARACTERISTICCurrent_thresholdCurVALUE0x00012345Standard_SW0current_cmpu-20.020.0DISPLAY_IDENTIFIERCurrent_Vaule/endCHARACTERISTIC/beginRECORD_LAYOUTStandard_SWFNC_VALUES1SWORDCOLUMN_DIRDIRECT/endRECORD_LAYOUT/beginCOMPU_METHODcurrent_cmpuRAT_FUNC%6.2ACOEFFS0.01.00.0000000.00.00.125000000000/endCOMPU_METHOD我们前边提到的,在每次软件有更新重新编译以后,会导致这些变量在ECU中的地址有变化,那么上边这些变量对应的ECUADDRESS条目的内容就需要随着改变,变量的地址信息可以从编译生成的MAP文件中获得,然后手动更新到A2L中。二、XCP协议和A2L文件–XCP协议解析Part2在上一篇文章中,我们解析了XCP协议中一些宏观的概念,在本篇文章中,我们将会利用CAN传输层来展示具体到XCP消息结构。我们将首先从一个通用的角度来看XCP的消息结构,这里的通用指的是既针对CTO又针对DTO,然后我们会对基于CAN传输层的CTO和DTO的消息结构分别进行讲解。注:文章中所使用到的DTO概念适用于DAQ和STIM,但是举例和描述中都默认使用DAQ。通用消息结构通用的消息结构既适用于CTO也适用于DTO,通用的消息结构既适用于CAN传输层也适用于其他传输层,在构造不同命令的时候,通用结构里边的某些字段的含义不同或者是字段的长度不同。一个完整的XCP消息(也可以说一帧XCP消息)由三部分组成,它们是XCPHeader(XCP消息头),XCPPacket(XCP消息体),XCPTail(XCP消息尾),Header和Tail的存在是依赖于具体的传输层的,而Packet在不同的传输层上都是必须的。Packet又有3个组成部分,分别是标识区(IdentificationField),时间戳区(TimestampField),数据区(DataField)。对于CAN传输
本文标题:XCP协议与A2L协议详细分析
链接地址:https://www.777doc.com/doc-6714198 .html