[4.2]-AutoSAR零基础学习-XCP 测量/校准 <<2>>
4. XCP协议规范
4.1 数据包简介
XCP的数据包分为两类:
指令传送对象CTO(Command Transfer Object)
数据传送对象DTO(Data Transfer Object)
如将命令按传递方向,可划分下图:
CMD:指的是上位机下发给下位机的一些命令,比如连接命令FF,解锁,获取状态等一些和下位机交互的命令;
STIM:你可以理解为一种上位机向下位机大量发数据的一种方式,相当于反向的DAQ;用于数据标定时,上位机向下位机修改参数。
Response:肯定应答,指的下位机答复上位机的命令;
Error:否定应答上位机的命令;
Event:事件,指下位机发生某事件时通知上位机;
Service:指下位机在某些情况下,需要上位机执行一些动作,可理解为请求上位机服务。
DAQ:下位机上传数据给上位机。
4.2 数据包报文格式
XCP帧的格式,包含帧头帧尾+XCP数据包。XCP帧支持的传输层可将这三个帧元素映射到相应的传输帧格式。
以下为基于CAN传输层的XCP on CAN。
CTO与DTO报文XCP Packet包格式如下:
PID是标识字段的一部分,用于标记数据包及数据包内部的数据值。比如:
主结点对从结点进行XCP控制时使用“命令(CMD)”,此时的PID在“0xC0”到“0xFF”的范围内。
从结点对这个命令返回肯定应答的情况下,使用“应答(RES)”,此时PID变为“0xFF”。
5. XCP测量
参数测量本质上是作为主设备对从设备的请求而实现的:“读取存储位置0x1234的值”。按测量方式可分为异步测量与同步测量。
5.1 异步测量(Poling)
即Poling模式,Poling是最简单的测量方法:基于CTO。对需要采集的变量进行挨个轮询。
主站可以使用SHORT_UPLOAD命令从从站请求测量参数的值。这称为轮询。这是最简单的测量情况:在已接收并执行SHORT_UPLOAD命令时发送测量参数的测量值。
异步测量是使用主结点发送的命令,通过指定的XCP地址来提取从结点的ECU内部的数据,并通过从结点的应答将该数据传送给主结点,如此循环往复来实现的。为了取出数据,使用PID为“0xF4”的命令“SHORT_UPLOAD”。这个命令和应答的格式如下所述。
5.2 同步测量
异步测量,主结点决定测量时间。为使测量时机与ECU的控制相匹配,必须由ECU确定测量时机,在数据取出后由从结点发送到主结点,通过DTO来完成。
主结点在进行同步测量前,通过命令指定要取出的数据的XCP地址,从结点等到同步测量开始命令后,使用DTO发送到主结点。因此,在同步测量的情况下,不是通过命令和应答的组合,而是通过测量周期或事件,由从结点发送DTO报文到主结点。
6 校准/标定
校准是为了重写ECU内部软件中的参数,主结点发送指定XCP地址和重写数据的命令,从结点导出适当的参数地址、执行重写,并返回一个应答。简单的说 就是将从节点的某个地址的值改为指定的值。
