关注+星标公众号,不错过精彩内容
来源 | RT-Thread操作系统
CherryUSB 提供了完整的 USB 协议支持,具备以下核心能力:
1、双模式支持:同时支持 USB 设备模式(Device)和主机模式(Host),可灵活应用于不同场景 。
2、丰富的类驱动:内置多种常用 USB 设备类驱动,包括:
通信设备类(CDC-ACM/ECM/NCM):用于虚拟串口、网络适配 。
人机接口设备(HID):支持键盘、鼠标、游戏手柄 。
大容量存储(MSC):支持 U 盘、SD 卡读写 。
音视频类(UVC/UAC):支持摄像头、麦克风、扬声器 。
其他类:支持 DFU(固件升级)、RNDIS(网络共享)、MIDI 等 。
3、高性能传输:采用零拷贝 DMA 技术和硬件自动分包机制,最大化利用 USB 硬件带宽,接近理论传输速度 。
4、跨平台兼容:支持 FreeRTOS、RT-Thread、Zephyr 等主流 RTOS,以及裸机环境 。
源码仓库:https://github.com/cherry-embedded/CherryUSB官方文档:https://cherryusb.readthedocs.io/zh-cn/latest

背景
CherryUSB 在 commit faf9360 正式支持 Renesas RA 系列
硬件:RT-Thread RA8P1 Titan Board(Cortex-M85,1GHz)
软件:e2studio + GCC(arm-none-eabi-gcc)
之前做过 RZN2L 移植 CherryUSB 和瑞萨 USB IP 性能对比,这次继续相关测试
CherryUSB 文件选择与编译
需要编译的源文件
先用笨办法,将整个 CherryUSB 文件夹加入 e2studio 工程(方便后续直接替换),然后排除不需要的文件。实际需要编译的只有:
分类 | 文件 | 说明 |
Core | core/usbd_core.c | USB 设备 核心栈 |
Class | class/cdc/usbd_cdc_acm.c | CDC ACM 类驱动 |
Port | port/renesas/device/usb_dc_rensas.c | RA USB DCD 驱动 |
Port | port/renesas/device/r_usb_device.c | Renesas FSP USB 设备 HAL |
对应的包含路径需要添加:
CherryUSB
CherryUSB/common
CherryUSB/core
CherryUSB/port/renesas
CherryUSB/port/renesas/device
排除方法
e2studio 的多选排除编译功能不太好用(不支持 Shift/Ctrl 多选后批量 Exclude from build)。推荐逐个文件右键 → Resource Configuration → Exclude from build。或者直接在 .cproject 中手动编辑排除规则。
排除类别
说明
全部排除再逐个添加
整个 CherryUSB 文件夹 Exclude,再对上述 4 个 .c 文件取消 Exclude
保留 demo
demo/
目录是模板参考,不需要编译
osal
当前只做 Device 模式,osal 文件不需要(CherryUSB 设备栈不依赖 OSAL)
usb_config.h 关键配置
通过注释/取消注释 CONFIG_USB_HS 切换 Full-Speed / High-Speed。
测试代码
设备端
src/examples/cdc_acm_descriptor.c
— USB 描述符(VID 0x0483, PID 0x5720)
src/examples/cdc_acm_example.c
— CDC ACM 端点处理与初始化
src/hal_entry.c
— 主入口,通过 R_IOPORT_PinWrite(IO_PORT_04_PIN_13) 切换 FS/HS
FS/HS 切换逻辑:
上位机测试脚本
test_cdc_speed.py 增加了命令行参数,不带参数使用默认 COM,带参数使用指定 COM:
用法:
Titan Board 特殊说明
调试接口
排除类别
说明
调试器
DAPLink(CMSIS-DAP),无法直接在 e2studio 调试和下载
替代方案
移植 RT-Thread Studio 的
pyocd,编写 pyocd_flash.bat,运行bat脚本即下载固件
进阶
也可将 DAPLink 烧录为
JLinkOB,使用 JLink 调试
pyocd 烧录命令:
UART 调试口
Titan Board 的调试串口连接的是 UART8,与官方开发板不同。
USB FS/HS 引脚切换
RA8P1 的 USB 全速和高速使用不同的引脚,官方板使用 2 个 USB 端口(Type-C 各一)。Titan Board 通过 GPIO 4_13 控制模拟开关切换:
模式 | GPIO 4_13 | USB 基址 |
Full-Speed | 0 | R_USB_FS0 _BASE |
High-Speed | 1 | R_USB_HS0 _BASE |
软件中通过宏 CONFIG_USB_HS 配合切换。
性能测试结果
Full-Speed
High-Speed
结果分析
模式 | OUT (Host→Device) | IN (Device→Host) |
Full-Speed | 0.81 MB/s | 0.41 MB/s |
High-Speed | 6.07 MB/s | 6.26 MB/s |
------------ END ------------