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


14

如果是这样,可以将我定向到一个讲述该操作方法的网站吗?我相信我可能已经找到了一种方法,但是我不确定它是否会起作用(需要找到一些测试方法)。

这个问题与这里的我先前的问题有关

如果需要更多背景信息。


JBailey我刚刚遇到了有关使用arduino制作JTAG-USB转换器的问题,我想知道您是如何做到的?\

Answers:


14

是的,可以将Arduino转换为ARM JTAG适配器。

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

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

Arduino通过串行链接连接到PC。我怀疑它的速度是否可能超过115200bps,这会使交互式活动(如在调试器中单步执行代码)非常慢。但是,您将能够上载代码并刷新设备。

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

海盗车与Arduino(低速微控制器+ FTDI芯片)非常相似。它支持带有OpenOCD的JTAG,因此肯定有可能。

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

但是,为了节省成本,JTAG,我建议使用基于FTDI2232的加密狗之一。它们很便宜,并且得到OpenOCD的良好支持。


5

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

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


1

看一下openocd。后端大多基于并行端口的“位爆炸”方法,我认为它甚至一次只能更改一位。我认为他们称之为虚拟后端的例子非常简单。将任何写入位命令发送到arduino,并对其进行设置或清除。当要求读取输入位时,向arduino发送命令以执行该任务并返回结果。

我已经成功地做到了这一点,但不是通过arduino来完成的,我是通过openocd从主机谈论到在hdl模拟器中运行的模拟手臂内核的。

请注意,有些jtag规格已关闭,例如cortex-m3是某种形式的序列化减少的jtag引脚数量,我上次查看时没有NDA时无法使用。这可能并不重要,因为只要您使用的是openocd支持的jtag接口,openocd便会为您处理所有工作,因此后端有点麻烦,它是您的arduino以及您用来进入/退出它的任何接口的地方。

正如Joby已经指出的那样,您需要小心电压(并非所有arduino风味均为5V,并且并非所有臂式控制器均为3.3伏),信号调节和接地以及所有其他东西。如果目标板由与为arduino供电的电源处于不同级别的电源供电,则在将两者连接时可能会使某些东西熔化。


请注意,使用串行(或更糟糕的是,USB具有分组传输)接口进行代理位敲击可能会非常慢。让微控制器执行完整的操作并与之进行更高级别的通信要高效得多,也就是说,告诉微控制器读取该寄存器,写入该寄存器甚至编程该数据块。
克里斯·斯特拉顿

1

这是可能的,我实际上实现了它,并在这里进行了解释。

有在github库这里是由两个部分组成:程序上的Arduino和发送XSVF文件到Arduino一个Python脚本运行。

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

我也做了一些经验写XSVF文件汇编/反汇编代码是相同的GitHub库,并在这个岗位,说明这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.