¿Alguien ha visto o conocido un método de precarga (usando una computadora o lo que sea) un firmware como datos en un arduino configurado para funcionar como un ISP y luego usando ese arduino conecte la interfaz del ISP a otro y cargue el firmware.
Para ser claros, estoy buscando una manera de hacer posible cargar bocetos de arduino sin una conexión directa a una computadora completa.
Idealmente, los pasos involucrados serían:
- Escribir nuevo boceto / firmware
- Compilar firmware
- Escriba una copia de firmware en Arduino A como datos (Arduino A está configurado para funcionar como ISP)
- Separe Arduino A de la computadora
- En una ubicación separada, conecte Arduino A a Arduino B usando encabezados ISP
- Usando algún método (quizás un botón), se activa Arduino A para cargar el firmware precargado en Arduino B.
Supongo que, en teoría, podría funcionar porque cargar firmware es solo un intercambio de bytes a través de la interfaz SPI, pero no estoy seguro de la realidad.
El escenario para el que estoy considerando es que si tuviera que instalar un arduino (permanentemente) en una ubicación remota de mi computadora (no tengo una computadora portátil ni quiero obtener una) sería problemático reprogramarla eso.
El otro método que he considerado es usar el ATMEGA empaquetado DIL que luego puedo quitar de la placa y programar en la computadora y volver a la placa; sin embargo, preferiría no arriesgarme a doblar pines y la molestia de tener que quitar el chip cada vez que quiero reprogramar.
Respuestas:
Creo que µProg: un programador AVR pequeño, rápido y portátil con SD hace lo que quieres. Puede almacenar varios archivos en la tarjeta SD (hexadecimal, eep, etc.) y seleccionar en el menú del dispositivo cuál escribir en la MCU de destino sin necesidad de una PC.
La mejor parte es que está disponible de forma gratuita (PCB, esquema, firmware, etc.).
Lista de chips admitidos
fuente
No tengo una solución directa para lo que quieres, pero sí, es posible hacerlo. Puede hackear un firmware del gestor de arranque para que lea el código flash del firmware y lo cargue a través de ISP.
Aunque obviamente no puede cargar 32k de firmware en el AVR de destino si ambos arduinos tienen solo 32k de flash total en sus MCU, necesitará que el flash tenga más flash que el objetivo si lo desea (un 1284p o 2560 Mega será lo suficientemente lejos, o un 328 / 32u4 será capaz de mostrar un 168 o un attiny). La única excepción sería que el firmware se flasheara mucho más pequeño que la memoria total (como en un boceto parpadeante).
Al final, eso no será fácil, es un código AVR 100% puro, pero puedes hacerlo. Mira esto:
La forma en que implementaría eso sería hacer que todo encaje en el gestor de arranque del dispositivo de flasheo, para que lea el firmware (todo, desde 0x00 hasta la dirección de inicio del gestor de arranque) y lo flashee a través de ISP fusionando AVRISP con Optiboot.
De todos modos, ¡ese es un proyecto interesante para un taller sobre cargadores de arranque y AVR que puedo sugerir en mi hackerspace local! ;-)
HTH
fuente