当前位置: 首页 > 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;帮助你全面理解两者的设计…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...