AUTOSAR OTA升级

news2024/11/20 9:28:45

一、OTA技术概念

随着高级辅助驾驶的发展和自动驾驶的引入,汽车变得越来越智能,这些智能汽车被软件控制,装有巨量的软件程序,当出现一个软件程序问题或者更新时,如果 按照传统的解决方式 ,那都将是一项很繁重的任务。以某车上市后出现的刹车逻辑问题为例,按照传统的解决方案,那么所有该车辆先将被召回,然后派人更新软件。这样,一方面影响用户体验和满意度,另一方面又要耗费大量的人力物力来修复问题。

为了解决传统方式的痛点,使得软件更新更迅速,一种远程升级软件的技术OTA被引入到汽车行业。汽车远程升级技术OTA (Over-the-Air)是指通过移动通信网络(2G/3G/4G或Wifi)对汽车的零部件终端上固件、数据及应用进行远程管理的技术。简单来说OTA技术实现分三步:首先将更新软件上传到OTA中心,然后OTA中心无线传输更新软件到车辆端,最后车辆端自动更新软件。
在这里插入图片描述

OTA体现的优势

  • 能有效提升用户体验与满意度
  • 能大范围大批量升级系统并提供升级成功率
  • 能快速修复车辆故障
  • 能有效降低售后维护成本

而且随着汽车行业已进入软件定义汽车的时代,对售后汽车售卖各种各样功能的新商业模式兴起,也要求汽车必须具备OTA功能。这里准确地说,OTA分为两类,一类是 固件在线升级FOTA (Firmware-Over-the-Air),是指不改变车辆原有配件的前提下,通过写入新的固件程序,使拥有联网功能的设备进行升级,包括车辆的发动机,电机,变速箱,底盘等控制系统,比如特斯拉曾通过FOTA新增过自动驾驶功能、增加过电池容量和改善过刹车距离等。另一类是 软件在线升级SOTA (Software-Over-the-Air),是在操作系统的基础上对应用程序进行升级,是指那些离用户更近的应用程序,UI界面和车载地图、人机交互界面等功能,像娱乐系统更新操作界面或主题。

二、OTA技术架构

当前智能网联汽车的OTA架构由OTA云端,OTA终端和OTA升级三部分组成,如下所示。
在这里插入图片描述
这里,OTA云端为OEM专属的云端服务器平台,OTA终端采用TBox,网络架构采用功能域划分方式。

2.1 OTA云端

OTA云端服务平台,也称为OTA云端,包含OEM支持OTA升级的ECU全部完整升级包。OTA云端的设计要求是独立的平台,可支持多车厂或客户的设备计入,支持多车型,多型号规格,多种类设备软件的升级。

2.1.1 OTA云端能力

OTA云端对OTA终端需要具备如下接口和能力,包括版本更新检查接口、升级下载接口、升级结果汇报接口、升级进度汇报接口、升级通知能力、OTA云端升级策略需要支持全量升级、不定增量包升级、差分升级,可以实现静默升级和非静默升级。支持升级版本的迭代,更新,版本的分支等。具备批量任务管理功能,分批升级避免升级拥堵。

2.2 OTA终端

OTA终端包含OTA引擎和OTA升级适配器。OTA引擎主要负责协调和调度终端OTA升级、接收OTA升级通知、主动升级检查、升级包下载、升级包解密、签名验证、差分包重构、升级包分发与调度等相关工作。OTA升级适配器则是为了兼容不同的软件或设备更新逻辑或流程,根据统一接口要求而封装不同实现,升级适配器由需要OTA升级的各个软件实现提供。

2.3 升级对象

汽车OTA升级对象主要包括操作系统和应用APP,以及车内嵌入式设备ECU的升级。操作系统升级采用双系统升级策略。

针对ECU升级的过程描述:FOTA系统主要通过车载移动互联网进行数据上报及下行传输,通过车内网对车内设备单元进行数据刷写。典型的FOTA系统网络安全主要由OTA远程管理平台端、TBox端(4G LTE)、中央网关、域控制器端及数个ECU等节点组成。

FOTA系统网络安全性需要确保升级包在远程服务器端的安全存储、后台服务器到车端的安全加密通讯、中央网关的升级包解密、防火墙和OTA 管理,以及车内网络基于堆成加密的安全通讯和安全Bootloader的要素。

三、ECU的OTA技术实现方案

3.1 非易失性数据储存服务

绝大多数的嵌入式系统都需要有一个存储空间来存储一些关键非易失性数据,可选的器件如:TF/SD卡,NAND/NORFLASH等,汽车弟子啊常用的则是EEPROM和FLASH。一般来说FLASH和EEPROM在写数据之前都需要先执行擦除操作,对于EEPROM而言,其最小可擦除单元为8到32个字节,而FLASH就会很大在512字节以上,所以这也决定了使用EEPROM更加简单,软件不会很复杂。

3.1.1 分区刷写

为了合理有效使用内存,同时也为了方便管理,通常会对内存进行一个分配,比如Bootloader、BSW、ASW分别分配在不同的连续内存区域里,这样就能在对ECU进行刷写时能够只更新其中一个,其他保持不变。

3.1.2 地址映射

为了保证CPU执行指令时可正确访问存储单元,需要用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。如何保证我们所写的代码能放到规定的内存空间?这里需要使用到#pragma:

/*Far Data / Far Const Sections, selectable with  patterns and user defined sections*/
  section_layout :vtc:linear
  {
    /*Far Data Sections, selectable with patterns and  user defined sections*/
    group
    {group (ordered, attributes=rw, run_addr=0x70001000)
        {
          select".bss.user_test_bss";
        }
        
        group (ordered, attributes=rw, run_addr=0x70004000)
        {
          select".data.user_test_data";
        }
    }
}

在程序中定义如下,则run_cnt1和run_cnt2, 则run_cnt1就会放在0x70001000, run_cnt2放在0x70004000。

#pragma  section farbss "user_test_bss"
 
volatileuint32 run_cnt1;
 
#pragma  section farbss restore
 
  
 
#pragma  section fardata "user_test_data"
 
volatileuint32 run_cnt2 =  0x1234;
 
#pragma section fardata restore

3.2 Bootloader 及几种OTA实现方案

3.2.1 关于Bootloader

在汽车电子,现在bootloader基本已成汽车ECU必备,其负责应用程序的启动和通过CAN总线来更新应用程序和数据等。

BootLoader就是ECU启动时候运行的一段小程序,这段程序负责ECU固件的更新,也就是ECU选择性的自己给自己下程序。如果BootLoader更新完程序后,跳转到新程序运行;不更新的话,BootLoader直接跳转到原来的程序去运行。BootLoader更新完程序后并不擦除自己,下次启动后依然先运行BootLoader程序,BootLoader就是用来管理单片机程序的更新。

一般而言,BootLoader通过CAN总线来更新应用程序,有些也会通过LIN或者UART来更新程序,不管通过何种方式,都可以基于ISO14229来实现,也就是说ISO14229 UDS协议算是一种上层应用协议,可以用在多种通讯总线之上,二ISO15765是基于CAN总线的UDS协议服务,其定义了如何通过CAN总线来传输大数据。

3.2.2 HIS及Bootloader升级过程

HIS是一个很成熟的BootLoader规范,其基于AUTOSAR,对一个BootLoader该有的元素都做了很详细的定义。

  1. Session Control (会话控制 0x10)

    三个会话层

    默认会话层(Default Session)
    编程会话层(Programing Session)
    拓展会话层(Extended Session)

    编程会话层是BootLoader主要实现的一个会话层,在该会话层下要实现一系列的诊断服务,从而形成一个为升级应用程序提供服务的服务层,PC或者手持客户机即可通过合法访问该会话层下的服务来实现应用程序的更新。
    在这里插入图片描述

  2. Security Access(安全访问 0x27)

    对于BootLoader安全访问是必须的,从而保证应用程序不被非法客户机给破坏,安全访问一般分为两步:

    客户机向服务器请求种子,并解析种子算出钥匙
    客户机向服务器发送钥匙,服务器核对钥匙

    不同的服务需要不同的安全等级来访问,默认服务器的安全等级为0不需要解锁,可以随意访问

  3. Routine Control(过程控制 0x31)

    在bootloader里过程控制31服务一般用于应用程序和非易失性数据NVM存储中的擦除操作,内存标识:0xff - Flash,0xFE-EEPROM

  4. Request Download(请求下载 0x34)

    客户端请求从客户端到服务器的数据传输。服务器收到 requestDownload 请求消息后,服务器应在发送肯定响应消息之前采取所有必要的措施来接收数据

  5. Request Upload(请求上载 0x35)

    客户端请求从服务器到客户端的数据传输。服务器收到 requestUpload 请求消息后,服务器应采取所有必要的措施在发送肯定响应消息之前发送数据。

  6. Transfer Data(传输数据 0x36)

    客户端将数据传输到服务器(下载)或从服务器请求数据(上传)。数据传输方向由前面的 RequestDownload 或 RequestUpload 服务定义。 如果客户端启动了 RequestDownload,则要下载的数据将包含在 TransferData 请求消息中的参数 transferRequestParameter 中。 如果客户端启动了 RequestUpload,则要上载的数据将包含在 TransferData 响应消息中的参数 transferResponseParameter中。

  7. Request Transfer EXIT(请求传输结束 0x37)

    客户端请求终止数据传输。

  8. Ecu Reset(ECU复位 0x11)

    ECU复位

    BootLoader升级过程如下图:
    在这里插入图片描述

3.2.3 Bootloader的升级设计方案

1. SB(start bootloader)更新CB(custom bootloader)

有的软件架构是两级boot:SB + CB,Start Boot 只检查CPU最小系统,与具体项目的外围电路无关,独立于客户需求,由供应商自行维护。因为程序启动顺序是SB->CB->APP,这样在SB里增加刷新逻辑可以更新CB,通常情况下运行CB更新APP程序,特殊情况下程序启动后一直停留在SB里更新CB。

在这里插入图片描述
优点

  • 逻辑机构清晰,软件分工明确
  • 操作简单

缺点

  • 需要flash空间大,资源浪费
  • 三级启动,机构复杂,开发和维护成本高
  • 无法更新SB

2.RAM+Flash Reboot更新

不存在SB情况下,程序启动顺序是CB→APP。需要刷新boot时,首先把Reboot程序下载到不用的RAM里,然后在RAM环境下运行Reboot 下载新的CB

在这里插入图片描述

优点

  • 不需要额外的flash空间,只需要少量的RAM
  • RAM擦写速度快,则下载Reboot速度也会很快

缺点:万一中途掉电,则机器变砖

3.RAM+RAM Reboot更新

首先把Reboot + New CB 一起下载到RAM里,然后运行Reboot 擦除CB Flash区域,将RAM中New CB复制到CB Flash区域。最后,重新上电复位,RAM中的Reboott和New CB自动丢失,程序重新开始运行。

在这里插入图片描述
优点

  • 比方案二少了一步下载
  • 相比方案二CB更新全部在CPU内部执行,不受外部干扰,耗时更短

4. 借助APP程序Flash空间

刷新分三步:首先运行CB,擦除App,把Reboot下载到App区域。再运行Reboot擦除旧CB,输入新CB。运行CB刷回App
在这里插入图片描述
优点

  • 不需要额外的Flash和RAM资源
  • 稳定可靠,通过优化设计,可以保证任何一个步骤断电,上电后都能继续操作,不会刷死
  • 对CB稍做修改就能称为Reboot程序,开发快

缺点

  • 步骤多,不熟悉的操作者不易操作
  • 整体刷新时间长,两次boot+ 一次APP

5.借助额外的flash空间

相比方案四需要一块和CB一样大小的额外flash空间,刷新分三步:运行CB,刷入Reboot到额外flash,再运行Reboot,更新CB,最后,运行新的CB,擦除Reboot

在这里插入图片描述

优点:相比方案四,不需要破坏和恢复APP程序,更节省时间

缺点:相比方案四,需要更多的flash空间,且必须是独立的block

3.2.4 OTA设计方案

全量升级

完整的下载新版本固件,下载完成后将固件搬运到APP程序运行的位置。(一般来说是将APP从片外flash搬运到片内flash上)。搬运完成后校验通过后重启APP。
在这里插入图片描述

差分升级

利用算法,做出原版APP和新版APP程序的差分包,将差分包下载到flash,内部的BootLoader程序在利用算法将新版APP合成,合成后在搬运,搬运后校验,重启。
在这里插入图片描述

原地升级

相比差分升级,合包的过程,直接搬运。
在这里插入图片描述

AB面升级

在这里插入图片描述

优点缺点
差分升级1.差分包小(5%),下载更快,节省OTA流程的时间1.一个差分包只能由特定的原包升级到特定的新包 2.保证基础包的一致性。若原包数据损毁,得到差分包也无法升级
全量升级1.拿到新的包就能升级。不需要指定原包。2.不需保证基础包的一致性。全量包的size更大,下载相比差分包需要更长时间。
原地升级1.最节省flash空间的方式,不需要合包存储,直接根据差分包搬运到APP的位置容错率低,若搬运过程中断电,则设备变砖
AB面升级1.容错率高,更能避免固件升级出错 2.OTA过程中不影响用户APP程序的运行 3.下载完成后不需要搬运,不需要差分包还原需要最多的flash空间的OTA方式

对于A/B面升级,有三种实现方案:

  1. 基于硬件辅助的A/B交换方案。该方案要求ECU内存足够,而且支持地址重映射,也就是当新版本软件刷写完成,通过更新映射地址来激活新版本软件,即新版本软件运行的入出地址不变。
    在这里插入图片描述

  2. A/B交换方法与第1类的差别在于ECU硬件不支持地址重映射,激活新版本软件的入出地址变化。
    在这里插入图片描述

  3. 基于外扩内存的A/B交换方案,该方案是需要额外的外扩内存,备份当前版本软件和旧版本软件,新版本软件会先刷写原先的旧版本软件空间,然后擦除ECU内存的当前版本软件,刷写新版本软件,完成激活。
    在这里插入图片描述

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

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

相关文章

美腾科技科创板上市:预计年营收4.7亿到5.7亿 市值44亿

雷递网 雷建平 12月9日天津美腾科技股份有限公司(简称:“美腾科技”,股票代码为:“688420”)今日在科创板上市。美腾科技此次发行2211万股,发行价为48.96元,募资总额为10.83亿元。美腾科技开盘价…

Leetcode 1691. 堆叠长方体的最大高度 [Java/C++] 排序+动态规划(附详细证明过程)

给你 n 个长方体 cuboids &#xff0c;其中第 i 个长方体的长宽高表示为 cuboids[i] [widthi, lengthi, heighti]&#xff08;下标从 0 开始&#xff09;。请你从 cuboids 选出一个 子集 &#xff0c;并将它们堆叠起来。如果 widthi < widthj 且 lengthi < lengthj 且 h…

计算机网络(自顶向下)—第八章习题

在下面的空格中填入“谁的什么密钥”&#xff1a; &#xff08;1&#xff09; A 向 B 发送一个一次性会话密钥&#xff0c;A 用B的公钥加密该会话密钥。 &#xff08;2&#xff09; Certifier.com 用Certifier.com的私钥 为 foo.com 签发公钥证书。 &#xff08;3&#xff…

红队隧道应用篇之Neo-reGeorg实现内网穿透(四)

简介 reGeorg是一个能够实现内网穿透的工具&#xff0c;基于socks5协议&#xff0c;且能支持众多脚本 由于此工具使用率过高&#xff0c;导致容易被杀毒软件拦截, 现有一个项目是由reGeorg修改而来, 而且做了加密和免杀处理, 这款工具的名字就叫Neo-reGeorg Neo-reGeorg下载…

Python+Selenium+Unittest 之selenium1--环境搭建

对于学习一个新东西来说&#xff0c;最开始就是要搭建环境了&#xff0c;关于python的环境搭建这里就不说了&#xff0c;主要说下selenium的环境搭建相关内容和安装过程中可能遇到的坑&#xff0c;细节不太一致的可以自行百度解决下&#xff0c;本章所使用的版本为python3.9sel…

Xcode安装特定版本系统的模拟器(不支持断点下载所以总是下载失败)

Xcode里下载太慢就算了&#xff0c;他不支持断点下载&#xff0c;一直一直一直下载失败&#xff0c;根本就装不上嘛&#xff01;&#xff01;&#xff01; 添加模拟器、下载需要的iOS版本 添加模拟器 没有要的iOS版本则点击Download more 然而因为Xcode不支持断点下载&…

【C语言】内存操作函数

目录 一、memcpy函数 1、memcpy函数的用途 2、memcpy函数的使用 3、memcpy函数的模拟实现 二、memmove函数 1、memmove函数的用途 2、memmove函数的使用 3、memmove函数的模拟实现 三、memset函数 1、memset函数的用途 2、memset函数的使用 3、memset函数的模拟实现 四、memcmp…

React 入门:实战案例 TodoList 修改 Todo Item的状态

文章目录目标实现效果实现思路实现步骤第一步&#xff1a;定义更改 Todo 状态的方法&#xff0c;以供调用第二步&#xff1a;App 组件传递更改 Todo 状态的方法给子组件 List第三步&#xff1a;List 组件传递更改 Todo 状态的方法给子组件 Item第四步&#xff1a;Item 调用更改…

Spring 6.0 正式发布,一文了解新特性

正式发布 Spring Framework 6.0 首个 RC 版本正式发布&#xff0c;可以开始使用了。 新特性 我们一起来看看这次6.0版本带来了哪些特性&#xff1f;需要注意的是该版本整个框架代码库现在基于 Java 17 源代码级别&#xff0c;所以如果你想使用需要升级版本到 JDK 17 才可以&a…

什么是FPGA fpga的核心作用

fpga名词解释&#xff1a;FPGA是英文Field Programmable Gate Array的缩写&#xff0c;即现场可编程门阵列&#xff0c;它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。 fpga核心做用&#xff1a;它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的&#…

【吴恩达机器学习笔记】十七、总结

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为学习吴恩达机器学习视频的同学提供的随堂笔记。 &#x1f4da;专栏简介&#xff1a;在这个专栏&#xff0c;我将整理吴恩达机器学习视频的所有内容的笔记&…

计算机毕业设计springboot+vue基本医院公众号建设推动医疗卫生服务现状研究

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,医院公众号建设推动医疗卫生服务就是信息时代变革中的产物之一。 任…

从零开始学Java之eclipse的安装配置与使用,看这篇就够了

前言 在上一篇文章中&#xff0c;壹哥给大家介绍了Notepad这个更高级点的记事本&#xff0c;它进行Java开发相比windows自带的记事本要更方便一些。但是即便如此&#xff0c;用这种记事本进行Java开发效率依然很低。如果是少量的代码编写还好说&#xff0c;大量代码的开发&…

计算机毕业设计springboot+vue基本微信小程序的电子书阅读器小程序

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,电子书阅读器小程序就是信息时代变革中的产物之一。 任何系统都要遵循…

【云原生】Kubernetes(k8s)Istio Gateway 介绍与实战操作

文章目录一、概述二、Istio 架构三、通过 istioctl 部署 Istio1&#xff09;安装istioctl 工具2&#xff09;通过istioctl安装istio3&#xff09;检查四、Istio Gateway五、Istio VirtualService 虚拟服务六、示例演示&#xff08;bookinfo&#xff09;1&#xff09;安装bookin…

MATLAB | 一起来感受数学之美,第一届迷你黑客大赛回顾

Hey真的是好久不见&#xff0c;最近确实是比较忙更新频率也下来了&#xff0c;过段时间应该能恢复正常更新速度&#xff0c;之前给大家解说过今年举办的math is beautiful迷你黑客大赛&#xff0c;但这其实是第二届大赛&#xff0c;本期推送带大家回顾一下第一期大赛&#xff0…

为什么索引可以让查询变快?终于有人说清楚了!

概述 人类存储信息的发展历程大致经历如下&#xff1a; 由于是个人凭着自己理解总结的&#xff0c;因此可能不一定精确&#xff0c;但是毋庸置疑的是&#xff0c;在当代&#xff0c;各大公司机构部门的数据都是维护在数据库当中的。 数据库作为数据存储介质发展的最新产物&am…

大数据面试之MapReduce常见题目

大数据面试之MapReduce常见题目 MapReduce中Shuffle过程及优化 1.1 Shuffle的详细图解 1.2 Shuffle的详细文字过程 Shuffle文字部分描述&#xff1a; ​ Shuffle横跨Map和Reduce阶段&#xff0c;是指map()方法之后&#xff0c;reduce()方法之前&#xff0c;中间这段汇洗的过…

Web前端大作业制作个人网页(html+css+javascript)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

功能强大UI美观的视频答题猜歌闯关娱乐微信小程序源码下载

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 这是一款拥有后端的闯关娱乐小程序 支持个人小程序和企业小程序上线运营 功能强大齐全,带数据本地化 (数据在自己服务器自己管理无需担心第三方失效的问题) 支持看视频答题闯关 支持…