是否可以使用 arduino 制作 JTAG 接口?

电器工程 Arduino 手臂 嵌入式 标记
2022-01-10 06:21:49

如果是这样,有人可以引导我到一个告诉我如何做到这一点的网站吗?我相信我可能已经找到了一种方法,但我不确定它是否会起作用(需要找到一些东西来测试它)。

这个问题与我的上一个问题有关

如果需要更多背景信息。

4个回答

是的,可以将 Arduino 变成 ARM JTAG 适配器。

存在三个问题,电压、速度和驱动器。

Arduino 本身以 5V 运行。大多数 ARM 微控制器的 JTAG 引脚不能承受 5V,需要 3.3V。最简单的解决方案是以 3.3V 运行您的 Arduino,否则您将需要某种电平转换(有关想法,请参阅I2C 3.3 到 5.0 V 转换)。

Arduino 通过串行链路连接到 PC。我怀疑它是否可能比 115200bps 更快,这将使交互式活动(例如在调试器中单步执行代码)变得非常缓慢。但是,您将能够上传代码和刷新设备。

JTAG 是一种高级协议,特定于每个处理器系列,它使用类似 SPI 的接口来交换数据。大多数 JTAG 加密狗只是通过 USB 提供一个 SPI 接口,然后将其余的工作留给 PC 应用程序。OpenOCD 和 URJTag 是流行的选择。您将需要其中之一的驱动程序用于您的 Arduino JTAG 协议。

Bus Pirate 与 Arduino(低速微控制器 + FTDI 芯片)非常相似。它支持带有 OpenOCD 的 JTAG,所以这当然是可能的。

如果您使用 Teensy/Opendous 或其他 AVR-USB 板,您可以使用eStick-JTAG

但是,对于成本损失的 JTAG,我推荐使用基于 FTDI2232 的加密狗之一。它们很便宜,并且受到 OpenOCD 的良好支持。

这是可能的,但非常困难。我不喜欢基于 FTDI 的 JTAG,因为 FTDI 芯片是现成的黑匣子,人们并没有真正通过使用它们来学习。

如果我想用 AVR 构建一个 USB-JTAG,我会得到一个芯片中至少支持 USB 全速的 USB-JTAG。然后获取 AVR usb 堆栈(c 源代码)并查看一个 usb-to 串行示例。由于通过 USB 进行 bitbanging 是一个坏主意(高延迟),因此需要将其转换为更高级别的命令,这些命令将指示 MCU 自己进行 bitbanging(或如果可能的话使用 SPI)并通过 USB 返回高级结果(完整字节)。但随后需要为 IDE 编写驱动程序以支持新的 JTAG 设备对其进行调试。OpenOCD 和 URJTag 具有许多 jtag 设备的驱动程序源代码,因此您需要为您新发明的设备获取并重做一个。看看有些人是如何完成类似工作的:http ://code.google.com/p/estick-jtag/

看看openocd。后端主要基于并行端口位爆炸方法,我认为它一次只更改一个位。拿我认为他们称之为虚拟后端的东西来说是相当简单的,这是一个例子。向arduino发送任何写位命令,并设置或清除该位。当被要求读取输入位时,然后向 arduino 发送命令以执行该任务并返回结果。

我已经成功地做到了这一点,但没有使用 arduino,我让 openocd 从主机对话到在 hdl 模拟器中运行的模拟 arm 核心。

请注意,一些 jtag 规范已关闭,例如 cortex-m3 是某种序列化的减少引脚数的 jtag,我上次查看时,如果没有 NDA,它是不可用的。这可能无关紧要,因为只要您使用 openocd 支持的 jtag 接口,openocd 就会为您处理所有这些,后端是您的 arduino 以及您用来进出它的任何接口的地方。 .

正如 Joby 已经指出的那样,您需要小心电压(并非所有 arduino 口味都是 5V,也不是所有手臂控制器都是 3.3 伏)以及信号调节和接地以及所有这些东西。如果您的目标板由与您为 arduino 供电的电源不同级别的电源供电,那么当您连接两者时,您可能会熔化一些东西。

这是可能的,我实际上实现了它并在这里解释了所有内容。

github 上有一个库,由两部分组成:在 arduino 上运行的程序和将 XSVF 文件发送到 arduino 的 python 脚本。

您很可能需要几个电阻将 5 V 转换为 3.3 V,因为大多数 FPGA 和 CPLD 都使用此电压电平。

我也做了一些为 XSVF 文件编写汇编器/反汇编器的经验,代码在同一个 github 库中,并在这篇文章中进行解释。