汽车标定技术(一):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协议栈遇到的各种奇奇怪怪的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python把Word题库转成Excle题库

又到了一年一度的背题时刻,但是收到的题库是Word版的,页数特别多 话不多说,上代码,有图有真相,代码里面备注的很详细 # 导入所需库 import csv import os import refrom docx import Document from win32com import c…

nvm 下载 nodejs 速度慢问题解决

1、找到 nvm 的下载目录,在目录下找到 settings.txt 文件 2、打开 settings.txt 文件 ,添加以下代码: node_mirror: https://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors/npm/添加完成后再去下载即可。

【网络协议】聊聊HTTPS协议

前面的文章,我们描述了网络是怎样进行传输数据包的,但是网络是不安全的,对于这种流量门户网站其实还好,对于支付类场景其实容易将数据泄漏,所以安全的方式是通过加密,加密方式主要是对称加密和非对称加密。…

ES-初识ES

文章目录 介绍ElasticSearchElasticSearch的主要功能ElasticSearch的主要特性ElasticSearch的家族成员LogStashKibanaBeats ELK(ElasticSearch LogStash Kibana)的应用场景与数据库集成指标采集/日志分析 安装和配置ElasticSearch一、安装1、下载ES安装…

联通智网科技正式入选国家级专精特新“小巨人”企业

近日,北京市经济和信息化局发布《第五批专精特新“小巨人”企业公告名单》,根据工业和信息化部发布的《工业和信息化部关于公布第五批专精特新“小巨人”企业和通过复核的第二批专精特新“小巨人”企业名单的通告》,联通智网科技股份有限公司…

Angular-07:组件生命周期

三个阶段: ① 挂载阶段1.1 constructor1.2 ngOnInit ② 更新阶段2.1 ngOnChanges2.2 ngAfterViewInit2.3 ngAfterContentInit2.4 ngDoCheck ③ 卸载阶段3.1 onOnDestroy ④ 在组件中添加所有方法并打印 该表按照执行顺序编写 编号函数名实现名说明1constructorcons…

基于单片机的无线报警系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、整体设计方案二、 系统的总体方案论证与设计2.1系统的功能要求2.2 系统的技术要求2.3 系统的方案论证及设计2.3.…

软件测试/测试开发丨ChatGPT能否成为PPT最佳伴侣

点此获取更多相关资料 简介 PPT 已经渗透到我们的日常工作中,无论是工作汇报、商务报告、学术演讲、培训材料都常常要求编写一个正式的 PPT,协助完成一次汇报或一次演讲。PPT相比于传统文本的就是有布局、图片、动画效果等,可以给到观众更好…

三顾茅庐,七面阿里,成功上岸25k16薪,我行你也行~

写在片头:声明,勿杠 首先简单说一下,这三次面试阿里并不是一次性去面的,实际上第一次面试时候还在大四,找的实习岗,不太清楚是什么部门,别问我为什么还记得面试题,有记录和复盘的习…

JAVA毕业设计109—基于Java+Springboot+Vue的宿舍管理系统(源码+数据库)

基于JavaSpringbootVue的宿舍管理系统(源码数据库)109 一、系统介绍 本系统前后端分离 本系统分为学生、宿管、超级管理员三种角色 1、用户: 登录、我的宿舍、申请调宿、报修申请、水电费管理、卫生检查、个人信息修改。 2、宿管: 登录、用户管理…

1+2+4+7+11+16+..x(和不超过3000),求x与式子的和

我们不难发现&#xff1a;每一项的差值成等差数列 用一个for循环&#xff0c;再用一个变量n存储等差数列 for(int i0;i<300;iin) {sumsumi;n; } 完整代码&#xff1a; #include <stdio.h> int main() {int sum 0;int i 0;int n 0;for (i 1;i < 300;i i n){…

机器学习中的嵌入:释放表征的威力

简介 机器学习通过使计算机能够从数据学习和做出预测来彻底改变了人工智能领域。机器学习的一个关键方面是数据的表示&#xff0c;因为表示形式的选择极大地影响了算法的性能和有效性。嵌入已成为机器学习中的一种强大技术&#xff0c;提供了一种捕获和编码数据点之间复杂关系的…

python用cv2画图(line, rectangle, text等)

Python做图像图形研究的时候&#xff0c;通常需要画很多辅助几何形状&#xff08;比如bounding box等&#xff09;。基于opencv的几何图形绘制具有易用性&#xff0c;而且天然能和numpy数组交互。 本文总结了几种常用的cv2画几何图形的方法&#xff0c;当一个简易的手册使用&a…

【Git企业开发】第五节.远程操作

文章目录 前言一、理解分布式版本控制系统二、远程仓库 2.1 新建远程仓库 2.2 克隆远程仓库 2.3 向远程仓库推送 2.4 拉取远程仓库总结 前言 一、理解分布式版本控制系统 我们目前所说的所有内容(工作区&#xff0c;暂存区&#xff0c;版本库等等)&#x…

电子期刊制作与分享就用这个平台,简单!

无论是传统纸质期刊&#xff0c;还是现在网络期刊&#xff0c;我们身边常常有着它们的身影。随着互联网的飞速发展&#xff0c;纸质期刊逐渐消失&#xff0c;电子版期刊取而代之。而电子期刊打破了人们传统的时空观念&#xff0c;它更加贴近人们的生活&#xff0c;更好地满足新…

react-markdown支持83版本的Chrome,解决Object.hasOwn is not a function问题

旧版浏览器支持 react-markdown用了一个ES2022的api&#xff0c;Object.hasOwn测试的时候一切正常&#xff0c;当我切换到生成环境的旧版的83的Chrome之后&#xff0c;发现会报Object.hasOwn is not a function这个错误。 https://github.com/remarkjs/react-markdown/issues/…

计算机毕业设计选题推荐-校园失物招领微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Panda3d 相机控制

Panda3d 相机控制 文章目录 Panda3d 相机控制Panda3d中的透视镜头和垂直镜头透视镜头垂直镜头 Panda3d 中用代码控制相机的移动用键盘控制相机的移动用鼠标控制相机的移动 Panda3d 把相机也当做是一个 PandaNode&#xff0c;因此可以向操作其他节点对其进行操作。 真正的相机是…

交换机基础(零):交换机基础配置

一、华为设备视图 常用视图 名称 进入视图 视图功能 用户视图 用户从终端成功登录至设备即进 入用户视图&#xff0c;在屏幕上显示 kHuawei> 用户可以完成查看运行状态和统 计信息等功能。在其他视图下 都可使用return直接返回用户视 图 系统视图 在用户视图下&…

【RabbitMQ】RabbitMQ 消息的堆积问题 —— 使用惰性队列解决消息的堆积问题

文章目录 一、消息的堆积问题1.1 什么是消息的堆积问题1.2 消息堆积的解决思路 二、惰性队列解决消息堆积问题2.1 惰性队列和普通队列的区别2.2 惰性队列的声明方式2.3 演示惰性队列接收大量消息2.4 惰性队列的优缺点 一、消息的堆积问题 1.1 什么是消息的堆积问题 消息的堆积…