这一章在干嘛? USB U 盘实验:USB Host 协议、Mass Storage 类、FATFS 文件系统移植。从此 MCU 可以读写 U 盘。
42.1 FATFS 简介
FATFS = 通用 FAT 文件系统模块(Chan 出品,嵌入式圈最常用)。
- 支持 FAT12/FAT16/FAT32/exFAT;
- 平台无关(需要自己实现 disk_read/disk_write);
- API:
f_open / f_read / f_write / f_close / f_mount。
原书图 42.1.1:FATFS 模块结构
42.2 U 盘简介
U 盘是 USB Mass Storage Device:
- SCSI 命令 + Bulk 传输;
- 文件系统一般是 FAT32;
- 一般 4 GB ~ 1 TB。
原书图 42.2.1:U 盘结构
USB OTG FS 也能当 Host:在 USB_OTG_FS 配置里 Mode = Host Only。需要外部给 USB 设备供电(开发板已集成)。
42.3 硬件设计
USB OTG FS 引脚 PA11/PA12 接 USB 母口。
42.4 程序设计
42.4.1 CubeMX 配置
- USB_OTG_FS → Mode = Host Only, Activate VBUS
- USB_HOST → Class = Mass Storage Host, Activate FATFS
- Middleware → USB_HOST + FATFS(Code Generation → Platform Settings → 下拉选 Key/LCD)
42.4.2 关键代码
FATFS fs;
FIL f;
UINT br;
// 挂载
f_mount(&fs, "0:", 1);
// 读文件
f_open(&f, "0:/test.txt", FA_READ);
f_read(&f, buf, sizeof(buf), &br);
f_close(&f);
// 写文件
f_open(&f, "0:/log.txt", FA_WRITE | FA_OPEN_ALWAYS);
f_write(&f, "Hello\n", 6, &bw);
f_close(&f);
原书图 42.4.2.1:USB Host 读写流程
原书图 42.4.2.2:FATFS 关键 API 调用链
42.5 下载验证
插入 U 盘 → 串口打印 f_mount 成功 → 读 test.txt 串口显示 → 写 log.txt → PC 上能看到新文件。
U 盘格式:务必 FAT32,exFAT 需额外配置。NTFS 不支持。
🧠 小测验FATFS 是?
通用的 FAT 文件系统模块。
U 盘文件系统一般?
FAT32。
打开文件后必须做什么?
f_close,否则内容可能丢失。