汽车标定技术(一):XCP概述

目录

1.汽车标定概述

2.XCP协议由来及版本介绍

3.XCP技术通览

3.1 XCP上下机通信模型

3.2 XCP指令集

3.2.1 XCP帧结构定义

3.2.2 标准指令集

3.2.3 标定指令集

3.2.4 页切换指令集

3.2.5 数据采集指令集

3.2.6 刷写指令集

3.3 ECU描述文件(A2L)概述

3.3.1 标定上位机的标定、测量

3.3.2 A2L文件格式

4.小结 


1.汽车标定概述

       汽车的标定技术,最初是源自对发动机的特征值、曲线Map和图表参数的一个动态优化调整以适配不同发动机、不同车型对动力的需求。

       它的基本思路是将发动机各种控制算法固化在MCU的Flash中,但是这些算法所需要用的参数通过技术手段抽象出来并在ram中运行,标定人员可以通过修改这些参数来观察算法的输出是否满足要求。注意哈,虽然说我们知道这个参数是可以修改的,但对于CPU或者控制算法来说,这些参数其实是常量,只有控制算法的输出才是变量。

        下图是一个比较经典的标定测量流程示例图:

        标定(Calibration)就是调整和优化ECU中的对于发动机控制算法的各种特征变量;

        测量(Measurement)就是观察不同标定常量作为输入是如何影响控制算法的输出。

        再举个简单一点的例子,比说说现在油门踏板开度与喷油量之间存在这样的关系

y = ax+b

        y--喷油量,x--油门踏板开度,a和b分别为常量

        那么要做标定,我们应该修改的是什么值?

        首先,肯定不可能是x,因为这个开度是驾驶员用脚踩出来的,我们是没办法去要求别人;其次不可能是y,这是输出啊,根据x来的,那么只能是a或者b了;我们假设x此时为50%,表示油门踏板开度为50%,对应的a、b固定,那么喷油量y就是固定了;

        但对于某些动力车型,它想要50%的踏板就有很强动力(y很大),这时候我们就应该去修改常数a、b(此时是运行在ram中)。标定就是修改这些特征值来满足不同车型的要求,当我们根据车型的不同将上述a、b修改成不同值后,一旦标定工程师认为这些值达到效果了,就通过flash刷写的方式将这些数写进Flash中,再通过技术手段告诉ECU以后就到Flash去取a、b的值吧。这就完成了汽车量产前的标定工作。

        那么要完成标定这项工作,需要具备哪些条件呢?

        首先要有一个好的修改标定常量的工具,其次要有一个好的观测方式(要么肉眼,要么通过PC端),最后还要有一个好的人机交互界面。

        这时候,一个名叫ASAM的组织就冒了出来,它将刚才我谈到的这些内容进行一个标准化,即ASAM-MCD(Standardization of Automation and Measurement systems, with the work groups:
Measurement, Calibration and Diagnosis)。

        借用Vector对于一个完整标定系统的描述:

  • ASAM-MCD-1MC:ECU和标定测量系统接口
  • ASAM-MCD-2MC:即A2L文件,是控制器内部信息描述文件规范
  • ASAM-MCD-3MC:此接口用于将另一个系统连接到标定测量系统,例如用于试验台自动化

2.XCP协议由来及版本介绍

       有了上述基本概念,我们知道标定测量系统和ECU之间的桥梁就是ASAM-MCD-1MC,最初就是大家都比较熟的CCP(基于CAN的标定协议,于1995年提出,当前为2.01,1999定版),但是由于CAN的速率特性,对测量数据的时间戳不够精确;再加上目前ADAS等高测量速率要求,CCP逐渐不能满足要求;因此将该协议从CCP中抽象出来是非常有必要的,这时候就出现了XCP(Universal Measurement and Calibration Protocol),“X”表示的是可变的传输层协议,具体如下:

        截止到目前为止,XCP协议已经迭代到了1.5版本 ,每个版本更新如下:

版本发布时间变更点
1.02003

1.传输层支持CAN、ETH(UDP和TCP/IP、SPI、USB)

2.发布标定测量、

1.120081.增加传输层支持FlexRay
1.220131.增加A2L-IF_DATA描述,用于预估ECU资源消耗
1.320151.增加了feature:ECU状态,Bypassing错误处理和时间参数相关
1.420171.新增DAQ模式:减少时间戳数据传输的压缩DAQ等
1.520171.新增“Software Debugging over XCP”标准

3.XCP技术通览

        本质上,XCP协议是为使用者提供了对ECU内部memory的读写机制。读访问保证标定系统可以从RAM中读取观测量,即测量(measurement);写访问保证了标定系统可以对RAM中的标定量进行数值修改,即标定(calibration)。

        因此,XCP的实现就采用了经典的master-slave问答形式。

3.1 XCP上下机通信模型

         XCP基于Master-slave原则;标定系统作为Master,ECU通常作为Slave,Master与Slave之间通过标定工具(硬件例如ETAS的ES582、Vector的VX1000等)了解,使用XCP协议规定的指令进行交互;所以在Master和Slave的系统里均需集成XCP标准协议栈,就和诊断栈一样。

        Master与Slave的命令交互帧叫做CTO(Command Transfer Objects);

        Master与Slave的测量数据交互帧叫做DTO(Data Transfer Objects);

        其通信模型如下:

图片来源:Vector官网 

CTO缩写全称描述
CMDCommand PacketMaster给Slave发送的指令
RESCommand Response PacketSlave返回给Master的命令正响应
ERR Error Packet        Slave返回给Master的命令负响应
EVEvent PacketSlave发给Master的异步事件帧
SERVService Request PacketSlave发给Master的服务请求帧
DTO缩写全称描述
DAQData AcquisitionSalve周期给Master发送测量数据
STIMStimulationMaster周期发送Slave的激励数据(Bypass常见)

        XCP提供了如下几种数据传输方式:

  • 一问一答模式

  • Master块传输模式

         比如说使用download传输大数据给ECU,就会用到这种通讯模式

  • Slave块传输

         Upload指令,获取ECU内部的数据状态;一般标定download完之后,会紧跟着一个upload检查是否写进了目标ram地址。

  • 多问答模式

        这种比较少见,如有用到的可以在后面留言哦。 


3.2 XCP指令集

        有了上位机通信模型之后,我们接下来就要了解XCP协议具体定义了哪些指令。

        在这之前,要先来看XCP协议定义的帧结构。

3.2.1 XCP帧结构定义

            XCP帧包含三部分:Header+Packet+Tail

         其中,帧头(Header)、帧尾(Tail)依赖不同传输层,真正要讨论的深色部分,这部分内容与传输层无关了,即XCP协议栈真正要处理的数据内容,它主要包含三部分内容 ID 域、时间戳域和数据域。

  • ID域

        ID域中最重要的就是PID(Packet identifier),这个值实际上就是Master\Slave的命令ID。如下:

         DAQ主要是测量时根据DAQ list和ODT类型来定位数据的,以后有文章着重描述测量这块。

        CTR可选,也是用于DAQ。

  • 时间戳域

        时间戳通常时DTO帧使用,因为同一个DAQ list里的观测量是同一时间采集,所以一个DAQ周期只会传输一个时间戳

  • 数据域

        Master和Slave真正交互的实际数据,每个指令都有不同的Date参数放在这个域里。

  • 连接命令问答示例

        我们以FF连接命令为例,详细看下PID+DATA是如何交互的,如下:

        根据标准定义,我们来分析上述报文的具体含义。

        根据协议可以看到回复含义如下:

15:CAL/PAG、DAQ、STIM、PGM资源处于保护状态;

C0:  开启slave block mode,inter byte order,AG为1;

08:MAX CTO;

08:MAX DTO;

01 01 :XCP协议版本 1.1

        有了这个基本概念,我们来看看XCP协议到底提供了哪些指令。        

3.2.2 标准指令集

        所谓标准指令集,就是提供最基础的功能,包括Master和Slave的连接建立、断开,ECU身份识别,解锁受保护资源,获取当前会话状态等等。根据XCP1.5版本,标准指令集如下:

        其中前四条指令必选,我们常见的标定上位机的连接按钮,一点击就是这个四条指令的组合拳。 余下指令除了最后两条,基本也是要选的,UPLOAD可以与DOWNLOAD搭配使用,SEED\UNLOCK也是组合。

3.2.3 标定指令集

        标定指令集就是执行标定动作或者在开始标定之前将离线标定的数据批量写进calibration ram中。

        其通讯流程如下:

        首先是SET_MTA(0xF6) 设置即将要传输的memory地址等;

        然后调用DOWNLOAD(0xF0)通知Slave即将要使用的传输模式,结合DOWNLOAD_NEXT进行大数据传输,或者使用问答方式进行小数据标定。

3.2.4 页切换指令集

        页切换,可以用于所谓的工作页和参考页的切换,本质上就是memory地址的切换,WP和RP具体可参考之前关于标定的简单描述汽车ECU的标定

        页切换指令集包含如下内容:

        但在实际使用中,页切换不是所有ECU都支持的,通常是带overlay功能的CPU可以支持。因此要做页切换的目的就是想要CPU很快速滴访问WP或者RP去取算法所需的参数,但做这个切换没有overlay是比较难实现的,具体可参考overlay机制英飞凌TC3xx-Overlay-CSDN博客 。

3.2.5 数据采集指令集

        数采指令集,就是大家常见的DAQ指令集,如下:

        DAQ可以分为动态和静态DAQ;而根据ASAM_XCP_PART5的示例,DAQ的响应时序如下:

        1.获取从机DAQ列表信息

        由于首先就要获取DAQ列表信息,因此在XCP初始化时就要对DAQ进行初始化。

        该步骤所要用到的指令:DA、D9、D7、D5、D8,

        2.准备DAQ列表

                1)静态DAQ配置:常用指令E3

                2)动态DAQ配置

                首先要释放DAQ(D6),然后分配DAQ(D4),最后分配ODT入口(D3)。

        3.配置DAQ列表

                这一步骤用到的指令有:SET_DAQ_PTR(E2),WRITE_DAQ(E1)

        4.开始传输数据

        用到的指令有:SET_DAQ_LIST_MODE(E0)、START_STOP_DAQ_LIST(DE)、GET_DAQ_CLOCK(DC)、START_STOP_SYNCH(DD)

3.2.6 刷写指令集

1.声明刷写开始

        用到的指令PROGRAM_START(D2)

2.擦除FLASH

        用到的指令有 SET_MTA(F6)、PROGRAM_CLEAR(D1)。

3.开始刷写数据

        PROGRAM(D0)

4.结束刷写

        PROGRAM_VERIFY(C8)、PROGRAM_RESET(CF)

        但在实际使用,通常不怎么用这个,都是标号导出hex,通过诊断刷进去。

        因为以前如果是INCA,就得开发ProF文件,其次刷写的效率真的很低。


3.3 ECU描述文件(A2L)概述

        在讲A2L文件之前,我们先来思考几个问题。

  1. 既然标定测量的本质是对ECU内部memory进行读写访问,那么Master是通过什么途径知道存放在ECU内部的标定量、观测量的地址的?
  2. 既然Master和Slave之间是通过CAN\ETH\FlexRay等通讯,它们之间的通信速率、采样点是如何同步的?

        带着这样的问题,我们进入A2L概述之旅

3.3.1 标定上位机的标定、测量

        当我们使用INCA或者CANape时,标定窗口和测量窗口通常长这样:

        这些数据从哪里来的呢?如下图

        我们可以看到,这个数据集里有很多个观测量以及2个标定量,我们选取其中的test_calib1和measrued_Var1进行标定和测量,我们截取master的通信报文如下:

Package Type

Xcp Package

Parameters

SET_MTA

F6 xx xx 00 60 00 00 00

Address extension = 0x00

Address = 0x00000060

RES

FF

DOWNLOAD

F0 04 00 00 80 3F

Number of data elements = 0x04

Data elements = 0x00 0x00 0x80 0x3F

RES

FF

         很明显,这个0x00000060就是test_calib1的地址,那么这个标定工具INCA是怎么知道的呢?

        还记得我们ASAM-MCD-2MC吗?即A2L文件,它就是用来告诉标定工具ECU里面各种详细信息的,包括指令支持类型、通讯方式、观测量、标定量在Flash和RAM的那个具体地址以及实际数据和算法物理数据转换公式等信息。

3.3.2 A2L文件格式

        A2L文件是一种ASCII格式可读文件,记事本都可以打开,它包含了如下具体内容:

  • AML部分:描述了XCP协议的相关信息,关键字/begin A2ML  ... /end A2ML
  • ECU通用部分:描述了ECU的部分信息,比如ECU byte order,对齐方式,标定Flash\RAM等,关键字 /begin MOD_COMMON ... /end MOD_COMMON;/begin MOD_PAR ... /end MOD_PAR等
  • IF_DATA:描述了通讯接口,传输层相关信息,这个INCA要求特点严格,增加在CAN的波特率描述上调bug调了大概半个月,就是因为采样点的原因。
  • A2L对象:包含了标定量、观测量的具体地址、转换公式等,关键词 /begin CHARACTERISTIC ... /end CHARACTERISTIC

       通常我习惯把绿色部分叫做A2L header部分(与/begin HEADER关键词区分),在最开始没接触vector的ASAP2 editor时,都是根据标准描述一行一行手撸,后来掌握到关键点后,用脚本做一个基于excel的配置工具也勉强能用;

        红色部分,一般情况就是用模型生成的A2L文件,如下图:

        最开始生成的A2L文件,标定观测量没有地址的,也没有相应的header,需要集成编译后拿到map或者elf文件进行地址替换,如果没有ASAP2 editor或者CANape,那就只能用matlab自带脚本,如果想再自定义A2L格式,还得熟悉m语言,以后会专门将这块内容。 

        最后以一个A2L文档结构来描述一下:

4.小结 

        前三节内容,基本上把XCP大体框架讲的七七八八,后面会详细聊聊标定在ECU里面的具体概念、DAQ和ODT list的详解、INCA走XCP刷写必备ProF文件、基于模型如何开发标定测量以及生成完美的A2L文件,MPC5748的ovelay概念以及在集成XCP协议栈遇到的各种奇奇怪怪的问题。

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

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

相关文章

有方N58 HTTP POST 请求连接 TDengine

串口调试软件:格西调试精灵 第一步先注册网络获取IP地址 建立PPP连接 ATXIIC1\r PPP链路建立成功,查询IP地址 ATXIIC?\r 设置网络APN ATCREG?\r 运行结果,红线处是获…

算法:Java构建二叉树并迭代实现二叉树的前序、中序、后序遍历

先自定义一下二叉树的类: // Definition for a binary tree node. public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left…

MongoDB安装及开发系例全教程

一、系列文章目录 一、MongoDB安装教程—官方原版 二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控 三、MongoDB 基于角色的访问控制 四、MongoDB用户管理 五、MongoDB基础知识详解 六、MongoDB—Indexs 七、MongoDB事务详解 八、MongoDB分片教程 九、Mo…

ATE新能源汽车充电桩自动负载测试系统

随着新能源汽车的普及,充电桩的需求也在不断增加,为了确保充电桩的性能和安全性,对其进行负载测试是非常重要的。ATE新能源汽车充电桩自动负载测试系统是一种专门用于检测充电桩性能的设备,它可以模拟各种实际使用场景&#xff0c…

6、QtCharts 悬浮曲线效果

文章目录 效果dialog.hdialog.cpp悬浮槽函数 效果 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QtCharts> #include <QLineSeries> #include <QGraphicsScene> #include <QTimer> #include <QSplineSeries>…

《实战:如何搭建一个完整的 Vue2.0 项目》- 7、Vue2.x 项目 webpack 4 升级 5(半自动升级)

1.自动升级 先全局安装升级插件 npm i npm-check npm-check-updates -g检查依赖 npm-check更新检查后的依赖并展示版本号&#xff0c;此时 package.json还没有更新 npm-check-updates升级 package.json&#xff0c;下图显示更新版本&#xff0c;此时 package.json文件已变更…

FFmpeg——使用Canvas录制视频尚存问题的解决方案

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

编译正点原子LINUXB报错make: arm-linux-gnueabihf-gcc:命令未找到

编译正点原子LINUX报错make: arm-linux-gnueabihf-gcc&#xff1a;命令未找到 1.报错内容2.解决办法3./bin/sh: 1: lzop: not found4.编译成功 1.报错内容 make: arm-linux-gnueabihf-gcc&#xff1a;命令未找到CHK include/config/kernel.releaseCHK include/generat…

Linux 上的轻量级浏览器

导读大多数 Linux 桌面环境中包含的基本图像查看器可能不足以满足你的需要。如果你想要一些更多的功能&#xff0c;但仍然希望它是轻量级的&#xff0c;那么看看这四个 Linux 桌面中的图像查看器&#xff0c;如果还不能满足你的需要&#xff0c;还有额外的选择。 当你需要的不…

本地部署Jellyfin影音服务器并实现远程访问影音库

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

表格冻结第二行

在网上找了一圈也没找到说明白的。 像这样的表格下面会有很多行&#xff0c;往下翻的时候会忘记第二行显示的什么内容。 需求&#xff1a;将第二行进行冻结 实现&#xff1a; 1&#xff0c;选中第一和第二行&#xff0c;下拉&#xff0c;点击冻结 2&#xff0c;会显示冻结至…

会声会影2024出来了吗?会声会影2024这款视频剪辑软件怎么样?

众所周知&#xff0c;每每有新兴行业逐渐崛起壮大的时候&#xff0c;随机而来的就是这个行业创造出的衍生行业&#xff0c;比如说现在的短视频平台或者是视频剪辑行业&#xff0c;都是很明显例子&#xff0c;今天我们就针对剪辑软件来和大家聊一聊&#xff0c;会声会影2024这款…

自动化测试篇:Java+selenium+appium自动化测试详解

一、启动测试机或者Android模拟器&#xff08;Genymotion俗称世界上最快的模拟器&#xff0c;可自行百度安装&#xff09; 同时&#xff0c;我也准备了一份软件测试视频教程&#xff08;含接口、自动化、性能等&#xff09;&#xff0c;需要的可以直接在下方观看&#xff0c;或…

MASK-RCNN tensorflow环境搭建

此教程默认你已经安装了Anaconda&#xff0c;且tensorflow 为cpu版本。为什么不用gpu版本&#xff0c;原因下面解释。 此教程默认你已经安装了Anaconda。 因为tensorflow2.1后的gpu版&#xff0c;不支持windows。并且只有高版本的tensorflow才对应我的CUDA12.2&#xff1b; 而…

【漏洞复现】fastjson_1.2.24_unserializer_rce

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞检测3、漏洞验证 1.5、深度利用1、GetShell 说明内容漏洞编号漏洞名称fastjson 1.2.24 反序列化导致…

自定义在input生成tag标签样式,标签可删除。组件封装

生成效果如图&#xff1a; <template><div class"tag-input"><!-- 父盒子 --><div class"father_box" click"fatherOnclick" :class"verify?:notVerify"><!-- 生成的标签 --><div v-for"(item…

师从IEEE Fellow|民办高校计算机专业教师自费赴美访学

D老师科研背景较弱&#xff0c;拟自费访学并带孩子出国就读&#xff0c;故要求申请到美国生活成本低且有较好公立中学教育资源的地区&#xff0c;并希望对方不收管理费。最终我们落实了德克萨斯大学达拉斯分校的邀请函&#xff0c;对方是IEEE Fellow、IET Fellow和EAI Fellow三…

Redis中Hash类型的命令

目录 哈希类型的命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat 内部编码 Hash类型的应用场景 作为缓存 哈希类型和关系型数据库的两点不同之处 缓存方式对比 Redis自身已经是键值对的结构了,Redis自身的键值对就…

YOLO算法改进5【中阶改进篇】:添加SENet注意力机制

SE-Net 是 ImageNet 2017&#xff08;ImageNet 收官赛&#xff09;的冠军模型&#xff0c;是由WMW团队发布。具有复杂度低&#xff0c;参数少和计算量小的优点。且SENet 思路很简单&#xff0c;很容易扩展到已有网络结构如 Inception 和 ResNet 中。 我们可以看到&#xff0c;已…