长文件名支持:

要让 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_convertff_wtoupper)处理字符编码转换,** 如果不添加该文件,会导致链接错误(undefined reference)**。

因此,添加ccsbcs.c到工程中是开启长文件名支持的必要步骤

4.FF_CODE_PAGE 436

FF_CODE_PAGE的取值对应不同的字符集编码,436IBM 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_convertff_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
  1. 删除冲突文件:如果工程中已有ccsbcs.c,需删除(两者都是编码转换实现,会冲突);
  2. 配置ffconf.h:确保FF_CODE_PAGE 936和长文件名相关配置正确(如FF_USE_LFN 1);
  3. 编码一致性:代码中的中文文件名 / 内容需以 GBK 编码存储(避免 UTF-8 与 GBK 混淆导致乱码)。
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐