这篇文章将讲解如何使用RT-Thread Studio 开发工具操作文件系统,大概分为3篇。
第一篇:SPI Flash使用文件系统
第二篇:SD卡使用文件系统
第三篇:SPI flash和SD卡同时使用文件系统
(快捷键 alt+/ 自动补全API参数)
首先了解一下RT-Thread Studio,RT-Thread Studio是基于 eclipse 平台开发,界面设计和风格继承自 eclipse。
RT-Thread Studio 主要包括工程创建和管理,代码编辑,SDK管理,RT-Thread配置,构建配置,调试配置,程序下载和调试等功能,结合图形化配置系统以及软件包和组件资源,减少重复工作,提高开发效率。
- 社区版本永久免费
- 支持主流C/C++语言开发
- 强大的代码编辑和重构功能
- SDK管理器支持在线下载更新 RT-Thread 最新源码包
- 简单易用的工程创建向导,快速验证原型
- 全新图形化配置系统,同时支持架构图和树形图配置
- 软件包市场提供丰富的可用软件包资源
- 丰富的调试功能,快速查看和跟踪定位代码问题
硬件平台:正点原子STM32F407开发板
外设使用W25Q128,其原理图如下:
W25Q128使用的引脚有F_CS(PB14)、SPI1_SCK(PB3)、SPI1_MISO(PB4)、SPI1_MOSI(PB5)。
打开RT-Thread Studio软件,新建工程
修改芯片时钟配置函数void system_clock_config(int target_freq_mhz),修改如下
修改board.h中的晶振时钟定义
至此时钟修改完毕,使用外部晶振时钟8Mhz,系统时钟为168Mhz,APB1外设之中42Mhz,APB2外设之中84Mhz。
RT-Thread中DFS(虚拟文件系统)组件,全称为 Device File System,即设备虚拟文件系统,文件系统的名称使用类似 UNIX 文件、文件夹的风格,目录结构如下图所示:
在 RT-Thread DFS 中,文件系统有统一的根目录,使用 / 来表示。而在根目录下的 f1.bin 文件则使用 /f1.bin 来表示,2018 目录下的 f1.bin 目录则使用 /data/2018/f1.bin 来表示。即目录的分割符号是 /,这与 UNIX/Linux 完全相同,与 Windows 则不相同(Windows 操作系统上使用 \ 来作为目录的分割符)。
RT-Thread DFS 组件的主要功能特点有:
- 为应用程序提供统一的 POSIX 文件和目录操作接口:read、write、poll/select 等。
- 支持多种类型的文件系统,如 FatFS、RomFS、DevFS 等,并提供普通文件、设备文件、网络文件描述符的管理。
- 支持多种类型的存储设备,如 SD Card、SPI Flash、Nand Flash 等。
DFS 的层次架构如下图所示,主要分为 POSIX 接口层、虚拟文件系统层和设备抽象层。
文件系统的初始化过程一般分为以下几个步骤:
- 初始化 DFS 组件。
- 初始化具体类型的文件系统。
- 在存储器上创建块设备。
- 格式化块设备。
- 挂载块设备到 DFS 目录中。
- 当文件系统不再使用,可以将它卸载。
根据官方文档我们配置RT-Thread Studio的settings,如下图
在setting中打开以下组件和驱动框架
右键Fatfs,选择详细配置,设置如下
保存配置,系统自动下载更新对应的组件包,如下
W25Q128底层编写
根据文档完成以下几步配置,STEP1上面以配置完成
配置STEP3和STEP4
编译查看结果
spi1总线设备已注册。
在spi1总线上挂载W25Q128块设备。
程序编写如下
编译下载,查看信息
W25Q128注册成功块设备。
挂载文件系统到根目录,代码如下
编译下载,查看信息
文件系统挂载成功后就可以进行文件和目录的操作了,文件系统操作常用的 FinSH 命令如下表所示:
FinSH 命令 | 描述 |
ls | 显示文件和目录的信息 |
cd | 进入指定目录 |
cp | 复制文件 |
rm | 删除文件或目录 |
mv | 将文件移动位置或改名 |
echo | 将指定内容写入指定文件,当文件存在时,就写入该文件,当文件不存在时就新创建一个文件并写入 |
cat | 展示文件的内容 |
pwd | 打印出当前目录地址 |
mkdir | 创建文件夹 |
mkfs | 格式化文件系统 |
测试如下