Si bien me encantaría sumergirme en los diversos métodos de programación disponibles, alguien más ya lo ha hecho. Aquí está el tutorial de Dean Camera 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 describirlas aquí para que sus preguntas puedan responderse de manera rápida y eficiente. Perdóname si pierdo un método o si cometo un error.
MÉTODO 1: Programación en sistema (ISP)
Soportado por: La gran mayoría de los AVR (ver las publicaciones a continuación)
Programadores compatibles: AVRISP MKI / II, JTAG MKII, STK500, STK600, Dragon, clones AVRISP, Programadores AVR910, AVRONE
En System Programming es quizás el método más común para programar el flash, EEPROM, fusible y lockbytes de toda la línea AVR. El ISP puede programar AVR a frecuencias de reloj extremadamente altas (suponiendo que el AVR objetivo se esté ejecutando a una frecuencia alta y el programador lo admita) y es el método de elección para casi todos los aficionados a AVR. Hay muchos, muchos clones 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 objetivo se ejecute a una velocidad de reloj de al menos cuatro veces la del reloj del ISP. Esta es una trampa común y una fuente de confusión para muchos nuevos en AVR.
MÉTODO 2: JTAG
Compatible con: consulte la ayuda de AVRStudio Tools para la 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 admite.
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 JTAG-ICE oficiales de ATMEL han sido reemplazadas por el JTAG-ICE MKII, que admite el protocolo de depuración DebugWire más nuevo y más ampliamente compatible en todo el rango AVR, así como 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 admite la interfaz JTAG, el JTAG-ICE sigue siendo un método y programador de depuración muy agradable y efectivo.
MÉTODO 3: DebugWire
Compatible con: muchos AVR más pequeños
Programadores compatibles: JTAG-ICE MKII, Dragon, AVRONE
Una vez más, DebugWire es una interfaz de depuración en lugar de una interfaz 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, por lo que es ideal para los dispositivos AVR de bajo número de pines.
MÉTODO 4: gestor de arranque
Compatible con: AVR más recientes
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 del flash regular. 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 solo 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 (p. Ej., Flash de datos externo o tarjeta SD), sin embargo, el tipo de cargador de arranque más común 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 (lo que limita el tamaño del flash disponible para la aplicación del AVR) y no pueden cambiar los fusibles de los AVR.
Los cargadores de arranque están ampliamente disponibles en Internet para descargar, pero sufren un problema de "huevo y gallina"; En primer lugar, necesita otro tipo de programador enumerado aquí para programar en el gestor de arranque. Esto generalmente se resuelve mediante la construcción de un dongle de puerto paralelo simple (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)
Compatible con: La mayoría de los AVR que no son TINY (con excepciones)
Programadores compatibles: STK500, STK600, Dragon, Homebrew Dongles, AVRONE
La programación paralela de alto voltaje es un método de programación que rara vez se utiliza, debido a la molestia que requiere configurar. 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 del objetivo / RESET se eleva al valor inusualmente alto de 12V que conecta el circuito interno de programación en paralelo. El pin / RESET es el único pin del AVR (en AVR compatibles con HVPP) que puede elevarse de forma segura a este nivel.
Puede hacer su propio dongle HVPP utilizando planes en línea como este.
MÉTODO 6: Programación en serie de alto voltaje (HVSP)
Compatible con: muchos AVR TINY (con excepciones)
Programadores compatibles: STK500, STK600, Dragon, Homebrew Dongles, 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
Compatible con: AVR XMEGA
Programadores compatibles: STK600, AVRONE, JTAG MKII, Dragon, 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 usa en ningún otro microcontrolador AVR de 8 bits.
MÉTODO 8: TPI
Compatible con: AVR TINY de 6 pines (ATTINY10, etc.)
Programadores compatibles: STK600, Dragon, 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. Al igual que dW, TPI utiliza la línea / RESET del dispositivo como parte de la interfaz de comunicación, pero ahí termina la similitud. Como los pequeños AVR TINY carecen de un circuito de depuración en 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 necesita elevarse a + 12V para la programación cuando se establece el pin RSTDSB del dispositivo, actualmente solo es compatible con la nueva placa de programación STK600.
Sección de preguntas frecuentes de bonificación!
¿Cuál es el mejor método?
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 utilizan ISP.
He hecho un dongle de puerto paralelo. ¿Puedo usarlo con AVRStudio?
Me temo que no. AVRStudio no puede interactuar con ningún dongles "tontos" (requiere un dispositivo de programación inteligente que contenga un microcontrolador) para descifrar el protocolo de comunicación que envía. Los dongles simples sin un microcontrolador deben ser "golpeados" (es decir, las señales apropiadas simuladas a través del dongle a través de la computadora).
¿Entonces mi dongle es inútil?
No. Todavía puede programar a través de un dongle casero con una herramienta de software de programación de terceros. AVRDude es una utilidad de línea de comandos buena, conocida y gratuita, y viene incluida con el paquete WinAVR.
¿Cuáles son mis opciones si quiero que mi programador trabaje con AVRStudio?
Elija un programador que use un protocolo compatible con AVRStudio. Puede ser el simple protocolo "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 de captura 22. Esto se puede resolver haciendo que el AVR del programador esté preprogramado al momento de la compra con el firmware apropiado, o haciendo que el AVR esté preprogramado con un gestor de arranque.
Ok, quiero usar un gestor de arranque. ¿Cómo lo consigo allí en primer lugar?
Para utilizar un gestor de arranque en un AVR, primero debe tener el gestor de arranque programado. Si no tiene un programador existente (incluso un simple dongle tonto será suficiente para la programación inicial), también puede comprar AVR preprogramados con un gestor 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.
¡Ayuda! ¡He jugado con los fusibles y he quitado mi AVR mientras uso ISP!
El error más común es cambiar los fusibles de selección de reloj a una configuración no válida. Intente poner un reloj externo en el pin XTAL1 del AVR y vea si eso ayuda.
De lo contrario, si es posible, utilice uno de los métodos de alto voltaje. Esto solucionará cualquier configuración incorrecta, incluidas las relacionadas con la fuente del reloj, ya que los métodos de alto voltaje proporcionan su propio reloj al AVR para la programación.
¿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: mire a su alrededor en la web y encontrará una que se ajuste a sus necesidades.
Los programadores y cargadores de arranque basados en el protocolo AVR910 se pueden usar dentro de AVRStudio. En 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ú "Programar 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 con los dongles tontos y los programadores AVR910, las herramientas oficiales también se pueden usar con software de programación de terceros.
(C) Dean Camera, 2009. Todos los derechos reservados. No debe reproducirse en ningún sitio web que no sea AVRFreaks.net sin permiso previo explícito.