USB耳麦_从无到有(一)

news/2024/11/29 4:43:31/

我想做一个基于STM32F1芯片的USB耳麦。不确定能不能搞出来,简单记录一下这个过程。
首先,这个项目需要先学USB,再学音频。
那就先学USB。

USB
我对USB有一点了解,但忘得差不多了。我复习一下基本的USB协议,再开始学音频的基础知识。

复习:
USB是通用串行总线,和其他总线类似,传输数据用的。优点即插即用,仅此而已。
日常所见的USB有插头和插座。
插头,plug,也叫公口,插别人的;
插座,receptacle,也叫做母口,即被插的;
懂得都懂。
USB公口宏观上分类,可分为三类:
Type 普通的
Mini 小巧的
Mco 微小的
每大类都可再分为三类:A,B,C
我们日常见到的USB线,多为一头是Type类型的插头,长方形的,插在电脑(Host)的插座上(就是那个USB口)。另一个插头,插在设备(Device),一般是Mini或者Micro型。

这是眼睛能看到的部分。(以下部分是本萌新的个人理解,欢迎指正

电脑(下面我们就直接说主机(host),我是把usb host和电脑等效理解,不知道有没有问题)上有一个USB口,就可以连接设备。为了插上更多的设备,需要HUB(集线器)。大家可能买过使用过集线器。集线器可以提供一个或多个连接点(这连接点叫做端口(Port))。
HUB概念图
图1 HUB概念图
图片资源来源于网络,若有侵权,联系我删除,谢谢。

HUB的上游端口是面向host的,其他的Port则是面向设备或者Hub。协议是把端口分为上行端口和下行端口。
HUB 的上行 PORT 面向 HOST,下行 PORT 面向设备(HUB 或功能设备)。在下行 PORT 上, HUB 提供了设备连接检测和设备移除检测的能力,并给各下行 PORT 供电】–摘抄自USB2.0 协议。
集线器提供多个连接点(即Port),连接点上又可以插上集线器(Hub),集线器上又有多个连接点。子子孙孙无穷尽也?不是的,USB Host只能提供128个地址(地址应该是等效于端口吧)。而且集线器本身也占了地址,以及默认地址0提供给枚举用,能够插上的设备是少于127个的。

物理上USB 系统的分布呈星形拓扑

图2 物理上USB 系统的分布呈星形拓扑

逻辑上每个 USB Device 是直接连接到 Host
图3 逻辑上每个 USB Device 是直接连接到 Host
至于说,一台电脑能插多少设备,应该怎么算呢?暂时不清楚,我也不太关心这个。
一个USB系统,只有一个 USB Host。为什么USB最多有7层,我暂时不清楚原因。如果每层都只搞一个USB集线器,7层128个端口岂不是用不完。
USB 层的星形拓扑结构USB 层的星形拓扑结构
图4 USB 层的星形拓扑结构USB 层的星形拓扑结构
宏观上USB的认识,就复习到这里。

逻辑层面
图5  USB系统模样
图5 USB系统模样
端点(Endpoint),接口(Interface),管道(Pipe)。。。
端点(Endpoint)是 USB 设备上可被独立识别的端口,是 Host 和 Device 通讯流的逻辑终点, 是 USB 设备中可以进行数据收发的最小单元。】–摘抄自USB2.0协议中文版。
所以,端点也是端口(Port)?不对吧。我前边是把端口和设备地址等效理解的。一些的端点组成一个设备。例如,有一个设备,有6个输入的端点,6个输出的端点。把设备接入USB设备后,设备会用有一个地址,端点会有端点号:输入端点1,输入端点2,…输入端点6,输出端点1,输出端点2,…,输出端点6。似乎,哪里理解出了问题,不要紧,继续往下走。

端点
我们操作的主要就是端点。可分为:端点0和非0端点。端点0是控制端点,双向的,可以输入输出。设备接入USB的开始,端点0进行枚举。非0端点是单向的。【除了端点 0,其余的端点在设备配置之前不能与主机通信,只有向主机报告这些端点的特性并被确认后才能被激活。】–摘抄自USB2.0协议中文版。

管道
管道这个词,还是比较好理解的。搭在Host和设备之间,信息在管道里流淌。管道分为流管道和信息管道。信息管道是默认的控制管道。USB系统管理设备,是通过控制管道。

USB 系统中的数据传输,宏观看是在 HOST 和 USB 功能设备之间进行。微观看是在应用软件的 Buffer 和 USB 功能设备的端点之间进行。 一般来说端点都有 Buffer,可以认为USB 通讯就是应用软件 Buffer 和设备端点 Buffer 之间的数据交换,交换的通道称为管道。通常需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。用在一起来
对设备进行控制的若干管道称为设备的接口,这就是端点、管道和接口的关系
】–摘抄自USB2.0协议中文版。

上面说的很透彻,结合上图5,在应用层面的逻辑框架就有了。“同一管道只支持一种类型的数据传输”,是因为usb传输有四种:
以下摘抄自USB2.0协议中文版**
批量传输: 批量传输一般用于批量的和非实时的数据传输,通俗的来说就是用于数据量大但对时间要求又不高的场合的一种传输方式,类似用于 USB 打印机和 USB 扫描仪等。
中断传输: 中断传输一般用于小批量的和非连续的数据传输,通俗的来说就是用于数据量小、数据不连续的但实时性高的场合的一种传输方式,类似用于USB鼠标和USB键盘等。
等时传输: 等时传输也有“同步传输”的叫法,一般用于要求数据连续、实时且数据量大的场合,其对传输延时十分敏感,类似用于 USB 摄像设备, USB 语音设备等。
控制传输: 控制传输是一种特殊的传输方式,且传输过程相对以上三种而言更复杂一些,但也十分重要。当 USB 设备初次连接主机时,用控制传输传送控制命令等对设备进行配置。同时设备接入主机时,需要通过控制传输去获取 USB 设备的描述符以及对设备进行识别,在设备的枚举过程中都是使用控制传输进行数据交换。

*That’s all
我先在想要做的是耳麦,应该选择等时传输。

整理的很粗糙,先上传了,回头修改,先整理个大概,下面学习下枚举过程。


http://www.ppmy.cn/news/380319.html

相关文章

08.音频系统:第005课_项目实战1_耳麦拔插:第001节_驱动程序上报耳麦拔插事件

在接下来的几个小节中,会讲解几个音频的项目,现在想讲解第一个项目:对 耳麦拔插事件的处理,一起分为四个小节左右: 5.1 驱动程序上报耳麦拔插事件 5.2 在状态栏显示耳麦图标 5.3 耳麦拔插事件调用流程分析 5.4 切换声音…

8.5.3耳麦拔插事件调用流程分析

目录 回顾 input系统方法 回顾 在前面的小节中,我们编写了一个驱动程序,模拟耳机的插拔事件,其可以上报耳机的拔插事件,并且修改了android的源代码,可以根据耳机的拔插事件,在状态栏上现实或者消除耳麦的图标,这节视频我们讲解耳麦插拔事件导致的程序调用流程。 …

耳麦有杂音(电流声)的解决方法

耳麦有杂音(电流声)的解决方法 耳麦有杂音(电流声)主要原因: 1,电脑没有及时清理,堆积系统垃圾太多,电脑反映缓慢,应及时清理电脑的系统垃圾和杀毒。2,耳麦损…

Linux教程——Linux cd命令:切换目录 + Linux pwd命令:显示当前路径

Linux cd命令:切换目录 cd 命令,是 Change Directory 的缩写,用来切换工作目录。 Linux 命令按照来源方式,可分为两种,分别是 Shell 内置命令和外部命令。所谓 Shell 内置命令,就是 Shell 自带的命令&…

屋大维和王莽,同时同路不同命的双雄

汉朝与罗马,虽然他们相隔万里分布在欧亚大陆东西两端,但他们几乎同时成为世界性文明,分别都是当时世界上东西方最强大的所在。公元元年前后,这两个庞然大物内部都发生了一次巨变,罗马由共和制变为了元首制。而汉朝也由…

【Java注解】如何正确使用注解提高程序模块化和扩展性

I. Java 注解基础 Java 注解背景 Java 注解的出现是为了解决Java语言的不足之处。在 Java 语言中,类的成员只包括字段和方法,并且类是 Java 语言中最小的单位,而其他的语言(如 C)都支持宏定义。宏定义可以将功能与元…

【taro react】---- 解决H5接入uni-app版本的IM

1. 问题 由于项目开发比较紧张,腾讯 IM 的接入就使用了 TUIKit 含UI集成方案,遇到的问题,uni-app的UI本来就是一个单独的项目,需要集成到现有的 Taro React 中,就只能作为一个独立的项目,不跳转时不影响原有…

研一,有点迷茫。

作者:阿秀 校招八股文学习网站:https://interviewguide.cn 这是阿秀的第「277」篇原创 小伙伴们大家好,我是阿秀。 最近回答了不少大一大二研一在读的学习圈中学弟学妹的咨询问题,基本都是计算机学习、进度、疑惑等等相关的问题&a…