#i2c #gpio-pin #gpio #pca #外设 #gpio-expander #pcf

无std 端口扩展器

I²C端口扩展器的抽象

12个不稳定版本 (5个破坏性更改)

0.6.2 2024年7月7日
0.5.1 2024年7月7日
0.5.0 2024年2月19日
0.4.1 2023年12月25日
0.2.1 2021年4月26日

#86 in 嵌入式开发

Download history 45/week @ 2024-04-27 162/week @ 2024-05-04 80/week @ 2024-05-11 53/week @ 2024-05-18 32/week @ 2024-05-25 11/week @ 2024-06-01 15/week @ 2024-06-08 12/week @ 2024-06-15 16/week @ 2024-06-22 8/week @ 2024-06-29 185/week @ 2024-07-06 78/week @ 2024-07-13 137/week @ 2024-07-20 35/week @ 2024-07-27 171/week @ 2024-08-03 108/week @ 2024-08-10

每月487次下载
用于 2 crates

MIT/Apache

130KB
3K SLoC

端口扩展器 crates.io页面 docs.rs页面

这是一个提供I²C端口扩展器通用抽象的crate。这种抽象不一定是最高效的,但它允许像直接GPIO一样使用引脚。因为引脚类型还实现了embedded-hal数字IO特质,它们也可以传递给下游的进一步驱动程序(例如作为复位或芯片选择引脚)。

示例

// Initialize I2C peripheral from HAL
let i2c = todo!();

// A0: HIGH, A1: LOW, A2: LOW
let mut pca9555 = port_expander::Pca9555::new(i2c, true, false, false);
let pca_pins = pca9555.split();

let io0_0 = pca_pins.io0_0.into_output().unwrap();
let io1_5 = pca_pins.io0_1; // default is input

io0_0.set_high().unwrap();
assert!(io1_5.is_high().unwrap());

同时访问多个引脚

有时时序约束要求同时进行多个引脚访问(读取或写入)。为此设计了write_multiple()read_multiple()方法。

支持的设备

以下列表是端口扩展器目前支持的设备。如果您需要支持其他设备,应该很容易添加。最好以类似现有的实现为灵感。欢迎贡献!

非局部共享

端口扩展器使用自定义特质来抽象不同类型的互斥锁:PortMutex。这意味着您也可以在提供适当的互斥锁类型的情况下,在任务/线程边界之间共享引脚。

// Initialize I2C peripheral from HAL
let i2c = todo!();

// A0: HIGH, A1: LOW, A2: LOW
let mut pca9555: port_expander::Pca9555<std::sync::Mutex<_>> =
    port_expander::Pca9555::with_mutex(i2c, true, false, false);
let pca_pins = pca9555.split();

许可证

许可协议为以下之一

由您选择。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,将按照上述方式双重许可,不附加任何额外条款或条件。

依赖项

~64KB