Skip to main content

MCU Firmware Packages

For virtual microcontroller-based devices (MCUs) powered by Arm Cortex-M cores you can mostly use the same firmware files that also run on the real hardware.

There are two approaches to provide the MCU firmware for virtual devices:

  1. As a complete package, explained in Zip package content.

  2. As a standalone firmware file, explained in Firmware file formats.

Zip package content

The MCU firmware package is a zip archive that allows you to fully utilize the complexity of the target virtual device and all its memory partitions. It contains following files:

  • Info.plist file with meta information about the firmware package in JSON format. See more in Info.plist file.
  • firmware file with your program. Various formats are supported as explained in Firmware file formats.
  • Other files that may be needed for the boot process on the specific platform. See Storage for details.

Info.plist file

An Info.plist file in the firmware package specifies the meta information for the firmware: version, type, build, unique identifier and device identifier. The file can be also provided under name Info.json with the same format.

Info.plist file example:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Type</key>
<string>iot</string>
<key>UniqueIdentifier</key>
<string>WifiBasics</string>
<key>DeviceIdentifier</key>
<string>stm32u5-b-u585i-iot02a</string>
<key>Version</key>
<string>1.1.1</string>
<key>Build</key>
<string>WB</string>
</dict>
</plist>

Firmware file formats

A firmware file contains your program code for the target MCU. It can be provided in one of the following formats:

  • ELF executable - 32-bit ELF program file containing all information needed to load the program, also supporting multiple memory ranges.

  • binary - loaded at a predefined location in memory (typically start of Flash for devices with built-in executable Flash, otherwise start of RAM).

  • ZIP archive - containing several binary files and a text file with name load.txt that specifies their load locations in device memory. This format is required when you need to use several binary files. An example load file could look like this:

    load:0x00000000 name:bl2.bin
    load:0x01000000 name:tfm_s_ns_signed.bin

    This load.txt would take the content of bl2.bin file from the same ZIP archive and load it to memory address 0x00000000 on the virtual device, and the content of tfm_s_ns_signed.bin file at address 0x01000000.

You can use firwmare file as standalone, or also as part of a more complex firmware package as mentioned in Zip package content above.

Storage

Most devices have flash specific files that are required. See the relevant storage files page for that specific device.