《快看!CherryUSB这个小而美的“宝藏”,高性能USB主从协议栈,嵌入式系统必备,移植超简单!》

Linux阅码场 2025-04-16 21:43

CherryUSB

CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统(带 USB IP)的高性能 USB 主从协议栈。

为什么选择 CherryUSB        

易于学习 USB        

为了方便用户学习 USB 基本知识、枚举、驱动加载、IP 驱动,因此,编写的代码具备以下优点:

-代码精简,逻辑简单,无复杂 C 语言语法

-树状化编程,代码层层递进    

-Class 驱动和 porting 驱动模板化、精简化

-API 分类清晰(从机:初始化、注册类、命令回调类、数据收发类;主机:初始化、查找类、数据收发类)    

易于使用 USB        

为了方便用户使用 USB 接口,考虑到用户学习过 uart 和 dma,因此,设计的数据收发类接口具备以下优点:

-等价于使用 uart tx dma/uart rx dma

-收发长度没有限制,用户不需要关心 USB 分包过程(分包过程在 porting 中处理)

易于发挥 USB 性能        

考虑到 USB 性能问题,尽量达到 USB 硬件理论带宽,因此,设计的数据收发类接口具备以下优点:

-Porting 驱动直接对接寄存器,无抽象层封装

-Memory zero copy

-IP 如果带 DMA 则使用 DMA 模式(DMA 带硬件分包功能)

-长度无限制,方便对接硬件 DMA 并且发挥 DMA 的优势

-分包过程在中断中执行

目录结构        

目录名

描述

class

usb class 类主从驱动

common

usb spec 定义、常用宏、标准接口定义

core

usb 主从协议栈核心实现

demo        

主从 class demo

docs

文档

osal

os 封装层

platform

其他 os 全家桶适配

port

usb 主从需要实现的 porting 接口

tools

工具链接

Device 协议栈简介        

CherryUSB Device 协议栈对标准设备请求、CLASS 请求、VENDOR 请求以及 custom 特殊请求规范了一套统一的函数框架,采用面向对象和链表的方式,能够使得用户快速上手复合设备,不用管底层的逻辑。同时,规范了一套标准的 dcd porting 接口,用于适配不同的 USB IP,达到面向 ip 编程。

CherryUSB Device 协议栈当前实现以下功能:

-支持 USB2.0 全速和高速设备(USB3.0 超高速 TODO)

-支持端点中断注册功能,porting 给用户自己处理中断里的数据    

-支持复合设备

-支持 Communication Device Class (CDC_ACM, CDC_ECM)

-支持 Human Interface Device (HID)

-支持 Mass Storage Class (MSC)

-支持 USB VIDEO CLASS (UVC1.0、UVC1.5)

-支持 USB AUDIO CLASS (UAC1.0、UAC2.0)

-支持 Device Firmware Upgrade CLASS (DFU)

-支持 USB MIDI CLASS (MIDI)    

-支持 Remote NDIS (RNDIS)

-支持 WINUSB1.0、WINUSB2.0、WEBUSB、BOS

-支持 Vendor 类 class

-支持 UF2

-支持 Android Debug Bridge (Only support shell)

-支持相同 USB IP 的多从机

CherryUSB Device 协议栈资源占用说明(GCC 10.2 with -O2):

file

FLASH (Byte)

No Cache RAM (Byte)

RAM (Byte)

Heap (Byte)

usbd_core.c

~4400

512(default) + 320

0

0

usbd_cdc_acm.c

~400

0

0

0

usbd_msc.c

~3800

128 + 512(default)

16

0

usbd_hid.c

~360

0

0

0

usbd_audio.c

~1500

0

0

0

usbd_video.c

~2600

0

84

0

usbd_rndis.c

~2100

2 * 1580(default)+156+8

76

0

Host 协议栈简介        

CherryUSB Host 协议栈对挂载在 root hub、外部 hub 上的设备规范了一套标准的枚举实现,对不同的 Class 类也规范了一套标准接口,用来指示在枚举后和断开连接后该 Class 驱动需要做的事情。同时,规范了一套标准的 hcd porting 接口,用于适配不同的 USB IP,达到面向 IP 编程。最后,协议栈使用 OS 管理,并提供了 osal 用来适配不同的 os。    

CherryUSB Host 协议栈当前实现以下功能:

-支持 USB2.0 full speed 和 high speed(USB3.0 TODO)

-自动加载支持的Class 驱动

-支持阻塞式传输和异步传输    

-支持复合设备

-支持多级 HUB,最高可拓展到 7 级(目前测试 1拖 10 没有问题,仅支持 dwc2/ehci/xhci/rp2040)

-支持 Communication Device Class (CDC_ACM, CDC_ECM)

-支持 Human Interface Device (HID)

-支持 Mass Storage Class (MSC)

-Support USB Video CLASS (UVC1.0、UVC1.5)

-Support USB Audio CLASS (UAC1.0)

-支持 Remote NDIS (RNDIS)

-支持 USB Bluetooth (支持 nimble and zephyr bluetooth 协议栈,支持 CLASS: 0xE0 或者厂家自定义类,类似于 cdc acm 功能)

-支持 Vendor 类 class (serial, net, wifi)

-支持 USB modeswitch

-支持 Android Open Accessory

-支持相同 USB IP 的多主机    

同时,CherryUSB Host 协议栈还提供了 lsusb 的功能,借助 shell 插件可以查看所有挂载设备的信息,包括外部 hub 上的设备的信息。

CherryUSB Host 协议栈资源占用说明(GCC 10.2 with -O2):

file

FLASH (Byte)

No Cache RAM (Byte)

RAM (Byte)

Heap (Byte)

usbh_core.c

~9000

512 + 8 * (1+x) *n

28

raw_config_desc

usbh_hub.c

~6000

32 + 4 * (1+x)

12 + sizeof(struct usbh_hub) * (1+x)

0

usbh_cdc_acm.c

~900

7

4  + sizeof(struct usbh_cdc_acm) * x

0

usbh_msc.c

~2700

64

4  + sizeof(struct usbh_msc) * x

0

usbh_hid.c

~1400

256

4  + sizeof(struct usbh_hid) * x

0

usbh_video.c

~3800

128

4  + sizeof(struct usbh_video) * x

0

usbh_audio.c

~4100

128

4  + sizeof(struct usbh_audio) * x

0

usbh_rndis.c        

~4200

512 + 2 * 2048(default)

sizeof(struct usbh_rndis) * 1

0

usbh_cdc_ecm.c

~2200

2 * 1514 + 16

sizeof(struct usbh_cdc_ecm) * 1

0

usbh_cdc_ncm.c

~3300

2 * 2048(default) + 16 + 32

sizeof(struct usbh_cdc_ncm) * 1

0

usbh_bluetooth.c

~1000

2 * 2048(default)

sizeof(struct usbh_bluetooth) * 1

0

其中,sizeof(struct usbh_hub) 和 sizeof(struct usbh_hubport) 受以下宏影响:    

#define CONFIG_USBHOST_MAX_EXTHUBS          1          #define CONFIG_USBHOST_MAX_EHPORTS          4          #define CONFIG_USBHOST_MAX_INTERFACES       8          #define CONFIG_USBHOST_MAX_INTF_ALTSETTINGS 8          #define CONFIG_USBHOST_MAX_ENDPOINTS        4

x 受以下宏影响:

#define CONFIG_USBHOST_MAX_CDC_ACM_CLASS 4          #define CONFIG_USBHOST_MAX_HID_CLASS     4          #define CONFIG_USBHOST_MAX_MSC_CLASS     2          #define CONFIG_USBHOST_MAX_AUDIO_CLASS   1          #define CONFIG_USBHOST_MAX_VIDEO_CLASS   1

USB IP 支持情况        

仅列举标准 USB IP 和商业性 USB IP

IP

device

host

Support status

OHCI(intel)

none

OHCI

EHCI(intel)

none

EHCI

XHCI(intel)

none

XHCI

UHCI(intel)

none

UHCI

×

DWC2(synopsys)

DWC2

DWC2

MUSB(mentor)

MUSB

MUSB

FOTG210(faraday)

FOTG210

EHCI

CHIPIDEA(synopsys)

CHIPIDEA

EHCI

CDNS2(cadence)

CDNS2

CDNS2

CDNS3(cadence)

CDNS3

XHCI

×

DWC3(synopsys)

DWC3

XHCI

×

文档教程        

CherryUSB 快速入门、USB 基本概念、API 手册、Class 基本概念和例程,参考 CherryUSB Documentation Tutorial    

视频教程        

基于 V1.4.3:https://www.bilibili.com/cheese/play/ss707687201

描述符生成工具        

TODO

示例仓库        

Manufacturer

CHIP or Series

USB IP

Repo Url

Support version

Support status

Bouffalolab

BL702/BL616/BL808

bouffalolab/ehci

bouffalo_sdk

<= latest

Long-term

ST

STM32F1x

fsdev

stm32_repo

<= latest

Long-term

ST

STM32F4/STM32H7

dwc2

stm32_repo

<= latest

Long-term

HPMicro

HPM6000/HPM5000

hpm/ehci

hpm_sdk

<= latest

Long-term

Essemi

ES32F36xx

musb

es32f369_repo

<= latest

Long-term

Phytium

e2000

pusb2/xhci

phytium_repo

>=1.4.0

Long-term

Artinchip

d12x/d13x/d21x

aic/ehci/ohci

luban-lite

<= latest        

Long-term

Espressif

esp32s2/esp32s3/esp32p4

dwc2

esp32_repo

<= latest

Long-term

NXP

mcx

kinetis/chipidea/ehci

nxp_mcx_repo

<= latest

Long-term

Kendryte

k230

dwc2

k230_repo

v1.2.0

Long-term

Raspberry pi

rp2040/rp2350

rp2040

pico-examples

<= latest

Long-term

AllwinnerTech        

F1C100S/F1C200S

musb

cherryusb_rtt_f1c100s

<= latest

the same with musb

Bekencorp

bk7256/bk7258

musb

bk_idk

v0.7.0

the same with musb

Sophgo

cv18xx

dwc2

cvi_alios_open

v0.7.0

TBD

WCH

CH32V307/ch58x

ch32_usbfs/ch32_usbhs/ch58x

wch_repo

<= v0.10.2        

TBD

软件包支持        

CherryUSB 软件包可以通过以下方式获取:

-RT-Thread

-YOC

-ESP-Registry

商业支持        

参考 https://cherryusb.readthedocs.io/zh-cn/latest/support/index.html 。


支持企业        

感谢以下企业支持(顺序不分先后):    

          

 

    

联系  

扫描二维码加入技术交流群  

加小月微信:


Linux阅码场 专业的Linux技术社区和Linux操作系统学习平台,内容涉及Linux内核,Linux内存管理,Linux进程管理,Linux文件系统和IO,Linux性能调优,Linux设备驱动以及Linux虚拟化和云计算等各方各面.
评论
  • 在现代影像技术的快速发展下,动态范围(Dynamic Range)成为评估影像质量的重要指针之一。无论是无人机在高空拍摄的画面、工作用相机在不同光线条件下的成像表现、还是随身记录仪在运动过程中的稳定录像,「动态范围」的数值高低直接影响画面的清晰度与细节还原能力。然而,拍摄环境中的极端条件,如耀眼的阳光、深沉的阴影或快速变化的光线,都对产品的影像拍摄提出了严峻的挑战。技术难题:不同环境下对影像设备的质量影响本次分享一家网络监控摄影机(Network Cameras) 制造厂商,经常收到客诉提到:在
    百佳泰测试实验室 2025-05-16 14:43 191浏览
  •   全球仿真软件头部企业核心实力与行业地位解析   仿真软件行业的竞争格局随技术迭代和市场需求动态演变,以下从技术优势、行业应用等维度,梳理全球范围内具备标杆意义的企业:   1. 华盛恒辉科技有限公司   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP
    华盛恒辉l58ll334744 2025-05-16 11:37 153浏览
  •   北京仿真软件开发代表性企业解析   北京作为国内仿真技术创新高地,集聚多家深耕细分领域的领先企业,其技术布局与行业适配性各具特色。以下为核心企业的优势解析及选型参考:   一、华盛恒辉科技有限公司   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,
    华盛恒辉l58ll334744 2025-05-16 16:00 180浏览
  • 什么是信号量信号量能干啥信号量的函数实例举例总结什么是信号量简而言之,就是发出通知,接收通知的任务获得通知后去干啥啥。通知有多有少。自定义通知数量的,叫计数型信号量;只有有无(即“0”,“1”)通知的,叫二进制信号量。信号量能干啥资源管理:控制多个任务对共享资源(如外设、内存块)的访问权限,避免竞争条件任务同步 :实现任务间的时序协调(如等待某个事件完成)中断与任务通信:在中断服务程序(ISR)中快速通知任务处理事件(需使用 xxxFromISR 版本的函数)信号量的函数创建二进制信号量函数原型
    二月半 2025-05-18 20:48 95浏览
  •   全球仿真软件开发代表性企业解析(按领域分类)   仿真软件开发领域覆盖多行业与技术方向,以下按领域梳理国内外具有代表性的企业及其核心特点:   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在仿真软件,教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,系统二次开发,CRM等领域有很多成功案例。   
    华盛恒辉l58ll334744 2025-05-16 10:37 136浏览
  • 公司简介:Ping Identity 是谁?Ping Identity 是全球领先的身份与访问管理(IAM)解决方案提供商,致力于帮助企业安全管理用户身份、控制应用和资源的访问权。作为行业先驱,Ping Identity 的客户遍布全球,其产品广泛应用于金融、医疗、政府等对安全要求极高的行业。然而,作为一家技术驱动型企业,他们同样面临来自软件供应链的安全挑战,特别是在广泛采用开源组件的背景下,如何实现自动化安全管理、降低法律风险并保障客户数据的安全,成为企业可持续发展的关键。挑战:如何保障应用安
    艾体宝IT 2025-05-16 09:35 149浏览
  • 【拆解】+TFT LCD 通用测试仪拆解 目前对于车载行业,显示屏在整车的份额越来越高。各个供应商或者下级供应商都会回针对TFT的开发做规划。那么,在TFT测试方面,他们是如何进行产品开发前的测试和有效性验证的内。是的,无非就是他们公司自己开发点亮治具或者从治具供应商那边购买点亮设备。客户只需要提供客户需求。有能力的供应商就好针对需求进行分解开发。在规定的时间内完成产品的开发和交付。今天我们就来看看用在车载显示屏或者消费电子上面的TFT点亮治具—TFT LCD通用测试仪式怎么设计出来的。 如下就
    zhusx123 2025-05-18 14:07 79浏览
  •   仿真软件开发领域代表性企业概览   在仿真软件开发领域,众多企业以技术特色与行业深耕为核心竞争力,形成差异化布局。以下梳理国内外代表性企业及其核心业务方向:   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,系统二次开发,CRM等领域有很多成功案例。
    华盛恒辉l58ll334744 2025-05-16 10:51 142浏览
  •   全球仿真软件头部企业核心能力与选型指南   仿真软件行业的领先企业因技术路径和行业聚焦不同形成多元格局,以下从技术能力、市场地位及行业适配性角度,解析全球范围内具有标杆意义的代表性企业:   华盛恒辉科技有限公司   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽
    华盛恒辉l58ll334744 2025-05-16 11:13 160浏览
  •   头部技术企业核心能力与行业解决方案解析   华盛恒辉科技有限公司   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,系统二次开发,CRM等领域有很多成功案例。   五木恒润科技有限公司   五木恒润科技有限公司:是一家专业的部队信息化建设服务单位
    华盛恒辉l58ll334744 2025-05-19 17:18 80浏览
  • FM(RDS) 与 DAB 是车用音响领域常见的两种广播接收方式。随着科技的进步,DAB 作为数字音频传输的代表,逐渐受到更多关注。FM(RDS)属于传统的调频广播,透过调变载波的频率来传送声音讯号。RDS(Radio Data System) 则是FM广播的一种辅助技术,可以在FM讯号中夹带额外的文字信息,例如电台名称、节目类型、交通讯息等。DAB(Digital Audio Broadcasting)数字音频传输(DAB)是透过数字化处理广播音频讯号的传输,音质较 FM 清晰,此外,除了一般
    百佳泰测试实验室 2025-05-16 11:06 164浏览
  • 非常荣欣参加了这次《7天造一台无人机》试读体验活动,同时非常感谢面包板论坛举办此活动。本书印刷还是非常新颖,具有精美漫画。下图为图书正面。 本书主要介绍组装、调试一架四旋翼无人机的完整流程,包括组装无人机机架、安装电机和螺旋桨、电池充电保养、安装飞控、飞行前调试,并且在组装、调试过程中依次介绍了飞行原理、动力系统、遥控器、电池、飞控等相关基础知识。 本书共分为7章。第1章首先介绍了无人机学习的一些方法,避免大家在学习无人机时走弯路;然后介绍了无人机的基础知识,并对四旋翼无人机的概念、飞行原理和各
    shenwen2007_656583087 2025-05-17 12:07 60浏览
  • 什么是互斥量互斥量的应用场合互斥量的API函数基本代码结构互斥量使用举例递归锁递归锁举例总结什么是互斥量在freeRTOS中,多个任务访问一块共享资源,会产生竞争现象。比如马路上只有一个很早以前的电话亭,A、B都想要打电话,然后他们就开始打架了。但是如果A先进去了然后把门锁了,B想进去打电话的话只能在外面等,必须等到A把门锁打开。互斥量的应用场合像freeRTOS的多任务系统,任务A正在使用某个资源,还没用完的时候,任务B也来使用,就可能会导致问题。就比如串口,任务A正在用串口发送数据,此时任务
    二月半 2025-05-18 20:54 89浏览
  • ETC系统是一种高速公路或桥梁自动收费系统。插卡式ETC是长这个样子的,正面如下图。背面是有一小块太阳能板的,还有一个按钮开关,如下图。用工具拆开上盖,可以看见电池,显示屏,卡片,如下图。取下PCB板,可以看见背面,如下图。J5,J6脚是接太阳能板的正负极的,SKYRELAY(斯凯瑞利) SKY1311T 读卡器芯片,内部集成了多种通信协议。SKY1311T芯片通过内置的硬件加密引擎和高级加密标准(AES)来实现数据的加密传输,保证数据的安全性。169E 具体的数据手册没有查到,猜测是
    liweicheng 2025-05-17 21:41 90浏览
  • 2025 年 5 月 16 日讯,英伟达首席执行官黄仁勋的专机于北京时间 13:29 抵达中国台北松山机场,其此行引起了广泛关注。黄仁勋此番赴台,主要是为了参加即将于 5 月 20 日至 23 日举行的台北电脑展(Computex 2025),他将在 19 日上午进行主题演讲。此次演讲备受期待,市场猜测其可能会宣布英伟达与富士康、广达等中国台湾地区 AI 服务器公司达成的更多合作,进一步推动 AI 技术的发展和应用。此外,据市场消息,黄仁勋将于 17 日邀请供应链伙伴聚餐,鸿海董事长刘扬伟、纬创
    鲜橙财经 2025-05-16 14:00 209浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦