#usb-device #ftdi #blaster #embedded-devices #jtag #no-std

no-std usbd-blaster

嵌入式设备用的 USB Blaster

1 个不稳定版本

0.1.3 2020年4月4日
0.1.2 2020年4月2日
0.1.1 2020年3月30日
0.1.0 2020年3月30日

#845嵌入式开发

MIT/Apache

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
  • 板子烧录工具

烧录 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