Sé que es viejo, pero resultó que hice esto con un dspice el año pasado, así que resumiré para beneficio de otras personas.
Primero, no usaría el W5100, pero su hermano W5500 , que es básicamente una revisión, y utiliza el SPI mucho mejor. También consideraría cambiar a una parte que tenga DMA, especialmente si desea que sea solo UDP.
En ambos casos, probablemente usará la pila TCP / IP de Microchip MLA, Wiznet proporciona parches para esto.
Desafortunadamente, todas las variantes de pila TCP / IP de Microchip parecen bloquear la comunicación a través de SPI (sin DMA, sin modo de búfer mejorado) . Traté de reducirlo a UDP solamente y recorté toda la parte del microchip (usando el controlador subyacente wiznet directamente y reescribiéndolo en el proceso).
También estoy de acuerdo con MJH en que el PIC18F97J60 habilitado para DMA es una mejor opción que un PIC más barato con ENC (a menos que sus números sean realmente altos), pero me decepcionó un poco que el TCP / IP no utilice realmente los beneficios del J60, pegado al mínimo común denominador.
Las ventajas de usar una parte de IP en lugar de una parte de Ethernet es que puede limitar un socket a un determinado puerto y no tendrá que transferir ningún tráfico no relacionado a través de su enlace SPI. El W5500 tiene 4KB por zócalo, y utilizo zócalos separados para recibir y enviar para maximizar la utilización del búfer.
Mi pila UDP actual solo reacciona en la interrupción de wiznet y no descarga datos de carga útil que no necesita. Lo uso UDP, aunque basado en paquetes (sin secuencias), y uso transmisiones en los puertos para enviar (para evitar tener que almacenar en caché los datos MAC para fines ARP, aunque en retrospectiva, tal vez no sea la mejor optimización).
En el 60MIPS dspice, un viaje de ida y vuelta (recibe un paquete pequeño, responde con un paquete pequeño) toma alrededor de 100-120us, de los cuales aproximadamente 10-12us es tiempo de CPU en tres fragmentos diferentes (pre-recepción (3-5us), post-recepción y pre-envío. (5-7 us dependiendo) y envío posterior (2us). Una vez cada 2kb tengo que hacer un mantenimiento que es aproximadamente 40us de tiempo de pared y 5us de tiempo de CPU.
Los comandos cortos se realizan utilizando un búfer mejorado. Ya se hace usando DMA usando (en dspice, DMA necesita 2 bits de tiempo entre bytes (o palabras en modo de 16 bits), el buffer mejorado no).
La suite no está (todavía) abierta, pero si sb necesita punteros, responda en los comentarios. Planeo portar la pila a pic32 (mk) en el próximo año.