#embedded-hal-i2c #i2c #embedded-hal #expander #i2c-bus #no-std #io-expander

no-std pca9535

使用 embedded-hal 的 PCA9535 IO-Expander 驱动程序

6个版本 (稳定)

2.0.0 2024年1月21日
1.2.0 2022年12月31日
1.1.0 2022年6月14日
1.0.0 2022年3月20日
0.0.1 2021年12月25日

#160 in 嵌入式开发

Download history 293/week @ 2024-03-08 67/week @ 2024-03-15 88/week @ 2024-03-22 272/week @ 2024-03-29 139/week @ 2024-04-05 266/week @ 2024-04-12 267/week @ 2024-04-19 375/week @ 2024-04-26 85/week @ 2024-05-03 75/week @ 2024-05-10 251/week @ 2024-05-17 654/week @ 2024-05-24 305/week @ 2024-05-31 27/week @ 2024-06-07 16/week @ 2024-06-14 1/week @ 2024-06-21

每月625次下载

MIT许可证

69KB
807

PCA9535

crates.io documentation license

使用 embedded-hal 的 PCA9535 IO-Expander 驱动程序。

特性

两种扩展模式

  • 立即
  • 缓存

立即模式在每个函数调用时都会发出 i2c 总线事务,就像正常的 i2c 设备库一样。

缓存模式利用了设备的中断引脚,该引脚指示寄存器值的变化。驱动程序保留设备寄存器的内部表示;因此,只有在中断引脚指示有数据变化时才会发出读取操作。与立即模式相比,这种模式可以显著减少对总线的读取访问。

两种交互方式

  • 标准接口
  • HAL 引脚接口

标准接口提供与设备 GPIO 引脚交互所需的所有函数。

HAL 引脚接口提供了一种使用 Expander GPIO 作为嵌入式-hal GPIO 的方法,这使得它们可以在任何使用嵌入式-hal 的其他库中使用。可以使用 ExpanderMutex 在多个线程中使用这些引脚。

使用示例

这是一个基本的使用示例;有关更多信息,请访问文档

使用标准接口的立即扩展器

use pca9535::{GPIOBank, Pca9535Immediate, StandardExpanderInterface};

let i2c = I2c::new().unwrap();

let mut expander = Pca9535Immediate::new(i2c, 32);

expander.pin_into_input(GPIOBank::Bank0, 4).unwrap();
expander.pin_into_output(GPIOBank::Bank1, 6).unwrap();

if expander.pin_is_high(GPIOBank::Bank0, 4).unwrap() {
    expander.pin_set_high(GPIOBank::Bank1, 6).unwrap();
}

使用 HAL 引脚接口的缓存扩展器

use std::sync::Mutex;
use embedded_hal::digital::blocking::{InputPin, OutputPin};
use pca9535::{ExpanderInputPin, ExpanderOutputPin, GPIOBank, IoExpander, Pca9535Cached, PinState};

let i2c = I2c::new().unwrap();
let interrupt_pin = Gpio::new().unwrap().get(1).unwrap().into_input();

let expander = Pca9535Cached::new(i2c, 32, interrupt_pin, true).unwrap();
let io_expander: IoExpander<_, _, Mutex<_>> = IoExpander::new(expander);

let mut input_pin = ExpanderInputPin::new(&io_expander, GPIOBank::Bank0, 4).unwrap();
let mut output_pin = ExpanderOutputPin::new(&io_expander, GPIOBank::Bank1, 6, PinState::Low).unwrap();

if input_pin.is_high().unwrap() {
    output_pin.set_high().unwrap();
}

变更日志

请参阅 CHANGELOG.md 或版本页面以获取详细信息。

依赖关系