bootloader x caricare sketch da SD?

bunasera,qlkn saprebbe dirmi se c'è un bootloader per poter caricare gli sketch da SD,senza usare due arduini?
lo so che pretendo troppo 8)

L'ho appena segnalato in un altro thread:
http://arduino.cc/forum/index.php/topic,99837.0.html
http://seili.net/weblog/2010/07/14/avr2boots-dual-bootloader-released/

NON provato, non so se e come funziona.

sei incredibile,leo :slight_smile:

Io l'ho provato tempo fa, ha ancora dei bachi quel bootloader, carica lo sketch da SD solo se fai il reset della scheda in determinate condizioni. Però il meccanismo con cui prende lo sketch da SD è assolutamente carino!

ah cavolo allora non posso fare ciò che volevo:
dati due arduino a mt di distanza,collegati da seriale,uploadare lo sketch del'arduino remoto dall'altro..(ovviamente lo sketch conterrebbe una funzione x caricare su sd il codice ricevuto da seriale,e l'altro arduino sarebbe collegato anke a un router..)
cmq grazie :0

Però il meccanismo con cui prende lo sketch da SD è assolutamente carino!

quale sarebbe?

Puoi uppare lo sketch dal PC usando gli xbee se devi lavorare a distanza....

ho già tirato un cavo apposta per diversi motivi..cmq non prevedo di caricare sketch ogni giorno,qnd nn vado a comprarmi gli xbee apposta(anche xkè avrei problemi di copertura)..era più per uso occasionale..

cmq grasie!!

questo bootloader, come capisci dal nome è un doppio booloader, quello che sei abituato ad usare con Arduino che carica il programma dalla seriale e il secondo bootloader che, in una determinata condizione ti permette di caricare il programma anche attraverso il bus SPI.

Come fai a decidere quale dei due? Tramite l'espediente che si è inventato.

Di default carichi dalla seriale, ma se negli ultimi 8 byte della EEPROM scrivi un nome (ad esempio ARDUINO) e nella SD carichi uno sketch compilato e rinominato con lo stesso nome (quindi ARDUINO.hex) lui al riavvio lo riconosce e lo flasha usando la SPI. Poi per evitare che ad ogni riavvio il firmware venga inutilmente riflashato, cambi il nome al file nella SD, così non viene più riconosciuto.

Il problema è che se premi reset il firmware quasi mai viene caricato

asp..quindi per fargli caricare l'hex dovrei per forza togliere e rimettere l'alimentazione?

certo, per entrare nel bootloader in qualche modo devi resettare.

hai anche ragione... :slight_smile: grazie

Un reset provocato dal watchdog potrebbe funzionare meglio?

Ho necessità anche io di caricare da sd,mi sà che farò qualche esperimento.

Fatti gli esperimenti in merito!!

Effettivamente 2boots è veramente poco affidabile e flessibile, penso che la causa sia che per contenere le dimensioni del codice del bootloader si sia data poca importanza alla sezione lettura da SD.

Tuttavia , ho trovato un gruppo di ragazzi (non italiani ma che ringrazio osbock,martin_bg,eudaldcp) che hanno fatto dei fork di quel bootloader creandone un altro con una gestione della lettura da SD decisamente migliore, aimè senza supporto seriale per ora , ma decisamente affidabile .
Diciamo una buona base di partenza per chi ha necessità inderogabile di caricare da sd.

Se ne parla qui : http://arduino.cc/forum/index.php/topic,99837.0.html

Il mio progetto ad ora si trova al punto che ho una arduinoethernet con a bordo caricato questo bootloader.
Come codice ho un tinywebserver che adempie correttaemente a tutte le funzionalità che mi necessitano , ovvero controllo dei dati da pagina web e modifica dei stati delle porte, e dulcis in fundo , una pagina web che mi da la possibilità di aggiornare il codice stesso facendo l'upload via web.
Carino no? :grin:

niki77:
Fatti gli esperimenti in merito!!

Effettivamente 2boots è veramente poco affidabile e flessibile, penso che la causa sia che per contenere le dimensioni del codice del bootloader si sia data poca importanza alla sezione lettura da SD.

Tuttavia , ho trovato un gruppo di ragazzi (non italiani ma che ringrazio osbock,martin_bg,eudaldcp) che hanno fatto dei fork di quel bootloader creandone un altro con una gestione della lettura da SD decisamente migliore, aimè senza supporto seriale per ora , ma decisamente affidabile .
Diciamo una buona base di partenza per chi ha necessità inderogabile di caricare da sd.

Se ne parla qui : http://arduino.cc/forum/index.php/topic,99837.0.html

Il mio progetto ad ora si trova al punto che ho una arduinoethernet con a bordo caricato questo bootloader.
Come codice ho un tinywebserver che adempie correttaemente a tutte le funzionalità che mi necessitano , ovvero controllo dei dati da pagina web e modifica dei stati delle porte, e dulcis in fundo , una pagina web che mi da la possibilità di aggiornare il codice stesso facendo l'upload via web.
Carino no? :grin:

Molto interessante :slight_smile:

avresti voglia di caricare lo sketch?
così posso darci un'occhiata..

Con lo sketch solo ci fai poco, è tutto l'insieme delle cose .
La cosa più complicata è stato fare l'upload del file da pagina web... sembrava banale invece è stato uno sbocco di sangue, però ora c'è e funziona bene, quindi sono soddisfatto.
Ora voglio vedere se riesco ad automatizzare anche il riavvio post upload direttamente da codice, senza utilizzare hardware aggiuntivo.
Se riesco a fare pure quello sono a cavallo.

niki77:
Con lo sketch solo ci fai poco, è tutto l'insieme delle cose .
La cosa più complicata è stato fare l'upload del file da pagina web... sembrava banale invece è stato uno sbocco di sangue, però ora c'è e funziona bene, quindi sono soddisfatto.
Ora voglio vedere se riesco ad automatizzare anche il riavvio post upload direttamente da codice, senza utilizzare hardware aggiuntivo.
Se riesco a fare pure quello sono a cavallo.

cito massimo banzi in un post di tempo fa:

  1. Raccomandato da Atmel. Attivare il "watchdog timer" e aspettare che si resetti.
    Il "cane da guardia" è un timer che serve a resettare un processore che si sia incastrato per un problema software. Il timer, una volta attivato, resetta il processore a meno che non venga fatto ripartire... perciò in un'applicazione che deve mantenere un certo livello di affidabilità, il programma fa ripartire il timer regolarmente ... dovesse mai incepparsi allora dopo pochi millisecondi il processore si resetta. Aggiungi questo all'inizio tuo sketch Arduino
 #include <avr/io.h>

#include <avr/wdt.h>

#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}






mentre nel punto dove vuoi resettare scrivi:


Reset_AVR();

Grazie superlol ma ho già provato col cane da guardia!
Purtroppo si incarta, ovvero pare che si resetti, in realtà si pianta e non riparte.

Avevo pensato di provare qualcosa tipo asm volatile(" jmp 0xbladdress") per saltare direttamente al bootloader , ma poi ieri sera era tardi e non mi andava di fare il dump per capire a che indirizzo puntare...

niki77:
Grazie superlol ma ho già provato col cane da guardia!
Purtroppo si incarta, ovvero pare che si resetti, in realtà si pianta e non riparte.

Avevo pensato di provare qualcosa tipo asm volatile(" jmp 0xbladdress") per saltare direttamente al bootloader , ma poi ieri sera era tardi e non mi andava di fare il dump per capire a che indirizzo puntare...

si un jump a 0x00 dovrebbe andare ma devi anche svuotare la ram e ripulire i timer..

Si ma non penso di dover saltare a 0x00, in questo caso riavvierei il programma senza passare dal bootloader , che non è proprio quello che voglio!