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

news/2024/5/3 23:55:50

概述

        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博客


http://www.mrgr.cn/p/30803600

相关文章

【VUE】Vue项目打包报告生成:让性能优化触手可及

Vue项目打包报告生成:让性能优化触手可及 Vue.js是一款流行的前端框架,开发者在使用Vue.js构建项目时,生产环境的性能优化尤为重要。为了帮助开发者分析和优化打包出来的资源,生成打包报告是一个不可或缺的步骤。本文将介绍几种在…

某游戏忍者全局过异常分析

虽然这篇文章可能会涉及到某些人的利益,但我还是写了 首先,我们先将手机与ce进行桥接(具体的教程b站有)然后我们先找到a内存的过异常(原理就是将当前怪物包改0,当前市面上广为流传的过异常都是这个原理)我们在ce中添加他的地址查看访问他的操作码(触发他)然后我们看到访…

linux8-ssh远程管理

1.网络配置使用nmtui命令或进入配置文件修改 配置为静态1 vim /etc/sysconfig/network-scripts/ifcfg-ens1602 TYPE=Ethernet3 PROXY_METHOD=none4 BROWSER_ONLY=no5 BOOTPROTO=none6 DEFROUTE=yes7 IPV4_FAILURE_FATAL=no8 IPV6INIT=yes9 IPV6_AUTOCONF=yes 10 IPV6_DEFROUTE=…

Hommie

Hommie靶机IP:192.168.56.115端口扫描 nmap -Pn -sV -sC 192.168.56.115PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 | ftp-syst: | STAT: | FTP server status: | Connected to ::ffff:192.168.56.101 | Logged in as ftp | TYPE: AS…

R语言入门:“Hellinger“转化和“normalize“转化(弦转化)的公式表示与R代码实现

1、写在前面 vegan包中的decostand()函数为群落生态学研究提供了一些流行的(和有效的)标准化方法。有关decostand()函数标准化的一些标准化方法可以看我的另一篇笔记:R语言入门:vegan包使用decostand()函数标准化方法 由于在网络上没有找到关于这两个转…

Devexpress GridControl下拉框实现联动

实现效果1.先在设计界面绑定数据列 1.点击设计器2.绑定数据列2. 绑定GridView的 FocusedRowChanged事件//定义两个下拉框 _RIcmbtype:不良分类 _RIcmbdefect:不良信息RepositoryItemComboBox _RIcmbtype = new RepositoryItemComboBox();RepositoryItemComboBox _RIcmbdefe…

ArtCoder——通过风格转换生成多元化艺术风格二维码

简介 ArtCoder能够从原始图像(内容)、目标图像(风格)以及想要嵌入的信息中,生成具有艺术风格的二维码。这一过程类似于通常的图像风格转换,但特别针对二维码的特点进行了优化和调整。 通过这种方法&#…

原型设计——墨语笔记APP

一、对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点。 墨刀、Axure、Mockplus等原型设计工具各有特色,下面我将从适用领域、优点和缺点三个方面对它们进行对比分析。 1.墨刀 适用领域:墨刀主要适用于快速原型设计和高保真度的交互设计,特别适合移动端…

linux7-iptables与firewall

1.iptables 1 规则链的默认策略拒绝动作只能是 DROP,而不能是 REJECT。 2 在日常运维工作中,经常会使用ping命令来检查对方主机是否在线,而向防火墙的INPUT 3 规则链中添加一条允许 ICMP 流量进入的策略规则就默认允许了这种 ping 命令检测行为。 4 [root@linuxprobe~]# ipt…

centos7安装mysql5.7笔记

1 配置yum仓库 1.1更新密钥 #更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 1.2 下载使用wget命令下载MySQL的repo文件 #下载使用wget命令下载MySQL的repo文件 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2 使用…

[题解] [洛谷 P1174] 打砖块

[洛谷 P1174] 打砖块 题目描述 有 \(n\) 行 \(m\) 列的砖块和 \(k\) 发子弹,每个砖块都有一个得分,每次可以用一发子弹打碎某一列最下面的砖块并得到相应的得分。有的砖块在打碎后可以获得一发额外子弹的奖励。求该游戏的最大得分。输入格式 第一行有 \(3\)个正整数, \(n,m,…

南昌航空大学大一下学期java-题目集1~3总结性Blog——苏礼顺23201608

一、前言——总结三次题目集的知识点、题量、难度等情况 《面向对象程序设计》这一门课,是教授我们设计代码,掌握类、类间关系,以及面向对象的三大设计原则——封装、继承、多态等面向对象的基本概念和方法,并以面向对象的编程语言java语言设计程序。因此在这三次的题目集都…

前端切图练习,仿哔哩哔哩导航栏

效果 首先看看目标最后完成效果:思路 思路是分成左 右两个区域 左边: 分成三个重复的模块模块内分成上面(图片),下面(文字)右边 这种一个矩形就是一个li标签PS使用技巧 cmd+r 唤出左右游标卡尺 cmd+n 新建一个文件,最好先复制了,然后就可以建立一个和剪贴板一样的内容 代码 <…

如何创建响应式HTML电子邮件模板

在这个适合初学者的指南中,你将学习如何创建一个响应式电子邮件模板。你将跟随逐步说明以及代码片段设计一个在任何设备上都看起来很棒的电子邮件模板。 这个项目非常适合渴望掌握电子邮件设计基础的新手! (本文视频讲解:java567.com) 步骤 1:设置基本结构 要构建一个电子…

机器学习波士顿房价

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接&#xff1a;https://pan.baidu.com/s/1deECYRPQFx8h28BvoZcbWw?pwdft5a 提取码&#xff1a;ft5a --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…

PS1045L-ASEMI超低Low VF肖特基PS1045L

PS1045L-ASEMI超低Low VF肖特基PS1045L编辑:ll PS1045L-ASEMI超低Low VF肖特基PS1045L 型号:PS1045L 品牌:ASEMI 封装:TO-227 最大平均正向电流(IF):10A 最大循环峰值反向电压(VRRM):45V 最大正向电压(VF):0.44V~0.47V 工作温度:-40C~150C 反向恢复时间:5ns 芯片…

System.AggregateException: 发生一个或多个错误.....

System.AggregateException: 发生一个或多个错误。 ---> Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失败。检查输出窗口了解更多详细信息。 --- 内部异常堆栈跟踪的结尾 --- ---> (内部异常 #0) Microsoft.WebTools.Shared.Exceptions.WebToolsExcep…

OOP课程PTA题目集1-3总结

一. 前言第一次pta比较简单,主要考察了类的关联与依赖,只有一道大题与4个小题 第二次pta比较难,主要考察了类设计,有一道大题与3个小题 第三次pta较难,主要考察了类设计,日期类的基本使用,有2个小题与1个大题二.设计与分析 第一次题目集7-1 设计一个风扇Fan类 源码:点击…

Spring Boot 框架集成Knife4j

本次示例使用 Spring Boot 作为脚手架来快速集成 Knife4j,Spring Boot 版本2.3.5.RELEASE,Knife4j 版本2.0.7&#xff0c;完整代码可以去参考 knife4j-spring-boot-fast-demo pom.xml 完整文件代码如下 <?xml version"1.0" encoding"UTF-8"?> &l…

写了个低技术力的爬虫信息收集工具

原理差不多就是把网站源代码下载下来,然后再源代码里用正则识别出url,再对url进行请求,得到响应码和网页标题 使用截图:github链接: **https://github.com/sesmof/url-fucker ** 第一次写工具,多多包涵