W6100是全球第一款支持IPv4/IPv6双核的新一代全硬件以太网TCP/IP协议栈控制器。W6100在WIZnet核心专利技术——全硬件TCP/IP协议栈IPv4的基础上增加了IPv6,解决了嵌入式以太网的接入问题,简单易用,安全稳定,是物联网设备的首选解决方案。WIZnet提供完善的配套资料以及实时周到的技术支持服务,极大地缩短产品开发周期,全方位保障客户项目按时落地。
以太网知识介绍
MAC地址:MAC地址也叫物理地址、硬件地址,是设备唯一的网络标识。MAC地址的长度为48位(6个字节),通常表示为12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址。
需注意:MAC地址的首位必须为偶数,也就是MAC地址的第一位数必须为0,奇数则是广播地址。第二位数字必须是偶数,如果是奇数则为单播地址,只能作为目的地址,不能作为源地址。
IPv4地址:是在以太网上的每一台主机的每一个接口分配一个在全世界范围内的唯一的32比特的标识符。IP地址=网络地址+主机地址
A:8位网络位,24位主机位组成。0.0.0.0-127.255.255.255. 0-127
B:16位网络位,16位主机位. 128.0.0.0-191.255.255.255 128-191
C:24位网络位,8位主机位。192.0.0.0-223.255.255.255 192-223
D类或E类:
D:组播地址. 224.0.0.0-239.255.255.255.
E:保留地址,还未被使用的. 240.0.0.0-255.255.255.255。
子网掩码:它用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。IP地址我们都知道是计算机在网络内的唯一标识,而子网掩码顾名思义是用于划分子网的。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
网关地址:是网关设备的IP地址,比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)与主机的IP 地址作 “与” 运算的结果不同判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。这就是网络A向网络B转发数据包的过程。
静态IP的优点与应用
- 方便远程访问:由于静态IP地址固定不变,因此非常方便进行远程访问。
- 适合服务器:静态IP地址适合用于服务器等需要长时间稳定运行的场景。
- 易于管理:由于静态IP地址固定不变,因此易于管理和维护。
根据这些特点,可应用于各大服务器,远程办公,安全监控,VoIP电话和一些IP地址固定不需要频繁变动的场合。
硬件准备
- W6100-EVB-Pico开发板
- 网线
- Micro USB数据线
注意:需要把W6100-EVB-Pico接入到与自己电脑同一个网段中。
软件环境
- Visual Studio Code
w5500配置静态IP地址
步骤1:打开相关例程
我们用pico-Visual Studio Code打开示例的network_install程序,可以看到定义了2个全局变量,static_net_info用来初始化网络配置信息,而net_info用于回读配置操作后的网络信息,跟配置的是否一致,方便用户查看是否配置成功;注意,IP地址必须跟自己电脑是同网段才可以ping通
static wiz_NetInfo static_net_info = {
.mac = {0x00, 0x08, 0xdc, 0x16, 0xed, 0x2e},
.ip = {192, 168, 1, 10},
.sn = {255, 255, 255, 0},
.gw = {192, 168, 1, 1},
.dns = {8, 8, 8, 8},
.ipmode = NETINFO_STATIC_V4};
wiz_NetInfo net_info;
在主函数中我们需要先对网络锁寄存器(NETLCKR)解锁才能对w6100进行网络信息配置。
int main()
{
uint8_t temp;
stdio_init_all();
sleep_ms(2000);
printf("W6100 network install example.\r\n");
wizchip_initialize();
/* Determine the network lock register status */
if(!ctlwizchip(SYS_NET_LOCK, &temp))NETUNLOCK();
wizchip_setnetinfo(&static_net_info);
wizchip_getnetinfo(&net_info);
printf("=======================================\r\n");
printf("mac: %02X-%02X-%02X-%02X-%02X-%02X\r\n", net_info.mac[0], net_info.mac[1], net_info.mac[2], net_info.mac[3], net_info.mac[4], net_info.mac[5]);
printf("ip: %d.%d.%d.%d\r\n", net_info.ip[0], net_info.ip[1], net_info.ip[2], net_info.ip[3]);
printf("mask: %d.%d.%d.%d\r\n", net_info.sn[0], net_info.sn[1], net_info.sn[2], net_info.sn[3]);
printf("gw: %d.%d.%d.%d\r\n", net_info.gw[0], net_info.gw[1], net_info.gw[2], net_info.gw[3]);
printf("=======================================\r\n");
sleep_ms(2000);
while (true)
{
if(!wizphy_getphylink())printf("Please check the network cable connection.\r\n");
else printf("Try ping the ip:%d.%d.%d.%d\r\n", net_info.ip[0], net_info.ip[1], net_info.ip[2], net_info.ip[3]);
sleep_ms(1000);
}
}
步骤2:编译烧录
- 选择GCC arm-none-eabi编译链
- 选择编译项目为network_install(可直接搜索相应名称)
- 点击Build编译
编译之后,按住BOOTSEL按钮后把开发板连接到电脑上(上电),此时电脑将开发板识别为大容量存储器,我们将build/examples/network_install文件夹下面的后缀为.uf2文件拖入开发板的大容量存储器中,就烧录好了。
步骤3:验证测试
此时W6100-EVB-Pico的USB口会虚拟出一个串行设备,我们通过VS Code的串口监视器就可以设置连接到W6100-EVB-Pico,此时就可以看到打印信息了。
注意:如果没有输出信息,可以打开串口监视器里面的自动连接按钮(即框起来的按钮),然后按下RUN进行复位即可。
也可以打开VS Code的终端进行ping验证
示例下载链接
基于WIZnet官方的ioLibrary_Driver库编写
示例下载:W6100-EVB-Pico示例
本期内容就分享到这里了,觉得文章写的还不错的话给个关注鼓励一下吧!下期为大家讲解W5500-EVB-Pico如何通过DHCP动态获取IP地址。