¿Cómo programar un microcontrolador vía USB usando JTAG? [cerrado]

Me cuesta entender JTAG para programar. Tengo un mcu que solo se puede programar a través de JTAG. ¿Cuáles son algunos chips fáciles para comenzar a programar un mcu a través de JTAG? Supongo que necesitaría un chip (mencionado en la oración anterior) para convertir los datos en serie recibidos a través de USB al "equivalente de JTAG".

Estoy tratando de programar este mcu: TM4C1294 cortex M4, que solo se puede programar a través de JTAG.

EDITAR: muchos de ustedes están hablando de un chip FTDI2232. Pero, ¿cómo conectarías un chip FTDI a la mcu? Me refiero al chip ftdi (que yo sepa, una conversión a TTL y eso es todo). Entonces tendría todos sus datos en los pines TX y RX. Pero con JTAG necesitas un pin TDI, TDO, TCK y TMS. Así que creo que necesitas otro chip para hacer la conversión. ¿No?

Una solución popular son los chips FTDI, que proporcionan ejemplos de código: ftdichip.com/Support/SoftwareExamples/MPSSE.htm ; si lo hace, probablemente pueda hacerlo funcionar fácilmente con OpenOCD o un software similar.
@ pjc50 Pensé que los chips ftdi hicieron una conversión a TTL y no al protocolo JTAG. ¿Seguro que esto me funcionaría? Estoy tratando de programar este mcu: TM4C1294 cortex M4
El FT2232 es un chip FTDI diferente al FT232 que se usa a menudo para USB UART. Si bien el FT2232 aún puede hacer eso, agrega modos seriales sincrónicos adicionales potencialmente útiles para jtag y swd.

Respuestas (2)

EDITAR.

Ese es un mcu basado en cortex-m, que en este caso usa ARM SWD, que usamos el término jtag, lo llaman un jtag serial que jtag ya era serial pero supuestamente toman las cuatro señales jtag (TMS, TCK, TDO, TDI) y serializarlos, no he profundizado en los detalles. Arm lo usa porque guarda señales en el núcleo (pines en la pieza). Debido a la popularidad de los dispositivos cortex-m y siempre usaron esto o ciertamente todos los núcleos actuales usan esta interfaz, es fácil acceder a las herramientas.

Alguien acaba de preguntar sobre la plataforma de lanzamiento conectada que usa esta parte. ese launchpad hace algo común que se ve con las placas de evaluación hoy en día, colocan un microcontrolador en la parte delantera que es básicamente una interfaz usb a jtag/swd, y luego el mcu de evaluación de destino para que juegues. el frontal no es para jugar, es la interfaz del depurador, por lo que no tiene que ir a comprar uno. a menudo es un mcu de la misma empresa y no un dispositivo genérico de USB a E/S (FT2232), tiene su software con un protocolo que han elegido/inventado. a menudo propietario, a veces secreto. En este caso, puede usar lm4flash para programarlo (en Linux) o, obviamente, las herramientas proporcionadas por TI en Windows. lm4 se debe a que compró luminary micro que tenía esta línea de productos stellaris (los primeros productos cortex-m) y mantuvo el nombre stellaris por un tiempo y los números de pieza lm4, luego lo cambió todo a tiva c en algún momento, pero la herramienta lm4flash no cambió los nombres, no era necesario. el protocolo está esencialmente documentado en la herramienta lm4flash.

Creo que puede usar el extremo frontal de la placa conectada para este mcu como programador para otros mcus que no están en la placa, hay un conector para que pueda usar esa plataforma de lanzamiento para programar mcus en su proyecto y en ese caso solo haría use la cadena de herramientas ti o algo como lm4flash.

Ti también tiene una plataforma de lanzamiento msp432 que, de nuevo, como la mayoría de estas placas, tiene un mcu en la parte delantera como un depurador usb y luego un segundo que es el mcu eval para jugar. el msp432 launchpad usa un protocolo diferente que se ajusta al CMSIS-DAP que ARM, supongo, está tratando de impulsar para resolver este problema de los depuradores usb propietarios para una interfaz arm swd común. Verá adónde va, pero como la mayoría de estas placas, puede desconectar eléctricamente o, a veces, físicamente, el extremo de depuración de la placa y usarlo como programador para su parte en su proyecto, y dado que es una interfaz de brazo común swd en el lado mcu puede cruzar marcas, no debería tener que limitarse a ti mcus con el encabezado ti. depende del software utilizado.

lo que conduce al stlink de st, sus tableros eval tienen un microcontrolador st frente al microcontrolador eval, algunos de ellos con el extremo de depuración que puede romper físicamente el tablero si desea usarlo de forma genérica. y al igual que cmsis-dap, puede usar herramientas como openocd, que le permitirán especificar la identificación jtag del chip y, básicamente, cruzar marcas. también hay dongles stlink que puede comprar sin un mcu de evaluación, pero cuestan entre un 50 % y varias veces el costo de una placa st discovery o nucleo, así que por mi dinero simplemente compraría una placa discovery o nucleo y la dejaría intacta (que es en realidad lo que HAGO) o romperlo. y luego solo use openocd para acceder al dispositivo, uso esta marca cruzada todo el tiempo stlink para hablar con st, atmels, nxp, lo que sea. tal vez algún día probaré el front-end CMSIS-DAP de un msp432.

FT2232 u otras soluciones mpsse de FTDI. El diseño de mpsse tiene pines dedicados para uart y jtag, no puede simplemente asignar ninguna función a cualquier pin para la mayoría o todas las partes compatibles. Y para ARM SWD, lo más probable es que dependa del software, pero buscaría a alguien que ya lo haya conectado y publicado en una página en algún lugar o busque en el código fuente de openocd para ver qué quieren para esos dos pines. La mayoría, si no todos, los depuradores jtag-ish genéricos van a poner una "línea de detección de destino" que conectas a la alimentación en el lado de mcu de destino, lo que permite la compatibilidad con 3.3v o 1.8 o 5v, sospecho que es el VDDIO para el lado de destino, puede estar alimentando ese extremo de la placa (alimentado por destino en lugar de alimentado por host). si está haciendo su propia placa con todo esto o conectando a mano una conexión ftdi genérica (el módulo FT2232 o FT4232 cuesta alrededor de $ 20 y funciona muy bien como una conexión ftdi genérica para todo tipo de jtag, serie, cualquier otra cosa que haga con un ftdi ) por supuesto, podría encontrar otra fuente de 3.3v y no tener que sentir. Luego, conecte el swdio y el swclk y una conexión a tierra si es necesario, luego simplemente use openocd.

Creo que el brazo de soporte de j-link es swd, casi cualquier persona que quiera seguir haciendo jtag wigglers necesita apoyarlo debido al amplio y amplio alcance de los microcontroladores basados ​​​​en brazos que ahora están basados ​​​​en cortex-m en lugar de ARM7TDMI (que usó el TDI, TDI, TMS, TCK jtag real).

Algunos de estos microcontroladores tienen otras formas de programación, itc, spi, serial, y algunos se pueden programar directamente con usb si tienen interfaz usb. Ninguno de estos es jtag, por supuesto, todos son protocolos propietarios para esa parte o familia o proveedor, algunos cerrados y otros abiertos. Con la facilidad con la que puede obtener soluciones ARM SWD listas para usar, veo que al menos un proveedor no incorpora un gestor de arranque protegido y programado de fábrica, en su lugar, tienen una solución de código abierto para usar su protocolo, pero eso se borra fácilmente. si no te proporcionaste jtag. Un proveedor era solo jtag, ninguna otra solución. st y nxp todavía tienen cargadores de arranque uart/serial que usan sus protocolos tradicionales. No he analizado las partes de todos en profundidad, solo una pequeña muestra de los grandes nombres. esto todavía podría ser una solución, o no importa qué marca o procesador central, SIEMPRE puede (bueno, bueno, tal vez no siempre para dispositivos programables de una sola vez o dispositivos que no pueden programar sus propios flashes internamente) escribir su propio gestor de arranque. Dependiendo de dónde se use su producto, no es raro que los mouse y teclados y las cosas que se conectan a una computadora tengan suficiente firmware para enumerar, luego el controlador host descarga el resto del firmware, lo que permite que las actualizaciones de firmware vengan con el controlador. . Uno de los primeros microcontroladores usb, el EZ-USB con un 8051, funcionaba de esta manera. esta es una opción para ese tipo de caso de uso donde hay software adicional en el otro lado de la interfaz USB de sus productos. es probable que todavía tenga que cargar algo de firmware en el dispositivo inicialmente y luego el resto del firmware se descarga en la enumeración/inicialización del controlador.

Estoy tratando de programar este mcu: TM4C1294 cortex M4 que aparentemente solo se puede programar a través de JTAG. No estoy seguro de que un ftdi2232 que realiza una conversión a TTL funcione, ya que TTL solo necesita un pin RX y TX. Mientras que JTAG necesita TDI, TDO, TDCLK, (¿etc..?)

¿Qué chip estás usando? No existen (desafortunadamente) estándares universales para los cables USB JTAG, por lo que dependerá del chip y la cadena de herramientas que esté utilizando. Si está usando algo como un procesador ARM con una cadena de herramientas GCC, probablemente podrá usar OpenOCD para programar su chip. En ese caso, hay un montón de opciones para cables JTAG, la más barata de las cuales se basa en chips FTDI FT2232. El chip FTDI también podría instalarse directamente en su placa si lo desea. Una ventaja de los chips FT2232 es que pueden proporcionar JTAG y un UART USB a través de la misma conexión USB. Para otros chips, es posible que tenga que usar software patentado del fabricante del chip que no necesariamente es compatible con cables de terceros o basados ​​en FTDI.

+1 hay más chips que solo el FT2232 de FTDI que admiten MPSSE. el 2232 es el clásico, por así decirlo, y parte del software usa un controlador FT2232, pero realmente es compatible con varios productos FTDI. Tenga en cuenta para el OP que no todos los chips usb FTDI son compatibles con mpsse.
Las señales pueden ser estándar, pero el protocolo usb para controlar una interfaz JTAG no lo es. Además, los pinouts y los conectores no son estándar.
@alex.forencich Pensé que los chips ftdi2232 hicieron una conversión a TTL y no al protocolo JTAG. Entonces, con el chip FTDI, los datos se transfieren a través de pines TX y RX. ¿Puedo simplemente conectar los pines TX y RX del chip ftdi a los pines TDI y TDO de mi mcu? ¿Qué pasa con la línea TDCLK, que también se usa para JTAG? ¿Seguro que esto me funcionaría? Estoy tratando de programar este mcu: TM4C1294 cortex M4
No puede usar una placa de ruptura que no rompa todos los pines. Eche un vistazo a la hoja de datos del dispositivo para ver qué pines necesita para jtag en modo mpsse. Creo que los pines UART RX y TX corresponden a TDI y TDO, pero aún necesita conectar TMS y TCK.
@alex.forencich, efectivamente. ¿Y a qué pines del chip ftdi conecto los pines TMS y TCK del mcu?
verifique la sección mpsse de la hoja de datos para el chip específico que tiene.