本文部分知识出自: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有一处错误: