USB 概述

支持的芯片[ RTL8721Dx ][...]

USB(Universal Serial Bus)是一种通用的串行总线接口,用于连接主机和外部设备。

USB 技术规范可以从网站 http://www.usb.org/developers 获取。

备注

由于 zephyr 官方 USB 协议栈当前只支持设备模式,其中 DWC2 USB 设备驱动只支持专用发送缓存模式, 因此不使用官方源码,而是提供 Realtek 开发的 USB 协议栈。本章节简要介绍 Realtek USB 协议栈,以及如何编译和运行应用示例。

文件目录

├── modules/hal/realtek/ameba/common/usb/source
│  ├── common
│  │   ├── usb_ch9.h
│  │   └── usb_os.h
│  └── device
│     ├── cdc_acm
│     ├── composite
│     ├── hid
│     ├── inic_dplus
│     ├── msc
│     ├── uac
│     ├── vendor
│     └── core
│         └── usbd.h
├── modules/hal/realtek/zephyr/blobs/amebadplus/lib
│   └── lib_usbd.a

特性

  • 兼容 USB2.0 高速(High-speed 480 Mbps)和全速(Full-speed 12 Mbps)模式

  • 支持以下 USB IF 标准主机类驱动:

    • CDC ACM:可用于数据透传

    • CDC ECM:可识别 CDC ECM 设备进行基本通信,或作为桥接器支持 CDC ECM 设备与路由器之间进行网络通信

    • MSC:支持将 U 盘等大容量存储设备挂载到 FatFS 文件系统,实现文件的读写

    • UVC:可连接摄像头,支持 MJPEG、H264、YUV 格式图像截取和视频流转发

  • 支持以下 USB IF 标准设备类驱动:

    • CDC ACM:可用于数据透传或作为虚拟串口

    • HID:可作为 USB 键盘、鼠标等设备,实现人机交互功能

    • MSC:支持 SD 卡或 SRAM 作为存储媒介, 实现数据存储

    • UAC:作为 USB 音频的设备,支持音频录放

  • 支持以下 USB 复合设备类驱动:

    • CDC ACM + HID

    • CDC ACM + UAC

    • HID + UAC

  • 支持 USB 主机和设备双角色动态切换

  • 提供参考设计用于开发者定制 USB 主机和设备

  • 支持设备描述符全定制

    • VID 和 PID

    • 字符串描述符

    • 端点映射

  • 主机/设备核心驱动参数可配置

    • 速度模式

    • DFIFO 深度(仅适用于专用 FIFO 模式)

    • 核心 ISR/线程的优先级

备注

RTL8721Dx 仅支持全速设备模式

硬件配置

  • 支持设备模式

  • 支持 USB 2.0 全速(12 Mbps)模式

  • 支持 DMA 传输模式

  • 设备模式下的端点配置如下:

    • EP0:INOUT,仅用于控制传输

    • EP1:IN

    • EP2:OUT

    • EP3:IN

    • EP4:OUT

    • EP5:INOUT

备注

其中,最多仅支持一个周期性 IN 端点。

  • 共享缓存模式,缓存深度(单位 DWORD)配置如下:

    • 总缓存:最大 768

    • 共享接收缓存:最大 472

    • 共享非周期性发送缓存:最大 32

    • 专用周期性发送缓存:最大 256

备注

DMA 模式下,缓存需要为 DMA 寄存器预留 8 个 DWORD。

软件协议栈概述

协议栈架构如图所示:

各软件模块的功能如下:

  • USB 硬件抽象层: 实现电源管理、PHY 参数校准等 SoC 相关的硬件驱动,为上层 USB 核心驱动提供统一的硬件抽象层接口

  • USB 主机/设备核心驱动:包含 USB IP 相关的硬件驱动、主机/设备控制器驱动、总线枚举和传输调度等核心控制逻辑,为上层 USB 主机/设备类驱动提供统一的核心驱动接口

  • USB 主机/设备类驱动: 兼容 USB2.0 规范的主机/设备类驱动,基于类驱动 API,开发者可快速实现基于标准类的 USB 解决方案

  • USB 主机/设备解决方案示例: 为开发者提供 USB 主机/设备解决方案的设计参考

配置和编译

USB DTS 和 Binding:

  • USB 设备 DTS 定义文件: {sdk}/zephyr/dts/arm/realtek/amebadplus/amebadplus.dtsi

  • USB 设备 binding 定义文件: {sdk}/zephyr/dts/bindings/usb/realtek,ameba-usb.yaml

  • 在 overlay 或 board 级 dts 中使能 USB 节点:

&usb {
   status = "okay";
};

USB menuconfig:

在路径 {sdk} 下,执行以下命令

west build -t menuconfig 或者 ./nuwa.py config

进入 Modules 下的 hal_realtek,然后选择需要使能的 USB 类驱动:

[*] RealTek Ameba Zephyr USB stack
[ ]     CDC ACM device
[ ]     HID device
[ ]     MSC device
[ ]     Composite device

保存并退出。

编译命令:

在路径 {sdk} 下,执行以下命令:

./nuwa.py build -a applications/usb/xxx -d rtl872xda_evb -p

烧录固件:

固件位于路径 {sdk}/images 下,包括以下文件:

km4_boot_all.bin
km0_km4_app.bin

USB 认证

USB 认证一般指 USB-IF 认证,即通过 USB-IF 官方的电气、协议和功能测试,确保设备符合 USB 规范, 以保障设备间的互操作性、安全性和可靠性,认证通过后即可合法使用 USB 标志(如 USB Logo)。

USB-IF 认证非强制性过程,但以下情况必须对 USB 产品进行认证:

  • 产品需要使用 USB 标志

  • 产品宣传资料中宣称符合 USB 规范或提及 USB 认证

关于 USB-IF 认证的具体流程和要求,请查阅 https://www.usb.org 相关文档或联系 USB-IF 授权测试实验室。

与 USB 设备相关的其它认证还有:

  • 在欧美市场销售 USB 设备需要通过 FCC、CE 等认证,否则可能面临法律风险

  • 车载 USB 设备需要通过 ISO 26262 车载电子系统的功能安全认证

  • 为确保 USB 设备与 Windows 系统兼容,或需要在产品包装和宣传材料中使用“Certified for Windows”徽标,需要通过 Windows 徽标认证

  • 苹果专用 USB 设备需要通过 MFi 认证