原文链接: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