汽车标定技术(一):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.rhkb.cn/news/179632.html

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

相关文章

无声的世界,精神科用药并结合临床的一些分析及笔记(十)

目录 回 “ 家 ” 克服恐惧 奥沙西泮 除夕 酒与药 警告 离别 回 “ 家 ” 她的锥切手术进行的很顺利,按计划继续返回安定医院调节心理状态,病友们都盼着我们回“家”。当我俩跨入病区,大家都涌过来帮我们大包小包的拎着行李&#xff0…

【实战Flask API项目指南】之七 用JWT进行用户认证与授权

实战Flask API项目指南之 用JWT进行用户认证与授权 本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧! 前言 当小菜踏入Flask后端开发…

[云原生1. ] 使用Docker-compose一键部署Wordpress平台

文章目录 1. Docker-compose概述1.1 简介1.2 docker-compose 的三大概念1.3 docker-compose配置模板文件常用的字段1.4 docker-compose 常用命令及格式 2. YAML 文件的详细介绍及编写注意事项2.1 简介2.2 yaml的特性2.2.1 语法特点2.2.2 数据结构2.2.3 引号的区别2.2.4 内置类型…

剑指JUC原理-9.Java无锁模型

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…

234. 回文链表、Leetcode的Python实现

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…

Zookeeper安装及配置

Zookeeper官网:Apache ZooKeeper 一般作为服务注册中心 无论在Windows下还是Linux下,Zookeeper的安装步骤是一样的,用的包也是同一个包 Window下安装及配置Zookeeper 下载后解压 linux安装 window及Linux安装及配置zookeeper_访问windos上的zookeeper-CSDN博客

【小白福音】手把手教学搭建Vue+SpringBoot开发环境完整教程

前言:在很多新手小白在准备开发一个属于自己的前后端分离项目的时候需要准备一些例如Java环境配置、Node.Js配置、Maven配置以及软件安装等等,于本次博主亲自录制了一套完整的安装配置教程,提供到最后给大家进行下载。 注:本教程仅适用于小白,每一节课都是博主原创录制的,…

Unity3D与iOS的交互 简单版开箱即用

本文适合的情况如下: Unity客户端人员 与 IOS端研发人员合作的情况 目录 From U3D to iOS 实现原理 1.unity工程目录创建2个文件 NativeCallProxy.m、NativeCallProxy.h 并且放到Unity工程目录Plugins/iOS/unity_ios_plus目录下 2.创建C#调用脚本 定义对应.mm脚…

苹果相机怎么磨皮 苹果手机怎么磨皮

相信使用苹果相机的小伙伴都有这样的疑惑,苹果相机怎么磨皮?其实可以通过相机的参数进行设置从而达到磨皮的效果,如果觉得相机自带的设置磨皮效果不够好,可以下载磨皮软件来对照片磨皮。今天的文章就来给大家介绍苹果相机怎么磨皮…

GPT与人类共生:解析AI助手的兴起

随着GPT模型的崭新应用,如百度的​1​和CSDN的​2​,以及AI助手的普及,人们开始讨论AI对就业市场和互联网公司的潜在影响。本文将探讨GPT和AI助手的共生关系,以及我们如何使用它们,以及使用的平台和动机。 GPT和AI助手…

Nginx简介,Nginx搭载负载均衡以及Nginx部署前端项目

目录 一. Nginx简介 Nginx的优点 二. Nginx搭载负载均衡 2.1 Nginx安装 2.1.1 安装依赖 2.1.2 解压nginx安装包 2.1.3 安装nginx 2.1.4 启动nginx服务 2.2 tomcat负载均衡 2.3 Nginx配置 三. Nginx前端部署 一. Nginx简介 NGINX(读作:engi…

虹科荣誉 | 喜讯!虹科成功入选“广州首届百家新锐企业”!!

文章来源:虹科品牌部 阅读原文:虹科荣誉 | 喜讯!虹科成功入选“广州首届百家新锐企业”!! 近日,由中共广州市委统战部、广州市工商业联合会、广州市工业和信息化局、广州市人民政府国有资产监督管理委员会…

一文带你轻松拿下Java中的抽象类

🤷‍♀️🤷‍♀️🤷‍♀️各位看官你们好呀!!! 今天我带大家来深入了解一下Java中的抽象类,相信看完这篇文章,你将会有很大的收获! 个人主页 🌂c/java领域新星…

leetcode 169. 多数元素

2023.11.2 本题我的思路是将数组nums中的元素以及其出现次数保存至一个哈希表hashMap中&#xff0c;然后找到哈希表中大于⌊n/2⌋ 的value值&#xff0c;并返回对应的key即可。 java代码如下&#xff1a; class Solution {public int majorityElement(int[] nums) {Map<Int…

消息中间件——RabbitMQ(一)Windows/Linux环境搭建(完整版)

前言 最近在学习消息中间件——RabbitMQ&#xff0c;打算把这个学习过程记录下来。此章主要介绍环境搭建。此次主要是单机搭建&#xff08;条件有限&#xff09;&#xff0c;包括在Windows、Linux环境下的搭建&#xff0c;以及RabbitMQ的监控平台搭建。 环境准备 在搭建Rabb…

自家开发VS第三方美颜SDK:技术和资源的比较

开发直播平台时&#xff0c;开发人员面临一个关键决策&#xff1a;是选择使用第三方美颜SDK&#xff0c;还是自家开发美颜算法&#xff1f;本文将深入探讨这两种方法的技术和资源方面的比较&#xff0c;帮助开发者更好地决定哪种途径最适合他们的应用。 一、第三方美颜SDK&am…

springboot打包时依赖jar和项目jar分开打包;jar包瘦身

概述 最近感觉项目在部署时时jar包传输太慢了&#xff1b; 看了下jar包内容&#xff0c;除了项目代码&#xff0c;其余大部分都是依赖jar&#xff1b; 平时改动较多的只是项目代码&#xff0c;依赖jar改动比较少&#xff1b; 所以就在想能不能分开打包&#xff1b;这样只部署项…

Proteus仿真--1602LCD显示仿手机键盘按键字符(仿真文件+程序)

本文主要介绍基于51单片机的1602LCD显示仿手机键盘按键字符&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 其中左下角12个按键模拟仿真手机键盘&#xff0c;使用方法同手机键一样&#xff0c;长按自动跳动切换键值&#xff0c;松手后确认选择&#xff…

ARM版CentOS Linux系统镜像安装教程

Linux系统受程序员钟爱&#xff0c;目前国内常见版本有Ubuntu和CentOS等&#xff0c;CentOS是较为稳定的Linux系统。如何在苹果电脑上安装Linux系统呢&#xff0c;小编为大家准备了ARM版CentOS Linux系统镜像文件资源&#xff0c;一起来看看吧&#xff01; ARM版CentOS Linux系…

matlab双目标定中基线物理长度获取

在MATLAB进行双目摄像机标定时,通常会获得相机的内参,其中包括像素单位的焦距(focal length)以及物理单位的基线长度(baseline)。对于应用中的深度估计和测量,基线长度的物理单位非常重要,因为它直接影响到深度信息的准确性。有时候,您可能只能获取像素单位的焦距和棋…