Arduino como ISP sin una computadora

12

¿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:

  1. Escribir nuevo boceto / firmware
  2. Compilar firmware
  3. Escriba una copia de firmware en Arduino A como datos (Arduino A está configurado para funcionar como ISP)
  4. Separe Arduino A de la computadora
  5. En una ubicación separada, conecte Arduino A a Arduino B usando encabezados ISP
  6. 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.

m3z
fuente
El resultado sería que solo podría programar otros Arduinos con el boceto / firmware exacto que se ha cargado en el programador (Arduino A). Entonces, solo sería útil hacer copias como en una línea de producción, ¿es eso? Si necesita cambiar algo en el boceto, deberá volver a la computadora para modificarlo y cargarlo nuevamente. ¿Lo entendí bien?
Ricardo
1
¿No es posible mantener la "imagen flash" para copiarla en el objetivo en otro soporte (como una tarjeta SD)?
jfpoilpret
Sí. Supongo que también sería bueno para una línea de producción. Mi situación es que tengo un arduino pegado en un recinto que es difícil de mover y está en una habitación diferente a mi computadora (también difícil de mover). Por lo tanto, me encantaría cargar el boceto en Arduino A cada vez que quisiera cambiarlo.
m3z
2
Se ha hecho con el propósito limitado de programar un gestor de arranque - github.com/WestfW/OptiLoader - pero debería funcionar para cualquier carga útil más pequeña que el flash disponible menos el tamaño de la herramienta. Para un firmware de carga útil más grande, un dispositivo de almacenamiento externo (¿o simplemente un Arduino Mega?) Debería funcionar.
Chris Stratton
@ChrisStratton que se ve perfecto para que me adapte. Gracias
m3z

Respuestas:

5

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.).

¡Programador AVR único y portátil! Ayuda donde sea que necesite actualizar el firmware del dispositivo, donde el dispositivo de destino se encuentra en una ubicación de difícil acceso y no puede (o no quiere) llevar su computadora portátil con un montón de cables. Trivialmente fácil de usar, súper barato de hacer, súper pequeño, súper rápido, usa tarjetas SD ...

caracteristicas:

  • super pequeño - dimensiones 44 x 39 x 5,5 mm
  • súper rápido: escriba hasta 12,5kB / s, lea hasta 14,5kB / s
  • utiliza medio de almacenamiento barato: pequeñas tarjetas MICRO SD
  • admite sistemas de archivos FAT16 y FAT32
  • puede leer, escribir, verificar memoria flash y eeprom
  • puede leer, escribir, verificar fusebits y lockbits
  • escribir y leer en archivos BIN, HEX y TXT
  • puede establecer valores predeterminados de fusibles, borrar recuerdos
  • pantalla gráfica LPH7779 barata y fácil de obtener
  • muestra animaciones divertidas después de cada operación
  • encabezado de programación estándar - Atmel ISP de 6 PINES
  • tiene la función de actualizar automáticamente su propio firmware (desde SD)
  • muy simple de usar, 4 botones de navegación
  • menú de configuración del usuario
  • selección automática de velocidad de programación (hasta 4MHz)
  • Funciona a 3V, programa chips suministrados de 3V a 5V

Lista de chips admitidos

ingrese la descripción de la imagen aquí

alexan_e
fuente
Se ve bien. Investigará el fin de semana.
m3z
No sé cómo me perdí esta pregunta el otro día. Solo he estado hablando con un amigo sobre la creación de este proyecto exacto nosotros mismos. Y luego veo tu respuesta.
Madivad
4

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

zmo
fuente
Gracias, el código fuente de AVRISP no parece tan complejo como esperaba.
Miraré
¿Dónde está tu hackerspace local? :)
Madivad
está en Francia Le Loop
zmo
no hay problema, para eso sirve votar ;-)
zmo