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