USB¶
本文说明本章节功能的接入方式、关键源码和应用参考,帮助开发者快速完成集成。
1. 参考代码¶
文件 |
作用 |
|---|---|
|
检测 USB 插拔状态并通知业务层 |
|
实现 USB Mass Storage 模式的数据访问流程 |
|
通过 USB 通道接收并触发 OTA 升级 |
2. 应用例程¶
场景 |
文件 |
调用接口 |
|---|---|---|
USB 存储弹窗 |
|
|
该文档围绕 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 |
|
|
USB Device 硬件开关。打开后会选中 |
2 |
|
|
USB 设备协议栈。先打开第 1 步硬件开关,再选择 CDC、Mass Storage、HID、Printer、RNDIS、ECM 或 WinUSB。 |
3 |
同上 |
|
配置设备 VID/PID,默认分别为 |
注意
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 |
|
|
USB Host 硬件开关。打开后会选中 |
2 |
|
|
USB Host 协议栈。先打开第 1 步硬件开关。 |
3 |
同上 |
|
按实际外设选择 U 盘、HID 或 RNDIS;RNDIS 会显示并默认启用 |
注意
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 使用注意事项¶
由于 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();
由于目前 USB slave 模式下在拔出的时候没有拔出中断,因此需要外部 VBUS 分压到芯片一个 IO 口来作为 USB 的插拔检测。