5个版本
0.7.9 | 2021年5月14日 |
---|---|
0.7.5 | 2020年7月13日 |
0.7.3 | 2020年6月30日 |
0.7.2 | 2020年6月30日 |
0.7.1 | 2020年6月30日 |
#652 in 硬件支持
285KB
6K SLoC
wishbone-tool
- 一站式Wishbone二进制和库
wishbone-tool
可用于与设备内部的Wishbone桥进行交互。
以下是一些你可以使用 wishbone-tool
做的事情
- 窥视和探测内存,类似于使用
devmem2
- 测试内存和桥接链路质量
- 将Wishbone桥暴露给以太网
- 将GDB服务器附加到软核
目前支持的Wishbone桥包括
- USB - 用于与Valentyusb(如Fomu)配合使用
- 串行 - 通用UART,通常运行在115200(但可以通过
--baud
进行更改) - SPI - 使用来自 spibone 的2、3或4线SPI
- 以太网 - TCP(例如,
wishbone-tool
的远程副本)或UDP(通过Etherbone) - PCI Express - 使用暴露CSR寄存器银行的PCIe软核
二进制文件
可以在 发行版 部分找到预编译版本的 wishbone-tool
。
构建
要构建 wishbone-tool
- 安装Rust和Cargo。最简单的方法是访问 https://rustup.rs/ 并遵循说明。
- 进入
wishbone-tool
目录。 - 运行
cargo build
或cargo build --release
wishbone-tool
二进制文件将位于 target/debug/
或 target/release/
之下。
用法
默认情况下,wishbone-tool
将通过USB进行通信,尝试打开PID为0x5bf0
的设备。它还将运行peek/poke
服务器,允许对目标设备上的内存地址进行基本操作。
USB桥接器
只需运行wishbone-tool [地址]
即可查看特定地址。要指定特定的供应商ID,传递--vid [ID]
,例如--vid 0xb0f1
。要从内存区域(如0x10000000)读取,运行
$ # Read from address 0x10000000 via USB
$ wishbone-tool 0x10000000
INFO [wishbone_tool::usb_bridge] waiting for target device
INFO [wishbone_tool::usb_bridge] opened USB device device 019 on bus 001
Value at 00000000: 6f80106f
$
要将值写入内存,添加一个额外的参数
$ wishbone-tool 0x10000000 0x12345678
INFO [wishbone_tool::usb_bridge] opened USB device device 019 on bus 001
$ wishbone-tool 0x10000000
INFO [wishbone_tool::usb_bridge] opened USB device device 019 on bus 001
Value at 00000000: 12345678
$
串行桥接器
您可以通过指定--serial
参数来连接到串行端口
$ wishbone-tool --serial COM4: 0x00000000
Value at 00000000: ffffffff
$ wishbone-tool --serial /dev/ttyUSB0 0x00000000
Value at 00000000: ffffffff
请确保您有写入串行端口的权限。在某些Linux系统上,您可能需要将您的用户添加到dialout
组。
以太网桥接器
要连接到以太网设备,传递--ethernet-host
参数
$ wishbone-tool --ethernet 192.168.100.50 0x00000000
Value at 00000000: ffffffff
要连接到不同的端口,添加--ethernet-port PORT_NUMBER
。最后,如果您想连接到另一个wishbone-tool
的副本或到lxserver
的副本,添加--ethernet-tcp
以将连接从Etherbone切换到TCP。
PCIe桥接器
如果您的设备通过PCI Express连接,您可以使用--pcie-bar FILE_PATH
指定PCIe BAR。这将在/sys/bus
下作为设备。
请注意,在PCIe模式下运行时,仅暴露内存空间的一小部分。这意味着您可能需要指定--register-offset OFFSET
,因为例如,PCIe BAR中的地址0可能实际上对应于地址0xe0000000,而wishbone-tool
需要知道如何进行转换。
SPI桥接器
如果您指定了--spi-pins
,wishbone-tool
将通过SPI与目标设备通信。目前这仅在Raspberry Pi上支持。指定物理Broadcom引脚编号。有关更多详细信息,请参阅Pinout.xyz。例如,假设您想将COPI、CPIO、CLK和CS_N连接到Raspberry Pi引脚3、5、7和12。如果您查看该网站,您会看到引脚3是BCM2,引脚5是BCM3,引脚7是BCM4,引脚12是BCM18。因此,您提供给wishbone-tool
的参数是--spi-pins 2,3,4,18
交叉UART
如果您的桥接器通过UART,那么这意味着您的UART已被占用,并且不可用作控制台。或者如果您通过其他介质连接,并且只有一根电缆连接两个设备。LiteX支持创建一个“交叉”UART,wishbone-tool
可以与之交互并在本地显示终端。
要将UART桥接器和交叉UART添加到设计中,使用uart_name="crossover"
实例化主SoC对象,并添加一个单独的Wishbone桥接器。
class MySoC(SoCCore):
def __init__(self, platform, sys_clk_freq):
SoCCore.__init__(self, platform, sys_clk_freq, uart_name="crossover")
# Add a bridge with the real UART pins
self.submodules.uart_bridge = UARTWishboneBridge(
platform.request("serial"),
sys_clk_freq,
baudrate=115200)
self.add_wb_master(self.uart_bridge.wishbone)
然后,要交互式地与终端交互,运行wishbone-tool
并向其提供构建的csr.csv
文件,并添加-s terminal
标志
$ wishbone-tool -s terminal --csr-csv build/csr.csv
$
请注意,您可以同时运行多个wishbone-tool
服务器。例如,要同时运行gdb
服务器,运行
$ wishbone-tool -s gdb -s terminal --csr-csv build/csr.csv
$
要退出会话,按Ctrl-C
。
GDB服务器
如果你的软核中包含Vexriscv CPU,您可以通过启用调试模式,并使用wishbone-tool
作为gdbserver。
命令行自动补全
您可以使用-c
选项生成wishbone-tool
的自动补全。例如,要为bash生成自动补全,请运行
$ wishbone-tool -c bash > wishbone-tool.bash
$ . wishbone-tool.bash
$
自动补全适用于zsh、bash、fish、powershell和elvish。
wishbone-bridge
作为库
您也可以将wishbone-bridge
作为库在您的程序中使用。更多信息请参阅wishbone-bridge文档。
依赖
~7–17MB
~193K SLoC