#spi-interface #driver #imu #sensor #motion #async #embedded-hal

nightly icm426xx

ICM426xx系列IMU的Rust驱动程序

7个版本

0.2.4 2024年7月27日
0.2.3 2024年7月27日
0.1.1 2024年7月18日

#483硬件支持

Download history 287/week @ 2024-07-16 238/week @ 2024-07-23 86/week @ 2024-07-30

每月611次下载

MIT/Apache

85KB
1K SLoC

icm426xx - Rust中的ICM-426xx 6轴运动传感器驱动程序

crates.io docs.rs

这是一个使用embedded-hal特质的、与平台无关的ICM-426xx 6轴运动传感器Rust驱动程序。

当前支持的设备

  • ICM-42688-P

我们支持I2C和SPI接口,但目前仅测试了SPI接口。欢迎提交PR!

同样,我们支持异步和阻塞接口,但目前仅测试了异步接口。

仅支持基于FIFO的、20位数据模式。如需支持其他模式,请提交问题。

使用方法

use async_std::prelude::*; // Just for the runtime
use embedded_hal_mock::eh1::spi::{Mock as SpiMock, Transaction as SpiTransaction};
use embedded_hal_mock::eh1::digital::Mock as PinMock;
use embedded_hal_mock::eh1::digital::{State as PinState, Transaction as PinTransaction};
use embedded_hal_mock::eh1::delay::NoopDelay as Delay;
#[async_std::main]
async fn main() {
    let spi = SpiMock::new(&[]);
    let mut pin = PinMock::new(&[PinTransaction::set(PinState::High)]);
    let spidev =
        embedded_hal_bus::spi::ExclusiveDevice::new_no_delay(spi, pin.clone()).unwrap();

    let mut icm = icm426xx::ICM42688::new(spidev);
    let mut icm = icm.initialize(Delay).await.unwrap();
    let mut bank = icm.ll().bank::<{ icm426xx::register_bank::BANK0 }>();

    // print WHO_AM_I register
    let who_am_i = bank.who_am_i().async_read().await;
    loop {
        let fifo_count = icm.read_fifo_count().await;
        let mut fifo_buffer = [0u32; 128];
        let num_read = icm.read_fifo(&mut fifo_buffer).await.unwrap();
    }
}

许可证

MIT OR Apache-2.0

依赖关系

~1.2–1.8MB
~36K SLoC