我知道它已经很旧了,但是去年我恰好用dspice完成了此操作,因此我将总结一下,以使他人受益。
首先,我不会使用W5100,但是它的兄弟W5500基本上是一个修订版,并且可以更好地利用SPI。我还将考虑切换到具有DMA的部件,特别是如果您只想使其成为UDP。
在这两种情况下,您可能都将使用Microchip MLA TCP / IP堆栈,Wiznet为此提供了补丁。
不幸的是,所有Microchip TCP / IP堆栈变体似乎都阻止了通过SPI的通信(没有DMA,没有增强的缓冲模式)。我试图将其缩减为仅UDP,并剪切了整个微芯片部分(直接使用wiznet底层驱动程序并在此过程中对其进行重写)。
我也同意MJH的观点,使能DMA的PIC18F97J60比具有ENC的便宜PIC是一个更好的选择(除非您的数字很高),但我对TCP / IP并没有真正利用J60的好处感到失望。到最小公分母
使用IP部件而不是以太网部件的优势在于,您可以将套接字限制在某个端口上,而不必通过SPI链路传输任何无关的流量。W5500每个插槽有4KB,我使用一个单独的插槽进行接收和发送,以最大程度地利用缓冲区。
我当前的UDP堆栈仅对wiznet中断做出反应,并且不会下载不需要的有效负载数据。我使用UDP,尽管它是基于数据包的(没有流),并且在端口上使用广播进行发送(以避免为ARP目的而缓存MAC数据,但回想起来,这可能不是最佳的优化方法)。
在60MIPS dspice上,往返(接收一个小数据包,用一个小数据包应答)大约需要100-120us,其中大约10-12us是三个不同块(接收前(3-5us),接收后和发送前的CPU时间) (取决于我们5-7)并发送后发送(2us)每隔2kb,我必须进行一些维护,即大约40us的挂墙时间和5us的CPU时间。
短命令使用增强型缓冲区来完成。使用DMA的时间更长(在dspice上,DMA在字节之间需要2位时间(或在16位模式下为字),而增强缓冲区则不需要。
该套件尚未打开,但如果某人需要指针,请在评论中回复。我计划在明年将堆栈移植到pic32(mk)。