XCP协议
1 前言
XCP(Universal Calibration Protocol)是通用测量和校准协议的缩写, “X”代表任意的传输层(如CAN、CAN FD、FlexRay、Ethernet…)。主要目的是来自电子控制单元的数据采集和校准访问。因此定义了通用协议层。作为传输介质的不同物理总线和可以使用网络。对于每个授权传输介质,需要一个单独的传输层定义。
XCP术语集合:
ODT : objiect description table
ODT_Entry: ODT条目元素
DAQ: data acquisition
STIM: data stimulation
2 XCP特点和概念
图2-1 ODT列表结构
对象描述符表(ODT)描述了同步数据传输对象和slave内存之间的映射。同步数据传输对象由其包标识符(Packet IDentifier, PID)标识,该PID标识描述此同步数据传输对象内容的ODT。
2.1 同步数据传输
2.1 .1 ODT_Entry
代表ODT的元素的测量对象,包含测量信号地址和长度。ODT中的条目通过地址、地址扩展、地址粒度ADDRESS_GRANULARITY(AG)中元素的大小引用数据元素,对于表示位的数据元素,则通过位偏移量引用。
GRANULARITY_ODT_ENTRY_SIZE_x(GRANULARITY_ODT_ENTRY_SIZE_DAQ或GRANULARITY_ODT_ENTRY_SIZE_STIM)决定ODT条目引用的数据元素的最小大小。
GRANULARITY_ODT_ENTRY_SIZE_x不能小于AG。
GRANULARITY_ODT_ENTRY_SIZE_x[BYTE] >= AG[BYTE]
ODT表项的地址和大小必须符合GRANULARITY_ODT_ENTRY_SIZE_x的对齐要求。
对于ODT条目所描述的元素地址,必须满足以下要求:
Address[AG] mod (GRANULARITY_ODT_ENTRY_SIZE_x[BYTE] / AG[BYTE]) = 0
对于ODT条目所描述的每个元素的大小,必须满足以下要求:
SizeOf(element described by ODT entry)[AG] mod (GRANULARITY_ODT_ENTRY_SIZE_x[BYTE] / AG[BYTE]) = 0
GRANULARITY_ODT_ENTRY_SIZE_x的可能值是{1,2,4,8}。
ADDRESS_GRANULARITY的取值为{1,2,4}。
说明:
ADDRESS_GRANULARITY和GRANULARITY_ODT_ENTRY_SIZE_x在A2L描述文件中已描述。
2.1.2 Object Descriptor Table
对象描述表ODT(objiect description table),ODT条目分组在ODT中
如果DAQ列表是静态配置的,MAX_ODT_ENTRIES指定该DAQ列表中每个ODT的最大ODT表项数。
如果DAQ列表是动态配置的,那么MAX_ODT_ENTRIES不是固定的,它将是0。
对于每个ODT,通过ODT_ENTRY_NUMBER对ODT项的编号从0开始重新启动。
ODT_ENTRY_NUMBER [0,1,..MAX_ODT_ENTRIES(DAQ list)-1]
2.1.3 DAQ List
可以将多个ODT分组到一个DAQ列表中。XCP允许多个DAQ列表,这些列表可以同时激活。每个DAQ列表的采样和传输是由从机中的单个事件触发的。
图2-2 DAQ列表结构
如果DAQ列表是静态配置的,MAX_ODT指定这个DAQ列表的ODT数量。
如果DAQ列表是动态配置的,那么MAX_ODT不是固定的,它将是0。
MAX_DAQ是从设备中可用的DAQ列表的总数。它包括不可配置的预定义DAQ列表(在GET_DAQ_LIST_INFO处用预定义表示)和可配置的预定义DAQ列表。如果DAQ_CONFIG_TYPE = dynamic,则MAX_DAQ = MIN_DAQ+DAQ_COUNT。
MIN_DAQ是预定义DAQ列表的个数。对于预定义的DAQ列表,DAQ_LIST_NUMBER的范围是[0,1,..MIN_DAQ-1]。
DAQ_COUNT是动态分配的DAQ列表的数量。MAX_DAQ-MIN_DAQ是可配置DAQ列表的个数。对于可配置的DAQ列表,DAQ_LIST_NUMBER在[MIN_DAQ,MIN_DAQ+1,
..MAX_DAQ-1]范围内。
对于每个DAQ列表,通过ODT_NUMBER从0开始重新启动ODT的编号,并且必须是连续的。ODT_NUMBER [0, 1 . .MAX_ODT(采集列表)1]在同一个XCP从设备中,DAQ列表号的范围从0开始,并且必须是连续的。
DAQ_LIST_NUMBER [0, 1 . .MIN_DAQ-1] + [MIN_DAQ MIN_DAQ + 1 . . MAX_DAQ-1]为了降低所需的传输速率,可以将传输速率预分频器应用于DAQ列表(参见GET_DAQ_PROCESSOR_INFO的DAQ_PROPERTIES中的
PRESCALER_SUPPORTED标志)。如果不进行还原,预分频器值必须等于1。为了还原,预分频器必须大于1。预分频器的使用只允许用于有DAQ方向的DAQ列表。
2.1.4 Event Channels
XCP允许多个DAQ列表,这些列表可以同时激活。
每个DAQ列表的采样和传输是由从机中的单个事件触发的(参见
SET_DAQ_LIST_MODE)。事件通道构建有效确定数据传输时间的通用信号源。
对于没有固定周期时间的事件通道,例如,偶发或突发同步事件,可以添加一个最小周期时间(MIN_CYCLE_TIME),这样XCP master就可以进行最坏情况的计算,例如CPU负载或所需的传输层带宽。
MAX_EVENT_CHANNEL是可用事件通道的数量。对于每个事件通道,MAX_DAQ_LIST表示可以分配给该事件通道的最大DAQ列表数量。MAX_DAQ_LIST = 0x00表示此事件可用,但目前不能使用。MAX_DAQ_LIST = 0xFF表示没有限制。
XCP允许对事件通道进行优先级排序。这个优先级是slave的固定属性,因此是只读的。事件通道优先级= FF的事件通道优先级最高。
在MEASUREMENT变量的每个定义处,可以在DAQ_EVENT小节中选择性地控制将MEASUREMENT变量分配给事件通道。
赋值可以是固定的,也可以是可变的。如果分配是固定的,那么必须在任何需要固定分配的MEASUREMENT变量上定义一个包含所有要使用的事件通道的列表(FIXED_EVENT_LIST)。该工具无法更改具有固定列表的MEASUREMENT变量的事件通道的分配。如果分配不是固定的,而是可变的,则可以在MEASUREMENT处本地提供一个包含该度量(AVAILABLE_EVENT_LIST)所有有效事件通道的列表。如果此列表不存在,则ECU提供的所有事件通道都可以由工具分配。
2.1.5 动态DAQ配置
对于可配置的DAQ列表,slave可以对DAQ列表的数量、每个DAQ列表的ODT数量和每个ODT的ODT条目数量有一定的固定限制。
slave也可以完全动态地配置DAQ列表。
图2-3 静态DAQ列表配置
图2-4 动态DAQ列表配置
2.2 测量模式
2.2.1 轮询(polling)采集
最简单的测量方法是使用轮询方法。这种方法的特点是XCP