[progetto comune][impariamo assieme]resuscitiamo il TFTP Bootloader!!

Ciao,

ieri sera osservavo il progetto ufficiale su github di arduino (Arduino · GitHub) quando mi sono accorto di un repository particolare: TFTP-Bootloader(GitHub - arduino/TFTP-Bootloader: An unfinished TFTP bootloader for Arduino Ethernet)
ovvero

Arduino Ethernet board and TFTP Bootloader
This is an unfinished TFTP bootloader for the Arduino Ethernet. The developer that was hired to write it never finished it so we are opening it up to the community in the hope that somebody will fix it and make it work.

in pratica è un bootloader che permette di uppare gli sketch, invece che con la classica seriale, attraverso la ehternet! Certo nasce per essere per la board arduino ethrnet, ma con qualche cambiamento e un poco di circuiteria credo possa essere espanso anche alla classica ethernet board.

purtroppo il progetto risulta morto il 16 July 2011.

Quindi l'idea è che tutti assieme, sopratutto i "principiati", partecipino assieme a chi ne sa qualcosina in più per completare il progetto.

Necessario:
Arduino + eth shield oppure arduino ethernet
git (per windows: http://windows.github.com/ per linux e mac Set up Git - GitHub Docs)
un pò di tempo da perdere.

info addizionali:
tftp: Trivial File Transfer Protocol - Wikipedia, http://www.networksorcery.com/enp/protocol/tftp.htm

premetto che non ho guardato il bootloader attuale e che non sono in possesso di una scheda ethernet (purtroppo, quindi vorrei ma non posso aiutarvi) quindi vorrei capire schematicamente come funziona il sistema.

intendo:
se dovessi fare una cosa simile io modificherei il core di arduino in modo che non si resetti all'aprirsi della seriale ma quando riceve una connessione in apertura dal protocollo (parte relativamente facile), quindi parte il bootloader che si mette in ascolto e di conseguenza programma il micro.

è una cavolata?

attualmente come funziona il sistema? salva magari su sd esterna?

Io ho l'Eth shield e posso metterla a disposizione per le prove in combinata con una 2009 ed una Seeeduino Mega (Mega 1280), non sarò di grande aiuto ma se posso fare testing chiedete pure..

superlol:
se dovessi fare una cosa simile io modificherei il core di arduino in modo che non si resetti all'aprirsi della seriale ma quando riceve una connessione in apertura dal protocollo (parte relativamente facile), quindi parte il bootloader che si mette in ascolto e di conseguenza programma il micro.

Hai quasi descritto il bootloader della Leonardo. :grin: :grin:

Per il TFTP c'è questa sezione che rimanda a git --> http://labs.arduino.cc/TFTPBootloader/Index

http://arduino.cc/forum/index.php/topic,118393.0.html

:stuck_out_tongue:

se funziona non capisco il perchè della descrizione allora..

Quale descrizione?

Non era un topic aperto da me ma da un altro utente,

lupastro81:
ciao è possibile caricare uno sketch tramite un qualche modulo ethernet (anche da costruire con un max)? e se è possibile mi potreste indicare un tutorial per favore?
dal pc all'arduino mega c'è una distanza di una quindicina di metri e un cavo utp sarebbe perfetto...

io mi sono limitato ad illustrare cosa fosse possibile fare

niki77:
Ciao,
So dell'esistenza di un bootloader che consente l'aggiornamento tramite ethernet laddove vi sia la shield installata(chipset w5100)ma non l'ho mai provato, pertanto non so dirti quanto funzioni .

ed in seguito ad allegare i risultati dei test.

niki77:
Piccolo aggiornamento:

Ho appena testato con successo il TFTPBootloader nella mia arduino ethernet....

Se poi ci si vuole lavorare per modificarlo si può fare, ma bisogna anche sapere in cosa si ha la necessità di modificarlo. :grin:

per descrizione intendevo questa:

Ethernet Bootloader
Arduino Ethernet board and TFTP Bootloader

This is an unfinished TFTP bootloader for the Arduino Ethernet. The developer that was hired to write it never finished it so we are opening it up to the community in the hope that somebody will fix it and make it work.

It was originally designed to run on both the Arduino Ethernet board and a regular Arduino with Ethernet Shield.

If you intend to work on it, join the Arduino Developers mailing list and let us know.

16 July 2011

lo scopo era prendere il codice e debugarralo per risolvere il bug in modo che funzionasse... ma se già funziona..

Funzionare funziona, ho effettuato una 50ina di caricamenti e non ha perso un colpo.
Diciamo che si potrebbero implementare delle costanti che in base a come sono impostate configura automaticamente le varie opzioni.
Io per risolvere il mio problema specifico ho compilato tutto sul sorgente, ma si potrebbe fare che in fase di compilazione si definiscono alcune costanti invece che leggerle dalla eeprom che secondo me è la cosa meno pratica:

  1. una constante che individua il tipo di scheda per la quale si vuole compilare il bootloader
    Deve contenere il pin del led della scheda(se presente)
    Il pin di SCK
    Il pin di MISO
    Il pin di MOSI
    Il pin di SS connesso al chip w5100

definiamo ad esempio ARDUINO_UNO che ha come valori
#ifdef ARDUINO_UNO
#define SCK_PIN 5 //PB5
#define MISO_PIN 4 //PB4
#define MOSI_PIN 3 //PB3
#define SS_PIN 2 //PB2
#define LED_PIN 1 //PBX [PB5(pin digital 13) non si può usare quello a bordo in quanto è utilizzato da SCK]
#endif

#ifdef ARDUINO_ETHERNET
#define SCK_PIN 5 //PB5
#define MISO_PIN 4 //PB4
#define MOSI_PIN 3 //PB3
#define SS_PIN 2 //PB2
#define LED_PIN 1 //PB1
#endif

  1. una serie di costanti che impostano la configurazione di rete

#ifdef BOARD_IP
... si imposta l'ip fornito in fase compilazione
#endif
#ifndef BOARD_IP
... si impsota un ip di default
#endif

stessa cosa per SUBNET_MASK, GATEWAY e MAC.

Una cosa molto interessante (già detta sopra da un altro utente) sarebbe quella di riuscire a forzare il reset della scheda tramite ethernet per consentire l'avviamento della stessa col bootloader in attesa di connessione tftp, ma questa implementazione va fatta nello sketch e non nel bootloader, quindi non sarebbe una soluzione 'integrata'.