原文鏈接:HTTPS://mp.weixin.qq.com/s/we8GZS-P4_GmqUxL3egfGw場景= 25#wechat_redirect
隨著嵌入式系統功能的多樣化以及網絡在各個領域中的廣泛應用,具備網絡功能的嵌入式設備擁有更高的使用價值和更強的通用性。我們在嵌入式開發中常用的網絡接入方式為軟件TCP / IP協議棧接入方式,如lwIP協議棧。今天,為大家介紹一種全新的網絡接入方式,基于SAL的全硬件TCP / IP協議棧接入方式。
SAL 介紹
SAL,即套接字抽象層,位于網絡硬件層于應用層之間,用于抽象,統一多種網絡協議棧接口,并且應用層提供標準的BSD套接字APIs.SAL可以讓RT-Thread系統目前SAL支持的網絡接入方式主要有三種:軟件TCP / IP協議棧(lwIP),自定義串口網絡實現(ATSocket),以及下面帶來的第三種接入方式,全硬件TCP / IP協議棧(W5500)。
W5500介紹
W5500是WIZnet 推出的高性能以太網接口芯片系列之一,內部實現了全硬件TCP/IP 協議棧+MAC+PHY,芯片有如下幾個特點:
- 8 個獨立的硬件 Socket,各路通信互不影響
- 32K bytes 片上緩沖用于處理收發數據
- 集成 802.3 以太網MAC
- 主機接口為 SPI 高速串行外設接口(最高 80 Mhz)
什么是全硬件TCP/IP 協議棧?
傳統的單片機(MCU)實現網絡功能,需要連接外設物理層以太網控制芯片(MAC+PHY),還要主控芯片中移植軟件TCP/IP 協議代碼實現通信及上層應用。
所謂全硬件TCP/IP 協議棧是將傳統的軟件協議TCP/IP 協議棧用硬件化的邏輯門電路來實現。芯片內部完成TCP、UDP、ICMP等多種應用層協議,以及IP 、ARP等網絡層協議,并且實現了物理層以太網控制(MAC+PHY)、內存管理等功能,完成了一整套硬件化得以太網解決方案。
相比于lwIP 軟件協議棧的資源占用(RAM50K+,ROM80K+),在MCU 上使用硬件協議棧芯片(例如:W5500)的資源占用(RAM1K,ROM20K)得到了很大程度的降低。
另一方面,硬件協議棧芯片將會降低MCU 對于龐大網絡數據的負荷,使MCU 可以高效的處理其他業務邏輯。同時也避免了MCU 主程序受到網絡攻擊的危險,大大優化了MCU 的網絡連接功能。
WIZnet軟件包介紹
WIZnet軟件包是RT-Thread 基于WIZnet 官方 ioLibrary_Driver 設備驅動代碼庫的移植實現,支持W5500 芯片。原官方代碼庫雖然實現了多種網絡協議支持,并且提供自定義Socket 接口用于網絡編程,但是其接口并不是標準BSD 接口,這樣不利于兼容多種網絡軟件包,增加了網絡開發的難度。
RT-Thread推出的WIZnet 軟件包在原代碼庫功能的基礎上,封裝實現一套標準 BSD Socket APIs,并且對接RT-Thread SAL 套接字抽象層,完成SAL 對全硬件協議棧的支持。
WIZnet 軟件包特點如下:
1、極簡的設備接入方式
傳統WIZnet 設備接入,需要實現 SPI 設備初始化、網絡初始化、寄存器配置、中斷處理等多個功能,才能正常連接網絡。使用 WIZnet 軟件包,只需要在 ENV 中正確配置 SPI 設備名稱、復位引腳號和中斷引腳號并下載軟件包,即可快速初始化設備并接入網絡。
2、提供標準網絡編程接口
相比于原官方代碼庫,WIZnet 軟件包提供標準 BSD Socket APIs,可以完美的兼容 RT-Thread 系統中多種網絡軟件包或者網絡功能實現,如 MQTT、HTTP、NTP、MbedTLS、Iperf 等,極大的簡化了開發者網絡接入和網絡協議移植的過程。
3、自定義網絡接入參數設置
軟件包提供動態和靜態兩種獲取 IP 地址的方式,靜態模式下可以在 ENV 中自定義配置設備 IP 地址、網關、子網掩碼等網絡參數。對于 MAC 地址,軟件包提供設置 MAC 地址接口,用于設置設備唯一的 MAC 地址,防止網絡沖突。
4、提供網絡狀態查詢方式
軟件包提供wiz_ifconfig 命令用于查詢當前網絡參數,提供 wiz_ping 命令用于查詢網絡連接狀態。
WIZnet的軟件包的推出,使得RT-主題SAL支持的更加全面,這也進一步提升了RT-線程系統在物聯網領域對于不同網絡軟硬件的兼容性,簡化了用戶網絡接入的流程。當前WIZnet的軟件包已經完成對W5500的移植,其他熱門WIZnet設備,RT-Thread將會根據用戶反饋優先選擇支持。
WIZnet的軟件包獲取
使用WIZnet軟件包需要在RT-Thread的包管理中選中它,具體路徑如下:RT-Thread在線包→物聯網 – 物聯網→WIZnet:WIZnet TCP / IP芯片SAL框架實現
可通過一下二維碼查看更詳細信息:
也可通過外部鏈接打開:
https://github.com/RT-Thread-packages/wiznet/blob/master/README.md