当前位置: 首页 > news >正文

入门车载以太网(6) -- XCP on Ethernet

目录

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的时间,因此需要同一传输总线的Slave在同一时刻返回一个时间戳。这个比较理想化,不仅需要每个Slave响应速度一致,还需要Slave->Master的传输延迟一致。

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之间的博弈。

相关文章:

入门车载以太网(6) -- XCP on Ethernet

目录 1.寻址方式 2.数据帧格式 3.特殊指令 4.使用实例 了解了SOME/IP之后,继续来看看车载以太网在汽车标定领域的应用。 在汽车标定领域XCP是非常重要的协议,咱们先来回顾下基础概念。 XCP全称Universal Measurement and Calibration Protocol&a…...

DAY4 网络编程(广播和多线程并发)

作业1&#xff1a; 1、将广播发送和接收端实现一遍&#xff0c;完成一个发送端发送信息&#xff0c;对应多个接收端接收信息实验。 send.c代码&#xff1a; #include <myhead.h> #define IP "192.168.61.255"//广播IP #define PORT 7777 int main(int argc, …...

C++个人复习(4)

C中为什么要引入make_shared,它有什么优点 1. 减少内存分配次数 使用 make_shared 时&#xff0c;内存分配只发生一次&#xff0c;它同时分配了对象和控制块&#xff08;用于管理引用计数等信息&#xff09;。而如果直接使用 new 创建对象并传递给 shared_ptr&#xff0c;则会…...

Dockerhub镜像加速

一、背景 dockerhub由于被封锁和站点处于国外的原因&#xff0c;docker pull拉取镜像非常慢&#xff0c;有时候直接都无法拉取。严重妨碍了我们的学习进度以及日常使用。 总结了一些proxy代理的镜像站点&#xff0c;配置之后速度会有明显提升&#xff0c;大家可以参考使用。 二…...

11.20讲座笔记

信息门户 -------- 人才培养方案&#xff08;重要&#xff09; 结构化矛盾------需求方&#xff08;企业&#xff09; ------供给方&#xff08;高校&#xff09; 电子方向职业 -------- 基建、基础算力 -------中国 1st &#xff08;已经相对完善饱和&#xff09; 网…...

网络协议之UDP

一、UDP协议定义 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种面向无连接的、不可靠的、基于数据报的传输层通信协议。UDP在传输数据时不需要建立连接&#xff0c;直接将数据包发送出去。这种特性使得UDP在实时性要求较高的应用场景中…...

Elasticsearch面试内容整理-常见问题和解决方案

在使用 Elasticsearch 的过程中,可能会遇到各种常见问题,如集群状态异常、分片未分配、查询性能低下等。这些问题往往影响系统的可用性和性能,因此理解这些问题的成因和解决方案非常重要。以下是 Elasticsearch 常见问题及其解决方案的整理。 集群状态问题 Elasticsearch 集…...

React 表单Form 中的 useForm

1、介绍 useForm 是 React Hook Form 中的核心 Hook&#xff0c;用于管理表单的状态和行为。它提供了处理表单验证、数据收集、状态管理等功能的简便方法。useForm 本质上是用于创建和配置表单&#xff0c;并允许你在组件中与表单字段交互。 2、基本用法 useForm 是一个函数…...

用指针函数寻找数组中的最大值与次大值

#include <stdio.h>// 函数用于找出数组中的最大值和次大值 void LargestTow(int a[], int n, int *pfirst, int *psecond) {*pfirst a[0];*psecond a[1];if (*psecond > *pfirst) {// 如果初始的次大值大于最大值&#xff0c;交换它们int temp *pfirst;*pfirst *…...

人工智能在金融领域的创新与应用

引言&#xff1a;AI如何重塑金融行业&#xff1f; 金融行业是人工智能&#xff08;AI&#xff09;技术的最佳应用场景之一。通过数据分析、模式识别和自动化处理&#xff0c;AI正为金融行业提供高效、安全和智能化的解决方案。从反欺诈到投资决策&#xff0c;AI正逐步改变金融服…...

shell脚本(4)一文解决比较运算符用户交互

免责声明 学习视频来自B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 比较运算符 在Shell脚本中…...

windows 操作系统下载 Android源码教程

前言 开始我是装了hyber-v 虚拟机ubuntu 的&#xff0c;然而非常的卡顿且难用。因此我尝试在windows上使用repo&#xff0c;因此有了这篇文章 补充 第二天发现编译源码也需要linux命令因为源码中的很多脚本都是.sh的 因此最终通过安装WSL解决&#xff08;在window应用商店就…...

【AIGC】如何使用高价值提示词Prompt提升ChatGPT响应质量

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | 提示词Prompt应用实例 文章目录 &#x1f4af;前言&#x1f4af;提示词英文模板&#x1f4af;提示词中文解析1. 明确需求2. 建议额外角色3. 角色确认与修改4. 逐步完善提示5. 确定参考资料6. 生成和优化提示7. 生成最终响…...

vue3-input 搜索框

第一种 实现效果 实现代码 <template><div class="input-box mb20"><input type="text" class="input" /><span class="span">搜</span></div> </template><script setup> import …...

记录eslint报错的情况

这几天在调试vue的eslint&#xff0c;害&#xff0c;我领导说eslint要打开规范代码&#xff0c;顺带看了一下eslint的规则&#xff0c;并且研究一下报错。切记每次修改了.eslintrc配置文件&#xff0c;需要重启项目再查看控制台&#xff0c;否则之前的报错会一直存在。 第一个…...

mongodb多表查询,五个表查询

需求是这样的&#xff0c;而数据是从mysql导入进来的&#xff0c;由于mysql不支持数组类型的数据&#xff0c;所以有很多关联表。药剂里找药物&#xff0c;需要药剂与药物的关联表&#xff0c;然后再找药物表。从药物表里再找药物与成分关联表&#xff0c;最后再找成分表。 这里…...

Git Bash + VS Code + Windows11 Git命令报错莫名奇妙的问题

环境&#xff1a; git version 2.47.0.windows.1 gitbash版本&#xff1a;Git-2.47.0-64-bit windows版本&#xff1a; Windows 11 专业版 版本号 23H2 安装日期 ‎2024/‎11/‎16 操作系统版本 22631.4460 体验 Windows Feature Experience Pack 1000.22700.10…...

湛江市社保卡申领指南:手机获取电子照片回执单号

在湛江市&#xff0c;社保卡的申领流程已经实现了数字化&#xff0c;为市民带来了极大的便利。特别是通过手机获取数码照片回执单号&#xff0c;这一环节更是简化了申领过程。今天&#xff0c;我们将详细介绍如何不去照相馆&#xff0c;利用手机来获取数码照片回执单号&#xf…...

Linux离线安装Docker命令,简单镜像操作

解压安装包 首先&#xff0c;使用 tar 命令解压 docker-27.3.1.tgz 安装包&#xff1a; tar -zxvf docker-27.3.1.tgz 将二进制文件移动到可执行路径上的目录 接着&#xff0c;将解压出来的 Docker 二进制文件复制到系统的可执行路径&#xff08;通常是 /usr/bin/&#xff09…...

【Node.js】Node.js 和浏览器之间的差异

Node.js 是一个强大的运行时环境&#xff0c;它在现代 JavaScript 开发中扮演着重要角色。然而&#xff0c;许多开发者在使用 Node.js 时常常会感到困惑&#xff0c;尤其是与浏览器环境的对比。本文将深入探讨 Node.js 和浏览器之间的差异&#xff0c;帮助你全面理解两者的设计…...

基于MySQL的 CMS(内容管理系统)的表结构设计

目录 1. 用户管理 (Users) 2. 内容管理 (Content/Posts) 3. 分类 (Categories) 4. 标签 (Tags) 5. 内容与分类关系 (Content_Category) 6. 内容与标签关系 (Content_Tag) 7. 媒体库 (Media) 8. 设置 (Settings) 9. 评论 (Comments) 10. 活动日志 (Activity_Log) 11. …...

2.13 转换矩阵

转换矩阵引用了库nalgebra&#xff0c;使用时研究具体实现。 use std::ops;use nalgebra::Perspective3;use crate::Scalar;use super::{Aabb, LineSegment, Point, Triangle, Vector};/// An affine transform #[repr(C)] #[derive(Debug, Clone, Copy, Default)] pub struct…...

【C语言】遗传算法matlab程序

遗传算法matlab程序 遗传算法是一种模拟自然选择过程的优化技术&#xff0c;用于解决复杂问题。在MATLAB中编写遗传算法程序&#xff0c;通常包括以下几个步骤&#xff1a; 初始化种群&#xff1a;创建一个初始解集&#xff08;种群&#xff09;&#xff0c;每个解代表一个问题…...

Java LinkedList 详解

LinkedList 是 Java 集合框架中常用的数据结构之一&#xff0c;位于 java.util 包中。它实现了 List、Deque 和 Queue 接口&#xff0c;是一个双向链表结构&#xff0c;适合频繁的插入和删除操作。 1. LinkedList 的特点 数据结构&#xff1a;基于双向链表实现&#xff0c;每个…...

mac-mini的时间机器,数据备份到alist 中的网盘

苹果的时间机器不能直接将备份存储在 alist 上的网盘&#xff0c;但可以通过一些中间步骤来实现类似的效果&#xff0c;以下是具体介绍&#xff1a; 方法原理 通过将支持 WebDAV 协议的网络存储挂载到本地&#xff0c;再将其设置为时间机器的备份磁盘&#xff0c;从而间接实现…...

【HarmonyOS】鸿蒙应用加载读取csv文件

【HarmonyOS】鸿蒙应用加载读取csv文件 一、问题背景&#xff1a; 1. csv文件是什么&#xff1f; csv是一种文本文件格式&#xff0c;与json类似。会存储一些文本内容&#xff0c;应用需要读取该文件&#xff0c;进行UI内容得填充等。 文件中的数据是以纯文本形式存储的&…...

Java retainAll() 详解

在 Java 中&#xff0c;retainAll() 是 Collection 接口&#xff08;List、Set 等集合类实现该接口&#xff09;的一种方法&#xff0c;用于保留集合中与指定集合交集的元素&#xff0c;删除其他所有元素。 以下是对 retainAll() 方法的详细讲解。 1. 方法定义 方法签名 boo…...

Redis的基本数据类型

初识Redis缓存 Redis缓存&#xff1a; 实际开发中经常使用Redis作为缓存数据库&#xff0c;从而提高数据存取效率&#xff0c;减轻后端数据库的压力。 可以将经常被查询的数据缓存起来&#xff0c;比如热点数据&#xff0c;这样当用户来访问的时候&#xff0c;就不需要到MyS…...

通过vite+vue3+pinia从0到1搭建一个uniapp应用

最近项目上要做一个app&#xff0c;选择了用uniapp作为开发框架&#xff1b;我大概看了一下uniapp的文档&#xff0c;根据文档从0到1搭了一个uniapp应用供大家参考。 因为本人习惯使用了WebStorm编译器&#xff0c;但是uniapp官方推荐使用HBuilder搭建&#xff0c;如果和我一样…...

Linux的桌面

Linux的桌面是可以卸载的 的确&#xff0c;Linux并不像Windows&#xff0c;Linux本身是一个基于命令行的操作系统&#xff0c;在内核眼中&#xff0c;桌面只不过是个普通的应用程序&#xff0c;所以&#xff0c;在Linux的桌面中可以完成的事情&#xff0c;命令行中也基本可以完…...