STM32 USB读卡器开发实战:从硬件设计到协议栈移植全解析
1. 项目概述与硬件选型
在嵌入式系统开发中,实现USB读卡器功能是一项常见且实用的需求。STM32系列微控制器凭借其丰富的外设资源和稳定的性能,成为这类项目的理想选择。本项目基于STM32F103系列MCU,通过USB OTG和SDIO接口实现一个完整的读卡器解决方案。
核心硬件选型考量:
-
主控芯片:STM32F103C8T6(主流型号,性价比高)
- 72MHz Cortex-M3内核
- 内置USB 2.0全速(12Mbps)控制器
- 支持SDIO接口
- 64KB Flash + 20KB SRAM
-
存储介质:MicroSD卡(支持SPI/SDIO两种访问模式)
- 容量支持:最高32GB(FAT32格式)
- 典型读写速度:SPI模式约2MB/s,SDIO模式约10MB/s
-
USB接口设计:
- USB Type-Micro B接口
- D+/D-信号线需串联22Ω电阻匹配阻抗
- 5V转3.3V LDO为系统供电
硬件连接示意图:
STM32F103 <--> SD卡槽
PA11(D-) <--> D-
PA12(D+) <--> D+
PC8~PC11 <--> SDIO_D0~D3 (4位模式)
或
PA4~PA7 <--> SPI_MISO/MOSI/SCK/CS
2. USB协议栈深度解析
USB Mass Storage Class(MSC)是实现读卡器的核心协议,其工作流程可分为以下几个关键阶段:
枚举过程详解:
- 设备连接检测(VBUS上电)
- 主机发送GET_DESCRIPTOR请求获取设备信息
- 设备响应标准描述符(设备、配置、接口、端点)
- 主机分配地址(SET_ADDRESS)
- 主机查询存储介质容量(READ_CAPACITY)
- SCSI命令交互建立
关键描述符结构:
// 设备描述符示例
const uint8_t MSD_DeviceDescriptor[] = {
0x12, // bLength
0x01, // bDescriptorType (Device)
0x0200, // bcdUSB 2.0
0x00, // bDeviceClass
0x00, // bDeviceSubClass
0x00, // bDeviceProtocol
0x40, // bMaxPacketSize0
0x0483, // idVendor (STMicroelectronics)
0x


5841

被折叠的 条评论
为什么被折叠?



