我对 Rust 还很陌生,正在深入研究相对复杂的嵌入式编程,也许这就是我的问题,请耐心等待...
我使用 RPi Pico,带有基于 i2c 的 SH11106 显示屏,使用 https://github.com/jamwaffles/sh1106。我有另一个 i2c 外设 (MCP3421) 连接到同一总线。我正在使用大使馆。
我的问题是,将 i2c 接口传递给 SH1106 驱动程序后,它就无法再访问了。我无法使用
i2c.read()
读取数据并显示它。 i2c 实例已移动,我明白。但为什么它会被移动呢?恕我直言,这与连接多个设备的总线的整体目的相矛盾。所以...
有什么意见吗?
这是我的代码片段(希望足够了)。这个问题当然与大使馆无关,我只是提到我使用它。
#[embassy_executor::main]
async fn main(_spawner: Spawner) {
let p = embassy_rp::init(Default::default());
let used_i2c = p.I2C0;
let sda = p.PIN_12;
let scl = p.PIN_13;
let mut data = [0u8; 4];
info!("set up i2c ");
let mut i2c = i2c::I2c::new_async(used_i2c, scl, sda, Irqs, Config::default());
let mut display: GraphicsMode<_> = Builder::new().connect_i2c(i2c).into();
i2c.read_async(ADDRESS_16, &mut data).await.unwrap(); <--- Here the compiler protests.
...
据我发现,我的问题似乎已经得到了解答,但它也让“embedded-hal”的开发人员有些头疼。这次讨论应该给出答案:
https://github.com/rust-embedded/embedded-hal/issues/35
现在我只需要学习足够的 Rust 就能理解它......