Awesome Embedded Rust Overview

Curated list of resources for Embedded and Low-level development in the Rust programming language

🏠 Home · 🔥 Feed · 📮 Subscribe · ❤️ Sponsor · 😺 rust-embedded/awesome-embedded-rust · ⭐ 6.4K · 🏷️ Programming Languages

[ Daily / Weekly / Overview ]

Embedded Rust

Awesome Linting

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.

Rust Embedded Logo

This project is developed and maintained by the Resources team.

Don't see something you want or need here? Add it to the Not Yet Awesome Embedded Rust (⭐124) list!

Table of Contents

Community

In 2018, the Rust community created an embedded working group to help drive adoption in the Rust ecosystem.

Community Chat Rooms

Books, blogs, and training materials

Free and public materials

These materials are available publicly, typically under permissive licenses.

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.

Tools

Real-time

Real-time Operating System (RTOS)

Real-time tools

Peripheral Access Crates

Register definition for microcontroller families. Usually generated using svd2rust. - crates.io

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!

Microchip

Nordic

NXP

Raspberry Pi Silicon

SiFive

Silicon Labs

The efm32-rs project has peripheral access APIs for most EFM32 microcontrollers (generated using svd2rust):

StarFive

STMicroelectronics

The stm32-rs project has peripheral access APIs for most STM32 microcontrollers (generated using svd2rust):

Texas Instruments

MSP430

Espressif

Ambiq Micro

GigaDevice

XMC

Peripheral access crates for the different XMC4xxx families of microcontrollers

Vorago

Wiznet

Renesas

HAL implementation crates

Implementations of embedded-hal for microcontroller families and systems running some OS. - crates.io

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!

OS

Microchip

Nordic

NXP

Also check the list of NXP board support crates!

Raspberry Pi Silicon

SiFive

STMicroelectronics

Also check the list of STMicroelectronics board support crates!

Texas Instruments

MSP430

Espressif

Silicon Labs

XMC

GigaDevice

Vorago

Renesas

StarFive

Architecture support crates

Crates tailored for general CPU architectures.

ARM

RISC-V

MIPS

Board support crates

Crates tailored for specific boards.

1BitSquared

Adafruit

Arduino

Nordic

NXP

Pimoroni

Raspberry Pi

Sparkfun

SeeedStudio

SiFive

Sipeed

Sony

STMicroelectronics

Teensy

Vorago

Texas Instruments

Special Purpose

Sodaq

Other

Component abstraction crates

The following crates provide HAL-like abstractions for subcomponents of embedded devices that go beyond what is available in embedded-hal:

Driver crates

You can also find many of these drivers on drive-rs; please consider adding your driver there (in the GitHub repo (⭐13)) 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.

  1. AD983x - SPI - AD9833/AD9837 waveform generators / DDS - Intro blog post - crates.io
  2. adafruit-alphanum4 - I2C - Driver for Adafruit 14-segment LED Alphanumeric Backpack based on the ht16k33 chip - crates.io
  3. ADE791x - SPI - ADE7912/ADE7913 3-Channel, Isolated, Sigma-Delta ADC - github - crates.io
  4. ADS1x1x - I2C - 12/16-bit ADCs like ADS1013, ADS1015, ADS1115, etc. - Intro blog post - crates.io
  5. ADXL313 - SPI - 3-axis accelerometer - crates.io
  6. ADXL343 - I2C - 3-axis accelerometer - crates.io
  7. ADXL355 - SPI - 3-axis accelerometer - Intro blog post - crates.io
  8. AEM10900 - I2C - Energy Harvester - github (⭐0) - crates.io
  9. AFE4404 - I2C - Pulse oximeter - crates.io
  10. AHT20 - I2C - Humidity and temperature sensor - github (⭐3) - crates.io
  11. AHT20-driver - I2C - Humidity and temperature sensor - Intro blog post - github - crates.io
  12. AnyLeaf - I2C - pH sensor module - github (⭐6) - crates.io
  13. AT86RF212 - SPI - Low power IEEE 802.15.4-2011 ISM RF Transceiver - Intro blog post - crates.io
  14. BlueNRG - SPI - driver for BlueNRG-MS Bluetooth module - Intro post crates.io
  15. BMA400 - I2C/SPI - Bosch 12-bit 3-axis accelerometer - github crates.io
  16. BNO055 - I2C - Bosch Sensortec BNO055 9-axis IMU driver - Intro post crates.io
  17. CD74HC4067 - GPIO - 16-channel digital and analog multiplexer - Intro blog post - github - crates.io
  18. dht-sensor - 1-Wire - DHT11/DHT22 temperature/humidity sensor driver - github - crates.io
  19. embedded-dht-rs - 1-Wire, I2C - DHT11/DHT20/DHT22 temperature/humidity sensor driver - github - crates.io
  20. DRV8825 - DRV8825 Stepper Motor Driver (based on Stepper) - Intro blog post - crates.io
  21. DS1307 - I2C - Real-time clock driver - Intro blog post - crates.io
  22. ebyte-e32 - SERIAL - Ebyte E32 LoRa module driver - Intro blog post - crates.io
  23. EEPROM24x - I2C - 24x series serial EEPROM driver - Intro blog post - crates.io
  24. embedded-ccs811 - I2C - Gas and VOC sensor driver for monitoring indoor air quality - Intro blog post - crates.io
  25. embedded-sdmmc - SPI - SD/MMC Card Driver with MS-DOS Partition and FAT16/FAT32 support - Intro post crates.io
  26. ENC28J60 - SPI - Ethernet controller - Intro blog post - crates.io
  27. FH101RF - SPI - Wake-Up Radio - github (⭐1) - crates.io
  28. FUSB302B - I2C - Programmable USB Type‐C Controller with USB Power Delivery - github
  29. HC-12 - SERIAL - Wireless serial transceiver module - Intro blog post - github - crates.io
  30. HTS221 - I2C - Humidity and temperature sensor - Intro blog post - crates.io
  31. IIS2MDC - I2C - ST's High accuracy, ultra-low-power, 3-axis digital output magnetometer - crates.io
  32. ISM330DHCX - I2C - ST's IMU with 3D accelerometer, 3D gyroscope, ML core and more - crates.io
  33. keypad - GPIO - Keypad matrix circuits - Intro post - crates.io
  34. KXCJ9 - I2C - KXCJ9/KXCJB 3-axis accelerometers - Intro blog post - crates.io
  35. L3GD20 - SPI - Gyroscope - Intro blog post - crates.io
  36. LSM303DLHC - I2C - Accelerometer + compass (magnetometer) - Intro blog post - crates.io
  37. MAX6675 - SPI - A driver for the MAX6675 digital thermocouple converter - Intro blog post - crates.io
  38. MAX6955 - I2C - Driver for Alphanumeric LED display driver - Intro blog post - crates.io
  39. MAX116xx-10bit - SPI - Driver for the MAX11619-MAX11621, MAX11624 and MAX11625 10-bit ADCs - Intro blog post - crates.io
  40. MCP25LCXX - SPI - Driver for Microchip's 25LC series of EEPROMs - crates.io
  41. MCP3008 - SPI - 8 channel 10-bit ADC - Intro blog post - crates.io
  42. MCP3425 - I2C - 16-bit ADC - Intro blog post - crates.io
  43. MCP794xx - I2C - Real-time clock / calendar driver - Intro blog post - crates.io
  44. MMA7660FC - I2C - 3-axis accelerometer - Intro blog post
  45. OPT300x - I2C - Ambient light sensor family driver - Intro blog post - crates.io
  46. PAC194X - I2C - Single/multi channel power monitor - Intro blog post - crates.io
  47. port-expander - I2C - Driver for I2C port expanders (supports PCA95xx, PCF85xx) - Intro blog post - crates.io
  48. pwm-pca9685 - I2C - 16-channel, 12-bit PWM/Servo/LED controller - Intro blog post - crates.io
  49. rainbow-hat-rs - I2C/SPI/GPIO - Pimoroni Rainbow HAT driver for Raspberry Pi - github - crates.io
  50. rotary-encoder-hal - GPIO - A rotary encoder driver using embedded-hal - Intro blog post - crates.io
  51. sega-controller - GPIO - Sega controller input - github - crates.io
  52. SGP30 - I2C - Gas sensor - Intro blog post - crates.io
  53. SH1106 - I2C - Monochrome OLED display controller - Intro post crates.io
  54. shared-bus - I2C - utility driver for sharing a bus between multiple devices - Intro post crates.io
  55. shift-register-driver - GPIO - Shift register - Intro blog post - crates.io
  56. Si4703 - I2C - FM radio turner (receiver) driver - Intro blog post - crates.io
  57. SRAM23x - SPI - Microchip 23x series serial SRAM/NVSRAM driver - Intro blog post - crates.io
  58. SSD1306 - I2C/SPI - OLED display controller - Intro blog post - crates.io
  59. SSD1309 - I2C/SPI - OLED display controller - Intro blog post - crates.io
  60. STSPIN220 - STSPIN220 Stepper Motor Driver (based on Stepper) - Intro blog post - crates.io
  61. Sx127x - SPI - Long Range Low Power Sub GHz (Gfsk, LoRa) RF Transceiver - Intro blog post - crates.io
  62. Sx128x - SPI - Long range, low power 2.4 GHz (Gfsk, Flrc, LoRa) RF Transceiver - Intro blog post - crates.io
  63. TC72 - SPI - Microchip TC72 temperature sensor - crates.io
  64. TCN75A - I2C - Microchip TCN75A temperature sensor - crates.io
  65. TMP006 - I2C - Contact-less infrared (IR) thermopile temperature sensor driver - Intro post crates.io
  66. TMP1x2 - I2C - TMP102 and TMP112x temperature sensor driver - Intro blog post crates.io
  67. TSIC - GPIO - TSIC 306 temperature sensor driver - Intro blog post crates.io
  68. TSL256X - I2C - Light Intensity Sensor - Intro blog post - crates.io
  69. VEML6030/VEML7700 - I2C - Ambient light sensors - Intro blog post - crates.io
  70. VEML6075 - I2C - UVA and UVB light sensor - Intro blog post - crates.io
  71. usbd-serial - USB CDC-ACM class (serial) implementation - github - crates.io
  72. usbd-hid - USB HID class implementation - github - crates.io
  73. usbd-hid-device - USB HID class implementation without unsafe - github - crates.io
  74. usbd-human-interface-device - Batteries included embedded USB HID library for usb-device. Includes concrete Keyboard (boot and NKRO), Mouse and Consumer Control implementations as well as support for building your own HID classes - github - crates.io
  75. usbd-midi - USB MIDI class implementation - github - crates.io
  76. usbd-webusb - USB webUSB class implementation - github - crates.io
  77. SHTCx - I2C - Temperature / humidity sensors - github - crates.io
  78. ST7789 - SPI - An embedded-graphics compatible driver for the popular lcd family from Sitronix used in the PineTime watch - github - crates.io
  79. DW1000 - SPI - Radio transceiver (IEEE 802.15.4 and position tracking) - Article - crates.io
  80. Adafruit-7segment - I2C - Driver for Adafruit 7-segment LED Numeric Backpack based on the ht16k33 chip - github - crates.io
  81. ST7565 - SPI - An embedded-graphics compatible driver for LCD displays based on the ST7565 chip - github - crates.io
  82. tb6612fng - A no_std driver for the TB6612FNG motor driver - crates.io
  83. vl53l1x-uld - I2C - A pure-rust driver for the ST VL53L1X - crates.io
  84. i2c-multiplexer - I2C - An I2C Multiplexer library that supports the PCA9546 and TCA9546A chips - github - crates.io
  85. SHT31-rs - I2C - Fully supported SHT temperature / humidity sensors - github - crates.io

NOTE You may be able to find even more driver crates by searching for the embedded-hal-driver keyword on crates.io!

WIP

Work in progress drivers. Help the authors make these crates awesome!

  1. AD9850 - Embedded driver for the AD9850 DDS synthesizer chip - crates.io
  2. AFE4400 - SPI - Pulse oximeter
  3. APDS9960 - I2C - Proximity, ambient light, RGB, and gesture sensor - crates.io
  4. AS5048A - SPI - AMS AS5048A Magnetic Rotary Encoder
  5. AXP209 - I2C - Power management unit
  6. ad57xx - SPI - Quad and dual channel DAC - crates.io
  7. BH1750 - I2C - ambient light sensor (lux meter)
  8. BME280 - A rust device driver for the Bosch BME280 temperature, humidity, and atmospheric pressure sensor and the Bosch BMP280 temperature and atmospheric pressure sensor. crates.io
  9. bme680 - I2C - Temperature / humidity / gas / pressure sensor - crates.io
  10. BMI160 - I2C / SPI - Inertial Measurement Unit - crates.io
  11. BMP280 - A platform agnostic driver to interface with the BMP280 pressure sensor crates.io
  12. CC1101 - SPI - Sub-1GHz RF Transceiver - crates.io
  13. DS3231 - I2C - real-time clock
  14. DS3234 - SPI - Real-time clock
  15. DS323x - I2C/SPI - Real-time clocks (RTC): DS3231, DS3232 and DS3234 - crates.io
  16. epd-waveshare - SPI - driver for E-Paper Modules from Waveshare crates.io
  17. embedded-morse - Output morse messages - crates.io
  18. embedded-nrf24l01 - SPI+GPIO - 2.4 GHz radio
  19. Ft6x36 - I2C - Rust driver for focal tech touch screen FT6236, FT6336 - crates.io
  20. grove-matrix-led-my9221-rs - I2C - Rust driver for Grove RGB Matrix Led with my-9221 Driver - crates.io
  21. GridEYE - I2C - Rust driver for Grid-EYE / Panasonic AMG88(33) - crates.io
  22. HC-SR04 - DIO - Ultrasound sensor
  23. HD44780-driver - GPIO - LCD controller - crates.io
  24. HD44780 - Parallel port - LCD controller
  25. HM11 - USART - HM-11 bluetooth module AT configuration crate - crates.io
  26. HRS3300 - I2C - Heart rate sensor / monitor used in the PineTime smartwatch, for example. - crates.io
  27. HDC20xx - I2C - Temperature and humidity sensor compatible with HDC2080, HDC2021 and HDC2010. - crates.io
  28. hub75 - A driver for rgb led matrices with the hub75 interface - crates.io
  29. hzgrow-r502 - UART capacitive fingerprint reader - crates.io
  30. iAQ-Core - I2C - iAQ-Core-C/iAQ-Core-P Gas and VOC sensor driver for monitoring indoor air quality.
  31. ILI9341 - SPI - TFT LCD display
  32. INA260 - I2C - power monitor - crates.io
  33. ISL29125 - I2C - RGB Color Light Sensor with IR Blocking Filter - crates.io
  34. IST7920 - SPI monochrome LCD display - crates.io
  35. 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) - crates.io
  36. lp586x - I2C/SPI - LED matrix driver crates.io
  37. LS010B7DH01 - SPI - Memory LCD
  38. LSM303AGR - I2C/SPI - 3D accelerometer + 3D magnetometer. (Used in e.g. micro:bit boards) crates.io
  39. LSM303C - A platform agnostic driver to interface with the LSM303C (accelerometer + compass) crates.io
  40. LSM9DS1 - I2C/SPI - 9-axis motion sensor module crates.io
  41. ltr-559 - I2C - Ambient Light Sensor and Proximity sensor crates.io
  42. lvgl - no_std LittleVGL (⭐18k) port - crates.io
  43. M95320 - SPI - STMicroelectronics Serial flash EEPROM - crates.io
  44. MAG3110 - I2C - Magnetometer
  45. MAX17048/9 - I2C - LiPo Fuel gauge, battery monitoring IC - crates.io
  46. MAX170xx - I2C - LiPo Fuel gauge, battery monitoring ICs compatible with MAX17043/4, MAX17048/9, MAX17058/9. - crates.io
  47. MAX3010x - I2C - Pulse oximeter and heart-rate sensor. ATM Compatible with MAX30102. - crates.io
  48. MAX31855 - SPI - Thermocouple digital converter -crates.io
  49. MAX31865 - SPI - RTD to Digital converter - crates.io
  50. MAX44009 - I2C - Ambient light sensor - crates.io
  51. MAX7219 - SPI - LED display driver - crates.io
  52. MCP4725 - I2C - 12-bit DAC - crates.io
  53. MCP49xx - SPI - 8/10/12-bit DACs like MCP4921, MCP4922, MCP4801, etc. - crates.io
  54. MCP9808 - I2C - Temperature sensor - crates.io
  55. MCP4x - SPI - Digital potentiometers (digipot) like MCP41010, MCP41050, MCP41100, MCP42010, MCP42050 and MCP42100, etc. - crates.io
  56. MFRC522 - SPI - RFID tag reader/writer
  57. midi-port - UART - MIDI input - crates.io
  58. MLX9061x - I2C - MLX90614/MLX90615 Contact-less infrared (IR) temperature sensor driver. - crates.io
  59. MMA8x5x - I2C - Tri-axis accelerometers like MMA8451Q, MMA8452Q, MMA8453Q, MMA8652FC and MMA8653FC. - crates.io
  60. motor-driver - Motor drivers: L298N, TB6612FNG, etc.
  61. MPU6050 - I2C - no_std driver for the MPU6050 crates.io
  62. MPU9250 - no_std driver for the MPU9250 (and other MPU* devices) & onboard AK8963 (accelerometer + gyroscope + magnetometer IMU) crates.io
  63. MS5637 - no_std I2C driver for the MS5637 temperature and pressure sensor crates.io
  64. NRF24L01 - SPI - 2.4 GHz wireless communication
  65. OneWire - 1wire - OneWire protocol implementation with drivers for devices such as DS18B20 - crates.io
  66. PCD8544 - SPI - 48x84 pixels matrix LCD controller
  67. PCD8544_rich - SPI - Rich driver for 48x84 pixels matrix LCD controller - crates.io
  68. PCF857x - I2C - I/O expanders: PCF8574, PCF8574A, PCF8575 crates.io
  69. radio-at86rf212 - SPI - Sub GHz 802.15.4 radio transceiver crates.io
  70. RFM69 - SPI - ISM radio transceiver
  71. RN2xx3 - Serial - A driver for the RN2483 / RN2903 LoRaWAN modems by Microchip
  72. SCD30 - I2C - CO₂ sensor - crates.io
  73. SHT2x - I2C - temperature / humidity sensors
  74. SHT3x - I2C - Temperature / humidity sensors
  75. SI5351 - I2C - clock generator
  76. SI7021 - I2C - Humidity and temperature sensor
  77. SPL06-007 - I2C - Pressure and temperature sensor - crates.io
  78. spi-memory - SPI - A generic driver for various SPI Flash and EEPROM chips - crates.io
  79. SSD1320 - SPI - Graphical OLED display controller - crates.io
  80. SSD1322 - SPI - Graphical OLED display controller - crates.io
  81. SSD1322_rs - SPI - Async graphics driver for SSD1322 screen - crates.io
  82. SSD1351 - SPI - 16bit colour OLED display driver - crates.io
  83. SSD1675 - SPI - Tri-color ePaper display controller - crates.io
  84. st7032i - I2C - Dot Matrix LCD Controller driver (Sitronix ST7032i or similar). - crates.io
  85. ST7735-lcd - SPI - An embedded-graphics compatible driver for the popular lcd family from Sitronix crates.io
  86. ST7920 - SPI - LCD displays using the ST7920 controller crates.io
  87. stm32-eth - MCU - Ethernet
  88. SX1278 - SPI - Long range (LoRa) transceiver
  89. SX1509 - I2C - IO Expander / Keypad driver
  90. TCS3472 - I2C - RGB color light sensor - crates.io
  91. TPA2016D2 - I2C - A driver for interfacing with the Texas Instruments TPA2016D2 Class-D amplifier - crates.io
  92. VEML6040 - I2C - RGBW color light sensor - crates.io
  93. VEML6070 - I2C - UVA light sensor - crates.io
  94. VEML7700 - I2C - Ambient light sensors - crates.io
  95. vesc-comm - A driver for communicating with VESC-compatible electronic speed controllers crates.io
  96. VL53L0X - A platform agnostic driver to interface with the vl53l0x (time-of-flight sensor) crates.io
  97. w5500 - SPI - Ethernet Module with hardwired protocols : TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE - crates.io
  98. xCA9548A - I2C - I2C switches/multiplexers: TCA9548A, PCA9548A - crates.io
  99. ublox-cellular-rs - Serial - Cellular driver for the full Ublox cellular serial based family
  100. atwinc1500-rs - SPI - A host driver for the Atwinc1500 network controller
  101. HX711 - GPIO - An interrupt-based driver for the HX711 Load Cell Amplifier IC. no-std.

no-std crates

#![no_std] crates designed to run on resource-constrained devices.

  1. adskalman: Kalman filter and Rauch-Tung-Striebel smoothing implementation. crates.io
  2. atomic: Generic Atomic wrapper type. crates.io
  3. bbqueue: A SPSC, statically allocatable queue based on BipBuffers suitable for DMA transfers - crates.io
  4. bitmatch: A crate that allows you to match, bind, and pack the individual bits of integers. - crates.io
  5. 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. crates.io
  6. bit_field: manipulating bitfields and bitarrays - crates.io
  7. bluetooth-hci: device-independent Bluetooth Host-Controller Interface implementation. crates.io
  8. bounded-registers A high-assurance memory-mapped register code generation and interaction library. bounded-registers provides a Tock-like API for MMIO registers with the addition of type-based bounds checking. - crates.io
  9. cam-geom: Geometric models of cameras for photogrammetry. crates.io
  10. combine: parser combinator library - crates.io
  11. console-traits (⭐3): Describes a basic text console. Used by menu and implemented by vga-framebuffer. crates.io
  12. 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" - crates.io
  13. cmsis-dsp-sys: Rust FFI bindings to the Arm CMSIS_5 (⭐1.4k) math library - crates.io
  14. dcmimu: An algorithm for fusing low-cost triaxial MEMS gyroscope and accelerometer measurements crates.io
  15. debouncr: A simple no-std input debouncer to detect rising/falling edges with minimal RAM requirements. crates.io
  16. device-driver: A toolkit to write better device drivers, faster. crates.io
  17. drogue-device (⭐188): A distribution of tools and examples for building embedded applications in Rust.
  18. dummy-pin: Dummy implementations of the input/output pin traits. crates.io
  19. crossbus (⭐123): A Platform-Less, Runtime-Less Actor Computing Model.
  20. ector (⭐50): An async actor framework for embedded, based on embassy.
  21. embassy: A set of embedded async tools to make async/await a first-class option for embedded development
  22. embedded-cli: CLI library with autocompletion, subcommands, options, help and history support. crates.io
  23. embedded-crc-macros: Macros implementing portable CRC algorithms and build-time lookup table generation. crates.io
  24. embedded-update (⭐22): Pluggable firmware update protocol for embedded devices.
  25. embedded-tls (⭐176): A TLS 1.3 implementation that runs in a no-std environment.
  26. embedded-websocket: A lightweight server and client websocket library for embedded systems. crates.io
  27. endian_codec: (En/De)code rust types as packed bytes with specific order (endian). Supports derive. - crates.io
  28. ethercrab (⭐262): A Rust implementation of the EtherCAT industrial automation protocol - crates.io
  29. fixed-fft: Fixed-point Fast Fourier Transform - Crates.io
  30. gcode (⭐90): A gcode parser for no-std applications - crates.io
  31. gdbstub: zero-allocation, pure Rust implementation of the GDB Remote Serial Protocol - crates.io
  32. heapless: provides Vec, String, LinearMap, RingBuffer backed by fixed-size buffers - crates.io
  33. idsp: integer DSP algorithms (trigonometry, filtering, PLL...) tuned for precision and speed - crates.io
  34. ieee802154: Partial implementation of the IEEE 802.15.4 standard - crates.io
  35. infrared: infrared remote control library for embedded rust - crates.io
  36. intrusive-collections: intrusive (non-allocating) singly/doubly linked lists and red-black trees - crates.io
  37. inverted-pin: Implementations of the input/output pin traits with inverted logic. crates.io
  38. irq: utilities for writing interrupt handlers (allows moving data into interrupts, and sharing data between them) - crates.io
  39. lakers: Microcontroller-optimized EDHOC implementation, with bindings for C and Python - crates.io
  40. lorawan-encoding (⭐273): A LoRaWAN packet codec.
  41. lorawan-device (⭐273): A LoRaWAN MAC implementation supporting both event-driven and async mode.
  42. managed: provides ManagedSlice, ManagedMap backed by either their std counterparts or fixed-size buffers for #![no_std]. - crates.io
  43. menu: A basic command-line interface library. Has nested menus and basic help functionality. crates.io
  44. micropb: Rust Protobuf library targetting embedded systems and no_std environments without an allocator. - crates.io
  45. mqtt-sn: Implementation of the MQTT-SN protocol - crates.io
  46. microfft: Embedded-friendly (no_std, no-alloc) fast fourier transforms - crates.io
  47. micromath (⭐403): Embedded Rust math library featuring fast, safe floating point approximations for common arithmetic operations, 2D and 3D vector types, and statistical analysis - crates.io
  48. miniconf: Lookup/enumerate/serialize/deserialize nodes in trees of heterogeneous structs/arrays by path/key - crates.io
  49. minimq: A minimal MQTT5 client designed for no_std platforms - crates.io
  50. moonboot (⭐27): OTA Bootloader Construction Framework for Rust no_std environments, especially embedded devices without an OS
  51. nalgebra: general-purpose and low-dimensional linear algebra library - crates.io
  52. nom: parser combinator framework - crates.io
  53. null-terminated: generic null-terminated arrays - crates.io
  54. num-format: Crate for producing string representations of numbers, formatted according to international standards, e.g. "1,000,000" for US English - crates.io
  55. pc-keyboard: A PS/2 keyboard protocol driver. Transport (bit-banging or SPI) agnostic, but can convert Set 2 Scancodes into Unicode. crates.io
  56. qei : A qei wrapper that allows you to extend your qei timers from a 16-bit integer to a 64-bit integer. - crates.io
  57. qemu-exit: Quit a running QEMU session with user-defined exit code. Useful for unit or integration tests using QEMU. - crates.io
  58. RampMaker: Stepper Motor Acceleration Ramp Generator - crates.io
  59. register-rs (⭐47): Unified interface for MMIO and CPU registers. Provides type-safe bitfield manipulation. 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. - crates.io
  60. scapegoat: Safe, stack-only alternative to BTreeSet and BTreeMap. - crates.io
  61. scroll: extensible and endian-aware Read/Write traits for generic containers - crates.io
  62. sized-dst: Owned container for dynamically-sized types (such as trait objects) backed by stack memory. - crates.io
  63. Slint: Declarative GUI framework that works on microcontrollers. crates.io
  64. smbus-pec: Minimal portable System Management Bus Packet Error Code calculation algorithm. crates.io
  65. smoltcp (⭐3.8k): a small TCP/IP stack that runs without alloc. crates.io
  66. sntpc: Rust SNTP client to get a timestamp from NTP servers. - crates.io
  67. static-bytes (⭐6): Help work with buffers without dynamic allocation. Implement traits from bytes crate. crate.io
  68. Stepper: Universal Stepper Motor Interface - crates.io
  69. tinybmp: No-std, no-alloc BMP parser for embedded systems. Introductory blog post - crates.io
  70. vga-framebuffer: A VGA signal generator and font renderer for VGA-less microcontrollers. Used by Monotron (⭐192) to generate 48 by 36 character display using 3 SPI peripherals and a timer. crates.io
  71. usb-pd (⭐21): USB-PD library, supports using the FUSB302B as a Sink driver, with Source functionality planned.
  72. wyhash: A fast, simple and portable hashing algorithm and random number generator. - crates.io
  73. adafruit-bluefruit-protocol: A no_std parser for the Adafruit Bluefruit LE Connect controller protocol. - crates.io
  74. wtx (⭐228): Among other things, provides implementations to interact with HTTP, WebSockets and Databases.

WIP

Work in progress crates. Help the authors make these crates awesome!

Panic handling

There are many ways to handle panics in embedded devices, these crates provide helpful variants.

  1. 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. crates.io + crates.io
  2. no-panic: Attribute macro to require that the compiler prove a function can't ever panic. crates.io
  3. panic-abort: Causes an abort on panics (nightly-only) crates.io
  4. panic-halt: Halts the processor on panics crates.io
  5. panic-itm: Prints the panic through the chip's ITM to a debugger attached to the SWO pin (Cortex-M with ITM only)
  6. panic-never: This crate guarantees that your application is free of panicking branches. crates.io
  7. 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. - crates.io
  8. panic-probe: A panic handler that exits probe-run with an error code. crates.io
  9. 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) crates.io
  10. panic-rtt: Set the panicking behavior to log to a JLINK debugger and loop. crates.io
  11. panic-rtt-target: Logs panic messages over RTT. Uses rtt-target. crates.io
  12. panic-semihosting: Prints the panic message via semihosting to an attached debugger (Cortex-M only)
  13. rp2040-panic-usb-boot: Save panic message in XIP RAM and reboot RP2040 to USB mode crates.io

Firmware projects

Old books, blogs, and training materials

These materials may be outdated and reflect earlier practices, but they might still be helpful for reference.

License

This list is licensed under

Code of Conduct

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.