This is a curated list of resources related to embedded and low-level programming in the Rust programming language, including a selection of useful crates.
This project is developed and maintained by the Resources team.
Projects marked with a robot emoji 🤖 are developed with the assistance of AI/LLM tools.
In 2018, the Rust community created an embedded working group to help drive adoption in the Rust ecosystem.
#rust-embedded:matrix.org Matrix roomembedded-graphics crate and ecosystemThese materials are available publicly, typically under permissive licenses.
esp-idf-hal ecosystem.These materials are available for purchase. They have been reviewed for relevancy, but are not specifically endorsed or reviewed for accuracy or quality by the Embedded Working Group.
embedded-hal traits for testing without accessing real hardware. - cargo-generate powered project template for quickly setting up new projects using the Knurling Tools.#[test] attribute, but will run on an embedded targetv0.2.x and v1.x.x hal implementations and driversbossac tool to Rustprobe-rs), hex/@tag input macros, search, session recording, and Lua plugins. - Basic runtimes for CPUs & MCUs which are needed to run software on them.
cortex-m-rt Support for Cortex-Mcortex-a-rt Support for Cortex-Acortex-r-rt Support for Cortex-Rriscv-rt Support for RISC-Vesp-riscv-rt Support for RISC-V devices from Espressif (ESP32)xtensa-lx-rt Support for Xtensa LX (ESP32)mips-rt Support for MIPSmsp430-rt Support for MSP430Register definition for microcontroller families. Usually generated using svd2rust. -
Peripheral Access Crates were also called Device Crates.
NOTE You may be able to find even more peripheral access crates by searching for the
svd2rust keyword on crates.io!
atsamd11 Peripheral access API for Microchip (formerly Atmel) SAMD11 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsamd21 Peripheral access API for Microchip (formerly Atmel) SAMD21 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsamd51 Peripheral access API for Microchip (formerly Atmel) SAMD51 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsame53 Peripheral access API for Microchip (formerly Atmel) SAME53 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsame54 Peripheral access API for Microchip (formerly Atmel) SAME54 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsamx7x-rust Peripheral access API for Microchip (formerly Atmel) SAM S70/E70/V70/V71 microcontrollers. This git repo hosts both the peripheral access crate and the hal.avr-device Peripheral access API for Microchip (formerly Atmel) AVR microcontroller family.sam3x8e Peripheral access API for Atmel SAMD3X8E microcontrollers (generated using svd2rust) - pic32-pac Peripheral access API for PIC32MX1/2xx - nrf51 Peripheral access API for nRF51 microcontrollers (generated using svd2rust) - nrf52810-pac - Peripheral access API for the nRF52810 microcontroller (generated using svd2rust) - nrf52811-pac - Peripheral access API for the nRF52811 microcontroller (generated using svd2rust) - nrf52832-pac - Peripheral access API for the nRF52832 microcontroller (generated using svd2rust) - nrf52833-pac - Peripheral access API for the nRF52833 microcontroller (generated using svd2rust) - nrf52840-pac - Peripheral access API for the nRF52840 microcontroller (generated using svd2rust) - nrf5340-app-pac - Peripheral access API for the nRF5340 application core (generated using svd2rust) - nrf5340-net-pac - Peripheral access API for the nRF5340 network core (generated using svd2rust) - nrf9160-pac - Peripheral access API for the nRF9160 system-in-package (generated using svd2rust) - k64 - lpc11uxx - lpc55s6x-pac - lpc82x-pac - lpc845-pac - mkw41z - imxrt-ral Register access layer for i.MX RT series. - SKEAZN642 Peripheral access API for KEA64 family microcontrollers (generated using svd2rust) - mcx-pac Peripheral Access Crate for NXP MCX Series MCUs - rp2040-pac - Peripheral access API for the RP2040 dual-core system-on-chip (generated using svd2rust) - rp235x-pac - Peripheral access API for the RP2350 family of dual-core microcontrollers - e310x - svd2rust generated interface to SiFive Freedom E310 MCUs - efm32pg12-pac - Peripheral access API for Silicon Labs EFM32PG12 microcontrollers - The efm32-rs project has peripheral access APIs for most EFM32 microcontrollers (generated using svd2rust):
efm32g-pac - efm32gg-pac - efm32gg11b-pac - efm32gg12b-pac - efm32hg-pac - efm32jg1b-pac - efm32jg12b-pac - efm32lg-pac - efm32pg-pac - efm32pg22-pac - efm32pg23-pac - efm32tg-pac - efm32tg11b-pac - efm32wg-pac - efm32zg-pac - The stm32-rs project has peripheral access APIs for most STM32 microcontrollers (generated using svd2rust):
stm32f0 - stm32f1 - stm32f2 - stm32f3 - stm32f4 - stm32f7 - stm32g0 - stm32g4 - stm32h7 - stm32h7 - stm32l0 - stm32l1 - stm32l4 - tm4c123x Peripheral access API for TM4C123x microcontrollers (generated using svd2rust)tm4c129x Peripheral access API for TM4C129x microcontrollers (generated using svd2rust)mspm0-metapac
msp430g2553 Peripheral access API for MSP430G2553 microcontrollers (generated using svd2rust)
msp430fr2355 Peripheral access API for MSP430FR2355 microcontrollers (generated using svd2rust)msp430fr6972 - esp32 - esp32c2 - esp32c3 - esp32c5 - esp32c6 - esp32c61 - esp32h2 - esp32p4 - esp32s2 - esp32s3 - esp8266 - ambiq-apollo1-pac Peripheral access API for Ambiq Apollo 1 microcontrollers (generated using svd2rust)ambiq-apollo2-pac Peripheral access API for Ambiq Apollo 2 microcontrollers (generated using svd2rust)ambiq-apollo3-pac Peripheral access API for Ambiq Apollo 3 microcontrollers (generated using svd2rust)ambiq-apollo3p-pac Peripheral access API for Ambiq Apollo 3 Plus microcontrollers (generated using svd2rust)gd32vf103-pac Peripheral access API for GD32VF103 RISC-V microcontrollers (generated using svd2rust) - gd32e2 Peripheral access API for GD32E23x Cortex-M23 microcontrollers (generated using svd2rust) - gd32f1 Peripheral access API for GD32F1x0 Cortex-M3 microcontrollers (generated using svd2rust) - gd32f2 Peripheral access API for GD32F20x Cortex-M3 microcontrollers (generated using svd2rust) - Peripheral access crates for the different XMC4xxx families of microcontrollers
zynq7000 - w7500x-pac Peripheral Access Crate for Wiznet's W7500x microcontrollers (generated using svd2rust) - ra2a1 Peripheral Access Crate for ra2a1 microcontrollers (generated using svd2rust) - ra2e1 Peripheral Access Crate for ra2e1 microcontrollers (generated using svd2rust) - ra2e2 Peripheral Access Crate for ra2e2 microcontrollers (generated using svd2rust) - ra2l1 Peripheral Access Crate for ra2l1 microcontrollers (generated using svd2rust) - ra4e1 Peripheral Access Crate for ra4e1 microcontrollers (generated using svd2rust) - ra4m1 Peripheral Access Crate for ra4m1 microcontrollers (generated using svd2rust) - ra4m2 Peripheral Access Crate for ra4m2 microcontrollers (generated using svd2rust) - ra4m3 Peripheral Access Crate for ra4m3 microcontrollers (generated using svd2rust) - ra4w1 Peripheral Access Crate for ra4w1 microcontrollers (generated using svd2rust) - ra6e1 Peripheral Access Crate for ra6e1 microcontrollers (generated using svd2rust) - ra6m1 Peripheral Access Crate for ra6m1 microcontrollers (generated using svd2rust) - ra6m2 Peripheral Access Crate for ra6m2 microcontrollers (generated using svd2rust) - ra6m3 Peripheral Access Crate for ra6m3 microcontrollers (generated using svd2rust) - ra6m4 Peripheral Access Crate for ra6m4 microcontrollers (generated using svd2rust) - ra6t1 Peripheral Access Crate for ra6t1 microcontrollers (generated using svd2rust) - ra6t2 Peripheral Access Crate for ra6t2 microcontrollers (generated using svd2rust) - da14531 Peripheral Access Crate for DA14531 Ultra-Low Power BT 5.1 System-on-Chip - Implementations of embedded-hal for microcontroller families and systems running some OS. -
NOTE You may be able to find even more HAL implementation crates by searching for the
embedded-hal-impl and embedded-hal keywords on crates.io!
bitbang-hal software protocol implementations for microcontrollers with digital::OutputPin and digital::InputPinftdi-embedded-hal for FTDI FTx232H chips connected to Linux systems via USBlinux-embedded-hal for embedded Linux systems like the Raspberry Pi. - freebsd-embedded-hal for embedded (or not) FreeBSD systems. - atsam4-hal - HAL for SAM4E, SAM4N and SAM4S - atsamd-hal - HAL for SAMD11, SAMD21, SAMD51 and SAME54 - atsamx7x-hal - HAL for SAM S70/E70/V70/V71-based devices - avr-hal - HAL for AVR microcontroller family and AVR-based boardspic32-hal - HAL for PIC32MX - nrf51-hal - nrf52810-hal - nrf52811-hal - nrf52832-hal - nrf52833-hal - nrf52840-hal - nrf9160-hal - Also check the list of NXP board support crates!
lpc55s6x-hal - lpc8xx-hal - HAL for lpc82x and lpc845 - mkw41z-hal - imxrt-hal - HAL for i.MX RT series. - rp2040-hal - HAL for the RP2040 dual-core system-on-chip - rp235x-hal - HAL for the RP2350 family of dual-core microcontrollers (used in the Raspberry Pi Pico 2 etc.) - e310x-hal - HAL for SiFive Freedom E310 MCUs - Also check the list of STMicroelectronics board support crates!
stm32f0xx-hal - stm32f1xx-hal - stm32f3xx-hal - stm32f4xx-hal - stm32f7xx-hal - stm32g0xx-hal - stm32h7xx-hal - stm32l0xx-hal - stm32l1xx-hal - stm32l151-hal - stm32l4xx-hal - stm32-hal - tm4c123x-halembassy-mspm0
msp430fr2x5x-hal
esp-hal - no_std Hardware Abstraction Layer for Espressif microcontrollers, officially supported by Espressifesp-idf-hal - std embedded-hal implementation for Espressif microcontrollers built on top of ESP-IDF, fully supported by the communitytomu-hal
toboot_config macro.xmc1100-hal - xmc4-hal - gd32vf103xx-hal - gd32vf103-hal - gd32f1x0-hal - da14531-hal HAL crate for DA14531 Ultra-Low Power BT 5.1 System-on-Chip - Crates tailored for general CPU architectures.
cortex-a Low-level access to Cortex-A processors (early state) - cortex-m Low-level access to Cortex-M processors - riscv Low-level access to RISC-V processors - Crates tailored for specific boards.
metro_m0 - Board support for the Metro M0 board in the atsamd-rs repo. It is an atsamd-rs tier 1 support board. metro_m4 - Board support for the Metro M4 board in the atsamd-rs repo. It is an atsamd-rs tier 1 support board. pyportal - Board support for the PyPortal board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. pygamer - Board support for the PyGamer board in the atsamd-rs repo. It is an atsamd-rs tier 1 support board. trellis_m4 - Board support for the NeoTrellis M4 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. feather-f405 - Board support for the Feather STM32F405 Express. feather_m0 - Board support for the Feather M0 board, and some variants in the atsamd-rs repo. It is an atsamd-rs tier 1 support board. feather_m4 - Board support for the Feather M4 board in the atsamd-rs repo. It is an atsamd-rs tier 1 support board. circuit_playground_express - Board support for the Circuit Playground Express board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. edgebadge - Board support for the EdgeBadge board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. gemma_m0 - Board support for the Gemma M0 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. itsybitsy_m0 - Board support for the ItsyBitsy M0 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. itsybitsy_m4 - Board support for the ItsyBitsy M4 Express board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. trinket_m0 - Board support for the Trinket M0 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. neo_trinkey - Board support for the neo trinkey board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. neokey_trinkey - Board support for the neokey trinkey board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. grand_central_m4 - Board support for the grand central m4 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. qt_py_m0 - Board support for the QT Py board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. adafruit-feather-rp2040 - Board Support Crate for the Adafruit Feather RP2040 adafruit-itsy-bitsy-rp2040 - Board Support Crate for the Adafruit ItsyBitsy RP2040 adafruit-kb2040 - Board Support Crate for the Adafruit KB2040 adafruit-macropad - Board Support Crate for the Adafruit Macropad adafruit-qt-py-rp2040 - Board Support Crate for the Adafruit QT Py RP2040 avr-hal - Board support crate for several AVR-based boards including the Arduino Uno and the Arduino Leonardoarduino_mkr1000 - Board support for the MKR 1000 WiFi board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. arduino_mkrvidor4000 - Board support for the MKR Vidor board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. arduino_mkrzero - Board support for the mkrzero board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. arduino_nano33iot - Board support for the Arduino Nano 33 IoT in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. avr_328p_hal - A zero-dependency, board support crate for the Arduino UNO R3 on the AVR_ATmega328p microcontroller featuring direct register-level control for performance. It leverages Rust's Option enum type to ensure only one part of the code has access to a specific driver. Documentationdwm1001 - Decawave DWM1001-DEV - microbit - micro:bit - nrf52840-dk-bsp - nrf52840-dk - Thingy:91-nrf9160 - thingy:91 - frdm-kw41z - FRDM-KW41Z - pimoroni-pico-explorer - Board Support for the Pimoroni Pico Explorerpimoroni-pico-lipo-16mb - Board Support for the Pimoroni Pico Lipo 16MBFor unlisted Pimoroni microcontroller boards, check this up-to-date list.
rp-pico - Board Support Crate for the RP2040-based Raspberry Pi Pico.The same repository includes support for numerous other development boards which use Raspberry Pi microcontrollers. A full list can be found in the repository documentation.
samd21_mini - Board support for the SAMD21 Mini Breakout in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. sparkfun-pro-micro-rp2040 - Board Support Crate for the RP2040 based Sparkfun Pro Micro.seedstudio-gd32v - Board support crate for the GD32 RISC-V Dev Board
xiao_m0 - Board support for the Seeed Studio Seeeduino XIAO in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. wio_lite_mg126 - Board support for the Seeed Studio wio_lite_mg126 in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. wio_lite_w600 - Board support for the Seeed Studio wio_lite_w600 in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. wio_terminal - Board support for the Seeed Studio wio_terminal in the atsamd-rs repo. It is an atsamd-rs tier 1 support board longan-nano - Board support package for the Longan Nano board
prussia - SDK for the PlayStation 2.f3 Board Support Crate for the STM32F3DISCOVERY - nucleo-f042k6 - Nucleo-F042K6nucleo-f103rb - Nucleo-F103RBnucleo-f401re - Nucleo-F401RE nucleo-h743zi Beginner-oriented support crate for the Nucleo H743ZI and Nucleo H743ZI2nucleo-h723zg Board support crate for the Nucleo H723ZGsolo-bsp Board Support Crate for Solo, an open source security token (WIP) - stm32f407g-disc Board Support Crate for the STM32F4DISCOVERY (WIP) - stm32f429i-disc Board Support Crate for the STM32F429DISCOVERY (WIP) - stm32f3-discovery Board Support Crate for the STM32F3DISCOVERY used in Rust Embedded Discovery book - teensy4-rs Board Support crate for the [Teensy 4.0]monotron - A 1980s home-computer style application for the Texas Instruments Stellaris Launchpad. PS/2 keyboard input, text output on a bit-bashed 800x600 VGA signal. Uses menu, vga-framebuffer and pc-keyboard.stellaris-launchpad - For the Texas Instruments Stellaris Launchpad and Tiva-C Launchpad tm4c129-launchpad - For the Texas Instruments TM4C129-XL Launchpad boardbetafpv-f3 - For the BetaFPV F3 drone flight controllertildagon - Board support for the EMF Camp Tildagon badgesodaq_one - Board support for the Sodaq one board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. sodaq_sara_aff - Board support for the Sodaq sara aff board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. serpente - Board support for the serpente board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. p1am_100 - Board support for the p1am_100 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. The following crates provide HAL-like abstractions for subcomponents of embedded
devices that go beyond what is available in embedded-hal:
accelerometer - Generic accelerometer support, including traits and types for taking readings from 2 or 3-axis accelerometers and tracking device orientations - embedded-graphics: 2D drawing library for any size display - radio - Generic radio transceiver traits, mocks, and helpers - smart-leds: Support for addressable LEDs including WS2812 and APA102usb-device: Abstraction layer between USB peripheral crates & USB class crates - atat: Abstraction crate to ease writing AT based driver crates - embedded-nal: An Embedded Network Abstraction Layer - embedded-storage: An Embedded Storage Abstraction Layerswitch-hal: An "on"/"off" abstraction for input and output switches - You can also find many of these drivers on drive-rs; please consider adding your driver there (in the GitHub repo) while we work to port everything across.
Platform agnostic crates to interface external components. These crates use the embedded-hal
interface to support all the devices and systems that implement the embedded-hal
traits.
The list below contains drivers that have achieved the "released" status. To add a driver to this list, please ensure that your driver has a short blog post, article, or sufficiently explanatory README showing an example of its use. Ideally, this post would demonstrate using the device in a small project so that a Rust and/or embedded newcomer can also understand it. Otherwise, please add it to the WIP section below.
PCA95xx, PCF85xx) - Intro blog post - embedded-hal - Intro blog post - unsafe - github - usb-device. Includes concrete Keyboard (boot and NKRO), Mouse and Consumer Control implementations as well as support for building your own HID classes - github - no_std driver for the TB6612FNG motor driver - NOTE You may be able to find even more driver crates by searching for the embedded-hal-driver
keyword on crates.io!
Work in progress drivers. Help the authors make these crates awesome!
#![no_std] crates designed to run on resource-constrained devices.
u5 or u120bounded-registers provides a Tock-like API for MMIO registers with the addition of type-based bounds checking. - cmim, or Cortex-M Interrupt Move: A crate for Cortex-M devices to move data to interrupt context, without needing a critical section to access the data within an interrupt, and to remove the need for the "mutex dance" - cmsis-dsp-sys: Rust FFI bindings to the Arm CMSIS_5 math library - embedded-graphics with optional physics effects. Vec, String, LinearMap, RingBuffer backed by fixed-size buffers - ManagedSlice, ManagedMap backed by either their std counterparts or fixed-size buffers for #![no_std]. - no_std, no-alloc) fast fourier transforms - register-rs is Tock registers with added support for CPU register definitions using the same API as for the MMIO registers. This enables homogeneous interfaces to registers of all kinds. - BTreeSet and BTreeMap. - alloc. no_std parser for the Adafruit Bluefruit LE Connect controller protocol. - no_std environments, implementing Mahony, Madgwick, and VQF filters. - Work in progress crates. Help the authors make these crates awesome!
no_std post-quantum (ML-KEM/ML-DSA/SLH-DSA) and classical cryptography, side-channel hardened, zero-dependency. There are many ways to handle panics in embedded devices, these crates provide helpful variants.
dont_panic + dont_panic_slice: panic!()-like macro that causes linking error instead of panicking. May be used to statically ensure some code won't panic. no-panic: Attribute macro to require that the compiler prove a function can't ever panic. panic-abort: Causes an abort on panics (nightly-only) panic-halt: Halts the processor on panics panic-itm: Prints the panic through the chip's ITM to a debugger attached to the SWO pin (Cortex-M with ITM only)panic-never: This crate guarantees that your application is free of panicking branches. panic-persist: A panic handler crate inspired by panic-ramdump that logs panic messages to a region of RAM defined by the user, allowing for discovery of panic messages post-mortem using normal program control flow. - panic-probe: A panic handler that exits probe-run with an error code. panic-ramdump: Writes the panic message into the beginning of RAM and enters an infinite loop; the message can be extracted by attaching a debugger (Cortex-M only) panic-rtt: Set the panicking behavior to log to a JLINK debugger and loop. panic-rtt-target: Logs panic messages over RTT. Uses rtt-target. panic-semihosting: Prints the panic message via semihosting to an attached debugger (Cortex-M only)rp2040-panic-usb-boot: Save panic message in XIP RAM and reboot RP2040 to USB mode no_std Rust (single dependency: fdt). Runs at EL2, boots Linux with 4 vCPUs, virtio-blk/net, FF-A v1.1 SPMC at S-EL2. Targets QEMU virt machine (no real hardware tested yet).These materials may be outdated and reflect earlier practices, but they might still be helpful for reference.
This list is licensed under
Contribution to this crate is organized under the terms of the Rust Code of Conduct, the maintainer of this crate, the Resources team, promises to intervene to uphold that code of conduct.
(top 30 of 228)
This is a curated list of resources related to embedded and low-level programming in the Rust programming language, including a selection of useful crates.
This project is developed and maintained by the Resources team.
Projects marked with a robot emoji 🤖 are developed with the assistance of AI/LLM tools.
In 2018, the Rust community created an embedded working group to help drive adoption in the Rust ecosystem.
#rust-embedded:matrix.org Matrix roomembedded-graphics crate and ecosystemThese materials are available publicly, typically under permissive licenses.
esp-idf-hal ecosystem.These materials are available for purchase. They have been reviewed for relevancy, but are not specifically endorsed or reviewed for accuracy or quality by the Embedded Working Group.
embedded-hal traits for testing without accessing real hardware. - cargo-generate powered project template for quickly setting up new projects using the Knurling Tools.#[test] attribute, but will run on an embedded targetv0.2.x and v1.x.x hal implementations and driversbossac tool to Rustprobe-rs), hex/@tag input macros, search, session recording, and Lua plugins. - Basic runtimes for CPUs & MCUs which are needed to run software on them.
cortex-m-rt Support for Cortex-Mcortex-a-rt Support for Cortex-Acortex-r-rt Support for Cortex-Rriscv-rt Support for RISC-Vesp-riscv-rt Support for RISC-V devices from Espressif (ESP32)xtensa-lx-rt Support for Xtensa LX (ESP32)mips-rt Support for MIPSmsp430-rt Support for MSP430Register definition for microcontroller families. Usually generated using svd2rust. -
Peripheral Access Crates were also called Device Crates.
NOTE You may be able to find even more peripheral access crates by searching for the
svd2rust keyword on crates.io!
atsamd11 Peripheral access API for Microchip (formerly Atmel) SAMD11 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsamd21 Peripheral access API for Microchip (formerly Atmel) SAMD21 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsamd51 Peripheral access API for Microchip (formerly Atmel) SAMD51 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsame53 Peripheral access API for Microchip (formerly Atmel) SAME53 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsame54 Peripheral access API for Microchip (formerly Atmel) SAME54 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsamx7x-rust Peripheral access API for Microchip (formerly Atmel) SAM S70/E70/V70/V71 microcontrollers. This git repo hosts both the peripheral access crate and the hal.avr-device Peripheral access API for Microchip (formerly Atmel) AVR microcontroller family.sam3x8e Peripheral access API for Atmel SAMD3X8E microcontrollers (generated using svd2rust) - pic32-pac Peripheral access API for PIC32MX1/2xx - nrf51 Peripheral access API for nRF51 microcontrollers (generated using svd2rust) - nrf52810-pac - Peripheral access API for the nRF52810 microcontroller (generated using svd2rust) - nrf52811-pac - Peripheral access API for the nRF52811 microcontroller (generated using svd2rust) - nrf52832-pac - Peripheral access API for the nRF52832 microcontroller (generated using svd2rust) - nrf52833-pac - Peripheral access API for the nRF52833 microcontroller (generated using svd2rust) - nrf52840-pac - Peripheral access API for the nRF52840 microcontroller (generated using svd2rust) - nrf5340-app-pac - Peripheral access API for the nRF5340 application core (generated using svd2rust) - nrf5340-net-pac - Peripheral access API for the nRF5340 network core (generated using svd2rust) - nrf9160-pac - Peripheral access API for the nRF9160 system-in-package (generated using svd2rust) - k64 - lpc11uxx - lpc55s6x-pac - lpc82x-pac - lpc845-pac - mkw41z - imxrt-ral Register access layer for i.MX RT series. - SKEAZN642 Peripheral access API for KEA64 family microcontrollers (generated using svd2rust) - mcx-pac Peripheral Access Crate for NXP MCX Series MCUs - rp2040-pac - Peripheral access API for the RP2040 dual-core system-on-chip (generated using svd2rust) - rp235x-pac - Peripheral access API for the RP2350 family of dual-core microcontrollers - e310x - svd2rust generated interface to SiFive Freedom E310 MCUs - efm32pg12-pac - Peripheral access API for Silicon Labs EFM32PG12 microcontrollers - The efm32-rs project has peripheral access APIs for most EFM32 microcontrollers (generated using svd2rust):
efm32g-pac - efm32gg-pac - efm32gg11b-pac - efm32gg12b-pac - efm32hg-pac - efm32jg1b-pac - efm32jg12b-pac - efm32lg-pac - efm32pg-pac - efm32pg22-pac - efm32pg23-pac - efm32tg-pac - efm32tg11b-pac - efm32wg-pac - efm32zg-pac - The stm32-rs project has peripheral access APIs for most STM32 microcontrollers (generated using svd2rust):
stm32f0 - stm32f1 - stm32f2 - stm32f3 - stm32f4 - stm32f7 - stm32g0 - stm32g4 - stm32h7 - stm32h7 - stm32l0 - stm32l1 - stm32l4 - tm4c123x Peripheral access API for TM4C123x microcontrollers (generated using svd2rust)tm4c129x Peripheral access API for TM4C129x microcontrollers (generated using svd2rust)mspm0-metapac
msp430g2553 Peripheral access API for MSP430G2553 microcontrollers (generated using svd2rust)
msp430fr2355 Peripheral access API for MSP430FR2355 microcontrollers (generated using svd2rust)msp430fr6972 - esp32 - esp32c2 - esp32c3 - esp32c5 - esp32c6 - esp32c61 - esp32h2 - esp32p4 - esp32s2 - esp32s3 - esp8266 - ambiq-apollo1-pac Peripheral access API for Ambiq Apollo 1 microcontrollers (generated using svd2rust)ambiq-apollo2-pac Peripheral access API for Ambiq Apollo 2 microcontrollers (generated using svd2rust)ambiq-apollo3-pac Peripheral access API for Ambiq Apollo 3 microcontrollers (generated using svd2rust)ambiq-apollo3p-pac Peripheral access API for Ambiq Apollo 3 Plus microcontrollers (generated using svd2rust)gd32vf103-pac Peripheral access API for GD32VF103 RISC-V microcontrollers (generated using svd2rust) - gd32e2 Peripheral access API for GD32E23x Cortex-M23 microcontrollers (generated using svd2rust) - gd32f1 Peripheral access API for GD32F1x0 Cortex-M3 microcontrollers (generated using svd2rust) - gd32f2 Peripheral access API for GD32F20x Cortex-M3 microcontrollers (generated using svd2rust) - Peripheral access crates for the different XMC4xxx families of microcontrollers
zynq7000 - w7500x-pac Peripheral Access Crate for Wiznet's W7500x microcontrollers (generated using svd2rust) - ra2a1 Peripheral Access Crate for ra2a1 microcontrollers (generated using svd2rust) - ra2e1 Peripheral Access Crate for ra2e1 microcontrollers (generated using svd2rust) - ra2e2 Peripheral Access Crate for ra2e2 microcontrollers (generated using svd2rust) - ra2l1 Peripheral Access Crate for ra2l1 microcontrollers (generated using svd2rust) - ra4e1 Peripheral Access Crate for ra4e1 microcontrollers (generated using svd2rust) - ra4m1 Peripheral Access Crate for ra4m1 microcontrollers (generated using svd2rust) - ra4m2 Peripheral Access Crate for ra4m2 microcontrollers (generated using svd2rust) - ra4m3 Peripheral Access Crate for ra4m3 microcontrollers (generated using svd2rust) - ra4w1 Peripheral Access Crate for ra4w1 microcontrollers (generated using svd2rust) - ra6e1 Peripheral Access Crate for ra6e1 microcontrollers (generated using svd2rust) - ra6m1 Peripheral Access Crate for ra6m1 microcontrollers (generated using svd2rust) - ra6m2 Peripheral Access Crate for ra6m2 microcontrollers (generated using svd2rust) - ra6m3 Peripheral Access Crate for ra6m3 microcontrollers (generated using svd2rust) - ra6m4 Peripheral Access Crate for ra6m4 microcontrollers (generated using svd2rust) - ra6t1 Peripheral Access Crate for ra6t1 microcontrollers (generated using svd2rust) - ra6t2 Peripheral Access Crate for ra6t2 microcontrollers (generated using svd2rust) - da14531 Peripheral Access Crate for DA14531 Ultra-Low Power BT 5.1 System-on-Chip - Implementations of embedded-hal for microcontroller families and systems running some OS. -
NOTE You may be able to find even more HAL implementation crates by searching for the
embedded-hal-impl and embedded-hal keywords on crates.io!
bitbang-hal software protocol implementations for microcontrollers with digital::OutputPin and digital::InputPinftdi-embedded-hal for FTDI FTx232H chips connected to Linux systems via USBlinux-embedded-hal for embedded Linux systems like the Raspberry Pi. - freebsd-embedded-hal for embedded (or not) FreeBSD systems. - atsam4-hal - HAL for SAM4E, SAM4N and SAM4S - atsamd-hal - HAL for SAMD11, SAMD21, SAMD51 and SAME54 - atsamx7x-hal - HAL for SAM S70/E70/V70/V71-based devices - avr-hal - HAL for AVR microcontroller family and AVR-based boardspic32-hal - HAL for PIC32MX - nrf51-hal - nrf52810-hal - nrf52811-hal - nrf52832-hal - nrf52833-hal - nrf52840-hal - nrf9160-hal - Also check the list of NXP board support crates!
lpc55s6x-hal - lpc8xx-hal - HAL for lpc82x and lpc845 - mkw41z-hal - imxrt-hal - HAL for i.MX RT series. - rp2040-hal - HAL for the RP2040 dual-core system-on-chip - rp235x-hal - HAL for the RP2350 family of dual-core microcontrollers (used in the Raspberry Pi Pico 2 etc.) - e310x-hal - HAL for SiFive Freedom E310 MCUs - Also check the list of STMicroelectronics board support crates!
stm32f0xx-hal - stm32f1xx-hal - stm32f3xx-hal - stm32f4xx-hal - stm32f7xx-hal - stm32g0xx-hal - stm32h7xx-hal - stm32l0xx-hal - stm32l1xx-hal - stm32l151-hal - stm32l4xx-hal - stm32-hal - tm4c123x-halembassy-mspm0
msp430fr2x5x-hal
esp-hal - no_std Hardware Abstraction Layer for Espressif microcontrollers, officially supported by Espressifesp-idf-hal - std embedded-hal implementation for Espressif microcontrollers built on top of ESP-IDF, fully supported by the communitytomu-hal
toboot_config macro.xmc1100-hal - xmc4-hal - gd32vf103xx-hal - gd32vf103-hal - gd32f1x0-hal - da14531-hal HAL crate for DA14531 Ultra-Low Power BT 5.1 System-on-Chip - Crates tailored for general CPU architectures.
cortex-a Low-level access to Cortex-A processors (early state) - cortex-m Low-level access to Cortex-M processors - riscv Low-level access to RISC-V processors - Crates tailored for specific boards.
metro_m0 - Board support for the Metro M0 board in the atsamd-rs repo. It is an atsamd-rs tier 1 support board. metro_m4 - Board support for the Metro M4 board in the atsamd-rs repo. It is an atsamd-rs tier 1 support board. pyportal - Board support for the PyPortal board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. pygamer - Board support for the PyGamer board in the atsamd-rs repo. It is an atsamd-rs tier 1 support board. trellis_m4 - Board support for the NeoTrellis M4 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. feather-f405 - Board support for the Feather STM32F405 Express. feather_m0 - Board support for the Feather M0 board, and some variants in the atsamd-rs repo. It is an atsamd-rs tier 1 support board. feather_m4 - Board support for the Feather M4 board in the atsamd-rs repo. It is an atsamd-rs tier 1 support board. circuit_playground_express - Board support for the Circuit Playground Express board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. edgebadge - Board support for the EdgeBadge board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. gemma_m0 - Board support for the Gemma M0 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. itsybitsy_m0 - Board support for the ItsyBitsy M0 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. itsybitsy_m4 - Board support for the ItsyBitsy M4 Express board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. trinket_m0 - Board support for the Trinket M0 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. neo_trinkey - Board support for the neo trinkey board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. neokey_trinkey - Board support for the neokey trinkey board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. grand_central_m4 - Board support for the grand central m4 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. qt_py_m0 - Board support for the QT Py board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. adafruit-feather-rp2040 - Board Support Crate for the Adafruit Feather RP2040 adafruit-itsy-bitsy-rp2040 - Board Support Crate for the Adafruit ItsyBitsy RP2040 adafruit-kb2040 - Board Support Crate for the Adafruit KB2040 adafruit-macropad - Board Support Crate for the Adafruit Macropad adafruit-qt-py-rp2040 - Board Support Crate for the Adafruit QT Py RP2040 avr-hal - Board support crate for several AVR-based boards including the Arduino Uno and the Arduino Leonardoarduino_mkr1000 - Board support for the MKR 1000 WiFi board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. arduino_mkrvidor4000 - Board support for the MKR Vidor board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. arduino_mkrzero - Board support for the mkrzero board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. arduino_nano33iot - Board support for the Arduino Nano 33 IoT in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. avr_328p_hal - A zero-dependency, board support crate for the Arduino UNO R3 on the AVR_ATmega328p microcontroller featuring direct register-level control for performance. It leverages Rust's Option enum type to ensure only one part of the code has access to a specific driver. Documentationdwm1001 - Decawave DWM1001-DEV - microbit - micro:bit - nrf52840-dk-bsp - nrf52840-dk - Thingy:91-nrf9160 - thingy:91 - frdm-kw41z - FRDM-KW41Z - pimoroni-pico-explorer - Board Support for the Pimoroni Pico Explorerpimoroni-pico-lipo-16mb - Board Support for the Pimoroni Pico Lipo 16MBFor unlisted Pimoroni microcontroller boards, check this up-to-date list.
rp-pico - Board Support Crate for the RP2040-based Raspberry Pi Pico.The same repository includes support for numerous other development boards which use Raspberry Pi microcontrollers. A full list can be found in the repository documentation.
samd21_mini - Board support for the SAMD21 Mini Breakout in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. sparkfun-pro-micro-rp2040 - Board Support Crate for the RP2040 based Sparkfun Pro Micro.seedstudio-gd32v - Board support crate for the GD32 RISC-V Dev Board
xiao_m0 - Board support for the Seeed Studio Seeeduino XIAO in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. wio_lite_mg126 - Board support for the Seeed Studio wio_lite_mg126 in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. wio_lite_w600 - Board support for the Seeed Studio wio_lite_w600 in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. wio_terminal - Board support for the Seeed Studio wio_terminal in the atsamd-rs repo. It is an atsamd-rs tier 1 support board longan-nano - Board support package for the Longan Nano board
prussia - SDK for the PlayStation 2.f3 Board Support Crate for the STM32F3DISCOVERY - nucleo-f042k6 - Nucleo-F042K6nucleo-f103rb - Nucleo-F103RBnucleo-f401re - Nucleo-F401RE nucleo-h743zi Beginner-oriented support crate for the Nucleo H743ZI and Nucleo H743ZI2nucleo-h723zg Board support crate for the Nucleo H723ZGsolo-bsp Board Support Crate for Solo, an open source security token (WIP) - stm32f407g-disc Board Support Crate for the STM32F4DISCOVERY (WIP) - stm32f429i-disc Board Support Crate for the STM32F429DISCOVERY (WIP) - stm32f3-discovery Board Support Crate for the STM32F3DISCOVERY used in Rust Embedded Discovery book - teensy4-rs Board Support crate for the [Teensy 4.0]monotron - A 1980s home-computer style application for the Texas Instruments Stellaris Launchpad. PS/2 keyboard input, text output on a bit-bashed 800x600 VGA signal. Uses menu, vga-framebuffer and pc-keyboard.stellaris-launchpad - For the Texas Instruments Stellaris Launchpad and Tiva-C Launchpad tm4c129-launchpad - For the Texas Instruments TM4C129-XL Launchpad boardbetafpv-f3 - For the BetaFPV F3 drone flight controllertildagon - Board support for the EMF Camp Tildagon badgesodaq_one - Board support for the Sodaq one board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. sodaq_sara_aff - Board support for the Sodaq sara aff board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. serpente - Board support for the serpente board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. p1am_100 - Board support for the p1am_100 board in the atsamd-rs repo. It is an atsamd-rs tier 2 support board. The following crates provide HAL-like abstractions for subcomponents of embedded
devices that go beyond what is available in embedded-hal:
accelerometer - Generic accelerometer support, including traits and types for taking readings from 2 or 3-axis accelerometers and tracking device orientations - embedded-graphics: 2D drawing library for any size display - radio - Generic radio transceiver traits, mocks, and helpers - smart-leds: Support for addressable LEDs including WS2812 and APA102usb-device: Abstraction layer between USB peripheral crates & USB class crates - atat: Abstraction crate to ease writing AT based driver crates - embedded-nal: An Embedded Network Abstraction Layer - embedded-storage: An Embedded Storage Abstraction Layerswitch-hal: An "on"/"off" abstraction for input and output switches - You can also find many of these drivers on drive-rs; please consider adding your driver there (in the GitHub repo) while we work to port everything across.
Platform agnostic crates to interface external components. These crates use the embedded-hal
interface to support all the devices and systems that implement the embedded-hal
traits.
The list below contains drivers that have achieved the "released" status. To add a driver to this list, please ensure that your driver has a short blog post, article, or sufficiently explanatory README showing an example of its use. Ideally, this post would demonstrate using the device in a small project so that a Rust and/or embedded newcomer can also understand it. Otherwise, please add it to the WIP section below.
PCA95xx, PCF85xx) - Intro blog post - embedded-hal - Intro blog post - unsafe - github - usb-device. Includes concrete Keyboard (boot and NKRO), Mouse and Consumer Control implementations as well as support for building your own HID classes - github - no_std driver for the TB6612FNG motor driver - NOTE You may be able to find even more driver crates by searching for the embedded-hal-driver
keyword on crates.io!
Work in progress drivers. Help the authors make these crates awesome!
#![no_std] crates designed to run on resource-constrained devices.
u5 or u120bounded-registers provides a Tock-like API for MMIO registers with the addition of type-based bounds checking. - cmim, or Cortex-M Interrupt Move: A crate for Cortex-M devices to move data to interrupt context, without needing a critical section to access the data within an interrupt, and to remove the need for the "mutex dance" - cmsis-dsp-sys: Rust FFI bindings to the Arm CMSIS_5 math library - embedded-graphics with optional physics effects. Vec, String, LinearMap, RingBuffer backed by fixed-size buffers - ManagedSlice, ManagedMap backed by either their std counterparts or fixed-size buffers for #![no_std]. - no_std, no-alloc) fast fourier transforms - register-rs is Tock registers with added support for CPU register definitions using the same API as for the MMIO registers. This enables homogeneous interfaces to registers of all kinds. - BTreeSet and BTreeMap. - alloc. no_std parser for the Adafruit Bluefruit LE Connect controller protocol. - no_std environments, implementing Mahony, Madgwick, and VQF filters. - Work in progress crates. Help the authors make these crates awesome!
no_std post-quantum (ML-KEM/ML-DSA/SLH-DSA) and classical cryptography, side-channel hardened, zero-dependency. There are many ways to handle panics in embedded devices, these crates provide helpful variants.
dont_panic + dont_panic_slice: panic!()-like macro that causes linking error instead of panicking. May be used to statically ensure some code won't panic. no-panic: Attribute macro to require that the compiler prove a function can't ever panic. panic-abort: Causes an abort on panics (nightly-only) panic-halt: Halts the processor on panics panic-itm: Prints the panic through the chip's ITM to a debugger attached to the SWO pin (Cortex-M with ITM only)panic-never: This crate guarantees that your application is free of panicking branches. panic-persist: A panic handler crate inspired by panic-ramdump that logs panic messages to a region of RAM defined by the user, allowing for discovery of panic messages post-mortem using normal program control flow. - panic-probe: A panic handler that exits probe-run with an error code. panic-ramdump: Writes the panic message into the beginning of RAM and enters an infinite loop; the message can be extracted by attaching a debugger (Cortex-M only) panic-rtt: Set the panicking behavior to log to a JLINK debugger and loop. panic-rtt-target: Logs panic messages over RTT. Uses rtt-target. panic-semihosting: Prints the panic message via semihosting to an attached debugger (Cortex-M only)rp2040-panic-usb-boot: Save panic message in XIP RAM and reboot RP2040 to USB mode no_std Rust (single dependency: fdt). Runs at EL2, boots Linux with 4 vCPUs, virtio-blk/net, FF-A v1.1 SPMC at S-EL2. Targets QEMU virt machine (no real hardware tested yet).These materials may be outdated and reflect earlier practices, but they might still be helpful for reference.
This list is licensed under
Contribution to this crate is organized under the terms of the Rust Code of Conduct, the maintainer of this crate, the Resources team, promises to intervene to uphold that code of conduct.
(top 30 of 228)