北京网站建设服务,网站开发项目的需求分析,怎么宣传自己的网站推广,网站建设的代码文章目录 1 前言2 简介2 .1 什么是NetBIOS#xff1f;2.2 NetBIOS的优点2.3 NetBIOS工作原理2.4 NetBIOS应用场景 3 WIZnet以太网芯片4 NetBIOS网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 随着… 文章目录 1 前言2 简介2 .1 什么是NetBIOS2.2 NetBIOS的优点2.3 NetBIOS工作原理2.4 NetBIOS应用场景 3 WIZnet以太网芯片4 NetBIOS网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 随着TCP/IP取代OSI模型成为事实上的标准NetBIOS over TCP/IP从20世纪80年代后期开始广泛使用NetBIOS成为许多其他网络应用程序的基础。很多局域网都是在NetBIOS协议的基础上工作的。 W5100S/W5500是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器同时也是一颗工业级以太网控制芯片。本教程将介绍W5100S/W5500以太网DHCP应用的基本原理、使用步骤、应用实例以及注意事项帮助读者更好地掌握这一技术。
2 简介
2 .1 什么是NetBIOS NetBIOSNetwork Basic Input/Output System是一种应用程序接口API应用于局域网程序中为程序提供请求低级服务的统一的命令集作用是给局域网提供网络服务以及其他特殊功能。
2.2 NetBIOS的优点 NetBIOS协议的优点包括
可以直接使用主机名来寻找其他主机不需要知道对方的IP地址。可以共享主机上的所有资源例如磁盘、打印机等。具有良好的跨平台性和兼容性。短小精练网络通信性能良好适合于适时性较高的小型LAN网络环境。·
2.3 NetBIOS工作原理 NetBIOS协议的实现步骤如下
首先计算机在启动时或启动后会执行一个名为nbtstat的程序这个程序会将自己的名称NetBIOS名称广播到网络中。其次当一个数据包到达时系统会查看该数据包的目的IP地址如果是广播或组播地址那么系统会将该数据包直接发送到所有配置了相同广播地址或组播地址的接口。然后系统会查看该数据包的NetBIOS头部信息其中包含目的计算机的NetBIOS名称。系统会查找本机的NetBIOS名称表如果找到了匹配的名称那么系统会将该数据包发送到对应接口。最后如果系统没有找到匹配的名称那么系统会将该数据包丢弃。
2.4 NetBIOS应用场景 NetBIOS协议广泛应用于局域网中以下是一些常见的应用场景
共享文件和打印机NetBIOS协议允许在局域网中共享文件和打印机所有连接到同一网络的计算机都可以访问这些资源只需要指定它们的NetBIOS名称即可。远程登录NetBIOS协议可以通过终端服务Terminal Services或远程桌面连接实现远程登录和管理其他计算机。网络管理工具NetBIOS协议常用于网络管理工具中例如网络监视器、网络诊断工具等用于监视和管理网络中的计算机和设备。数据库共享NetBIOS协议可以用于数据库共享允许不同的计算机之间进行数据交换和共享。多媒体传输NetBIOS协议适用于传输音频、视频等多媒体数据可以在局域网中实现实时的音视频传输。
3 WIZnet以太网芯片
WIZnet 主流硬件协议栈以太网芯片参数对比
ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork PerformanceW5100STCP/IPv4 MAC PHY8bit BUS, SPI16KB4Max.25MbpsW6100TCP/IPv4/IPv6, MAC PHY8bit BUS, Fast SPI32KB8Max.25MbpsW5500TCP/IPv4, MAC PHYFast SPI32KB8Max 15Mbps
W5100S/W6100 支持 8bit数据总线接口网络传输速度会优于W5500。W6100 支持IPV6与W5100S 硬件兼容若已使用W5100S的用户需要支持IPv6可以Pin to Pin兼容。W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存。
4 NetBIOS网络设置示例概述以及使用
4.1 流程图 程序的运行框图如下所示 4.2 准备工作核心
软件
Visual Studio CodeWIZnet UartTool
硬件
W5100SIO模块 RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板Micro USB 接口的数据线TTL 转 USB网线
4.3 连接方式 通过数据线连接PC的USB口主要用于烧录程序也可以虚拟出串口使用 通过TTL串口转USB连接UART0 的默认引脚 RP2040 GPIO0UART0 TX ---- USB_TTL_RXRP2040 GPIO1UART0 RX ---- USB_TTL_TX 使用模块连接RP2040 进行接线时 RP2040 GPIO16 ---- W5100S MISORP2040 GPIO17 ---- W5100S CSRP2040 GPIO18 ---- W5100S SCKRP2040 GPIO19 ---- W5100S MOSIRP2040 GPIO20 ---- W5100S RST 通过PC和设备都通过网线连接路由器LAN口
4.4 主要代码概述 我们使用的是WIZnet官方的ioLibrary_Driver库。该库支持的协议丰富操作简单芯片在硬件上集成了TCP/IP协议栈该库又封装好了TCP/IP层之上的协议我们只需简单调用相应函数即可完成协议的应用。
第一步arp_client.c文件中加入对应的.h文件。
第二步定义DHCP配置需要的宏。
第三步网络信息的配置,开启DHCP模式。
第四步编写定时器回调处理函数用于 DHCP 1s滴答定时器处理函数。
第五步主函数先是对串口和SPI的初始化然后写入W5100S的网络配置参数初始化DHCP后主循环开始DHCP获取IP获取到就打印获取到的IP获取次数超过最大获取次数时就使用静态IP。
#include stdio.h
#include pico/stdlib.h
#include pico/binary_info.h
#include hardware/spi.h#include wizchip_conf.h
#include bsp_spi.h
#include dhcp.h // Use dhcp
#include socket.h // Use socket
#include arp.h // Use arp#define SOCKET_ID 0 // Socket number
#define ETHERNET_BUF_MAX_SIZE (1024 * 2) // Send and receive cache size
#define DHCP_RETRY_COUNT 5 // DHCP retry times/*** brief Timer callback processing function, used for dhcp timing processing* param repeating :Timer structure* return bool*/
bool repeating_timer_callback(struct repeating_timer *t);/*** brief Initialization of chip network information* param conf_info :Static configuration information* return none*/
void network_init(wiz_NetInfo *conf_info);/* Network information to be configured. */
wiz_NetInfo net_info {.mac {0x00, 0x08, 0xdc, 0x1e, 0xed, 0x2e}, // Configured MAC address.ip {192, 168, 1, 10}, // Configured IP address.sn {255, 255, 255, 0}, // Configured subnet mask.gw {192, 168, 1, 1}, // Configured gateway.dns {8, 8, 8, 8}, // Configured domain address.dhcp NETINFO_DHCP}; // Configured dhcp model,NETINFO_DHCP:use dhcp; NETINFO_STATIC: use static ip.static uint8_t ethernet_buf[ETHERNET_BUF_MAX_SIZE] {0,
}; // Send and receive cachestatic uint8_t destip[4]{192, 168, 1, 2}; // udp destination ip
static uint8_t dest_ip[4] {192, 168, 1, 2}; // UDP IP address
static uint8_t breakout_flag 0; // Define the DHCP acquisition flagint main()
{struct repeating_timer timer; // Define the timer structurewiz_NetInfo get_info;/* MCU init */stdio_init_all(); // Initialize the main control peripheralwizchip_initialize(); // Initialize the chip interface/*dhcp init*/DHCP_init(SOCKET_ID, ethernet_buf); // DHCP initializationadd_repeating_timer_ms(1000, repeating_timer_callback, NULL, timer); // Add DHCP 1s Tick Timer handlerprintf(wiznet chip tcp server example.\r\n);network_init(net_info); // Configuring Network Informationprint_network_information(get_info); // Read back the configuration information and print itwhile (true){do_arp(SOCKET_ID, ethernet_buf, dest_ip); //run arp}
}void network_init(wiz_NetInfo *conf_info)
{int count 0;uint8_t dhcp_retry 0;if (conf_info-dhcp NETINFO_DHCP){while (true){switch (DHCP_run()) // Do the DHCP client{case DHCP_IP_LEASED: // DHCP resolves the domain name successfully{if (breakout_flag 0){printf(DHCP success\r\n);getIPfromDHCP((*conf_info).ip);getGWfromDHCP((*conf_info).gw);getSNfromDHCP((*conf_info).sn);getDNSfromDHCP((*conf_info).dns);wizchip_setnetinfo(conf_info); // Configuring Network Informationclose(SOCKET_ID); // After dhcp close the socket, avoid errors in later usebreakout_flag 1;}break;}case DHCP_FAILED:{printf( DHCP failed \r\n);count;if (count DHCP_RETRY_COUNT) // If the number of times is less than or equal to the maximum number of times, try again{printf(DHCP timeout occurred and retry %d \r\n, count);}else if (count DHCP_RETRY_COUNT) // If the number of times is greater than DHCP fails{breakout_flag 1; // if DHCP fail, use the staticDHCP_stop(); // Stop processing DHCP protocolconf_info-dhcp NETINFO_STATIC;wizchip_setnetinfo(conf_info); // Configuring Network Informationbreak;}break;}}if (breakout_flag){printf(config succ\r\n);break;}}}else{wizchip_setnetinfo(conf_info); // Configuring Network Information}
}bool repeating_timer_callback(struct repeating_timer *t)
{DHCP_time_handler(); // DHCP 1s Tick Timer handlerreturn true;
}
4.5 结果演示 1.打开WIZ UartTool填入参数选择串口对应的com port波特率1152008位数据位1位停止位无校验位无流控填完参数后点击open打开。
2.打开串口后按下复位键可以看到串口打印DHCP获取到的信息其中IP为192.168.1.138。
3.通过PC终端PING获取到的IP发现可以PING通所以DHCP成功。
5 注意事项
如果想用WIZnet的W5500来实现本章的示例我们只需修改两个地方即可
(1)在library/ioLibrary_Driver/Ethernet/下找到wizchip_conf.h这个头文件将_WIZCHIP_ 宏定义修改为W5500。
(2)在library下找到CMakeLists.txt文件将COMPILE_SEL设置为ON即可OFF为W5100SON为W5500。
6 相关链接
WIZnet官网
WIZnet官方库链接
本章相关例程
想了解更多评论留言哦