FatFs路径名格式说明——瑞萨RA系列FSP库开发实战指南(88)

24.4.3
路径名格式说明
在FatFs的API函数中,经常能看到“const TCHAR* path”这样的函数参数,比如:
左右滑动查看完整内容
FRESULT f_mount(FATFS* fs, /* 指向要注册的文件系统对象的指针(NULL:卸载) */const TCHAR* path, /* 要装载/卸载的逻辑驱动器号*/BYTE opt /* 装载选项:0= 不装载(延迟装载),1= 立即装载*/)FRESULT f_open(FIL* fp, /* 指向空白文件对象的指针*/const TCHAR* path, /* 指向文件名的指针*/BYTE mode /* 访问模式和打开模式标志*/)
这就要求我们要知道path这个参数的可输入值是什么,也就是我们要了解FatFs的文件命名规范。
24.4.3.1
文件命名格式
FatFs模块上的路径名格式与DOS/Windows的文件名规范类似,如下所示:
左右滑动查看完整内容
[drive#:][/]"directory 目录"/"file 文件"
FatFs模块支持长文件名(LFN)和8.3格式的文件名(SFN)。长文件名(LFN)可在FF_USE_LFN
>=1时使用。子目录用\或/分隔,方式与DOS/WindowsAPI相同。重复的分隔符和终止分隔符将被忽略,例如:“//animal///cat/”。唯一不同的是,FatFs中指定逻辑驱动器(FAT卷)的标题驱动
器前缀是数字(0-9)+冒号,而在DOS/Windows中是字母(A-Z)+冒号。逻辑驱动器编号是指定要访问的卷的标识符。如果省略驱动器前缀,则假定逻辑驱动器编号为默认驱动器。
注:LFN和SFN
-
8.3命名规则,又称短文件名(Short File Name,SFN)是一种限制文件名长度的方法,这在DOS和Windows95及Windows NT3.51以前的Microsoft Windows版本中,在FAT 文件系统中的常用方法。
-
长文件名,(Long file name,LFN)也指长文件名支持。在旧版本的DOS操作系统下,因为文件名称有8.3格式的限制,凡文件主档名超过8字节或扩展名超过3字节的文件名,都被称为“长文件名”,在Windows下正常的文件名置换于DOS(或“命令提示字符”)环境下则可能无法完整显示,如“Program files”资料夹可能会显示成其对应的8.3文件名“PROGRA~1”。
24.4.3.2
FF_FS_RPATH
在默认配置(FF_FS_RPATH==0)中,是没有当前目录的概念的。卷上的每个对象始终以从根目录开始的完整路径名指定。不可以使用点目录名称(“.”,“..”)。标题分隔符被忽略,它可以存在或省略。默认驱动器固定为驱动器0。
启用相对路径功能时(FF_FS_RPATH>=1),如果存在分隔符,则从根目录跟随指定的路径。如果没有分隔符,则从默认驱动器的当前目录开始。路径名也允许使用点目录名。当前目录由f_chdir函数设置,默认驱动器为f_chdrive函数设置的当前驱动器。

此外,驱动器前缀可以采用预定义的任意字符串。当选项FF_STR_VOLUME_ID == 1时,也可以将任意字符串卷ID 用作驱动器前缀。例如“flash:file1.txt”、“ram:temp.dat”或“sd:”。如果srting与任何卷ID都不匹配,则该函数将失败并返回FR_INVALID_DRIVE。
当FF_STR_VOLUME_ID ==2时,可以使用Unix样式的驱动器前缀。例如“/flash/file1.txt”、“/ram/temp.dat”或“/sd”。
列表2:
FF_STR_VOLUME_ID和FF_VOLUME_STRS宏
左右滑动查看完整内容
#define FF_STR_VOLUME_ID 0 //FF_STR_VOLUME_ID 开关支持任意字符串形式的卷ID。#define FF_VOLUME_STRS "RAM","NAND","CF","SD","SD2",,→"USB","USB2","USB3"/* FF_STR_VOLUME_ID switches support for volume ID in arbitrary␣,→strings./ When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can␣,→be used as drive/ number in the path name. FF_VOLUME_STRS defines the volume ID␣,→strings for each/ logical drives. Number of items must not be less than FF_,→VOLUMES. Valid/ characters for the volume ID strings are A-Z, a-z and 0-9,␣,→however, they are/ compared in case-insensitive. If FF_STR_VOLUME_ID >= 1 and FF_,→VOLUME_STRS is/ not defined, a user defined volume string table needs to be␣,→defined as:// const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",..,→.
FF_STR_VOLUME_ID:此选项切换对字符串卷ID的支持。
表1:
FF_STR_VOLUME_ID为不同数值时,对应的可选
项

FF_VOLUME_STRS:此选项定义每个逻辑驱动器的卷ID字符串。项目数量不得少于FF_VOLUMES。卷ID字符串的有效字符是A-Z、a-z和0-9,不区分大小写。如果FF_STR_VOLUME_ID==0,则此选项不起作用。如果FF_STR_VOLUME_ID>=1并且未定义此选项,则需要定义用户定义的卷字符串表,如下所示。不应动态修改该表。
列表3:
用户定义卷ID字符串
左右滑动查看完整内容
/* 0: ~ 3: 的用户定义卷ID 字符串: */constchar* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb"};
这里我们并没有用到任意字符串形式的卷ID,就没有开启FF_STR_VOLUME_ID宏。
24.4.4
接口函数
主要的接口文件都在diskio.c文件中了,我们只需要根据函数所提供的输入参数和返回参数,来实现函数的功能,提供给FatFs调用就好了。
FatFs文件系统与存储设备的连接函数在diskio.c文件中,主要有5个函数需要我们编写的。下期我们讲详细讲解这5个函数的编写。

需要技术支持?
如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨MCU/MPU官方技术论坛寻找答案或获取在线技术支持。

https://bbs.21ic.com/renesas
未完待续
推荐阅读





夜雨聆风