XCP是通用校准协议(XCP:Universal Calibration Protocol)首字母的缩写,XCP数据包分为CTO控制命令传输和DTO和数据包传输两种类型。
XCP协议报文格式如下:
1.CTO数据包
识别字段只包含PID,其中包含CTO数据包代码。
时间戳字段不可用。
数据字段包含不同类型CTO数据包的特定参数
1.1.命令数据包
PID包含范围为0xC0<=CMD<=0xFF的ComManD数据包代码。
尝试执行未实现的可选命令将返回ERR_CMD_UNKNOWN,并且没有任何效果。
这使得主设备能够容易地检测未实现的可选命令。
如果执行了GET_SED,则需要UNLOCK。
如果实现了SET_CAL_PAGE,则需要GET_CAL_PAGE
1.1.1.标准命令
1.1.2.校准命令
1.1.3.页切换命令(PAG)
1.2.命令响应数据包
PID包含命令肯定RESponse数据包代码RES=0xFF。
如果命令已成功执行,RES将作为CMD的应答发送。
1.3.错误数据包
PID包含ERR或数据包代码ERR=0xFE。
如果命令未成功,则发送ERR作为CMD的应答
已执行。第二个字节包含错误代码。在本文的“错误代码表(ERR_)”一节中定义了错误代码。
错误代码0x00用于同步目的(参见命令SYNCH的描述)。
错误代码ERR_>=0x01用于错误数据包。
1.4.事件数据包
PID包含EVent数据包代码EV=0xFD。
如果从设备想要报告异步事件数据包,则发送EV。第二个字节包含事件代码。
Table of Event Code
1.5. 服务请求包(SERV)
ID包含服务请求数据包代码SERV=0xFC。
SERV请求主设备执行一些操作。第二个字节包含服务请求代码。
下表中的服务请求分组代码可以作为PID为0xFC的异步分组发送。
该实现对于从设备是可选的,但是对于主设备是强制性的。从设备发送到主设备的服务请求数据包未得到确认,因此无法保证传输
1.6.报文实例
2.DTO数据包
DTO用于传输同步数据采集数据(DAQ)和传输同步数据刺激数据(STIM)
标识字段的内容因标识字段类型而异。
时间戳字段的内容因时间戳字段类型而异。
标识字段类型和时间戳字段类型的任何组合都是可能的。
数据字段包含同步采集和刺激的数据。
2.1.数据采集数据包(DAQ)
n=f(标识字段类型、时间戳字段类型)
PID包含范围0x00<=DAQ<=0xFB的(绝对或相对)ODT编号。
ODT编号指的是对象描述符表(ODT),该表描述了哪些数据采集元素包含在剩余的数据字节中。
2.2. 同步数据剌激包(STIM)
n=f(标识字段类型、时间戳字段类型)
PID包含范围0x00<=STIM<=0xBF的(绝对或相对)ODT编号。
ODT编号指的是相应的对象描述符表(ODT),该表描述了剩余数据字节中包含哪些数据刺激元素
2.3.数据采集和同步数据剌激命令
2.3.1.基础指令
2.3.2.静态配置
2.3.3.动态配置
2.3.4.非易失存储编程命令
3.XCP数据包标识符
下表概述了用于将数据包从主设备传输到从属设备以及从从属设备传输到主设备的所有可能的数据包标识符
3.1.主到从
3.2.从到主
4. 位掩码编码参数表
4.1. RESOURCE parameter in CONNECT and GET_SEED
4.2. COMM_MODE_BASIC parameter in CONNECT
BYTE_ORDER指示用于在XCP分组中传输多字节参数的字节顺序。BYTE_ORDER=0表示英特尔格式,BYTE_ORDER=1表示摩托罗拉格式。摩托罗拉格式表示低位地址/位置上的MSB
地址粒度指示单个地址中包含的元素的大小。如果主机必须进行地址计算,则需要它
SLAVE_BLOCK_MODE标志指示从块模式是否可用。
OPTIONAL标志指示是否有关于支持的通信模式类型的附加信息。主机可以通过get_COMM_MODE_INFO获得该附加信息。
4.3. COMM_MODE_OPTIONAL parameter in GET_COMM_MODE_INFO
MASTER_BLOCK_MODE标志指示主块模式是否可用。
如果支持主设备块模式,MAX_BS将允许的最大块大小指示为块序列中连续命令包的数量(DOWNLOAD_NEXT)。MIN_ST指示以100微秒为单位的从主设备到从设备的块传输的分组之间所需的最小分离时间。
INTERLEAVED_MODE标志指示交错模式是否可用。
如果交错模式可用,QUEUE_SIZE指示主设备可以发送到从设备的接收队列的连续命令包的最大数量
XCP驱动程序版本号表示从设备中XCP驱动的版本号。
主要驱动程序版本是版本号的高半字节,次要驱动程序版本为低半字节
4.4. COMM_MODE_PGM parameter in PROGRAM_START
MASTER_BLOCK_MODE标志指示编程期间主块模式是否可用。
INTERLEAVED_MODE标志指示编程期间交错模式是否可用。
SLAVE_BLOCK_MODE标志指示在编程期间从块模式是否可用。
当从设备处于存储器编程模式时,通信参数MAX_CTO、MAX_BS、MIN_ST和QUEUE_SIZE可以改变。在肯定响应中返回新的通信参数MAX_CTO_PGM、MAX_BS_PGM、MIN_ST_PGM和QUEUE_SIZE_PGM
4.5. Mode parameter in GET_ID
如果TRANSFER_MODE为1,则在响应的剩余字节中传输标识。
如果TRANSFER_MODE为0,则从设备将存储器传输地址(MTA)设置为主设备可以使用一个或多个upload命令上传所请求的标识的位置。对于初始UPLOAD命令,适用以下规则:
数据元素数UPLOAD[AG]=(长度GET_ID[BYTE])/AG
如果COMPRESSED_ENCRYPTED为1,则传输的数据被压缩和/或加密。这仅适用于标识类型4,即“要上载的ASAM-MC2文件”。XCP主机必须使用在外部计算函数中实现的特定于实现的算法来解压缩和/或解密数据。XCP第4部分介绍了该接口。
标识字符串是纯ASCII文本的字节流,它没有0终止
4.6. Current Resource Protection Status parameter in GET_STATUS and UNLOCK
4.7. Mode parameter in SET_REQUEST
STORE_CAL_REQ设置将校准数据保存到非易失性存储器的请求。当请求完成时,GET_STATUS获得的STORE_CAL_REQ位将由从设备重置。从设备可以通过发送EV_STORE_CAL事件分组来指示这一点。
STORE_DAQ_REQ_x设置将所有DAQ列表保存到非易失性存储器的请求,这些DAQ列表已通过START_STOP_DAQ_LIST(选择)选择。从设备还必须将会话配置id存储在非易失性存储器中。
保存后,从设备必须首先清除可能已存储在非易失性存储器中的任何DAQ列表配置
当请求完成时,GET_STATUS获得的STORE_DAQ_REQ位将由从设备重置。从设备可以通过发送EV_STORE_DAQ事件分组来指示这一点。
STORE_DAQ_REQ_NO_RESUME不会将从属设备设置为RESUME模式。以后的DAQ列表可以由XCP主机在已建立的XCP会话内的任何时间启动。
STORE_DAQ_REQ_RESUME设置将所有选定DAQ列表保存到内存的请求,但同时隐式地将从属设备设置为RESUME模式。
CLEAR_DAQ_REQ用于清除非易失性存储器中的所有DAQ列表。所有ODT条目重置为地址=0、扩展名=0、大小=0和位偏移集FF。会话配置ID重置为0。
当请求完成时,GET_STATUS获得的CLEAR_DAQ_REQ位将由从设备重置。从设备可以通过发送EV_CLEAR_DAQ事件分组来指示这一点。
如果从设备不支持请求的模式,则返回ERR_OUT_OF_RANGE。
4.8. Current Session Status parameter in GET_STATUS
STORE_CAL_REQ标志表示将校准数据保存到非易失性存储器的未决请求。一旦请求得到满足,从设备就会重置相应的位。从设备可以通过发送EV_STORE_CAL事件分组来指示这一点。
STORE_DAQ_REQ标志表示将DAQ列表设置保存到非易失性存储器的未决请求。一旦请求得到满足,从设备就会重置相应的位。从设备可以通过发送EV_STORE_DAQ事件分组来指示这一点。
CLEAR_DAQ_REQ标志指示清除非易失性存储器中所有DAQ列表的未决请求。所有ODT条目重置为地址=0、扩展名=0、大小=0和位偏移集FF。
会话配置ID重置为0。一旦请求得到满足,从设备就会重置相应的位。从设备可以通过发送EV_CLEAR_DAQ事件分组来指示这一点。
如果从设备不支持请求的模式,则返回ERR_OUT_OF_RANGE。
DAQ_RUNNING标志指示至少一个DAQ列表已经启动并且处于RUNNING模式。
RESUME标志表示从设备处于RESUME模式
4.9. DAQ_KEY_BYTE parameter in GET_DAQ_PROCESSOR_INFO
Optimization_Type的定义如下:
Optimization_Type标志表示主机最好使用的优化方法类型
Address_Extension的定义如下:
ADDR_EXTENSION标志指示一个ODT内或一个DAQ内的所有条目的地址扩展是否必须相同。
Identification_Field_Type的定义如下:
Identification_Field_Type标志指示从设备在向主设备传输DAQ数据包时将使用的标识字段类型。当将STIM数据包传输到从属设备时,主设备必须使用相同类型的标识字段。
DAQ_PROPERTIES中的PID_OFF_SUPPORTED标志表示可以在没有标识字段的情况下传输DTO数据包。
只有当标识字段类型为“绝对ODT编号”时,才允许关闭标识字段的传输。
4.10. DAQ_PROPERTIES parameter in GET_DAQ_PROCESSOR_INFO
DAQ_CONFIG_TYPE标志指示非PREDEFINED的DAQ列表是静态配置还是动态配置。
PRESCALER_SUPPORTED标志指示所有DAQ列表都支持用于减少传输周期的预分频器。
RESUME_SUPPORTED标志表示所有DAQ列表都可以置于RESUME模式。
BIT_STIM_SUPPORTED标志指示是否支持通过WRITE_DAQ中的BIT_OFFSET的逐位数据刺激。
TIMESTAMP_SUPPORTED标志指示从设备是否支持带时间戳的数据采集和刺激。如果从设备不支持带时间戳的模式,则参数TIMESTAMP_mode和TIMESTAMP_TICKS(GET_DAK_RESOLUTION_INFO)无效。
OVERLOAD_MSB和OVERLOAD_EVENT标志指示使用的过载指示方法
为了指示过载情况,从设备可以设置下一个成功传输的分组的PID的最高有效位(MSB)。当使用PID的MSB时,ODT数字的最大数量(绝对或相对)是有限的,并且必须在范围内
0x00 <= ODT_NUMBER(DAQ with overrun_msb) < 0x7C
或者,从设备可以发送“EV_DAQ_OVERLOAD”事件包。从设备必须注意不要用这个额外的数据包使另一个循环过载。
MAX_DAQ是从设备中可用的DAQ列表的总数。它包括不可配置的预定义DAQ列表(在GET_DAQ_LIST_INFO处用predefined指示)和可配置的DAQ列表。如果DAQ_CONFIG_TYPE=动态,则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]范围内。
MAX_EVENT_CHANNEL是可用事件通道的数量。
MAX_EVENT_CHANNEL=0x00表示从设备中的事件数未知
4.11. Mode parameter in SET_DAQ_LIST_MODE
DIRECTION标志将DAQ列表设置为同步数据采集或同步数据刺激模式。
不允许主机同时设置ALTERNATING标志和TIMESTAMP标志。因此,不允许其ASAM MCD 2MC描述文件中的从机同时使用TIMESTAMP_FIXED和DAQ_ALTERNATING_SUPPORTED。
只有在同时设置DIRECTION=DAQ时,主机才能设置ALTERNATING标志
TIMESTAMP和PID_OFF标志也可用于DIRECTION=DAQ和DIRECTION=STIM。
TIMESTAMP标志将DAQ列表设置为带时间戳的模式。
GET_DAK_RESOLUTION_INFO处TIMESTAMP_MODE中的TIMESTAMP_FIXED标志
表示主机不能用SET_DAQ_LIST_MODE关闭时间戳。
如果主设备仍然尝试这样做,从设备将以ERR_CMD_SYNTAX回答。
对于DIRECTION=DAQ,时间戳模式意味着从设备在DAQ周期的第一个ODT中传输其时钟的当前值。
PID_OFF标志开启每个DTO数据包中标识字段的传输。
只有当标识字段类型为“绝对ODT编号”时,才允许关闭标识字段的传输。如果标识字段没有在XCP分组中传输,则必须在传输层级别上进行明确的标识。
这可以在can上完成,例如,每个DAQ列表都有单独的can Id,每个DAQ列表只有一个ODT。在这种情况下,关闭识别字段将允许在CAN上传输8字节信号。
事件通道编号指定有效确定数据传输时序的通用信号源。
为了允许降低期望的传输速率,可以将传输速率预分频器应用于DAQ列表。在不减小的情况下,预分频器值必须等于1。为了减少,预分频器必须大于1。预分频器的使用仅用于DIRECTION=DAQ的DAQ列表。
如果此DAQ列表与其他DAQ列表一起处理,则DAQ列表优先级指定该DAQ列表的优先级。从设备驱动器可以使用该信息来对数据分组的传输进行优先级排序。DAQ列表优先级=0意味着从设备可以缓冲数据并在后台任务中处理它们。DAQ列