NXP实战笔记(十六):NXP 32K3xx系列单片机有关OTA升级的思考

news2024/11/13 22:23:28

目录

1、概述

2、参考资料

3、思考点1:需不需要传统BootLoader?

3.1、无需传统BootLoader

  3.2、有传统BootLoader

4、OTA升级之后是否立即实施切换

5、兼容编程会话

6、APP内部集成34、36、37服务

7、Flash放置问题


1、概述

        NXP的S32K3系列单片机通过HSE(硬件安全引擎)的ABSWAP功能实现OTA(Over-The-Air)升级,是一种确保固件更新过程安全可靠的方法。

        HSE(硬件安全引擎):HSE是NXP S32K3系列单片机中的一个安全特性,它提供加密、安全启动和密钥存储等安全功能,符合ISO26262标准,达到ASIL D安全等级。HSE支持多种加密算法,包括AES、RSA和ECC,确保数据传输和存储的安全性。此外,HSE还支持无线固件更新(FOTA),允许MCU接收和安装新的固件,而不影响系统的正常运行。

        ABSWAP功能:ABSWAP是HSE提供的固件更新机制之一,它支持双分区功能,允许在不同的闪存区域中存储两个固件版本。这样可以在更新过程中切换到新的固件版本,而不影响当前运行的固件。这对于需要进行无线固件更新(FOTA)的应用来说非常有用。ABSWAP方式支持OTA升级,意味着在更新固件时,单片机可以继续执行其他任务,而不会中断服务。

OTA升级实现过程:

        安装HSE FW:首先需要安装HSE固件(HSE FW),这通常需要使能firmware feature flag,并使用编程器直接烧录加密映像文件或使用特定工具进行安装。

        分区与更新:在安装HSE FW后,系统会将闪存划分为激活区和未激活区。固件更新时,新的固件会被写入未激活区。一旦新固件验证无误,系统会通过ABSWAP机制切换到新的固件分区,使新固件生效,而旧固件则成为未激活区,准备下一次更新。

        安全特性:HSE提供的安全特性确保了整个OTA升级过程的安全性。例如,使用加密算法保护固件传输过程,防止未授权访问和篡改。同时,HSE还支持安全启动,确保系统启动时加载的固件是经过验证的,未被篡改。

正文开始不废话:

        首先没用到安全启动

2、参考资料

        NXP实现OTA升级,简单的一句话,需要进行大量的代码实践及资料查询,资料非常重要,下面看下都用到了哪些资料。

资料

描述

来源

HSE_FW_S32K3xx_0_2_40_0.zip

HSE的固件及API描述文件。

官网下载

an744810+-+HSE+FW+install+for+S32K3xx+(1.0).pdf

HSE的大致描述

官网下载

RM758223-HSE-B+Firmware+Reference+Manual+-+V2.3(2.3)

非常重要的文档

HSE原理、安装、实现细节文档

找官方FAE要,签了NDA协议才会发。

https://community.nxp.com/

NXP技术论坛,实用资料很多

NXP社区网址

SW32K3_OTADEMO_0.8.0

OTA的Demo

官网下载

3、思考点1:需不需要传统BootLoader?

3.1、无需传统BootLoader

        为什么会有这个问题呢?OTA程序本身集成了BootLoader功能,本质上讲APP程序具备了BootLoader的一切功能。再做一个boot是否显得多余了?

没有BootLoader的OTA内存划分如下图。(NXP S32K312为例子)

        首次下载需要将 Active PartitionAPP与Passive Partition APP均下载进去,不然无法切换。一切就死机了。

        思考一下:这个时候是不是需要做个操作,在OTA升级写PFx的时候,写一个OTA有效标志位,当标志位有效才让切,否则不给切,防止死机。

        这个地方需要操作HEX的合并,S32DS编译器可以合并bin文件的,通过链接文件编译之后自动就生成了。

        合并多个bin的方式,S32DS编译器可以实现的,参考HSE的固件安装程序链接文件语法。

TARGET(binary) 
INPUT (C:\NXP\HSE_FW_S32K3XX_0_1_2_1\hse_full_mem\hse\bin\s32k3x2_hse_fw_0.13.0_1.2.1_pb220205.bin.pink)
OUTPUT_FORMAT(default)

    .hse_bin :
    {
        . = ALIGN (0x4);
        __hse_bin_start__ = .;
 C:\NXP\HSE_FW_S32K3XX_0_1_2_1\hse_full_mem\hse\bin\s32k3x2_hse_fw_0.13.0_1.2.1_pb220205.bin.pink (.data)
        . = ALIGN (0x4);
        __hse_bin_end__ = .;
    } > HSE_BINARY    
    
    __HSE_BIN_START = ORIGIN(HSE_BINARY);
    __HSE_BIN_SIZE = __hse_bin_end__ - __hse_bin_start__;

      看上去其实也行,这种方式实现上也行,一种选择吧。个人而言是通过下面这种实现的。

  3.2、有传统BootLoader

        有传统BootLoader内存分配如下

        可以看到,多了传统Boot,多了应用有效标志位,内存划分更细致。

        操作的时候当一个白板控制器拿到手里之后,首先安装HSE(安装之后断电两次间隔2S以上),后面需要将整个PF0与PF1的下图六部分下载到控制器中。

        注意点:(Active Partition BootLoader)、(Active APP Valid Flag)、(Passive Partition BootLoader)、(Passive APP Valid Flag)、(Active Partition BootLoader)、(Passive Partition APP)在合并bin文件的时候不能偷懒,相同内容的bin文件不能省略下面链接文件代码为一个。

TARGET(binary) 
INPUT (xxx.bin)
OUTPUT_FORMAT(default)

        应用有效标志位的bin文件可以通过J-Flash生成,boot与APP的bin文件可以直接通过S32DS生成。

        推荐一种S32DS自带的生成bin方式。

填入的描述语言如下:

arm-none-eabi-objcopy -v -O srec "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.s19";arm-none-eabi-objcopy -v -O ihex "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.hex";arm-none-eabi-objcopy -v -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin"
或着
arm-none-eabi-objcopy -O srec ${ProjName}.elf ${ProjName}.s19;arm-none-eabi-objcopy -O ihex ${ProjName}.elf ${ProjName}.hex;arm-none-eabi-objcopy -O binary ${ProjName}.elf ${ProjName}.bin;

        目前项目实现上还是选择要传统BootLoader了,因为在大部分时候市场调试人员升级直接按照以前的习惯就行,另外在BootLoader里面加入了防刷死机制,即使有什么问题,也可以拯救回来,如何设计防刷死方案,之前的文章中有描述。

4、OTA升级之后是否立即实施切换

        程序的执行一直在PF0里面的,并且通过OTA升级到PF1,什么时候升级呢?时间点在哪里,这更多的是需求问题。

        通过HSE操作可以实现在跑车过程中升级的,但是跑车过程中程序是禁止复位的,复位就是事故了,所以此时激活OTA的过程理论上在安全状态下通过31例程服务会好一些。

        31例程服务也有选择,应不应该在31执行的时候进行复位还是只是执行切换动作,到11服务的时候再进行复位自动切换。

5、兼容编程会话

        存在传统bootLoader的方案里面,本地升级需要用到10 02写重编程标志位,此段数据一般在RAM区域,然后进行复位跳转到Boot进行升级,但是在OTA升级的时候怎么进入编程会话之后不复位进行升级呢?

        第一种方式:通过31服务执行OTA升级请求,此时置位一个OTA升级请求标志位,后面执行10 02的时候判断标志位再看复位不复位。

        第二种方式:10会话控制是可以自定义会话控制模式的,例如常用的10 60 定义为OTA会话,在OTA会话模式下进行OTA升级即可。

6、APP内部集成34、36、37服务

        通过OTA升级的时候,因为有需求在车辆运行过程中进行升级,所以APP内部需要集成34、36、37服务,FF00擦除服务也是需要的,但是擦除服务会占用大量时间,在擦除服务的时候,我是把WDG时间给加大的,再发送78的同时防止复位,这个时候有一个注意点,擦除的地址信息不能包含HSE与SBAF区域否则会擦除失败的。

7、Flash放置问题

        有部分需求将FLASH驱动放置在RAM,其实传统boot里面确实需要,牵涉到PF0操作PF0,但是OTA始终是PF0操作PF1,所以放置到RAM与否自行选择吧,反正我是没放置,运行的嘎嘎六。

           至于需要需要内部集成FLASH驱动这点,其实有的把flash做成二进制文件,升级的时候烧录,有的直接集成到程序本身,安全性考虑吧,看选择。

OTA方面经验不足,个人愚昧的见解,望各位专家多指点,能有幸聆听,不胜荣幸。

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

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

相关文章

江协科技STM32学习- P16 实验-TIM输出比较(PWD驱动LED呼吸灯,舵机,直流电机)

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

Redisson 总结

1. 基础使用 1.1 引入依赖 <dependencies><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId></dependency> </dependencies>包含的依赖如下 1.2 配置文件 其实默认主机就…

掌控历史:如何通过Git版本管理工具提升你的开发效率

先一览全局: git目录 一.打开git二.git bash的基础命令三.配置git四.仓库搭建五.文件操作和状态六.忽略文件七.gitee的使用1.添加公钥2.创建仓库 八.vs中使用git九.git分支常用命令十.文件差异比较十一.文件回溯和推进十二.合并冲突和消除十三.合并/压缩提交十四.远程仓库推拉十…

SkyWalking 环境搭建部署

架构简介 skywalking agent : 和业务系统绑定在一起,负责收集各种监控数据skywalking oapservice : 是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。Skywalking oapserv…

第一个Web项目(java+servlet+jsp)

通过百度网盘分享的文件&#xff1a;第一个Web项目 链接&#xff1a;https://pan.baidu.com/s/11vnAPeAf6Dtax7H6aYKZgA 提取码&#xff1a;1234 目录 声明&#xff1a; 简介&#xff1a; 注意&#xff1a; 操作步骤&#xff1a; 1.在idea中新建java项目&#xff0c;项目…

华为HarmonyOS地图服务 7- 在地图上绘制标记

场景介绍 本章节将向您介绍如何在地图的指定位置添加标记以标识位置、商家、建筑等。 点标记用来在地图上标记任何位置&#xff0c;例如用户位置、车辆位置、店铺位置等一切带有位置属性的事物。Map Kit提供的点标记功能&#xff08;又称 Marker&#xff09;封装了大量的触发…

TMS320F28335的定时器中断实验

TTMS320F28335 的 CPU 定时器有 3 个且均为 32 位,分别是 Timer0、Timer1、Timer2, 其中 Timer2 是为操作系统 DSP/BIOS 保留的,当未移植操作系统时,可用来做普 通的定时器。这三个定时器的中断信号分别为 TINT0,TINT1,TINT2,分别对应中断向量于 INT1,INT13,INT14。 1 …

C++速通LeetCode中等第15题-搜索二维矩阵II(两种方法)

方法一&#xff1a;二分法按行遍历查找&#xff1a; class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {for (const auto& row: matrix) {auto it lower_bound(row.begin(), row.end(), target);if (it ! row.end()…

苹果macOS 15.0 Sequoia正式版发布:iPhone应用镜像玩、手机消息电脑知

9月17日苹果向 Mac 电脑用户推送了 macOS 15 更新&#xff08;内部版本号&#xff1a;24A335&#xff09;&#xff0c;除了引入数个 iOS 18 的新功能外&#xff0c;macOS 15 Sequoia 还带来了全新的 Continuity 功能 ——iPhone 镜像。 iPhone 镜像功能可以让用户直接在 Mac 上…

高密原型验证系统解决方案(上篇)

0 引言 随着当今 SoC 设计规模的快速膨胀&#xff0c;仅仅靠几 颗当代最先进的 FPGA 已经无法满足原型验证的需求。简单的增加系统的容量&#xff0c;会遇到系统时钟复位同 步&#xff0c;设计分割以及高速接口和先进 Memory控制器 IP 验证等多重困难。此时&#xff0c;一个商用…

vscode软件在 C发中常用插件

一. 简介 本文简单介绍一下&#xff0c;当做 C开发时 vscode软件常用的插件。 vscode软件是 微软公司目前提供的一款免费的开发软件&#xff0c;可以通过 vscode官网下载 vscode。 二. vscode软件在 C开发中常用插件 注意&#xff1a;vscode软件安装后&#xff0c;可以直接…

表盘针头位置检测系统源码分享

表盘针头位置检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

JAVA开源项目 房屋租赁系统 计算机毕业设计

本文项目编号 T 041 &#xff0c;文末自助获取源码 \color{red}{T041&#xff0c;文末自助获取源码} T041&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

MySQL深入原理

MySQL深入原理 索引、事务、日志原理、InnoDB引擎、缓存、锁 有4个数据库是属于MySQL自带的系统数据库&#xff1a; ​ mysql MySQL 系统自带的核心数据库&#xff0c;它存储了MySQL的用户账户和权限信息&#xff0c;一些存储过程、事件的定义信息&#xff0c;一些运行过程中…

WebGL系列教程九(动画)

目录 1 前言2 绘制立方体并进行纹理映射3 动画思路4 开始绘制4.1 在顶点着色器中声明旋转矩阵4.2 获取旋转矩阵变量并进行赋值4.3 计算角度4.4 每一帧都去绘制4.5 效果4.6 完整代码 5 总结 1 前言 上一篇我们讲了WebGL中的基础语法&#xff0c;现在我们已经讲过了三维物体的绘制…

14.面试算法-字符串常见算法题(三)

1. 字符串回文问题 1.1 LeetCode.125. 验证回文串 回文问题在链表中是重点&#xff0c;在字符串中同样是个重点。当初我去美团面试第一轮技术面的第一个算法题就是让写判断字符串回文的问题。 这个本身还是比较简单的&#xff0c;只要先转换成字符数组&#xff0c;然后使用双…

PS相关操作记录

1. 磨皮步骤 1.1. 图层操作 先对照片进行去瑕疵、液化等操作&#xff0c;操作完的图层&#xff0c;重命名为液化&#xff0c;方便识别。复制两个图层&#xff0c;分别改为“低频”、“高频”&#xff0c;低频在下&#xff0c;高频在上。选中“低频”图层&#xff0c;滤镜 -&g…

NodeJs文档

文件操作 // 1. 导入fs模块 const fs require(fs)文件写入 //异步写入 // fs.writeFile(文件名&#xff0c; 待写入的数据&#xff0c; 选项设置&#xff08;可选&#xff09;&#xff0c; 回调函数) fs.writeFile(./座右铭.txt, 三人行&#xff0c;必有我师傅, err > {/…

kubernetes应用的包管理Helm工具

目录 一、helm简介 二、部署helm 1、官网与资源 2、部署helm &#xff08;1&#xff09;安装helm &#xff08;2&#xff09;配置helm命令补齐 三、helm常用操作 &#xff08;1&#xff09;查询官方应用中心 &#xff08;2&#xff09;管理第三方repo源 &#xff08;…

AI周报(9.15-9.21)

AI应用-宇宙建筑师&#xff1a;AI探索宇宙结构 近日&#xff0c;来自马克斯普朗克研究所等机构&#xff0c;利用宇宙学和红移依赖性对宇宙结构形成进行了场级仿真。 AI版“宇宙闪电侠”&#xff1a;若以传统宇宙模拟的缓慢行进比作悠然自得的蜗牛&#xff0c;那么AI便宛如宇宙…