这一章在干嘛?

USB U 盘实验:USB Host 协议、Mass Storage 类、FATFS 文件系统移植。从此 MCU 可以读写 U 盘。

42.1 FATFS 简介

42.2 U 盘简介

42.3 硬件设计

42.4 程序设计

42.5 下载验证

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.1.1:FATFS 模块结构

42.2 U 盘简介

U 盘是 USB Mass Storage Device:

  • SCSI 命令 + Bulk 传输;
  • 文件系统一般是 FAT32;
  • 一般 4 GB ~ 1 TB。

原书图 42.2.1:U 盘结构原书图 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.1:USB Host 读写流程

原书图 42.4.2.2:FATFS 关键 API 调用链原书图 42.4.2.2:FATFS 关键 API 调用链

42.5 下载验证

插入 U 盘 → 串口打印 f_mount 成功 → 读 test.txt 串口显示 → 写 log.txt → PC 上能看到新文件。

U 盘格式:务必 FAT32,exFAT 需额外配置。NTFS 不支持。