在XCP系列文章《看了就会的XCP协议介绍》中我们系统介绍了XCP协议,里面提到了A2L文件是采用ASAP2指定的一套类XML语言的描述性语言(采用开标签和关标签来描述信息)书写的文件,是一种方便XCP进行工作的描述性文件,可以将其理解为一个通讯矩阵,包含了通讯接口(CAN,USB等,项目信息、ECU信息、标定变量信息、测量变量信息等。
本文是XCP的系列介绍,在此我们将对A2L文件进行解析,对其中标签含义进行逐个分析,以方便用户理解其内容,为以后的应用打好理论基础。
废话不多说先上干货,以思维导图的形式对A2L文件进行归纳及总结如下(穷逼没钱充会员去水印,大家先凑合看下~~):
对应A2L文件中的格式如下,在后面一章我们详细进行解析
/begin PROJECT /*表示一整个项目,一个文件一个项目*/
/begin HEADER
/*描述项目信息,包括项目编号,项目版本等信息*/
/end HEADER
/begin MODLUE/*描述ECU需要的所有信息,一个ECU对应一个MODULE块*/
/begin A2ML/*描述接口数据格式,包括传输命令,DAQ及传输层的定义*/
/end A2ML
/begin MOD_PAR /*管理ECU的数据,CPU 客户 编号等等,最重要的是内存的分段分页管理,类似DSP中的CMD文件*/
/end MOD_PAR
/begin MOD_COMMON/*一般性描述信息,比如数据的对齐方式*/
/end MOD_COMMON
/begin IF_DATA/*接口数据具体的参数*/
/end IF_DATA
/begin CHARACTERISTIC/*定义标定变量,包含被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息*/
/end CHARACTERISTIC /*可定义多个*/
/begin AXIS_PTS
/end AXIS_PTS
/begin MEASUREMENT/*定义测量变量,包含了被测量的变量的名字,地址,长度,计算公式,精度,最大最小值等信息*/
/end MEASUREMENT/*可定义多个*/
/begin COMPU_METHOD/*定义计算公式,及原始值和物理值之前的转换关系 如phy = ax+b*/
/end COMPU_METHOD
/begin COMPU_TAB /*定义原始值和物理值的映射关系 一般是枚举变量*/
/end COMPU_TAB
/begin FUNCTION
/end FUNCTION
/begin RECORD_LAYOUT/*定义标定变量的物理存储结构(一维,二维表,三维表等)*/
/end RECORD_LAYOUT
/begin MERGED UNIT
/end MERGED UNIT
/end MODLUE
/end PROJECT
HEADER部分内容较为简单,也没太多有用信息,其位于A2L文件的最开始部分,包括了A2L版本及项目名称信息。
A2ML描述接口数据格式,注意只是格式,在该部分不会具体的描述出传输层,传输速率等。包括PROTOCAL_LAYER、DAQ及传输层相关的定义,相当于提前将可能用到的信息在这个部分定义好,在后面IF_DATA实际应用时就直接从这部分中引用。
PROTOCAL_LAYER部分会将用到的CMD罗列出来,如:
“GET_COMM_MODE_INFO” =0xFB,
“GET_ID” =0xFB,
…
MOD_PAR部分管理ECU的数据,CPU 客户编号、CPU型号,CRC校验方式等,此外较为重要的信息还有内存的分段分页管理,这部分是在标定时的Overlay时会用到。
MOD_COMMON部分是内容较少,主要 是数据的对齐方式的描述信息。
这块是A2L文件的核心内容,定义的内容如下:
各个Timeout时间,如Connect、Checksum及发送PROGRAM_START/PROGRAM_VERIFY等命令的最大超时时间;
OPTIONAL_CMD,罗列了用到的CMD命令,这部分会影响实际的使用,如果后面大家在实际应用中发现不能发某个指令可以来此部分看看是不是没有;
DAQ的配置。DAQ类型(动态/静态?)数量,用到的Event(如2ms/5ms/10ms等);
CAN (如果选择的是CAN通讯)ID、波特率、采样点等
标定量存放部分,包含了被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息,一个MODULE里边可以有多个标定变量。
这个块用来定义测量变量,包含了被测量变量的名字,地址,长度,计算公式,精度,最大最小值等信息,与标定量类似,一个MODULE里边可以出现很多次这样的块,即可以有多个测量变量。
COMPU_METHOD用于定义计算公式,即原始值和物理值之间的转换关系,将原始值通过相应的计算方法转换成便于用户阅读和使用的物理值。
A2L定义了如下的COMPU_METHOD:
对应不同的计算方式解析流程如下:
COMPU_TAB这个块也是用来表示原始值和物理值的映射关系,但其是一种特殊的转换关系,一般应用于枚举变量,例如一个代表XCP状态机的变量,分别为0对应FALSE,1对应TRUE,那就可以把这样的映射关系定义层一个COMPU_TAB,然后关联到对应的变量上,这时候如果上位机采集到原始值‘1’,就可以将当前的状态显示成“TRUE”,方便用户使用。
这个Bloc用来定义标定变量的物理存储结构(单个变量,二维表,三维表等),如:
/begin RECORD_LAYOUT Scalar_BOOLEAN
FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
这两个Block不是必须的部分,其中;
FUNCTION这个在Vcetor提供的SIP包中会对XcpAppl的版本进行引用;
MERGED UNIT部分会对单位进行定义,如将“Seconds”定义为“s”等