The Product

Turn datasheets into drivers

Upload a chip datasheet PDF. Embedd extracts register maps and returns validated HAL drivers in C99 or C++17.

Core Capabilities

How Embedd works

Three engines carry datasheet data through to compilable firmware output.

Register Map Parsing

Embedd reads multi-page PDFs, rebuilds bitfields, and validates the resulting register model.

HAL Code Output

Embedd turns the register model into HAL output with typed accessor functions, bitfield masks, and reset-value constants in C99 or C++17, without runtime dependencies.

Delivery and Setup

Get validated driver output, then use the CLI or REST API with CMake or CI. Rust output is available on the Team plan.

Feature Depth

For firmware teams

Register-accurate code

Accessor macros and structs mirror each bitfield's exact silicon offset, width, and access mode. No manual offset arithmetic.

RTOS-ready patterns

Generated HAL code supports portable register access in FreeRTOS, Zephyr, and bare-metal environments.

C99 and C++17 code

C99 maximizes toolchain compatibility. C++17 adds typed enums, constexpr constants, and scoped bitfield accessors for embedded projects.

Test scaffolds

Test driver behaviour in QEMU and Renode before flashing hardware.

CLI or REST API

Run generation from your build pipeline. The CLI works with CMake and Make, while the REST API supports webhook callbacks for async CI workflows.

Chip list

180+ pre-validated chip families: NXP, TI, STMicroelectronics, Nordic, Renesas, Microchip. Submit unlisted chips via supported chips page.

How It Works

Three steps to drivers

  1. 1

    Select a datasheet

    Choose a chip from the supported library or upload a PDF. Embedd accepts datasheets up to 800 pages with multi-column register tables.

  2. 2

    Parse, then generate

    The extraction engine rebuilds the register map, links bitfields, and produces driver source with typed accessors and constants.

  3. 3

    Get and integrate

    Validated output is delivered for download. Add it to your CMake project and write application code against the HAL.

stm32g0b1_gpio.h (generated) C99
#ifndef STM32G0B1_GPIO_H
#define STM32G0B1_GPIO_H

#include <stdint.h>

/* GPIO_MODER register */
#define GPIOA_MODER         (*((volatile uint32_t *)0x50000000U))
#define GPIO_MODER_MODE0    ((uint32_t)(0x3UL << 0U))
#define GPIO_MODER_MODE0_IN ((uint32_t)(0x0UL << 0U))
#define GPIO_MODER_MODE0_OUT((uint32_t)(0x1UL << 0U))
#define GPIO_MODER_MODE0_AF ((uint32_t)(0x2UL << 0U))

static inline void gpio_set_mode(
    GPIO_TypeDef *port,
    uint8_t pin,
    uint8_t mode) {
  uint32_t reg = port->MODER;
  reg &= ~(0x3U << (pin * 2U));
  reg |= ((mode & 0x3U) << (pin * 2U));
  port->MODER = reg;
}
Toolchain Compatibility

Works with your tools

Output needs no runtime library and fits toolchains that compile standard C.

GCC
Clang
CMake
Make
GitHub Actions
GitLab CI
Coming Next

Broader chip coverage

The roadmap covers full Rust output, currently in beta on the Team plan, deeper RISC-V vendor support, and SVDL export for probe-rs and OpenOCD. Submit a priority chip through the supported chips page or contact us.

View Supported Chips
$ embedd generate --chip nrf52840 --lang c99
Fetching nRF52840 from chip library...
Extracting 847 register definitions...
Generating HAL driver (C99 target)...
Done in 4.1s. Output: nrf52840_hal.zip

Start building drivers sooner

Try the free Explorer plan with three driver generations.