S32K3 HSE模块安装

本文部分知识出自:https://blog.csdn.net/weixin_43580890/article/details/139731467

0、简介

本文基于S32K312 介绍HSE的安装流程,主要是记录开发流程:

MCU:NXP S32k312

编辑器:S32 Design Studio for S32 Platform 3.5

编译器:GCC

仿真器:JLINK 11

1、概述

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

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

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

3、APP文件,量产使用

基于项目需要使用HSE的AB分区功能实现OTA,HSE在NXP的S32K3芯片上官方推荐两种安装方式:

第一种为通过调试器安装,通过调试器复位两次安装。
第二种是脱机运行,也就是下载HEX到MCU里面实现断电上电两次安装。

在实际生产的时候第一种不是特别适用,毕竟不会有软件工程师一个一个的去给板子安装,最好通过烧录工装实现流水线烧录,所以第二种当时显得优点尤为突出。

2、S32K3放置HSE的地址

FULL_MEM
在这里插入图片描述
AB_SWAP
在这里插入图片描述
在这里插入图片描述

3、HSE FW安装

需要从官网下载:
HSE_DEMOAPP_S32K312_0_2_55_0 ---- NXP HSE官方工程

HSE_FW_S32K312_0_2_55_0 — HSE源文件

NXP官网文档,给出了三种安装方式:
在这里插入图片描述

3.1、通过调试器安装HSE(方式1)
3.1.1 文件修改

将HSE放在0x00400000地址上需要通过调试器启动,因为此时找不到启动地址了(一般是IVT的),即这种方法因为将FW-IMG放在IVT-START,程序在脱离调试器之后,无法自主启动。

此方式下需要将FW-IMG放在IVT_START的位置或者也可以放在0x0050000(k312)的位置。安装图示如下:
在这里插入图片描述
两次reset之后,安装完成,FW-IMG可以被覆盖或者擦除,此时Sbaf会将FWIMG放在HSE专用NVM之中:
在这里插入图片描述

ld文件:
增加memory分配设置:
在这里插入图片描述

MEMORY
{
  HSE_BINARY    (R)   : ORIGIN = 0x00400000, LENGTH = 0x30000
  FLASH_VTABLE  (R)   : ORIGIN = 0x00430000, LENGTH = 0x1000  	/* Vector Table */
  FLASH         (RX)  : ORIGIN = 0x00431000, LENGTH = 0x2000  	/* code section for demo app */
  FLASH_P2      (RX)  : ORIGIN = 0x00433000, LENGTH = 0x17000  /* code section for demo app */
  INT_SRAM      (RW)  : ORIGIN = DEMO_APP_BSS_MEM_START, LENGTH = DEMO_APP_BSS_SIZE    /* 56KB RAM */
  IVT_ADDR      (RW)  : ORIGIN = IVT_START_ADDR, LENGTH = IVT_SIZE     /* fixed address for IVT structure */
  ADKP_KEY      (RW)  : ORIGIN = ADKP_START_ADDR, LENGTH = ADKP_SIZE      /* fixed address for key input by user */
  APP_CODE_SRAM (RWX) : ORIGIN = DEMO_APP_SRAM_START_ADDR, LENGTH = DEMO_APP_SRAM_SIZE    /* Secure ram memory */
  HSE_FW_VERSION(RW)  : ORIGIN = HSE_FW_VERSION_START_ADDR, LENGTH = HSE_FW_VERSION_SIZE
  TESTSTATUS    (RW)  : ORIGIN = TEST_STATUS_START_ADDR, LENGTH = TEST_STATUS_START_LENGTH
  TESTEXECUTED  (RW)  : ORIGIN = TEST_STATUS_EXECUTED_ADDR, LENGTH = TESTEXECUTED_LENGTH
  TESTCOMPLETED (RW)  : ORIGIN = TESTCOMPLETED_START_ADDR, LENGTH = 0x1
}

增加HSE的信息:

这里的pink文件路径即为HSE_FW_S32K312_0_2_55_0中的pink文件路径在这里插入图片描述

TARGET(binary)
INPUT (D:\software\NXP\HSE_FW_S32K312_0_2_55_0\hse_ab_swap\hse\bin\s32k312_hse_fw_1.13.0_2.55.0_pb250129.bin.pink)
OUTPUT_FORMAT(default)
SECTIONS
{
  .hse_bin : AT (ORIGIN(HSE_BINARY))
  {
    /*. = ALIGN(4);*/
    /*__hse_bin_start__ = .;*/
    
    D:\software\NXP\HSE_FW_S32K312_0_2_55_0\hse_ab_swap\hse\bin\s32k312_hse_fw_1.13.0_2.55.0_pb250129.bin.pink(.data)
    
    /*. = ALIGN(4);*/
    /*__hse_bin_end__ = .;*/  	
  } > HSE_BINARY
  
  __HSE_BIN_START = ORIGIN(HSE_BINARY);
  __HSE_BIN_SIZE = 0x30000;/*__hse_bin_end__ - __hse_bin_start__;*/

main文件:
使能UTEST_PROGRAM。
在这里插入图片描述

volatile DCM_BIT_STATUS_OTA_T otaIsEnable = 0xFF;
volatile DCM_BIT_ACTIVE_ADDRESS_OTA_REGION_T otaActiveRegion = 0xFF;
....
int main(void)
{
	gProgramAttributes = UTEST_PROGRAM;
	....
    otaIsEnable = Dcm_StatusIsOTAEnabled();
    otaActiveRegion = Dcm_ActiveAddressOTARegion();
	....
}
3.1.2 仿真安装

编译:
在这里插入图片描述
仿真设置:
在这里插入图片描述
仿真:

在这里插入图片描述
在这里插入图片描述
往下走会一直循环在
在这里插入图片描述
等待2s以上,下电再跑一次(function reset并不行),并全速跑重复一次如上过程。请注意,此时已经可以跑过去WaitForHSEFWInitToFinish()且可以读到版本号等信息,但是仍需要等待2s以上。

HSE刷写完毕:
在这里插入图片描述
这里NXP有一处错误:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值