XCP协议-协议篇

1)协议包概述
两种基本格式:
传输通用控制命令报文:CTO (Command Trasfer Object)
传输同步数据的报文:DTO(Data Trasfer Object)
CTO: 用于执行CMD命令、传输RES (command response)、ERR (error)报文、EV (event)报文和SERV (service request packet)报文
CMD必须有命令响应或者错误包回应。事件,服务请求和数据采集数据包是异步发送。当XCP处理程序无法访问从服务器资源时反馈错误 
ERR_RESOURCE_TEMPORARY_NOT_ACCESSIBLE给到主服务器给以提示
2)报文格式
XCP报文由标识字段(Identification Field)、时间戳字段(Timestamp Field)和数据字段(Data Field)组成。
MAX_CTO表示CTO报文的最大长度,单位为字节。 MAX_DTO表示DTO报文的最大长度,单位为字节
2.1)XCP包报文格式
为了在传输过程主从双方都能够明确识别XCP包内容,则标识字段作为第一个字节包含包标识符(PID)
对于CTO包,将PID字段作为识别类型字段,区分CMD,RES,EVENT,SERVICE
对于DTO包,识别字段能够识别其为数据包(DAQ与STIM)
DAQ或者STIM包唯一性由PID与DAQ(FILL)字段共同决定
从服务器必须确保每个ODT都有一个唯一的绝对ODT号
FILL字段或者DAQ的选择取决于从机支持的模式,通过 GET_DAQ_PROCESSOR_INFO中的 DAQ_KEY_BYTE字段决定
时间戳字段
CTO报文不携带时间戳字段,DTO选择性携带,。
GET_DAQ_PROCESSOR_INFO的TIMESTAMP_SUPPORTED标志表示从机是否支持时间戳数据采集和激励
使用SET_DAQ_LIST_MODE的TIMESTAMP标志,主机可以将DAQ-List设置为时间戳模式
GET_DAQ_RESOLUTION_INFO的TIMESTAMP_MODE中的TIMESTAMP_FIXED标志表示Slave总是以时间戳模式发送DTO报文,主服务器不能使用SET_DAQ_LIST_MODE关闭时间戳。
对于DAQ方向,时间戳模式代表每个DAQ周期第一个ODT的DTO包中传输其时钟当前值。时间戳可用于DAQ与STIM
时间戳根据字段类型的不同,其传输形式就有所不同,由BYTE,WORD,DWORD。
GET_DAQ_RESOLUTION_INFO中的TIMESTAMP_MODE和TIMESTAMP_TICKS,由从设备通知主设备其时间戳字段类型从将DAQ数据包传输到主将使用。
当主服务器向从服务器传输STIM数据包时,必须使用相同类型的时间戳字段。TIMESTAMP_MODE和TIMEPSTAMP_TICKS包含数据传输时钟的解析信息。
数据字段
对于CTO报文,数据字段包含不同类型的CTO报文的具体参数
对于DTO报文,包含DAQ与STIM数据
2.2)CTO报文
CTO用于传递通用控制命令,由PID与数据段组成,PID为CTO不同行为的代码标识,数据段如上描述。
2.2.1)CMD 报文
PID范围 0XC0-0XFF,不同的PID标识不同的命令,具体的命令代码如 命令代码表篇
2.2.2)RES(CMD RESPONSE PACKET) 报文
PID为0XFF,标识处理正确,并在data段携带不同命令的响应数据
2.2.3)ERR报文
PID为0XFE,标识处理错误,第二字节标识其错误码,如 XCP协议- 错误码篇ERR_*
错误码0x00用于同步目的( 参考 SYNCH命令的描述),错误报文错误码ERR_* >=0X01
在某些情况下存在扩展的错误描述数据,具体错误码表中描述,如
BUILD_CHECKSUM报文, 0x22 = ERR_OUT_OF_RANGE 的错误包包含最大允许块大小作为DWORD作为附加信息
错误码为0x31 = ERR_GENERIC,则错误报文中包含实现特定的从设备错误码WORD作为附加信息
2.2.4) EVENT报文
PID为0XFD,用于从机报告异步事件报文,不需要主设备做相应,第二个字节包含EVENT代码。事件码与事件描述如 XCP协议-事件 篇. 该指令实现为可选。
2.2.5)SERVICE报文
PID为0XFC,从机发起SERVCIE请求由主设备执行某些操作,第二字节包含服务代码,具体代码如下,从设备可选主设备必须支持,没有响应报文不保证传输一定到达
2.3)DTO报文
DTO报文包含DAQ与STIM,标识字段类型不同决定标识字段内容不同,不同类型的时间戳内容不同。标识字段和时间戳可以任意组合,主要取决于CTO阶段携带的属性决定
2.3.1)数据采集包(DAQ)
PID范围在0X00-0XFB(绝对值或者相对值)标识ODT号。ODT表描述数据采集元素在剩余的数据字节中体现。
2.3.2)同步激励数据包(STIM)
PID范围在0X00-0XBF标识ODT号,ODT表描述STIM元素在剩余的数据字节中体现。
2.4)XCP标识符
数据包标识符主要用于主从之间的传输
3)超时处理机制
在进行命令交互式,若从设备在指定时间内未作回应,会产生超时错误。
每当发送命令后,主服务器必须启动定时器,根据每条命令最大的Tx时间做操时处理,时间范围内收到数据则刷新超时时间。
XCP协议规定了7种不同超时值T1-T7,主要来源为mcd2mc描述文件(A2L文件),每个Tx处理方式如 XCP协议-错误码篇
3.1)标准通信模式
每次超时发生后主设备段必须先执行Pre-action在执行Action,且必须重复尝试2次。过后再出现错误则可自行处理。
通常每一个超时阶段都会有一个SYNCH命令动作,用于主从之间重新同步命令执行,然后再重复执行命令。
也存在特殊命令在Pre-action使从设备处于一个良好的状态,如重复命令前 发送SET_MTA或SET_DAQ_PTR
3.2)块通信模式
块命令模式当超时发生时,处理方式和标准命令模式相同,且在每次发送完最后一帧时需启动超时定时器。
M->S时,使用与标准命令模式相同的Tx超时值,每次重传必须发送完整的块
S->M时,主收到响应块的最后一帧时,主设备必须重置超时检测定时器,使用与标准命令模式相同的Tx超时值
3.3)交错通信模式
交错通信模式错误处理与标准同学模型相同,每一个请求都需要启动一个定时器Tx做超时处理
3.4)超时操作
主机从A2L获取T1-T6默认值,对于特殊用途XCP允许否决这些超时值。 使用EV_CMD_PENDING 事件,从服务器可以请求主服务器重新启动超时检测。
撤销超时操作动作 - 在旁路时可能需要修改从服务器超时值,在标准标定方法中进行,不需要特殊的XCP命令
重启超时检测使用EV_CMD_PENDING 事件,从服务器可以请求主服务器重新启动超时检测。当主设备收到EV后不再重复请求命令,并重置超时时间,从设备须在能处理请求时回应主设备RES或者ERR
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值