当前位置:网站首页>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查看信息如下:
边栏推荐
- Eight super classic pointer interview questions (3000 words in detail)
- EDCircles: A real-time circle detector with a false detection control 翻译
- Shell 传递参数
- Leetcode problem solving -- 99 Restore binary search tree
- SAP ALV颜色代码对应颜色(整理)
- 数据分析——seaborn可视化(笔记自用)
- [pointer training - eight questions]
- Leetcode problem solving -- 98 Validate binary search tree
- Problems encountered in 2022 work IV
- 【概念】Web 基础概念认知
猜你喜欢
Résumé des méthodes de reconnaissance des caractères ocr
记录一下逆向任务管理器的过程
教你用Pytorch搭建一个自己的简单的BP神经网络( 以iris数据集为例 )
mysqldump数据备份
ESBuild & SWC浅谈: 新一代构建工具
Pytorch load data
Edcircles: a real time circle detector with a false detection control translation
JS regular filtering and adding image prefixes in rich text
OCR文字識別方法綜述
OCR文字识别方法综述
随机推荐
EDCircles: A real-time circle detector with a false detection control 翻译
Who is the winner of PTA
暑期刷题-Day3
Image super-resolution using deep convolutional networks(SRCNN)解读与实现
多态day02
3.1 rtthread 串口设备(V1)详解
SD card reports an error "error -110 whilst initializing SD card
My C language learning record (blue bridge) -- under the pointer
pytorch加载数据
ArabellaCPC 2019(补题)
1.16 - 校验码
Getting started with applet cloud development - getting user search content
Python implementation of maddpg - (1) openai maddpg environment configuration
Microsoft Research, UIUC & Google research | antagonistic training actor critic based on offline training reinforcement learning
Polymorphic day02
How to choose PLC and MCU?
Mysql database operation
Performance test method of bank core business system
Era5 reanalysis data download strategy
Esbuild & SWC: a new generation of construction tools