How To Test Applications on MCUs
To automate testing of Qt Quick Ultralite (QUL) applications on microcontroller units (MCUs), the following software and hardware are required, with optional items clearly indicated:
- Squish Enterprise license
- Squish for MCU package for Linux or Windows
- Supported MCU board, optionally with a debug probe
- Serial/UART connection to the MCU board, or USB connection to the debug probe
- MCU vendor tools for the MCU board (optional)
To get the most out of image-based test automation, we recommend installing and configuring one of the supported OCR engines too.
Hardware prerequisities
Supported MCU target boards for automated testing
For an MCU board to support automated testing of QUL applications, Qt Quick Ultralite provides Device Link implementation for that specific hardware. Device Link is required to enable communication between the host and the device and Squish for MCU leverages it to:
- inject user input (e.g. touch events)
- capture screenshots for image-based verification
- exchange performance and logging data needed for debugging and test execution
To determine whether a particular board supports test automation with Squish for MCU, consult the official Qt for MCUs platform support documentation, which is the authoritative reference. For MCU platforms without Device Link implementation, Qt for MCUs step-by-step porting guide contains instructions how to implement Device Link support yourself.
Recommended device connection setup for automated testing
For basic device connectivity and image-based automated testing, a serial/UART connection is sufficient. However, Squish for MCU also provides convenience features, such as flashing the AUT onto the device and resetting the AUT to its initial state before a test begins. These operations rely on MCU vendor tools and we recommend using them together with a debug probe and USB connection for reliable communication.
Vendor-specific debug probes (e.g. an NXP board paired with an NXP probe) are preferrable, as third party probes such as J-Link are not yet part of our testing.
Software prerequisities
MCU vendor tools
Installing MCU vendor tools is optional. Without these tools, however, some of the convenience features of Squish for MCU (notably flashing the AUT onto the MCU device and resetting the AUT) are not available. For testing with these features, only a subset of vendor tools is required rather than the full package as follows:
- LinkServer for MCUs (can be installed as a part of MCUXpresso IDE)
- STM Cube Programmer command-line interface
- STM Cube Programmer GDB server
- Espressif IoT development framework
- openOCD / Infineon Auto Flash Utility
For an authoritative reference on supported version of these tools for each board, consult the Qt for MCUs list of prerequisities. The location of vendor tools on the PC can be set during Squish for MCU installation, and the installer also provides download links for convenience.
Updating locations of MCU tools and drivers
After Squish for MCU is installed, the paths to the MCU vendor tools can be adjusted in three different ways, shown in the next sections.
Update MCU tools with the Squish IDE
The vendor tools can be updated through the IDE. In order to open the setting, go to "Edit > Server Settings > MCU Settings". This page allows you to configure the vendor tools and is shown in the image below.

Note: The target config related to Infineon/openOCD can only be changed through a test crate and it's jobinfo.json file.
Updating MCU tools and drivers with squishrunner
The third method is to update the locations of the MCU tools the paths through the squishrunner command. This approach requires a currently running squishserver process.
The current configuration can be viewed with the following command:
$ ./squishrunner --info mcuSettings St-Link Programmer /usr/local/st/stm32cubeclt_1.18.0/STM32CubeProgrammer/bin/STM32_Programmer_CLI St-Link GDBServer /usr/local/st/stm32cubeclt_1.18.0/STLink-gdb-server/bin/ST-LINK_gdbserver NXP LinkServer /usr/local/LinkServer_25.7.33 Esp EnvScriptPath /usr/local/esp/esp-idf/export.sh Infineon FlashUtility /usr/local/openocd-5.7.0.3672-linux/openocd
The configuration can be changed through squishrunner with the --config command.
$ ./squishrunner --config mcuSettings <vendor>:<tool>=<value>
These vendor/tool settings are supported:
- St-Link:GDBServer
- St-Link:Programmer
- NXP:LinkServer
- Esp:EnvScriptPath
- Infineon:FlashUtility
For example:
$ ./squishrunner --config mcuSettings NXP:LinkServer=/usr/local/LinkServer_25.7.33
Updating locations of MCU tools and drivers in qul.ini
You can edit the qul.ini file to update, add or remove paths. This file is located in the Squish User Settings ver1/ Directory.
The following is an example qul.ini file. Please be aware that the backward slash \ on Windows must be escaped with a preceding backward slash.
[St-Link] GDBServer=C:\\MCUTools\\STM\\STLink-gdb-server\\bin\\ST-LINK_gdbserver.exe Programmer=C:\\MCUTools\\STM\\STM32CubeProgrammer\\bin\\STM32_Programmer_CLI.exe [LinkServer] InstallPath=C:\\MCUTools\\NXP\\LinkServer [Esp] EnvScriptPath=C:\\MCUTools\\Espressif\\frameworks\\esp-idf-v5.3.1\\export.bat [Infineon] FlashUtility=C:\\MCUTools\\Infineon\\Auto Flash Utility 1.4
Test Crate
The test crate is a zip archive or a tar archive that should bundle our build artifacts. A test crate is expected to contain the following files:
- ELF file
- HEX file
- jobinfo.json
The ELF/HEX file should represent the AUT that is flashed onto the device. Please note, Squish requires that the AUT has been build with DeviceLink (see Building a DeviceLink Enabled QUL AUT). The JSON file specifies all information that are required for flashing and running the AUT on a particular device. Depending on the debug probe, the configuration within the jobInfo file varies:
The LinkServer is NXP’s programming and debugging utility. It provides the communication layer between NXP debug probes (such as MCU-Link or LPC-Link2) and development tools like MCUXpresso for Visual Studio Code.
Within the JSON file, the following fields are: elf, hex, deviceBaudRate, deviceType and the flashInfo. The elf and hex fields contain the name of the AUT. The deviceType defines the used hardware and the baud rate field sets the speed of the UART connection.
Below an example jobInfo.json is shown that uses the LinkServer. This config is designed to, so that the AUT with the name "awesome-aut" can be flashed onto the NXP i.MX RT1050 Evaluation Kit. In this case, the flashInfo field contains the chipName, connectScript and the partInfoDirectory.
{
"deviceBaudRate": 115200,
"deviceType": "mimxrt1050-evk",
"flashInfo": {
"chipName": "MIMXRT1052xxxxB",
"connectScript": "RT1050_connect.scp",
"partInfoDirectory": "cmake"
},
"elf": "awesome-aut.elf",
"hex": "awesome-aut.hex"
}Device Types:
- mimxrt1050-evk-baremetal
- mimxrt1050-evk-freertos
- mimxrt1060-evkb
- mimxrt1060-evkb-baremetal
- mimxrt1064-evk-baremetal
- mimxrt1064-evk-freertos
- mimxrt1170
- mimxrt1170-evkb-freertos
STM32CubeProgrammer is STMicroelectronics’ programming tool for STM32 devices.
Within the JSON file, the following fields are: elf, hex, deviceBaudRate, deviceType and the flashInfo. The elf and hex fields contain the name of the AUT. The deviceType defines the used hardware and the baud rate field sets the speed of the UART connection.
Below an example jobInfo.json is shown that uses the STM32CubeProgrammer. This config is designed to, so that the AUT with the name "awesome-aut" can be flashed onto the STM32H750B-DK Discovery kit. In this case, the flashInfo field only the field externalLoader.
{
"deviceBaudRate": 115200,
"deviceType": "stm32h750b-discovery",
"flashInfo": {
"externalLoader": "MT25TL01G_STM32H750B-DISCO.stldr"
},
"elf": "awesome-aut.elf",
"hex": "awesome-aut.hex"
}Device Types:
- stm32f469i-discovery
- stm32f769i-discovery-baremetal
- stm32f769i-discovery-freertos
- stm32h750b-discovery
- stm32h750b-discovery-baremetal
ESP-IDF is Espressif’s official build system and development framework for ESP32-series microcontrollers. It provides the tools, libraries, and APIs needed to build, configure, and flash applications.
The most minimal JSON file specifies only one field: extra_esptool_args. Within this field, the chip of the target hardware is specified. ESP-IDF supports multiple chips and a full list of supported chips can be acquired by calling idf.py --list-targets.
{
"extra_esptool_args": {
"chip": "eps32s2"
}
}The following jobInfo is more advanced and allows for specific custom configs:
{
"deviceBaudRate": 115200,
"flasherInfo": {
"write_flash_args": [
"--flash_mode",
"dio",
"--flash_size",
"16MB",
"--flash_freq",
"80m"
],
"flash_settings": {
"flash_mode": "dio",
"flash_size": "16MB",
"flash_freq": "80m"
},
"flash_files": {
"0x0": "bootloader/bootloader.bin",
"0x10000": "qt_for_mcus_app.bin",
"0x8000": "partition_table/partition-table.bin"
},
"bootloader": {
"offset": "0x0",
"file": "bootloader/bootloader.bin",
"encrypted": "false"
},
"app": {
"offset": "0x10000",
"file": "qt_for_mcus_app.bin",
"encrypted": "false"
},
"partition-table": {
"offset": "0x8000",
"file": "partition_table/partition-table.bin",
"encrypted": "false"
},
"extra_esptool_args": {
"after": "hard_reset",
"before": "default_reset",
"stub": true,
"chip": "esp32s3"
}
}
}Infineon KitProg3 is a programming and debugging firmware used on Infineon development kits. It provides the communication layer between Infineon tools like ModusToolbox™ Programmer and the target device (for example, TRAVEO™ T2G Cluster 4M Lite Kit).
Within the JSON file, the following fields are: elf, hex, deviceBaudRate, deviceType and the flashInfo. The elf and hex fields contain the name of the AUT. The deviceType defines the used hardware and the baud rate field sets the speed of the UART connection. Note, this set baud rate can be overwritten from the IDE. Depending on the device, the flashInfo contains extra information that are required/needed during the flashing.
Below an example jobInfo.json is shown that uses the KitProg3. This config is designed to, so that the AUT with the name "awesome-aut" can be flashed onto the Infineon TRAVEO™ T2G Cluster 4M Lite board. In the case of Infineon, the flashInfo field contains the targetConfig. The target config ships with openOCD and can be found under the path "<openOCD root dir>/scripts/target/". The deviceType and targetConfig should refer to the same device!
{
"deviceBaudRate": 115200,
"deviceType": "tviic2d4mlite",
"flashInfo": {
"targetConfig": "traveo2_c2d_4m.cfg"
},
"elf": "awesome-aut.elf",
"hex": "awesome-aut.hex"
}Device Types:
- tviic2d4m-baremetal
- tviic2d4mlite
- tviic2d4mlite-baremetal
- tviic2d6m-baremetal
- tviic2d6mlite
- tviic2d6mlite-baremetal
© 2025 The Qt Company Ltd.
Documentation contributions included herein are the copyrights of
their respective owners.
The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation.
Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property
of their respective owners.