FAT 文件系统是微软 (Microsoft) 从 MS-DOS 时代开始使用的,因应储存装置容量和功能增加而数次改版,由于架构简单使得广泛的被各种操作系统支持。因此使用 FAT文件系统让储存装置在不同操作系统上具备良好的交换性。譬如 SD 记忆卡采用 FAT 文件系统,相机拍摄照片存入 SD 卡,SD 卡插到 Windows PC、Linux PC 或 Mac 都可以存取。所以微控制器接 SD 卡或快闪硬盘,除了对应的接口外,必须支持 FAT 文件系统才能正常存取。
RT-Thread 在文件系统提出完整的方案 – 虚拟文件系统 (DFS, Device FileSystem) , 提供 POSIX 的操作接口, 支持多种类型文件系统, 支持多种类型的储存设备. 架构图如下
(来源: RT-Thread 文文件中心 – 虚拟文件系统. https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/filesystem/filesystem)
从架构图可以了解 RT-Thread 整合 ELM FatFs
(http://elm-chan.org/fsw/ff/00index_e.html)
提供 FAT 兼容的文件系统功能。经过块设备 (Block Device) 存取 SD 卡或 SPI Flash。FatFs 针对资源少的小型微控制器而设计,支持长文件名、多国语系和大容量 exFAT 等等功能。有许多选项可以增减功能,进一步缩减程序代码大小。
这次仍以 NuMaker-IoT-M487 开发板为操作范例。这片开发板上有 Winbond W25Q32 SPIFlash 和 MicroSD 卡槽。关于开发板的介绍,请参考系列文章第一篇 “NuMaker-IoT-M487 的 RT-Thread 快速上手指南”。
在 “NuMaker-IoT-M487 的 RT-Thread 快速上手指南” 文章里的基础范例已经包含文件系统相关的设定。开启 rtconfig.h,使用 SD 卡和 SPI Flash 已经定义。
接下来查看 SPI Flash 的部分。RT-Thread 提供 SFUD (SPI Flash Universal Driver) 做为 SPI Flash 的块设备。依照SFUD串上 SPI 底层的代码在boardlock_dev.c,只要定义 BOARD_USING_STORAGE_SPIFLASH 就会引入。
board_dev.c 往下可以看到 SPI Flash 启始的代码,把这个 SPI Flash 取名为 flash0。
接下来透过RT-Thread DFS 把 SPIFlash 以 ELMFatFs 挂在 “/” 目录下。代码在 applicationsmnt.c
请继续按照前篇文章的步骤编译,再把固件刻录到 NuMaker-IoT-M487 开发板。利用 RT-Thread 的console, 可以测试 SPI Flash, 暂时不用改写代码。当按下 NuMaker-IoT-M487 的Reset 键,终端机出现许多开机过程的讯息,其中查看 SPI Flash 的启始讯息,包含发现 Winbond SPI Flash,有 4M Bytes 容量。
开发板上的 SPI Flash 必须先格式化成 FAT 文件系统才能正常的挂载。在终端机里出现msh />后,输入格式化命令。
然后再按 Reset 键就可以看到挂载成功的讯息。
接着可以下档案与目录的操作,包含 echo、df、mkdir、cd、rm、cat、mv、cp、ls 等等命令。
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !