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:
As a complete package, explained in Zip package content.
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.binThis
load.txt
would take the content ofbl2.bin
file from the same ZIP archive and load it to memory address 0x00000000 on the virtual device, and the content oftfm_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.