USB

本文说明本章节功能的接入方式、关键源码和应用参考,帮助开发者快速完成集成。

1. 参考代码

文件

作用

solution\components\usb_mstorage\usb_detection.c

检测 USB 插拔状态并通知业务层

solution\components\usb_mstorage\usb_mstorage.c

实现 USB Mass Storage 模式的数据访问流程

solution\components\usb_mstorage\usb_ota.c

通过 USB 通道接收并触发 OTA 升级

2. 应用例程

场景

文件

调用接口

USB 存储弹窗

popup_usb_storage.c

app_usb_mount_enable()ota_set_ui_invalid()

该文档围绕 USB 应用展开,主要从简介、从机与主机的定义及应用场景、配置方法、主要特性和使用注意事项等方面进行说明。

3. 简介

  • USB 位于 HPSYS,芯片集成一路全速(FS)USB2.0Host/Device 接口,符合 USB2.0 协议规范。

  • 功能包括:

    • 软件可配置端点设置,支持挂起 / 恢复;

    • 支持动态 FIFO 大小;

    • 支持会话请求协议和主机协商协议;

    • 支持全速及慢速模式;

    • 片内集成 USB2.0FSPHY;

    • 拥有 ep0~ep7 8 个通道。

4. USB-SLAVE 定义与应用场景

USB-SLAVE(从设备)是指在 USB 通信中,设备作为被动端响应主机(Host)的请求,完成数据的收发和控制。

常见的 USB-SLAVE 应用场景包括:

  • 外部存储设备(如 U 盘、移动硬盘)

  • USB 键盘、鼠标等人机交互设备

  • 摄像头、打印机等外设

  • 工业控制、数据采集终端

  • 音频、视频传输设备

在这些场景中,USB-SLAVE 设备通过标准的 USB 协议与主机进行通信,实现即插即用、跨平台的数据交换和控制功能。

目前在平台中已经调试完成的应用场景如下:

  • MSTORAGE

  • CDC-VCOM

  • printer

5. USB-HOST 定义与应用场景

USB-HOST(主机)是指在 USB 通信中,设备作为主动端发起对从设备(Device)的控制和数据传输。主机负责总线管理、设备枚举、供电和数据交换等任务。

常见的 USB-HOST 应用场景包括:

  • 连接 U 盘、移动硬盘等存储设备,实现数据读写

  • 连接 USB 键盘、鼠标等外设,实现人机交互

  • 连接打印机、摄像头等设备,扩展系统功能

  • 工业控制系统中作为主控端,管理多个 USB 设备

  • 车载、医疗等嵌入式系统的外设扩展

在这些场景中,USB-HOST 通过标准 USB 协议管理和访问各种 USB 从设备,实现灵活的外设扩展和数据交互。

6. 从机配置

按下表打开 USB Device,并按产品形态选择设备类。

步骤

路径

配置项

说明

1

SiFli SDK configuration Board Config On-chip Peripherals USB Device

BSP_USING_USBD

USB Device 硬件开关。打开后会选中 RT_USING_USB_DEVICE;PC Simulator 不显示该板级菜单。

2

RTOS RT Thread RT-Thread Components Using USB Using USB device

RT_USING_USB_DEVICE

USB 设备协议栈。先打开第 1 步硬件开关,再选择 CDC、Mass Storage、HID、Printer、RNDIS、ECM 或 WinUSB。

3

同上

USB_VENDOR_ID / USB_PRODUCT_ID

配置设备 VID/PID,默认分别为 0x38F4 / 0x0001

../../_images/usb_slave_1.png ../../_images/usb_slave_2.png ../../_images/usb_slave_3.png ../../_images/usb_slave_3.png

注意

USB Device 的 Enable USB TX DMA (USB_TX_DMA_ENABLED)Enable USB RX DMA (USB_RX_DMA_ENABLED) 仅在非 SF32LB55X 平台显示,且默认均为启用;SF32LB55X 不支持 USB DMA。

7. 主机配置

按下表打开 USB Host,并选择需要支持的外设类型。

步骤

路径

配置项

说明

1

SiFli SDK configuration Board Config On-chip Peripherals USB Host

BSP_USING_USBH

USB Host 硬件开关。打开后会选中 RT_USING_USB_HOST;PC Simulator 不显示该板级菜单。

2

RTOS RT Thread RT-Thread Components Using USB Using USB host

RT_USING_USB_HOST

USB Host 协议栈。先打开第 1 步硬件开关。

3

同上

RT_USBH_MSTORAGE / RT_USBH_HID / RT_USBH_RNDIS

按实际外设选择 U 盘、HID 或 RNDIS;RNDIS 会显示并默认启用 RT_USBH_RNDIS_DEV

../../_images/usb_host_1.png ../../_images/usb_host_2.png

注意

SF32LB55X 仅支持 USB Device,不支持 USB Host;请勿在该平台配置 BSP_USING_USBH

目前在平台中已经调试完成的应用场景如下:

  • udisk

  • RNDIS

8. 主要特性

  • 56x/52x 芯片拥有 ep0~ep7 8 个通道,其中 ep2~ep4 只支持 rx (即 host 只支持 IN,device 只支持 OUT),ep5~ep7 只支持 tx (即 host 只支持 OUT,device 只支持 IN);

  • 55x 芯片不支持 DMA 模式;只支持 device 模式

  • 58x 芯片 ep0~ep7 8 个通道都支持 IN 与 OUT; 支持高速(HS)、全速模式(FS)

9. USB 使用注意事项

  1. 由于 USB 使用时候 usb 的频率必须在 60MHz 下,因此 usb 在使用的时候不能降频不能睡眠。

//禁止睡眠
rt_pm_request(PM_SLEEP_MODE_IDLE);
//退出禁止睡眠
rt_pm_release(PM_SLEEP_MODE_IDLE);
//禁止降频
rt_pm_hw_device_start();
//退出禁止降频
rt_pm_hw_device_stop();
  1. 由于目前 USB slave 模式下在拔出的时候没有拔出中断,因此需要外部 VBUS 分压到芯片一个 IO 口来作为 USB 的插拔检测。