#embedded-hal-driver #i2c #devices #io #board #platform

no-std sx1509

SX1509的平台无关驱动程序

2个不稳定版本

使用旧的Rust 2015

0.2.0 2018年5月14日
0.1.0 2018年5月12日

#116 in #board

34 每月下载量

MIT/Apache

19KB
222

Rust的sx1509驱动程序

此模块实现了sx1509的驱动程序,sx1509是一个可通过I2C寻址的IO扩展设备。它针对以下板子实现: https://www.sparkfun.com/products/13601

许可证

根据以下之一许可:

根据您的选择。

贡献

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


lib.rs:

一个基于[sx1509]的平台无关Rust驱动程序,基于embedded-hal特性。

设备

[sx1509]是一个GPIO扩展器,还提供LED驱动和键盘扫描功能。该设备有两个8GPIO引脚的银行。

支持的功能

截至编写时,支持非常基础:您可以通过操作一个银行来重置设备并配置基本的GPIO功能。

未来

API设计有一些有趣的选项;例如,将GPIO引脚作为实现embedded-hal的GPIO特性的实例公开,这样就可以将其用于与其他驱动程序进行接口。

通过将引脚/银行移动到不同的模式,键盘和LED驱动程序功能有一些类型安全的API设计潜力。

需要找到一种既经济又方便的方式来表达这些API。

目前我们只有一种相当简单的传递方式!

用法

将此crate导入为embedded_hal实现

extern crate metro_m0 as hal;
extern crate sx1509;

初始化I2C总线(不同hal实现之间的差异)

let mut i2c = hal::I2CMaster3::new(
&clocks,
400.khz(),
peripherals.SERCOM3,
&mut peripherals.PM,
&mut peripherals.GCLK,
// Metro M0 express has I2C on pins PA22, PA23
Sercom3Pad0::Pa22(pins.pa22.into_function_c(&mut pins.port)),
Sercom3Pad1::Pa23(pins.pa23.into_function_c(&mut pins.port)),
);

然后实例化驱动程序

let mut expander = sx1509::Sx1509::new(&mut i2c, sx1509::DEFAULT_ADDRESS);
expander.borrow(&mut i2c).software_reset()?;
expander.borrow(&mut i2c).set_bank_a_direction(0)?;
// read the pins from bank a
let pins = expander.borrow(&mut i2c).get_bank_a_data()?;

请注意,您必须在每次操作的持续时间内借用i2c总线。这允许总线在操作之间共享并用于寻址其他设备。

可以长时间拥有总线的控制权。这是基于Future的使用所必需的。虽然目前不支持基于Future的使用,但我们确实支持这种操作模式

let mut owned = expander.take(i2c);

// Now you can borrow and perform the IO when you are ready:
let pins = owned.borrow().get_bank_a_data()?;

// and relinquish the bus when done
let (expander, i2c) = owned.release();

依赖项

~71KB