📖 第 39 章:USB读卡器(Slave)实验(USB Reader (Slave))

🔧 正点原子《DMF407 开发指南》V1.0 · Chapter 39
🗨️ 「USB 读卡器:让 MCU 假装自己是 U 盘。」
这一章在干嘛? USB 读卡器实验:USB OTG Full-Speed 协议、Mass Storage 类、Bulk-Only 传输、SCSI 命令。从此 MCU 可以当 U 盘。
39.1 USB 简介39.2 硬件设计39.3 程序设计39.4 下载验证

39.1 USB 简介

USB OTG FS = USB On-The-Go Full-Speed(12 Mbps)。

F407 有 2 个 USB OTG:

USB 类(Class):

典型应用
HID键鼠/触摸
Mass StorageU 盘/读卡器
CDC虚拟串口
Vendor自定义

原书图 39.1.1:USB 协议分层
原书图 39.1.1:USB 协议分层

USB 协议栈复杂:实际开发直接用 ST 的 USB Device 库 + Middleware,10 分钟搞定一个读卡器。

39.2 硬件设计

USB OTG FS 接 PA11/PA12 → 开发板 USB Slave 接口。

原书图 39.2.1:USB OTG FS 接线图
原书图 39.2.1:USB OTG FS 接线图

39.3 程序设计

39.3.1 CubeMX 配置

39.3.2 关键代码

启用 ST 提供的 usbd_msc_if.c 模板。修改读写回调指向 SPI Flash:

int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) {
    W25Qxx_ReadData(buf, blk_addr * 512, blk_len * 512);
    return 0;
}

int8_t STORAGE_GetCapacity_FS(uint8_t lun, uint32_t *block_num, uint16_t *block_size) {
    *block_num = 16384;     // 8 MB / 512 = 16384 扇区
    *block_size = 512;
    return 0;
}

原书图 39.3.2.1:USB Mass Storage 数据流
原书图 39.3.2.1:USB Mass Storage 数据流

原书图 39.3.2.2:MSC SCSI 命令处理流程
原书图 39.3.2.2:MSC SCSI 命令处理流程

39.4 下载验证

USB 线接 PC → 弹出「可移动磁盘」→ 拖文件测试读写 → 串口调试显示状态机切换。

首次插入 PC 可能要装驱动:ST 的 USB 设备驱动在 Win10+ 通常免驱,但 XP/Win7 可能要手动装。

🧠 小测验
USB OTG FS 速率?
12 Mbps(Full Speed)。
USB Mass Storage 类传输数据用什么包?
Bulk 传输。
块大小一般多少?
512 字节。
← 上一篇🏠 顶层目录下一篇 →