【车载开发系列】ECU Application Software程序刷新步骤
【车载开发系列】ECU Application Software程序刷新步骤
ECU Application Software程序刷新步骤
- 【车载开发系列】ECU Application Software程序刷新步骤
- 一. Boot Software(引导软件)
- 1)boot manager(启动管理器)
- 2)Reprogramming Software(重编程软件)
- 3)boot memory partition(启动内存分区)
- 二. Tester(测试仪)与Client(客户端)
- 1)Client客户端
- 2)Tester测试仪
- 三. Diagnostic Data(诊断数据)
- 1)当前值
- 2)存储值
- 3)静态值
- 四. Application Software程序升级步骤
- 1)Pre-Programming Step
- 2)Programming Step
- 3)Post-Programming Step
一. Boot Software(引导软件)
在服务器存储器的一个特殊部分中执行的软件,主要用于启动ECU和执行服务器编程,该内存区域在正常编程序列期间不会被擦除,并且必须在服务器应用程序丢失或被视为无效时执行,以始终确保重新编程服务器的能力
一个ECU包含了三部分 Boot Manager、Application Software以及Boot Software,其中Boot Software由Boot Manager和Reprogramming Software组成,在汽车嵌入式中,我们常说的bootloader就是Boot Software。

1)boot manager(启动管理器)
在ECU开机或重置后立即执行的引导软件的一部分,其主要目的是检查与将控制转移到重编程软件,还有是否有有效的应用程序可供执行。启动管理器还可以考虑到将控制转换到重编程软件的其他条件。
2)Reprogramming Software(重编程软件)
引导软件的一部分,用于重新编程电子控制单元。
3)boot memory partition(启动内存分区)
引导软件所在的服务器内存中的区域。
二. Tester(测试仪)与Client(客户端)
1)Client客户端
作为测试仪一部分并使用诊断服务的功能,测试仪通常使用其他功能,如数据库管理、特定解释、人机界面。
2)Tester测试仪
控制车载电子控制单元的测试、检查、监控或诊断等功能的系统,可以专用于特定类型的操作员(例如,专用于车库机械的非车载扫描工具、专用于装配厂的非车载测试工具或车载测试仪)。
三. Diagnostic Data(诊断数据)
位于电子控制单元存储器中的数据,可由测试仪检查和/或修改。诊断数据包括模拟输入和输出、数字输入和输出,中间值和各种状态信息。
诊断数据的示例包括车速、节气门角度、后视镜位置、系统状态等。
诊断数据定义了三种类型的值:
1)当前值
电子控制单元正常操作当前使用的值(或由此产生的值)
2)存储值
在特定时刻(例如发生故障或周期性故障时)生成的当前值的内部副本,该副本在电子控制单元的控制下制作;比如DTC快照数据就是存储值。
3)静态值
例如,VIN。服务器没有义务为诊断目的保存其数据的内部副本,在这种情况下,测试仪只能请求当前值。
定义维修车间或开发测试会话会选择不同的服务器功能(例如,仅在开发测试会话中才允许访问所有内存位置)。
四. Application Software程序升级步骤
对于汽车ECU的Application Software升级,OEM几乎都是遵循UDS规范。
Application Software程序升级主要分为三个阶段:Pre-Programming Step、Programming Step、Post-Programming Step。

1)Pre-Programming Step
此阶段的主要做一些Application Software升级前的检查,确保正式升级Application软件之前,车辆工况的安全性。这里举几个常见的检查条件:车速、诊断电压、KL15信号有效性等。
车速:约束车速<2Km/h,也就是说不允许车辆行驶过程中进行软件升级。
诊断电压:诊断电压会约束在一定的范围,比如:10V~16V,避免升级过程中,因电压过低或者过高导致刷写失败。
KL15信号有效性:为了确保收到的信号质量,一般会检查这个信号的有效性(Valid or Invalid),有效的信号才能确保升级过程中的稳定性。
以上这些都是安全检查,目的就是一个保证安全。
2)Programming Step
经过了前面车辆工况的安全检查,此时可以进行Application Software的软件升级。Application Software的软件遵循UDS协议

Step1:
进入编程会话,只有特定的编程会话下,才能进行Application Software升级。
Step2:
进行安全检查,通过OEM指定的算法进行Key的比对,主要是确认操作人员的合法性。就好比每个人只有自家的钥匙,自家的钥匙只能打开自家的门,而不能打开别人家的门一样,也就是Key的唯一性。
Step3:
写指纹信息,比如Application程序的软件版本号等。
Step4:
此过程将Flash Driver下载到ECU中,为擦除旧的Application Software做准备,确切说是下载内存擦除例程(memory erase routine)。一般Flash Driver不会放在ECU内部,担心程序异常跑到Flash Driver位置,将有效的Application擦除,所以,Flash Driver只有在Application程序升级时下载到ECU的RAM区。
Step5:
检查Flash Driver的有效性,只有Flash Driver成功下载,之后的Application程序擦除和更新才能成为可能
Step6:
执行旧Application程序的擦除。
Step7与Step8:
与Step4~Step6功能类似,这里是下载Flash Driver的内存编程例程(memory programming routine)。在实际项目中,Step4~Step8就是Flash Driver的下载,包括memory erase routine和memory programming routine。
Step9:
刷写新的Application Software到ECU。Step10:
更新Application Software以后,需要检查下载数据的完整性,确保数据可靠。
Step11:
检查Application Software的有效性,比如签名(signature)是否正确等。
Step12:
写配置信息,比如车辆VIN等。
3)Post-Programming Step
此阶段主要是Application Software更新后的网络恢复,即:Application Software更新好以后,重新参与工作。常用的做法就是执行ECU Reset,也可以让诊断刷写的S3时间超时,程序重新复位。

相关文章:
【车载开发系列】ECU Application Software程序刷新步骤
【车载开发系列】ECU Application Software程序刷新步骤 ECU Application Software程序刷新步骤 【车载开发系列】ECU Application Software程序刷新步骤一. Boot Software(引导软件)1)boot manager(启动管理器)2&…...
inject和provide的使用
官网介绍用法 V2.2.0 新增的方法 类型 provide:Object | () > Object inject:Array<string> | { [key: string]: string | Symbol | Object }介绍 这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖ÿ…...
2023年中国研究生数学建模竞赛D题
一、背景介绍 2021年9月22日,中共中央国务院正式发布《关于完整准确全面贯彻新发展理念做好碳达峰碳中和工作的意见》(以下简称《意见》),明确了中国双碳行动的顶层设计。 我国是世界上最大的发展中国家,为实现中华民…...
Unity制作曲线进度条
unity制作曲线进度条 大家好,我是阿赵。 在使用Unity引擎做进度条的时候,有时会遇到一个问题,如果进度条不是简单的横向、纵向或者圆形,而是任意的不规则形状,那该怎么办呢?比如这样的: 一…...
面试:C++ 11 智能指针
查询内存泄露方法 啥是内存泄露 内存泄露在维基百科中的解释如下: 在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误&…...
设计模式——3. 抽象工厂模式
1. 说明 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一组相关或依赖对象的方式,而无需指定它们的具体类。抽象工厂模式是工厂模式的扩展,它关注于创建一组相关的对象家族,而不仅仅是一个单一的对象。 抽象工厂模式通常涉及以下几个角…...
vscode 无法使用 compilerPath“D:.../bin/arm-none-eabi-g++.exe”解析配置。
最近在使用vscode搭建ODrive STM32开发环境,依次安装了以下内容: 1.Python3: 用于运行工程构建脚本 2.ST-Link/V2 Drivers: STLink/v2编程器的驱动 3.Visual Studio Code: 轻量级但功能强大的源代码编辑器 …...
Vue.js入门模板语法[上] 及Vue.js实现购物车---详细讲解
前言 前面我们学习了Vue的基础入门,接下来我们学习有关Vue的模板语法,学习Vue语法能提高我们的前端开发效率 Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML &a…...
windows下gvim的配置
一、vim配置文件 "查看自己的vimrc所在的目录 "在命令模式下 :echo $MYVIMRC"打开自己的vimrc文件 "在命令模式下 :e $MYVIMRC 二、排版 "查看自己当前的字体及大小 "在命令模式下 :set guifont?"设置默认的字体为仿宋_GB2312ÿ…...
基于复旦微的FMQL45T900全国产化ARM开发开发套件(核心板+底板)
TES745D是我司自主研制的一款基于上海复旦微电子FMQL45T900的全国产化ARM核心板(模块)。该核心板将复旦微的FMQL45T900(与XILINX的XC7Z045-2FFG900I兼容)的最小系统集成在了一个87*117mm的核心板上,可以作为一个核心模…...
Leetcode Top100(23)环形链表
给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索…...
线性代数基础-行列式
一、行列式之前的概念 1.全排列: 把n个不同的元素排成一列,称为n个元素的全排列,简称排列 (实际上就是我们所说的排列组合,符号是A,arrange) 2.标准序列: 前一项均小于后一项的序列…...
RT-Thread(学习)
RT-Thread是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过16个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。 RT-Thread概述 RT-Threa…...
【MySQL】 MySQL 死锁问题分析优化器特性及优化方案
MySQL 死锁问题分析优化器特性及解决方案 MySQL 锁机制介绍 1、MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级…...
【C++面向对象侯捷】8.栈,堆和内存管理
文章目录 栈,堆stack object的生命周期static local object的生命周期global object的生命周期heap objects 的生命期new:先分配memory,再调用构造函数delete: 先调用析构函数,再释放 memory动态分配所得的内存块,in V…...
在比特币上使用可检索性证明支付存储费用
我们为用户开发了一种为云存储付费的新方法。 与亚马逊的 S3 等传统云存储相比,用户不必信任服务器。 我们使用比特币智能合约来确保支付取决于服务器的可检索性证明 (PoR),该证明只能在数据仍然可用且需要时可以检索的情况下生成。 可检索性证明 (PoR)…...
使用SSE(Server-Sent Events)实现服务端给客户端发消息
首先是客户端,看着比较简单。但实际应用中可能要比这复杂,因为默认sse只支持get请求,而且没法携带header。所以如果默认的方法达不到需求的话可能需要额外实现,当然也可以引用第三方库,比如rangermauve/fetch-event-so…...
【Redis】使用rpm包安装redis
背景说明 公司环境处于内网,某同事需要安装redis,如果使用通过源码编译安装redis,很多编译工具如gcc就需要先安装,但处于内网安装起来不太方便,当然也不是不可以。我们此处就选用通过redis的rpm包进行安装。 rpm包查…...
论文阅读-Group-based Fraud Detection Network on e-Commerce Platforms
目录 摘要 1 Introduction 2 BACKGROUND AND RELATED WORK 2.1 Preliminaries 2.2 Related Works 3 MODEL 3.1 Structural Feature Initialization 3.2 Fraudster Community Detection 3.3 Training Objective 4 EXPERIMENT 4.1 Experimental Setup 4.2 Prediction …...
java程序启动时指定JVM内存参数和Xms、Xmx参数学习
先找个java程序来试验;找这个, java实现计算机图形学中点画线算法_java 多个点连成一条线 算法-CSDN博客 JVM内存参数中, -Xms:设置堆内存的初始大小,默认为物理内存的1/64; -Xmx:设置堆内存的…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
