当前位置:网站首页>RT-Thread--Lwip之FTP(2)

RT-Thread--Lwip之FTP(2)

2022-07-06 03:20:00 rou252051452

RT-Thread--Lwip之FTP_rou252051452的博客-CSDN博客本说明基于在RTT下搭建完成网络通信功能基础上完成,具体网络实现参见另外一个教程。https://blog.csdn.net/rou252051452/article/details/123084492https://blog.csdn.net/rou252051452/article/details/1230844921、软件包使能 打开RT-ThreadSetting进行软件包安装,保存生效文件2、FTP功能的初始化 主函数通过包含...https://blog.csdn.net/rou252051452/article/details/123086671        上一个文档中完成了FTP的使能及连接,但是开发板中无文件系统,无目录供FTP进行访问,所以我们本章进行文件系统(spi flash)的实现。

1、硬件使能

        根据正点原子的原理图配置进行SPIflash的配置如下:

 2、RT-Thread Setting设置

  3、board.h文件设置

        增加#define BSP_USING_SPI5宏定义

  4、挂载SPI  flash

        新建drivers\drv_spiflash.c文件,内容如下

#include "board.h"
#include <rtthread.h>
#include <rtdevice.h>
#include "drv_spi.h"
#include "drv_config.h"
#include <string.h>
#include "spi_flash_sfud.h"

static int rt_hw_spi_flash_init(void)
{
    __HAL_RCC_GPIOF_CLK_ENABLE();
    rt_hw_spi_device_attach("spi5", "spi50", GPIOF, GPIO_PIN_6);

    if (RT_NULL == rt_sfud_flash_probe("W25Q256", "spi50"))
    {
        return -RT_ERROR;
    };
    return RT_EOK;
}
/* 导出到自动初始化 */
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);

编译下载,串口输出如下

   5、文件系统挂载

        在main.c文件中实现如下函数进行flash下文件系统的挂载,主函数调用该函数。

static int dfs_mount_init(void)
{
    if(dfs_mount("W25Q256", "/", "elm", 0, 0) == 0)
    {
        rt_kprintf("dfs mount success\r\n");
        return RT_EOK;
    }
    else
    {
        rt_kprintf("spi file system initialized faile\r\n");
        if(dfs_mkfs("elm", "W25Q256") == 0)
        {
            rt_kprintf("W25QXX file system initialized\r\n");
            if(dfs_mount("W25Q256", "/", "elm", 0, 0) == 0)
            {
                rt_kprintf("dfs mount success\r\n");
                return RT_EOK;
            }
            else
            {
                rt_kprintf("dfs mount success\r\n");
                return -RT_ERROR;
            }
        }
        else
        {
            rt_kprintf("dfs mount success\r\n");
            return -RT_ERROR;
        }
    }
}

        下载验证,串口输出如下

    6、挂载目录的修改

        上述挂载过程将flash直接挂载到了根目录,若存在多个挂载设备我们无法进行区分。所以通过下操作来实现根目录下不同目录的挂载。

        修改rt-thread\components\def\filesystems\romfs\romfs.c文件如下,我们在根目录下增加了sdcard和w25qxx两个目录。

#include <rtthread.h>
#include <dfs_romfs.h>
#include "dfs.h"

static const struct romfs_dirent _romfs_root[] =
{
    {ROMFS_DIRENT_DIR, "sdcard", RT_NULL, 0},
    {ROMFS_DIRENT_DIR, "w25qxx", RT_NULL, 0}
};

const struct romfs_dirent romfs_root =
{
    ROMFS_DIRENT_DIR, "/", (rt_uint8_t *)_romfs_root, sizeof(_romfs_root)/sizeof(_romfs_root[0])
};


int mnt_init(void)
{
   if(dfs_mount (RT_NULL,"/","rom",0,&(romfs_root)) == 0)
   {
       rt_kprintf("ROM file system initializated;\n");
   }
   else
   {
        rt_kprintf("ROM file system initializate failed;\n");
   }
   return 0;
}
INIT_ENV_EXPORT(mnt_init);




        同步对main.c中的dfs_mount_init进行修改

        

static int dfs_mount_init(void)
{
    if(dfs_mount("W25Q256", "/w25qxx", "elm", 0, 0) == 0)
    {
        rt_kprintf("dfs mount success\r\n");
        return RT_EOK;
    }
    else
    {
        rt_kprintf("spi file system initialized faile\r\n");
        if(dfs_mkfs("elm", "W25Q256") == 0)
        {
            rt_kprintf("W25QXX file system initialized\r\n");
            if(dfs_mount("W25Q256", "/w25qxx", "elm", 0, 0) == 0)
            {
                rt_kprintf("dfs mount success\r\n");
                return RT_EOK;
            }
            else
            {
                rt_kprintf("dfs mount success\r\n");
                return -RT_ERROR;
            }
        }
        else
        {
            rt_kprintf("dfs mount success\r\n");
            return -RT_ERROR;
        }
    }
}

下载验证,串口如下

FTP查看信息如下:

原网站

版权声明
本文为[rou252051452]所创,转载请带上原文链接,感谢
https://blog.csdn.net/rou252051452/article/details/123087181