awesome-embedded-rust/README.md

750 lines
50 KiB
Markdown
Raw Normal View History

2018-04-06 16:25:25 +00:00
# Embedded Rust
2018-04-01 21:17:28 +00:00
2018-04-06 16:26:00 +00:00
[![Awesome](https://awesome.re/badge.svg)](https://awesome.re)
2018-04-06 16:25:25 +00:00
This is a curated list of resources related to embedded and low-level programming in the programming language Rust, including a list of useful crates.
2018-04-01 21:17:28 +00:00
2018-04-06 16:03:26 +00:00
[<img src="https://rawgit.com/rust-embedded/awesome-embedded-rust/master/rust-embedded-logo-256x256.png" align="right" width="256">](http://www.rust-embedded.org)
This project is developed and maintained by the [Resources team][team].
2019-03-05 22:22:11 +00:00
**Don't see something you want or need here?** Add it to the [Not Yet Awesome Embedded Rust](https://github.com/rust-embedded/not-yet-awesome-embedded-rust) list!
2018-04-01 21:17:28 +00:00
## Table of contents
2018-04-06 16:26:21 +00:00
* [Community](#community)
2018-04-06 16:27:03 +00:00
* [Books, blogs and training materials](#books-blogs-and-training-materials)
2018-04-06 16:27:19 +00:00
* [Tools](#tools)
* [Peripheral Access Crates](#peripheral-access-crates)
2019-04-30 12:32:42 +00:00
* [Microchip](#microchip)
2018-04-01 21:17:28 +00:00
* [Nordic](#nordic)
* [NXP](#nxp)
2019-04-30 12:32:42 +00:00
* [SiFive](#sifive)
* [Silicon Labs](#silicon-labs)
* [STMicroelectronics](#stmicroelectronics)
* [Texas Instruments](#texas-instruments)
2018-04-06 16:27:47 +00:00
* [MSP430](#msp430)
2019-08-14 19:25:42 +00:00
* [Ambiq Micro](#ambiq-micro)
2018-04-01 21:17:28 +00:00
* [HAL implementation crates](#hal-implementation-crates)
* [OS](#os)
* [Nordic](#nordic-1)
* [NXP](#nxp-1)
2019-04-30 12:32:42 +00:00
* [SiFive](#sifive-1)
2018-04-01 21:17:28 +00:00
* [STMicroelectronics](#stmicroelectronics-1)
* [Texas Instruments](#texas-instruments-1)
2018-06-14 18:26:39 +00:00
* [Espressif](#espressif)
* [Silicon Labs](#silicon-labs-1)
2019-04-07 15:44:27 +00:00
* [XMC](#xmc)
2018-04-21 07:21:06 +00:00
* [Architecture support crates](#architecture-support-crates)
* [ARM](#arm)
2019-04-30 12:32:42 +00:00
* [RISC-V](#risc-v)
* [MIPS](#mips)
2018-04-01 21:17:28 +00:00
* [Board support crates](#board-support-crates)
* [Nordic](#nordic-2)
* [NXP](#nxp-2)
2019-04-30 12:32:42 +00:00
* [SiFive](#sifive-2)
2018-11-08 21:40:20 +00:00
* [Sony](#sony)
2018-04-01 21:17:28 +00:00
* [STMicroelectronics](#stmicroelectronics-2)
2019-04-30 12:32:42 +00:00
* [Texas Instruments](#texas-instruments-2)
* [Special Purpose](#special-purpose)
* [Component abstraction crates](#component-abstraction-crates)
2018-04-01 21:17:28 +00:00
* [Driver crates](#driver-crates)
* [WIP](#wip)
* [no-std crates](#no-std-crates)
2019-04-30 12:32:42 +00:00
* [WIP](#wip-1)
2018-04-06 16:28:02 +00:00
* [Rust forks](#rust-forks)
2019-04-30 12:32:42 +00:00
* [AVR](#avr)
2018-05-02 14:22:53 +00:00
* [Firmware projects](#firmware-projects)
2018-04-01 21:17:28 +00:00
* [License](#license)
2018-04-06 16:26:21 +00:00
## Community
2018-04-21 07:22:54 +00:00
In 2018 Rust community has created an embedded workgroup to help drive adoption in the Rust ecosystem.
2018-04-06 16:26:21 +00:00
2019-01-26 01:01:03 +00:00
- [Embedded WG](https://github.com/rust-embedded/wg/), including newsletters with progress updates.
2018-04-06 16:26:21 +00:00
- You can usually find community members (including embedded WG members) in the [`#rust-embedded:matrix.org` Matrix room](https://matrix.to/#/#rust-embedded:matrix.org).
2018-04-21 07:28:28 +00:00
- [embedded.rs](https://t.me/embedded_rs) Telegram chat about Rust for microcontrollers in Russian language.
2018-04-06 16:27:03 +00:00
## Books, blogs and training materials
- [The Embedded Rust Book](https://rust-embedded.github.io/book/) - An introductory book about using the Rust Programming Language on "Bare Metal" embedded systems, such as Microcontrollers.
2018-08-11 12:11:30 +00:00
- [Discovery](https://rust-embedded.github.io/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](https://docs.rs/cortex-m-quickstart/0.3.1/cortex_m_quickstart/) by @japaric a template and introduction to embedded Rust, suitable for developers familiar to embedded development but new to embedded Rust.
2018-04-06 16:27:03 +00:00
- [Exploring Rust on Teensy](https://branan.github.io/teensy/) by @branan — Beginner set of articles on getting into embedded dev in Rust.
- [Pragmatic Bare Metal Rust](http://www.hashmismatch.net/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](https://spin.atomicobject.com/2016/07/08/rust-embedded-project-example/#.V3-os-6qlZw.hackernews) Article and some links on setting up Rust cross-compiling.
- [Robigalia](https://robigalia.org) general purpose robust operating system in Rust running on secure seL4 microkernel.
2018-04-06 16:27:03 +00:00
- [Tock](https://www.tockos.org) An embedded operating system designed for running multiple concurrent, mutually distrustful applications on low-memory and low-power microcontrollers
- [intermezzOS](http://intermezzos.github.io) A small teaching operating system in Rust. A book with some explanations is also included.
- Raspberry Pi Bare Metal Programming with Rust
- [32-bit Version (most Pi1 and Pi2 variants)](https://medium.com/@thiagopnts/raspberry-pi-bare-metal-programming-with-rust-a6f145e84024) A starter article on OSdev with Rust on RPi (cross-compiler setup and a very basic LED-blinking kernel).
2018-04-06 16:27:03 +00:00
- [Fearless concurrency](http://blog.japaric.io/fearless-concurrency/) by @japaric — How to easily develop Rust programs for pretty much any ARM Cortex-M microcontroller with memory-safe concurrency.
- [RTFM v0.5](https://rtfm.rs/0.5/book/en/) Real-Time For the Masses — A concurrency framework for building real time systems:
- [cortex-m rtfm](https://github.com/rtfm-rs/cortex-m-rtfm) RTFM framework for ARM Cortex-M microcontrollers
- [msp430 rtfm](https://github.com/japaric/msp430-rtfm) RTFM framework for MSP430 MCUs
2018-04-06 16:27:03 +00:00
- [FreeRTOS.rs](https://github.com/hashmismatch/freertos.rs) Rust interface for the FreeRTOS API
- [MicroRust](https://droogmic.github.io/microrust/) Introductory book for embedded development in Rust on the micro:bit.
2018-09-10 17:55:56 +00:00
- [Physical Computing With Rust](https://rahul-thakoor.github.io/physical-computing-rust/) A (WIP) guide to physical computing with Rust on the Raspberry Pi.
2019-03-05 23:28:45 +00:00
- [Internet of Streams](https://www.youtube.com/playlist?list=PLX44HkctSkTewrL9frlUz0yeKLKecebT1) A video series by [@jamesmunns] building a bare metal IoT Sensor Node Platform from (nearly) scratch in Rust
- [Writing an embedded OS in Rust on the Raspberry Pi](https://github.com/rust-embedded/rust-raspi3-OS-tutorials) 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.
2019-03-05 23:28:45 +00:00
[@jamesmunns]: https://github.com/jamesmunns
2018-04-06 16:27:03 +00:00
2018-04-06 16:27:19 +00:00
## Tools
- [xargo](https://github.com/japaric/xargo) Rust package manager with support for non-default std libraries — build rust runtime for your own embedded system.
- xargo is great but it's in maintenance mode, [cargo-xbuild](https://github.com/rust-osdev/cargo-xbuild) is catching up as intended replacement.
2018-04-06 16:27:19 +00:00
- [svd2rust](https://github.com/japaric/svd2rust) Generate Rust structs with register mappings from SVD files.
- [μtest](https://github.com/japaric/utest) unit testing for microcontrollers and other no-std systems.
2018-10-26 07:59:21 +00:00
- [embedded-hal-mock] Mock implementation of `embedded-hal` traits for testing without accessing real hardware. - ![crates.io](https://img.shields.io/crates/v/embedded-hal-mock.svg)
- [bindgen](https://crates.io/crates/bindgen) Automatically generates Rust FFI bindings to C and C++ libraries. - ![crates.io](https://img.shields.io/crates/v/bindgen.svg)
2018-04-06 16:27:19 +00:00
- [cortex-m semihosting](https://github.com/japaric/cortex-m-semihosting) Semihosting for ARM Cortex-M processors
2018-05-06 22:57:17 +00:00
- [bobbin-cli](https://github.com/bobbin-rs/bobbin-cli) A Rust command line tool to simplify embedded development and deployment.
2018-09-27 17:11:52 +00:00
- [cargo-fel4](https://github.com/maindotrs/cargo-fel4) A Cargo subcommand for working with feL4 projects. - ![crates.io](https://img.shields.io/crates/v/cargo-fel4.svg)
2018-04-06 16:27:19 +00:00
2018-10-26 07:59:21 +00:00
[embedded-hal-mock]: https://crates.io/crates/embedded-hal-mock
2018-10-26 07:56:23 +00:00
## Peripheral Access Crates
2018-04-01 21:17:28 +00:00
Register definition for microcontroller families. Usually generated using [`svd2rust`]. - ![crates.io](https://img.shields.io/crates/v/svd2rust.svg)
2018-04-01 21:17:28 +00:00
Peripheral Access Crates were also called Device Crates.
[`svd2rust`]: https://crates.io/crates/svd2rust
2018-04-01 21:17:28 +00:00
*NOTE* You may be able to find even more peripheral access crates by searching for the
2018-04-01 21:17:28 +00:00
[`svd2rust`][svd2rust-kw] keyword on crates.io!
[svd2rust-kw]: https://crates.io/keywords/svd2rust
2018-04-21 16:33:00 +00:00
### Microchip
- [`atsamd21`](https://github.com/atsamd-rs/atsamd) Peripheral access API for Microchip (formerly Atmel) SAMD21 microcontrollers. This git repo hosts both the peripheral access crate and the hal.
- [`atsamd51`](https://github.com/atsamd-rs/atsamd) Peripheral access API for Microchip (formerly Atmel) SAMD51 microcontrollers. This git repo hosts both the peripheral access crate and the hal.
- [`avr-device`](https://github.com/Rahix/avr-device) Peripheral access API for Microchip (formerly Atmel) AVR microcontroller family.
- [`sam3x8e`](https://crates.io/crates/sam3x8e) Peripheral access API for Atmel SAMD3X8E microcontrollers (generated using svd2rust) - ![crates.io](https://img.shields.io/crates/v/sam3x8e.svg)
### Nordic
- [`nrf51`](https://crates.io/crates/nrf51) Peripheral access API for nRF51 microcontrollers (generated using svd2rust) - ![crates.io](https://img.shields.io/crates/v/nrf51.svg)
- [`nrf52810-pac`](https://crates.io/crates/nrf52810-pac) - Peripheral access API for the nRF52810 microcontroller (generated using svd2rust) - ![crates.io](https://img.shields.io/crates/v/nrf52810-pac.svg)
- [`nrf52832-pac`](https://crates.io/crates/nrf52832-pac) - Peripheral access API for the nRF52832 microcontroller (generated using svd2rust) - ![crates.io](https://img.shields.io/crates/v/nrf52832-pac.svg)
- [`nrf52840-pac`](https://crates.io/crates/nrf52840-pac) - Peripheral access API for the nRF52840 microcontroller (generated using svd2rust) - ![crates.io](https://img.shields.io/crates/v/nrf52840-pac.svg)
### NXP
- [`lpc82x-pac`](https://crates.io/crates/lpc82x-pac) - ![crates.io](https://img.shields.io/crates/v/lpc82x-pac.svg)
2019-05-27 21:42:14 +00:00
- [`lpc11uxx`](https://crates.io/crates/lpc11uxx) - ![crates.io](https://img.shields.io/crates/v/lpc11uxx.svg)
- [`mkw41z`](https://crates.io/crates/mkw41z) - ![crates.io](https://img.shields.io/crates/v/mkw41z.svg)
2018-04-08 17:02:14 +00:00
- [`k64`](https://crates.io/crates/k64) - ![crates.io](https://img.shields.io/crates/v/k64.svg)
- [`lpc55s6x-pac`](https://crates.io/crates/lpc55s6x-pac) - ![crates.io](https://img.shields.io/crates/v/lpc55s6x-pac.svg)
### SiFive
- [`e310x`](https://github.com/riscv-rust/e310x) - svd2rust generated interface to SiFive [Freedom E310](https://www.sifive.com/cores/e31) MCUs - ![crates.io](https://img.shields.io/crates/v/e310x.svg)
### Silicon Labs
- [`efm32pg12-pac`](https://crates.io/crates/efm32pg12-pac) - Peripheral access API for Silicon Labs EFM32PG12 microcontrollers - ![crates.io](https://img.shields.io/crates/v/efm32pg12-pac)
2018-04-01 21:17:28 +00:00
### STMicroelectronics
The [`stm32-rs`](https://github.com/stm32-rs/stm32-rs) project has peripheral access APIs for most STM32 microcontrollers (generated using svd2rust):
- [`stm32f0`](https://crates.io/crates/stm32f0) - ![crates.io](https://img.shields.io/crates/v/stm32f0.svg)
- [`stm32f1`](https://crates.io/crates/stm32f1) - ![crates.io](https://img.shields.io/crates/v/stm32f1.svg)
- [`stm32f2`](https://crates.io/crates/stm32f2) - ![crates.io](https://img.shields.io/crates/v/stm32f2.svg)
- [`stm32f3`](https://crates.io/crates/stm32f3) - ![crates.io](https://img.shields.io/crates/v/stm32f3.svg)
- [`stm32f4`](https://crates.io/crates/stm32f4) - ![crates.io](https://img.shields.io/crates/v/stm32f4.svg)
- [`stm32f7`](https://crates.io/crates/stm32f7) - ![crates.io](https://img.shields.io/crates/v/stm32f7.svg)
- [`stm32l0`](https://crates.io/crates/stm32l0) - ![crates.io](https://img.shields.io/crates/v/stm32l0.svg)
- [`stm32l1`](https://crates.io/crates/stm32l1) - ![crates.io](https://img.shields.io/crates/v/stm32l1.svg)
- [`stm32l4`](https://crates.io/crates/stm32l4) - ![crates.io](https://img.shields.io/crates/v/stm32l4.svg)
- [`stm32h7`](https://crates.io/crates/stm32h7) - ![crates.io](https://img.shields.io/crates/v/stm32h7.svg)
- [`stm32g0`](https://crates.io/crates/stm32g0) - ![crates.io](https://img.shields.io/crates/v/stm32g0.svg)
- [`stm32g4`](https://crates.io/crates/stm32g4) - ![crates.io](https://img.shields.io/crates/v/stm32g4.svg)
2018-04-01 21:17:28 +00:00
### Texas Instruments
- [`tm4c123x`](https://crates.io/crates/tm4c123x) Peripheral access API for TM4C123x microcontrollers (generated using svd2rust)
2018-08-29 14:51:55 +00:00
- [`tm4c129x`](https://crates.io/crates/tm4c129x) Peripheral access API for TM4C129x microcontrollers (generated using svd2rust)
2018-04-06 16:27:47 +00:00
### MSP430
2018-04-21 07:21:24 +00:00
2018-04-06 16:27:47 +00:00
- [`msp430g2553`](https://github.com/japaric/msp430g2553) Peripheral access API for MSP430G2553 microcontrollers (generated using svd2rust)
- [msp430 quickstart](https://github.com/japaric/msp430-quickstart) some examples for msp430
2019-08-14 19:25:42 +00:00
### Ambiq Micro
- [`ambiq-apollo3-pac`](https://crates.io/crates/ambiq-apollo3-pac) Peripheral access API for Ambiq Apollo3 microcontrollers (generated using svd2rust)
2018-04-06 16:27:47 +00:00
### GigaDevice
2019-09-15 04:03:08 +00:00
- [`gd32vf103-pac`](https://github.com/riscv-rust/gd32vf103-pac) Peripheral access API for GD32VF103 RISC-V microcontrollers (generated using svd2rust) - ![crates.io](https://img.shields.io/crates/v/gd32vf103-pac.svg)
2018-04-01 21:17:28 +00:00
## HAL implementation crates
2019-02-14 08:53:57 +00:00
Implementations of [`embedded-hal`] for microcontroller families and systems running some OS. - ![crates.io](https://img.shields.io/crates/v/embedded-hal.svg)
2018-04-01 21:17:28 +00:00
[`embedded-hal`]: https://crates.io/crates/embedded-hal
2018-04-01 21:17:28 +00:00
*NOTE* You may be able to find even more HAL implementation crates by searching for the
[`embedded-hal-impl`] and [`embedded-hal`][embedded-hal-kw] keywords on crates.io!
[`embedded-hal-impl`]: https://crates.io/keywords/embedded-hal-impl
[embedded-hal-kw]: https://crates.io/keywords/embedded-hal
### OS
- [`linux-embedded-hal`] for embedded Linux systems like the Raspberry Pi. - ![crates.io](https://img.shields.io/crates/v/linux-embedded-hal.svg)
- [`ftdi-embedded-hal`] for FTDI FTx232H chips connected to Linux systems via USB
- [`bitbang-hal`] software protocol implementations for microcontrollers with digital::OutputPin and digital::InputPin
2018-04-01 21:17:28 +00:00
[`linux-embedded-hal`]: https://crates.io/crates/linux-embedded-hal
[`ftdi-embedded-hal`]: https://github.com/geomatsi/ftdi-embedded-hal
[`bitbang-hal`]: https://crates.io/crates/bitbang-hal
2018-04-01 21:17:28 +00:00
### Microchip
- [`atsamd-hal`](https://crates.io/crates/atsamd-hal) - HAL for SAMD21 and SAMD51 - ![crates.io](https://img.shields.io/crates/v/atsamd-hal.svg)
- ['avr-hal'](https://github.com/Rahix/avr-hal) - HAL for AVR microcontroller family and AVR-based boards
2018-04-01 21:17:28 +00:00
### Nordic
- [`nrf51-hal`](https://crates.io/crates/nrf51-hal) - ![crates.io](https://img.shields.io/crates/v/nrf51-hal.svg)
- [`nrf52810-hal`](https://crates.io/crates/nrf52810-hal) - ![crates.io](https://img.shields.io/crates/v/nrf52810-hal.svg)
- [`nrf52832-hal`](https://crates.io/crates/nrf52832-hal) - ![crates.io](https://img.shields.io/crates/v/nrf52832-hal.svg)
- [`nrf52840-hal`](https://crates.io/crates/nrf52840-hal) - ![crates.io](https://img.shields.io/crates/v/nrf52840-hal.svg)
2018-04-01 21:17:28 +00:00
### NXP
Also check the list of [NXP board support crates][nxp-bsc]!
[nxp-bsc]: #nxp-1
- [`lpc82x-hal`](https://crates.io/crates/lpc82x-hal) - [![crates.io](https://img.shields.io/crates/v/lpc82x-hal.svg)](https://crates.io/crates/lpc82x-hal)
2018-04-01 21:17:28 +00:00
- [`mkw41z-hal`](https://crates.io/crates/mkw41z-hal) - ![crates.io](https://img.shields.io/crates/v/mkw41z-hal.svg)
2018-04-01 21:17:28 +00:00
- [`lpc55s6x-hal`](https://crates.io/crates/lpc55s6x-hal) - [![crates.io](https://img.shields.io/crates/v/lpc55s6x-hal.svg)](https://crates.io/crates/lpc55s6x-hal)
### SiFive
- [`e310x-hal`](https://github.com/riscv-rust/e310x-hal) - HAL for SiFive [Freedom E310](https://www.sifive.com/cores/e31) MCUs - ![crates.io](https://img.shields.io/crates/v/e310x-hal.svg)
2018-04-01 21:17:28 +00:00
### STMicroelectronics
Also check the list of [STMicroelectronics board support crates][stm-bsc]!
[stm-bsc]: #stmicroelectronics-2
- [`stm32f0xx-hal`](https://crates.io/crates/stm32f0xx-hal) - ![crates.io](https://img.shields.io/crates/v/stm32f0xx-hal.svg)
2018-04-01 21:17:28 +00:00
- Has examples that can run on boards like the [Nucleo-F042K6] and similar boards
[Nucleo-F042K6]: http://www.st.com/en/evaluation-tools/nucleo-f042k6.html
2019-02-15 09:59:10 +00:00
- [`stm32f1xx-hal`](https://github.com/stm32-rs/stm32f1xx-hal) - ![crates.io](https://img.shields.io/crates/v/stm32f1xx-hal.svg)
- Can be run on boards like the [Blue pill], [Nucleo-F103RB] and similar boards
[Blue pill]: http://wiki.stm32duino.com/index.php?title=Blue_Pill
[Nucleo-F103RB]: http://www.st.com/en/evaluation-tools/nucleo-f103rb.html
2018-04-01 21:17:28 +00:00
- [`stm32f30x-hal`](https://crates.io/crates/stm32f30x-hal) - ![crates.io](https://img.shields.io/crates/v/stm32f30x-hal.svg)
2018-04-01 21:17:28 +00:00
- [`stm32f4xx-hal`](https://crates.io/crates/stm32f4xx-hal) - ![crates.io](https://img.shields.io/crates/v/stm32f4xx-hal.svg)
2019-03-14 23:36:16 +00:00
- Generic HAL implementation for all MCUs of the stm32f4 series
- [`stm32f7xx-hal`](https://crates.io/crates/stm32f7xx-hal) - ![crates.io](https://img.shields.io/crates/v/stm32f7xx-hal.svg)
- Generic HAL implementation for all MCUs of the stm32f7 series
- [`stm32l0xx-hal`](https://crates.io/crates/stm32l0xx-hal) - ![crates.io](https://img.shields.io/crates/v/stm32l0xx-hal.svg)
- HAL implementation for the the STMicro STM32L0xx family of microcontrollers
2019-03-07 03:16:09 +00:00
- [`stm32l1xx-hal`](https://crates.io/crates/stm32l1xx-hal) - ![crates.io](https://img.shields.io/crates/v/stm32l1xx-hal.svg)
- [`stm32l151-hal`](https://crates.io/crates/stm32l151-hal) - ![crates.io](https://img.shields.io/crates/v/stm32l151-hal.svg)
2018-04-02 09:59:50 +00:00
- [`stm32l4xx-hal`](https://crates.io/crates/stm32l4xx-hal) - ![crates.io](https://img.shields.io/crates/v/stm32l4xx-hal.svg)
2019-01-06 03:07:37 +00:00
- Generic hal support for stm32l4 devices, has examples that can run on boards like the [Nucleo-L432KC], [Solo], and similar boards
2018-08-13 16:41:45 +00:00
2019-03-07 03:16:09 +00:00
- [`stm32g0xx-hal`](https://crates.io/crates/stm32g0xx-hal) - ![crates.io](https://img.shields.io/crates/v/stm32g0xx-hal.svg)
2019-10-11 12:57:27 +00:00
- [`stm32h7xx-hal`](https://crates.io/crates/stm32h7xx-hal) - ![crates.io](https://img.shields.io/crates/v/stm32h7xx-hal.svg)
- HAL implementation for the STMicro STM32H7xx family of microcontrollers
2018-08-13 16:41:45 +00:00
[Nucleo-L432KC]: https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-nucleo/nucleo-l432kc.html
2019-01-06 03:07:37 +00:00
[Solo]: https://solokeys.com/
2018-04-01 21:17:28 +00:00
### Texas Instruments
- [`tm4c123x-hal`](https://github.com/thejpster/tm4c123x-hal)
2018-06-14 18:17:23 +00:00
### Espressif
- [`esp8266-hal`](https://github.com/emosenkis/esp8266-hal) ![crates.io](https://img.shields.io/crates/v/esp8266-hal.svg) (not supported by rustc, so must be built with [mrustc](https://github.com/thepowersgang/mrustc), typically via the [esp-rs](https://github.com/emosenkis/esp-rs) build script)
### Silicon Labs
- [`tomu-hal`](https://github.com/fudanchii/imtomu-rs)
- HAL implementation targeted for [Tomu] USB board with EFM32HG309F64 ARMv6-M core. Has support to configure [tomu bootloader] directly from application via `toboot_config` macro.
[Tomu]: https://tomu.im/
[tomu bootloader]: https://github.com/im-tomu/tomu-bootloader
2019-04-07 15:44:27 +00:00
### XMC
- [`xmc1100-hal`](https://github.com/david-sawatzke/xmc1100-hal) - ![crates.io](https://img.shields.io/crates/v/xmc1100-hal.svg)
### GigaDevice
2019-10-11 12:57:27 +00:00
- [`gd32vf103-hal`](https://github.com/luojia65/gd32vf103-hal) - ![crates.io](https://img.shields.io/crates/v/gd32vf103-hal.svg)
- (WIP) Hardware abstract layer (HAL) for the GD32VF103 RISC-V microcontroller
2018-04-21 07:21:06 +00:00
## Architecture support crates
Crates tailored for general CPU architectures.
### ARM
2018-08-14 19:03:31 +00:00
- [`cortex-m`](https://github.com/japaric/cortex-m) Low level access to Cortex-M processors - ![crates.io](https://img.shields.io/crates/v/cortex-m.svg)
- [`cortex-a`](https://github.com/andre-richter/cortex-a) Low level access to Cortex-A processors (early state) - ![crates.io](https://img.shields.io/crates/v/cortex-a.svg)
2018-04-21 07:21:06 +00:00
### RISC-V
- [`riscv`](https://github.com/rust-embedded/riscv) Low level access to RISC-V processors - ![crates.io](https://img.shields.io/crates/v/riscv.svg)
### MIPS
- [`mips`](https://github.com/Harry-Chen/rust-mips) Low level access to MIPS32 processors - ![crates.io](https://img.shields.io/crates/v/mips.svg)
2018-04-01 21:17:28 +00:00
## Board support crates
2018-08-01 12:03:06 +00:00
Crates tailored for specific boards.
2018-04-01 21:17:28 +00:00
[STM32F3DISCOVERY]: http://www.st.com/en/evaluation-tools/stm32f3discovery.html
[STM32F4DISCOVERY]: https://www.st.com/en/evaluation-tools/stm32f4discovery.html
[STM32F429DISCOVERY]: https://www.st.com/en/evaluation-tools/32f429idiscovery.html
2018-04-01 21:17:28 +00:00
### Adafruit
- [`metro_m4`](https://crates.io/crates/metro_m4) - ![crates.io](https://img.shields.io/crates/v/metro_m4.svg)
- [`pyportal`](https://crates.io/crates/pyportal) - ![crates.io](https://img.shields.io/crates/v/pyportal.svg)
- [`trellis_m4`](https://crates.io/crates/trellis_m4) - ![crates.io](https://img.shields.io/crates/v/trellis_m4.svg)
### Arduino
- [`avr-hal`](https://github.com/Rahix/avr-hal) - Board support crate for several AVR-based boards including the Arduino Uno and the Arduino Leonardo
### Nordic
- [`dwm1001`](https://crates.io/crates/dwm1001) - [Decawave DWM1001-DEV] - ![crates.io](https://img.shields.io/crates/v/dwm1001.svg)
- [`microbit`](https://crates.io/crates/microbit) - [micro:bit] - ![crates.io](https://img.shields.io/crates/v/microbit.svg)
[Decawave DWM1001-DEV]: https://www.decawave.com/product/dwm1001-development-board/
[micro:bit]: http://microbit.org/
2018-04-01 21:17:28 +00:00
### NXP
- [`frdm-kw41z`](https://crates.io/crates/frdm-kw41z) - [FRDM-KW41Z] - ![crates.io](https://img.shields.io/crates/v/frdm-kw41z.svg)
2018-04-01 21:17:28 +00:00
[FRDM-KW41Z]: https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/kinetis-cortex-m-mcus/w-serieswireless-conn.m0-plus-m4/freedom-development-kit-for-kinetis-kw41z-31z-21z-mcus:FRDM-KW41Z
### SiFive
- [`hifive1`](https://github.com/riscv-rust/hifive1) - Board support crate for [HiFive1](https://www.sifive.com/boards/hifive1) and [LoFive](https://hackaday.io/project/26909-lofive) boards - ![crates.io](https://img.shields.io/crates/v/hifive.svg)
2018-11-08 20:44:30 +00:00
### Sony
- [`prussia`](https://github.com/ZirconiumX/prussia) - SDK for the PlayStation 2.
2018-04-01 21:17:28 +00:00
### STMicroelectronics
- [`nucleo-f042k6`](https://github.com/therealprof/nucleo-f042k6.git) - [Nucleo-F042K6]
- [`nucleo-f103rb`](https://github.com/therealprof/nucleo-f103rb.git) - [Nucleo-F103RB]
2019-09-28 05:18:12 +00:00
- [`nucleo-f401re`](https://github.com/jkristell/nucleo-f401re.git) - [Nucleo-F401RE] ![crates.io](https://img.shields.io/crates/v/nucleo-f401re.svg)
- [`f3`](https://crates.io/crates/f3) Board Support Crate for the [STM32F3DISCOVERY] - ![crates.io](https://img.shields.io/crates/v/f3.svg)
- [`stm32f407g-disc`](https://crates.io/crates/stm32f407g-disc) Board Support Crate for the [STM32F4DISCOVERY] (WIP) - ![crates.io](https://img.shields.io/crates/v/stm32f407g-disc.svg)
- [`stm32f429i-disc`](https://crates.io/crates/stm32f429i-disc) Board Support Crate for the [STM32F429DISCOVERY] (WIP) - ![crates.io](https://img.shields.io/crates/v/stm32f429i-disc.svg)
2019-01-06 03:07:37 +00:00
- [`solo-bsp`](https://crates.io/crates/solo-bsp) Board Support Crate for [Solo], an open source security token (WIP) - ![crates.io](https://img.shields.io/crates/v/solo-bsp.svg)
2018-04-01 21:17:28 +00:00
2019-09-28 05:18:12 +00:00
[Nucleo-F401RE]: https://www.st.com/en/evaluation-tools/nucleo-f401re.html
### Texas Instruments
- [`stellaris-launchpad`](https://crates.io/crates/stellaris-launchpad) - For the Texas Instruments Stellaris Launchpad and Tiva-C Launchpad ![crates.io](https://img.shields.io/crates/v/stellaris-launchpad.svg)
- [`monotron`](https://github.com/thejpster/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].
2018-08-01 12:03:06 +00:00
### Special Purpose
- [`betafpv-f3`](https://github.com/JoshMcguigan/betafpv-f3) - For the BetaFPV F3 drone flight controller
## Component abstraction crates
The following crates provide HAL-like abstractions for subcomponents of embedded
devices which go beyond what is available in [`embedded-hal`]:
- [`accelerometer`](https://github.com/NeoBirth/accelerometer.rs) - Generic accelerometer support, including traits and types for taking readings from 2 or 3-axis accelerometers and tracking device orientations - ![crates.io](https://img.shields.io/crates/v/accelerometer.svg)
- [`embedded-graphics`](https://crates.io/crates/embedded-graphics): 2D drawing library for any size display - ![crates.io](https://img.shields.io/crates/v/embedded-graphics.svg)
- [`smart-leds`](https://github.com/smart-leds-rs): Support for addressable LEDs including WS2812 and APA102
2018-04-01 21:17:28 +00:00
## Driver crates
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][hal-impl].
[hal-impl]: #hal-implementation-crates
The list below contains drivers developed as part of the [Weekly Driver initiative][wd] and that
have achieved the "released" status (published on crates.io + documentation / short blog post).
2019-01-26 01:01:03 +00:00
[wd]: https://github.com/rust-embedded/wg/issues/39
2018-04-01 21:17:28 +00:00
1. [L3GD20] - SPI - Gyroscope - [Intro blog post][1&2] - ![crates.io](https://img.shields.io/crates/v/l3gd20.svg)
2. [LSM303DLHC] - I2C - Accelerometer + compass (magnetometer) - [Intro blog post][1&2] - ![crates.io](https://img.shields.io/crates/v/lsm303dlhc.svg)
3. [MCP3008] - SPI - 8 channel 10-bit ADC - [Intro blog post][3] - ![crates.io](https://img.shields.io/crates/v/adc-mcp3008.svg)
4. [ENC28J60] - SPI - Ethernet controller - [Intro blog post][4] - ![crates.io](https://img.shields.io/crates/v/enc28j60.svg)
5. [MCP3425] - I2C - 16-bit ADC - [Intro blog post][5] - ![crates.io](https://img.shields.io/crates/v/mcp3425.svg)
6. [SGP30] - I2C - Gas sensor - [Intro blog post][6] - ![crates.io](https://img.shields.io/crates/v/sgp30.svg)
7. [HTS221] - I2C - Humidity and temperature sensor - [Intro blog post][7] - ![crates.io](https://img.shields.io/crates/v/hts221.svg)
2018-04-30 11:44:15 +00:00
8. [SSD1306] - I2C/SPI - OLED display controller - [Intro blog post][8] - ![crates.io](https://img.shields.io/crates/v/ssd1306.svg)
9. [MMA7660FC] - I2C - 3-axis accelerometer - [Intro blog post][9]
10. [shift-register-driver] - GPIO - Shift register - [Intro blog post][10] - ![crates.io](https://img.shields.io/crates/v/shift-register-driver.svg)
2018-07-15 19:12:57 +00:00
11. [TSL256X] - I2C - Light Intensity Sensor - [Intro blog post][11] - ![crates.io](https://img.shields.io/crates/v/tsl256x.svg)
12. [EEPROM24x] - I2C - 24x series serial EEPROM driver - [Intro blog post][12] - ![crates.io](https://img.shields.io/crates/v/eeprom24x.svg)
2018-09-25 19:23:54 +00:00
13. [DS1307] - I2C - Real-time clock driver - [Intro blog post][13] - ![crates.io](https://img.shields.io/crates/v/ds1307.svg)
2018-09-26 16:46:45 +00:00
14. [keypad] - GPIO - Keypad matrix circuits - [Intro post][14] - ![crates.io](https://img.shields.io/crates/v/keypad.svg)
15. [BlueNRG] - SPI - driver for BlueNRG-MS Bluetooth module - [Intro post][15] ![crates.io](https://img.shields.io/crates/v/bluenrg.svg)
16. [shared-bus] - I2C - utility driver for sharing a bus between multiple devices - [Intro post][16] ![crates.io](https://img.shields.io/crates/v/shared-bus.svg)
2018-12-07 13:09:27 +00:00
17. [TMP006] - I2C - Contact-less infrared (IR) thermopile temperature sensor driver - [Intro post][17] ![crates.io](https://img.shields.io/crates/v/tmp006.svg)
18. [BNO055] - I2C - Bosch Sensortec BNO055 9-axis IMU driver - [Intro post][18] ![crates.io](https://img.shields.io/crates/v/bno055.svg)
2019-02-13 21:12:28 +00:00
19. [SH1106] - I2C - Monochrome OLED display controller - [Intro post][19] ![crates.io](https://img.shields.io/crates/v/sh1106.svg)
2019-02-19 17:29:30 +00:00
20. [embedded-sdmmc] - SPI - SD/MMC Card Driver with MS-DOS Partition and FAT16/FAT32 support - [Intro post][20] ![crates.io](https://img.shields.io/crates/v/embedded-sdmmc.svg)
2019-03-21 21:49:44 +00:00
21. [ADXL343] - I2C - 3-axis accelerometer - ![crates.io](https://img.shields.io/crates/v/adxl343.svg)
2019-03-28 19:18:01 +00:00
22. [TMP1x2] - I2C - TMP102 and TMP112x temperature sensor driver - [Intro blog post][22] ![crates.io](https://img.shields.io/crates/v/tmp1x2.svg)
2019-04-28 19:07:34 +00:00
23. [ADS1x1x] - I2C - 12/16-bit ADCs like ADS1013, ADS1015, ADS1115, etc. - [Intro blog post][23] - ![crates.io](https://img.shields.io/crates/v/ads1x1x.svg)
24. [KXCJ9] - I2C - KXCJ9/KXCJB 3-axis accelerometers - [Intro blog post][24] - ![crates.io](https://img.shields.io/crates/v/kxcj9.svg)
2019-06-07 07:47:43 +00:00
25. [AD983x] - SPI - AD9833/AD9837 waveform generators / DDS - [Intro blog post][25] - ![crates.io](https://img.shields.io/crates/v/ad983x.svg)
2019-09-15 12:59:45 +00:00
26. [MCP794xx] - I2C - Real-time clock / calendar driver - [Intro blog post][26] - ![crates.io](https://img.shields.io/crates/v/mcp794xx.svg)
2019-09-28 11:42:24 +00:00
27. [VEML6075] - I2C - UVA and UVB light sensor - [Intro blog post][27] - ![crates.io](https://img.shields.io/crates/v/veml6075.svg)
2019-11-04 16:48:44 +00:00
28. [rotary-encoder-hal] - GPIO - A rotary encoder driver using `embedded-hal` - [Intro blog post][28] - ![crates.io](https://img.shields.io/crates/v/rotary-encoder-hal.svg)
29. [adafruit-alphanum4] - I2C - Driver for [Adafruit 14-segment LED Alphanumeric Backpack][29] based on the ht16k33 chip - ![crates.io](https://img.shields.io/crates/v/adafruit-alphanum4.svg)
2019-11-09 17:23:08 +00:00
30. [OPT300x] - I2C - Ambient light sensor family driver - [Intro blog post][30] - ![crates.io](https://img.shields.io/crates/v/opt300x.svg)
2018-04-01 21:17:28 +00:00
[L3GD20]: https://crates.io/crates/l3gd20
[LSM303DLHC]: https://crates.io/crates/lsm303dlhc
[1&2]: http://blog.japaric.io/wd-1-2-l3gd20-lsm303dlhc-madgwick/
[MCP3008]: https://crates.io/crates/adc-mcp3008
[3]: http://pramode.in/2018/02/24/an-introduction-to-writing-embedded-hal-based-drivers-in-rust/
[ENC28J60]: https://crates.io/crates/enc28j60
[4]: http://blog.japaric.io/wd-4-enc28j60/
[MCP3425]: https://crates.io/crates/mcp3425
[5]: https://blog.dbrgn.ch/2018/3/13/rust-mcp3425-driver/
[SGP30]: https://crates.io/crates/sgp30
[6]: https://blog.dbrgn.ch/2018/4/1/rust-sgp30-driver/
2018-04-02 17:21:21 +00:00
[HTS221]: https://crates.io/crates/hts221
[7]: https://medium.com/@pdanielgallagher/hts221-humidity-and-temperature-sensor-88056ea9e5fa
2018-04-30 11:44:15 +00:00
[SSD1306]: https://crates.io/crates/ssd1306
[8]: https://wapl.es/electronics/rust/2018/04/30/ssd1306-driver.html
[MMA7660FC]: https://crates.io/crates/mma7660fc
[9]: https://rahul-thakoor.github.io/an-i2c-rust-driver-for-mma7660fc-based-3-axis-digital-accelerometer/
[shift-register-driver]: https://crates.io/crates/shift-register-driver
[10]: https://www.joshmcguigan.com/blog/shift-register-driver/
2018-07-15 19:12:57 +00:00
[TSL256X]: https://crates.io/crates/tsl256x
[11]: https://www.joshmcguigan.com/blog/tsl256x-light-intensity-sensor-driver/
[EEPROM24x]: https://crates.io/crates/eeprom24x
[12]: https://blog.eldruin.com/24x-serial-eeprom-driver-in-rust/
2018-09-25 19:23:54 +00:00
[DS1307]: https://crates.io/crates/ds1307
[13]: https://blog.eldruin.com/ds1307-real-time-clock-rtc-driver-in-rust/
2018-09-26 16:46:45 +00:00
[keypad]: https://crates.io/crates/keypad
[14]: https://www.reddit.com/r/rust/comments/9j42o9/weekly_driver_keypad_matrix_circuits/
[BlueNRG]: https://crates.io/crates/bluenrg
[15]: https://www.219design.com/bluetooth-low-energy-with-rust/
[shared-bus]: https://github.com/Rahix/shared-bus
[16]: https://blog.rahix.de/001-shared-bus/
2018-12-07 13:09:27 +00:00
[TMP006]: https://crates.io/crates/tmp006
[17]: https://blog.eldruin.com/tmp006-contact-less-infrared-ir-thermopile-driver-in-rust/
2019-02-07 00:02:03 +00:00
[BNO055]: https://crates.io/crates/bno055
[18]: https://www.reddit.com/r/rust/comments/ao4sqq/embeddedhal_bno055_9axis_imu_driver/
2019-02-07 00:02:03 +00:00
[SH1106]: https://crates.io/crates/sh1106
[19]: https://wapl.es/electronics/rust/2019/02/13/sh1106-driver.html
2019-02-19 17:29:30 +00:00
[embedded-sdmmc]: https://crates.io/crates/embedded-sdmmc
[20]: https://www.reddit.com/r/rust/comments/ascvls/introducing_embeddedsdmmc_a_purerust_no_std_sd/
2019-03-21 21:49:44 +00:00
[ADXL343]: https://crates.io/crates/adxl343
2019-03-28 19:18:01 +00:00
[TMP1x2]: https://crates.io/crates/tmp1x2
[22]: https://blog.eldruin.com/tmp1x2-temperature-sensor-driver-in-rust/
2019-04-28 19:07:34 +00:00
[ADS1x1x]: https://crates.io/crates/ads1x1x
[23]: https://blog.eldruin.com/ads1x1x-analog-to-digital-converter-driver-in-rust/
[KXCJ9]: https://crates.io/crates/kxcj9
[24]: https://blog.eldruin.com/kxcj9-kxcjb-tri-axis-mems-accelerator-driver-in-rust/
2019-06-07 07:47:43 +00:00
[AD983x]: https://crates.io/crates/ad983x
[25]: https://blog.eldruin.com/ad983x-waveform-generator-dds-driver-in-rust/
2019-09-15 12:23:32 +00:00
[MCP794xx]: https://crates.io/crates/mcp794xx
[26]: https://blog.eldruin.com/mcp794xx-real-time-clock-rtc-driver-in-rust/
2019-09-28 11:42:24 +00:00
[VEML6075]: https://crates.io/crates/veml6075
[27]: https://blog.eldruin.com/veml6075-uva-uvb-uv-index-light-sensor-driver-in-rust/
2019-03-28 19:18:01 +00:00
2019-11-04 16:48:44 +00:00
[rotary-encoder-hal]: https://crates.io/crates/rotary-encoder-hal
[28]: https://leshow.github.io/post/rotary_encoder_hal/
[adafruit-alphanum4]: https://crates.io/crates/adafruit-alphanum4
[29]: https://learn.adafruit.com/adafruit-led-backpack/0-54-alphanumeric
2019-11-09 17:23:08 +00:00
[OPT300x]: https://github.com/eldruin/opt300x-rs
[30]: https://blog.eldruin.com/opt300x-ambient-light-sensor-driver-in-rust/
2018-04-01 21:17:28 +00:00
*NOTE* You may be able to find even more driver crates by searching for the [`embedded-hal-driver`]
keyword on crates.io!
[`embedded-hal-driver`]: https://crates.io/keywords/embedded-hal-driver
### WIP
Work in progress drivers. Help the authors make these crates awesome!
- [MFRC522] - SPI - RFID tag reader/writer
- [motor-driver] - Motor drivers: L298N, TB6612FNG, etc.
- [MAG3110] - I2C - Magnetometer
- [SI5351] - I2C - clock generator
- [SI7021] - I2C - Humidity and temperature sensor
2019-06-16 15:10:54 +00:00
- [MAX7219] - SPI - LED display driver - ![crates.io](https://img.shields.io/crates/v/max7219.svg)
2018-04-01 21:17:28 +00:00
- [DS3231] - I2C - real time clock
- [BH1750] - I2C - ambient light sensor (lux meter)
- [SHT2x] - I2C - temperature / humidity sensors
- [INA260] - I2C - power monitor - ![crates.io](https://img.shields.io/crates/v/ina260.svg)
2018-04-01 21:17:28 +00:00
- [ILI9341] - SPI - TFT LCD display
- [HD44780] - Parallel port - LCD controller
- [HD44780-driver] - GPIO - LCD controller - ![crates.io](https://img.shields.io/crates/v/hd44780-driver.svg)
- [MCP9808] - I2C - Temperature sensor - ![crates.io](https://img.shields.io/crates/v/mcp9808.svg)
2018-04-01 21:17:28 +00:00
- [AXP209] - I2C - Power management unit
- [DS3234] - SPI - Real time clock
- [PCD8544] - SPI - 48x84 pixels matrix LCD controller
2018-07-16 14:59:08 +00:00
- [PCD8544_rich] - SPI - Rich driver for 48x84 pixels matrix LCD controller - ![crates.io](https://img.shields.io/crates/v/pcd8544.svg)
2018-04-01 21:17:28 +00:00
- [HC-SR04] - DIO - Ultrasound sensor
- [AFE4400] - SPI - Pulse oximeter
2018-04-04 20:02:14 +00:00
- [SX1278] - SPI - Long range (LoRa) transceiver
2018-04-01 21:17:28 +00:00
- [RFM69] - SPI - ISM radio transceiver
- [LS010B7DH01] - SPI - Memory LCD
2018-04-02 02:33:40 +00:00
- [MAX31855] - SPI - Thermocouple digital converter
2018-05-09 12:24:45 +00:00
- [MAX31865] - SPI - RTD to Digital converter - ![crates.io](https://img.shields.io/crates/v/max31865.svg)
2018-04-02 10:59:31 +00:00
- [SHT3x] - I2C - Temperature / humidity sensors
2018-04-21 06:29:12 +00:00
- [SX1509] - I2C - IO Expander / Keypad driver
2018-04-29 20:20:48 +00:00
- [NRF24L01] - SPI - 2.4 GHz wireless communication
2018-05-15 00:34:21 +00:00
- [embedded-nrf24l01] - SPI+GPIO - 2.4 GHz radio
- [stm32-eth] - MCU - Ethernet
2018-06-22 19:41:28 +00:00
- [bme680] - I2C - Temperature / humidity / gas / pressure sensor - ![crates.io](https://img.shields.io/crates/v/bme680.svg)
2018-07-17 20:42:29 +00:00
- [w5500] - SPI - Ethernet Module with hardwired protocols : TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE - ![crates.io](https://img.shields.io/crates/v/w5500.svg)
2018-07-16 15:19:54 +00:00
- [OneWire] - 1wire - OneWire protocol implementation with drivers for devices such as [DS18B20](https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf) - ![crates.io](https://img.shields.io/crates/v/onewire.svg)
- [SSD1322] - SPI - Graphical OLED display controller - ![crates.io](https://img.shields.io/crates/v/ssd1322.svg)
2018-12-10 08:04:06 +00:00
- [GridEYE] - I2C - Rust driver for Grid-EYE / Panasonic AMG88(33) - ![crates.io](https://img.shields.io/crates/v/GridEYE.svg)
2018-08-22 16:38:21 +00:00
- [PCF857x] - I2C - I/O expanders: PCF8574, PCF8574A, PCF8575 ![crates.io](https://img.shields.io/crates/v/pcf857x.svg)
- [eink-waveshare] - SPI - driver for E-Paper Modules from Waveshare
2018-10-12 15:27:38 +00:00
- [xCA9548A] - I2C - I2C switches/multiplexers: TCA9548A, PCA9548A - ![crates.io](https://img.shields.io/crates/v/xca9548a.svg)
- [SSD1351] - SPI - 16bit colour OLED display driver - ![crates.io](https://img.shields.io/crates/v/ssd1351.svg)
- [VEML6070] - I2C - UVA light sensor - ![crates.io](https://img.shields.io/crates/v/veml6070.svg)
2018-10-20 08:34:23 +00:00
- [LM75] - I2C - Temperature sensor and thermal watchdog - ![crates.io](https://img.shields.io/crates/v/lm75.svg)
2018-10-21 05:38:53 +00:00
- [MAX44009] - I2C - Ambient light sensor - ![crates.io](https://img.shields.io/crates/v/max44009.svg)
2018-10-22 15:21:58 +00:00
- [TCS3472] - I2C - RGB color light sensor - ![crates.io](https://img.shields.io/crates/v/tcs3472.svg)
2018-10-31 10:35:24 +00:00
- [DS323x] - I2C/SPI - Real-time clocks (RTC): DS3231, DS3232 and DS3234 - ![crates.io](https://img.shields.io/crates/v/ds323x.svg)
2018-11-27 18:06:43 +00:00
- [pwm-pca9685] - I2C - 16-channel, 12-bit PWM/Servo/LED controller - ![crates.io](https://img.shields.io/crates/v/pwm-pca9685.svg)
- [AS5048A] - SPI - AMS AS5048A Magnetic Rotary Encoder
2018-12-13 01:31:03 +00:00
- [MAX17048/9] - I2C - LiPo Fuel guage, battery monitoring IC - ![crates.io](https://img.shields.io/crates/v/max17048.svg)
- [HM11] - USART - HM-11 bluetooth module AT configuration crate - ![crates.io](https://img.shields.io/crates/v/hm11.svg)
- [APDS9960] - I2C - Proximity, ambient light, RGB and gesture sensor - ![crates.io](https://img.shields.io/crates/v/apds9960.svg)
- [SSD1675] - SPI - Tri-color ePaper display controller - ![crates.io](https://img.shields.io/crates/v/ssd1675.svg)
2019-02-09 13:50:49 +00:00
- [CC1101] - SPI - Sub-1GHz RF Transceiver - ![crates.io](https://img.shields.io/crates/v/cc1101.svg)
2019-02-14 10:35:20 +00:00
- [MPU9250] - no_std driver for the MPU9250 (and other MPU* devices) & onboard AK8963 (accelerometer + gyroscope + magnetometer IMU) ![crates.io](https://img.shields.io/crates/v/mpu9250.svg)
- [MPU6050] - I2C - no_std driver for the MPU6050 ![crates.io](https://img.shields.io/crates/v/mpu6050.svg)
- [BMP280] - A platform agnostic driver to interface with the BMP280 pressure sensor ![crates.io](https://img.shields.io/crates/v/bmp280-ehal.svg)
2019-03-13 19:27:28 +00:00
- [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](https://img.shields.io/crates/v/bme280.svg)
2019-02-15 22:44:47 +00:00
- [LSM303C] - A platform agnostic driver to interface with the LSM303C (accelerometer + compass) ![crates.io](https://img.shields.io/crates/v/lsm303c.svg)
2019-02-14 09:42:46 +00:00
- [VL53L0X] - A platform agnostic driver to interface with the vl53l0x (time-of-flight sensor) ![crates.io](https://img.shields.io/crates/v/vl53l0x.svg)
- [MCP49xx] - SPI - 8/10/12-bit DACs like MCP4921, MCP4922, MCP4801, etc. - ![crates.io](https://img.shields.io/crates/v/mcp49xx.svg)
2019-02-21 10:34:55 +00:00
- [DW1000] - SPI - Radio transceiver for communication based on IEEE 802.15.4 and position tracking - ![crates.io](https://img.shields.io/crates/v/dw1000.svg)
- [radio-at86rf212] - SPI - Sub GHz 802.15.4 radio transceiver ![crates.io](https://img.shields.io/crates/v/radio-at86rf212.svg)
2019-03-15 08:37:20 +00:00
- [vesc-comm] - A driver for communicating with [VESC-compatible electronic speed controllers](http://vedder.se/2015/01/vesc-open-source-esc/) ![crates.io](https://img.shields.io/crates/v/vesc-comm.svg)
2019-03-28 16:50:19 +00:00
- [VEML6040] - I2C - RGBW color light sensor - ![crates.io](https://img.shields.io/crates/v/veml6040.svg)
- [SCD30] - I2C - CO₂ sensor - ![crates.io](https://img.shields.io/crates/v/scd30.svg)
- [TPA2016D2] - I2C - A driver for interfacing with the Texas Instruments TPA2016D2 Class-D amplifier - ![crates.io](https://img.shields.io/crates/v/tpa2016d2.svg)
2019-05-22 07:42:18 +00:00
- [RN2xx3] - Serial - A driver for the RN2483 / RN2903 LoRaWAN modems by Microchip
2019-07-21 13:12:23 +00:00
- [ST7735-lcd] - SPI - An embedded-graphics compatible driver for the popular lcd family from Sitronix ![crates.io](https://img.shields.io/crates/v/st7735-lcd.svg)
- [spi-memory] - SPI - A generic driver for various SPI Flash and EEPROM chips - ![crates.io](https://img.shields.io/crates/v/spi-memory.svg)
- [Si4703] - I2C - FM radio turners (receivers).
2019-10-24 23:32:59 +00:00
- [st7032i] - I2C - Dot Matrix LCD Controller driver (Sitronix ST7032i or similar). - ![crates.io](https://img.shields.io/crates/v/st7032i.svg)
2018-04-01 21:17:28 +00:00
[MFRC522]: https://github.com/japaric/mfrc522
[motor-driver]: https://github.com/japaric/motor-driver
[MAG3110]: https://github.com/therealprof/mag3110
[SI5351]: https://github.com/ilya-epifanov/si5351
[SI7021]: https://github.com/wose/si7021
2019-06-16 15:10:54 +00:00
[MAX7219]: https://github.com/almindor/max7219
2018-04-01 21:17:28 +00:00
[DS3231]: https://github.com/wose/ds3231
[BH1750]: https://github.com/wose/bh1750
[SHT2x]: https://github.com/dbrgn/sht2x-rs
[INA260]: https://crates.io/crates/ina260
[ILI9341]: https://github.com/yuri91/ili9341-rs
[HD44780]: http://github.com/kunerd/clerk
[HD44780-driver]: https://crates.io/crates/hd44780-driver
2018-04-01 21:17:28 +00:00
[MCP9808]: https://crates.io/crates/mcp9808
[PCD8544]: https://github.com/pcein/pcd8544
2018-07-16 14:59:08 +00:00
[PCD8544_rich]: https://crates.io/crates/pcd8544
2018-04-01 21:17:28 +00:00
[AXP209]: https://github.com/RandomInsano/axp209-rs
2019-01-26 01:01:03 +00:00
[DS3234]: https://github.com/rust-embedded/wg/issues/39#issuecomment-375262785
2018-04-01 21:17:28 +00:00
[HC-SR04]: https://github.com/nordmoen/hc-sr04
[AFE4400]: https://github.com/ReeceStevens/afe4400
[SX1278]: https://github.com/susu/sx1278
[RFM69]: https://github.com/lolzballs/rfm69
[LS010B7DH01]: https://github.com/byronwasti/ls010b7dh01
2018-04-02 02:33:40 +00:00
[MAX31855]: https://github.com/mbacch/max31855
2018-05-09 12:25:36 +00:00
[MAX31865]: https://crates.io/crates/max31865
2018-04-02 10:59:31 +00:00
[SHT3x]: https://github.com/miek/sht3x-rs
2018-04-21 06:29:12 +00:00
[SX1509]: https://github.com/wez/sx1509
2018-04-29 20:20:48 +00:00
[NRF24L01]: https://github.com/maikelwever/nrf24l01
2018-05-15 00:34:21 +00:00
[embedded-nrf24l01]: https://crates.io/crates/embedded-nrf24l01
2019-03-14 23:25:38 +00:00
[stm32-eth]: https://github.com/stm32-rs/stm32-eth
2018-06-22 19:41:28 +00:00
[bme680]: https://github.com/marcelbuesing/bme680
2018-07-17 20:42:29 +00:00
[w5500]: https://crates.io/crates/w5500
2018-07-16 15:19:54 +00:00
[OneWire]: https://crates.io/crates/onewire
[SSD1322]: https://crates.io/crates/ssd1322
[GridEYE]: https://crates.io/crates/grideye
2018-08-22 16:38:21 +00:00
[PCF857x]: https://crates.io/crates/pcf857x
[eink-waveshare]: https://crates.io/crates/eink_waveshare_rs
2018-10-12 15:27:38 +00:00
[xCA9548A]: https://crates.io/crates/xca9548a
[SSD1351]: https://crates.io/crates/ssd1351
[VEML6070]: https://crates.io/crates/veml6070
2018-10-20 08:34:23 +00:00
[LM75]: https://crates.io/crates/lm75
2018-10-21 05:38:53 +00:00
[MAX44009]: https://crates.io/crates/max44009
2018-10-22 15:21:58 +00:00
[TCS3472]: https://crates.io/crates/tcs3472
2018-10-31 10:35:24 +00:00
[DS323x]: https://crates.io/crates/ds323x
2018-11-27 18:06:43 +00:00
[pwm-pca9685]: https://crates.io/crates/pwm-pca9685
2018-12-10 08:04:06 +00:00
[AS5048A]: https://github.com/uwearzt/as5048a
2018-12-13 01:31:03 +00:00
[HM11]: https://crates.io/crates/hm11
[MAX17048/9]: https://crates.io/crates/max17048
[APDS9960]: https://crates.io/crates/apds9960
[SSD1675]: https://crates.io/crates/ssd1675
2019-02-09 13:50:49 +00:00
[CC1101]: https://crates.io/crates/cc1101
2019-02-14 10:35:20 +00:00
[MPU9250]: https://crates.io/crates/mpu9250
[MPU6050]: https://crates.io/crates/mpu6050
2019-02-14 10:34:09 +00:00
[BMP280]: https://crates.io/crates/bmp280-ehal
2019-03-13 19:27:28 +00:00
[BME280]: https://crates.io/crates/bme280
[LSM303C]: https://crates.io/crates/lsm303c
[VL53L0X]: https://crates.io/crates/vl53l0x
2019-02-17 14:58:55 +00:00
[MCP49xx]: https://crates.io/crates/mcp49xx
2019-02-21 10:34:55 +00:00
[DW1000]: https://crates.io/crates/dw1000
2019-02-27 20:17:01 +00:00
[radio-at86rf212]: https://crates.io/crates/radio-at86rf212
2019-03-13 19:17:14 +00:00
[vesc-comm]: https://github.com/chocol4te/vesc-comm
2019-03-28 16:50:19 +00:00
[VEML6040]: https://crates.io/crates/veml6040
[SCD30]: https://crates.io/crates/scd30
[TPA2016D2]: https://crates.io/crates/tpa2016d2
2019-05-22 07:42:18 +00:00
[RN2xx3]: https://github.com/dbrgn/rn2xx3-rs/
2019-06-09 07:59:47 +00:00
[ST7735-lcd]: https://crates.io/crates/st7735-lcd
2019-07-21 13:12:23 +00:00
[spi-memory]: https://github.com/jonas-schievink/spi-memory/
[Si4703]: https://github.com/eldruin/si4703-rs
2019-10-24 23:32:59 +00:00
[st7032i]: https://github.com/dotcypress/st7032i
2018-04-01 21:17:28 +00:00
## no-std crates
2018-04-02 09:59:50 +00:00
[`#![no_std]` crates][no-std-category] designed to run on resource constrained devices.
2018-04-01 21:17:28 +00:00
2018-12-09 21:57:46 +00:00
- [atomic](https://crates.io/crates/atomic): Generic Atomic<T> wrapper type. ![crates.io](https://img.shields.io/crates/v/atomic.svg)
2019-01-06 13:20:13 +00:00
- [bbqueue](https://crates.io/crates/bbqueue): A SPSC, statically allocatable queue based on BipBuffers suitable for DMA transfers - ![crates.io](https://img.shields.io/crates/v/bbqueue.svg)
- [bit_field](https://crates.io/crates/bit_field): manipulating bitfields and bitarrays - ![crates.io](https://img.shields.io/crates/v/bit_field.svg)
2018-12-09 21:56:06 +00:00
- [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](https://img.shields.io/crates/v/biquad.svg)
2018-10-13 19:56:13 +00:00
- [bluetooth-hci](https://crates.io/crates/bluetooth-hci): device-independent Bluetooth Host-Controller Interface implementation. ![crates.io](https://img.shields.io/crates/v/bluetooth-hci.svg)
2019-11-26 19:30:15 +00:00
- [`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](https://img.shields.io/crates/v/cmim.svg)
- [combine](https://crates.io/crates/combine): parser combinator library - ![crates.io](https://img.shields.io/crates/v/combine.svg)
- [console-traits](https://github.com/thejpster/console-traits): Describes a basic text console. Used by [menu] and implemented by [vga-framebuffer]. ![crates.io](https://img.shields.io/crates/v/console-tratis.svg)
- [tinybmp](https://crates.io/crates/tinybmp): No-std, no-alloc BMP parser for embedded systems. [Introductory blog post](https://wapl.es/rust/2019/03/04/embedded-graphics-0.4.7-bmp-support.html) - ![crates.io](https://img.shields.io/crates/v/tinybmp.svg)
2019-08-30 20:18:48 +00:00
- [gcode](https://github.com/Michael-F-Bryan/gcode-rs): A gcode parser for no-std applications - [![crates.io](https://img.shields.io/crates/v/gcode.svg)](https://crates.io/crates/gcode)
- [heapless](https://crates.io/crates/heapless): provides `Vec`, `String`, `LinearMap`, `RingBuffer` backed by fixed-size buffers - ![crates.io](https://img.shields.io/crates/v/heapless.svg)
2019-02-08 15:34:07 +00:00
- [ieee802154](https://crates.io/crates/ieee802154): Partial implementation of the IEEE 802.15.4 standard - ![crates.io](https://img.shields.io/crates/v/ieee802154.svg)
2019-09-26 19:52:52 +00:00
- [infrared](https://crates.io/crates/infrared): infrared remote control library for embedded rust - ![crates.io](https://img.shields.io/crates/v/infrared.svg)
2018-05-26 23:39:03 +00:00
- [intrusive-collections](https://crates.io/crates/intrusive-collections): intrusive (non-allocating) singly/doubly linked lists and red-black trees - ![crates.io](https://img.shields.io/crates/v/intrusive-collections.svg)
- [managed](https://crates.io/crates/managed): provides `ManagedSlice`, `ManagedMap` backed by either their std counterparts or fixed-size buffers for `#![no_std]`. - ![crates.io](https://img.shields.io/crates/v/managed.svg)
- [menu]: A basic command-line interface library. Has nested menus and basic help functionality. ![crates.io](https://img.shields.io/crates/v/menu.svg)
- [micromath](https://github.com/NeoBirth/micromath): Embedded Rust math library featuring fast, safe floating point approximations for common arithmetic operations, 2D and 3D vector types, and statistical analysis - ![crates.io](https://img.shields.io/crates/v/micromath.svg)
2018-05-26 23:38:08 +00:00
- [nalgebra](https://crates.io/crates/nalgebra): general-purpose and low-dimensional linear algebra library - ![crates.io](https://img.shields.io/crates/v/nalgebra.svg)
- [nom](https://crates.io/crates/nom): parser combinator framework - ![crates.io](https://img.shields.io/crates/v/nom.svg)
- [null-terminated](https://crates.io/crates/null-terminated): generic null-terminated arrays - ![crates.io](https://img.shields.io/crates/v/null-terminated.svg)
- [num-format](https://crates.io/crates/num-format): Crate for producing string representations of numbers, formatted according to international standards, e.g. "1,000,000" for US English - ![crates.io](https://img.shields.io/crates/v/num-format.svg)
2019-11-26 19:30:15 +00:00
- [`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](https://img.shields.io/crates/v/panic-persist.svg)
- [pc-keyboard]: A PS/2 keyboard protocol driver. Transport (bit-banging or SPI) agnostic, but can convert Set 2 Scancodes into Unicode. ![crates.io](https://img.shields.io/crates/v/pc-keyboard.svg)
- [qei](https://crates.io/crates/qei) : A qei wrapper that allows you to extend your qei timers from a 16 bit integer to a 64 bit integer. - ![crates.io](https://img.shields.io/crates/v/qei.svg)
- [register-rs](https://github.com/rust-osdev/register-rs): Unified interface for MMIO and CPU registers. Provides type-safe bitfield manipulation. `register-rs` is basically Tock registers with added support for CPU register definitions using the same API as for the MMIO ones. So for bigger projects you then have homogeneous interfaces to registers of all kinds. - ![crates.io](https://img.shields.io/crates/v/register.svg)
- [bounded-registers](https://crates.io/crates/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](https://img.shields.io/crates/v/bounded-registers.svg)
2018-10-13 19:56:13 +00:00
- [scroll](https://crates.io/crates/scroll): extensible and endian-aware Read/Write traits for generic containers - ![crates.io](https://img.shields.io/crates/v/scroll.svg)
- [smoltcp](https://github.com/m-labs/smoltcp): a small TCP/IP stack that runs without `alloc`. ![crates.io](https://img.shields.io/crates/v/smoltcp.svg)
- [vga-framebuffer]: A VGA signal generator and font renderer for VGA-less microcontrollers. Used by [Monotron](https://github.com/thejpster/monotron) to generate 48 by 36 character display using 3 SPI peripherals and a timer. ![crates.io](https://img.shields.io/crates/v/vga-framebuffer.svg)
- [dcmimu]: An algorithm for fusing low-cost triaxial MEMS gyroscope and accelerometer measurements ![crates.io](https://img.shields.io/crates/v/dcmimu.svg)
2019-03-28 19:17:38 +00:00
- [wyhash]: A fast, simple and portable hashing algorithm and random number generator. - ![crates.io](https://img.shields.io/crates/v/wyhash.svg)
[pc-keyboard]: https://github.com/thejpster/pc-keyboard
[vga-framebuffer]: https://github.com/thejpster/vga-framebuffer-rs
[menu]: https://github.com/thejpster/menu
2018-12-09 11:21:55 +00:00
[biquad]: https://crates.io/crates/biquad
[dcmimu]: https://crates.io/crates/dcmimu
2019-03-28 19:17:38 +00:00
[wyhash]: https://crates.io/crates/wyhash
2019-11-26 19:28:18 +00:00
[`panic-persist`]: https://crates.io/crates/panic-persist
[`cmim`]: https://crates.io/crates/cmim
2018-04-02 09:59:50 +00:00
2018-05-19 15:18:52 +00:00
### WIP
Work in progress crates. Help the authors make these crates awesome!
2019-03-15 15:01:49 +00:00
- [light-cli](https://github.com/rudihorn/light-cli): a lightweight heapless cli interface ![crates.io](https://img.shields.io/crates/v/light_cli.svg)
2018-09-27 17:00:05 +00:00
- [OxCC](https://github.com/jonlamb-gh/oxcc): A port of Open Source Car Control written in Rust
- [Rubble](https://github.com/jonas-schievink/rubble): A pure-Rust embedded BLE stack ![crates.io](https://img.shields.io/crates/v/rubble.svg)
2018-04-02 09:59:50 +00:00
[no-std-category]: https://crates.io/categories/no-std
2018-04-01 21:17:28 +00:00
2018-04-06 16:28:02 +00:00
## Rust forks
### AVR
- [AVR Rust](https://github.com/avr-rust/rust) Fork of Rust with AVR support.
2018-05-02 14:22:53 +00:00
## Firmware projects
- [anne-key](https://github.com/ah-/anne-key): Alternate keyboard firmware for the Obins ANNE Pro
- [e.ziclean cube vacuum cleaner](https://github.com/geomatsi/e.ziclean-cube): Experiments with open firmware for e.ziclean cube vacuum cleaner
2018-05-02 14:22:53 +00:00
2018-04-01 21:17:28 +00:00
## License
This list is licensed under
- CC0 1.0 Universal License ([LICENSE-CC0](LICENSE-CC0) or
https://creativecommons.org/publicdomain/zero/1.0/legalcode)
## Code of Conduct
Contribution to this crate is organized under the terms of the [Rust Code of
2019-03-05 21:18:54 +00:00
Conduct][CoC], the maintainer of this crate, the [Resources team][team], promises
to intervene to uphold that code of conduct.
[CoC]: CODE_OF_CONDUCT.md
[team]: https://github.com/rust-embedded/wg#the-resources-team