3 个稳定版本

1.1.0 2020年11月5日
1.0.1 2020年7月11日
1.0.0 2020年7月6日

#931硬件支持


用于 wishbone-tool

Apache-2.0

110KB
2.5K SLoC

Wishbone Bridge

此crate允许使用Rust编写代码来通过Wishbone桥操作设备。可以根据所需的桥接类型指定各种桥接器。

支持的桥接器包括

  • SPI
  • 以太网
  • USB
  • UART (串行)
  • PCI Express

示例用法

例如,有一种设备具有一个USB桥接器,在地址0xf001_7000处有一个小的随机数生成器。该设备具有一个简单的API

  1. 1 写入0xf001_7000以启用设备
  2. 0xf001_70081 时,有数据可用
  3. 0xf001_7004 读取数据
  4. 转到2

我们可以将其转换为从该RNG读取并将输出打印到stdout的命令

use std::io::{self, Write};
use wishbone_bridge::{UsbBridge, BridgeError};

fn main() -> Result<(), BridgeError> {
    let stdout = io::stdout();
    let mut handle = stdout.lock();

    // Create a configuration object with a USB bridge that
    // connects to a device with the product ID of 0x5bf0.
    let bridge = UsbBridge::new().pid(0x5bf0).create()?;

    // Enable the oscillator. Note that this address may change,
    // so consult the `csr.csv` for your device.
    bridge.poke(0xf001_7000, 1)?;

    loop {
        // Wait until the `Ready` flag is `1`
        while bridge.peek(0xf001_7008)? & 1 == 0 {}

        // Read the random word and write it to stdout
        handle
            .write_all(&bridge.peek(0xf001_7004)?.to_le_bytes())
            .unwrap();
    }
}

然后可以使用 cargo run | hexdump -C 运行它,以生成无限流随机数。

功能支持

默认启用对所有桥接器的支持,但是您可以使用Cargo功能仅启用某些桥接器。

例如,要仅启用"usb"桥接器,请将以下内容添加到您的 Cargo.toml

[dependencies]
wishbone-bridge = { version = "1", default-features = false, features = ["usb"] }

这将导致构建更快,但您只能访问 UsbBridge

依赖关系

~0–1.6MB
~30K SLoC