一、配置RT-Thread Studio
本章使用野火的HPM6750IVM2作为测试开发板。
第一步需要将FAL、DFS 、Fatfs组件打开,因为需要FAL的帮助来划分分区和提供访问SPI FLASH的接口以及文件系统的接口。
二、挂载文件系统
首先在已经创建好的项目下的 board 文件夹下找到 fal_cfg.h 文件,在 FAL_PART_TABLE 宏定义下划分一个新的区域。文章中定义为 filesystem 。
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WORD, "app", NOR_FLASH_DEV_NAME, 0, 4*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "easyflash", NOR_FLASH_DEV_NAME, 4*1024*1024, 3*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "download", NOR_FLASH_DEV_NAME, 7*1024*1024, 8*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "flashdb", NOR_FLASH_DEV_NAME, 15*1024*1024, 1*1024*1024, 0}, \
{FAL_PART_MAGIC_WROD, "filesystem",NOR_FLASH_DEV_NAME, (512 + 1024 + 512 + 7 * 1024) * 1024, 7 * 1024 * 1024, 0}, \
}
然后在main函数下初始化块设备和挂载块设备到文件系统上。
#define FS_PARTITION_NAME "filesystem"
/* 在 spi flash 中名为 "filesystem" 的分区上创建一个块设备 */
struct rt_device *flash_dev = fal_blk_device_create(FS_PARTITION_NAME);
if (flash_dev == NULL)
{
rt_kprintf("Can't create a block device on '%s' partition.\n", FS_PARTITION_NAME);
}
else
{
rt_kprintf("Create a block device on the %s partition of flash successful.\n", FS_PARTITION_NAME);
}
/* 挂载 spi flash 中名为 "filesystem" 的分区上的文件系统. 参数 快设备名称 - 挂载路劲 - 文件格式 */
if (dfs_mount(FS_PARTITION_NAME, "/", "elm", 0, 0) == 0)
{
rt_kprintf("Filesystem initialized!\n");
}
else
{
rt_kprintf("Failed to initialize filesystem!\n");
rt_kprintf("You should create a filesystem on the block device first!\n");
}
在完成上面操作之后运行代码会报下面的错误:
1. The sector size of device is greater than the sector size of FAT.
2. Failed to initialize filesystem.
第一个问题的解决方法:
rtconfig.h 文件
#define RT_DFS_ELM_MAX_SECTOR_SIZE 4096 之前默认是512,改为4096
dfs.h 文件
#define SECTOR_SIZE 4096 之前默认是512,改为4096
第二个问题的解决方法:
//造成初始化不成功的原因是没有将块设备格式化为文件系统格式
//故在 RT-Thread studio 下的 msh 命令将块设备格式, 再次重新跑代码就能挂载上
mkfs -t elm filesystem
三、实验结果
SPI FLASH 划分的区域被成功初始化为块设备并挂载在文件系统上。