Boards · Rust firmware · Open source

Tools for people who build hardware

Boards, Rust firmware and the open-source software that ties them together, from Norway.

draft Copy not yet read by Marketing and PM. Board renders follow.

Donguru, the B153 board, three-quarter view
FIG. 1B153 Donguru

01Products

Hardware for the bench

Three tools for bring-up, debugging and test, each with a Rust driver, a CLI and a GUI.

Donguru, the B153 board, three-quarter view
FIG. 2B153 Donguru

Donguru Coming Q1–Q2 2027

A USB-C dongle with a USB hub, a serial port, a power switch and a power meter.

Hub
USB, on board
Serial
TX/RX flip
Power
switch + meter
rePort board, three-quarter view
FIG. 3B200 rePort

rePort In development

Digital and analog I/O over USB. No programming needed.

Link
USB
Digital
USART, SPI, I2C, 1-Wire
Levels
selectable
USB to isolated CAN FD bridge, three-quarter view
FIG. 4B135 USB to CAN FD

CAN line In development

USB and Ethernet bridges to isolated CAN FD, with SD card logging, and the adapters around them.

Bus
CAN FD, isolated
Host
USB or Ethernet
Connector
DB-9

02Donguru · B153

One cable to your board

Donguru sits between your computer and a board with a USB-C port. One cable carries USB, a serial console and power you can switch and measure.

  1. Hub and serial in one plug

    A USB hub and a UART on the same cable. TX and RX are flipped for you.

  2. Power under control

    Electronic switches on VBUS and the USB data lines, a power meter, and a mechanical switch for the boot mode.

  3. Scriptable

    A fast CLI, donguru or dg, with a Rust driver and Python behind it.

For development, debugging and production flashing of devices with a USB-C port.

Donguru block diagram The host's USB-C cable goes into a USB hub. The hub feeds the on-board MCU and, through a data line switch, the USB-C plug to your board. VBUS passes a power switch with a power meter on its way to the plug. The MCU's UART reaches the plug with TX and RX flipped as needed, and the MCU drives both switches. HOST USB-C USB HUB ON BOARD DATA SW VBUS SW + METER PLUG USB-C TO BOARD MCU FIRMWARE USB VBUS UART · TX/RX FLIP CTRL
FIG. 5Donguru block diagram draft

03Software

See what your device says

IOWeaver plots what your device says. RockFace debugs the firmware that says it. WireWeaver keeps both sides speaking the same API.

FIG. 6 · Software

GUI

IOWeaver: protocol analyzer and grapher

Debugger

RockFace window: timeline view, log view and defmt counters
RockFace: firmware debugger, timeline and logs

Code

// The API, once, for both sides (ww_uart):
#[ww_trait]
#[claim(exclusive)]
pub trait Uart {
    #[counted]
    stream!(rx: RxChunk<'i>);

    #[credit]
    sink!(tx: MaxLen<RefVec<'i, u8>, UART_TX_MAX>);

    fn capabilities() -> Capabilities<'i>;
}

// A device with several ports lists them as one array:
ww_impl!(uart[]: ww_uart::Uart)

IOWeaver

Protocol analyzer and grapher. Record, decode, plot and send. It ships with rePort and Donguru.

RockFace draft

Firmware debugger: logs, stack and CPU use, zero-cost profiling, logs from a fleet. First paid release planned for January 2027.

WireWeaver

One API definition for device and host: RPC, streams and properties, backwards and forwards compatible. Open source.

04From the lab

Work we are proud of

Four pieces from our own bench: Ethernet and USB to CAN FD, a laser scanner and a firmware debugger.

B125 Ethernet to two isolated CAN FD bridge, three-quarter view
FIG. 7B125

Ethernet to CAN FD In development

Ethernet to two isolated CAN FD buses, with SD card logging.

Bus
2× CAN FD, DB-9
Power
PoE, bus or USB
Logging
SD card
B135 USB to isolated CAN FD bridge, top view
FIG. 8B135

USB to CAN FD In development

USB High Speed to isolated CAN FD, with SD card logging.

Bus
CAN FD, DB-9
Host
USB HS
Logging
SD card
A circuit board held between the scanner's linear rails and carriages
FIG. 9AOI

3D laser scanner

Optical inspection of solder paste and placed parts with a scanning green laser line.

Resolution
15 µm
Optics
F-Theta, telecentric
Stage
2× CoreXY
RockFace timeline view: sleep spans and events of a running firmware over time
FIG. 10RockFace

RockFace draft

A firmware debugger for running systems. First paid release planned for January 2027.

Logs
from a fleet
Graphs
stack, CPU use
Profiling
zero-cost

More from the lab

05Open source

From register to GUI

The products stand on open crates, all Rust: the API and its wire format, units checked at compile time, and a bare-metal firmware template.

  1. ProductsDonguru · rePort · CAN line · IOWeaver · RockFace
  2. API
  3. Wire format
  4. Units
  5. Firmware

    embedded_bedrock

    not on crates.io yet

    Bare-metal firmware template with ruggedizing, debugging and logging built in. Optional embassy, RTIC and HAL support.

    use bedrock_led::code::*;
    use bedrock_sync::{Config, Sync};
    use cortex_m::asm::delay;
    
    // A firmware that will not start
    // says why on its status LED, then
    // waits in the ROM bootloader.
    if !guard.runs_board() {
        let pause = |n| delay(n * KHZ);
        blink(Code::UnknownRework,
              led, pause);
        reboot_into_rom_bootloader();
    }
    
    // One clock on all boards, steered
    // by the host over WireWeaver:
    // Acquiring, Locked within 2 ms.
    // `ww sync` locks the boards in
    // 1.2-1.6 s. On Donguru it costs
    // about 1.5 KB of flash.
    static SYNC: Sync =
        Sync::new(Config::DEFAULT);
    
    // clock.steer, once a second
    let r = SYNC.with(|clock, now| {
        server.steer(clock, now, &p)
    });
    
    // all boards act at the same µs
    SYNC.wait_until_shared(t).await?;

All open-source crates

06Stay in the loop

Hear when Donguru launches

Donguru launches on Crowd Supply. Its sign-up list opens with the pre-launch page; until then, send a line and you hear first. draft

Contact

Questions about the boards, the software or a project of your own: hello@vhrd.tech.

Engineering services are rare right now. What I do and how I work