小猫爪:嵌入式小知识15-XCP基础简介

news2024/11/19 14:35:25

小猫爪:嵌入式小知识15-XCP基础简介

  • 0 目录
  • 1 前言
  • 2 XCP的由来
  • 3 XCP基础简介
    • 3.1 XCP的协议组成
    • 3.2 XCP的通信模式
      • 3.2.1 Standard communication model
      • 3.2.2 Block Transfer communication model
      • 3.2.3 Interleaved communication model
    • 3.3 XCP帧格式
    • 3.4 XCP的专业术语
      • 3.4.1 Synchronous Data Transfer
      • 3.4.2 Online Calibration
      • 3.4.3 Flash programming
  • END

0 目录

  1. 小猫爪:嵌入式小知识15-XCP基础简介
  2. 小猫爪:嵌入式小知识16-XCP协议简介
  3. 小猫爪:嵌入式小知识17-XCP on CAN简介

1 前言

   好久没有更新了,这一期来说说刚刚领悟的新技能,那就是XCP,嘿嘿嘿,我是新手,有错勿喷。参考资料:XCP协议规范2003。

2 XCP的由来

   XCP:Universal Calibration Protocol,通用标定协议,主要用于直接在软件上更改某些参数。那么这个XCP是为了解决什么什么问题呢?

   XCP的爸爸是CCP,它由CCP发展变化而来,而CCP就是CAN标定协议,CCP是针对CAN总线来定的协议,后来由于通信形式和系统的多样化和复杂化,XCP就被搞出来了,而那个X就是****的意思,它可以是CAN,Ethernet,FlexRay,USB,SPI,LIN等等等,非严格意义上来讲,它可以在任何通信协议存活,But,嘿嘿,需要你的努力适配。

   XCP的应用场景最重要的就是调参数!如果你是工科出生,那一定知道大名鼎鼎的PID算法,就PID那三个参数调起来都能要了你半条命,想想当年学生时代调PID参数,改个参数,然后编译下载然后运行看效果,我改我编,我再改我再编,熟练的让人心疼。这才3个参数就让人恶心,更别说那种复杂的系统,动不动就几百个参数,而XCP就是针对这种场景,它可以在线更改参数,实时观察结果变化,这样就可以非常的便捷的凑出一组宇宙无敌适合的参数。

   为了实现这种实时改变参数的功能,XCP将操作对象放在了参数的地址上,在MCU的世界中,一切皆地址,那些重要的参数都有一个独立的运行地址,XCP协议就是根据运行地址直接找到并修改参数的值,通过这种方法,就可以让用户快速实现标定,这简直是又Low又夸张。

   这个时候有些小朋友就要问了,如果是这样的话,那我也能整出一个类似的协议,阁下该如何应对?XCP最牛逼的地方不在它的协议上,而是在它发展到如今的上位机生态,现在很多常用的XCP上位机的功能非常强大,最具代表性的还是Vector(维克多)的CANape,还有ETAS(一坨屎)的INCA,这些上位机不仅可以实现测量量和标定量的图形化,还可以使用各种脚本来实现数据分析,那简直把标定玩出一朵花出来了,我觉得就没有CANape标定不了的系统,如果有,那就是你的系统很烂。

3 XCP基础简介

   XCP的功能有:随机读取ECU中RAM和ROM数据;测量数据采样;标定数据采样和传输;同时处理多个ECU系统;Flash编程技术。
   其工作模式也是非常常见的主从通信模式,XCP协议中,主节点为XCP上位机,被测量点又称“XCP从节点;主结点发送命令连接并开始,从结点在接收到后,再向主结点发送应答,可以采用一主多从的通信形式。提到主从模式,那就来到了我们所熟知的,协议命令环节。

3.1 XCP的协议组成

  XCP协议组成如下:
在这里插入图片描述
  其通信包按照功能分成CTO(Command Transfer Object)和DTO(Data Transfer Object),CTO中分别有Command,Response,Error,Event,Service Request;DTO中有Data Acquisition和Stimulation Data,从名字中其实就可以看出来CTO和DTO的功能用途,一个是用来进行XCP控制,一个则用来进行数据传输。

  其中CMD包为主节点发送给从节点,从节点需要立即回复RES包或者ERR包,而其他类型包则为自主发送包,主从节点满足条件时则可自发发送,不属于那种传统意义上的一问一答制通信,但是这些自主发送包都是受主节点控制的,也就是说这些自主包发送之前,主节点必须要发送CMD进行相关的操作配置。

  至于上面的各种包有什么作用,现在不用关心,后面会一一说明。

3.2 XCP的通信模式

  XCP的通信模式有三种分别是Standard communication model, Block Transfer communication model, Interleaved communication model。在CAN上的XCP为标准模式和块传输模式。

3.2.1 Standard communication model

  标准模式如下图所示:
在这里插入图片描述

3.2.2 Block Transfer communication model

  块传输模式如下图所示:
在这里插入图片描述

3.2.3 Interleaved communication model

  交错模式如下图所示:
在这里插入图片描述

3.3 XCP帧格式

  XCP帧格式如下:
在这里插入图片描述
  在CAN上的XCP来说,XCP Header和XCP Tail是不需要的,然后上面的格式又要根据是CTO和DTO又要进行一点点变化,对于CTO来说,帧结构则变成了:
在这里插入图片描述
  其中Identification Field只有PID,没有Timestamp Field,剩下就是Data Field。其中PID为Packet IDentifier,其中所代表的内容是CTO Packet Code,可以根据其判断出CTO的类型,长度固定为1个字节,而DATA则是根据不同的PID而变化了。

  对于DTO来说,帧结构则变成了:
在这里插入图片描述
  DTO的格式就比较随意多变了,它会根据不同的PID进行变化。
  首先来看看Identification Field,可以根据PID来判断帧的DTO类型,其中包含的信息为Absolute ODT Number或者Relative ODT Number,长度固定一个字节,如果PID包含的信息为Relative ODT Number,那么则需要DAQ参数,DAQ则包含了Absolute DAQ list Number(这些名词后面会解释)。如果XCP有字节对齐要求,则还需要添加一个FILL来进行字节对齐。
  Timestamp区域在DTO中是可选的,主节点可通过SET_DAQ_LIST_MODE命令来开启和关闭TS,如果从节点的TIMESTAMP_FIXED flag为1(主节点可通过GET_DAQ_RESOLUTION_INFO获取),则代表主节点不可以设置TS,TS的长度可以是1,2,4字节。

3.4 XCP的专业术语

  在学习XCP之前,一定要搞清楚其中几个非常重要的定义,这是入门的基础,理解的越透彻,XCP学习的越快。

3.4.1 Synchronous Data Transfer

  同步数据传输,也有的叫它同步数据测量,主要功能其实就是完成大量数据的读写。
 (1) Element,ODT_Enrey和ODT
  上面在介绍XCP的时候,提到过XCP的操作对象是数据地址,而在XCP中,这样一个数据则被称为一个Element元素。

  而描述Element信息的描述被称为ODT_Entry。它是XCP的基本数据操作单元,其中包含了Element的地址,扩展地址,大小,所在位以及位偏移。XCP其实也就是根据ODT_Entry来去进行数据的读写,有没有发现XCP突然也变得非常可爱和简单啊。而这几个参数则就需要去了解一下了:
  1. ADDRESS_GRANULARITY: 表示数据整合方式,即BYTE, WORD, DWORD,也就是1,2,4。
  2. GRANULARITY_ODT_ENTRY_SIZE_x:表示数据对齐方式,可以是1,2,4,8。所以Element的地址和大小必须可以被其整除。而它也必须可以被ADDRESS_GRANULARITY整除。
  3. MAX_ODT_ENTRY_SIZE_x:表示Element的最大长度
  4. ODT_ENTRY_NUMBER:是ODT_Enrey的编号,即索引。

  很多个ODT_Enrey就可以组成的一个ODT,然后通过ODT_ENTRY_NUMBER去索引到每一个Element。对于ODT也有几个参数需要了解一下:
  1. MAX_ODT_ENTRIES:ODT所能容纳的最大ODT_Entry数量。
  2. ODT_NUMBER:是ODT的编号,即索引。

  所以Element,ODT_Enrey和ODT这三者的关系如下图所示:
在这里插入图片描述
 (2) DAQ-list
  很多个ODT就组成了一个DAQ-list,然后通过ODT_NUMBER去索引到每一个ODT。所以ODT和DAQ-list的关系如下图所示:
在这里插入图片描述
  从节点可预定义DAQ-list,也就是ECU固有的,而主节点也可以动态定义DAQ-list。DAQ-list分为静态DAQ-list和动态DAQ-list两种,静态DAQ-list表示其所包含的ODT数量一定,而动态DAQ-list则就表示其包含的ODT数量可以变化,其起始值为0。下面有几个参数需要了解:

  1. MAX_ODT:表示一个DAQ-list包含的ODT数量,静态DAQ-list不变,动态DAQ-list可变。
  2. MAX_DAQ:表示从节点所能支持的最大的DAQ-list数量。
  3. MIN_DAQ:表示从节点的预定义的DAQ-list数量。
  4. DAQ_COUNT:表示主节点动态定义的DAQ-list数量。

 (3) Event channels
  上面介绍了DAQ-list,如果主从节点需要周期性的采样和传输一个DAQ-list中所有Element,那么就需要一个周期性事件来激活这个DAQ-list的采样和传输,而这个用来触发DAQ-list的事件在XCP中被称为Event channels,一个DAQ-list对应一个Event channel,同一个时间可激活多个DAQ-list。

  从节点需要在本地事先定义好Event channels,然后主节点需要发送CMD将相关的DAQ-list和Event channels绑定,这样当从节点的Event channels发生时就会激活绑定的DAQ-list,这就完成了对DAQ-list中的所有Element完成采样和传输。这个流程其实就是上面提到的DTO包中的DAQ,也被称为同步测量。

 (4) DAQ和STIM
  DAQ(Synchronous data acquisition)的工作流程在上面已详细说明,当Event channels发生时就会激活其绑定的DAQ-list,然后从节点就会去对其所包含的所有Element进行采样并且将其使用DTO包传输给主节点。

  STIM的流程则恰恰与DAQ相反,DAQ是读取Element数据,而STIM是主节点向从节点写Element数据,也是非常的好理解。

3.4.2 Online Calibration

  Online Calibration,在线标定是XCP的核心功能,就是完成相关参数的校准。

(1) SECTOR, SEGMENT和PAG
  下图显示了SECTOR, SEGMENT和PAG三者的关系:
在这里插入图片描述
  其中SECTOR指的是ECU中的物理SECTOR, 即RAM和FLASH的物理存储空间。SEGMENT则是XCP定义的逻辑映射空间,而一个SEGMENT则至少有一个或多个PAGE,每个PAGE中的内容是一样的,同一时间只有一个PAGE可以被ECU访问,同一时间只有一个PAGE可以被主节点访问,这两个激活的PAGE是单独管理的,这样多PAGE管理模式是为了避免一个PAGE同时被XCP和ECU访问的数据同步问题。在定义SEGMENT时,可以定义它的地址,大小以及访问权限。当XCP访问相关地址数据时,这个数据必须符合SEGMENT定义。

  主节点可通过GET_CAL_PAGE命令CMD读取当前能被XCP访问的PAGE以及能被ECU访问的PAGE,通过SET_CAL_PAGE命令CMD设置能被XCP访问和能被ECU访问的PAGE。主节点还可通过COPY_CAL_PAGE命令CMD进行一个SEGMENT的两个PAGE的拷贝。

3.4.3 Flash programming

  XCP除了标定之外,还有一个非常重要的功能就是Flash programming了,XCP FLASH变成的大致流程如下:
在这里插入图片描述
  然后Flash programming分成两种,分别是绝对地址访问模式和相对地址访问模式。
(1) Absolute Access Mode
  Absolute Access Mode其实就是根据实际物理地址进行数据的下载,即access by address。流程如下图所示:
在这里插入图片描述
  上图中的MTA为Memory Transfer Address,ECU获取到MTA后直接就将其应用到FLASH的物理地址,然后进行接下来的编程操作。这个模式一般应用下载一些PAR数据,进行小数据量的FLASH读写。

 (2) Functional Access Mode
  Functional Access Mode就是不需要啥地址,那它需要啥呢?其流程如下图所示:
在这里插入图片描述
  首先其起始编程地址由PROGRAMM_CLEAR决定,然后呢,ECU里面有个Counter,每进行一次下载,那么这个counter就会累加,然后ECU每次会根据这个counter去计算每次的下载绝对物理地址,这样就可以慢慢的将每一次写的Block写到正确的地址处。这种下载模式通常应用于下载很大的软件镜像。

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/919519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

又一个国产操作系统将现身,基于AOSP,兼容安卓应用

日前媒体报道指又一家手机企业似乎自研自主操作系统,名字为*IOS,已申请域名备案,这被认为是它开始自研手机操作系统的迹象,自研操作系统似乎已成为国产手机努力的方向。 关于*IOS最早在2014年就曾传出,但是后来因故而最…

【Unity】Text文本组件的一些操作

Unity的Text组件的几种常见的操作方法 Text组件是Unity中用于在UI界面上显示文本的组件。它包含了一些常见的属性和方法,可以用来控制文本的内容、外观和交互。以下是一些常见的Text组件的操作: 设置文本内容:通过直接在Unity编辑器中的Text…

计算机竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖,适合作为竞…

VM——获取图像中的圆环区域

、需求:下图是圆柱形铝罐,需要获取图像中的罐沿区域。 2、方法如下: (1)通过找外圆,提取圆形区域 (2)利用“拷贝填充”模块,绘制外圆ROI,选择“输出掩膜” (3&#xff09…

【排错经验】树莓派4B摄像头问题集锦(USB摄像头)

1、E: Unable to locate package luvcview 这款软件不是在任意版本的操作系统下都适用的,要查看自己Ubuntu版本支持的uvcview。 方法:输入命令:sudo apt-cache search uvcview 由图可知,我这个版本的操作系统支持的是guvcview 所…

GMS基本模块TIN、Solids、Modflow2000/2005、MT3DMS、MODPATH。及其在地下水流动、溶质运移、粒子追踪方面的应用

解决地下水数值模拟技术实施过程中遇到的困难,从而提出切实可行的环境保护措施,达到有效保护环境、防治地下水污染,推动经济社会可持续发展的目的。 (1)水文地质学,地下水数值模拟基础理论;&am…

WPF中手写地图控件(3)——动态加载地图图片

瓦片增加一个Loading动画 可以查看我的另一个博客WPF中自定义Loading图 从中心扩散 进行从里到外的扩散,方向是上左下右。如下图所示 于是我们可以定义一个拥有坐标X跟Y的集合,他允许这个集合,内部使用枚举器的MoveNext自动排序&#xf…

K8S如何部署ZooKeeper以及如何进行ZooKeeper的平滑替换

前言 在之前的章节中,我们已经成功地将Dubbo项目迁移到了云环境。在这个过程中,我们选择了单机ZooKeeper作为注册中心。接下来,我们将探讨如何将单机ZooKeeper部署到云端,以及在上云过程中可能遇到的问题及解决方案。 ZooKeeper…

最优的家电设备交互方式是什么?详解家电设备交互的演进之旅

家电,在人们的日常生活中扮演着不可或缺的角色,也是提升人们幸福感的重要组成部分,那你了解家电的发展史吗? 70年代 结婚流行“四大件”:手表、自行车、缝纫机,收音机,合成“三转一响”。 80年…

精进语言模型:探索LLM Training微调与奖励模型技术的新途径

大语言模型训练(LLM Training) LLMs Trainer 是一个旨在帮助人们从零开始训练大模型的仓库,该仓库最早参考自 Open-Llama,并在其基础上进行扩充。 有关 LLM 训练流程的更多细节可以参考 【LLM】从零开始训练大模型。 使用仓库之…

36k字从Attention解读Transformer及其在Vision中的应用(pytorch版)

文章目录 0.卷积操作1.注意力1.1 注意力概述(Attention)1.1.1 Encoder-Decoder1.1.2 查询、键和值1.1.3 注意力汇聚: Nadaraya-Watson 核回归1.2 注意力评分函数1.2.1 加性注意力1.2.2 缩放点积注意力1.3 自注意力(Self-Attention)1.3.1 自注意力的定义和计算1.3.2 自注意…

DataFrame.query()--Pandas

1. 函数功能 Pandas 中的一个函数,用于在 DataFrame 中执行查询操作。这个方法会返回一个新的 DataFrame,其中包含符合查询条件的数据行。请注意,query 方法只能用于筛选行,而不能用于筛选列。 2. 函数语法 DataFrame.query(ex…

【OJ比赛日历】快周末了,不来一场比赛吗? #08.26-09.01 #16场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 2023-08-26(周六) #8场比赛2023-08-27…

redis在linux和windows上的安装配置(解决问题:没有可用软件包 redis)

linux系统 安装 yum install redis安装 在终端输入yum install redis安装。 报错:没有可用软件包 redis。 解决: 运行以下命令更新软件包信息: sudo yum clean all sudo yum update 然后继续尝试yum install redis。 如果还不成功&a…

探索最短路径问题:寻找优化路线的算法解决方案

1. 前言:最短路径问题的背景与重要性 在现实生活中,我们常常面临需要找到最短路径的情况,如地图导航、网络路由等。最短路径问题是一个关键的优化问题,涉及在图中寻找两个顶点之间的最短路径,以便在有限时间或资源内找…

最新AI系统ChatGPT程序源码+搭建部署教程/支持GPT4/支持ai绘画/H5端/完整知识库

一、AI系统 如何搭建部署AI创作ChatGPT系统呢?小编这里写一个详细图文教程吧! SparkAi使用Nestjs和Vue3框架技术,持续集成AI能力到AIGC系统! 程序核心功能: 程序已支持ChatGPT3.5/4.0提问、AI绘画、Midjourney绘画&…

【Axure原型分享】能统计中英文字数的多行输入框

今天和大家分享能统计中英文字数的多行输入框的原型模板,在输入框里输入内容后,能够动态根据输入框的内容,统计出字符数量,包括总字数、中文字数、英文字数、数字字数、其他标点符号的字数,具体效果可以观看下方视频或…

微服务架构2.0--云原生时代

云原生 云原生(Cloud Native)是一种关注于在云环境中构建、部署和管理应用程序的方法和理念。云原生应用能够最大程度地利用云计算基础设施的优势,如弹性、自动化、可伸缩性和高可用性。这个概念涵盖了许多方面,包括架构、开发、…

DataLoader

机器学习的五个步骤: 数据模块——模型——损失函数——优化器——训练 在实际项目中,如果数据量很大,考虑到内存有限、I/O 速度等问题,在训练过程中不可能一次性的将所有数据全部加载到内存中,也不能只用一个进程去加…

mmdetection基于 PyTorch 的目标检测开源工具箱 入门教程

安装环境 MMDetection 支持在 Linux,Windows 和 macOS 上运行。它需要 Python 3.7 以上,CUDA 9.2 以上和 PyTorch 1.8 及其以上。 1、安装依赖 步骤 0. 从官方网站下载并安装 Miniconda。 步骤 1. 创建并激活一个 conda 环境。 conda create --name…