1 个不稳定版本
0.1.3 | 2020年4月4日 |
---|---|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#845 在 嵌入式开发 中
29KB
537 行
嵌入式设备用的 USB Blaster
这是什么?
一个用于模拟 USB Blaster 设备的 crate,使用 Rust 编写。
对于 Arduino MKR Vidor 4000,您可以使用它通过 Quartus 编程板上的 FPGA。
用法
要求
- Rust 语言(rustup,cargo)
- 嵌入式编译器工具链
- 对于 ARM:arm-none-eabi-gcc(ArchLinux 用户,获取 gcc-arm-none-eabi-bin)和 rustup target 添加 thumbv6m-none-eabi
- 板子烧录工具
- 对于 Atmel SAM: Atmel SAM 烧录工具(即 bossac,包含在 Arduino 工具中)
烧录 USB Blaster
Arduino MKR Vidor 4000
RUSTFLAGS='-C link-arg=-Tlink.x' cargo build --release --target thumbv6m-none-eabi --example arduino_mkrvidor4000
arm-none-eabi-objcopy -O binary target/thumbv6m-none-eabi/release/usbblaster-rs target/usbblaster-rs.bin
# Manual step: push reset button twice in quick succession to enter flash mode
bossac -i -d -U true -i -e -w -v target/usbblaster-rs.bin -R
使用 USB Blaster
Intel (Altera) Quartus
# Verify that the blaster exists
jtagconfig
# Flash your FPGA
quartus_pgm -m jtag -o 'p;project-name.sof'
OpenOCD
openocd -f altera-usb-blaster.cfg
示例配置
interface usb_blaster
init
scan_chain
svf project.svf
exit
确保您已启用 SVF 文件生成,并将 project.svf 改为您的项目名称。
您可以安全地忽略以下错误
错误: IR在位捕获错误2,看到0x3FFFFFFFFFFFFD55不是 0x...3
这似乎在其他 USB Blaster 上也会发生。如果您知道原因并可以修复它,请随时提交 PR。
工作原理
USB
该板被设置为与 Altera USB Blaster 相同的 VendorId 和 ProductId 的 USB 设备。
Blaster 通过一个特定于供应商的接口(Class = 255,SubClass = 255,Protocol = 255)进行通信。当接收到供应商类型的控制请求时,它模拟 ROM 和 FTDI245 芯片 的响应。
就像 FT245 一样,端点 1 仅用于输入,端点 2 仅用于输出。这些用于控制 Blaster 操作。
Blaster
Blaster 有两种工作模式:位操作(默认)或移位。在位操作中,有 JTAG 线的直接控制;每个接收到的字节都转换为如何驱动 TDI/TMS/TCK 的指令。它还包含标志,指示此指令是读还是写,以及 Blaster 是否应切换到移位模式并移出下一个 n 个字节。在移位模式下,Blaster 将下一个 n(从 0 到 63)个接收到的字节移出到 TDI 线。
位操作模式适用于 JTAG 控制,移位模式适用于像写入 FPGA 位流这样的批量传输。
怪癖/需要注意的事项
该组件仅支持JTAG。其他引脚被忽略,因为它们不属于JTAG部分
- 主动串行(AS)模式
- 低电平芯片使能(nCE)
- 低电平芯片选择(nCS)
- 主动串行数据输出(DATAOUT)
- 被动串行(PS)模式
- 低电平配置状态(nSTATUS)
特别感谢
依赖关系
~220KB