¿Cómo se escriben los programas en un microcontrolador? ¿Qué papel juega JTAG?

Puedo escribir programas para un Arduino, y todo lo que hago es enchufarlo y hacer clic en "cargar". Mi código compilado entra en la memoria del programa de ATMega. ¿Fácil verdad?

Bueno, me gustaría saber qué está pasando exactamente en general. El microcontrolador tiene algo de memoria, por lo que existe algún método para tomar datos sin procesar de un cable USB y escribirlos en el microcontrolador como si fuera una unidad flash o algo así. Sin embargo, sé que esto no es posible a menos que ya esté presente un programa de cargador de arranque especial en el microcontrolador.

Así que ahora estoy confundido. ¿Cómo podría subir programas a un Arduino si no tuviera el gestor de arranque? ¿Cómo programo otros microcontroladores (como un ARM) sin la interfaz fácil de usar de Arduino?

Pregunta adicional relacionada: al leer (y no entender) algunas páginas web, descubrí que ARM está programado a través de JTAG. ¿Qué está haciendo esto, exactamente? El módulo JTAG envía datos al ARM, pero ¿exactamente qué datos envía? ¿Cómo puede el ARM aceptar código nuevo sin que ya se esté ejecutando algún programa en el ARM que interprete los datos JTAG y los escriba en la memoria correcta?

¿La hoja de datos dice?
El chip que estoy usando es este: st.com/content/ccc/resource/technical/document/datasheet/c5/ed/… Si la información está ahí, no puedo encontrarla
Un cargador de arranque puede ser una máquina de estado, con enlaces al resto de la MCU. O unas pocas palabras en el firmware.
Un Arduino tiene un cargador de arranque, pero ¿cómo crees que el cargador de arranque llegó al Arduino?

Respuestas (1)

La serie ATmega µC tiene varios medios para programarlo:

  • Autoprogramación. Eso es lo que hace el gestor de arranque. Carga datos, por ejemplo, a través de la interfaz UART en la RAM, luego muestra las páginas de memoria flash que no son del cargador de arranque.
  • Programación en paralelo. Método tradicional, necesitas una herramienta de programación bastante especial para hacer eso. Solo se requiere cuando deshabilitó la programación de ISP porque quería usar el pin RESET como un pin GPIO. Requiere quitar el µC del circuito.
  • Programación ISP. Ese es el método más simple, requiere una herramienta simple que usted mismo puede construir fácilmente y algún software de programación gratuito (avrdude). A veces se requiere eliminar el µC del circuito, pero los diseñadores pueden tener cuidado al asignar GPIO para evitar eso.
  • Cable de depuración. ISP con esteroides. Utiliza solo el pin RESET, necesita una herramienta bastante compleja y un software propietario hasta hace poco. Casi nunca requiere quitar el µC del circuito porque el pin RESET generalmente es solo eso, RESET.

JTAG, por el contrario, es un protocolo "estándar" y una definición de interfaz que se puede utilizar con una gran cantidad de chips. La intención original era llenar los flip-flops representando el estado interno de un dispositivo desde el exterior. Es una interfaz de prueba. Hoy en día también se puede utilizar y se utiliza para la programación flash. El software de programación necesita saber todo sobre cómo programar el chip específico, no hay un estándar para eso.

Además de la autoprogramación, todos estos métodos de programación están integrados en los chips. Las primeras versiones de JTAG no han sido más que un registro de desplazamiento de 1000 etapas.