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

目录

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.xdnf.cn/news/146605.html

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

相关文章

初写MySQL四张表:(4/4)

进度条很喜人,你是否已经修炼到这一步了呢? 初写MySQL四张表:(1/4)-CSDN博客 初写MySQL四张表:(2/4)_数据库表样例-CSDN博客 初写MySQL四张表:(3/4)-CSDN博客 若现在你已经有了前面的基础,那就正式开始吧。 四张表: 这次在实现…

不同编程语言的互相调用

C语言与Python 步骤&#xff1a; 编写C代码 (hello_c.c): #include <stdio.h>void printHello(const char *name) {printf("Hello, %s!\n", name); }编译C代码为共享库: gcc -shared -o hello_c.so hello_c.c编写Python代码 (hello_c_py.py): import ctypes# …

CocosCreator 3.x 实现角色移动与加载时动态屏幕边缘检测

效果 思路 通过cc.view全局单例 View 对象获取屏幕尺寸加载时根据屏幕尺寸动态计算上下左右边缘 代码实现 import { _decorator, Component, EventTouch, Input, input, Node, view } from cc; const { ccclass, property } _decorator;/*** 玩家控制脚本*/ ccclass(Player…

探索AI编程新时代:GitHub Copilot如何重塑开发者工作效率

在当今技术瞬息万变的时代&#xff0c;软件开发者们每天都在努力寻找更高效的编程方法。面对繁忙的工作日程和不断增加的项目压力&#xff0c;如何在编码过程中大幅提升效率成为了一个备受关注的话题。在众多工具中&#xff0c;GitHub Copilot以其强大的AI驱动能力脱颖而出&…

二叉树的层序遍历(含八道leetcode相关题目)

文章目录 二叉树层序遍历模板102. 二叉树的层序遍历107. 二叉树的层序遍历 II199. 二叉树的右视图637. 二叉树的层平均值515. 在每个树行中找最大值429. N 叉树的层序遍历116. 填充每个节点的下一个右侧节点指针117. 填充每个节点的下一个右侧节点指针 II 二叉树层序遍历模板 …

基于Java springboot+mybatis 网上商城系统

基于Java springbootmybatis 网上商城系统 一、系统介绍二、功能展示1.主页(客户)2.登陆&#xff08;客户&#xff09;3.注册&#xff08;客户&#xff09;4.购物车(客户)5.我的订单&#xff08;客户&#xff09;6.用户管理&#xff08;管理员&#xff09;7.分类管理&#xff0…

Cisco 基础网络汇总

⭕个人主页 可惜已不在 ⭕可以分享给身边有需要的人 ⭕有用的话就留下一个三连吧 目录 前言: 一.网络及网络设备认识 二. 二层网络 三. 生成树、端口 四. 三层网络 五.访问控制 六.NAT 七.DHCP 八.PPP 九.帧中继 十.热备份 十一.综合实验 十二.WLAN 十三.Cisco P…

华为全联接大会HUAWEI Connect 2024印象(一):OpenEuler

因为和华为有课程合作&#xff0c;此次应邀参加了华为全联接大会 &#xff08;HUAWEI Connect 2024&#xff09;&#xff0c;分几次分享一下自己的见闻。 HUAWEI Connect 2024的规模很大&#xff0c;不过主要面向的应该是企业市场&#xff0c;我比较关注的嵌入式系统的内容很少…

OpenAI o1-preview和o1-mini现已在 GitHub Copilot和GitHub Models中提供

微软 GitHub 今天宣布在 GitHub Copilot和 Models 中提供两个新的 Open AI 模型&#xff1a;o1-preview 和 o1-mini。OpenAI 推出了新的 o1 系列 人工智能模型&#xff0c;旨在花更多时间思考后再做出反应。与以前的 OpenAI 模型相比&#xff0c;这些模型能在科学、编码和数学领…

C++速通LeetCode中等第18题-删除链表的倒数第N个结点(最简单含注释)

绝妙&#xff01;快慢指针法,快指针先走n步&#xff08;复杂度O(n),O(1))&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(n…

使命召唤游戏助手系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;玩家管理&#xff0c;游戏分类管理&#xff0c;道具种类管理&#xff0c;游戏道具处管理&#xff0c;战绩信息管理&#xff0c;水平评估管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统…

Spring源码-从源码层面讲解声明式事务的运行流程

TxTest开始执行事务方法: public class TxTest {public static void main(String[] args) throws SQLException {System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY,"d:\\code");ApplicationContext context new ClassPathXmlApplicationContext(&…

如何将生物序列tokenization为token?

原理讲解 tokenization是自然语言处理领域非常成熟的一项技术&#xff0c;tokenization就是把我们研究的语言转换成计算机能够识别的数字——token。 在生物领域&#xff0c;如何把核苷酸或氨基酸序列tokenization成token呢&#xff1f; 我们可以使用k-mer技术&#xff1a; k-m…

基于 Qwen2-1.5B Lora 微调训练医疗问答任务

一、Qwen2 Lora 微调 Qwen是阿里巴巴集团Qwen团队研发的大语言模型和大型多模态模型系列。Qwen2 是 Qwen1.5 的重大升级。无论是语言模型还是多模态模型&#xff0c;均在大规模多语言和多模态数据上进行预训练&#xff0c;并通过高质量数据进行后期微调以贴近人类偏好。Qwen具…

DELPHI编译软件时带上当前IDE的版本号

如果通过 CompilerVersion 得到的也只是编译器的版本号。 比如&#xff1a;delphi XE12 是 36 &#xff0c;也仅此而己。 我想得到的是IDE的版本号&#xff0c;比如当前最新版本的DELPHI是&#xff1a;Embarcadero RAD Studio 12 Version 29.0.53571.9782 我想得到 29.0.53…

【JAVA开源】基于Vue和SpringBoot的网上超市系统

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

16【Protues51单片机仿真】智能洗衣机倒计时系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 用直流电机转动模拟洗衣机。要求 有弱洗、普通洗、强洗三种模式&#xff0c;可通过按键选择。可以设置洗衣时长&#xff0c;通关按键选择15、30、45、60、90分钟。时间到蜂鸣器报警提示。LCD 显示…

Webui 显卡有显存,会报错:CUDA out of memory

Webui 显卡明明有显存&#xff0c;会报错&#xff1a;CUDA out of memory 网上找了很多资料&#xff0c;都没有能解决这个问题 &#xff0c;后来发现和电脑虚拟内存设置有关&#xff0c;这里记录一下具体的解决方法&#xff1a; 什么是 CUDA Out of Memory 错误&#xff1f; …

SAP B1 Web Client MS Teams App集成连载三

过程/Procedure&#xff1a; 1.在应用商店中&#xff0c;点击启动 SAP Business One 应用。应用详细信息页面显示如下。 In the Apps store, click SAP Business One app to launch it. The app details page is displayed as below 2.在左上角&#xff0c;有一个包含两个选项的…

淘宝扭蛋机小程序,扭蛋机文化下的新体验

在数字化时代中&#xff0c;扭蛋机逐渐从传统的线下机器转移到了线上互联网中&#xff0c;市场得到了创新发展。扭蛋机小程序具有便捷、多样化、个性化的特点&#xff0c;迎合了当下消费者的线上消费习惯&#xff0c;又能够让扭蛋机玩家体验到新鲜有趣的扭蛋。 扭蛋机是一种热…