一个开源跨平台嵌入式USB设备协议:TinyUSB

2024-04-13 07:52

本文主要是介绍一个开源跨平台嵌入式USB设备协议:TinyUSB,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

        TinyUSB 是一个用于嵌入式系统的开源跨平台 USB 主机/设备堆栈,设计为内存安全,无需动态分配,线程安全,所有中断事件都被推迟,然后在非 ISR 任务函数中处理。查看在线文档以获取更多详细信息。

源码链接:GitHub - chjun8/tinyusb: An open source cross-platform USB stack for embedded system

.
├── docs            # Documentation
├── examples        # Examples with make and cmake build system
├── hw
│   ├── bsp         # Supported boards source files
│   └── mcu         # Low level mcu core & peripheral drivers
├── lib             # Sources from 3rd party such as freeRTOS, fatfs ...
├── src             # All sources files for TinyUSB stack itself.
├── test            # Tests: unit test, fuzzing, hardware test
└── tools           # Files used internally

入门

有关使用 TinyUSB 及其实现方式的信息,请参阅在线文档。

我们使用GitHub Discussions作为我们的论坛。这是向社区提出问题和建议或讨论基于 TinyUSB 的项目的好地方。

对于错误和功能请求,请提出问题并遵循那里的模板。

查看入门指南,将 TinyUSB 添加到您的项目或构建示例。如果您是 TinyUSB 的新手,我们建议您从cdc_msc示例开始。

请参阅移植指南以添加对新 MCU 和板的支持。

设备堆栈

通过动态更改 USB 描述符、挂起、恢复和远程唤醒等低功耗功能来支持多种设备配置。支持以下设备类别:

  • 音频等级 2.0 (UAC2)
  • 蓝牙主机控制器接口 (BTH HCI)
  • 通信设备类 (CDC)
  • 设备固件更新 (DFU):DFU 模式 (WIP) 和运行时
  • 人机接口设备 (HID):通用(输入和输出)、键盘、鼠标、游戏手柄等...
  • 海量存储类 (MSC):具有多个 LUN
  • 乐器数字接口 (MIDI)
  • 与 RNDIS 网络、以太网控制模型 (ECM)、网络控制模型 (NCM)
  • 测试与测量类 (USBTMC)
  • 视频等级 1.5 (UVC):正在进行中
  • 具有通用输入和输出端点的供应商特定类支持。可与 MS OS 2.0 兼容描述符一起使用,无需 INF 文件即可加载 winUSB 驱动程序。
  • 具有供应商特定类的WebUSB

如果您有特殊要求,可以使用usbd_app_driver_get_cb()编写自己的类驱动程序,而无需修改堆栈。以下是 RPi 团队如何添加重置接口raspberrypi/pico-sdk#197

主机堆栈

  • 人机接口设备 (HID):键盘、鼠标、通用
  • 海量存储类 (MSC)
  • 通信设备类别:CDC-ACM
  • 通过 USB 的供应商串行:FTDI、CP210x
  • 具有多级支持的集线器

与设备堆栈类似,如果您有特殊要求,可以使用usbh_app_driver_get_cb()编写自己的类驱动程序,而无需修改堆栈。

TypeC PD 堆栈

  • 支持 USB Type-C 的供电 3.0 (PD3.0) (WIP)
  • 超早期阶段,仅用于测试目的
  • 仅支持STM32 G4

操作系统抽象层

TinyUSB 是完全线程安全的,它将所有中断服务请求 (ISR) 事件推送到中央队列,然后在非 ISR 上下文任务函数中对其进行处理。它还使用信号量/互斥体来访问共享资源,例如通信设备类 (CDC) FIFO。因此,堆栈需要使用操作系统的一些基本 API。以下操作系统已经得到开箱即用的支持。

  • 无操作系统
  • 自由实时操作系统
  • RT-Thread:回购协议
  • Mynewt由于 newt 包构建系统,Mynewt 示例最好位于其自己的存储库中

支持的CPU

支持以下 CPU,请查看支持的设备以获取每个 CPU 的驱动程序和功能的完整列表。

支持以下 CPU,请查看支持的设备以获取每个 CPU 的驱动程序和功能的完整列表。

制造商家庭
全志F1C100/F1C200
模拟MAX3421E(USB主机扩展板)
布里格泰克FT90x
博通BCM2711、BCM2837
对话DA1469x
乐鑫ESP32 S2、S3
兆易创新GD32VF103
英飞凌XMC4500

微芯片

萨姆 | D11、D21、D51、E5x、G55、L2x、E7x、S7x、V7x

---+-------------------------------------------------------- ----------+

图片| 24、32mm、32mk、32mx、32mz、dsPIC33

心灵感应毫米32
北欧半导体nRF52833、nRF52840、nRF5340
新唐NUC 120, 121, 125, 126, 505

恩智浦

iMXRT | RT10xx、RT11xx

------+---------------------------------------- ----------+

动力学|吉隆坡,K32L2

------+---------------------------------------- ----------+

液化石油气 | 11u、13、15、17、18、40、43、51u、54、55

------+---------------------------------------- ----------+

MCX | A15、N9

树莓派RP2040
瑞萨接收| 63N、65N、72N
RA | 4M1、4M3、6M1、6M5
西拉布斯EFM32GG12
索尼CXD56
意法半导体STM32F0、F1、F2、F3、F4、F7、H7、G0、G4、L0、L1、L4、L4+ U5、WB
TIMSP430、MSP432E4、TM4C123
价USB埃普特里
世界卫生大会CH32F20x、CH32V307、

执照

文件夹中的所有 TinyUSB 源src均已获得 MIT 许可证的许可,完整许可证位于此处。但是,每个文件都可以单独许可,尤其是libhw/mcu文件夹中的文件。请确保您了解项目中使用的文件的所有许可条款。

文档

  • 信息
    • 用途
    • 变更日志
    • 贡献者
  • 参考
    • 支持的设备
    • 入门
    • 依赖关系
    • 并发性
  • 贡献
    • 行为守则
    • 结构
    • 移植

 移植教程,后续补上,蟹蟹参阅!!!

STM32 移植参考文章:

1、TinyUSB 基本使用 – TaterLi 个人博客

2、【RT-Thread】 TinyUSB挂载成U盘和文件系统,基于STM32F405RG-CSDN博客

ESP32 移植参考文章:4. ESP32S3 使用USB 加载SD_SDIO 当作 U盘使用_esp32的usb使用-CSDN博客 

MM32 移植参考文章:基于 TinyUSB 协议栈实现 CMSIS-DAP_开源usb协议栈-CSDN博客

这篇关于一个开源跨平台嵌入式USB设备协议:TinyUSB的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/899562

相关文章

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅