CherryUSB开发者指南:如何为你的嵌入式平台移植高性能USB协议栈

【免费下载链接】CherryUSB CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统(带 USB IP)的高性能 USB 主从协议栈 【免费下载链接】CherryUSB 项目地址: https://gitcode.com/cherry-embedded/CherryUSB

CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统(带 USB IP)的高性能 USB 主从协议栈。本文将为开发者提供一份全面指南,帮助你快速将 CherryUSB 协议栈移植到自己的嵌入式平台,充分利用其高性能和跨平台特性。

📋 移植前准备工作

在开始移植前,请确保你已准备好以下环境和工具:

  • 一个可以正常打印 "helloworld" 的基础工程(用于 Device 模式)
  • 支持 OS 调度的工程环境(用于 Host 模式)
  • 芯片手册中关于 USB IP 的详细说明文档
  • CherryUSB 源码(可通过 git clone https://gitcode.com/cherry-embedded/CherryUSB 获取)

🔌 USB Device 模式移植步骤

1. 源码集成与配置

首先将 CherryUSB 源码拷贝到你的工程目录,并添加必要的源文件和头文件路径。核心文件包括:

  • usbd_core.c(设备核心实现)
  • usb_dc_xxx.c(对应芯片 USB IP 的设备控制器驱动,可在 port/ 目录下查找支持的 USB IP 驱动)

然后拷贝配置模板文件:

cp cherryusb_config_template.h your_project/usb_config.h

2. 硬件初始化实现

实现 usb_dc_low_level_init 函数,负责 USB 时钟、引脚和中断的初始化。以下是一个 STM32 平台的初始化示例:

STM32 USB初始化代码示例

该函数需要完成:

  • GPIO 引脚配置(DM/DP 引脚设置为复用功能)
  • USB 时钟使能(确保时钟频率符合 USB 规范)
  • 中断优先级配置和使能

3. 中断处理与协议栈初始化

在芯片的 USB 中断服务程序中调用协议栈的中断处理函数:

void OTG_HS_IRQHandler(void) {
  USBD_IRQHandler(0); // busid 从 0 开始
}

最后注册设备描述符并初始化协议栈:

usbd_desc_register(&usbd_desc);
usbd_initialize(0, USB_OTG_HS_PERIPH_BASE);

🖥️ USB Host 模式移植要点

1. 核心文件与 OS 适配

Host 模式需要添加以下核心文件:

  • usbh_core.c(主机核心实现)
  • usb_hc_xxx.c(对应芯片 USB IP 的主机控制器驱动)
  • OS 适配文件(如 osal/usb_osal_freertos.c 或其他 OS 对应的文件)

2. 主机控制器初始化

实现 usb_hc_low_level_init 函数,完成主机模式下的硬件初始化。与 Device 模式类似,需要配置时钟、引脚和中断,但需注意主机模式特有的硬件要求。

3. 链接脚本修改

使用 GCC 编译时,需在链接脚本中添加 class 信息存储段:

/* 在 ld 文件中添加 */
. = ALIGN(4);
__usbh_class_info_start__ = .;
KEEP(*(.usbh_class_info))
__usbh_class_info_end__ = .;

⚡ 性能优化配置

Cache 配置(针对带 Cache 的芯片)

CherryUSB 使用 USB_NOCACHE_RAM_SECTION 宏定义非缓存区域,需在链接脚本中添加对应段:

/* GCC 链接脚本示例 */
RAM_nocache (xrw) : ORIGIN = 0x20030000, LENGTH = 64K
._nocache_ram : {
  . = ALIGN(4);
  *(.noncacheable)
} > RAM_nocache

同时需要配置 MPU 使该区域为非缓存,确保 USB 数据传输的正确性。

性能测试结果

CherryUSB 经过优化后可实现高性能传输,以下是 MSC 设备模式下的速度测试结果:

CherryUSB MSC 性能测试

📚 硬件设计参考

USB 硬件设计对协议栈稳定性至关重要,以下是一个参考的 USB OTG 硬件原理图:

USB OTG 硬件参考设计

关键设计要点:

  • 确保 VBUS 供电稳定(建议添加 22uF 电容)
  • DM/DP 线上添加 ESD 保护器件
  • 差分线阻抗控制在 90Ω±10%

📝 移植验证与调试

移植完成后,建议从简单的示例开始验证:

  1. Device 模式:使用 demo/cdc_acm_template.c 测试 CDC-ACM 功能
  2. Host 模式:使用 demo/usb_host.c 测试 USB 主机枚举

可通过 USB 协议分析仪抓取总线数据,或使用串口打印调试信息定位问题。

🎯 总结

CherryUSB 凭借其模块化设计和丰富的驱动支持,使得 USB 协议栈移植过程变得简单高效。通过本文介绍的步骤,你可以快速将 CherryUSB 集成到自己的嵌入式平台,为项目添加可靠的 USB 功能。更多详细信息请参考 docs/zh/quick_start/transplant.rst 官方移植文档。

希望这份指南能帮助你顺利完成 CherryUSB 的移植工作,如有任何问题,欢迎参与项目讨论和贡献!

【免费下载链接】CherryUSB CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统(带 USB IP)的高性能 USB 主从协议栈 【免费下载链接】CherryUSB 项目地址: https://gitcode.com/cherry-embedded/CherryUSB

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐