怎樣解決W5200/W5500在TCP通信過程中意外斷開?(Keepalive)

在使用 W5200 和 W5500 的TCP通信過程中,有一個非常容易被問到的問題: (這裡以W5200為例) W5200 作為服務器,假如客戶端的網線斷開 或 瞬間停電,服務器該怎樣判斷? 那麼當客戶端由於這些原因忽然斷開,該怎樣解決? 今天給大家介紹解決以上問題的辦法,即如何使用Keepalive。 什麼是 Keepalive? Keepalive 即心跳檢測,以下簡稱 KA,之所以稱之為心跳檢測是因為它像心跳一樣每隔一段時間發一次,以此來告訴對方自己是否存活。心跳檢測用於TCP通訊過程中服務器檢測客戶端是處於長時間空閑(在線)還是已經斷開,一般采用客戶端定時發送簡單的通訊包,一般是很小的包或者空包給服務器(W5200 的心跳包為1字節),如果在指定時間內沒有收到該心跳包,則服務器會判斷客戶端已經斷開,此時程序中的 Socket 狀態機會轉到 SOCKET_CLOSED 並重新打開 Socket去連接服務器/監聽客戶端。 KeepAlive 怎麼分類?…

View More 怎樣解決W5200/W5500在TCP通信過程中意外斷開?(Keepalive)

淺談單片機以太網接入方案

單片機的種類繁多,從低端到高端,有以51單片機為代表的8位單片機和以ARM為代表的32位單片機,不同檔次的單片機實現網絡接口的方法不同。對於像ARM等高端處理器一般都可以運行嵌入式操作系統,例如嵌入式Linux。對於無操作系統要求的單片機如何實現網絡接入,我下面將這些方案按TCP/IP協議棧的不同歸結為兩大類:第一類是傳統的軟件TCP/IP協議棧方案;第二類是最新的硬件TCP/IP協議棧方案。下面我就這兩類方案的實現方式進行分析。 1. MAC+PHY方案 所謂的 TCP/IP 協議棧是一系列網絡協議的統稱,不僅包括我們熟知的 TCP 協議和IP協議,還有網絡層的 ICMP(Internet控制報文)協議、IGMP(Internet 組管理)協議、ARP(地址解析)協議,傳輸層的UDP(用戶數據包)協議,應用層的HTTP(超文本傳輸)協議、DNS(域名解析)協議、FTP(文件傳送)協議、SMTP(簡單郵件管理)協議等等。 傳統的以太網接入方案如下圖,由MCU+MAC+PHY再加入網絡接口實現以太網的物理連接,通過在主控芯片中植入TCP/IP協議代碼實現通信及上層應用。 應用這種軟件TCP/IP協議棧方式實現的比較成熟方案有ENC28J60, CS8900A,DM9000,當然也有像 STM32F107 這類(內部自帶MAC)+PHY等方案。 由於軟件協議棧操作需要主控 MCU 不斷地響應中斷,這在很大程度上占用了 MCU的運算/時鐘資源。經過測試發現,單線程操作的情況下,MCU 的運行速度和數據的處理速度僅能滿足需要,但隨著線程增多,MCU 的工作效率直線下降,會嚴重影響通信質量。 代碼量方面,即便是采用輕量級的 TCP/IP 協議棧 LWIP…

View More 淺談單片機以太網接入方案

GPS公交車行駛記錄儀

佛羅里達大學學生 Miles Moody 使用 WIZnet W5200 以太網插板及 Arduino Nano 剖析了來自一個當地網頁服務的 HTML 代碼,並講述了他每天公交車實時GPS 坐標儀提醒他上學的經歷: 正如下圖所示,系統告知公交車還離車站多遠。黃燈亮時,主人就跑到車站及時趕上了公交車。 這是一個非常好的例子,是讓我們生活變得更便捷的好點子。 通過:weibo.com/wiznet2012

View More GPS公交車行駛記錄儀

來自Elecrow的 WIZnet W5200 Arduino Shield

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

View More 來自Elecrow的 WIZnet W5200 Arduino Shield