项目描述
官方 Arduino
Ethernet Shield 是由 Wiznet
W5100 网络处理器驱动的,这已经有很长一段时间了。这个Shield和芯片,成就了Arduino世界中 每一个IP使能的网络项目。
WIZnet W5100芯片有很多有趣的特征,比如直接&间接内存访问,但是在SPI总线性能上有严重的限制。同样,W5100在硬件IPv4引擎中只支持4个端口。可增加的软件端口是无线的,通过端口0 在MACRAW中提供你自己的IP栈,但是这种方式不好弄。
W5100接口有两个主要问题。首先,SPI接口仅指定4MHz运行。其次,SPI接口只支持一个字节模式传输。
SPI速率4MHz的限制,意味着标准的16MHz Arduino板总线不能被高于SCK/4 的速度驱动。如果在规范内驱动W5100。20MHz板子,例如Goldilocks,规范内一定会掉到SCK/8.
同样,网络接口的每一位数据传入传出,W5100字节传输模式要求一个4字节的SPI总线处理。
W5100理论上(无法实现)的最佳传输速率,这意味着 4*8*4 = 128 系统时钟推移传送一个单字节数据!啊!太慢了。
该做点什么?
我猜想WIZnet肯定意识到了性能问题(更高性能的32位MCU跑一个更高系统时钟--而不是又慢又的8位AVR ATmega--的时候更明显)他们以及发布了W5200作为W5100的代替(特定SPI总线接口)。
WIZnet W5200
W5200 带来了一些新的性能,基于众所周知并被认可的W5100 IPv4网络引擎。下表是两个芯片的对比。
W5200 vs W5100 主要性能对比
W5200 更小更容易固定在板子上,对SMD结构有兴趣的,更容易私自焊接。更重要的是网络性能,W5200 具有两倍的用于IP包的Tx/Rx缓存,同步支持8个硬件IP socket。这些特征使W5200性能比W5100增加了一大块,值得替换。可以看到下图中两个芯片大小的对比,左边是Elecrow的W5200,右边是老的 DF Robot W5100 v1.0.
然而,W5200最大的提升还是在SPI总线接口方面。WIZnet在W5100上已经放弃了直接寻址机制,制造了W5200 专门SPI接口,运行速度高达80MHz时钟。有20倍的增加。
另外,W5200支持SPI突发模式传输。这个意思是,全部的Tx/Rx缓存(32K字节)都可以一次性读/写入。
在Arduino情形中,W5200可以驱动为SCK/2,AVR ATmega MCU上可达到的最大SPI速度,每一位都占一个SPI字节来传输。这意味着,我们可以达到 2 * 8 * 1 = 16的系统时钟传输速率,来传送一字节数据。
这意味着用于Arduino时,W5200要快8倍,用于 Goldilocks 20MHz板子,要比W5100 快16倍 -- 像猎豹一样快!
这里 有一个两个WIZnet芯片速率区别的实际分析。
易用
W5200易用,也易学。
WIZnet 已经提供了一些包含在Arduino IDE的W5200驱动文件。这些用于替换现存的W5100驱动文件
已经在IDE中,只需替换(或重写)就可以轻松满足W5200 SPI接口要求。他们也提供 C
code drivers,我已经用于我的 AVR
freeRTOS 代码中。
我等W5200好长一段时间了,想把它用到Arduino 兼容shield上,如此我就可以轻松使用了。突然发现市场上有两种,一个是中国的 W5200
Shield from Elecrow,另一个是 W5200
Shield from Wiznet
我决定买一些Elecrow的 W5200 Shield。他们看起来比WIZnet版本好很多,因为Eleccrow用了5V转3.3V的稳压芯片来确保板载 SD 卡的安全,已经设计使用了Arduino R3标准。
Elecrow W5200 板最关键且独特的特点是,放低的RJ45的使用,这样就使Ethernet shield与其他板子之间没有间隙。