一文带你学习XCP协议

本文深入探讨了XCP协议,特别是GET_SECTOR_INFO命令,该命令用于获取非易失性存储器编程过程中的特定扇区信息。XCP协议包括控制命令如PROGRAM_START、PROGRAM_CLEAR和PROGRAM用于内存编程,并有严格的编程顺序和错误处理机制。GET_SECTOR_INFO在绝对访问模式下提供清除和编程序列号,帮助主机正确地清除和编程闪存扇区。
摘要由CSDN通过智能技术生成

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列

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果没有资源,学习XCP(Counterparty)协议可能会有一些挑战,但仍然有一些方法可以帮助我们掌握这一技能。 首先,我们可以通过在线文档和论坛来获取关于XCP协议的基础知识。Counterparty官方网站上提供了一份完整的技术文档,其中包含了有关XCP协议的详细信息。此外,各种技术论坛和社区可能会有人就相关主题进行讨论和分享有用的信息和资源。 其次,我们可以寻找XCP协议的实际应用案例并进行研究。这些案例研究可以让我们更好地理解协议的实际用途和功能。我们可以尝试寻找有关XCP协议的项目或企业,了解他们是如何使用XCP协议的,并深入研究他们的技术实现方式。 另外,尽管没有资源可能意味着我们无法直接获取源代码和示例代码,但我们可以参考其他类似的开源项目。由于区块链技术的开放性,许多项目可能使用了类似的技术和原理。我们可以通过研究这些项目的源代码和技术文档,来获取与XCP协议相关的一些思路和知识。 最后,技术社区和科技论坛是宝贵的资源,我们可以在这些地方发起提问并获取帮助。我们可以加入相关的群组和论坛,与其他对XCP协议感兴趣的人进行交流,并向他们寻求指导和建议。 尽管没有资源可能会使学习XCP协议变得更为困难,但积极主动地探索和利用现有的资源和机会,我们仍然有很大的机会学习和理解这一协议
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值