Skip to content
Firmware testing without hardware

Test firmware without development boards.

Import a datasheet and CircuitTwin builds a twin of the part: its registers, bus protocol and behavior. Your unmodified firmware runs on it, across boards and scenarios, in parallel.

Sign inHow it worksAccounts are available by invitation.
What it does

A development board for every part, without the hardware.

Firmware teams keep racks of boards to test drivers and integration. CircuitTwin replaces them with twins that behave like the real parts, so the same test runs a thousand times without a cable.

Datasheet to twin

Upload a sensor or microcontroller datasheet. If the part is already in the catalog, its twin is reused; otherwise one is generated with the part's registers, bus protocol and behavior, each fact linked to the page it came from.

Unmodified firmware

Run the ELF, HEX or binary you would flash: vendor HAL and drivers, Zephyr or FreeRTOS. No test hooks and no stubs in your code.

Batch testing

Expand firmware, boards, twin configurations, scenarios and assertions into one suite, run it on many workers, and publish JUnit reports to CI.

Your debugger

Break, step and watch from STM32CubeIDE or VS Code over a standard GDB connection, as you would with a debug probe.

Physics-driven sensor data

Motion, temperature and light scenarios drive sensor readings over simulated time, so drivers see realistic and repeatable data.

Concrete issues

When firmware touches something the documentation does not define, the run names the register, address and access instead of guessing.

How it works

From datasheet to test report.

Each step works from the web app, the command line or the API, so the same flow runs on a laptop and in CI.

  1. Import

    Upload the part's datasheet. Microcontrollers also take the reference manual and the vendor's device description.

    ct twin generate tmp117.pdf

  2. Compose a board

    Attach component twins to the microcontroller's I2C, SPI and UART pins. The first supported board is NUCLEO-F767ZI.

    ct catalog search TMP117

  3. Run

    Run firmware with assertions on console text, memory and register values, pin states and faults.

    ct test run suite.yaml --workers 8 --junit results.xml

  4. Debug

    Attach STM32CubeIDE or VS Code to any board and step through the same image.

    ct gdb-server --board nucleo-f767zi --elf app.elf

Results

Measured, not promised.

These figures come from the end-to-end test suites: real datasheets, real vendor firmware, the real command line and API.

18of 31
vendor-driver firmware images pass on datasheet-generated twinsUnmodified vendor drivers for parts such as the ADS1015, ADS1115, AHT20, BME680 and BMI270, each on a twin generated from its datasheet PDF alone. Each of the other 13 stops with a message naming what its twin is missing.
12,214cases/min
batch throughput on 8 workers114-case matrix of firmware, boards and scenarios, 87.1 million instructions; the slower of 2 runs. 4,415 cases/min at 56.2 MIPS on a single worker.
194of 194
STM32 device descriptions import as microcontroller twins12,379 peripherals (75.1%) bind to dedicated behavior models; the remaining 4,095 behave as plain register files.
1LSB
physics-driven sensor readings match the scenarioThe TI TMP117 vendor driver reads a warm-up curve from a thermal scenario within one least significant bit at 5, 12, 30 and 60 seconds of simulated time.
128of 199
industry component datasheets yield a twin126 of the 128 twins have a plausible identity, register map and bus. The identity register reads the documented ID on 35 of the 37 parts checked. Every other datasheet is listed with what the import could not read.

Platform figures: end-to-end verification of 29 September 2026, 205 of 216 end-to-end cases passing, on STM32F767ZI, STM32F407 and STM32F103 twins. Corpus figures: industry datasheet corpus run of 29 September 2026.

Accounts are available by invitation.

CircuitTwin is in private preview. If your team has been invited, sign in with the e-mail address the invitation was sent to.