¿Es posible hacer una interfaz JTAG con un arduino?

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

Esta pregunta está relacionada con una pregunta mía anterior que se encuentra aquí.

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

JBailey Acabo de encontrar tu pregunta sobre el uso de arduino para hacer un convertidor JTAG-USB y me preguntaba cómo te fue.

Respuestas (4)

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 5 V en sus pines JTAG y requieren 3,3 V. La solución más fácil es hacer funcionar su Arduino a 3,3 V, de lo contrario, necesitará 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 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 tipo 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, para JTAG de costo perdido, recomendaría uno de los dongles basados ​​​​en FTDI2232. Son baratos y están bien respaldados por OpenOCD.

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 completa USB en el chip. Luego obtenga la pila usb AVR (códigos fuente c) y mire un ejemplo de usb a serie. Dado que el bitbanging a través de usb es una mala idea (alta latencia), debe convertirse a comandos de nivel superior que le indicarán a la MCU que realice el bitbanging (o use SPI si es posible) y devuelva el resultado de alto nivel a través de usb (bytes completos ). Pero luego surge la necesidad de escribir controladores para que el IDE sea compatible con el nuevo dispositivo JTAG para depurarlo. OpenOCD y URJTag tienen el código fuente de los 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/

Mira openocd. Los backends se basan principalmente en el enfoque de explosión de bits del 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 configure o borre ese bit. Cuando se le solicite leer el bit de entrada, envíe un comando al arduino para realizar esa tarea y devolver los resultados.

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

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

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

Tenga en cuenta que el uso de una interfaz serial (o peor aún, USB con su transporte en paquetes) para el intercambio de bits de 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, decirle que lea este registro, que escriba aquel, o incluso que programe este bloque de datos.
Esta respuesta señala una herramienta para controlar un chip adaptador JTAG, pero la pregunta no se trata de adaptadores.

Es posible, y de hecho lo implementé y expliqué todo aquí .

Aquí hay una biblioteca en github que consta de dos partes: el programa que se ejecuta en arduino y un script de python que envía archivos XSVF a 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 tuve algunas experiencias escribiendo un ensamblador/desensamblador para archivos XSVF, el código está en la misma biblioteca de github y se explica en esta publicación aquí .