CherryUSB是一种轻量级的开源USB设备/主机协议栈,适用于具有一个或多个USB接口的嵌入式系统。它目前已经能应用于各类驱动程序了,例如CDC、HID、MSC、音频、视频等。
显然CherryUSB协议栈是Boufallo Lab SDK的一部分(例如用于BL702 MCU),而且它已经在WCH CH32V307 RISC-V MCU、意法半导体STM32F4、新塘NUC442 Cortex-M4微控制器,以及EastSoft ES32F3和 MindMotion MM32L3xx这两个从未听说过的Arm Cortex-M3微控制器上进行过移植和测试了。

CherryUSB设备协议栈的亮点:
- 支持0全速和高速
- 端点中断回调
- USB类支持
- 复合设备
- 通信设备类(CDC)
- 人机接口设备(HID),包括“自定义HID”
- 大容量存储类(MSC)
- USB视频类(UVC1.0,UVC1.5)
- USB音频类(UAC1.0、UAC2.0)
- 设备固件升级类(DFU)
- MIDI类(MIDI)
- 测试和测量类(TMC)
- 供应商类
- 远程NDIS (RNDIS)支持
- 支持WinUSB 1.0、WinUSB 2.0 with BOS(二进制设备对象存储)
CherryUSB的USB类设备堆栈内核使用的是3045字节的闪存和373字节的RAM,而HID类则需要额外的784字节存储空间和201字节RAM。目前我还不知道这些数据具体是基于哪些芯片的,但至少可以做个简单参考。
CherryUSB主机协议栈的特性:
- 自动加载支持的类驱动程序
- 复合设备
- 通信设备类(CDC)
- 人机接口设备(HID)
- 大容量存储类(MSC)
- 供应商类
- 同步和异步传输
- 多级HUB支持,最多可扩展到7级
- 支持远程NDIS(RNDIS)
对了,我目前也还不知晓主机堆栈占用的资源情况。
他们的源代码可以在Github上找到,开源许可协议是Apache 2.0 。他们的Github上还有一个用于生成USB描述符的图形配置工具。他们的文档也是可使用的,不过暂时只有中文版本。此外,我还注意到了他们一些关于RT-Thread RTOS的说明,因此除了介绍中提供的列表之外,该协议栈应该也可以支持其他的微控制器。

文章翻译者:Taylor Lee,瑞科慧联(RAK)高级嵌入式开发工程师,有丰富的物联网和开源软硬件经验,熟悉行业主流软硬件框架,对行业发展动向有着敏锐的感知力和捕捉能力。