¿Es posible hacer una interfaz JTAG con un arduino?


14

Si es así, ¿podría uno dirigirme a un sitio que diga cómo hacer esto? Creo que puede haber encontrado una manera , pero no estoy seguro de si funcionaría o no (necesito encontrar algo para probarlo).

Esta pregunta está relacionada con una pregunta anterior mía ubicada aquí.

En caso de que se necesite más información de fondo.


JBailey me encontré con una pregunta sobre el uso de Arduino para hacer un convertidor JTAG-USB y me preguntaba cómo te fue \?

Respuestas:


14

Sí, es posible convertir un Arduino en un adaptador ARM JTAG.

Hay tres problemas, voltaje, velocidad y controladores.

El Arduino funciona de forma nativa a 5V. La mayoría de los microcontroladores ARM no toleran 5V en sus pines JTAG y requieren 3.3V. La solución más fácil es ejecutar su Arduino a 3.3V, en caso de que necesite algún tipo de conversión de nivel (consulte la conversión de I2C 3.3 a 5.0 V para obtener ideas).

El Arduino está conectado a una PC a través de un enlace en serie. Dudo que pueda ir más rápido que 115200bps, lo que hará que las actividades interactivas, como recorrer el código en un depurador, sean muy lentas. Pero podrá cargar código y actualizar dispositivos.

JTAG es un protocolo de alto nivel, específico para cada familia de procesadores, que utiliza una interfaz similar a SPI para intercambiar datos. La mayoría de los dongles JTAG solo proporcionan una interfaz SPI a través de USB y luego dejan el resto del trabajo a una aplicación de PC. OpenOCD y URJTag son opciones populares. Necesitará un controlador en uno de estos para su protocolo Arduino JTAG.

El Bus Pirate es muy similar al Arduino (microcontrolador de baja velocidad + chip FTDI). Es compatible con JTAG con OpenOCD, por lo que ciertamente es posible.

Si usa una placa Teensy / Opendous u otra placa AVR-USB, puede usar eStick-JTAG .

Pero, por el costo perdido de JTAG, recomendaría uno de los dongles basados ​​en FTDI2232. Son baratos y bien compatibles con OpenOCD.


5

Es posible pero muy difícil. No me gustan los JTAG basados ​​en FTDI, porque los chips FTDI son cajas negras listas para usar y uno realmente no aprende al usarlos.

Si quisiera construir un USB-JTAG con AVR, obtendría uno con al menos soporte de velocidad máxima usb en el chip. Luego obtenga la pila usb AVR (códigos fuente c) y mire un ejemplo de serie usb. Como el bitbanging sobre usb es una mala idea (alta latencia), debe convertirse a comandos de nivel superior que instruirán a la MCU para que realice el bitbanging en sí (o use SPI si es posible) y devuelva el resultado de alto nivel sobre usb (bytes completos) ) Pero luego surge la necesidad de escribir controladores para que el IDE admita el nuevo dispositivo JTAG para depurarlo. OpenOCD y URJTag tienen código fuente de controladores para muchos dispositivos jtag, por lo que deberá obtener y volver a trabajar con uno para su dispositivo recién inventado. Vea cómo algunas personas han hecho un trabajo similar: http://code.google.com/p/estick-jtag/


1

Mira a openocd. Los backends se basan principalmente en el enfoque de bit bang de puerto paralelo, creo que va tan lejos como para cambiar solo un bit a la vez. Es bastante simple tomar lo que creo que llaman el backend ficticio, que es un ejemplo. Envíe cualquier comando de bit de escritura al arduino y haga que establezca o borre ese bit. Cuando se le pide que lea el bit de entrada, envíe un comando al arduino para realizar esa tarea y devolver los resultados.

He hecho exactamente esto con éxito, pero no con un arduino, tuve una conversación abierta de un host en un núcleo de brazo simulado que se ejecuta en un simulador de HDL.

Tenga en cuenta que algunas especificaciones jtag están cerradas, el cortex-m3, por ejemplo, es una especie de número reducido de pines jtag serializados que la última vez que miré no estaba disponible sin un NDA. eso puede no importar porque openocd se encarga de todo eso siempre y cuando esté utilizando una interfaz jtag que es compatible con openocd, el bit back banged back es donde su arduino y cualquier interfaz que use para acceder a ella entran en juego .

Como ya señaló Joby, debe tener cuidado con los voltajes (no todos los sabores arduino son de 5V y no todos los controladores de brazo son de 3.3 voltios) y el acondicionamiento de señal y la conexión a tierra y todo eso. Si su placa objetivo está alimentada por un suministro que está en un nivel diferente en comparación con lo que alimenta su arduino, podría derretir algo cuando conecte los dos.


Tenga en cuenta que el uso de una interfaz en serie (o peor, USB con su transporte en paquetes) para el procesamiento de bits por proxy puede ser extremadamente lento. Es mucho más eficiente hacer que el microcontrolador realice operaciones completas y se comunique con él a un nivel superior, es decir, dígale que lea este registro, escriba ese o incluso programe este bloque de datos.
Chris Stratton

1

Es posible, y en realidad lo implementé y lo expliqué todo aquí .

Hay una biblioteca en github aquí que consta de dos partes: el programa que se ejecuta en Arduino y un script en Python que envía archivos XSVF a la Arduino.

Lo más probable es que necesite algunas resistencias para convertir 5 V a 3.3 V, ya que la mayoría de los FPGA y CPLD utilizan este nivel de voltaje.

También hice algunas experiencias escribiendo un ensamblador / desensamblador para archivos XSVF, el código está en la misma biblioteca github y se explica en esta publicación aquí .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.