AI agents test your firmware on real hardware.

A hundred iterations, unattended. You review the one that passed.

Flashing, testing, re-testing on the bench needed a human. Not anymore.

BETAFLIGHT-LOOP.MP4
[ capture from live bench pending ]
Unmodified Betaflight flying against the Oracova bench. Gyro and accel served over I2C, 4x motor decode, closed loop at 8 kHz.
What is Oracova

Oracova is an automated test bench for firmware. Your unmodified binary runs on your real microcontroller. Oracova emulates the world around it with real-time physics, injects faults, and scores every run PASS or FAIL with captured evidence. AI agents drive the bench, so the loop runs unattended.

How it works

Every firmware PR gets its own bench and its own agent.

01

A change arrives with its own tests

Your engineers or your coding agents write the change. Oracova takes it from there: it writes the tests against the change, separately, and runs them on the bench, not in a mock. You manage outcomes, not benches.

02

The loop runs until PASS

Flash the chip, run the tests, read the result, iterate, repeat. Oracova keeps going for as long as it takes. Nobody watches it work.

03

Every test keeps running

Every test an agent writes stays in the suite and runs on every future PR. Integration regressions get caught before anyone looks for them.

More PRs in flight? Add benches. They are cheap to replicate, and every PR gets its own.

The world

Close your control loop on real-time physics emulation.

The world around your firmware is live physics: motors spin, packs heat up, pressure builds. Your firmware reaches every test point on its own. The world drives it there: no test hooks, no forced states, no special builds. To test an over-temperature guard, the pack heats up in physics and the firmware hits the fault exactly as it would in the field. Unmodified binary, same code you ship. Common peripherals, a gyro, an LCD, a hall encoder, come as validated models from Oracova's open-source marketplace; what you build, you can contribute back.

Motor control

Commutation and hall-sensor faults on real silicon: stuck hall, swapped sectors, skipped sector. All proven on the Oracova bench.

BMS

Cell over-temperature, sensor dropout, protection thresholds. The pack is physics, so protection logic is tested by reaching the fault, not by faking it.

Power and thermal

Heaters, pumps, converters. Closed loops settle, overshoot, and fault against a plant that behaves like the real one.

Wondering what it takes to get your board on the bench? See how onboarding works →

The verdict

You review the one that passed.

Every run returns PASS or FAIL with captured traces, event trails, and firmware hashes. Repeatable, diffable, stored in CI. This is a real run from the bench:

RUN 20260618-080733 bldc_hall_a_stuck_low
target   STM32F411, real silicon
world    BLDC plant + hall encoder, emulated on RP2350
fault    HALL_A forced low at t+200 ms
phase U / V / W + hall A capture
HALL_A stuck low
unguarded firmware   mismatch=8   unsafe=4 FAIL
same firmware + guard patch   unsafe=0 PASS

A stuck hall sensor. Unguarded firmware energizes the wrong phase 8 times, 4 of them unsafe. The guarded build shuts down clean. Both verdicts came from real hardware, not a simulator.

Evidence

What the bench has already done.

betaflight, closed loop

Unmodified Betaflight flies against the bench. Production flight-controller firmware, no source changes, closed the loop against Oracova's emulated world: gyro and accel served over I2C, 4 motor outputs decoded, physics advanced, ANGLE mode holding attitude at an 8 kHz loop. Third-party firmware we cannot see inside is the hardest case. That is why we lead with it.

the bug a green build hid

Zero edges on the wire. During bring-up, Betaflight's DShot motor output produced no edges at all, a DMA allocation failure on the F411. The build was green, the config said DShot600 active, every static check passed. Only the closed loop caught it. That bug class is exactly what Oracova exists for.

fault library, on silicon

Real faults, scored verdicts. BLDC commutation faults on a two-MCU rig: swapped sectors FAIL (mismatch=8, unsafe=8) · hall stuck low FAIL (unsafe=4) · skipped sector FAIL (seq_fault=7) · forced invalid hall bus PASS, because the target shuts down safely. Add a guard patch and the stuck-hall case flips to PASS with unsafe=0. Every verdict has stored evidence and firmware hashes.

and one more

The same loop pattern drove a Tesla ECU over CAN.

Objections

Why nothing else does this.

"An AI cannot be trusted to judge firmware."
Correct. Ours does not. The agent brings up the world and proposes scenarios; a deterministic, AI-free checker scores every run. Every verdict comes from real hardware, not from the model.
"Simulation already exists."
Simulators pass builds that fail on the chip. Static I/O checks say DShot is configured while the output shows zero edges. The loop only closes on real silicon.
"We have HIL vendors."
Real HIL starts at $9,900 and runs to six figures, configured by hand for one program. Below that floor there is nothing but a human and a bench. Oracova is the layer that was never built: agent-drivable, self-serve, per-PR.
The outcome

Firmware finally develops like software.

I am a hardware and firmware engineer. I have shipped motor controllers and battery systems, and I have been the human at the bench this page describes. Oracova exists because the tools I wanted never did. If your firmware drives something real and testing it still means a person and an afternoon, I want 15 minutes.

15 minutes, no deck
Book 15 minutes
calendly event: pending · email: pending domain