Progetto ReleDuino (Aggiornamento files al 18.07.2013)

Faccio un giro un po lungo per darti una risposta, tutte le librerie di cui sono a conoscenza basate su ENC28J60 utilizzano dei driver SPI scritti da Pascal Stang, le varianti sono lato stack IP.

La libreria SPI, se pur funzionale e robusta, ha un paio di nei. Il primo è nella gestione del chip in polling, il secondo è nella gestione dei dati in uscita e l'utilizzo della RAM.

La gestione in polling è sicuramente più onerosa, ma non saprei quantificare quanto questo possa affliggere i consumi, ma questo non dovrebbe permetterti di gestire la modalità sleep.
Leggendo il datasheet, sembra che l'ENC28J60 abbia solo una modalità di power save, che di conseguenza non ti permette di ricevere dati.

In sostanza, indipendentemente dall'utilizzo dell'interrupt, non puoi utilizzare una modalità di sleep a meno di non voler rinunciare alla ricezione dei dati. Il discorso è diverso lato MCU, perché potresti mettere il microcontrollore in sleep e farlo riattivare alla ricezione dell'interrupt, lasciando l'ENC28J60 sempre attivo.
Le attuali libreria già includono le funzioni di power down, quindi nel caso in cui la scheda voglia essere utilizzata senza connettività Ethernet, si può pensare di spegnere il chip.

Relativamente alla gestione dei dati in uscita, l'ENC28J60 ha un significativo quantitativo di RAM Kbyte) se confrontato con l'ATmega, la libreria alloca un'area di memoria specchio nell'ATmega, limitando la dimensione massima dei pacchetti alla quantità di RAM impegnata sull'ATmega.

Si può invece lavorare ad una libreria che permetta di utilizzare la RAM direttamente nell'ENC28J60, ho iniziato a studiare questo approccio per utilizzarlo in Souliss. Una via di mezzo sarebbe quella di caricare contenuti statici (ASCII, HTML) dalla memoria Flash della MCU all'ENC28J60 calcolando il checksum TCP ed IP in modo iterativo ad ogni byte trasferito.

Una soluzione più interessante, ma meno scalabile, sarebbe quella di utilizzare direttamente la RAM dell'ENC28J60 come estensione di quella della MCU, però non ricordo se le modalità di accesso via SPI permettano di realizzare un approccio del genere.

Tutto questo per dire, se hai un pin che ti avanza e che gestisca gli interrupt in hardware per il wake-up della MCU, allora aggiungilo anche.

Saluti,
Dario.