NXP实战笔记(十四):32K3xx基于RTD-SDK在S32DS实现HSE的安装。

目录

1、概述

1.1、什么是HSE?

1.2、如何实现HSE的OTA功能

1.3、S32K3放置HSE的地址

2、通过调试器安装HSE

3、通过IVT方式安装HSE

4、坑点慎重踩

4.1、优化等级

4.2、Flash放RAM

4.3、C40_Ip配置更改

4.4、程序烧录

5、测试结果

6、代码链接


1、概述

        首先需要明确一个问题:HSE的安装是一个独立的工程,在实际产品应用的时候有三个二进制文件需要烧录。

        1、HSE安装二进制位文件(首次烧录需要断电上电两次)

        2、BootLoader文件(升级用,可以直接覆盖掉HSE安装文件)

        3、APP文件,量产使用

        基于项目需要使用HSE的AB分区功能实现OTA,HSE在NXP的S32K3芯片上如何实现安装确实是一个比较头疼的问题,官方推荐两种安装方式,第一种为通过调试器安装,通过调试器复位两次安装。第二种是脱机运行,也就是下载HEX到MCU里面实现断电上电两次安装。在实际生产的时候第一种不是特别适用,毕竟不会有软件工程师一个一个的去给板子安装,最好通过烧录工装实现流水线烧录,所以第二种当时显得优点尤为突出,下面在第二章节开始详细介绍一下如何通过这两种方式安装。

1.1、什么是HSE?

参考博文:

HSE简介icon-default.png?t=N7T8https://blog.csdn.net/weixin_43580890/article/details/139329518

1.2、如何实现HSE的OTA功能

        大前提:安装HSE需要重启两次,时间间隔稍微留一些,安装上毕竟也需要时间的。

        在使用OTA功能之前,应启用OTA功能。功能标志存储在UTEST中,并且只能编程一次。启用地址:0x1B00 0280值(8字节):0xAA, 0xBB, 0xCC, 0xDD,0xDD, 0xCC, 0xBB, 0xAA安装AB_SWAP FW后,HSE将书写该标志。

        有两个选项可以启用AB_SWAP特性

        在SBAF安装HSE固件时安装AB_SWAP固件映像。如果加密映像中的第一个字节是0xDB,则表示HSE固件的加密映像用于AB_SWAP配置。SBAF将在块1区域的末尾安装HSE固件,以启用SOC中的OTA功能。这是一个不可逆的过程,一旦设备处于OTA启用配置,就无法恢复到OTA禁用配置

        通过向HSE固件提供固件更新服务,用AB_SWAP固件映像更新OTA禁用固件。HSE固件的新加密映像必须为AB_SWAP配置,即加密映像的第一个字节的值必须为0xDB。

        通过第二种方式安装的时候有一个非常需要注意的点:应用程序必须确保有效的应用程序与IVT一起出现在块0和块1中,以便重置后,应用程序可以通过HSE固件启动。

        在P-Flash中编程elf/bin/S19/hex并重置MCU后。当HSE FW(AB_SWAP)有效时,SBAF将在P-Flash(HSE空间)中使HSE FW有效(AB_SWAP),并对HSE FW进行编程,并在UTEST中启用OTA功能标志。重置并运行有源块后,SBAF还将对HSE FW版本从有源块编程为无源块。AB_SWAP和FULL_MEM HSE FW具有不同的标题。FULL_MEM HSE FW标头为:0xDAFFFF60,AB_SWAP HSE FW标题为0xDBFFFF60

NXP推荐需要遵循的地方如下

        1、主机应用程序代码必须始终针对较低的地址空间进行编译

        2、在交换主动分区和被动分区之前,必须确保被动分区中存在有效代码

        3、主机(应用程序)可以读取DCM状态寄存器(DCMSTAT),以识别哪个分区是活动的,哪个分区是被动的;请参阅下表

1.3、S32K3放置HSE的地址

FULL_MEM

AB_SWAP

2、通过调试器安装HSE

        将HSE放在0x00400000地址上需要通过调试器启动,因为此时找不到启动地址了,启动地址(一般是IVT的)只能放在0x00400000、0x00500000、0x00600000、0x00700000的位置上,通过调试器能正确指向PC指针,所以可以实现正常运行,一旦脱机跑运行不起来的,设置如下。

链接文件设置

增加HSE的信息

使用起来也非常简单,在UTEST写入默认值就行了

初始化的时候调用就行了

HEX信息如下

3、通过IVT方式安装HSE

链接文件处理如下

注意:

        1、IVT与代码需要放在同一个PF里面,一般都是PF0

       2、HSE放在PF1,地址信息与代码的是地址信息是对称的,例如代码是0x00402000那么HSE为0x00502000。

增加HSE的信息如上面通过调试器安装一致

注意重点

增加IVT信息,去除本身启动的boot_header信息

自己创建一个IVT就好了如下

static const unsigned int __attribute__((section("._int_ivt_0"))) ivt_flash[] =
{
/*00h*/     SBAF_BOOT_MARKER /* IVT marker */ ,
/* Boot configuration word */
/*04h*/     (CM7_0_ENABLE << CM7_0_ENABLE_SHIFT) | (CM7_1_ENABLE << CM7_1_ENABLE_SHIFT) ,
/*08h*/     IVT_RESERVED /* Reserved */ ,
/*C0h*/     CM7_0_VTOR_ADDR /* CM7_0 Start address */ ,
/*10h*/     IVT_RESERVED /* Reserved */,
/*14h*/     CM7_1_VTOR_ADDR /* CM7_1 Start address , lockstep only run CM7_0 */ ,
/*18h*/     IVT_RESERVED /* Reserved */ ,
/*1ch*/     CM7_2_VTOR_ADDR /* CM7_2 Start address , lockstep only run CM7_0 */ ,
/*20h*/     XRDC_CONFIG_ADDR /* XRDC configuration pointer */ ,
/*24h*/     LF_CONFIG_ADDR /* Lifecycle configuration pointer */ ,
/*28h*/     IVT_RESERVED /* Reserved */,
/*2ch*/     HSE_FW_ADDR /* Reserved */,
/*30h*/     SECURE_BOOT_APP_ADDR ,
/*34h*/     IVT_RESERVED ,
/*38h*/     SECURE_BOOT_BACKUP_ADDR ,
/*3ch*/     IVT_RESERVED ,
/*f0h*/     IVT_GMAC ,
};

IVT格式如下

然后安装也是写UTEST即可。

4、坑点慎重踩

4.1、优化等级

首先看下生成的HEX信息

        这样肯定是不行的,前面已经提到IVT放置有地址的讲究的,这里压根没有IVT的信息还怎么启动对吧?回头看为啥呢?明明代码里面已经有IVT的就是没在HEX里面体现,想一下,C语言里面没用的数据会被优化掉的,所以此时找不到了,将优化等级调成最低如下更改(改单个IVT文件或整个工程都可以,建议改整个工程)。

由-Os改为-O0

改成功之后HEX显示如下:位置信息正确,分配大小与链接文件一致。

4.2、Flash放RAM

        为什么的?操作UTEST的时候用到了flash驱动的,实际操作的时候放不放都行,但是建议放置一下。

        Tips:flash驱动放在PF0能操作PF1,但是不能操作自身,所以操作UTEST的时候提到放不放RAM都行的原因在这。

4.3、C40_Ip配置更改

        操作flash的UTEST的时候,根据RTD的版本不一样,生成的配置有时候有毛病的,这点一定要注意更改如下C40_IP生成的配置

4.4、程序烧录

        在成功烧录HSE之后,千万千万不要烧录之前的调试不成功的HSE安装工程,这个小玩意儿安装好之后再烧录其他安装不好的工程会出现无法读取HSE版本号的现象,不知道是不是坏了。

5、测试结果

获取版本号信息

安装好之后千万别安装其他HSE了,否则HSE失效

6、代码链接

S32K3通过IVT的方式实现HSE的安装工程icon-default.png?t=N7T8https://download.csdn.net/download/weixin_43580890/89436822?spm=1001.2014.3001.5503

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

innovus:如何设置timing报告格式

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 在flow中添加如下设置即可设置好timing report的格式。 set report_timing_format [list timing_point arc net cell fanout load slew incr_delay delay arrival total_derate…

0 简单的图像分类

本文主要针对交通标识图片进行分类&#xff0c;包含62类&#xff0c;这个就是当前科大讯飞比赛&#xff0c;目前准确率在0.94左右&#xff0c;难点如下&#xff1a; 1 类别不均衡&#xff0c;有得种类图片2百多&#xff0c;有个只有10个不到&#xff1b; 2 像素大小不同&…

超越Llama3,多模态比肩GPT4V:GLM-4智能体,新一代语言处理利器

在人工智能领域&#xff0c;自然语言处理技术一直备受关注。就在昨日,今年备受关注的国内AI公司北京智谱AI发布了第四代 GLM 系列开源模型&#xff1a;GLM-4-9B。这是一个集成了先进自然语言处理技术的创新平台&#xff0c;它凭借清华大学KEG实验室提出的GLM模型结构&#xff0…

18V-180V降12V500mA恒压模块WT5118

18V-180V降12V500mA恒压模块WT5118 WT5118是一款能够将输入电压范围从18V至180V降低至12V并保持恒定输出电流500mA的恒压模块。 WT5118 是一款专为开关电源设计的集成了 180V 高电压 MOSFET 的 DC-DC 控制器。这个设备具备内置高压启动和自供电功能&#xff0c;能够满足快速启…

OpenAI 推出“模型规范”:塑造责任制的人工智能的框架

为了提升人工智能开发的责任性和透明度&#xff0c;OpenAI 最近发布了一份名为“模型规范”的初步草案。这份文件首次明确了其 API 和 ChatGPT 模型行为的指导原则&#xff0c;并通过博客形式对外公布。 OpenAI 在博客中解释说&#xff1a;“我们之所以发布此文档&#xff0c;…

「Python-docx 专栏」docx 设置页面边距、页眉页脚高度

本文目录 前言一、docx 页面边距在哪里二、对 <w:pgMar> 的详细说明1、上边距的说明2、右边距的说明3、下边距的说明4、左边距的说明5、页眉高度的说明6、页脚高度的说明三、设置 docx 页边距、页眉页脚高度1、完整代码2、代码执行效果图四、补充一些内容1、页面边距的两…

图解Sieve of Eratosthenes(埃拉托斯特尼筛法)算法求解素数个数

1.素数的定义 素数又称质数。质数是指在大于1的自然数中&#xff0c;除了1和它本身以外不再有其他因数的自然数。一个大于1的自然数&#xff0c;除了1和它自身外&#xff0c;不能被其他自然数整除的数叫做质数&#xff1b;否则称为合数&#xff08;规定1既不是质数也不是合数&…

【绝对有用】刚刚开通的GPT-4o计算这种数学题目出现问题了

欢迎关注如何解决以上问题的方法&#xff1a;查看个人简介中的链接的具体解决方案

Nvidia Isaac Sim搭建仿真环境 入门教程 2024(4)

Nvidia Isaac Sim 入门教程 2024 版权信息 Copyright 2023-2024 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. …

【iOS】#include、#import、@class、@import

文章目录 #include#importclassimport总结 #include #include是c\c中的预处理器指令&#xff0c;用于包含头文件的内容 但是使用#include可能会出现重复包含文件的问题&#xff0c;因此需要使用&#xff08;#ifndef/#define/#endif&#xff09;。 #import //导入系统头文件…

候选键的确定方法-如何判断属性集U的子集K是否为候选键、如何找到关系模式的候选键

一、候选键的定义 在关系模式R(U,F)中&#xff0c;若&#xff0c;且K满足&#xff0c;则K为关系模式R的候选键 关系模式R的候选键必须满足以下两个条件&#xff1a; &#xff08;1&#xff09;必须是属性集U的子集 &#xff08;2&#xff09;完全函数决定属性集U 二、如何…

【网络安全的神秘世界】已解决Failed to start proxy service on 127.0.0.1:8080

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 解决burpsuite无法在 127.0.0.1&#xff1a;8080 上启动代理服务端口被占用以及抓不到本地包的问题 Burpsuite无法启动proxy…

令人震撼的人类智慧的科学领域-AI技术

AI&#xff0c;全称为人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;是一门致力于让机器模仿人类智慧的科学领域。其核心技术涵盖了机器学习、自然语言处理、计算机视觉及专家系统等多个方面。AI旨在开发能够感知环境、进行逻辑推理、自主学习并做出决策…

Python数据可视化:直方图、核密度估计图、箱线图、累积分布函数图

本文使用数据来源自2023年数学建模国赛C题&#xff0c;以附件1、附件2数据为基础&#xff0c;通过excel的数据透视表等功能重新汇总了一份新的数据表&#xff0c;从中截取了一部分数据为例用于绘制图表。绘制的图表包括一维直方图、一维核密度估计图、二维直方图、二维核密度估…

godot所有2D节点介绍

五十个2D节点介绍 2D节点介绍 前言一、Node2D二、sprite2D三、AnimatedSprite2D四、Camera2D五、PhysicsBody2D六、 RigidBody2D七、CharacterBody2D八、StaticBody2D九、joint2D十、DampedSpringJoint2D十一、GrooveJoint2D十二、PinJoint2D十三、Area2D十四、AnimatableBody2…

cloud_enum:一款针对不同平台云环境安全的OSINT工具

关于cloud_enum cloud_enum是一款功能强大的云环境安全OSINT工具&#xff0c;该工具支持AWS、Azure和Google Cloud三种不同的云环境&#xff0c;旨在帮助广大研究人员枚举目标云环境中的公共资源&#xff0c;并尝试寻找其中潜在的安全威胁。 功能介绍 当前版本的cloud_enum支…

kettle实时增量同步mysql数据

** 本文主要介绍运用kettle实时增量同步mysql数据 ** Debezium介绍 官网地址&#xff1a;https://debezium.io/documentation/ Debezium是一个开源项目&#xff0c;为捕获数据更改(Capture Data Change,CDC)提供了一个低延迟的流式处理平台&#xff0c;通过安装配置Debeziu…

[面试题]RabbitMQ

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…

科普文章:怎么远程监控电脑屏幕?三种监控电脑屏幕的方法

远程监控公司电脑屏幕是一项重要的管理手段&#xff0c;它不仅有助于提升工作效率&#xff0c;还能确保公司信息安全和合规性。随着远程办公的普及&#xff0c;这一需求变得日益重要。下面我将详细介绍几种实现远程监控公司电脑屏幕的方法&#xff0c;以及实施过程中需要注意的…

网络安全 DVWA通关指南 SQL Injection(SQL注入)

DVWA SQL Injection 文章目录 DVWA SQL InjectionLowMediumHighImpossible SQL注入漏洞基本原理 Web应用程序对用户输入的数据校验处理不严或者根本没有校验&#xff0c;致使用户可以拼接执行SQL命令。 可能导致数据泄露或数据破坏&#xff0c;缺乏可审计性&#xff0c;甚至导致…