CherryUSB与RT-Thread无缝集成:构建高效嵌入式系统

【免费下载链接】CherryUSB CherryUSB is a tiny and portable USB Stack (device & host) for embedded system with USB IP 【免费下载链接】CherryUSB 项目地址: https://gitcode.com/gh_mirrors/ch/CherryUSB

CherryUSB是一款超轻量级、高度可移植的USB协议栈,支持设备模式和主机模式,专为嵌入式系统设计。当它与RT-Thread实时操作系统无缝集成时,能为开发者提供强大而灵活的USB解决方案,轻松实现各类USB设备和主机功能。本文将详细介绍如何在RT-Thread环境中快速配置和使用CherryUSB,打造高效稳定的嵌入式USB应用。

为什么选择CherryUSB与RT-Thread组合?

CherryUSB与RT-Thread的结合为嵌入式开发带来诸多优势:

  • 轻量级设计:CherryUSB内核代码量不足10KB,内存占用极小,完美适配RT-Thread的资源受限场景
  • 丰富的USB类支持:内置CDC、HID、MSC、AUDIO、VIDEO等多种标准USB类驱动
  • 高度可移植性:支持多种USB IP核(如DWC2、EHCI、OHCI等),适配众多主流MCU
  • RT-Thread软件包支持:通过RT-Thread包管理器可一键集成,简化开发流程
  • 完善的文档和示例:提供详尽的配置指南和丰富的demo模板,加速开发过程

快速开始:在RT-Thread中配置CherryUSB

环境准备

首先确保已安装RT-Thread开发环境和Env工具。通过以下命令获取CherryUSB源码:

git clone https://gitcode.com/gh_mirrors/ch/CherryUSB

从机模式配置步骤

  1. 打开Env工具,进入项目目录,输入menuconfig命令
  2. 导航至RT-Thread online packages → system packages → CherryUSB
  3. 选择Enable usb device mode,进入配置子菜单

RT-Thread中配置CherryUSB从机模式

  1. 配置项说明:

    • 选择USB速度(FS/HS)
    • 选择USB Device IP(根据芯片型号)
    • 启用所需的USB类功能(如CDC ACM、HID、MSC等)
    • 选择是否使用demo模板
  2. 保存配置并退出menuconfig

  3. 拷贝配置模板文件:

cp cherryusb_config_template.h usb_config.h
  1. usb_config.h中添加RT-Thread相关配置:
#include "rtthread.h"
#define CONFIG_USB_PRINTF(...) rt_kprintf(__VA_ARGS__)

主机模式配置步骤

  1. 同样通过menuconfig进入CherryUSB配置
  2. 选择Enable usb host mode,进入配置子菜单

RT-Thread中配置CherryUSB主机模式

  1. 配置项说明:

    • 选择USB Host IP
    • 启用所需的主机端class驱动
    • 配置中断处理和内存管理参数
  2. 保存配置并按从机模式相同方式处理配置文件

核心功能与代码示例

1. USB主机模式初始化

CherryUSB在RT-Thread中提供了便捷的命令行工具,通过MSH(RT-Thread命令行)可以直接操作USB主机功能:

// 代码位置:platform/rtthread/usb_msh.c
MSH_CMD_EXPORT(usbh_init, init usb host);
MSH_CMD_EXPORT(usbh_deinit, deinit usb host);
MSH_CMD_EXPORT(lsusb, ls usb devices);

在RT-Thread终端中执行:

usbh_init 0 0x40005000  # 初始化USB主机,busid=0,寄存器基地址=0x40005000
lsusb                   # 列出已连接的USB设备

2. ADB功能配置

通过简单配置即可启用ADB功能,实现PC与嵌入式设备的调试交互:

配置ADB功能

启用ADB后,可以通过USB连接实现类似串口的调试功能,甚至可以运行shell命令,极大方便了开发调试过程。

3. 常用USB类应用示例

CherryUSB为RT-Thread提供了丰富的USB类驱动示例:

高级应用与优化

中断处理

在RT-Thread中断服务程序中调用CherryUSB中断处理函数:

void USB_IRQHandler(void)
{
    USBD_IRQHandler(0);  // 从机模式
    // 或
    USBH_IRQHandler(0);  // 主机模式
}

内存优化

CherryUSB与RT-Thread内存管理无缝集成,可通过以下配置优化内存使用:

#define CONFIG_USBDEV_EP_MAX_NUM 8        // 调整端点数量
#define CONFIG_USBDEV_RX_FIFO_SIZE 512    // 调整接收FIFO大小
#define CONFIG_USBDEV_TX_FIFO_SIZE 512    // 调整发送FIFO大小

缓存处理

对于带缓存的处理器,需要实现缓存操作接口,确保USB数据的一致性:

void usb_dcache_clean(void *addr, uint32_t len)
{
    rt_hw_dcache_clean(addr, len);
}

void usb_dcache_invalid(void *addr, uint32_t len)
{
    rt_hw_dcache_invalid(addr, len);
}

总结

CherryUSB与RT-Thread的完美结合,为嵌入式开发者提供了一个功能强大、易于使用的USB解决方案。通过RT-Thread的menuconfig工具,可以轻松配置CherryUSB的各种功能,快速实现USB设备和主机应用。无论是简单的虚拟串口、USB存储,还是复杂的USB视频、音频应用,CherryUSB都能提供稳定高效的支持。

如果你正在寻找一个轻量级、高兼容性的嵌入式USB协议栈,不妨尝试CherryUSB与RT-Thread的组合,体验它们带来的开发便利和性能优势!

官方文档:docs/zh/quick_start/rtthread.rst 示例代码:demo/ RT-Thread适配代码:platform/rtthread/

【免费下载链接】CherryUSB CherryUSB is a tiny and portable USB Stack (device & host) for embedded system with USB IP 【免费下载链接】CherryUSB 项目地址: https://gitcode.com/gh_mirrors/ch/CherryUSB

Logo

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

更多推荐