FATFS文件系统——中文名及长文件名支持
FATFS支持长文件名及中文命名的关键配置步骤:1.修改ffconf.h开启FF_USE_LFN(1/2/3)并设置FF_MAX_LFN长度;2.配置FF_CODE_PAGE选择适当编码(中文GBK需设为936);3.添加对应编码转换文件(中文需cc936.c替代默认ccsbcs.c)。注意工程中不能同时存在多个编码转换文件,且需确保系统编码与配置一致(如GBK)。这些配置可支持255字符长度的中
长文件名支持:
要让 FATFS 支持长文件名(超过 8.3 格式) 和中文命名,需要通过修改ffconf.h配置文件并适配字符编码处理,具体步骤如下:
FATFS 默认关闭长文件名支持,需通过ffconf.h中的宏定义开启,核心配置如下:
1. 开启长文件名功能(FF_USE_LFN)
找到ffconf.h中的FF_USE_LFN,设置为非 0 值(支持长文件名):
#define FF_USE_LFN 1 // 1=启用长文件名(静态缓冲区),2=动态分配(需malloc),3=栈缓冲区
- 取值说明:
1:使用静态缓冲区(推荐嵌入式系统,无需动态内存,需同时配置FF_MAX_LFN);2:使用malloc动态分配缓冲区(灵活但需确保内存充足);3:使用栈上的缓冲区(适合临时操作,栈空间需足够大)。
2. 配置长文件名最大长度(FF_MAX_LFN)
设置支持的最长文件名(含路径)长度(默认 255,足够日常使用):
#define FF_MAX_LFN 255 // 最大长文件名长度(1~255)
3.必须添加ccsbcs.c文件
核心作用:ccsbcs.c是 FatFs 官方提供的代码页转换实现文件,包含了多种FF_CODE_PAGE对应的字符编码转换逻辑(如 ASCII、GBK、Shift-JIS 等)。当开启长文件名(FF_USE_LFN ≥ 1)时,FatFs 会在ff.c中调用ccsbcs.c里的函数(如ff_convert、ff_wtoupper)处理字符编码转换,** 如果不添加该文件,会导致链接错误(undefined reference)**。
因此,添加ccsbcs.c到工程中是开启长文件名支持的必要步骤
4.FF_CODE_PAGE 436
FF_CODE_PAGE的取值对应不同的字符集编码,436是IBM PC 的 “英文 / 国际代码页”(主要支持英语及部分西欧语言,不支持中文),具体:
- 支持字符:ASCII 字符(0-127)、部分扩展 ASCII(如€、£ 等符号);
- 不支持:中文、日文、韩文等宽字符。
如果你只需要英文长文件名(如 “long_filename_example.txt”),FF_CODE_PAGE 436是合适的;但如果需要支持中文,必须使用对应的中文代码页(如936=GBK、65001=UTF-8)。
中文长文件名支持:
中文属于宽字符(非 ASCII),需确保 FATFS 能正确处理中文的编码转换(如 GBK/UTF-8 与 Unicode 的转换)。
1. 配置代码页(FF_CODE_PAGE)
代码页(Code Page)用于指定本地字符集(如中文 GBK),需设置为支持中文的代码页:
#define FF_CODE_PAGE 936 // 936=简体中文GBK编码(关键:确保中文能被正确解析)
- 其他常用代码页:
65001(UTF-8)、950(繁体中文),根据系统使用的编码选择(嵌入式常用 GBK)。
2. 添加专用支持中文的cc936.c文件,移除通用代码页转换文件ccsbcs.c

1. 添加CC936.c到工程
从 FatFs 官方源码中找到CC936.c文件(通常位于src目录下),将其添加到你的工程中。
- 该文件包含
ff_convert和ff_wtoupper的 GBK 专用实现,用于处理中文与 Unicode 的编码转换。

2. 配置ffconf.h
// 1. 启用长文件名支持
#define FF_USE_LFN 1 // 1=静态缓冲区,2=动态分配,3=栈缓冲区
#define FF_MAX_LFN 255 // 最长文件名长度(含路径,建议≥128)
#define FF_LFN_UNICODE 1 // 长文件名以Unicode存储(必须开启)
// 2. 配置中文代码页(GBK)
#define FF_CODE_PAGE 936 // 936=GBK编码(简体中文)
// 3. 可选:禁用非必要功能(减少代码体积)
#define FF_USE_STRFUNC 0 // 若不需要字符串操作函数,可设为0
- 删除冲突文件:如果工程中已有
ccsbcs.c,需删除(两者都是编码转换实现,会冲突); - 配置
ffconf.h:确保FF_CODE_PAGE 936和长文件名相关配置正确(如FF_USE_LFN 1); - 编码一致性:代码中的中文文件名 / 内容需以 GBK 编码存储(避免 UTF-8 与 GBK 混淆导致乱码)。
更多推荐



所有评论(0)