句柄
方法
类型
I2cEffectiveConfig
方法参考
configure(frequency_hz: Option<u32>, pull_ups: Option<bool>) -> Result<I2cEffectiveConfig>
应用总线设置,并回读实际生效的内容。传 None 的参数保留该 Net 已保存的值;您传入的任何值都会实时应用并持久化到 Box 上。
scan() -> Result<Vec<u16>>
扫描默认地址范围。
Vec<u16>,按升序排列。
scan_range(start_addr: u16, end_addr: u16) -> Result<Vec<u16>>
扫描一个显式给出的闭区间范围。
read(address: u16, num_bytes: u32) -> Result<Vec<u8>>
从 address 处的设备读取 num_bytes 个字节。
write(address: u16, data: &[u8]) -> Result<()>
向 address 处的设备写入 data。
write_read(address: u16, data: &[u8], num_bytes: u32) -> Result<Vec<u8>>
在一次事务中先写后读,使用重复起始条件,而不是先停止再重新开始。多数器件上的寄存器读取都需要这样做。
示例
先看看总线上有什么,再读取一个传感器寄存器
受支持的硬件
说明
- 地址是 7 位的。请传
0x48,而不是按读/写移位后的 8 位形式。 - 扫描到了并不等于承诺。 扫描报告的是哪些地址对地址字节作出了应答;随后的
read()仍然可能以No ACK from device at 0x48失败。在控制器内部上拉被禁用的总线上这很常见,那时信号线可以悬空到足以看起来像一次应答。请把scan()当作发现手段,而不是验证手段。 - 总线事务在 Box 上、在该物理设备的锁之下运行,因此一次先写后读不会被同一设备上的另一个请求打断。
configure()会持久化。您在一个测试里设置的频率,在下一个测试里仍然有效。

