汽车OTA--Flash RWW属性为什么这么重要

news2024/11/23 12:24:33

目录

1. OTA与RWW

1.1 FOTA需求解读

1.2 什么是RWW

2.主流OTA方案

2.1 单Bank升级

2.2 基于硬件A\B SWAP的FOTA方案

2.3 基于软件实现的FOTA方案

3.小结


1. OTA与RWW

1.1 FOTA需求解读

CP AUTOSAR R19-11首次提出了FOTA的概念,针对FOTA Target ECU提出了多条需求:

  • FOTA Target ECU shall be capable to install, i.e. receive and store, a new SW image while the current image on the ECU is executed in its normal operating mode.
  •  An ongoing installation shall not disturb or reduce the functional scope of the
    respective FOTA Target ECU.

目的是为了缩短因为软件升级导致的汽车停机时间,文档里甚至要求汽车行驶过程中仍可以进行新程序的升级(但必须在汽车安全状态下进行激活),且在新程序升级时不能影响绝大部分汽车功能;

  • FOTA Target ECUs shall be capable to internally recover the SW image, being
    active before last (FOTA) activation. This may happen on a trigger by the FOTA
    Master instance.
  • FOTA Target ECU shall accept activation of new software in vehicle safe-state
    only.

为防止升级失败,必须有一个回滚机制能够保证汽车回到之前状态;升级成功后,必须让汽车在安全状态下才能激活新的软件进行运行,根据ECU在整车系统中的不同功能,这个安全状态根据OEM来定义。

可以看到,随着软件定义汽车的风越吹越大,升级整车系统以保持最新功能的需求也不断增加;以往在4S店线下召回升级软件的方式日渐落后,借助各种无线通信技术对整车进行升级的方式变成了当前乃至未来的趋势。

1.2 什么是RWW

在上述需求里,我们发现FOTA以以往线下召回最明显的区别在于无感:即ECU运行代码时仍可以实现对新软件的接收和存储。

所以这就对车控类ECU的主控芯片MCU提出了一个非常关键的需求:CPU在Flash取指运行时,可同时对另一区域的Flash进行擦除和编程以存放新软件。这就是Flash在分区上的RWW(Read While Write)特性;Read分区存放当前运行的软件,Write分区存放新的软件。

该特性是基于存储器哈佛结构诞生也发展出来,哈佛结构将系统存储分为程序存储器(Program Memory)和数据存储器(Data Memory),每个存取器有自己独立的总线,如下图:

这样我们就实现了CPU从Program Memory中读取指令的同时,对Data Memory进行读取或写入;但是缺点在于如果Program Memory中代码需要更新,CPU这时候就只能Halt,因为Program Memory Bus正在写入数据代码到Program Memory中,它很忙。

如何优化呢?我们按照总线这个思路,把Program Memory分成多个Bank(Block、Section都行),并拓展总线,这就能实现在当前Bank运行,同时刷写代码到另外一个Bank。如下图所示:

这个属性天然对OTA非常友好,CPU运行A Bank上的程序,A Bank上的程序提供刷写B Bank的驱动;刷写完成后切换Bank,CPU到B Bank取指运行。

所以,我们可以看到主流车规MCU里基本都支持RWW属性,例如:

  •  NXP S32K344支持最高4MB PFlash(Block size = 1MB),OTA时分为2x2MB,RWW属性在Active block和passive block之间实现;
  • 英飞凌TC37x支持最高6MB(2x3) PFlash,OTA是分为2x3,RWW属性在Active Bank与Inactive Bank里实现;
  • 意法半导体SPC58NH92,支持最高8个RWW Partitions,OTA可采用RWW P4\6和RWW P5\7互换

2.主流OTA方案

2.1 单Bank升级

这里我们首先回顾以前MCU资源不足,无法考虑A\B升级的方案,如下:

MCU启动后首先运行Bootloader,判断是否有升级请求,如没有则跳转至App运行;假设我们在App里收到升级请求了,立马设置升级请求标志位,并复位系统进入Bootloader;检查到请求Flag后,Bootloader将通信\flash驱动拷贝至RAM或者DFlash,然后开始进行升级流程,如下图:

很明显,这种升级方式不能提供回滚机制、也不能实现零停机升级,是不能满足如今FOTA需求。

在1.2节里,我们明显观察到RWW属性是和OTA强相关的,因此上述MCU也支持硬件OTA机制;这也为我们设计OTA方案提供了便利。

目前主流的OTA方案可以分为基于硬件特性的FOTA方案和软件实现方案。

2.2 基于硬件A\B SWAP的FOTA方案

以英飞凌TC37x为例,它有两个地址映射模式: standard address map和alternate address map,其物理bank和逻辑地址映射关系如下:

而我们在上面提到使用硬件SWAP机制的好处就是只用维护一个工程以及对应链接脚本,因此从逻辑上讲,我们应该就使用standard address map的地址来设计链接文件并编译工程,整体逻辑如下:

从CPU的视角来看,它始终使用逻辑地址0x80000000(举例)来取指,而芯片硬件根据不同地址映射模式来给物理Bank0、1分配逻辑地址,例如0xAA模式下,分配0x80000000给到PFlash1,这样就能保证运行的是更新后的代码。 

2.3 基于软件实现的FOTA方案

即使硬件没有地址映射SWAP的功能,从软件角度也是可以实现上述功能,但前提是Flash的分区要支持RWW;

在软件实现角度里,由于逻辑地址和物理bank是一一对应的,要实现A\B SWAP,就必须维护两个工程,一个工程链接文件锚定Bank A,一个工程链接文件锚定Bank B,有BootManager根据需要选择运行A还是运行B,理论如下:

虽然这个实现了A\B 升级,但是从逻辑上将随着升级次数的增多,对于软件版本的维护和工程的维护是需要审慎进行的。

所以,Flash的RWW对于OTA来说是一个必选项,但是硬件地址映射模式的切换有最好,没有也能做。

3.小结

以上,我们分析了Flash RWW属性,目前汽车车控类MCU的主流OTA方案;对于具备自更新能力的控制器,例如座舱域控制器SOC端、智驾域SOC端、中央网关等等,还没有具体研究过,后面接触了再分享给大家。

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

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

相关文章

适耳贴合的气传导耳机,带来智能生活体验,塞那Z50耳夹耳机上手

现在大家几乎每天都会用到各种AI产品,蓝牙耳机也是我们必不可少的装备,最近我发现一款很好用的分体式气传导蓝牙耳机,它还带有一个具备AI功能的APP端,大大方便了我们日常的使用。这款sanag塞那Z50耳夹耳机我用过一段时间以后&…

以太坊==使用IDE remix.ethereum搭配metamask发布合约到测试网

IDE地址 Remix - Ethereum IDE 编写代码 部署,选择metamask 查看 部署成功后,可以看到详情地址,查看详情,所以发布合约就是一个TX https://sepolia.etherscan.io/tx/0xe62a0b03ec9f55702cd06f36447fd3c50450a948d59d03c381d97…

postman测试接口使用

背景: 隔了一段时间没有用postman,有些忘记了,谨以此文来记录postman的使用,如有忘记就可以快速回忆 使用: 点击这个号,是创建接口页面 这里的复选框可供我们选择接口的rest方式 请求路径: …

Google trend搜索关键词

Google trend地址:https://trends.google.com/trends/?geoUS&hlzh-CN 1、具体的操作步骤如下: 2、Google trend搜索页面如下:

【金】?Y? python网页前端streamlit

1、如何从 Google Colab Notebook 启动 streamit参考-How to Launch Streamlit App from Google Colab Notebook !streamlit run web.py & npx localtunnel --port 8501 & curl ipv4.icanhazip.com

spire.Pdf 将pdf转成image

一、nuget安装 <ItemGroup><PackageReference Include"Spire.PDF" Version"10.6.7" /></ItemGroup> 二、直接上代码 using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.IO;namespace …

1962springboot VUE社区服务平台系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE社区服务平台系统是一套完善的完整信息管理类型系统&#xff0c;结合springboot框架和VUE完成本系统&#xff0c;对理解vue java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和…

微型操作系统内核源码详解系列五(四):cm3下svc启动任务

系列一&#xff1a;微型操作系统内核源码详解系列一&#xff1a;rtos内核源码概论篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列二&#xff1a;微型操作系统内核源码详解系列二&#xff1a;数据结构和对象篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列…

ctfshow 2023 愚人杯 web

easy_signin 观察url&#xff0c;发现base64 &#xff0c;进行解码&#xff0c;原来可以访问文件路径&#xff0c;那我们访问一下index.php ?imgaW5kZXgucGhw查看源代码发现还是base64 解码得到flag 被遗忘的反序列化 <?php# 当前目录中有一个txt文件哦 error_reporti…

SpringBoot测试实践

测试按照粒度可分为3层&#xff1a; 单元测试&#xff1a;单元测试&#xff08;Unit Testing&#xff09;又称为模块测试 &#xff0c;是针对程序模块&#xff08;软件设计的最小单位&#xff09;来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中…

SQlyog连接到主机时报错:错误号码2058Plugin sha256 password could not be loaded

1.问题重述 MySQL版本&#xff1a;8.4.0 SQlyog连接到主机时报错&#xff1a;错误号码2058Plugin sha256 password could not be loaded&#xff0c;如下图 经过查阅资料得知出现这个问题是因为 mysl8之前的加密规则是 mysql_native_password &#xff0c;而在mysql8之后&…

Python神经影像数据的处理和分析库之nipy使用详解

概要 神经影像学(Neuroimaging)是神经科学中一个重要的分支,主要研究通过影像技术获取和分析大脑结构和功能的信息。nipy(Neuroimaging in Python)是一个强大的 Python 库,专门用于神经影像数据的处理和分析。nipy 提供了一系列工具和方法,帮助研究人员高效地处理神经影…

Flutter学习:从搭建环境到运行

一、开发环境的搭建 本文所示内容都是在Windows系统下进行的。 1、下载 Flutter SDK Flutter 官网&#xff08;https://docs.flutter.cn/release/archive?tabwindows&#xff09; 或者通过 git clone -b master https://github.com/flutter/flutter.git 下载 2、配置环境…

【Redis】内存回收和内存淘汰机制

1 概念 Redis 所有的数据都是存储在内存中的, 如果不进行任何的内存回收, 那么很容易出现内存爆满的情况。因此&#xff0c;在某些情况下需要对占用的内存空间进行释放。 Redis 中内存的释放主要分为两类 Redis 中内存的释放主要分为两类: 内存回收: 将过期的 key 清除&#…

Vue77-编程式路由

一、需求 不写<router-link>实行路由的跳转。 因为<router-link>的本质是<a>&#xff0c;但是&#xff0c;有时&#xff0c;导航不一定是a标签&#xff01;或者&#xff0c;有时需要等一段时间&#xff0c;页面才跳转。 二、代码实现 三、小结

ciscn_2019_n_1

前戏--------checksec,运行查看 进入就可以发现这段代码 很浅显易懂 我们要得到的后面是 这里 我们要利用的漏洞是 get函数 0x30大小 加上8 exp: from pwn import * ghust remote("node5.buuoj.cn",28777) addr 0x4006BE payload bA * 0x30 bB*0x8 p64(addr…

上手微服务框架go-zero

文章目录 微服务框架与web框架的区别点在哪儿&#xff1f;为什么还要有微服务框架微服务框架与web框架的对比小结 为什么选go-zero&#xff1f;框架对比 下载并认识go-zero认识go-zero环境要求组成下载 实践go-zero基础功能案例apirpc服务功能说明准备构建rpc服务构建api服务服…

YIA主题侧边栏如何添加3D旋转标签云?

WordPress站点侧边栏默认的标签云排版很一般&#xff0c;而3D旋转标签云就比较酷炫了。下面boke112百科就以YIA主题为例&#xff0c;跟大家说一说如何将默认的标签云修改成3D旋转标签云&#xff0c;具体步骤如下&#xff1a; 1、点此下载3d标签云文件&#xff08;密码&#xf…

经典机器学习方法(7)—— 卷积神经网络CNN

参考&#xff1a;《动手学深度学习》第六章 卷积神经网络&#xff08;convolutional neural network&#xff0c;CNN&#xff09;是一类针对图像数据设计的神经网络&#xff0c;它充分利用了图像数据的特点&#xff0c;具有适合图像特征提取的归纳偏置&#xff0c;因而在图像相…

Unity核心

回顾 Unity核心学习的主要内容 项目展示 基础知识 认识模型制作流程 2D相关 图片导入设置相关 图片导入概述 参数设置——纹理类型 参数设置——纹理形状 参数设置——高级设置 参数设置——平铺拉伸 参数设置——平台设置&#xff08;非常重要&#xff09; Sprite Sprite Edit…