目 录CONTENT

文章目录

AUTOSAR知识点 之 XCP (一):A2L解析

moke
2024-07-26 / 0 评论 / 0 点赞 / 51 阅读 / 0 字

1、概述

        A2L文件是基于ASAP2标准制定的用来描述ECU内存的数据库文件,保存了标定系统与ECU通信的配置参数和ECU内部数据单元的详细信息。

A2L文件组成

1、A2L头文件:项目配置信息等,一般不随软件编译变化。

2、标定变量描述:地址信息可能经常变化。

3、观测变量描述:地址信息可能经常变化。

4、辅助信息:例如转换公式,一般不随软件编译变化。

ASAM汽车电子产品的MCD标准在3层系统中结构如下

2、A2L文件描述

        一个 A2L 文件只能有一个 Project(项目), 而项目中至少要有一个 Module,A2L 文件的注释和 C 语言的注释方式是一样的,支持/**/和//两种方式。上边文件结构中,不同的文件块都有着重要的意义。 下面借助基于 CANape 的 a2l 文件来详细阐述:

2.1、HEADER

        这个块里边包含了项目信息,包括项目编号,项目版本等信息。冒号里面是注释。

2.2、MODULE

        这个块里边包含了在标定测量层面来描述 ECU 需要的所有信息, 一个 ECU对应一个 MODULE 块, MODULE 由许多子块来组成。

 

 从A2L文件里面可以看到,MODULE与PROJECT时贯穿整个A2L文件的。

2.2.1、A2ML

首先查看一下A2ML信息

         主要是用于描述接口特定的数据格式。在 A2ML 里包含了许多类型的结构体定义 xcp 协议的结构体、 DAQ、 program, 基于 CAN 的协议参数等, 均来自ASAM_XCP_Part2 和 Part3 的关于协议的描述。 该文件指定了传输协议的Common_Parameters。

2.2.2、MOD_PAR

        这个块里包含了用于管理 ECU 的数据,例如客户名,编号, CPU 类型, ECU的内存分配等, 其中最重要的就是 ECU 的内存分配, 开发人员需要根据 ECU 内存分段情况定义 MEMORY SEGMENT 和 SEGMENT 里边的 PAGE,这里的 SEGMENT/PAGE的概念和在线标定中的概念是一致的,一个 MODULE 里边只能出现一次。

2.2.3、MOD_COMMON

        这个块用来指定 ECU 的一些标准的一般性描述信息, 比如大小端, 数据的对齐方式, FLOAT 变量的处理方式等, 一个 MODULE 里边只能出现一次。

2.2.4、IF_DATA XCP

        一个XCP通信栈里的一个“IF_DATA” 包含了常用参数( Common_Parameters),这些参数在通过XCP通信时会被作为默认值;在“IF_DATA”’ 里至少包含一个/begin XCP_on_##(CAN\TCPIP 等)用于对特定的传输层;除了“IF_DATA XCP” , 还有“IF_DATA XCPplus” , 它可以同时涉及到同一传输层的多种设备。 如下: 下面一段基本上与 A2ML 语言里结构体定义的类似,只是要将数据定义好。

2.2.5、XCP_ON_XXX

假设基于CAN的XCP此处XCP_ON_CAN,可以在此处更改波特率、CANID等参数信息。

         对于 INCA, 该部分的配置极其重要, A2L 的值必须严格与 CAN 驱动的配置相匹配, 否则会导致 upload、 download 等功能出现 bug;

重要的几点:

         采样点的设置通常会影响通信, 检测到上升沿或下降沿之后 1Bit 接收时间的 x%时间的逻辑电平值作为这一位的逻辑电平值。因为每个节点的晶振可能不同,导致时间片的长度不一致,如果约定的采样时间不恰当可能导致采样的结果与实际值不一致,约定的采样点是经过多种实验计算出来的。

2.2.6、PROTOCOL_LAYER

/begin IF_DATA XCP
/begin PROTOCOL_LAYER
0x0100
0x000A
0x000A
0x000A
0x000A
0x000A
0x0000
0x0020
0x08 /* MAX_CTO */
0x08 /* MAX_DTO */
BYTE_ORDER_MSB_LAST
ADDRESS_GRANULARITY_BYTE
OPTIONAL_CMD GET_COMM_MODE_INFO
OPTIONAL_CMD GET_SEED
OPTIONAL_CMD UNLOCK
OPTIONAL_CMD SET_MTA
OPTIONAL_CMD UPLOAD
OPTIONAL_CMD SHORT_UPLOAD
OPTIONAL_CMD BUILD_CHECKSUM
OPTIONAL_CMD GET_SEED
OPTIONAL_CMD UNLOCK
OPTIONAL_CMD DOWNLOAD
OPTIONAL_CMD DOWNLOAD_NEXT
OPTIONAL_CMD SHORT_DOWNLOAD
OPTIONAL_CMD SET_CAL_PAGE
OPTIONAL_CMD GET_CAL_PAGE
OPTIONAL_CMD SET_DAQ_LIST_MODE
OPTIONAL_CMD WRITE_DAQ
OPTIONAL_CMD SET_DAQ_PTR
OPTIONAL_CMD START_STOP_SYNCH
OPTIONAL_CMD START_STOP_DAQ_LIST
OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO
OPTIONAL_CMD GET_DAQ_LIST_MODE
OPTIONAL_CMD GET_DAQ_EVENT_INFO
OPTIONAL_CMD CLEAR_DAQ_LIST
OPTIONAL_CMD GET_DAQ_LIST_INFO
OPTIONAL_CMD FREE_DAQ
OPTIONAL_CMD ALLOC_DAQ
OPTIONAL_CMD ALLOC_ODT
OPTIONAL_CMD ALLOC_ODT_ENTRY
OPTIONAL_CMD GET_SECTOR_INFO
OPTIONAL_CMD PROGRAM_START
OPTIONAL_CMD PROGRAM_CLEAR
OPTIONAL_CMD PROGRAM
OPTIONAL_CMD PROGRAM_RESET
OPTIONAL_CMD PROGRAM_NEXT
COMMUNICATION_MODE_SUPPORTED BLOCK
SLAVE /* Slave Block Mode supported */
MASTER /* optional modes supported,Master Block Mode
supported */
0x08 /* MAX_BS */
0x0A /* MIN_ST */
SEED_AND_KEY_EXTERNAL_FUNCTION "seedkey.dll"
/end PROTOCOL_LAYER

协议里根据 AML 语言中对于 XCP 协议的描述,配置相关的参数;

        在配置完时间之后,接着填写 MAX_CTO、 MAX_DTO, 选择 AG;最重要的选择指令, 将所需要的指令填写进去即可。

2.2.7、DAQ配置

         其中, DAQ IDENTIFICATION_FIELD 类型需要与下位机(代码里)相同;相应的MAX_ODT_ENTY 也必须符合;

2.2.8、PAG\PGM配置

2.3、 实际应用描述

2.3.1、CHARACTERISTIC

        这个块用来定义标定变量,里边包含了可以被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息, 一个 MODULE 里边可以出现很多次这样的块,也就是说一个 ECU 可以有很多的标定变量。

2.3.2、AXIS_PTS

        这个块用来定义数组或查表变量对应的轴的类型, 它将被 RECORD_LAYOUT块来引用,一个 ECU 里边可以有很多种不同的轴类型,用于实现查表和插值。

2.3.3、MEASUREMENT

       这个块用来定义测量变量,里边包含了可以被测量的变量的名字,地址,长度,计算公式,精度,最大最小值等信息,一个 MODULE 里边可以出现很多次这样的块,也就是说一个 ECU 可以有很多的测量变量。

2.3.4、COMPU_METHOD

        用于定义计算公式, 及原始值和物理值之前的转换关系,这些公式可以被标定变量和测量变量来引用,从而将原始值转换成便于用户阅读和使用的物理值。

2.3.5、COMPU_TAB

        这个块用来定义原始值和物理值的映射关系,是一种特殊的转换关系, 它一般应用于枚举变量,例如想采集一个代表 XCP 状态机的变量,分别为 0 对应DISCONNECTED, 1对应 CONNECTED, 2 对应 RESUME,那么就可以把这样的映射关系定义层一个 COMPU_TAB,然后关联到对应的变量上,这时候如果上位机采集到这样的原始值,它就可以将当前的状态显示成“ CONNECTED”字样,方便用于阅读和使用。

2.3.6、RECORD_LAYOUT

        这个块用来定义标定变量的物理存储结构(单个变量,二维表,三维表等)。上述的这些信息块可以分为两类,一类是随着 ECU 和 XCP 实施完成以后就确定的,这类信息一经确定以后,在后续的使用过程中是不需要修改的, 例如大小端, MEMORY SEGMENT 内存分配等,上述 HEADER/MOD_PAR/MOD_COMMON 属于这一类,另外一类是当 ECU 软件有所调整的时候就会变化的,例如已有的标定变量和测量变量的地址,甚至变量名,或者可能会新增变量,上述
CHARACTERISTIC/AXIS_PTS/MEASUREMENT/COMPU_METHOD/COMPU_TAB/FUNCTION/GROUPS/RECORD_LAYOUT 属于这一类。在第二类中改动最多的尤其是CHARACTERISTIC 和 MEASUREMENT 块中的变量地址信息,因为每次软件变化重新编译都会造成这部分信息的更新,地址更新导致的块信息更新需要手动的更改A2L 文件才能使得 A2L 和当前的软件配置起来,只有两者相匹配才能实现正确的标定和测量。

引入一个大神的文章,写的非常好

A2L文件内容详细解析 https://rxi.cc/archives/a2lwen-jian-nei-rong-xiang-xi-jie-xi

博主关闭了所有页面的评论