十五、W5100S/W5500+RP2040树莓派Pico<TFTP Client>

文章目录

  • 1 前言
  • 2 简介
    • 2 .1 什么是TFTP?
    • 2.2 TFTP的优点
    • 2.3 TFTP和FTP对比
    • 2.4 TFTP应用场景
  • 3 WIZnet以太网芯片
  • 4 ARP网络设置示例概述以及使用
    • 4.1 流程图
    • 4.2 准备工作核心
    • 4.3 连接方式
    • 4.4 主要代码概述
    • 4.5 结果演示
  • 5 注意事项
  • 6 相关链接

1 前言

  一般来说,使用互联网的首要目的就是实现信息共享,文件传输是信息共享非常重要的内容。相较于FTP等复杂的文件传输协议,TFTP协议简单、轻量级,适用于资源有限的嵌入式系统等场景。

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

2 简介

2 .1 什么是TFTP?

在这里插入图片描述

  TFTP是一个简单的锁定式文件传输协议,能够在本地网络的计算机系统之间传输文件。它是一个简单的协议,利用用户数据报协议(UDP)在互联网的计算机系统之间传输文件。

2.2 TFTP的优点

  1. 简单:TFTP协议实现简单,易于理解和实现,适用于在资源有限的嵌入式系统等场景下进行文件传输。
  2. 轻量级:TFTP协议相对于FTP来说更加轻量级,适合于在资源有限的系统下进行文件传输。
  3. 纯文本传输:TFTP使用ASCII编码进行文件传输,适用于文本文件的传输,易于解析和处理。
  4. 支持错误处理:TFTP支持错误处理机制,当出现错误时,可以向对方发送错误信息进行错误处理。
  5. 适用于小文件传输:TFTP协议的设计目的是进行小文件传输,因此它不具备通常的FTP的许多功能,例如,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证。这使得TFTP在传输小文件时具有较高的效率。
  6. 支持只读和读写操作:TFTP支持对文件的只读和读写操作,可以用于从服务器下载文件或上传文件到服务器。

2.3 TFTP和FTP对比

TFTP和FTP是两种不同的文件传输协议,它们之间存在一些明显的差异。

  1. 功能:FTP是一种完整、面向会话、常规用途的文件传输协议,提供了比TFTP更多的功能,例如目录浏览、文件重命名和权限管理等。而TFTP是一种简单、基于请求的文件传输协议,只提供最基本的文件传输功能。
  2. 端口:FTP使用TCP端口21和20,而TFTP使用UDP端口69。
  3. 可靠性:FTP是可靠传输协议,支持断点续传和错误恢复,而TFTP是不可靠传输协议,没有错误恢复和重传机制。
  4. 安全性:FTP支持加密的SSL / TLS协议来保护传输的数据,而TFTP没有提供任何加密功能。
  5. 数据包大小:FTP可以传输大文件,因为它支持数据分割和重新组装。TFTP只能传输较小的文件,因为它限制了数据包的大小。
  6. 应用场景:TFTP通常用于局域网中进行固件升级或配置文件的传输,而FTP更适合用于从远程服务器下载或上传文件。

2.4 TFTP应用场景

尽管TFTP协议相对比较简单,但它仍然可以再特定的场景下发挥重要的作用。

  1. 固件升级:许多硬件设备都可以通过TFTP服务器进行固件升级,TFTP服务器可以将固件文件传输到设备中进行更新,以改进设备的性能或修复软件漏洞。
  2. 网络安装:TFTP服务器可以用于网络安装,例如在无盘机上预置系统,以供其他机器进行 PXE 启动时自动下载。
  3. 备份文件:在Linux系统中,TFTP服务器可以用于备份系统配置文件或运行时数据。这些备份文件可以在服务器和客户端之间传输,以进行故障排除或系统恢复。
  4. 小型文件传输:由于TFTP协议简单且易于实现,它适用于传输小型的文本文件,尤其适用于嵌入式系统和网络设备等资源有限的场景。

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 ARP网络设置示例概述以及使用

4.1 流程图

  程序的运行框图如下所示:
在这里插入图片描述

4.2 准备工作核心

软件

  • Visual Studio Code
  • WIZnet UartTool
  • Tftpd32

硬件

  • 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层之上的协议,我们只需简单调用相应函数即可完成协议的应用。

接下来看到tftp_client.c文件。

第一步:添加所需要的库

第二步:宏定义所需要的库以及定义所用到的变量、结构体等。

第三步:编写定时器回调函数和网络初始化函数。

第四步:在主函数中,首先我们进行芯片初始化,包括串口、SPI及其相关引脚以及W5100S芯片的链路状态检测等。然后是进行DHCP获取网络地址信息。如果获取失败,则会适用预设的静态地址信息进行配置。最后是TFTP客户端的初始化操作以及TFTP请求读文件操作。

int main(void)
{
    int i;
    struct repeating_timer timer; // Define the timer structure
    wiz_NetInfo get_info;

    int tftp_state;
    uint8_t tftp_read_flag = 0;
    uint32_t tftp_server_ip = inet_addr(TFTP_SERVER_IP);
    uint8_t tftp_read_file_name[] = TFTP_SERVER_FILE_NAME;

    /* MCU init */
    stdio_init_all();     // Initialize the main control peripheral
    wizchip_initialize(); // Initialize the chip interface

    /*dhcp init*/
    DHCP_init(SOCKET_ID, ethernet_buf);                                   // DHCP initialization
    add_repeating_timer_ms(1000, repeating_timer_callback, NULL, &timer); // Add DHCP 1s Tick Timer handler

    printf("wiznet chip tftp client example.\r\n");
    network_init(&net_info);              // Configuring Network Information
    print_network_information(&get_info); // Read back the configuration information and print it

    TFTP_init(TFTP_SOCKET_ID, tftp_client_socket_buffer);

    while (true)
    {
        if (tftp_read_flag == 0)
        {
            printf("tftp server ip: %s, file name: %s\r\n", TFTP_SERVER_IP, TFTP_SERVER_FILE_NAME);
            printf("send request\r\n");
            TFTP_read_request(tftp_server_ip, TFTP_SERVER_FILE_NAME);
            tftp_read_flag = 1;
        }
        else
        {
            tftp_state = TFTP_run();
            if (tftp_state == TFTP_SUCCESS)
            {
                printf("tftp read success, file name: %s\r\n", tftp_read_file_name);

                while (1)
                {
                }
            }
            else if (tftp_state == TFTP_FAIL)
            {
                printf("tftp read fail, file name: %s\r\n", tftp_read_file_name);
                while (1)
                {
                }
            }
        }
    }
}

4.5 结果演示

在这里插入图片描述
在这里插入图片描述

5 注意事项

  • Tftpd32工具上必须设置目录,目录下必须有请求的文件,否则会请求失败。
  • 如果想用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官方库链接

本章例程链接

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Deep Freeze冰点还原2024中文免费版恢电脑数据恢复工具

相信大家都认同更新日志&#xff1a;支持Win 10功能更新&#xff0c;Win更新的恢复升级&#xff0c;将系统驱动器从深度冻结保护中排除&#xff0c;全支持NVME驱动器&#xff0c;支持ISCSI驱动器。人所共知的是集成性和兼容性&#xff1a;Deep Freeze 冰点可兼容多种硬盘驱动器…

MySQL 8.0.13升级到8.0.35记录 .NET

1、修改表结构的字符集 utf8 修改成 utf8mb4 utf8_general_ci 修改成 utf8mb4_0900_ai_ci 注&#xff1a;所有地方都要替换。 否则会报错误提示&#xff1a;Character set utf8mb3 is not supported 下面是.NET环境升级遇到的问题 2、MySQL Connector Net 8.0.13 在程…

python自动化测试selenium核心技术3种等待方式详解

这篇文章主要为大家介绍了python自动化测试selenium的核心技术三种等待方式示例详解&#xff0c;有需要的朋友可以借鉴参考下&#xff0c;希望能够有所帮助&#xff0c;祝大家多多进步早日升职加薪 UI自动化测试过程中&#xff0c;可能会出现因测试环境不稳定、网络慢等情况&a…

财税服务展示预约小程序的作用是什么

财税财政往往困扰着很多公司&#xff0c;尤其是公司里没有相应职员或工作压力大的情况下&#xff0c;不少商家就会寻找代理记账、审计服务、会计代理等服务的机构。 对财政服务代理机构&#xff08;会计公司&#xff09;来说&#xff0c;市场企业多而广&#xff0c;理论上来说…

【KingbaseES】R6 Liunx下使用命令行部署数据库集群

【KingbaseES】R6命令行部署数据库集群 A.数据库安装包下载软件下载页面授权下载页面 B.数据库集群部署软件安装第一步&#xff1a;创建Kingbase用户第二步&#xff1a;上传安装包1.创建Kingbase用户和准备安装目录2.使用FTP工具上传安装包镜像和授权文件到install目录下并授权…

城市内涝积水的原因有哪些?万宾科技内涝积水监测仪工作原理

一旦有暴雨预警出现多地便会立即响应&#xff0c;以防城市内涝问题出现。随着人口迁移&#xff0c;越来越多的人口涌入城市之中&#xff0c;为了完善城市基础设施建设&#xff0c;城市应急管理部门对内涝的监测越来越严格&#xff0c;在信息化时代&#xff0c;城市管理也趋向于…

阿里入局SSD赛道,刚发布的首款主控芯片有点猛啊

不知道大家有没有发现&#xff0c;这两年国产科技领域崛起势头是越来越猛了。 以往似乎多少年都没太大长进的 CPU、显卡等半导体产品&#xff0c;如今总能时不时冒出个劲爆消息。 前不久发布的龙芯 3A6000 处理器&#xff0c;性能达到了 Intel 10 代酷睿和 AMD Zen2 水平&…

git增加右键菜单

有次不小心清理系统垃圾&#xff0c;把git右击菜单搞没了&#xff0c;下面是恢复方法 将下面代码存为.reg文件&#xff0c;双击后导出生效&#xff0c;注意&#xff0c;你安装的git必须是默认C盘的&#xff0c;如果换了地方要改下面注册表文件中相关的位置 Windows Registry …

远程电脑未连接显示器时分辨率太小的问题处理

背景&#xff1a;单位电脑显示器坏了&#xff0c;使用笔记本通过向日葵远程连接&#xff0c;发现分辨率只有800*600并且不能修改&#xff0c;网上找了好久找到了处理方法这里记录一下&#xff0c;主要用到的是一个虚拟显示器软件usbmmidd_v2 1)下载usbmmidd_v2 2&#xff09;…

5个基于.Net Core值得推荐的CMS开源项目

盘点5个基于.Net Core的内容管理系统&#xff08;CMS&#xff09;开源项目系统。 一、基于.Net Core、Vue开发仿掘金的CMS开源系统 项目简介 后台采用.Net Core 6开发的&#xff0c;前端采用Vue前后端分离的架构。目前实现简约的权限管理系统、基础字典项管理、随笔专栏&…

广州华锐互动:VR互动实训内容编辑器助力教育创新升级

随着科技的飞速发展&#xff0c;教育领域也正在经历一场深刻的变革。其中&#xff0c;虚拟现实(VR)技术为教学活动提供了前所未有的便利和可能性。在诸多的VR应用中&#xff0c;VR互动实训内容编辑器无疑是最具潜力和创新性的一种。广州华锐互动开发的这款编辑器以其独特的功能…

软件测试工程师简历项目经验怎么写?--含【真实入职简历模板】

一、前言&#xff1a;浅谈面试 面试是我们进入一个公司的门槛&#xff0c;通过了面试才能进入公司&#xff0c;你的面试结果和你的薪资是息息相关的。那如何才能顺利的通过面试&#xff0c;得到公司的认可呢?面试软件测试要注意哪些问题呢?下面和笔者一起来看看吧。这里分享一…

elform-item动态prop

先来看看我这个变态而又复杂的需求&#xff01; 目前自定义表单的前端开发越来越热&#xff0c;开发人员封装好成熟的组件&#xff0c;用户直接拖动生成自己的页面&#xff01;这样的特点就是&#xff1a; 页面中显示的东西&#xff0c;完全是自定义组合的而不是固定的&#…

springboot和spring对比

spring的出现 大家都知道spring是大概2003年左右开始出现流行的&#xff0c;是一个轻量级的Java 开发框架&#xff0c;它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转&#xff08;IoC&#xff09;和面向切面编程&#xff08;AOP&#xff09;。Spring 是可…

pandas 获取一段时间内每个月的最后一个工作日和日历日

获取一段时间内每个月的最后一个工作日 endlistpd.date_range(start‘2023-01-01’, end‘2023-09-30’, freq‘BM’).strftime(“%Y-%m-%d”).to_list() 获取一段时间内每个月的最后一个日历日 endlistpd.date_range(start‘2023-01-01’, end‘2023-09-30’, freq‘M’).st…

样式问题解决

1.深度样式选择器 1.vue2中 原生css >>> .el-card__header saas\scss ::v-deep .el-card__header less /deep/ .el-card__header 2.vue3中 :deep() { //styles } ::deep() { //styles } 2.修改element.style样式 3.用户代理样式表样式修改 用户代理样式表是浏…

使用jmeter进行简单压力测试

前言 最近项目要上线,需要项目进行简单的压力测试,本次使用的是jmeter来进行的,由于本人不是专业测试,只是对本次使用过程进行简单的记录. 一.jemeter的下载与安装 我这个已经安装很久了,具体过程这个可以查询下其他博客(偷个懒). 二.使用过程 1.测试计划右击-添加(add)-线…

重生奇迹MU套装大全中的极品属性

在重生奇迹MU之中&#xff0c;你不能如其他游戏一般只看攻击与防御&#xff0c;你更要看属性&#xff0c;这才是重生奇迹中的王道&#xff01;属性好&#xff0c;才是极品&#xff0c;属性不佳&#xff0c;即便攻击、防御再出色&#xff0c;也只能沦落成为一件替用品&#xff0…

Leetcode—2300.咒语和药水的成功对数【中等】

2023每日刷题&#xff08;二十五&#xff09; Leetcode—2300.咒语和药水的成功对数 排序二分实现代码 class Solution { public:int lower_bound(vector<int> &potions, long long target) {int n potions.size();int left 0, right n;int mid left (right -…

如何快速编写测试用例?

当你学会了如何设计测试用例之后&#xff0c;接下来便是开始用例的编写。 在设计阶段&#xff0c;更准确的说应该是识别测试点的过程&#xff0c;而编写阶段则是将测试点细化成一条条测试用例的过程&#xff0c;有了比较全的用例场景后&#xff0c;如何让别人更舒服、更方便、…