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

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'.