Go Down

Topic: caricare sketch con un altro arduino (Read 4 times) previous topic - next topic

nico0610

salve :)

ma sarebbe possibile inviare uno sketch da un arduino ad un altro? ad esempio su un arduino ho  file hex con il relativo sketch che me lo trasmette e tramite i pin tx e rx  collegati al secondo arduino esso viene flashato con il programma inviato ... non so se mi sono spiegato :)

leo72

Si può fare.
Puoi memorizzare il file hex su una scheda SD e da lì leggerlo e flasharlo sull'altro Arduino. In questo modo puoi aggiornare il firmware sulla SD. Se il 1° Arduino è collegato ad un PC allora basta installargli sopra lo sketch ArduinoISP e poi puoi usare l'Arduino come programmatore ecc...
Sono tutte cose fattibili, ma non è detto che per tutti i casi ci sia il programma già pronto.

Spiega casomai meglio la condizione di lavoro dei 2 Arduino

nico0610

io ho provato ad utilizzare questo circuito di collegamento senza però l'optional FTDI debugging

http://baldwisdom.com/bootdrive/

caricando sull'arduino collegato alla sd (la quale riesce a leggere un file.txt correttamente caricando l esempio dumpfile) il file bootdrive.ino contenuto nella cartella zip che si puo scaricare dal sito, sulla sd ho caricato il file blink.cpp.hex rinominandolo program.hex

leo72

Scusa, non capisco.
Hai provato a realizzarlo e non ti ha funzionato oppure lo hai solo studiato?
Anch'io l'ho guardato quel progetto, tempo fa, ma non l'ho ancora provato. Però dovrebbe funzionare se le cose sono state fatte correttamente.

nico0610

ho provato a realizzarlo ma non funziona ho utilizzato un arduino duemilanove (con bootloader dell'uno) e un arduino uno , all'arduino duemilanove e collegata la sd (non il modulo sd ma proprio un adattatore sd dove inserisco dentro le micro e provando a caricare i file txt con l'esempio dumpfile arduino li legge benissimo quindi non credo che il problema si nell'SD) ...

leo72

Non ho esaminato il firmware, bisognerebbe capire come funziona.
Vedo però che è stato scritto sulla Uno, non so se usando la 2009 cambia qualcosa. C'era una nota a piè di pagina in cui accenna al fatto che se la scheda target non è una Uno va cambiata la velocità di upload. POtrebbe valere anche sulla scheda programmatrice?

nico0610

potrebbe essere tanto vale tentare, proverò ad invertire i due arduini usando la uno come programmatore e la duemilanove come target e cambiando la velocità nel programma , appena ho fatto ti dico  :)

nico0610

niente nessun segno di vita  =( ... mi serve un aiuto  :smiley-red:

leo72

Hai collegato il pin SS correttamente? La comunicazione all'SD avviene tramite SPI e quel pin è necessario per dialogare con la schedina.

PS:
se la tua necessità è quella di poter aggiornare il firmware di una Arduino da una schedina SD, potresti provare anche il progetto 2boot:
https://github.com/thseiler/embedded/tree/master/avr/2boots

E' un bootloader modificato che "dovrebbe" permettere l'upload di uno sketch memorizzato su SD direttamente sul chip, senza usare schede terze. Potresti provarlo. E' un progetto vecchiotto, ha 2 annetti.

nico0610

l ss è collegato correttamente al pin 10, infatti con il dumpfile funziona ....si avevo gia pensato di utilizzare 2boot ma non riesco proprio a capire come andava installato il bootloader avrdude ecc non so come usarli mi sarebbe servita una spiegazione dettagliata, questo mi sembrava più facile  :)

leo72

Metti un chip in standalone, lo colleghi come per la programmazione ISP (vedi guida del Menniti) poi apri un terminale e carichi il firmware con avrdude.
Un'altra via è quella di mettere il firmware in una cartella sotto /hardware/arduino/bootloaders/ e poi creare una board virtuale nel file /hardware/arduino/boards.txt, magari replicando quella della UNO e cambiando solo le voci interessate.

mettiamo ad esempio che crei la cartella /hardware/arduino/bootloaders/2boot e dentro ci copi il file .hex che rinomini come bootloader_2boot.hex.
Una board potrebbe essere questa:

Code: [Select]
2boot.name=Arduino 2boot
2boot.upload.protocol=arduino
2boot.upload.maximum_size=32256
2boot.upload.speed=115200
2boot.bootloader.low_fuses=0xff
2boot.bootloader.high_fuses=0xde
2boot.bootloader.extended_fuses=0x05
2boot.bootloader.path=2boot
2boot.bootloader.file=bootloader_2boot.hex
2boot.bootloader.unlock_bits=0x3F
2boot.bootloader.lock_bits=0x0F
2boot.build.mcu=atmega328p
2boot.build.f_cpu=16000000L
2boot.build.core=arduino
2boot.build.variant=standard


Avviando l'IDE, carichi lo sketch ArduinoISP sulla UNO usata come programmatore, poi selezioni da Strumenti/Tipo di board la scheda "Arduino 2boot" e clicchi su "Scrivi bootloader".
In questo modo prepari il chip con i fuse ed il bootloader

nico0610

ook grazie per l'aiuto provo a fare il secondo metodo con l'arduino isp  , ma quale sarebbe il file del 2boot? che dal sito non capisco quale sia e non vorrei sbagliare :)

leo72

I file precompilati sono nella cartella build:
https://github.com/thseiler/embedded/tree/master/avr/2boots/build

nico0610

io copio in il contenuto della pagina 2boots-arduino-atmega328p-16000000L-nommc.hex (cioè copio tutte le scritte in esadecimale ) e creo un file .hex lo rinomino bootloader_2boot e lo inserisco nella cartella /hardware/arduino/bootloaders/2boot, creo la boards e poi eseguo il bootloader normalmente, no?  :)

nico0610


Go Up