No se pueden programar múltiples chips usando JTAG

RESUELTO - MIRA BAJO EL SUBTÍTULO "EDITAR 3".

Tengo estos dos chips:Placa con LPC4337 (izquierda) y placa con ATSAM3X8E (derecha), JTAG interconectados, usando el chip FT2232H soldado en la placa de la izquierda como interfaz.

Placa con LPC4337 (izquierda) y placa con ATSAM3X8E (derecha), JTAG interconectados, usando el chip FT2232H soldado en la placa de la izquierda como interfaz.

El primero (LPC4337) se puede programar. El segundo (ATSAM3X8E) también se puede programar siempre que se corten los rastros entre el chip de programación (FT2232H) y la MCU LPC4337. Si no se cortan los rastros (tanto LPC4337 como ATSAM3X8E conectados al JTAG), entonces no puedo acceder al chip ATSAM3X8E. Estoy usando OpenOCD. Esta es la salida de OpenOCD cuando ambos chips están conectados al JTAG:

...

Información: toque JTAG: lpc4337.m4 toque/dispositivo encontrado: 0x4ba00477 (fabricante: 0x23b (ARM Ltd.), parte: 0xba00, ver: 0x4)

Información: toque JTAG: lpc4337.m0 toque/dispositivo encontrado: 0x0ba01477 (fabricante: 0x23b (ARM Ltd.), parte: 0xba01, versión: 0x0)

Información: toque JTAG: sam3.m3 toque/dispositivo encontrado: 0xfffffff (mfg: 0x7ff (), part: 0xffff, ver: 0xf)

Error: sam3.m3: error de captura IR; vio 0x0f no 0x01

Advertencia: omisión de eventos de configuración de JTAG debido a errores

Error: ACK no válido (4) en la respuesta DAP

Error: ACK no válido (4) en la respuesta DAP

Error: ACK no válido (4) en... (muchos más)

Error: ACK no válido (0) en la respuesta DAP

Error: no se pudo inicializar el puerto de depuración

Algunas notas: si cambio la configuración de OpenOCD para ignorar el "error de captura IR", la conexión falla de todos modos, el primer problema es que la ID TAP sam3.m3 se detecta como 0xfffffff, etc.

Misma salida con corte de trazas JTAG LPC4337 (solo ATSAM3X8E conectado):

...

Información: toque JTAG: sam3.m3 toque/dispositivo encontrado: 0x4ba00477 (fabricante: 0x23b (ARM Ltd.), parte: 0xba00, versión: 0x4)

Información: sam3.m3: el hardware tiene 6 puntos de interrupción, 4 puntos de vigilancia

Algunas notas: Esta es una conexión exitosa.

Una cosa interesante es que tanto LPC4337 como ATSAM3X8E comparten el mismo JTAG TAP ID. ¿No es este valor elegido por el fabricante? ¿Tener diferentes chips con el mismo JTAG ID es una extraña coincidencia? ¿Puede ser este el problema que me impide conectarlos a ambos al JTAG? He visto ID de JTAG repetidos manejados por OpenOCD antes, pero siempre con diferentes instancias del mismo chip, no de diferentes familias de chips como en este caso. ¿Hay alguna forma de cambiar el ID JTAG de los chips? ¿Qué otros problemas podrían estar causando este comportamiento? Estoy interesado en escuchar cualquier tipo de sugerencia, incluso si no son la solución que podrían ayudar.

Algunas otras notas: probé con dos placas ATSAM3X8E diferentes, así que sé que los chips no están defectuosos. Ambas placas eran Arduino Due y funcionaron cuando se cortaron las trazas LPC4337 JTAG. Estoy ejecutando la versión 0.10.0 de OpenOCD (versión compilada de "Freddie Chopin") en Windows. No tengo osciloscopio. Me gustaría trabajar con ambos MCU sin agregar más modificaciones o cortar rastros. También me gustaría entender la falla que me impide programar estos chips en caso de que diseñe algo en el futuro usándolos.

Por último, me gustaría agradecer a la comunidad por su tiempo, ¡espero que esta publicación ayude a otras personas en el futuro!

EDITAR:

Estos son los esquemas de la interfaz JTAG de ambas placas que se conectaron entre sí. El cable plano conecta el pin 1 del conector "P3" en el esquema de la placa LPC4337 con el pin 1 del conector "JTAG" del esquema de la placa ATSAM3X8E, etc. (Los 10 pines están conectados en consecuencia, probados con continuidad con un multímetro). ingrese la descripción de la imagen aquíEste es el esquema de la placa LPC4337 .

Este es el esquema de la placa ATSAM3X8E .

EDITAR 2:

Gracias a las respuestas, descubrí que estaba usando una topología JTAG en estrella, pero una topología JTAG en cadena sería el enfoque estándar. Cambiaré mi cableado y publicaré mis resultados. Gracias por la ayuda. Esta será mi topología de cableado (pero con dos dispositivos): EDICIÓN 3:Nueva topología

JTAG se cambió de una topología en estrella a una topología en cadena. LPC4337 TDO se enruta al conector y, finalmente, a ATSAM3X8E TDI. ATSAM3X8E TDO se conecta a través del conector a la interfaz FT2232H. Cuando no hay ningún dispositivo conectado y solo se está programando el LPC4337, se puede enchufar un pequeño conector macho (que se muestra a continuación) (en lugar del cable) y conectar el LPC4337 TDO directamente a la interfaz FT2232H. Nueva configuraciónLa conexión OpenOCD se realiza correctamente y genera lo siguiente:

...

Información: toque JTAG: lpc4337.m4 toque/dispositivo encontrado: 0x4ba00477 (fabricante: 0x23b (ARM Ltd.), parte: 0xba00, ver: 0x4)

Información: toque JTAG: lpc4337.m0 toque/dispositivo encontrado: 0x4ba00477 (fabricante: 0x23b (ARM Ltd.), parte: 0xba00, ver: 0x4)

Información: toque JTAG: sam3.m3 toque/dispositivo encontrado: 0x4ba01477 (fabricante: 0x23b (ARM Ltd.), parte: 0xba00, ver: 0x4)

Información: lpc4337.m4: el hardware tiene 6 puntos de interrupción, 4 puntos de vigilancia

Información: lpc4337.m0: el hardware tiene 6 puntos de interrupción, 4 puntos de vigilancia

Información: sam3.m3: el hardware tiene 6 puntos de interrupción, 4 puntos de vigilancia

(el 0x4ba01477 TAP ID resultó ser ATSAM3X8E, me pregunto si OpenOCD podría organizarse en un orden diferente [atsam, lpc m0, lpc m4] y funcionar en una topología en estrella o no)

¡Gracias por toda tu ayuda!

Tengo la impresión de que el puerto JTAG de ambos chips está eléctricamente en paralelo, por lo que mi pregunta es; ¿Qué te hace creer que puedes lograr esto?
Entiendo que JTAG permite direccionar varios chips en una misma placa. Pretende proporcionar solo un conector para programar MCU, FPGA, EEPROM, etc. ¿Es incorrecto mi entendimiento? Vi salidas de OpenOCD en la web que mostraban que se reconocía más de un FPGA en la misma placa, pensé que las MCU deberían funcionar de la misma manera. ¡No dude en corregirme o preguntar cualquier cosa relacionada con mis circuitos/configuraciones! Gracias por tu respuesta
Por favor, publique un esquema de su diagrama de conexión.
No soy un experto, pero ¿no es necesario conectar los puertos en cadena usando TDO y TDI?
Andy alias, supongo que lo son. ¿No sería lo que quieres decir conectar todos los pines del conector JTAG juntos? ¿Los cablearías de manera diferente? Cuando se cortan las trazas LPC4337 JTAG, la interfaz ATSAM3X8E JTAG comienza a funcionar, así que supongo que el cableado es correcto. Pero tal vez no lo sea. No dude en sugerir una estrategia de cableado diferente. He cortado y vuelto a cablear las trazas LPC4337 JTAG más de una vez, y cada vez que se cortan las trazas, la interfaz ATSAM3X8E funciona y deja de funcionar cuando se vuelven a unir las trazas. Por favor, si sabe algo sobre mis preguntas de TAP ID, hágamelo saber. ¡Gracias de antemano!
Andy alias, ahora entiendo lo que quisiste decir, gracias por tu ayuda. Probaré una topología en cadena en lugar de una topología en estrella y publicaré de nuevo

Respuestas (1)

Los comentarios sugieren que está tratando de operar en 'topología en estrella', pero que yo sepa, esa no es una implementación bien definida.

Confirme que está utilizando una topología en cadena , donde los múltiples TAP forman un solo registro de desplazamiento largo. Las herramientas de depuración deberían hacer frente a esto, ya que a veces ocurre implementado en un solo chip.

Los ID de TAP que cita son para la interfaz de depuración, no (y no es necesario) identificar el hardware individual. Todo lo que definen es que estos componentes utilizan Arm CoreSight JTAG-DP, que proporciona una interfaz para los componentes de depuración asignados a la memoria. Si accede a los componentes de depuración en ese mapa de memoria (que se pueden descubrir a partir de los registros que proporciona el DP), entonces debería encontrar un valor de ID que finalmente identifique el chip.

El registro JTAG-DP IDCODE se describe aquí en ARM DDI 0314H.

Sí, el chip FT2232H se conecta a la interfaz JTAG de dos chips usando los mismos pines. ¿Qué quiere decir con "... pero que yo sepa, esa no es una implementación bien definida..."? ¿Quiere decir que la interfaz JTAG de los chips puede estar en conflicto entre sí debido a que los fabricantes no diseñan sus productos para admitir la conexión en cadena? No entiendo lo que quiere decir con "donde los múltiples TAP forman un solo registro de desplazamiento largo". ¿Supongo que quiere decir que al cambiar un bit FT2232 ambas placas "reciben" la señal?
La conexión en cadena está bien soportada. La topología en estrella requiere que los pines TDO estén triestablecidos cuando un TAP está inactivo (y no puedo pensar cómo funcionaría la selección). Estás tratando de usar STAR. No funcionará.
Gracias por la aclaración de TAP ID. Supongo que no debería haber ningún problema con una ID de TAP repetida siempre que OpenOCD esté configurado para "tocar" todos los chips en el orden en que terminan presentándose. (También intenté "grabar" el ATSAM3X8E antes que el LPC4337 pero no funcionó y en mi implementación particular, el núcleo LPC4337 M4 ARM parece ser siempre el primer núcleo detectado, seguido por el LPC4337 M0 y, por último, el ATSAM3X8E M3)
"La topología en estrella requiere que los pines TDO estén triestablecidos cuando un TAP está inactivo". Entonces, ¿debería cambiar la señal TDO de una interfaz de chip en particular a alta impedancia mientras intento conectarme a la otra? La salida de los chips FT2232H está conectada a un búfer que permite el estado triple de todas las señales (pero para ambos chips) ¿deberían ser las señales individualmente estables para cada chip?
No, solo use la cadena de margarita.
Busqué la interfaz de conexión en cadena JTAG y descubrí que se refería a conectar el TDO de un chip dado al TDI del siguiente. Intentaré usar esa topología.