lps22df-rs

Crates.iolps22df-rs
lib.rslps22df-rs
version1.0.0
created_at2025-08-19 07:11:41.360003+00
updated_at2025-08-19 07:11:41.360003+00
description Platform-agnostic driver for the LPS22DF ultracompact digital barometer and absolute pressure sensor with I2C, SPI interfaces.
homepage
repositoryhttps://github.com/STMicroelectronics/lps22df-rs
max_upload_size
id1801482
size55,947
Armando Visconti (avisconti)

documentation

README

lps22df-rs

Crates.io BSD 3-Clause licensed

Provides a platform-agnostic, no_std-compatible driver for the ST LPS22DF sensor, supporting both I2C and SPI communication interfaces.

Sensor Overview

The LPS22DF is an ultracompact, piezoresistive, absolute pressure sensor that functions as a digital output barometer. The LPS22DF provides lower power consumption, achieving lower pressure noise than its predecessor.

The device comprises a sensing element and an IC interface that communicates over an I²C, MIPI I3CSM, or SPI interface from the sensing element to the application and supports a wide Vdd IO range for the digital interfaces as well. The sensing element, which detects absolute pressure, consists of a suspended membrane manufactured using a dedicated process developed by ST.

The LPS22DF is available in a full-mold, holed LGA package (HLGA). It is guaranteed to operate over a temperature range extending from -40 °C to +85 °C. The package is holed to allow external pressure to reach the sensing element.

For more info, please visit the device page at https://www.st.com/en/mems-and-sensors/lps22df.html

Installation

Add the driver to your Cargo.toml dependencies:

[dependencies]
lps22df-rs = "0.1.0"

Or, add it directly from the terminal:

cargo add lps22df-rs

Usage

Include the crate and its prelude

use lps22df_rs as lps22df;
use lps22df::*;
use lps22df::prelude::*;

Create an instance

Create an instance of the driver with the new_<bus> associated function, by passing an I2C (embedded_hal::i2c::I2c) instance and I2C address, or an SPI (embedded_hal::spi::SpiDevice) instance, along with a timing peripheral.

An example with I2C:

let mut sensor = Lps22df::new_i2c(i2c, I2CAddress::I2cAddH, delay);

Check "Who Am I" Register

This step ensures correct communication with the sensor. It returns a unique ID to verify the sensor's identity.

let whoami = sensor.id_get().unwrap();
if whoami != ID {
    panic!("Invalid sensor ID");
}

Configure

See details in specific examples; the following are common api calls:

// Boot device
sensor.init_set(Init::Boot).unwrap();

// Reset device
sensor.init_set(Init::Reset).unwrap();

// Set BDU and IF_INC recommended for driver usage
sensor.init_set(Init::DrvRdy).unwrap();

// Select bus interface
let bus_mode = BusMode {
    filter: Filter::FilterAuto,
    interface: Interface::SelByHw,
    i3c_ibi_time: I3cIbiTime::Ibi1ms,
};
sensor.bus_mode_set(&bus_mode).unwrap();

// Set Output Data Rate
let md = Md {
    odr: Odr::_4hz,
    avg: Avg::_16,
    lpf: LowPassFilter::OdrDiv4,
};
sensor.mode_set(&md).unwrap();

License

Distributed under the BSD-3 Clause license.

More Information: http://www.st.com.

Copyright (C) 2025 STMicroelectronics

Commit count: 3

cargo fmt