How to load and start STM32CubeMP13 applications via SNOR flash

Revision as of 15:27, 29 May 2024 by Registered User (→‎Program via USB DFU)
Applicable for STM32MP13x lines


This article explains how to load and start STM32CubeMP13 applications via SNOR flash memory using the "SNOR external loader firmware" utility provided with the STM32CubeMP13 package. This use case is useful in production mode.

1. SNOR external loader firmware utility[edit source]

1.1. Introduction[edit source]

The SNOR external loader firmware utility is used to load and start STM32CubeMP13 applications programmed into an external SNOR flash memory.

  • It allows the programming of embedded software applications on an external SNOR flash memory for an internal STMicroelectronics Board, referred to as STM32MP13XX_CUSTOM_HW, customized to validate certain features. It can be reused for customer boards after binary adaptations.
  • This package contains all necessary binaries to program the SNOR flash memory through the serial interface and boot from SNOR.
  • This package version:
    • Supports the UART and USB DFU serial protocols.
    • Does not support OTP Programming.
Warning DB.png Important
This utility has been tested on internal STMicroelectronics boards and uses an MX25L51245G SNOR flash memory. It can be easily tailored to any other SNOR flash memories currently available.
Info white.png Information
The utility source code is available on request from the STMicroelectronics support teams for use as an example, and is easy to adapt for customer boards.


1.2. Contents[edit source]

The SNOR External Loader utility contains the binaries listed below, as well as readme and .tsv files. Details for each can be found below.

├── Projects
    ├── STM32MP13XX_CUSTOM_HW
       ├── External_Loader
          ├── SNOR_Ext_Loader
          │    ├── [FlashLayout_OpenBL_ExtLoaderSNOR_SerialBoot.tsv]
          │    ├── [FSBLA_SNOR_A7_Signed.bin]
          │    ├── [MP13_BSP_TemplatesA7_CUSTOM_HW_Signed.bin]
          │    ├── [MX25L51245G_STM32MP135C-CUSTOM_HW_A7.bin]
          │    ├── [readme.txt]
          │    ├── [STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32]
  • FlashLayout_OpenBL_ExtLoaderSNOR_SerialBoot.tsv
This file defines flash memory partitions, binaries, and the corresponding partition ID. Refer to the STM32CubeProgrammer_flashlayout article for more details.
  • FSBLA_SNOR_A7_Signed.bin
This binary is the first-stage bootloader (FSBLA) programmed via STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 in the SNOR flash memory and is used to load the test application from SNOR to DDR.
  • MP13_BSP_TemplatesA7_CUSTOM_HW_Signed.bin
This binary is the test application, programmed in the SNOR flash memory via STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32. On reset, when booting from SNOR, it is loaded into DDR for execution by FSBLA.
This application can be replaced with any customer test application. The application must be built for DDR (refer to build test application for DDR) and then properly signed with the STM32CubeProgrammer signing tool (or via Postbuild steps and scripts). In this test application, the blue LED is initialized and after successful execution, it is toggled at 200ms.
  • MX25L51245G_STM32MP135C-CUSTOM_HW_A7.bin
This binary provides SNOR flash memory read, write, and erase functionalities. It is used for programming binaries into an external SNOR flash memory.
  • readme.txt
Read this file carefully; it provides all the information for the example setup and verdict.
  • STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32
This binary initializes UART or USB DFU interface, depending on how you want to program the SNOR flash memory, and reads binaries serially in serial boot mode.
MX25L51245G_STM32MP135C-CUSTOM_HW_A7.bin is loaded into RAM. FSBLA_SNOR_A7_Signed.bin and MP13_BSP_TemplatesA7_CUSTOM_HW_Signed.bin are programmed into the SNOR flash memory for subsequent boot in SNOR boot mode.

2. Hardware and software prerequisites[edit source]

  • Customer board with external SNOR flash memory.
  • Customer board with an ST-Link or UART cable connected between the board and the PC, if programming with UART.
  • Customer board with a micro-USB cable connected between the USB DFU port on the board and the PC, if programming with USB.
  • Power adapter for the board.
  • STM32CubeProgrammer PC tool installed (v2.14.0 minimum).

3. How to run the utility[edit source]

3.1. Set boot mode to serial[edit source]

  • Set the boot pins to b000 (BOOT0/1/2 to OFF) position to select serial boot mode.
  • Connect the micro-USB cable between the PC and ST-Link connector on the board
OR
  • Connect a UART cable between the PC and UART connector on the board, if programming with UART. In both cases, the PC should detect the UART interface.
Warning DB.png Important
ST-Link provides a UART interface via Virtual COM port on the board like STM32MP135x-DK Discovery kit More info green.png.
  • Connect a mcro-USB cable between the PC and USB DFU port on the board, if programming with USB. The PC should detect the USB DFU interface.
Warning white.png Warning
ROM CODE gives preference to USB DFU if the USB cable is connected to other places than the ST-Link USB port.
If you want to use UART, the USB cable should NOT be connected to any other ports on the board than ST-Link USB.

3.2. Program the SNOR flash memory in serial boot[edit source]

3.2.1. Program the SNOR flash memory using STM32CubeProgrammer GUI[edit source]

Read STM32CubeProgrammer pages for more details.

3.2.1.1. Program with UART[edit source]
  • Click on UART and then select COM port:
CubeProgrammer GUI Flashing 7.png


  • Click on the Connect button:
STM32CubeProgrammer is now connected to ROM Code and the logs show the chip ID, bootloader version, and other details:
CubeProgrammer GUI Flashing 8.png


  • Click on the "+" icon, then on Open file and select the TSV file FlashLayout_OpenBL_ExtLoaderSNOR_SerialBoot.tsv
CubeProgrammer GUI Flashing 9.png


  • Select Binaries path with the Browse button: Firmware\Projects\STM32MP13XX_CUSTOM_HW\External_Loader\SNOR_Ext_Loader
CubeProgrammer GUI Flashing 10.png


  • Click on the Download button:
STM32CubeProgrammer now starts downloading the binaries. Once they've been successfully downloaded, a pop-up message indicates Flashing service completed successfully.
CubeProgrammer GUI Flashing 11.png


3.2.1.2. Program with USB DFU[edit source]
  • Click on USB and then select USB port:
CubeProgrammer GUI Flashing 12.png


  • Click on the Connect button:
STM32CubeProgrammer is now connected to ROM Code and the logs show the chip ID, bootloader version, and other details.
CubeProgrammer GUI Flashing 13.png


  • Click on the + icon, then on Open file select the TSV file FlashLayout_OpenBL_ExtLoaderSNOR_SerialBoot.tsv.
CubeProgrammer GUI Flashing 14.png


  • Select Binaries path with the Browse button: (Firmware\Projects\STM32MP13XX_CUSTOM_HW\External_Loader\SNOR_Ext_Loader):
CubeProgrammer GUI Flashing 15.png


  • Click on the Download button:
STM32CubeProgrammer now starts downloading the binaries. Once they've been successfully downloaded, a pop-up message indicates Flashing service completed successfully.
CubeProgrammer GUI Flashing 16.png


3.2.2. Flash SNOR flash using STM32CubeProgrammer CLI[edit source]

  • Browse the installed STM32CubeProgrammer binary directory i.e. STM32CubeProgrammer\bin,
  • Open command prompt from this directory,
  • Execute below command to load the SNOR External Loader binaries via UART interface:
$STM32_Programmer_CLI.exe -c port=COM 
<num> -w 
<YourDirectoryPath>\Projects<STM32device>\External_Loader\SNOR_Ext_Loader\FlashLayout_OpenBL_ExtLoaderSNOR_SerialBoot.tsv

OR

  • Execute below command to load the SNOR External Loader binaries via USB DFU interface:
$STM32_Programmer_CLI.exe -c port=USB 
<num> -w 
<YourDirectoryPath>\Projects<STM32device>\External_Loader\SNOR_Ext_Loader\FlashLayout_OpenBL_ExtLoaderSNOR_SerialBoot.tsv
  • DO NOT reset the board till the command has completed.
  • STM32CubeProgrammer now starts downloading all the binaries listed in TSV file. Once all the binaries are successfully downloaded, there is a message indicating : Flashing service completed successfully.

3.3. Run test application[edit source]

  • Once binaries are programmed into SNOR flash successfully, set boot pins to b001 (BOOT0 to ON, BOOT1 and BOOT2 to OFF) position to select SNOR boot mode and then reset the board.
  • MP13_BSP_TemplatesA7_CUSTOM_HW_Signed.bin test application toggles blue LED at 200ms, indicating that it has been loaded and executed successfully from DDR.