基于STM32H7实现Fats+ FTP服务器 功能的实现

目录

一、前言

1、起源:

2、FTP/TFTP介绍

(1 )FTP介绍

(2)TFTP介绍

(3)选择原因

二、实现流程

1、基础知识构建

2、移植源码到自己的工程中

3、代码调试

(1)SOCKET问题:

(2)filezilla的设置:

(3) 文件上传

(4)主动模式和被动模式

(5)文件夹无法上传

三、结论及测试结果


一、前言

1、目的:

      本次研究目的是基于SD卡内部的文件内容如何导出的问题所作的探索,传统方式是使用usb接口实现U盘功能,这个之前在F4上已经实现,且目前的应用环境中是包含网络的,我就想到了之前linux文件互传使用的FILEZILLA,于是便萌生了在mcu上实现这个功能的想法,调研阶段发现了ftp和tftp两种方式。(参考源码见附件)

2、FTP/TFTP介绍

        详细内容大家可以自行参考其他文档,本文做个简单介绍,重点突出选择的原因。

(1 )FTP介绍

       FTP是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层,提供一种在服务器和客户机之间上传和下载文件的有效方式。

  • 基于TCP的传输
  • FTP采用双TCP连接方式
  • 多用于Windows操作系统系统
  • 支持授权与认证机制,提供目录列表功能
  • FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息

(2)TFTP介绍

      Trivial File Transfer Protocol,简单文件传输协议,一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。

  • TFTP封装:Ethernet 2/IPv4/UDP/FCS
  • TFTP适用于客户端和服务器之间不需要复杂交互的环境
  • TFTP仅提供简单的文件传输功能(上传、下载)
  • TFTP不提供存取授权与认证机制,不提供目录列表功能
  • TFTP协议传输是由客户端发起的

(3)选择原因

      相较于FTP,TFTP的设计就是以传输小文件为目标,协议实现简单很多。TFTP是一个传输文件的简单协议,它基于UDP协议而实现。它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。TFTP代码所占的内存较小,广泛应用于没有硬盘的嵌入式设备。 TFTP在lwip的协议栈中已经实现了。

总结: TFTP相对简单:使用简单、实现简单,处理器要求低,但是不能知道对方有那些文件,必须要提前确定好文件名才能进行传输,比较适合明确性的某个文件数据类的传输,不能用作文件的查看和管理类功能。 TFTP相对的优势就是fatfs内部所有的文件结构一览无余,和操作自己的电脑U盘一样,上传,下载、删除、新建等功能均可以。

考虑到本项目是想实现U盘一样的功能,外加H7处理器足够强大,故通过FTP实现。

二、实现流程

1、基础知识构建

(1)先了解下ftp实现的原理及mcu上实现服务器的可能性,然后下载ftp服务器源码(网上没看到标准开源的码,我是从别人工程中下载的。rt-thread官方有个支持包,但不提供源码,只提供lib,放弃),下载后源码如下:

(2)下载filezilla安装程序,安装比较简单,安装完成之后如下图:

2、移植源码到自己的工程中

该源码是基于socket+rtos编程的,所以要注意自己的lwip已经能满足这个条件了。

移植基本上没什么太大的改动就可以编译通过了。

3、代码调试

由于别人工程的可靠性未知,代码还是需要大量的调试,调试的过程中也同步了解了ftp的传输流程及原理,这里记录一下过程中几个问题及原理以供大家参考:

(1)SOCKET问题:

   ftp需要消耗较多的socket资源,所以在前期调试阶段一定要将lwip的资源设置好。由于操作的过程中的不停的释放和打开socket,该源码在处理关闭时有一些地方不妥,导致使用过程中socket资源不足而出现问题,所以一定要处理好关闭和打开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值