On this page

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:

  1. Squish Enterprise license
  2. Squish for MCU package for Linux or Windows
  3. Supported MCU board, optionally with a debug probe
  4. Serial/UART connection to the MCU board, or USB connection to the debug probe
  5. 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.

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.

"MCU settings menu in the \squishide"

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:

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.

Search Results