¿Puedo grabar un gestor de arranque y un programa con un ISP de AVR?

He considerado comprar algunos chips ATMega para crear realizaciones simples de proyectos sin sacrificar una placa de desarrollo (es decir, Arduino)

Ahora entiendo que se requiere el gestor de arranque para leer desde un dispositivo USB a serie. El AVR ISP (o equivalente) quema el cargador de arranque, luego la gente suele usar un usb a serie o el propio Arduino para programar el chip.

¿Qué diablos hace realmente el AVR ISP? Si puede grabar un cargador de arranque (¿está almacenado dentro, uno genérico para todos los AVR que admite?) ¿Por qué no puede también programar el dispositivo (como parece que la gente nunca instruye, incluso si eso lo hace simple)?

¿Por qué el ISP también le permite conectarse a una computadora a través de USB, para obtener energía? para cargadores de arranque personalizados? ¿Puede incluso "programar" un programa compilado para flashear a través de algo como avr-gcc (asumiendo que el IDE de arduino hace cosas que requieren el gestor de arranque)?

Simplemente no puedo envolver cara o cruz alrededor de lo que se requiere. Mi objetivo es un tipo de enfoque de "programar el nuevo chip, enchufarlo al zócalo y listo" sin múltiples quemaduras o programación.

Respuestas (4)

Puede programar completamente un ATMega con el AVR ISP.

Construí un MIDIpal a principios de este año. El chip ATMega suministrado no había sido preprogramado. Entonces, después de soldar la placa (mucho más fácil de lo que esperaba. SMT no es nada que temer), conecté mi TinyISP y descargué el código binario. Ahora mi MIDIpal funciona como se anuncia.

No estoy familiarizado con la parte del cargador de arranque, pero imagine que debe haber sido incluido en el firmware proporcionado por Mutable.

No está nada mal entonces, gracias. Me pregunto por qué la gente sugiere manipular USB a serie para proyectos únicos. Parece que compilo un archivo .hex (¡se sentirá limpio!) con avrdude? o algo. Luego use un programa con el adaptador para instalar el binario.
Creo que el cable USB a serie es la solución más económica. Pero puede obtener o construir un ISP por menos de $ 20, así que simplemente seguí esa ruta.

¿Qué diablos hace realmente el AVR ISP?

Permite leer/escribir en todas las áreas de memoria de los chips AVR (flash, eeprom y fusibles). El "IS" en ISP significa "Dentro del sistema": no necesita quitar el chip del circuito para programarlo (antiguamente había programadores "externos", tenía que sacar el chip de su circuito, insertar en el programador, luego insértelo de nuevo en su circuito... ¡tedioso!)

¿Por qué no puede también programar el dispositivo (ya que las personas parecen nunca instruir, incluso si eso lo hace simple)

¡Puede! Puede ir de manera absoluta y segura sin ningún cargador de arranque en el chip. Solo asegúrese de que el chip esté configurado para arrancar desde la dirección 0 en lugar de arrancar desde el área del cargador de arranque. En los AVR, esto se configura mediante fusibles.

avr-gcc es el compilador, que convierte el programa C/C++ en código de máquina (almacenado en última instancia como un archivo .hex).

avrdude es un "cargador de programas", responsable de leer/escribir datos en el chip a través de una interfaz de programación (como varios tipos de programadores de ISP). Aquí está el comando avrdude para escribir FIRMWARE.hex en un chip atmega328P a través de un programador AVR ISP mkII conectado a la computadora por USB:

avrdude -V -p m328p -P usb -c avrispmkII -U flash:w:FIRMWARE.hex:i

¿Por qué el ISP también le permite conectarse a una computadora a través de USB, para obtener energía? para cargadores de arranque personalizados? ¿Puede incluso "programar" un programa compilado para flashear a través de algo como avr-gcc (asumiendo que el IDE de arduino hace cosas que requieren el gestor de arranque)?

Si necesita flashear un chip, necesita que los datos pasen de la computadora al chip, ¿verdad? No sorprende entonces que el programador del ISP esté conectado tanto al chip como a la computadora.

Le sugiero que lea algunos tutoriales no relacionados con Arduino sobre la programación AVR. Vuelve a lo básico. Tenga en cuenta que la forma en que se hacen las cosas en Arduino land (enviar el programa a través de un chip USB -> serie a un cargador de arranque personalizado que se ejecuta en el chip) no es la norma. El material de Arduino es una solución a un problema específico (¿cómo puedes hacer que la gente envíe programas a un chip sin un programador?), pero para tu proyecto y tu propia cordura, no tienes que replicarlo. Simplemente compre un programador de $ 25, coloque un conector ISP en su placa y olvídese por un tiempo de USB, chips FTDI, cargadores de arranque, etc.

En cuanto a los cargadores de arranque, serán necesarios solo cuando desee que su sistema se pueda actualizar en el campo a través de otros medios que no sean el programador del ISP. Hay cargadores de arranque en serie (como los de Arduino), cargadores de arranque de tarjetas SD, cargadores de arranque MIDI, cargadores de arranque de dispositivos de almacenamiento masivo USB, etc.

¿Qué diablos hace realmente el AVR ISP?

El documento AVR910: Programación en el sistema de Atmel es probablemente un buen comienzo para obtener una mejor comprensión. Describe el comportamiento requerido y esperado para los pines relacionados con el ISP y también documenta el protocolo de programación utilizado por el programador, brindando ejemplos de comandos y respuestas para comandos como Habilitar programación y Leer código de dispositivo .

La programación de campo es importante en este mercado. Tener múltiples opciones ayuda. Algunos productos, tanto de Atmel como de otros, tienen un cargador de arranque que no podemos reprogramar y que al usar pines de correa le permite elegir usb o serial u otro. Algunos simplemente intentan detectar lo que quieres hacer, y otros solo te dan una opción, jtag por ejemplo, o serial.

Me gusta la solución AVR en la que el procesador se mantiene reiniciado, así que si usted (yo) hace algo estúpido (sí, lo he hecho allí) y cuelga el procesador (digamos que habilita los relojes desde el pll sin configurar correctamente el pll), o reconfiguras los pines gpio incorrectos para encontrar que eran los pines que necesitabas para la interfaz de programación. Bueno, puede terminar con un tablero o un chip de ladrillo. Mantener el procesador en reinicio al menos nos protege de nosotros mismos.

La interfaz de programación está bien documentada. El xmegas o con el que jugué usa una interfaz completamente diferente a la de los tinys y demás. Los más pequeños son solo SPI y puede tomarse su tiempo, poner la cosa en reinicio, podría usar interruptores de palanca y voltearlos a mano si lo desea. El xmega el tiempo es crítico, espera demasiado y el chip sale del modo de programación. (no es spi) Cualquiera de los dos casos está bien documentado.

Puede usar las soluciones estándar y usar avrdude o lo que sea, pero estas interfaces son simples y puede usar cualquier cosa con la que pueda generar spi (otros microcontroladores, un raspberry pi, cualquier pieza / placa ftdi con instrucciones mpsse y los pines expuestos , lo que sea). Y desarrollar uno propio no es una tarea difícil. Educativo, y tal vez en su línea de producción puede o no querer usar avrdude, o tal vez no puede por alguna razón.

Sí, esta interfaz AVR ISP se puede usar para programar un gestor de arranque o cualquier aplicación que desee. No tiene que hacer una cosa con una interfaz y luego otra con una interfaz diferente.

¿Por qué usar otro gestor de arranque entonces? Bueno, un cargador de arranque en serie podría usar tan solo un pin o dos, o tres si desea una correa o, en el caso de arduino, usan un tercero para restablecer el chip y luego enviar algo antes de que el cargador de arranque pase a la aplicación.

Entonces, a veces desea usar serial en su diseño para la programación de campo, reducir los pines o simplemente eso es lo que prefiere. Es posible que desee jtag, puede querer usb o, en este caso, usar el AVR ISP todo el tiempo. Algunos chips le permiten borrar/escribir bloques flash mientras se ejecutan en un bloque flash, lo que significa que puede escribir su propio cargador de arranque usando el protocolo que desee. Que es lo que hizo la gente de Arduino, afirman admitir algún protocolo, pero mira el código de su gestor de arranque para ver la verdad.

Ya sea que use hardware y software disponibles en el mercado o haga los suyos propios, esta interfaz AVR ISP es probablemente el camino a seguir para colocarlo en un accesorio y programar, luego enchufar un enchufe y listo, una quemadura y listo. Esp, si termina con un error en el software, puede volver al programador y reprogramar. Los flashes borrados y no borrados son igualmente compatibles.

Entonces, el resultado final es sobre la libertad de elegir. Programe en un dispositivo y luego mueva la pieza, programe en su lugar, REprograme en su lugar, velocidad de programación, pines requeridos, requisitos de software, requisitos de hardware/software/costo del dispositivo de programación. No hay una solución que haga felices a todos. Entonces, el proveedor proporciona una o dos o tres soluciones, luego, a veces, puede agregar la suya propia además de eso.

PERO, debería haber leído la documentación del proveedor del chip para el producto que le interesaba, todos proporcionan información de programación, sin esa documentación ese producto es un fracaso porque nadie podría usarlo en una línea de producción. No es nuestro trabajo leer los documentos por usted.