1个不稳定版本
0.1.0 | 2024年5月3日 |
---|
646 在 嵌入式开发
每月29次下载
14KB
203 行
PCA9548A 驱动程序
使用嵌入式-hal的PCA9548a I2C-Expander驱动程序。
简单用法
您可以选择一个或多个通道进行激活。
use pca9548a::{Pca9548a, BASE_ADDRESS};
use embedded_hal::i2c::I2c;
let pca = Pca9548a::<std::sync::Mutex<_>>::new(i2c_bus, BASE_ADDRESS);
// `select_*()` returns an i2c-bus that can be used to perform transactions.
pca.select_single(0).unwrap().write(0x42, &[1, 2]).unwrap();
pca.select_mask(1 << 2 | 1 << 3).unwrap().write(0x42, &[1, 2]).unwrap();
子总线
通常您会希望使用预期拥有类型实现 I2c
的设备驱动程序。
为此,提供了一个代理类型 SubBus
,它实现了 embedded_hal::i2c::I2c
/embedded_hal_async::i2c::I2c
(根据底层的互斥锁和i2c总线实现)。
您甚至可以使用它级联PCA9548A
use pca9548a::{Pca9548a, BASE_ADDRESS};
let pca = Pca9548a::<std::sync::Mutex<_>>::new(i2c_bus, BASE_ADDRESS);
// NOTE: If you chain PCA9548As, they must have different addresses
let pca_0 = Pca9548a::<std::sync::Mutex<_>>::new(pca.single_subbus(0), BASE_ADDRESS + 1);
let pca_1 = Pca9548a::<std::sync::Mutex<_>>::new(pca.single_subbus(1), BASE_ADDRESS + 1);
let pca_1_7 = Pca9548a::<std::sync::Mutex<_>>::new(pca_1.single_subbus(7), BASE_ADDRESS + 2);
// This will correctly select the channel 1 on pca, then channel 7 on pca_1, then channel 3 on pca_1_7
// before writing [1, 2] to address 0x42.
pca_1_7.select_single(3).unwrap().write(0x42, &[1, 2]).unwrap();
关于SharedBus的说明
此驱动程序需要类似 shared_bus
crate对底层i2c总线的共享访问。使用互斥锁来实现这一点。
在选择一组通道时,返回对i2c-bus的锁;这可以用来执行事务,并在您完成之前防止其他任务更改选择。
然而,这假设 Pca9548a
结构对底层i2c总线具有 独占 访问权。如果您使用 shared_bus
或类似,您必须确保其他任务无法更改选择,因为这可能会破坏选择正确通道的保证。
依赖项
~78KB