3 个稳定版本
1.1.0 | 2020年11月5日 |
---|---|
1.0.1 | 2020年7月11日 |
1.0.0 | 2020年7月6日 |
#931 在 硬件支持
110KB
2.5K SLoC
Wishbone Bridge
此crate允许使用Rust编写代码来通过Wishbone桥操作设备。可以根据所需的桥接类型指定各种桥接器。
支持的桥接器包括
- SPI
- 以太网
- USB
- UART (串行)
- PCI Express
示例用法
例如,有一种设备具有一个USB桥接器,在地址0xf001_7000处有一个小的随机数生成器。该设备具有一个简单的API
- 将
1
写入0xf001_7000以启用设备 - 当
0xf001_7008
为1
时,有数据可用 - 从
0xf001_7004
读取数据 - 转到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