目录
1.寻址方式
2.数据帧格式
3.特殊指令
4.使用实例
了解了SOME/IP之后,继续来看看车载以太网在汽车标定领域的应用。
在汽车标定领域XCP是非常重要的协议,咱们先来回顾下基础概念。
XCP全称Universal Measurement and Calibration Protocol,主要作用就是对ECU进行数据标定和数据采集,加速ECU的开发。
既然是通用协议,理论上使用任何物理总线进行数据传输都是可以的;此外,XCP是由CCP(CAN Calibration Protoco)V2.1版本演变而来,因此XCP的"X"代表了多种传输层,例如XCP on CAN、XCP on TCP/IP、XCP on UDP/IP、XCP on USB,如下图:
那么从这个逻辑出发,我们也能分析出,XCP协议总体可分为两大部分:
- 基础通用协议,包括协议描述、A2L接口描述、Seed&Key接口描述、通信示例等等;
- 传输层协议,包括XCP on CAN\Ethernet\SPI\USB等等数据传输的描述。
基础通用协议我们前面已经聊得很多了,今天看看XCP on Ethernet的一些特点。
1.寻址方式
首先回顾下XCP的通信模型:
这张图很多人搞混淆,认为Master可以使用一个ID同时和不同Slave节点通信,实则不然(瞬间打脸,例外:Master通过CAN\ETH发送GET_SLAVE_ID获取在线的Slave等);
实际上,XCP是标准Single-Master/Single-Slave的通信,即Master在建立通信连接时,是需要特定的slave ID,进行点对点且连续的连接,此外关闭连接时也要通知Slave。
但是,在上图中可以看到XCP它是允许同时建立多个Single-Master/Single-Slave通信,例如,Master不同的CAN ID,发送相同连接指令给到不同Slave,如下:
这是最常见的XCP on CAN的寻址方式。
那么假设传输层使用以太网呢?这就需要IP地址和端口号(Port Number)。根据通信协议又可以分为TCP/IP 和UDP/IP。
- TCP/IP:Slave一直处于监听状态,当然一次只能接受一个连接,由于该协议本身面向连接,且具备重传机制,因此可以防止数据丢失;
- UDP/IP:当Slave未连接时,接收到CONNECT命令时是向命令发送方给定的IP地址和端口发送回复进行相应,对于所有后续响应,它将继续响应此IP地址和端口。当连接时,即使使用另一个端口,它也只响应来自发送CONNECT命令的IP地址的信息。
2.数据帧格式
我们首先将XCP帧从车载以太网传输层(Layer4)解封装出来,如下:
根据标准,其中细节如下图所示:
与XCP on CAN Message相比,以太网帧多了一个XCP Header,即以太网控制域。
以太网控制域参数包括LEN、CTR,长度WORD(XCP中2byte)。
LEN:表示XCP Packet的数据长度,单位为Bytes;
CTR:用于检测丢包。TCP/IP丢包后可重传,因此这个位域主要为UDP/IP服务,Master在发送第一条消息时,CTR进行自增;Slave在本地维护同样的计数器,以相同方式响应,每发送一帧就增加自己的计数器。这和SecOC维护FvM比较类似,为了发挥UDP/IP本身的性能,一般用于数据采集,当然丢帧会产生测量间隙,如果确实影响了观测,建议使用TCP/IP。
3.特殊指令
既然是基于以太网进行数据传输,在指令上也会有所变化,具体包括了如下几条指令:
- GET_SLAVE_ID
Master发送该指令,用于探测Slave节点,因此只能用于UDP/IP。具体来讲,主机发送一条IPv4的多播消息,IPv4地址固定为239.255.0.0,端口号固定为5556,无论XCP Slave是否已经与Master建立了连接,Slave都必须处理请求并返回响应,响应的信息包括从机IP地址、端口号、Slave自身是否可用、使用TCP还是UDP或者都全部使用等。
- GET_SLAVE_ID_EXTENDED
获取slave的额外信息,主要是MAC地址等;
- SET_SLAVE_IP_ADDRESS
该指令用于Master给Slave分配IP地址,当然这个IP地址就是自定义,不在标准范围。Slave也需要进行响应,保证IP 地址是否有效,是否需要手动激活IP地址等;
-
GET_DAQ_CLOCK_MULTICAST
Master下发指令后,Slave会回复EV_TIME_SYNC(该帧带有时间戳) ,如下所示:
EV_TIME_SYNC报文格式如下:
4.使用实例
目前来看,XCP on Ethernet主要用于高速测量和标定系统,通信速率可达50MBytes/s,实现方法可以参考Vector的POD技术或者ETAS的ETK技术。
以Vector VX1000为例,它为ECU的XCP on Ethernet提供了可能。首先这个硬件盒子自带以太网端口,其次Vector针对主流车规MCU设计了POD硬件,该硬件可通过Debug接口(例如DAP、JTAG、Nexus)等接口直接访问ECU的数据并返回给VX1000这个小盒子,换句话说,CANape是上位机作为Master,VX1000+POD作为Slave,因此理论上讲ECU内部就不需要再实现XCP on Slave的软件协议栈。如下图所示:
看到这里,不由得想到英飞凌TC4xx在Trace设计时特意数据传输路径给到ETH,只需要XCP Slave的实现,就可以不用POD。看来从芯片的迭代和设计上也能看到芯片厂、Tier 1 、OEM之间的博弈。