十四、W5100S/W5500+RP2040树莓派Pico<NetBIOS>

文章目录

  • 1 前言
  • 2 简介
    • 2 .1 什么是NetBIOS?
    • 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 前言

  随着TCP/IP取代OSI模型成为事实上的标准,NetBIOS over TCP/IP从20世纪80年代后期开始广泛使用,NetBIOS成为许多其他网络应用程序的基础。很多局域网都是在NetBIOS协议的基础上工作的。

  W5100S/W5500是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片。本教程将介绍W5100S/W5500以太网DHCP应用的基本原理、使用步骤、应用实例以及注意事项,帮助读者更好地掌握这一技术。

2 简介

2 .1 什么是NetBIOS?

  NetBIOS(Network Basic Input/Output System)是一种应用程序接口(API),应用于局域网程序中,为程序提供请求低级服务的统一的命令集,作用是给局域网提供网络服务以及其他特殊功能。

2.2 NetBIOS的优点

  NetBIOS协议的优点包括:

  1. 可以直接使用主机名来寻找其他主机,不需要知道对方的IP地址。
  2. 可以共享主机上的所有资源,例如磁盘、打印机等。
  3. 具有良好的跨平台性和兼容性。
  4. 短小精练,网络通信性能良好,适合于适时性较高的小型LAN网络环境。·

2.3 NetBIOS工作原理

在这里插入图片描述

NetBIOS协议的实现步骤如下:

  1. 首先,计算机在启动时或启动后,会执行一个名为"nbtstat"的程序,这个程序会将自己的名称(NetBIOS名称)广播到网络中。
  2. 其次,当一个数据包到达时,系统会查看该数据包的目的IP地址,如果是广播或组播地址,那么系统会将该数据包直接发送到所有配置了相同广播地址或组播地址的接口。
  3. 然后,系统会查看该数据包的NetBIOS头部信息,其中包含目的计算机的NetBIOS名称。系统会查找本机的NetBIOS名称表,如果找到了匹配的名称,那么系统会将该数据包发送到对应接口。
  4. 最后,如果系统没有找到匹配的名称,那么系统会将该数据包丢弃。

2.4 NetBIOS应用场景

在这里插入图片描述

NetBIOS协议广泛应用于局域网中,以下是一些常见的应用场景:

  1. 共享文件和打印机:NetBIOS协议允许在局域网中共享文件和打印机,所有连接到同一网络的计算机都可以访问这些资源,只需要指定它们的NetBIOS名称即可。
  2. 远程登录:NetBIOS协议可以通过终端服务(Terminal Services)或远程桌面连接,实现远程登录和管理其他计算机。
  3. 网络管理工具:NetBIOS协议常用于网络管理工具中,例如网络监视器、网络诊断工具等,用于监视和管理网络中的计算机和设备。
  4. 数据库共享:NetBIOS协议可以用于数据库共享,允许不同的计算机之间进行数据交换和共享。
  5. 多媒体传输:NetBIOS协议适用于传输音频、视频等多媒体数据,可以在局域网中实现实时的音视频传输。

3 WIZnet以太网芯片

WIZnet 主流硬件协议栈以太网芯片参数对比

ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork Performance
W5100STCP/IPv4, MAC & PHY8bit BUS, SPI16KB4Max.25Mbps
W6100TCP/IPv4/IPv6, MAC & PHY8bit BUS, Fast SPI32KB8Max.25Mbps
W5500TCP/IPv4, MAC & PHYFast SPI32KB8Max 15Mbps
  1. W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
  2. W6100 支持IPV6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
  3. W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存。

4 NetBIOS网络设置示例概述以及使用

4.1 流程图

  程序的运行框图如下所示:

在这里插入图片描述

4.2 准备工作核心

软件

  • Visual Studio Code
  • WIZnet UartTool

硬件

  • W5100SIO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
  • Micro USB 接口的数据线
  • TTL 转 USB
  • 网线

4.3 连接方式

  • 通过数据线连接PC的USB口(主要用于烧录程序,也可以虚拟出串口使用)

  • 通过TTL串口转USB,连接UART0 的默认引脚:

    • RP2040 GPIO0(UART0 TX) <----> USB_TTL_RX
    • RP2040 GPIO1(UART0 RX) <----> USB_TTL_TX
  • 使用模块连接RP2040 进行接线时

    • RP2040 GPIO16 <----> W5100S MISO
    • RP2040 GPIO17 <----> W5100S CS
    • RP2040 GPIO18 <----> W5100S SCK
    • RP2040 GPIO19 <----> W5100S MOSI
    • RP2040 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,波特率115200,8位数据位,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为W5100S,ON为W5500。

6 相关链接

WIZnet官网

WIZnet官方库链接

本章相关例程

想了解更多,评论留言哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/134828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

响应式成人高考自考教育机构网站模板源码下载带后台

模板信息&#xff1a; 模板编号&#xff1a;30558 模板编码&#xff1a;UTF8 模板分类&#xff1a;学校、教育、培训、科研 适合行业&#xff1a;教育机构类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手工书写DIVC…

小程序 scroll-view 性能问题

先说使用场景&#xff0c;一次加载很多数据造成小程序卡顿的问题 &#xff0c;找了好多都没有好的解决办法&#xff0c;要么太过复杂&#xff0c;然后研究了两天通过简单的办法实现&#xff0c;先根据数量把高度撑开&#xff0c;然后根据滚动位置渲染指定的数据就可以了&#x…

多级缓存之JVM进程缓存

1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; 请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈 Redis缓存失效时&#xff0…

【Linux】了解文件的inode元信息,以及日志分析

目录 一、inode表结构&#xff0c;以及元信息 1、了解inode信息有哪些 2、关于inode表的说明 Linux中访问文件的过程&#xff1a; 3、硬连接与软连接的区别&#xff0c;&#xff08;请看前面&#xff0c;写过的&#xff09; 二、文件系统的备份与恢复 三、几种常见的日志…

idea 模板参数注释 {@link}

1. 新增组 2. 设置方法注释及变量 增加模板文本 ** * $param$ * return {link $return$} */3. 设置变量表达式 勾选跳过param 参数表达式 groovyScript("def result ;def params \"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList();def param…

小白学爬虫:手机app分享商品短连接获取淘宝商品链接接口|淘宝淘口令接口|淘宝真实商品链接接口|淘宝商品详情接口

通过手机APP分享的商品短链接&#xff0c;我们可以调用相应的接口来获取淘口令真实URL&#xff0c;进而获取到PC端的商品链接及商品ID。具体步骤如下&#xff1a; 1、通过手机APP分享至PC端的短链接&#xff0c;调用“item_password”接口。 2、该接口将返回淘口令真实URL。 3…

kafka集群部署

1、首先部署zookeeper apiVersion: v1 kind: Service metadata:labels:app: zookeeper-clusternamespace: kafka-risktechname: zookeeper-cluster spec:selector:app: zookeeper-clusterports:- name: clientport: 2181targetPort: 2181- name: followerport: 2888targetPort…

[Linux] GRUB引导 学习笔记(一)

目录 概念 2.1 BIOS 2.2 UEFI 2.3 MBR与GPT 2.3.1 MBR 2.3.2 GPT 2.3.3 总结 2.4 GRUB GRUB2和GRUB Legacy区别 进入GRUB命令行 命令 GRUB工具命令 GRUB2配置 1.主要配置文件 2. 通过/etc/default/grub文件生成grub.cfg 定制GRUB的步骤 概念 BIOS、UEFI、MBR、G…

Programming abstractions in C阅读笔记:p184-p195

《Programming Abstractions In C》学习第61天&#xff0c;p184-p195总结。 一、技术总结 1.mutual recursion 2.natural number (1)定义 p184, If you limit the domain of possible values to the set of natural numbers,which are defined simply as the set of nonne…

visual studio 启用DPI识别功能

在开发widow程序时&#xff0c;有时必须将电脑 设置-->显示-->缩放与布局-->更改文本、应用项目的大小-->100%后&#xff0c;程序的画面才能正确运行&#xff0c;居说这是锁定了dpi的原因&#xff0c;需要启dpi识别功能。设置方法如下&#xff1a; 或者

C/S架构学习之组播

组播&#xff1a;过多的广播会占用网络带宽&#xff0c;产生广播风暴的现象&#xff0c;从而影响正常的通信活动&#xff1b;组播&#xff08;或者多播&#xff09;是局域网内部的通信&#xff0c;只有加入到某个多播组的主机才能收到数据&#xff1b;组播的方式既可以发给多个…

2023中国视频云市场报告:腾讯云音视频解决方案份额连续六次蝉联榜首,加速全球化布局

近日&#xff0c;国际数据公司&#xff08;IDC&#xff09;发布了《中国视频云市场跟踪&#xff08;2023上半年&#xff09;》报告&#xff0c;腾讯云音视频的解决方案份额连续六次蝉联榜首&#xff0c;并在视频生产创作与媒资管理市场份额中排名第一。同时&#xff0c;在实时音…

虹科示波器 | 汽车免拆检测 | 2017款长安福特翼虎车发动机故障灯异常点亮

一、故障现象 一辆2017款长安福特翼虎车&#xff0c;搭载CAF488WQ9发动机&#xff0c;累计行驶里程约为8.9万km。该车因发动机故障灯异常点亮在其他维修厂检修&#xff0c;维修人员用故障检测仪检测&#xff0c;提示气缸3失火&#xff0c;调换火花塞、点火线圈及喷油器&#xf…

动态、静态IP地址设置方法

目录 一、三种网络模式应用场景以及区别 1、 NAT&#xff08;Network Address Translation&#xff09;模式&#xff1a; 2、仅主机&#xff08;Host-Only&#xff09;模式&#xff1a; 3、桥接&#xff08;Bridged&#xff09;模式&#xff1a; 二、配置步骤 &#xff1a…

poi多sheet,模板导出数据

/*** 导出Excel* param response 响应对象* param headName 表头* param List 数据*/public static void exportExcel(HttpServletResponse response, String headName, List<数据对象> list) throws IOException {//读取模板Resource resourcenew ClassPathResourc…

SSM之spring注解式缓存redis

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 &#xff0c;越幸运。 1.Redis与SSM的整合 1.1.添加Redis依赖 在Maven中添加Redis的依赖 <redis.version>2.9.0</redis.…

0X03

红包题第二弹 看到源码里面的提示 ?cmdphpinfo(); 看到源码 kk 关键点就是有两个正则表达式 第一个 preg_match("/[A-Za-oq-z0-9$]/",$cmd) 第二个 preg_match("/\~|\!|\|\#|\%|\^|\&|\*|\(|\)|\&#xff08;|\&#xff09;|\-|\_|\{|\}|\[|\]|\|\&q…

蓝绿部署:实现无缝可靠的软件发布

在快节奏的软件开发世界中&#xff0c;在不造成中断或停机的情况下向用户提供新功能和更新是一项至关重要的挑战。这就是蓝绿部署策略有用的地方。组织可以通过使用称为“蓝绿部署”的发布管理策略&#xff0c;以安全有效的方式推出其软件的新版本。在快节奏的软件开发世界中&a…

【独家揭秘】跨境电商源码独立开发,软著认证,前后端全开源,无加密,交付源码,商用无忧!

在这个数字化快速发展的时代&#xff0c;跨境电商已成为全球商业的重要趋势。为了帮助您快速进入这个潜力巨大的市场&#xff0c;我们独家推出了一款经过全面验证的跨境电商源码解决方案!这款源码具有独立开发、软著认证、前后端全开源、无加密等特点&#xff0c;为您的商业运营…

html中使用JQ自定义锚点偏移量

问题&#xff1a;一般情况下使用href跳转达到效果。如果页面中头部固定住了&#xff0c;点击瞄点的时候自动是最上面&#xff0c;头部会给它覆盖掉一部分&#xff0c;所以要在点击之后额外再加头部高度 <a href"#aa">Technical Documents</a><div id&…