Saltar al contenido

Programación de microcontroladores: JTAG, SPI, USB ¿¡oh !?

Posterior a de nuestra larga recopilación de información solucionamos este disgusto que pueden tener algunos los usuarios. Te brindamos la solución y nuestro objetivo es que te sea de mucha ayuda.

Solución:

Los microcontroladores ATMEGA como el del arduino que vienen directamente de fábrica solo se pueden programar usando la interfaz SPI o JTAG.

SPI son las siglas de Serial Peripheral Interface y es una forma de que los microcontroladores se comuniquen entre sí o con el mundo exterior. A veces también se le llama 3 cables porque usa tres cables para comunicarse. Para programar un chip, necesitará un programador especial que lea los comandos del USB para controlar las líneas SPI para programar el chip. Uno popular parece ser el USBTinyISP de Adafruit. Una muy buena introducción a la programación SPI está en SparkFun. Las aplicaciones más populares para programar chips Atmel AVR son avrdude (línea cmd), ponyprog (no funciona con programadores más nuevos) y en algunos casos AVR Studio (si su programador lo admite). La ventaja de la programación SPI es que puede programar cualquier chip Atmel directamente de fábrica, por lo que no siempre necesitará un Arduino en sus proyectos.

Donde SPI es “sólo otro” protocolo serial, JTAG es un protocolo especialmente diseñado para programar y depurar microcontroladores. No todos los micro de Atmel admiten JTAG, pero los que se utilizan en Arduino sí lo hacen. El protocolo JTAG se puede usar para cosas interesantes como “emulación en circuito” y depuración, lo que significa que le permite ver el estado del programa en su microcontrolador mientras se está ejecutando. Para hacer esto, necesitará un programador especial. Visto mi respuesta para otra pregunta.

Para programar un chip usando USB, primero tendrá que programarlo con un “cargador de arranque” usando SPI o JTAG. Una vez cargado con el gestor de arranque, el sistema será programable desde cualquier PC usando un convertidor USB-Serie. La desventaja es que el cargador de arranque ocupa algo de espacio en la memoria y este método no le permite ver el estado del chip mientras se está ejecutando.

Si bien me encantaría sumergirme en los diversos métodos de programación disponibles, alguien más ya lo ha hecho. Aquí está Dean Cámaratutorial sobre AVRFreaks, Métodos de programación AVR:

Hay muchas formas de programar microcontroladores AVR. Dado que muchas personas preguntan sobre diferentes en un momento u otro, pensé en resumirlas aquí para que sus preguntas puedan responderse de manera rápida y eficiente. Por favor, perdóneme si me olvido de un método o cometo un error.

MÉTODO 1: Programación en el sistema (ISP)

Apoyado por: Gran mayoría de AVR (consulte las publicaciones a continuación)
Programadores compatibles: AVRISP MKI / II, JTAG MKII, STK500, STK600, Dragon, clones de AVRISP, programadores de AVR910, AVRONE

En la programación del sistema es quizás el método más común de programar el flash, EEPROM, fusible y lockbytes de toda la línea AVR. El ISP puede programar AVR a velocidades de reloj extremadamente altas (asumiendo que el AVR de destino se está ejecutando a una frecuencia alta y el programador lo admite) y es el método de elección para casi todos los aficionados a los AVR. Hay muchos, muchos clones de AVRISP y programadores AVR910 en el mercado, además de simples dongles de bricolaje que se conectan al puerto paralelo de su computadora.

Los nuevos diseños de dongle recientes pueden usar el puerto serie de la computadora, sin embargo, la evidencia anecdótica ha dicho que este método es extremadamente lento debido a limitaciones técnicas.

El ISP requiere que el AVR de destino se ejecute a una frecuencia de reloj de al menos cuatro veces la del reloj del ISP. Este es un error común y una fuente de confusión para muchos usuarios nuevos de AVR.

MÉTODO 2: JTAG

Apoyado por: Consulte la ayuda de AVRStudio Tools para obtener información sobre compatibilidad con dispositivos MKI y MKII
Programadores compatibles: JTAG-ICE, JTAG-ICE MKII, Dragon, clones JTAG-ICE, AVRONE, STK600 (solo programación)

Técnicamente, JTAG es un sistema de depuración, no un método de programación. Aún así, la interfaz JTAG permite la programación de un AVR que lo admita.

JTAG es una herramienta de depuración en el sistema que le permite manipular y examinar el estado de un AVR compatible mientras se ejecuta en un circuito. JTAG permite al usuario detener la ejecución en cualquier momento, la manipulación de los registros internos del AVR y mucho más.

Las unidades oficiales JTAG-ICE de ATMEL han sido reemplazadas por JTAG-ICE MKII, que es compatible con el protocolo de depuración DebugWire más nuevo y más ampliamente admitido en toda la gama AVR, así como con la programación a través del método ISP (ver arriba).

Los clones JTAG-ICE están disponibles a precios bajos, sin embargo, su compatibilidad limitada con solo un puñado de AVR limita su utilidad. Independientemente de esto, si su AVR es compatible con la interfaz JTAG, JTAG-ICE sigue siendo un método de depuración y programador muy agradable y eficaz.

MÉTODO 3: DebugWire

Apoyado por: Muchos AVR más pequeños
Programadores compatibles: JTAG-ICE MKII, Dragón, AVRONE

Nuevamente, DebugWire es una interfaz de depuración más que de programación, pero se puede usar para cargar programas en AVR compatibles. La interfaz dW utiliza un solo pin AVR (la línea / RESET) para todas las comunicaciones, lo que la hace ideal para los dispositivos AVR de bajo número de pines.

MÉTODO 4: cargador de arranque

Apoyado por: La mayoría de los AVR más nuevos
Programadores compatibles: N / A

De nuevo, técnicamente no es un método de programación. Un gestor de arranque es un pequeño programa AVR que se encuentra en una sección reservada configurable por el usuario de la memoria flash normal. Los cargadores de arranque hacen uso de las funciones de auto-modificación flash disponibles en los AVR más nuevos para permitir que el AVR se programe a sí mismo a través de los datos del programa cargados desde una fuente externa. Los cargadores de arranque pueden obtener sus datos desde cualquier ubicación (por ejemplo, flash de datos externo o tarjeta SD), sin embargo, el tipo más común de cargador de arranque se comunica con una PC a través del puerto RS-232 (serie) del AVR.

Los cargadores de arranque están limitados porque consumen espacio flash (limitando el tamaño del flash disponible para la aplicación del AVR) y no pueden cambiar los fusibles del AVR.

Los cargadores de arranque están ampliamente disponibles en Internet para su descarga, pero sufren el problema del “huevo y la gallina”; en primer lugar, necesita otro tipo de programador enumerado aquí para programar en el gestor de arranque. Por lo general, esto se resuelve mediante la construcción de un simple dongle de puerto paralelo (consulte la sección ISP) o mediante la compra de un AVR ya precargado con un gestor de arranque (por ejemplo, la placa AVRButterfly).

MÉTODO 5: Programación en paralelo de alto voltaje (HVPP)

Apoyado por: La mayoría de los AVR no PEQUEÑOS (con excepciones)
Programadores compatibles: STK500, STK600, Dragon, Dongles caseros, AVRONE

La programación en paralelo de alto voltaje es un método de programación que rara vez se utiliza, debido a la molestia que requiere su instalación. A pesar de esto, la programación HVPP se usa comúnmente para “resucitar” AVR cuyos fusibles se han configurado incorrectamente a través de otro método de programación.

Tanto el STK500 como el Dragon son compatibles con HVPP. Durante HVPP, el pin / RESET del objetivo se eleva al valor inusualmente alto de 12V que activa el circuito de programación paralelo interno. El pin / RESET es el único pin del AVR (en los AVR compatibles con HVPP) que se puede elevar de forma segura a este nivel.

Puede crear su propio dongle HVPP utilizando planes en línea como este.

MÉTODO 6: Programación en serie de alto voltaje (HVSP)

Apoyado por: Muchos AVR diminutos (con excepciones)
Programadores compatibles: STK500, STK600, Dragon, Dongles caseros, AVRONE

HVSP es similar a HVPP, excepto que la transferencia de datos se realiza en serie en lugar de en paralelo. Este es el método de programación alternativo utilizado en muchos AVR de la serie TINY que carecen de suficientes pines para HVPP.

MÉTODO 7: PDI

Apoyado por: AVR XMEGA
Programadores compatibles: STK600, AVRONE, JTAG MKII, Dragón, AVRISP MKII

PDI es la nueva interfaz de programación basada en el protocolo debugWire, para la línea XMEGA de AVR. Actualmente no se utiliza en ningún otro microcontrolador AVR de 8 bits.

MÉTODO 8: TPI

Apoyado por: AVR TINY de 6 pines (ATTINY10, etc.)
Programadores compatibles: STK600, Dragón, AVRISP MKII

TPI es una interfaz de programación muy pequeña para la nueva línea TINY de AVR con pines limitados, como el ATTINY10 de 6 pines. Como dW, TPI usa la línea / RESET del dispositivo como parte de la interfaz de comunicación, pero ahí termina la similitud. Dado que los pequeños AVR TINY carecen de un circuito de depuración en el chip, el protocolo TPI utiliza una nueva interfaz de programación de tres pines, en un protocolo semidúplex. Debido a que la línea / RESET debe elevarse a + 12V para la programación cuando se establece el pin RSTDSB del dispositivo, esto actualmente solo es compatible con la placa de programación STK600 más nueva.

Sección de preguntas frecuentes de bonificación!

  1. Cual es el mejor metodo?

    No existe un “mejor” método universal. La programación de ISP es simple y extremadamente popular, sin embargo, todos los métodos anteriores funcionarán. Los dos modos de programación de alto voltaje (el que sea aplicable a su dispositivo) son los más ricos en funciones, ya que permiten la reparación de un AVR que tiene sus fusibles mal configurados. Sin embargo, esos métodos son difíciles de configurar, de ahí la razón por la que la mayoría de los usuarios optan por el ISP.

  2. Hice un dongle de puerto paralelo. ¿Puedo usarlo con AVRStudio?

    Me temo que no. AVRStudio no puede interactuar con ninguna llave “tonta”; requiere un dispositivo de programación inteligente, que contiene un microcontrolador, para descifrar el protocolo de comunicación que envía. Los dongles simples sin un microcontrolador deben ser “bit-banged” (es decir, las señales apropiadas simuladas a través del dongle a través de la computadora).

  3. ¿Entonces mi dongle es inútil?

    No. Aún puede programar a través de un dongle hecho en casa con una herramienta de software de programación de terceros. AVRDude es una utilidad de línea de comandos gratuita, buena y conocida, y viene incluida con el paquete WinAVR.

  4. ¿Cuáles son mis opciones si quiero que mi programador trabaje con AVRStudio?

    Elija un programador que utilice un protocolo compatible con AVRStudio. Este puede ser el protocolo simple “AVR910” (en desuso) o una implementación personalizada del protocolo utilizado por el STK500 / AVRISP. Tenga en cuenta que estos programadores requieren un microcontrolador en ellos, lo que lleva a una situación catch-22. Esto se puede resolver al tener el AVR del programador preprogramado en el momento de la compra con el firmware apropiado, o al tener el AVR preprogramado con un gestor de arranque.

  5. Ok, quiero usar un gestor de arranque. ¡¿Cómo lo consigo ahí en primer lugar ?!

    Para utilizar un gestor de arranque en un AVR, primero debe tener programado el gestor de arranque. Si no lo hace Si tiene un programador existente (incluso un simple dongle tonto será suficiente para la programación inicial), también puede comprar AVR preprogramados con un cargador de arranque de varios proveedores.
    Atmel también fabrica la placa de demostración Butterfly, cuyo AVR MEGA169 viene precargado con un cargador de arranque compatible con AVR-Studio.

  6. ¡Ayudar! ¡Me metí con los fusibles y destrocé mi AVR mientras usaba ISP!
    El error más común es cambiar los fusibles de selección del reloj a un ajuste no válido. Intente poner un reloj externo en el pin XTAL1 del AVR y vea si eso ayuda.
    En caso contrario, utilice uno de los métodos de alto voltaje si es posible. Estos solucionarán cualquier error de configuración, incluidos los relacionados con la fuente del reloj, ya que los métodos de alto voltaje proporcionan su propio reloj al AVR para su programación.

  7. ¿Cómo interactúo con mi programador?

    El software que utilice para interactuar con su programador depende del tipo de programador que esté utilizando.
    Los dongles “tontos” simples requieren software de terceros, como PonyProg o AVRDude. Estas pueden ser herramientas de línea de comandos o GUI: busque en la web y encontrará una que se adapte a sus necesidades.
    Los programadores y los cargadores de arranque basados ​​en el protocolo AVR910 se pueden utilizar dentro de AVRStudio. Desde el menú Herramientas, seleccione la opción “AVRProg” para abrir una pantalla GUI para interactuar con su programador. Como alternativa, las herramientas de terceros como AVRDude también son compatibles con AVR910.
    Las herramientas oficiales están estrechamente integradas en AVRStudio, especialmente en el caso de las variantes de depuración (JTAG / Dragon / etc.). En el menú Herramientas de AVRStudio, seleccione el submenú “Programa AVR …” y haga clic en el elemento “Conectar”. Desde la nueva ventana, seleccione su herramienta y su interfaz de conexión y haga clic en Aceptar.
    Como es el caso de los dongles tontos y los programadores AVR910, las herramientas oficiales también pueden usarse con software de programación de terceros.

(C) Dean Camera, 2009. Todos los derechos reservados. No para reproducción en ningún sitio web que no sea AVRFreaks.net sin permiso previo explícito.

Reproducido con permiso explícito previo, ¡por supuesto!

Me gustaría agregar una cosa más a la discusión.

SPI es una interfaz muy común para chips. La alusión a 3 hilos es el modo de SPI en el que no se utiliza el pin de selección del chip.

I2C es el principal concurso de interfaz, ya que solo utiliza 2 cables sin importar la cantidad de chips, mientras que el SPI requiere otro cable por interfaz, pero es más lento.

A la hora de enseñar, considero que enseñar sobre interfaces es una de las tareas más importantes.

Wiki de la comunidad disponible para aquellos que quieran ampliar mi información.

Comentarios y calificaciones

Si eres capaz, tienes la habilidad dejar un ensayo acerca de qué le añadirías a este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *