¿Es posible hacer una interfaz JTAG con un arduino?

11

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

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

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

    
pregunta zec

4 respuestas

13

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

Hay tres problemas, voltaje, velocidad y controladores.

El Arduino corre nativamente a 5V. La mayoría de los microcontroladores ARM no son tolerantes a 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 Conversión I2C 3.3 a 5.0 V para ideas).

El Arduino está conectado a una PC a través de un enlace serial. Dudo que sea factible ir más rápido que 115200bps, lo que hará que las actividades interactivas como pasar por el código en un depurador sean muy lentas. Sin embargo, podrás cargar código y volver a flashear 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 es ciertamente posible.

Si usa una tarjeta AVR-USB de Teensy / Opendous u otra, podría usar eStick-JTAG .

Pero, por la pérdida de costo JTAG, recomendaría uno de los dongles basados en FTDI2232. Son baratos y bien soportados por OpenOCD.

    
respondido por el Toby Jaffey
4

Es posible pero muy difícil. No me gustan los JTAG basados en FTDI, porque los chips FTDI son cajas negras ya hechas y uno no aprende realmente usándolos.

Si quisiera construir un USB-JTAG con AVR, obtendría uno con al menos usb de máxima velocidad en el chip. Luego, obtenga la pila usb AVR (c códigos fuente) y observe un ejemplo de usb-to serial. Dado que el bitbanging sobre usb es una mala idea (latencia alta), debe convertirse en comandos de nivel superior que le indiquen a la MCU que realice el bitbanging (o use SPI si es posible) & devuelve el resultado de alto nivel sobre usb (bytes completos). Pero luego viene la necesidad de escribir controladores para que el IDE sea compatible con el nuevo dispositivo JTAG para depurar sobre él. OpenOCD y URJTag tienen el código fuente de los controladores para muchos dispositivos jtag, por lo que deberá obtener y volver a trabajar para su dispositivo recién inventado. Vea cómo algunas personas han realizado un trabajo similar: enlace

    
respondido por el A.Genchev
1

Mira a openocd. La mayoría de los backends se basan 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 pida 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 desde un host a un núcleo de brazo simulado que se ejecuta en un simulador de 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 pines jtag que la última vez que miré no estaba disponible sin un NDA. eso puede no importar porque openocd se encarga de todo eso mientras usted usa una interfaz jtag que admite openocd, el extremo de bit bit golpeado es donde su arduino y cualquier interfaz que use para acceder o salir de ella entran a jugar. .

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

    
respondido por el old_timer
1

Es posible, y en realidad lo implementé y 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 se envía Archivos XSVF al 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 usan este nivel de voltaje.

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

    
respondido por el Marcelo Roberto Jimenez

Lea otras preguntas en las etiquetas

Comentarios Recientes

Aquí hay algunos ejemplos de electrónica en tiempo real que lo ayudarán a comenzar. Una de las placas JTAG que más me gusta es la Junta Strobecab, que hemos enumerado aquí. Programa CAB Studio con interfaz JTAG de cabstudio.com El sistema JDock: ejecútelo dentro de la caja de gadgets JTAG. Esto es bueno para crear pistas con códigos de cabeza y máscaras para que no tenga que hacer demasiado. Haga clic aquí para obtener la respuesta completa. Autor: Human Conrad & Unknownmakerservice Manager de planificación... Lees verder