在Rust中使用sh1106(和类似的)时,有没有办法不“移动”i2c

问题描述 投票:0回答:1

我对 Rust 还很陌生,正在深入研究相对复杂的嵌入式编程,也许这就是我的问题,请耐心等待...

我使用 RPi Pico,带有基于 i2c 的 SH11106 显示屏,使用 https://github.com/jamwaffles/sh1106。我有另一个 i2c 外设 (MCP3421) 连接到同一总线。我正在使用大使馆。

我的问题是,将 i2c 接口传递给 SH1106 驱动程序后,它就无法再访问了。我无法使用

i2c.read()
读取数据并显示它。 i2c 实例已移动,我明白。但为什么它会被移动呢?恕我直言,这与连接多个设备的总线的整体目的相矛盾。所以...

  • 我太愚蠢/新鲜了,错过了一个明显的 Rust 重用 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.
    ...
i2c raspberry-pi-pico rust-embedded
1个回答
0
投票

据我发现,我的问题似乎已经得到了解答,但它也让“embedded-hal”的开发人员有些头疼。这次讨论应该给出答案:

https://github.com/rust-embedded/embedded-hal/issues/35

现在我只需要学习足够的 Rust 就能理解它......

© www.soinside.com 2019 - 2024. All rights reserved.