• 正文
  • 相关推荐
申请入驻 产业图谱

USB Device Library 工程配置、开发流程与工程移植要点

2小时前
70
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1. 完整工程开发整体流程

  1. 在usbd_board.h配置库全局宏参数;
  2. 修改对应 USB Class 内部宏(端点地址、包大小、轮询间隔);
  3. 在usbd_board.c的USBD_HardwareInit()完成硬件初始化:时钟、IO、FIFO 大小配置;
  4. 在usb_descriptor.c/h修改 VID、PID、字符串、设备配置等各类描述符;
  5. 实现 USB 中断服务函数,调用库中断处理入口;
  6. 注册 Class 类处理接口、用户业务回调;
  7. 调用USBD_Init()完成 USB 设备初始化,启动 USB 设备;
  8. 在应用层回调函数处理 USB 连接、断开、数据收发业务逻辑。

资料获取:APM32 USB Device Library应用笔记

2. 库全局宏配置(usbd_board.h)

库基础配置宏,示例默认参数:

#define USBD_SUP_CLASS_MAX_NUM 1        //最大支持Class数量
#define USBD_SUP_INTERFACE_MAX_NUM 1    //最大interface数量
#define USBD_SUP_CONFIGURATION_MAX_NUM 1 //最大配置数量
#define USBD_SUP_STR_DESC_MAX_NUM 512   //字符串描述符最大字符长度
#define USBD_SUP_LPM 0                  //LPM功能开关
#define USBD_SUP_SELF_PWR 1             //自供电模式开关

复合 USB 设备(多 Class 组合)需要修改USBD_SUP_CLASS_MAX_NUM,支持同时多个设备类。

同时每个 Class 拥有独立配置宏,以 HID 鼠标举例:报告描述符长度、端点地址、包大小、轮询间隔等,必须与描述符保持一致。

3. 硬件层配置要点

硬件配置函数USBD_HardwareInit()位于usbd_board.c,主要完成:

  1. USB 外设时钟使能;
  2. USB IO 引脚配置;
  3. RX‑FIFO、TX‑FIFO 缓冲区大小配置;
  4. 端点 FIFO 分配。

重点约束:Class 文件内部的端点地址、最大包长宏,必须和硬件 FIFO 配置一一对应,否则通信异常。例如 CDC 类中USBD_CDC_FS_MP_SIZE全速包长,需要匹配 FIFO 分配。

4. 描述符配置说明

全部描述符存放于usb_descriptor.c/h,包含 10 类描述符:

  1. 设备描述符;
  2. 配置描述符;
  3. 配置字符串描述符;
  4. 接口字符串描述符;
  5. 语言 ID 字符串描述符;
  6. 制造商字符串描述符;
  7. 产品字符串描述符;
  8. 序列号字符串描述符;
  9. 其他速度描述符;
  10. 设备修饰描述符。

开发者量产项目重点修改:VID、PID、厂商名称、产品名称、序列号。描述符回调挂载至USBD_DESC_T结构体。

5. Class 类配置与注册方法

  1. 修改对应 Class 头文件中的端点地址、包大小、轮询间隔、报告描述符;
  2. 初始化该 Class 的USBD_CLASS_T结构体实例;
  3. 调用USBD_Init(),将 Class 结构体指针作为入参注册进 USB 内核;
  4. 部分类(MSC、Custom‑HID、CDC)需要调用注册接口函数,绑定用户读写业务回调。

USBD_Init函数原型

USBD_STA_T USBD_Init(USBD_INFO_T* usbInfo, USBD_SPEED_T usbDevSpeed,
USBD_DESC_T* usbDevDesc, USBD_CLASS_T* usbDevClass,
void (*userCallbackFunc)(struct _USBD_INFO_T*, uint8_t));

该接口完成描述符注册、Class 挂载、用户回调注册、硬件初始化。

6. 中断服务函数配置

USB 外设中断需要在工程中断服务函数中调用库内部处理入口,USB 所有事件(复位、挂起、SOF、数据收发)全部依靠中断驱动;不配置中断回调,USB 协议栈将无法运行。

7. 项目移植适配步骤与常见注意事项

  1. 芯片适配:确认目标 MCU 在支持列表,选用对应芯片底层 USB 驱动文件;
  2. 宏一致性检查:Class 内部端点地址、包大小,FIFO 配置,描述符三者参数必须匹配;
  3. 描述符修改:量产产品务必修改 VID/PID,禁止直接使用示例默认值;
  4. 多复合设备修改USBD_SUP_CLASS_MAX_NUM,配置描述符需要对应复合设备接口集合;
  5. 高速 / 全速模式:硬件 PCB 需要匹配 USB 硬件电气条件,库中可配置设备速度参数;
  6. MSC 类需要实现底层存储介质读写回调(SRAM / SD 卡 / NorFlash 介质读写接口);
  7. WinUSB 需要配置对应的 WinUSB OS 字符串描述符。

相关推荐