官方 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

image

W5200 帶來了一些新的性能,基於眾所周知並被認可的W5100 IPv4網絡引擎。下表是兩個芯片的對比。

image

W5200 vs W5100 主要性能對比

W5200 更小更容易固定在板子上,對SMD結構有興趣的,更容易私自銲接。更重要的是網絡性能,W5200 具有兩倍的用於IP包的Tx/Rx緩存,同步支持8個硬件IP socket。這些特徵使W5200性能比W5100增加了一大塊,值得替換。可以看到下圖中兩個芯片大小的對比,左邊是Elecrow的W5200,右邊是老的 DF Robot W5100 v1.0.

image

然而,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與其他板子之間沒有間隙。

通過:WIZnet官方中文博客