So che è vecchio, ma mi è capitato di averlo fatto con una spezia l'anno scorso, quindi riassumerò per il beneficio degli altri.
Innanzitutto, non userei il W5100, ma suo fratello W5500 , che è fondamentalmente una revisione, e utilizza SPI molto meglio. Vorrei anche prendere in considerazione il passaggio a una parte che ha DMA, specialmente se si desidera renderlo solo UDP.
In entrambi i casi probabilmente utilizzerai lo stack Microchip MLA TCP / IP, Wiznet fornisce patch per questo.
Sfortunatamente, tutte le varianti di stack Microchip TCP / IP sembrano bloccare la comunicazione tramite SPI (nessun DMA, nessuna modalità buffer avanzata) . Ho provato a ridurlo solo su UDP e ho ritagliato l'intera parte del microchip (usando direttamente il driver sottostante wiznet e riscrivendolo nel processo).
Concordo anche con MJH che il PIC18F97J60 abilitato DMA sia una scelta migliore di un PIC più economico con ENC (a meno che i tuoi numeri non siano davvero alti), ma sono rimasto un po 'deluso dal fatto che il TCP / IP non utilizzi davvero i vantaggi del J60, rimanendo fedele al minimo comune denominatore.
Il vantaggio di utilizzare una parte IP anziché una parte Ethernet è che è possibile limitare un socket a una determinata porta e non sarà necessario trasferire alcun traffico non correlato sul collegamento SPI. Il W5500 ha 4KB per socket e io uso un socket separato per la ricezione e l'invio per massimizzare l'utilizzo del buffer.
Il mio stack UDP corrente reagisce solo sull'interruzione wiznet e non scarica i dati del payload di cui non ha bisogno. Lo uso UDP, anche se basato su pacchetti (nessun flusso) e utilizzo le trasmissioni sulle porte per l'invio (per evitare di dover memorizzare nella cache i dati MAC per scopi ARP, anche se a posteriori non è forse la migliore opimizzazione).
Sul dSPice 60MIPS un roundtrip (ricevere un pacchetto piccolo, rispondere con un pacchetto piccolo) richiede circa 100-120us, di cui circa 10-12us è il tempo della CPU in tre diversi blocchi (pre-ricezione (3-5us), post-ricezione e presend (5-7 a seconda del caso) e invio post (2us). Una volta ogni 2kb devo fare un po 'di manutenzione che è di circa 40us tempo di wall e 5us di CPU
I comandi brevi vengono eseguiti utilizzando il buffer avanzato. Più a lungo si utilizza DMA utilizzando (su dspice, DMA richiede 2 bit di tempo tra i byte (o parole in modalità 16 bit), il buffer avanzato no).
La suite non è (ancora) aperta, ma se sb necessita di puntatori, rispondi nei commenti. Ho in programma di portare lo stack su pic32 (mk) nel prossimo anno.