El JTAG es una interfaz síncrona que utiliza hardware integrado para programar el flash. La interfaz USART es una interfaz asíncrona que utiliza un gestor de arranque, que es un programa que se ejecuta en la memoria, toma el nuevo código recibido sobre el UART y programa otras áreas de la memoria. El gestor de arranque generalmente se encuentra en la parte inferior o superior de la memoria y nunca se borra.
Algunas veces el gestor de arranque descarga el nuevo código en un área de la memoria y una vez que se recibe todo, luego vuelve a programar el dispositivo. Otras veces, cuando el cargador de arranque es lo suficientemente pequeño, borrará el programa existente y reprogramará la memoria principal sobre la marcha.
La interfaz JTAG también le permite realizar una depuración no intrusiva al brindarle acceso al módulo de depuración en chip.
Es frecuente que el código inicial se escriba utilizando la interfaz JTAG, ya que es más rápido y le brinda la oportunidad de depurar, incluido el acceso a registros, leer memoria, etc. Una vez que la unidad está en el campo, un UART ( o, por ejemplo, el módulo CAN, USB, interfaz Ethernet) puede usarse para reprogramar el código a través del cargador de arranque para que una persona no técnica pueda actualizar el código.
Editar: Debería agregar que he visto algunos procesadores con un cargador de arranque incorporado que vive en la ROM, pero aún es una pieza de software, no como una interfaz JTAG.