BACKUP E RIPRISTINO DEL FIRMWARE OPENDROP V2.0 CON AVRDUDE

Breve panoramica

OpenDrop-v2.0-Firmware_avrdude_guida (questo articolo in PDF, consigliato!)

opendrop2.0_firmware (per OpenDrop V2.0 come ZIP)

Questo documento e post sul blog è per le persone che:

  • vuole ottenere una comprensione di base per l'uso di avrdude con una scheda Sparkfun Pro Micro (o compatibile)
  • (ATmega32U4 5V, 16 MHz)
  • ottenere i file del firmware per l'OpenDrop v2.0 (quattro pulsanti) - il firmware NON è compatibile con le versioni più recenti dell'OpenDrop (v2.1 con joystick) - si prega di utilizzare il download da GitHub per compilare e caricare il firmware da soli.
  • non hanno paura di sporcarsi le mani con le cose della linea di comando sotto Linux (e ne sopporteranno le conseguenze - non siamo responsabili per la rottura di dispositivi seguendo questa guida! Usate cautela e controllate i comandi - la differenza tra leggere (r) e scrivere (w) è letteralmente solo una lettera)

Ho dovuto riparare un Arduino rotto in una delle nostre unità OpenDrop V2.0 (con quattro pulsanti). Nel repository ufficiale di GitHub ( -> https://github.com/GaudiLabs/OpenDrop ), il download vi darà il codice per l'OpenDrop v2.1 (con un joystick). Quindi ho ritenuto che la soluzione più semplice sarebbe stata quella di fare il backup del firmware da un altro dispositivo OpenDrop v2.0, e copiarlo sul nuovo Arduino.

Ho usato avrdude su un'unità Raspberry Pi per fare il backup del firmware, e scriverlo sul nuovo Arduino. Il backup richiede diversi passi, e mettere Arduino nel giusto stato (necessario anche per la lettura!).

Trappole che ho incontrato

  • controlla che il tuo cavo USB includa il cablaggio per i dati - il primo cavo che ho provato alimenterà solo Arduino, ma non apparirà nei dispositivi USB.
  • Copiare e incollare i codici della linea di comando dalla maggior parte dei blog potrebbe rendere alcuni caratteri in modo errato - considerate di usare il documento PDF che fornisco di questo post, per assicurarvi che il codice sia inserito correttamente

Impostazione e comprensione di base

L'OpenDrop v2.0 è pilotato da un dispositivo Arduino, che è compatibile con la scheda Sparkfun Pro Micro. (Per esempio Deekrobot Pro Micro)

  • ATmega32U4 (5V, 16 MHz)
  • porta microUSB integrata per alimentazione e programmazione

avrdude è usato per leggere e scrivere i file del firmware e le impostazioni da/per Arduino.

Io uso un Raspberry Pi, dato che siamo un rivenditore approvato Raspberry Pi e mi sento a mio agio nell'usare la linea di comando di Linux rispetto a Windows.

Installazione di avrdude:

sudo apt-get install avrdude

Individuare la porta da usare con avrdude

Scollegate l'adattatore di rete dall'OpenDrop, se era stato collegato.

Inserisci il cavo microUSB di Arduino nell'Arduino e nel Raspberry Pi. Il dispositivo emetterà un bip.

Assicurati che Arduino appaia come un dispositivo USB:

/home/pi# lsusb

Bus 001 Dispositivo 005: ID 2341:8037 Arduino SA

Bus 001 Dispositivo 004: ID 0424:7800 Standard Microsystems Corp.

Bus 001 Dispositivo 003: ID 0424:2514 Standard Microsystems Corp. Hub USB 2.0

Bus 001 Dispositivo 002: ID 0424:2514 Standard Microsystems Corp. Hub USB 2.0

Bus 001 Dispositivo 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Se la voce Arduino SA NON appare, ricontrolla il tuo cavo USB: alcuni cavi trasmettono solo l'alimentazione, non i dati. Questo, a proposito, era anche l'errore per cui non potevo usare l'IDE di Arduino su Windows con questo dispositivo - stavo provando prima un cavo USB sbagliato!

Trovate la porta che lo Sparkfun Pro Micro utilizza:

ls /dev/tty*

/dev/tty /dev/tty12 /dev/tty17 /dev/tty21 /dev/tty26 /dev/tty30 /dev/tty35 /dev/tty4 /dev/tty44 /dev/tty49 /dev/tty53 /dev/tty58 /dev/tty62  /dev/ttyACM0

/dev/tty0 /dev/tty13 /dev/tty18 /dev/tty22 /dev/tty27 /dev/tty31 /dev/tty36 /dev/tty40 /dev/tty45 /dev/tty5 /dev/tty54 /dev/tty59 /dev/tty63 /dev/ttyAMA0

/dev/tty1 /dev/tty14 /dev/tty19 /dev/tty23 /dev/tty28 /dev/tty32 /dev/tty37 /dev/tty41 /dev/tty46 /dev/tty50 /dev/tty55 /dev/tty6 /dev/tty7 /dev/ttyprintk

/dev/tty10 /dev/tty15 /dev/tty2 /dev/tty24 /dev/tty29 /dev/tty33 /dev/tty38 /dev/tty42 /dev/tty47 /dev/tty51 /dev/tty56 /dev/tty60 /dev/tty8

/dev/tty11 /dev/tty16 /dev/tty20 /dev/tty25 /dev/tty3 /dev/tty34 /dev/tty39 /dev/tty43 /dev/tty48 /dev/tty52 /dev/tty57 /dev/tty61 /dev/tty9

State cercando qualcosa come /dev/ttyACM0, o /dev/ttyUSB0

Nel mio caso era /dev/ttyACM0

Questa porta sarà presente solo quando il dispositivo è collegato. Per assicurarti di avere la porta corretta, puoi provare ad elencare con l'OpenDrop collegato e l'OpenDrop scollegato (microUSB -> USB sul Pi). Confrontate le uscite. Presumo che sarà /dev/ttyACM0 anche per te.

Creare una directory per il backup

Diventeremo il superutente, creeremo la directory per i file di backup e ci entreremo:

sudo su

mkdir /home/pi/opendrop2.0_bak

cd /home/pi/opendrop2.0_bak

Usare avrdude

Il pulsante di reset (importante, non saltare questa parte)

Affinché avrdude funzioni, lo SparkFun Pro Micro deve trovarsi nel giusto stato di sistema. Per mettere lo SparkFun Pro Micro nel giusto stato di sistema, è necessario premere il pulsante di reset (etichettato RST) rapidamente due volte dopo l'altra. Il dispositivo emetterà un bip e il LED inizierà a lampeggiare.

Dovete eseguire il comando avrdude immediatamente dopo aver fatto questo, poiché il dispositivo tornerà allo stato normale dopo un breve timeout.

Per ogni comando che ho eseguito, ho premuto il pulsante RST due volte dopo l'altro. Probabilmente i comandi potrebbero essere combinati in uno script di shell; dato che mi piace usare cautela per non mandare in tilt i dispositivi usando la linea di comando sbagliata, ho seguito il processo manualmente.

Se non usate il pulsante RST come ho indicato, otterrete errori da avrdude come:

Connessione al programmatore: .avrdude: butterfly_recv(): il programmatore non risponde

Firmare il backup: Lettura - panoramica

Stiamo andando a fare retromarcia

  • flash
  • eeprom
  • hfuse
  • lfuse
  • efuse

Rif: https://www.hackster.io/rayburne/avr-firmware-duplicator (Attenzione, le impostazioni di avrdude qui non sono corrette per l'OpenDrop / Sparkfun Pro Micro).

Backup del firmware: I comandi

Se non l'hai ancora fatto, vai nella directory che hai preparato per i file di backup del firmware e diventa il super utente (root). Non sono sicuro che avrdude funzionerà senza i permessi di root - prova se vuoi.

Assicuratevi di usare la porta giusta (molto probabilmente /dev/ttyACM0). Assicurati di avere la lettera "r" dopo l'obiettivo di lettura. r come lettura; una lettera w userebbe il vostro file di destinazione come sorgente, per sovrascrivere il vostro Arduino Flash - senza richiesta di sicurezza!

La lettera r dopo il nome del file di backup specifica il tipo di uscita, è importante averla giusta per la successiva operazione di ripristino. Se siete curiosi, leggete la manpage qui: https://www.nongnu.org/avrdude/user-manual/avrdude_4.html

-p specifica la piattaforma

-c il programmatore

-P la porta

-U specifica l'operazione (source/target:mode:target/source:file_mode)

Ecco quindi il primo comando da usare e il suo output:

avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U flash:r:flash_backup_file_od2.0.hex:r

Collegamento al programmatore: .

Programmatore trovato: Id = "CATERIN"; tipo = S

    Versione del software = 1.0; nessuna versione hardware data.

Il programmatore supporta l'incremento automatico degli addr.

Il programmatore supporta l'accesso alla memoria buffer con buffersize=128 byte.

 

Il programmatore supporta i seguenti dispositivi:

    Codice del dispositivo: 0x44

 

avrdude: Dispositivo AVR inizializzato e pronto ad accettare istruzioni

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: Firma del dispositivo = 0x1e9587 (probabilmente m32u4)

avrdude: lettura della memoria flash:

 

Lettura | ################################################## | 100% 0.64s

 

avrdude: scrittura del file di output "flash_backup_file_od2.0.hex"

 

avrdude: safemode: Fusibili OK (E:CB, H:D8, L:FF)

 

avrdude fatto. Grazie.

 

Ecco il secondo comando. A proposito, puoi cambiare i nomi dei file (in questo caso il bit eeprom_backup_file_od2.0.hex):

 

avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U eeprom:r:eeprom_backup_file_od2.0.hex:r

 

Collegamento al programmatore: .

Programmatore trovato: Id = "CATERIN"; tipo = S

    Versione del software = 1.0; nessuna versione hardware data.

Il programmatore supporta l'incremento automatico degli addr.

Il programmatore supporta l'accesso alla memoria buffer con buffersize=128 byte.

 

Il programmatore supporta i seguenti dispositivi:

    Codice del dispositivo: 0x44

 

avrdude: Dispositivo AVR inizializzato e pronto ad accettare istruzioni

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: Firma del dispositivo = 0x1e9587 (probabilmente m32u4)

avrdude: lettura della memoria eeprom:

 

Lettura | ################################################## | 100% 1.76s

 

avrdude: scrittura del file di output "eeprom_backup_file_od2.0.hex"

 

avrdude: safemode: Fusibili OK (E:CB, H:D8, L:FF)

 

avrdude fatto. Grazie.

 

Poi faremo il backup di tre diversi tipi di fusibili. Ecco il primo:

 

avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U hfuse:r:hfuse_backup_file_od2.0.hex:r

 

Collegamento al programmatore: .

Programmatore trovato: Id = "CATERIN"; tipo = S

    Versione del software = 1.0; nessuna versione hardware data.

Il programmatore supporta l'incremento automatico degli addr.

Il programmatore supporta l'accesso alla memoria buffer con buffersize=128 byte.

 

Il programmatore supporta i seguenti dispositivi:

    Codice del dispositivo: 0x44

 

avrdude: Dispositivo AVR inizializzato e pronto ad accettare istruzioni

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: Firma del dispositivo = 0x1e9587 (probabilmente m32u4)

avrdude: lettura della memoria hfuse:

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: scrittura del file di output "hfuse_backup_file_od2.0.hex"

 

avrdude: safemode: Fusibili OK (E:CB, H:D8, L:FF)

 

avrdude fatto. Grazie.

 

ora il fusibile:

 

avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U lfuse:r:lfuse_backup_file_od2.0.hex:r

 

Collegamento al programmatore: .

Programmatore trovato: Id = "CATERIN"; tipo = S

    Versione del software = 1.0; nessuna versione hardware data.

Il programmatore supporta l'incremento automatico degli addr.

Il programmatore supporta l'accesso alla memoria buffer con buffersize=128 byte.

 

Il programmatore supporta i seguenti dispositivi:

    Codice del dispositivo: 0x44

 

avrdude: Dispositivo AVR inizializzato e pronto ad accettare istruzioni

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: Firma del dispositivo = 0x1e9587 (probabilmente m32u4)

avrdude: lettura della memoria lfuse:

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: scrittura del file di output "lfuse_backup_file_od2.0.hex"

 

avrdude: safemode: Fusibili OK (E:CB, H:D8, L:FF)

 

avrdude fatto. Grazie.

 

Ora l'ultimo comando, l'efuse:

 

avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U efuse:r:efuse_backup_file_od2.0.hex:r

 

Collegamento al programmatore: .

Programmatore trovato: Id = "CATERIN"; tipo = S

    Versione del software = 1.0; nessuna versione hardware data.

Il programmatore supporta l'incremento automatico degli addr.

Il programmatore supporta l'accesso alla memoria buffer con buffersize=128 byte.

 

Il programmatore supporta i seguenti dispositivi:

    Codice del dispositivo: 0x44

 

avrdude: Dispositivo AVR inizializzato e pronto ad accettare istruzioni

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: Firma del dispositivo = 0x1e9587 (probabilmente m32u4)

avrdude: lettura della memoria efuse:

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: scrittura del file di output "efuse_backup_file_od2.0.hex"

 

avrdude: safemode: Fusibili OK (E:CB, H:D8, L:FF)

 

avrdude fatto. Grazie.

 

Ricordate che è necessario premere il pulsante RST due volte prima di ogni operazione! È non necessario scollegare Arduino dal Raspberry Pi dopo aver eseguito l'operazione RST.

 

Creare un file ZIP

potete creare un file ZIP usando il seguente comando (sostituite i percorsi come appropriato):

sudo zip -r /home/pi/opendrop2.0_bak.zip /home/pi/opendrop2.0_bak

Ripristinare il firmware

Se avete bisogno di ripristinare il firmware, usate i seguenti comandi. Di nuovo, non dimenticare di premere il pulsante RST due volte prima di ogni comando!

Eseguite i comandi dalla directory corretta come root. Assicuratevi di avere la lettera "w" per scrivere sul microcontrollore (Arduino in questo caso).

Scrivere il file flash:

avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U flash:w:flash_backup_file_od2.0.hex

Collegamento al programmatore: .

Programmatore trovato: Id = "CATERIN"; tipo = S

    Versione del software = 1.0; nessuna versione hardware data.

Il programmatore supporta l'incremento automatico degli addr.

Il programmatore supporta l'accesso alla memoria buffer con buffersize=128 byte.

 

Il programmatore supporta i seguenti dispositivi:

    Codice del dispositivo: 0x44

 

avrdude: Dispositivo AVR inizializzato e pronto ad accettare istruzioni

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: Firma del dispositivo = 0x1e9587 (probabilmente m32u4)

avrdude: NOTA: è stata specificata una memoria "flash", verrà eseguito un ciclo di cancellazione

         Per disabilitare questa caratteristica, specificate l'opzione -D.

avrdude: cancellare il chip

avrdude: lettura del file di input "flash_backup_file_od2.0.hex"

avrdude: scrittura di flash (32604 byte):

 

Scrittura | ################################################## | 100% 2.98s

 

avrdude: 32604 byte di flash scritti

avrdude: verifica della memoria flash contro flash_backup_file_od2.0.hex:

avrdude: caricare i dati flash dal file di input flash_backup_file_od2.0.hex:

avrdude: il file di input flash_backup_file_od2.0.hex contiene 32604 byte

avrdude: lettura dei dati flash on-chip:

 

Lettura | ################################################## | 100% 0.76s

 

avrdude: verificare ...

avrdude: errore di verifica, primo errore di corrispondenza al byte 0x7000

         0x55 != 0x5f

avrdude: errore di verifica; contenuto non corrispondente

 

avrdude: safemode: Fusibili OK (E:CB, H:D8, L:FF)

 

avrdude fatto. Grazie.

 

Nota: ho provato a scrivere diverse volte, variando leggermente il comando. In ogni tentativo ho ottenuto l'errore di verifica; il firmware funziona bene, però - la mia ricerca superficiale ha mostrato che è legato a qualche cablaggio della periferia del microcontrollore - è stato inserito nell'OpenDrop mentre stavo facendo il backup e il ripristino. Ho deciso che i risultati parlano da soli, e sono passato al restauro delle altre parti. I vostri risultati potrebbero variare qui. Nessuna garanzia data!

 

Ripristinare l'eeprom:

avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U eeprom:w:eeprom_backup_file_od2.0.hex

 

Collegamento al programmatore: .

Programmatore trovato: Id = "CATERIN"; tipo = S

    Versione del software = 1.0; nessuna versione hardware data.

Il programmatore supporta l'incremento automatico degli addr.

Il programmatore supporta l'accesso alla memoria buffer con buffersize=128 byte.

 

Il programmatore supporta i seguenti dispositivi:

    Codice del dispositivo: 0x44

 

avrdude: Dispositivo AVR inizializzato e pronto ad accettare istruzioni

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: Firma del dispositivo = 0x1e9587 (probabilmente m32u4)

avrdude: lettura del file di input "eeprom_backup_file_od2.0.hex"

avrdude: file di input eeprom_backup_file_od2.0.hex rilevato automaticamente come binario grezzo

avrdude: scrittura della eeprom (1024 byte):

 

Scrittura | ################################################## | 100% 3.44s

 

avrdude: 1024 byte di eeprom scritti

avrdude: verifica della memoria eeprom contro eeprom_backup_file_od2.0.hex:

avrdude: carica i dati eeprom dal file di input eeprom_backup_file_od2.0.hex:

avrdude: file di input eeprom_backup_file_od2.0.hex rilevato automaticamente come binario grezzo

avrdude: il file di input eeprom_backup_file_od2.0.hex contiene 1024 byte

avrdude: lettura dei dati eeprom sul chip:

 

Lettura | ################################################## | 100% 1.76s

 

avrdude: verificare ...

avrdude: 1024 byte di eeprom verificati

 

avrdude: safemode: Fusibili OK (E:CB, H:D8, L:FF)

 

avrdude fatto. Grazie.

 

Ripristinare i fusibili (Nota: ho letto qualcosa su alcuni fusibili che sono ripristinabili solo da un programmatore a 12 V. YMMV).

 

Prima hfuse:

avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U hfuse:w:hfuse_backup_file_od2.0.hex

 

Collegamento al programmatore: .

Programmatore trovato: Id = "CATERIN"; tipo = S

    Versione del software = 1.0; nessuna versione hardware data.

Il programmatore supporta l'incremento automatico degli addr.

Il programmatore supporta l'accesso alla memoria buffer con buffersize=128 byte.

 

Il programmatore supporta i seguenti dispositivi:

    Codice del dispositivo: 0x44

 

avrdude: Dispositivo AVR inizializzato e pronto ad accettare istruzioni

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: Firma del dispositivo = 0x1e9587 (probabilmente m32u4)

avrdude: lettura del file di input "hfuse_backup_file_od2.0.hex"

avrdude: file di input hfuse_backup_file_od2.0.hex rilevato automaticamente come binario grezzo

avrdude: scrivere hfuse (1 byte):

 

Scrittura | | 0% 0.00s ***failed;

Scrittura | ################################################## | 100% 0.00s

 

avrdude: 1 byte di hfuse scritto

avrdude: verifica della memoria di hfuse contro hfuse_backup_file_od2.0.hex:

avrdude: caricare i dati hfuse dal file di input hfuse_backup_file_od2.0.hex:

avrdude: file di input hfuse_backup_file_od2.0.hex rilevato automaticamente come binario grezzo

avrdude: il file di input hfuse_backup_file_od2.0.hex contiene 1 byte

avrdude: lettura dei dati hfuse su chip:

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: verificare ...

avrdude: 1 byte di hfuse verificato

 

avrdude: safemode: Fusibili OK (E:CB, H:D8, L:FF)

 

avrdude fatto. Grazie.

 

ora lfuse:

avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U lfuse:w:lfuse_backup_file_od2.0.hex

 

Collegamento al programmatore: .

Programmatore trovato: Id = "CATERIN"; tipo = S

    Versione del software = 1.0; nessuna versione hardware data.

Il programmatore supporta l'incremento automatico degli addr.

Il programmatore supporta l'accesso alla memoria buffer con buffersize=128 byte.

 

Il programmatore supporta i seguenti dispositivi:

    Codice del dispositivo: 0x44

 

avrdude: Dispositivo AVR inizializzato e pronto ad accettare istruzioni

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: Firma del dispositivo = 0x1e9587 (probabilmente m32u4)

avrdude: lettura del file di input "lfuse_backup_file_od2.0.hex"

avrdude: file di input lfuse_backup_file_od2.0.hex rilevato automaticamente come binario grezzo

avrdude: scrivere lfuse (1 byte):

 

Scrittura | | 0% 0.00s ***failed;

Scrittura | ################################################## | 100% 0.00s

 

avrdude: 1 byte di lfuse scritto

avrdude: verifica della memoria lfuse contro lfuse_backup_file_od2.0.hex:

avrdude: caricare i dati lfuse dal file di input lfuse_backup_file_od2.0.hex:

avrdude: file di input lfuse_backup_file_od2.0.hex rilevato automaticamente come binario grezzo

avrdude: il file di input lfuse_backup_file_od2.0.hex contiene 1 byte

avrdude: lettura dei dati on-chip lfuse:

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: verificare ...

avrdude: 1 byte di lfuse verificato

 

avrdude: safemode: Fusibili OK (E:CB, H:D8, L:FF)

 

avrdude fatto. Grazie.

 

ora efuse:

avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U efuse:w:efuse_backup_file_od2.0.hex

 

Collegamento al programmatore: .

Programmatore trovato: Id = "CATERIN"; tipo = S

    Versione del software = 1.0; nessuna versione hardware data.

Il programmatore supporta l'incremento automatico degli addr.

Il programmatore supporta l'accesso alla memoria buffer con buffersize=128 byte.

 

Il programmatore supporta i seguenti dispositivi:

    Codice del dispositivo: 0x44

 

avrdude: Dispositivo AVR inizializzato e pronto ad accettare istruzioni

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: Firma del dispositivo = 0x1e9587 (probabilmente m32u4)

avrdude: lettura del file di input "efuse_backup_file_od2.0.hex"

avrdude: file di input efuse_backup_file_od2.0.hex rilevato automaticamente come binario grezzo

avrdude: scrivere efuse (1 byte):

 

Scrittura | | 0% 0.00s ***failed;

Scrittura | ################################################## | 100% 0.00s

 

avrdude: 1 byte di efuse scritto

avrdude: verifica della memoria di efuse contro efuse_backup_file_od2.0.hex:

avrdude: caricare i dati efuse dal file di input efuse_backup_file_od2.0.hex:

avrdude: file di input efuse_backup_file_od2.0.hex rilevato automaticamente come binario grezzo

avrdude: il file di input efuse_backup_file_od2.0.hex contiene 1 byte

avrdude: lettura dei dati efuse on-chip:

 

Lettura | ################################################## | 100% 0.00s

 

avrdude: verificare ...

avrdude: 1 byte di efuse verificato

 

avrdude: safemode: Fusibili OK (E:CB, H:D8, L:FF)

 

avrdude fatto. Grazie.

 

Questo è tutto - il firmware è stato ripristinato. Ora puoi scollegare l'OpenDrop / SparkFun Pro Micro dal tuo Raspberry Pi.

 

Link utili e riferimenti

  • https://www.nongnu.org/avrdude/user-manual/avrdude_4.html
  • https://askubuntu.com/questions/254835/how-can-i-know-the-usb-port
  • https://forum.arduino.cc/index.php?topic=403201.0 (comando avrdude per altri obiettivi!)
  • https://learn.sparkfun.com/tutorials/pro-micro–fio-v3-hookup-guide/introduction
  • https://www.hackster.io/rayburne/avr-firmware-duplicator (comando avrdude per altri obiettivi!)
  • https://forum.arduino.cc/index.php?topic=453997.0 (riguardo all'errore con la verifica del flash)