Paso 4: Crear el script de upload
Ahora necesitamos la magia. ¿Cómo hacer todas esas cosas de lujo que hace de la GUI de Arduino con un FTDI o USB de la placa Arduino? La respuesta, ya he insinuado, es avrdude, y se puede instalar con "apt-get install avrdude" en ubuntu y "ipgk Instale avrdude" en Angstrom (creo, por favor corríjanme si esto es incorrecto). Pero esto no es suficiente. Si usamos USB, avrdude encargará de conmutar que restablecer para nosotros y de todos los tiempos se. TTL serial nos no da tan lujo, así que tenemos un buen script de 2 líneaLínea 1:
(echo 0 > /sys/class/gpio/gpio49/value & & dormir 0.9 & & echo 1 > /sys/class/gpio/gpio49/value) y
Esto fija el perno bajo, capacidad para 0,9 segundos, entonces establece el perno alto. Todo es en () por lo que se convierte es un commandlet sola. La y al final le fondo el commandlet, permitiendo que se ejecute en su propio hilo de rosca/proceso, básicamente se bifurcan. Esto permite el reset a pasar tiempo para que avrdude puede iniciar, leer el archivo hexadecimal y ping de inicio para el gestor de arranque. El segundo 0,9 que llegué a través de ensayo y error, puede que necesite ajustar esto.
Línea 2:
AVRDUDE - c arduino -p m328p - v - v - v - v -P/dev/ttyO2 - U flash:w:serial_echo.cpp.hex
Hay mucho sucediendo aquí y voy a dejar leer el manual de avrdude para los detalles arenosos, pero básicamente es esto:
programa un arduino con un 328p, ser muy prolijo, utilice serial_echo.cpp.hex y ttyO2 de puerto serie.
una vez que todo este trabajo, puede quitar algunos - v para reducir el nivel de detalle.
En la guía anterior mencioné que el BB como 4 puertos seriales TTY. Real tiene 6, ttyO0-5 (que es una letra O), pero sólo 4 son utilizables en los pines GPIO. Estas son ttyO1, ttyO2, ttyO4 y ttyO5, que corresponden muy bien a Serial1, Serial2, Serial4 y Serial5.
Si ejecuta esta 2ª línea por sí mismo, a ver el extremo de la salida con:
AVRDUDE: enviar: 0 [30] [20]
AVRDUDE: enviar: 0 [30] [20]
AVRDUDE: enviar: 0 [30] [20]
{pausa larga}
AVRDUDE: ser_recv(): programador no responde
AVRDUDE: stk500_recv(): programador no responde
AVRDUDE hecho. Gracias.
La clave es ver el tiempo de sueño en la línea 1 para que el bootloader de Arduino responde a uno de ésos 3 envía. cosas difíciles!
Abajo está mi script de upload.sh completo, ponerlo en la misma carpeta pones el archivo hexadecimal y márquelo ejecutable (chmod + x upload.sh):
#! / bin/bash
(echo 0 > /sys/class/gpio/gpio49/value & & dormir 0.9 & & echo 1 > /sys/class/gpio/gpio49/value) y
AVRDUDE - c arduino -p m328p - v - v - v - v -P/dev/ttyO2 - U flash:w:serial_echo.cpp.hex