Eu sei que é velho, mas por acaso fiz isso com uma dspice no ano passado, então vou resumir para o benefício de outras pessoas.
Primeiro, eu não usaria o W5100, mas seu irmão W5500 , que é basicamente uma revisão, e utiliza o SPI muito melhor. Eu também consideraria mudar para uma peça que tenha DMA, especialmente se você quiser torná-lo apenas UDP.
Nos dois casos, você provavelmente usará a pilha TCP / IP Microchip MLA, o Wiznet fornece correções para isso.
Infelizmente, todas as variantes de pilha do Microchip TCP / IP parecem bloquear a comunicação através do SPI (sem DMA, sem modo de buffer aprimorado) . Tentei reduzi-lo apenas para UDP e recortei toda a parte do microchip (usando o driver subjacente do wiznet diretamente e reescrevendo-o no processo).
Também concordo com a MJH que o PIC18F97J60 habilitado para DMA é uma escolha melhor do que uma PIC mais barata com a ENC (a menos que os números sejam realmente altos), mas fiquei um pouco decepcionado por o TCP / IP realmente não utilizar os benefícios do J60. para o menor denominador comum.
As vantagens de usar uma parte IP em vez de uma parte Ethernet é que você pode limitar um soquete a uma determinada porta e não precisará transferir nenhum tráfego não relacionado pelo seu link SPI. O W5500 possui 4KB por soquete, e eu uso soquetes separados para receber e enviar para maximizar a utilização do buffer.
Minha pilha UDP atual reage apenas à interrupção do wiznet e não baixa os dados de carga útil de que não precisa. Eu o uso UDP, embora com base em pacotes (sem fluxos), e uso transmissões nas portas para envio (para evitar ter que armazenar em cache os dados MAC para fins de ARP, embora, em retrospecto, essa talvez não seja a melhor opimização).
Na placa de dados 60MIPS, uma viagem de ida e volta (recebe um pacote pequeno, responde com um pacote pequeno) leva cerca de 100-120us, dos quais 10-12us são tempo de CPU em três blocos diferentes (pré-recebimento (3-5us), pós-recebimento e envio (5-7 nos dependendo) e pós-envio (2us) Uma vez a cada 2kb eu tenho que fazer alguma manutenção que é cerca de 40us tempo de parede e 5us tempo de CPU.
Comandos curtos são feitos usando o buffer aprimorado. Mais tempo é feito usando DMA usando (no dspice, o DMA precisa de 2 bits de tempo entre bytes (ou palavras no modo de 16 bits), o buffer aprimorado não).
A suíte ainda não está aberta, mas se o sb precisar de indicadores, responda nos comentários. Pretendo portar a pilha para pic32 (mk) no próximo ano.