潘多拉 RT-Thread SD 卡文件系统
实验概述
本实验我们将 TF 卡插入潘多拉 IoT 开发板上 TF 卡槽中并作为文件系统的存储设备,我们将在 TF 卡上创建文件系统(格式化卡),然后挂载文件系统到 RT-Thread 操作系统中。文件系统挂载成功后,就可以使用文件系统提供的功能对目录和文件进行读写操作了!
提示
SD 卡和 TF 卡的区别是:SD 卡一般是相机使用的大的内存卡,TF 就是手机使用的小的内存卡。SD 卡是 Secure Digital Card 的英文缩写,直译就是“安全数字卡”。 TF 卡即是 T-Flash 卡,又叫 micro SD 卡,即微型 SD 卡。
硬件连接
潘多拉 IoT Board 板载的一个标准 TF 卡接口(TF_CARD),采用 SPI 方式驱动(硬件 SPI1),原理图如下所示:
示例代码
参考《潘多拉 IoT Board 开发环境》创建工程,在 applications/main.c 中输入如下代码。它的作用是将块设备 sd0 中的文件系统以 fatfs 文件系统格式挂载到根目录 /
上。
applications/main.c
#include <rtthread.h>
#include <dfs_fs.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
int main(void)
{
#ifdef BSP_USING_TF_CARD
/* 挂载 TF 卡中的文件系统,参数 elm 表示挂载的文件系统类型为 elm-fat 文件系统*/
if (dfs_mount("sd0", "/", "elm", 0, 0) == 0)
{
LOG_I("Filesystem initialized!");
}
else
{
LOG_E("Failed to initialize filesystem!");
}
#endif /*BSP_USING_TF_CARD*/
return 0;
}
挂载操作中所用的块设备 sd0 是基于 spi10 设备而创建的,创建块设备的代码在 board/ports/drv_sdcard.c 文件中。spi10 设备是挂载在硬件 SPI1 总线上的第一个 SPI 设备,因此命名为 spi10,该设备就是本次挂载的 SD 卡。msd_init
函数会在 spi10 设备 上进行探测,并基于该设备创建名为 sd0 的块设备,用于文件系统的挂载,代码如下所示:
board/ports/drv_sdcard.c
#ifdef BSP_USING_SDCARD
static int rt_hw_spi1_tfcard(void)
{
__HAL_RCC_GPIOC_CLK_ENABLE();
rt_hw_spi_device_attach("spi1", "spi10", GPIOC, GPIO_PIN_3);
return msd_init("sd0", "spi10");
}
INIT_DEVICE_EXPORT(rt_hw_spi1_tfcard);
#endif /* BSP_USING_SDCARD */