awesome-embedded-rust
Curated list of resources for Embedded and Low-level development in the Rust programming language
AI summary
Embedded dev resources
A curated list of resources for embedded and low-level development in Rust.
- stars
- 6.4K
- forks
- 396
- watching
- 172
- awesome lists
- 2
- entries
- 608
What's in the list
608 links in 87 sections, with live GitHub stats.activeno commit in 2y
Community
Embedded WG
, including newsletters with progress updates
Community / Community Chat Rooms
- #rust-embedded:matrix.org Matrix room
You can usually find community members (including embedded WG members) in the official
- #rust-embedded-space:matrix.org
Most Embedded Rust related Matrix rooms are in the Rust Embedded Space
- embedded.rs-wasm-iot
English Telegram chat about Rust and WASM for microcontrollers and IoT
- embedded.rs
Telegram chat about Rust for microcontrollers in the Russian language
- #avr-rust:gitter.im
For discussion of using Embedded Rust on AVR devices
- #esp-rs:matrix.org
For discussion of using Embedded Rust on Espressif devices
- #nrf-rs:matrix.org
For discussion of using Embedded Rust on Nordic Semiconductor devices
- #probe-rs:matrix.org
For discussion of the Probe-rs debugging toolkit
- #rp-rs:matrix.org
For discussion of using Embedded Rust on RP2040 based devices
- #rtic-rs:matrix.org
For discussion of the Real-Time Interrupt-driven Concurrency framework
- #rust-embedded-graphics:matrix.org
For discussion of the crate and ecosystem
- #stm32-rs:matrix.org
For discussion of using Embedded Rust on STM32 based devices
- #atsamd-rs:gitter.im
For discussions of using Embedded Rust on ATSAMD devices
- #ethercrab:matrix.org
For discussion of general EtherCAT and the Rust implementation, EtherCrab
- rust-embedded:QQ group
Chinese community for Rust embedded
Books, blogs, and training materials / Free and public materials
- The Embedded Rust Book
An introductory book about using the Rust Programming Language on "Bare Metal" embedded systems, such as Microcontrollers
- The Rust on ESP Book
This book aims to provide a comprehensive guide on using the Rust programming language with Espressif SoCs and modules
- Embedded Rust (no_std) on Espressif
Training for Rust using no_std approach development on ESP32-C3
- Embedded Rust (std) on Espressif
Training for Rust using std approach development on ESP32-C3 by Ferrous Systems
- Discovery
by @rust-embedded — this book is an introductory course on microcontroller-based embedded systems that uses Rust as the teaching language. Original author: @japaric
- Cortex-M Quickstart
by @japaric – a template and introduction to embedded Rust, suitable for developers familiar with embedded development but new to embedded Rust
- Writing an OS in Rust
A blog series creating a small operating system in Rust
- MicroRust
Introductory book for embedded development in Rust on the micro:bit
- Physical Computing With Rust
A (WIP) guide to physical computing with Rust on the Raspberry Pi
Writing an embedded OS in Rust on the Raspberry Pi
A set of tutorials that give a guided, step-by-step tour of how to write a monolithic Operating System kernel for an embedded system from scratch. Runs on the Raspberry Pi 3 and the Raspberry Pi 4
- Writing embedded drivers in Rust isn't that hard
A guide to building an embedded-hal driver
Ferrous Systems' Embedded Training Courses: 2020-current edition
A hands-on training course for beginner and advanced learners of Embedded Rust, based on Nordic Semiconductor's nRF52840 hardware. This training was given at Oxidize Conferences and by to corporate customers
- Ferrous Systems' Knurling Sessions
are hands-on embedded projects that explore specific concepts using generally available hardware, building full systems and components using microcontrollers, sensors, and actuators
DSP on STM32F407G-DISC1
Unofficial oxidization of the book. The book isn't necessary to enjoy the examples and learn a functional DSP Rust coding style
- Building a sailing starter board with Rust (RTIC)
A step-by-step story/guide to build STM32-based PCB and program it with Rust for fun and games
- STM32F4xx with Embedded Rust at the HAL
A blog containing a series of tutorials demonstrating the use of several peripherals through simple examples leveraging the stm32f4xx-hal crate
- Embedded Rust programming playlist
Various livestreams with Embedded Rust live coding
- ESP32-C3 Rust Tutorials
Short videos and implementing various peripherals of the ESP32-C3 with the end goal of creating a complete data logger application
- Tweede golf's workshop
A full workshop about Rust and embedded Rust. The embedded parts use the nRF52840-DK and a LIS3DH breakout board. ( )
Books, blogs, and training materials / Paid and commercially available materials
- Simplified Embedded Rust: Standard Library Edition
This book provides a quick path to start learning embedded Rust with minimal setup. Book is based on ESP devices and the Wokwi Simulator. This edition uses the standard library development approach which is based on the ESP-IDF framework
- Simplified Embedded Rust: Core Library Edition
This book provides a quick path to start learning embedded Rust with minimal setup. Book is based on ESP devices and the Wokwi Simulator. This edition uses the core library development approach for bare metal development
Tools
xargo
Rust package manager with support for non-default std libraries — build Rust runtime for your embedded system
Tools / xargo
cargo-xbuild
xargo is great, but since it's in maintenance mode, is catching up as its intended replacement
Tools
svd2rust
Generate Rust structs with register mappings from SVD files
edc2svd
Generate SVD files for PIC32 devices from EDC files. -
- embedded-hal-mock
Mock implementation of traits for testing without accessing real hardware. -
- bindgen
Automatically generates Rust FFI bindings to C and C++ libraries. -
cortex-m semihosting
Semihosting for ARM Cortex-M processors
bobbin-cli
A Rust command line tool to simplify embedded development and deployment
ferros
A Rust-based userland which also adds compile-time assurances to seL4 development
- cargo-flash
A small cargo subcommand to download your binary to your target chip. -
- cargo-embed
A superset of cargo-flash with additional useful features like configuration file support, an RTT terminal, or a GDB server. -
cargo-hf2
A small cargo subcommand to download cargo builds to Microsoft UF2 bootloaders via HID USB . -
cargo-bloat
Find out what takes most of the space in your executable
- cargo-call-stack
Static, whole program stack usage analyzer
- cargo-dfu
Cargo extension for flashing embedded rust programs via DFU
espflash
Serial flasher utility for Espressif SoCs and modules. -
espup
Tool for installing and maintaining Espressif Rust ecosystem. -
uf2
Converts binary files to Microsoft's UF2 format for copying over to mass storage device uf2 bootloaders -
probe-rs
: a modern, embedded debugging toolkit, written in Rust
- Knurling Tools
are developed by to ease the development process for building, debugging, and testing embedded Rust systems. These tools include:
Tools / Knurling Tools
defmt
: a highly efficient logging framework that targets resource-constrained devices, like microcontrollers
flip-link
, a linker wrapper that provides stack overflow protection without an MMU by flipping the standard memory layout of ARM Cortex-M programs
app-template
, a powered project template for quickly setting up new projects using the Knurling Tools
defmt-test
, an embedded test harness that lets you write and run unit tests as if you were using the built-in attribute, but will run on an embedded target
Tools
embedded-hal-compat
, a compatibility layer to provide interoperability between and hal implementations and drivers
Embassy start
is a GitHub repo template for setting up async embedded Rust projects that use . This particular template targets nRF hardware and networking using the Uarte for the purposes of illustration only
- svd-generator
CLI tool to parse flattened device tree files, and create a SVD file. -
Real-time / Real-time Operating System (RTOS)
- Drone OS
An Embedded Operating System for writing real-time applications in Rust
FreeRTOS.rs
Rust interface for the FreeRTOS API
FreeRTOS-rust
Rust interface for FreeRTOS with Rust entry point and build support crate
- RIOT-OS
directly supports applications written in Rust, both in terms of build system integration and by having safe and idiomatic wrappers
- Tock
An embedded operating system designed for running multiple concurrent, mutually distrustful applications on low-memory and low-power microcontrollers
Hubris
A real-time operating system built by Oxide Computer to run the Service Controller processor in the mainboards of their rack-mount servers
Real-time / Real-time tools
- RTIC v1.0
Real-Time Interrupt-driven Concurrency — A concurrency framework for building real-time systems:
Real-time / Real-time tools / RTIC v1.0
cortex-m rtic
RTIC framework for ARM Cortex-M microcontrollers
msp430 rtfm
RTFM framework for MSP430 MCUs
Peripheral Access Crates / Microchip
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 -
Peripheral Access Crates / Nordic
- 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) -
Peripheral Access Crates / NXP
Peripheral Access Crates / Raspberry Pi Silicon
- rp2040-pac
Peripheral access API for the RP2040 dual-core system-on-chip (generated using svd2rust) -
Peripheral Access Crates / SiFive
e310x
svd2rust generated interface to SiFive MCUs -
Peripheral Access Crates / Silicon Labs
- efm32pg12-pac
Peripheral access API for Silicon Labs EFM32PG12 microcontrollers -
Peripheral Access Crates / StarFive
- j71xx-pac
svd2rust generated interface to StarFive MCUs -
Peripheral Access Crates / STMicroelectronics
Peripheral Access Crates / Texas Instruments
Peripheral Access Crates / MSP430
- msp430g2553
Peripheral access API for MSP430G2553 microcontrollers (generated using svd2rust)
Peripheral Access Crates / MSP430 / msp430g2553
msp430 quickstart
some examples for msp430
Peripheral Access Crates / MSP430
- msp430fr2355
Peripheral access API for MSP430FR2355 microcontrollers (generated using svd2rust)
Peripheral Access Crates / Espressif
Peripheral Access Crates / Ambiq Micro
- 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)
Peripheral Access Crates / GigaDevice
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 / XMC
Peripheral Access Crates / Vorago
Peripheral Access Crates / Wiznet
- w7500x-pac
Peripheral Access Crate for Wiznet's W7500x microcontrollers (generated using svd2rust) -
Peripheral Access Crates / Renesas
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 -
HAL implementation crates / OS
- bitbang-hal
software protocol implementations for microcontrollers with digital::OutputPin and digital::InputPin
- ftdi-embedded-hal
for FTDI FTx232H chips connected to Linux systems via USB
- linux-embedded-hal
for embedded Linux systems like the Raspberry Pi. -
- freebsd-embedded-hal
for embedded (or ) FreeBSD systems. -
HAL implementation crates / Microchip
- 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 boards
- pic32-hal
HAL for PIC32MX -
HAL implementation crates / Nordic
HAL implementation crates / NXP
- lpc8xx-hal
HAL for lpc82x and lpc845 -
imxrt-hal
HAL for i.MX RT series. -
HAL implementation crates / Raspberry Pi Silicon
- rp2040-hal
HAL for the RP2040 dual-core system-on-chip -
HAL implementation crates / SiFive
e310x-hal
HAL for SiFive MCUs -
HAL implementation crates / STMicroelectronics
HAL implementation crates / STMicroelectronics / stm32f0xx-hal
- http://www.st.com/en/evaluation-tools/nucleo-f042k6.html
Has examples that can run on boards like the [Nucleo-F042K6] and similar boards [Nucleo-F042K6]:
HAL implementation crates / STMicroelectronics
HAL implementation crates / STMicroelectronics / stm32f1xx-hal
- https://stm32duinoforum.com/forum/wiki_subdomain/index_title_Blue_Pill.html
Can be run on boards like the [Blue pill], [Nucleo-F103RB], and similar boards [Blue pill]: [Nucleo-F103RB]:
HAL implementation crates / STMicroelectronics
HAL implementation crates / STMicroelectronics / stm32l4xx-hal
- Nucleo-L432KC
Generic hal support for stm32l4 devices, has examples that can run on boards like the , , and similar boards
HAL implementation crates / STMicroelectronics
HAL implementation crates / Texas Instruments
HAL implementation crates / MSP430
HAL implementation crates / Espressif
HAL implementation crates / Silicon Labs
HAL implementation crates / Silicon Labs / tomu-hal
- Tomu
HAL implementation targeted for USB board with EFM32HG309F64 ARMv6-M core. Has support to configure directly from an application via the macro
HAL implementation crates / XMC
HAL implementation crates / GigaDevice
HAL implementation crates / Vorago
HAL implementation crates / Vorago / va108xx-hal
HAL implementation crates / Renesas
- da14531-hal
HAL crate for DA14531 Ultra-Low Power BT 5.1 System-on-Chip -
HAL implementation crates / StarFive
- j71xx-hal
HAL crate for StarFive MCUs -
Architecture support crates / ARM
Architecture support crates / RISC-V
riscv
Low-level access to RISC-V processors -
Architecture support crates / MIPS
Board support crates / 1BitSquared
- onebitsy
Board support crate for the STM32F4-based board -
Board support crates / Adafruit
- metro_m0
Board support for the in the repo. It is an board
- metro_m4
Board support for the in the repo. It is an board
- pyportal
Board support for the in the repo. It is an board
- pygamer
Board support for the in the repo. It is an board
- trellis_m4
Board support for the in the repo. It is an board
- feather-f405
Board support for the
- feather_m0
Board support for the , and some variants in the repo. It is an board
- feather_m4
Board support for the in the repo. It is an board
- circuit_playground_express
Board support for the in the repo. It is an board
- edgebadge
Board support for the in the repo. It is an board
- gemma_m0
Board support for the in the repo. It is an board
- itsybitsy_m0
Board support for the in the repo. It is an board
- itsybitsy_m4
Board support for the in the repo. It is an board
- trinket_m0
Board support for the in the repo. It is an board
- neo_trinkey
Board support for the in the repo. It is an board
- neokey_trinkey
Board support for the in the repo. It is an board
- grand_central_m4
Board support for the in the repo. It is an board
- qt_py_m0
Board support for the in the repo. It is an board
adafruit-feather-rp2040
Board Support Crate for the
adafruit-itsy-bitsy-rp2040
Board Support Crate for the
adafruit-kb2040
Board Support Crate for the
adafruit-macropad
Board Support Crate for the
adafruit-qt-py-rp2040
Board Support Crate for the
Board support crates / Arduino
avr-hal
Board support crate for several AVR-based boards including the Arduino Uno and the Arduino Leonardo
- arduino_mkr1000
Board support for the in the repo. It is an board
- arduino_mkrvidor4000
Board support for the in the repo. It is an board
- arduino_mkrzero
Board support for the in the repo. It is an board
- arduino_nano33iot
Board support for the in the repo. It is an board
Board support crates / Nordic
Board support crates / NXP
Board support crates / Pimoroni
pimoroni-pico-explorer
Board Support for the
pimoroni-pico-lipo-16mb
Board Support for the
Board support crates / Raspberry Pi
rp-pico
Board Support Crate for the RP2040-based Raspberry Pi Pico
Board support crates / Sparkfun
- samd21_mini
Board support for the in the repo. It is an board
sparkfun-pro-micro-rp2040
Board Support Crate for the RP2040 based Sparkfun Pro Micro
Board support crates / SeeedStudio
seedstudio-gd32v
Board support crate for the
- xiao_m0
Board support for the in the repo. It is an board
- wio_lite_mg126
Board support for the in the repo. It is an board
- wio_lite_w600
Board support for the in the repo. It is an board
- wio_terminal
Board support for the in the repo. It is an board
Board support crates / SiFive
hifive1
Board support crate for and boards -
Board support crates / Sipeed
longan-nano
Board support package for the
Board support crates / Sony
prussia
SDK for the PlayStation 2
Board support crates / STMicroelectronics
- f3
Board Support Crate for the -
- nucleo-f042k6
[Nucleo-F042K6]
- nucleo-f103rb
[Nucleo-F103RB]
nucleo-h743zi
Beginner-oriented support crate for the Nucleo H743ZI and Nucleo H743ZI2
nucleo-h723zg
Board support crate for the Nucleo H723ZG
- solo-bsp
Board Support Crate for , an open source security token (WIP) -
- stm32f407g-disc
Board Support Crate for the (WIP) -
- stm32f429i-disc
Board Support Crate for the (WIP) -
- stm32f3-discovery
Board Support Crate for the used in -
Board support crates / Teensy
teensy4-rs
Board Support crate for the [Teensy 4.0]
Board support crates / Vorago
Board support crates / Vorago / vorago-reb1
Board support crates / Texas Instruments
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 , and
- stellaris-launchpad
For the Texas Instruments Stellaris Launchpad and Tiva-C Launchpad
tm4c129-launchpad
For the Texas Instruments TM4C129-XL Launchpad board
Board support crates / Special Purpose
betafpv-f3
For the BetaFPV F3 drone flight controller
Board support crates / Sodaq
- sodaq_one
Board support for the in the repo. It is an board
- sodaq_sara_aff
Board support for the in the repo. It is an board
Board support crates / Other
Component abstraction crates
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 APA102
usb-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 Layer
switch-hal
: An "on"/"off" abstraction for input and output switches -
Driver crates
- AD983x
SPI - AD9833/AD9837 waveform generators / DDS - -
- adafruit-alphanum4
I2C - Driver for based on the ht16k33 chip -
- ADE791x
SPI - ADE7912/ADE7913 3-Channel, Isolated, Sigma-Delta ADC - -
- ADS1x1x
I2C - 12/16-bit ADCs like ADS1013, ADS1015, ADS1115, etc. - -
- ADXL313
SPI - 3-axis accelerometer -
- ADXL343
I2C - 3-axis accelerometer -
- ADXL355
SPI - 3-axis accelerometer - -
- AEM10900
I2C - Energy Harvester - -
AFE4404
I2C - Pulse oximeter -
- AHT20
I2C - Humidity and temperature sensor - -
- AHT20-driver
I2C - Humidity and temperature sensor - - -
- AnyLeaf
I2C - pH sensor module - -
- AT86RF212
SPI - Low power IEEE 802.15.4-2011 ISM RF Transceiver - -
- BlueNRG
SPI - driver for BlueNRG-MS Bluetooth module -
- BMA400
I2C/SPI - Bosch 12-bit 3-axis accelerometer -
- BNO055
I2C - Bosch Sensortec BNO055 9-axis IMU driver -
- CD74HC4067
GPIO - 16-channel digital and analog multiplexer - - -
- dht-sensor
1-Wire - DHT11/DHT22 temperature/humidity sensor driver - -
- embedded-dht-rs
1-Wire, I2C - DHT11/DHT20/DHT22 temperature/humidity sensor driver - -
- DRV8825
DRV8825 Stepper Motor Driver (based on ) - -
- DS1307
I2C - Real-time clock driver - -
- ebyte-e32
SERIAL - Ebyte E32 LoRa module driver - -
- EEPROM24x
I2C - 24x series serial EEPROM driver - -
- embedded-ccs811
I2C - Gas and VOC sensor driver for monitoring indoor air quality - -
- embedded-sdmmc
SPI - SD/MMC Card Driver with MS-DOS Partition and FAT16/FAT32 support -
- ENC28J60
SPI - Ethernet controller - -
- FH101RF
SPI - Wake-Up Radio - -
FUSB302B
I2C - Programmable USB Type‐C Controller with USB Power Delivery -
- HC-12
SERIAL - Wireless serial transceiver module - - -
- HTS221
I2C - Humidity and temperature sensor - -
- IIS2MDC
I2C - ST's High accuracy, ultra-low-power, 3-axis digital output magnetometer -
- ISM330DHCX
I2C - ST's IMU with 3D accelerometer, 3D gyroscope, ML core and more -
- keypad
GPIO - Keypad matrix circuits - -
- KXCJ9
I2C - KXCJ9/KXCJB 3-axis accelerometers - -
- L3GD20
SPI - Gyroscope - -
- LSM303DLHC
I2C - Accelerometer + compass (magnetometer) - -
- MAX6675
SPI - A driver for the MAX6675 digital thermocouple converter - -
- MAX6955
I2C - Driver for Alphanumeric LED display driver - -
- MAX116xx-10bit
SPI - Driver for the MAX11619-MAX11621, MAX11624 and MAX11625 10-bit ADCs - -
- MCP25LCXX
SPI - Driver for Microchip's 25LC series of EEPROMs -
- MCP3008
SPI - 8 channel 10-bit ADC - -
- MCP3425
I2C - 16-bit ADC - -
- MCP794xx
I2C - Real-time clock / calendar driver - -
- MMA7660FC
I2C - 3-axis accelerometer -
OPT300x
I2C - Ambient light sensor family driver - -
PAC194X
I2C - Single/multi channel power monitor - -
- port-expander
I2C - Driver for I2C port expanders (supports , ) - -
- pwm-pca9685
I2C - 16-channel, 12-bit PWM/Servo/LED controller - -
- rainbow-hat-rs
I2C/SPI/GPIO - Pimoroni Rainbow HAT driver for Raspberry Pi - -
- rotary-encoder-hal
GPIO - A rotary encoder driver using - -
- sega-controller
GPIO - Sega controller input - -
- SGP30
I2C - Gas sensor - -
- SH1106
I2C - Monochrome OLED display controller -
- shift-register-driver
GPIO - Shift register - -
- Si4703
I2C - FM radio turner (receiver) driver - -
- SRAM23x
SPI - Microchip 23x series serial SRAM/NVSRAM driver - -
- SSD1306
I2C/SPI - OLED display controller - -
- SSD1309
I2C/SPI - OLED display controller - -
- STSPIN220
STSPIN220 Stepper Motor Driver (based on ) - -
- Sx127x
SPI - Long Range Low Power Sub GHz (Gfsk, LoRa) RF Transceiver - -
- Sx128x
SPI - Long range, low power 2.4 GHz (Gfsk, Flrc, LoRa) RF Transceiver - -
- TC72
SPI - Microchip TC72 temperature sensor -
- TCN75A
I2C - Microchip TCN75A temperature sensor -
- TMP006
I2C - Contact-less infrared (IR) thermopile temperature sensor driver -
- TMP1x2
I2C - TMP102 and TMP112x temperature sensor driver -
- TSIC
GPIO - TSIC 306 temperature sensor driver -
- TSL256X
I2C - Light Intensity Sensor - -
- VEML6030/VEML7700
I2C - Ambient light sensors - -
- VEML6075
I2C - UVA and UVB light sensor - -
- usbd-serial
USB CDC-ACM class (serial) implementation - -
- usbd-hid
USB HID class implementation - -
- usbd-hid-device
USB HID class implementation without - -
usbd-human-interface-device
Batteries included embedded USB HID library for . Includes concrete Keyboard (boot and NKRO), Mouse and Consumer Control implementations as well as support for building your own HID classes - -
- usbd-midi
USB MIDI class implementation - -
- usbd-webusb
USB webUSB class implementation - -
- SHTCx
I2C - Temperature / humidity sensors - -
- ST7789
SPI - An embedded-graphics compatible driver for the popular lcd family from Sitronix used in the PineTime watch - -
- DW1000
SPI - Radio transceiver (IEEE 802.15.4 and position tracking) - -
- Adafruit-7segment
I2C - Driver for Adafruit 7-segment LED Numeric Backpack based on the ht16k33 chip - -
- ST7565
SPI - An embedded-graphics compatible driver for LCD displays based on the ST7565 chip - -
- tb6612fng
A driver for the TB6612FNG motor driver -
- vl53l1x-uld
I2C - A pure-rust driver for the -
- i2c-multiplexer
I2C - An I2C Multiplexer library that supports the PCA9546 and TCA9546A chips - -
- SHT31-rs
I2C - Fully supported SHT temperature / humidity sensors - -
Driver crates / WIP
- AD9850
Embedded driver for the AD9850 DDS synthesizer chip -
AFE4400
SPI - Pulse oximeter
- APDS9960
I2C - Proximity, ambient light, RGB, and gesture sensor -
AS5048A
SPI - AMS AS5048A Magnetic Rotary Encoder
AXP209
I2C - Power management unit
ad57xx
SPI - Quad and dual channel DAC -
BH1750
I2C - ambient light sensor (lux meter)
- BME280
A rust device driver for the Bosch BME280 temperature, humidity, and atmospheric pressure sensor and the Bosch BMP280 temperature and atmospheric pressure sensor
bme680
I2C - Temperature / humidity / gas / pressure sensor -
- BMI160
I2C / SPI - Inertial Measurement Unit -
- BMP280
A platform agnostic driver to interface with the BMP280 pressure sensor
- CC1101
SPI - Sub-1GHz RF Transceiver -
DS3231
I2C - real-time clock
DS3234
SPI - Real-time clock
- DS323x
I2C/SPI - Real-time clocks (RTC): DS3231, DS3232 and DS3234 -
- epd-waveshare
SPI - driver for E-Paper Modules from Waveshare
- embedded-morse
Output morse messages -
- embedded-nrf24l01
SPI+GPIO - 2.4 GHz radio
- Ft6x36
I2C - Rust driver for focal tech touch screen FT6236, FT6336 -
- grove-matrix-led-my9221-rs
I2C - Rust driver for Grove RGB Matrix Led with my-9221 Driver -
- GridEYE
I2C - Rust driver for Grid-EYE / Panasonic AMG88(33) -
HC-SR04
DIO - Ultrasound sensor
- HD44780-driver
GPIO - LCD controller -
- HD44780
Parallel port - LCD controller
- HM11
USART - HM-11 bluetooth module AT configuration crate -
- HRS3300
I2C - Heart rate sensor / monitor used in the PineTime smartwatch, for example. -
- HDC20xx
I2C - Temperature and humidity sensor compatible with HDC2080, HDC2021 and HDC2010. -
hub75
A driver for rgb led matrices with the hub75 interface -
- hzgrow-r502
UART capacitive fingerprint reader -
iAQ-Core
I2C - iAQ-Core-C/iAQ-Core-P Gas and VOC sensor driver for monitoring indoor air quality
ILI9341
SPI - TFT LCD display
- INA260
I2C - power monitor -
- ISL29125
I2C - RGB Color Light Sensor with IR Blocking Filter -
- IST7920
SPI monochrome LCD display -
- LM75
I2C - Temperature sensor and thermal watchdog (also compatible with LM75A, LM75B, LM75C, AT30TS75A, DS1775, DS75, DS7505, G751, MAX7500/1/2/3/4, MAX6625, MCP9800/1/2/3, STDS75, TCN75, PCT2075) -
- lp586x
I2C/SPI - LED matrix driver
LS010B7DH01
SPI - Memory LCD
- LSM303AGR
I2C/SPI - 3D accelerometer + 3D magnetometer. (Used in e.g. micro:bit boards)
- LSM303C
A platform agnostic driver to interface with the LSM303C (accelerometer + compass)
- LSM9DS1
I2C/SPI - 9-axis motion sensor module
- ltr-559
I2C - Ambient Light Sensor and Proximity sensor
lvgl
no_std port -
- M95320
SPI - STMicroelectronics Serial flash EEPROM -
MAG3110
I2C - Magnetometer
- MAX17048/9
I2C - LiPo Fuel gauge, battery monitoring IC -
MAX170xx
I2C - LiPo Fuel gauge, battery monitoring ICs compatible with MAX17043/4, MAX17048/9, MAX17058/9. -
- MAX3010x
I2C - Pulse oximeter and heart-rate sensor. ATM Compatible with MAX30102. -
MAX31855
SPI - Thermocouple digital converter -
- MAX31865
SPI - RTD to Digital converter -
- MAX44009
I2C - Ambient light sensor -
MAX7219
SPI - LED display driver -
- MCP4725
I2C - 12-bit DAC -
- MCP49xx
SPI - 8/10/12-bit DACs like MCP4921, MCP4922, MCP4801, etc. -
- MCP9808
I2C - Temperature sensor -
- MCP4x
SPI - Digital potentiometers (digipot) like MCP41010, MCP41050, MCP41100, MCP42010, MCP42050 and MCP42100, etc. -
MFRC522
SPI - RFID tag reader/writer
- midi-port
UART - MIDI input -
- MLX9061x
I2C - MLX90614/MLX90615 Contact-less infrared (IR) temperature sensor driver. -
- MMA8x5x
I2C - Tri-axis accelerometers like MMA8451Q, MMA8452Q, MMA8453Q, MMA8652FC and MMA8653FC. -
motor-driver
Motor drivers: L298N, TB6612FNG, etc
- MPU6050
I2C - no_std driver for the MPU6050
- MPU9250
no_std driver for the MPU9250 (and other MPU* devices) & onboard AK8963 (accelerometer + gyroscope + magnetometer IMU)
- MS5637
no_std I2C driver for the MS5637 temperature and pressure sensor
NRF24L01
SPI - 2.4 GHz wireless communication
- OneWire
1wire - OneWire protocol implementation with drivers for devices such as -
PCD8544
SPI - 48x84 pixels matrix LCD controller
- PCD8544_rich
SPI - Rich driver for 48x84 pixels matrix LCD controller -
- PCF857x
I2C - I/O expanders: PCF8574, PCF8574A, PCF8575
- radio-at86rf212
SPI - Sub GHz 802.15.4 radio transceiver
RFM69
SPI - ISM radio transceiver
RN2xx3
Serial - A driver for the RN2483 / RN2903 LoRaWAN modems by Microchip
- SCD30
I2C - CO₂ sensor -
SHT2x
I2C - temperature / humidity sensors
SHT3x
I2C - Temperature / humidity sensors
SI5351
I2C - clock generator
SI7021
I2C - Humidity and temperature sensor
SPL06-007
I2C - Pressure and temperature sensor -
spi-memory
SPI - A generic driver for various SPI Flash and EEPROM chips -
- SSD1320
SPI - Graphical OLED display controller -
- SSD1322
SPI - Graphical OLED display controller -
- SSD1322_rs
SPI - Async graphics driver for SSD1322 screen -
- SSD1351
SPI - 16bit colour OLED display driver -
- SSD1675
SPI - Tri-color ePaper display controller -
st7032i
I2C - Dot Matrix LCD Controller driver (Sitronix ST7032i or similar). -
- ST7735-lcd
SPI - An embedded-graphics compatible driver for the popular lcd family from Sitronix
- ST7920
SPI - LCD displays using the ST7920 controller
stm32-eth
MCU - Ethernet
SX1278
SPI - Long range (LoRa) transceiver
SX1509
I2C - IO Expander / Keypad driver
- TCS3472
I2C - RGB color light sensor -
- TPA2016D2
I2C - A driver for interfacing with the Texas Instruments TPA2016D2 Class-D amplifier -
- VEML6040
I2C - RGBW color light sensor -
- VEML6070
I2C - UVA light sensor -
- VEML7700
I2C - Ambient light sensors -
vesc-comm
A driver for communicating with
- VL53L0X
A platform agnostic driver to interface with the vl53l0x (time-of-flight sensor)
- w5500
SPI - Ethernet Module with hardwired protocols : TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE -
- xCA9548A
I2C - I2C switches/multiplexers: TCA9548A, PCA9548A -
ublox-cellular-rs
Serial - Cellular driver for the full Ublox cellular serial based family
- atwinc1500-rs
SPI - A host driver for the Atwinc1500 network controller
HX711
GPIO - An interrupt-based driver for the HX711 Load Cell Amplifier IC. no-std
no-std crates
- adskalman
: Kalman filter and Rauch-Tung-Striebel smoothing implementation
- atomic
: Generic Atomic
- bbqueue
: A SPSC, statically allocatable queue based on BipBuffers suitable for DMA transfers -
- bitmatch
: A crate that allows you to match, bind, and pack the individual bits of integers. -
- biquad
: A library for creating second-order IIR filters for signal processing based on Biquads, where both a Direct Form 1 (DF1) and Direct Form 2 Transposed (DF2T) implementation is available
- bit_field
: manipulating bitfields and bitarrays -
- bluetooth-hci
: device-independent Bluetooth Host-Controller Interface implementation
- bounded-registers
A high-assurance memory-mapped register code generation and interaction library. provides a Tock-like API for MMIO registers with the addition of type-based bounds checking. -
- cam-geom
: Geometric models of cameras for photogrammetry
- combine
: parser combinator library -
console-traits
: Describes a basic text console. Used by and implemented by
- 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 math library -
- dcmimu
: An algorithm for fusing low-cost triaxial MEMS gyroscope and accelerometer measurements
- debouncr
: A simple no-std input debouncer to detect rising/falling edges with minimal RAM requirements
- device-driver
: A toolkit to write better device drivers, faster
drogue-device
: A distribution of tools and examples for building embedded applications in Rust
- dummy-pin
: Dummy implementations of the input/output pin traits
crossbus
: A Platform-Less, Runtime-Less Actor Computing Model
ector
: An async actor framework for embedded, based on embassy
embassy
: A set of embedded async tools to make async/await a first-class option for embedded development
- embedded-cli
: CLI library with autocompletion, subcommands, options, help and history support
- embedded-crc-macros
: Macros implementing portable CRC algorithms and build-time lookup table generation
embedded-update
: Pluggable firmware update protocol for embedded devices
embedded-tls
: A TLS 1.3 implementation that runs in a no-std environment
- embedded-websocket
: A lightweight server and client websocket library for embedded systems
- endian_codec
: (En/De)code rust types as packed bytes with specific order (endian). Supports derive. -
ethercrab
: A Rust implementation of the industrial automation protocol -
- fixed-fft
: Fixed-point Fast Fourier Transform -
gcode
: A gcode parser for no-std applications -
- gdbstub
: zero-allocation, pure Rust implementation of the GDB Remote Serial Protocol -
- heapless
: provides , , , backed by fixed-size buffers -
- idsp
: integer DSP algorithms (trigonometry, filtering, PLL...) tuned for precision and speed -
- ieee802154
: Partial implementation of the IEEE 802.15.4 standard -
- infrared
: infrared remote control library for embedded rust -
- intrusive-collections
: intrusive (non-allocating) singly/doubly linked lists and red-black trees -
- inverted-pin
: Implementations of the input/output pin traits with inverted logic
- irq
: utilities for writing interrupt handlers (allows moving data into interrupts, and sharing data between them) -
- lakers
: Microcontroller-optimized implementation, with bindings for C and Python -
lorawan-encoding
: A LoRaWAN packet codec
lorawan-device
: A LoRaWAN MAC implementation supporting both event-driven and async mode
- managed
: provides , backed by either their std counterparts or fixed-size buffers for . -
- micropb
: Rust Protobuf library targetting embedded systems and no_std environments without an allocator. -
- mqtt-sn
: Implementation of the MQTT-SN protocol -
- microfft
: Embedded-friendly ( , no- ) fast fourier transforms -
micromath
: Embedded Rust math library featuring fast, safe floating point approximations for common arithmetic operations, 2D and 3D vector types, and statistical analysis -
- miniconf
: Lookup/enumerate/serialize/deserialize nodes in trees of heterogeneous structs/arrays by path/key -
- minimq
: A minimal MQTT5 client designed for no_std platforms -
moonboot
: OTA Bootloader Construction Framework for Rust no_std environments, especially embedded devices without an OS
- nalgebra
: general-purpose and low-dimensional linear algebra library -
- nom
: parser combinator framework -
- null-terminated
: generic null-terminated arrays -
- num-format
: Crate for producing string representations of numbers, formatted according to international standards, e.g. "1,000,000" for US English -
pc-keyboard
: A PS/2 keyboard protocol driver. Transport (bit-banging or SPI) agnostic, but can convert Set 2 Scancodes into Unicode
- qei
: A qei wrapper that allows you to extend your qei timers from a 16-bit integer to a 64-bit integer. -
- qemu-exit
: Quit a running QEMU session with user-defined exit code. Useful for unit or integration tests using QEMU. -
- RampMaker
: Stepper Motor Acceleration Ramp Generator -
register-rs
: Unified interface for MMIO and CPU registers. Provides type-safe bitfield manipulation. 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. -
- scapegoat
: Safe, stack-only alternative to and . -
- scroll
: extensible and endian-aware Read/Write traits for generic containers -
- sized-dst
: Owned container for dynamically-sized types (such as trait objects) backed by stack memory. -
- Slint
: Declarative GUI framework that works on microcontrollers
- smbus-pec
: Minimal portable System Management Bus Packet Error Code calculation algorithm
smoltcp
: a small TCP/IP stack that runs without
- sntpc
: Rust SNTP client to get a timestamp from NTP servers. -
static-bytes
: Help work with buffers without dynamic allocation. Implement traits from bytes crate
- Stepper
: Universal Stepper Motor Interface -
- tinybmp
: No-std, no-alloc BMP parser for embedded systems. -
vga-framebuffer
: A VGA signal generator and font renderer for VGA-less microcontrollers. Used by to generate 48 by 36 character display using 3 SPI peripherals and a timer
usb-pd
: USB-PD library, supports using the FUSB302B as a Sink driver, with Source functionality planned
- wyhash
: A fast, simple and portable hashing algorithm and random number generator. -
- adafruit-bluefruit-protocol
: A parser for the . -
wtx
: Among other things, provides implementations to interact with HTTP, WebSockets and Databases
no-std crates / WIP
Panic handling
- dont_panic
+ : 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 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 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
panic-semihosting
: Prints the panic message via semihosting to an attached debugger (Cortex-M only)
Firmware projects
rmk
: Mechanical keyboard firmware for stm32/rp2040, supports vial/dynamic keymap/eeprom, written in Rust
anne-key
: Alternate keyboard firmware for the Obins ANNE Pro
μLA
: Micro Logic Analyzer for RP2040
air-gradient-pro-rs
: Bootloader, firmware, and CLI tools for the AirGradient PRO
Stabilizer
: Firmware for a DSP tool used in quantum physics experimentation, includes telemetry via MQTT and run-time configuration
Booster
: Firmware for an RF power amplifier, including telemetry via MQTT and run-time configuration
Thermostat EEM
: Firmware for a multi-channel temperature controller used in physics experiments
Card/IO ECG
: Firmware for a business-card-sized ECG device with Wifi connectivity
BillMock
: Firmware for credit card terminal add-on hardware to install on Korean arcade machines
LuLuu
: Firmware for a custom RP2040-based display controller that streams animated images from a microSD card to a small LCD display
prinThor
: 3DPrinter/CNC/Engraver firmware framework powered by rust embassy for stm32 families and rp2040
Old books, blogs, and training materials
- Exploring Rust on Teensy
by @branan — Beginner set of articles on getting into embedded dev in Rust
- Pragmatic Bare Metal Rust
A starter article about starting Rust development on STM32 microcontrollers (cubeMX + FFI)
- Using Rust in an Embedded Project: A Simple Example
Article and some links on setting up Rust cross-compiling
- Robigalia
general purpose robust operating system in Rust running on secure seL4 microkernel
- intermezzOS
A small teaching operating system in Rust. A book with some explanations is also included
- Fearless concurrency
by @japaric — How to easily develop Rust programs for pretty much any ARM Cortex-M microcontroller with memory-safe concurrency
- Internet of Streams
A video series by building a bare metal IoT Sensor Node Platform from (nearly) scratch in Rust
Ferrous Systems' Embedded Training Courses: 2019 edition
A hands-on training course for beginner and advanced learners of Embedded Rust, based on Nordic Semiconductor's nRF52 and Decawave's DWM1001-DEV hardware. This training was given at Oxidize Conferences and by Ferrous Systems to corporate customers
License
Nothing in this list matches your filter.
Featured in 2 awesome lists
Each link jumps to the spot where the list mentions awesome-embedded-rust.