
* Make cargo xfmt respect the format config * Make sure comments and doc code have the same width
esp-hal
Bare-metal (no_std
) hardware abstraction layer for Espressif devices.
Implements a number of blocking and, where applicable, async traits from the various packages in the embedded-hal repository.
For help getting started with this HAL, please refer to The Rust on ESP Book and the documentation.
Documentation
Supported Devices
Chip | Datasheet | Technical Reference Manual | Target |
---|---|---|---|
ESP32 | ESP32 | ESP32 | xtensa-esp32-none-elf |
ESP32-C2 | ESP32-C2 | ESP32-C2 | riscv32imc-unknown-none-elf |
ESP32-C3 | ESP32-C3 | ESP32-C3 | riscv32imc-unknown-none-elf |
ESP32-C6 | ESP32-C6 | ESP32-C6 | riscv32imac-unknown-none-elf |
ESP32-H2 | ESP32-H2 | ESP32-H2 | riscv32imac-unknown-none-elf |
ESP32-S2 | ESP32-S2 | ESP32-S2 | xtensa-esp32s2-none-elf |
ESP32-S3 | ESP32-S3 | ESP32-S3 | xtensa-esp32s3-none-elf |
Peripheral support
Driver | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S2 | ESP32-S3 |
---|---|---|---|---|---|---|---|
ADC | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
AES | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | |
ASSIST_DEBUG | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ||
DAC | ⚒️ | ⚒️ | |||||
DMA | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
DS | ❌ | ❌ | ❌ | ❌ | ❌ | ||
ECC | ⚒️ | ⚒️ | ⚒️ | ||||
Ethernet | ❌ | ||||||
ETM | ⚒️ | ⚒️ | |||||
GPIO | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
HMAC | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ||
I2C master | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
I2C slave | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | |
I2S | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | |
Interrupts | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
IOMUX | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
Camera interface | ❌ | ❌ | ⚒️ | ||||
RGB display | ⚒️ | ❌ | ⚒️ | ||||
LEDC | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
MCPWM | ⚒️ | ⚒️ | ⚒️ | ⚒️ | |||
PARL_IO | ⚒️ | ⚒️ | |||||
PCNT | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ||
PSRAM | ⚒️ | ⚒️ | ⚒️ | ||||
RMT | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | |
RNG | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
RSA | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | |
SDIO host | ⚒️ | ⚒️ | |||||
SDIO slave | ⚒️ | ⚒️ | |||||
Light/deep sleep | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
SHA | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
SPI master | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
SPI slave | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
SYSTIMER | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | |
Temperature sensor | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
Timers | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ |
Touch | ⚒️ | ❌ | ❌ | ||||
TWAI | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | |
UART | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
ULP (FSM) | ⚒️ | ⚒️ | ⚒️ | ||||
ULP (RISC-V) | ⚒️ | ⚒️ | ⚒️ | ||||
USB OTG FS | ⚒️ | ⚒️ | |||||
USB Serial/JTAG | ⚒️ | ⚒️ | ⚒️ | ⚒️ | |||
WIFI | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | |
Bluetooth | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | ⚒️ | |
IEEE 802.15.4 | ⚒️ | ⚒️ |
- Empty cell: not available
- ❌: Not supported
- ⚒️: Partial support
- ✔️: Supported
unstable
feature
The stable feature set is designed to remain consistent and reliable. Other parts guarded by the unstable
feature, however, are still under active development and may undergo breaking changes and are disabled by default.
Minimum Supported Rust Version (MSRV)
This crate is guaranteed to compile when using the latest stable Rust version at the time of the crate's release. It might compile with older versions, but that may change in any new release, including patches.
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.