Thanks to visit codestin.com
Credit goes to lib.rs

7 releases (4 breaking)

Uses new Rust 2024

0.13.1 Dec 14, 2025
0.12.0 Nov 27, 2025

#657 in Embedded development

MIT license

330KB
6.5K SLoC

LR2021 Driver

Crates.io Documentation License

An async, no_std Rust driver for the Semtech LR2021 dual-band transceiver, supporting many different radio protocols including LoRa, BLE, ZigBee, Z-Wave, and more.

Quick Start

Add this to your Cargo.toml:

[dependencies]
lr2021 = "0.13"
embassy-time = "0.5"

Basic usage:

use lr2021_driver::Lr2021;

let mut radio = Lr2021::new(reset_pin, busy_pin, spi_device, nss_pin);
radio.reset().await?;
// Configure and use your preferred protocol

Hardware Requirements

  • Semtech LR2021 transceiver module
  • SPI-capable microcontroller
  • 3 GPIO pins: Reset (output), Busy (input), NSS/CS (output) (not counting SPI SCK/MISO/MOSI)
  • Embassy-compatible async runtime

Documentation & Examples

Protocol Test Status

Protocol Status Notes
LoRa Partial Basic communication between two LR2021 devices: smallest SF, highest bandwidth. TODO: Ranging
BLE Partial 1MB/s mode, compatible with other BLE devices. TODO: 2Mb/s, Coded
FLRC Tested Basic communication between two LR2021 devices
FSK Tested Generic FSK communication verified
Z-Wave Tested Scan mode tested with ZStick S2, R1-R3 reception
OOK Partial ADSB reception validated, RTS between two LR2021
ZigBee Partial Reception validated with standard device
WiSUN Partial Basic communication between two LR2021 devices
WMBus Partial Basic communication between two LR2021 devices
LR-FHSS Unplanned TX only (require gateway for test)
Sigfox (BPSK) Unplanned TX only (require gateway for test)

Dependencies

~2.5MB
~54K SLoC