我想做一个基于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))。
图1 HUB概念图
图片资源来源于网络,若有侵权,联系我删除,谢谢。
HUB的上游端口是面向host的,其他的Port则是面向设备或者Hub。协议是把端口分为上行端口和下行端口。
【HUB 的上行 PORT 面向 HOST,下行 PORT 面向设备(HUB 或功能设备)。在下行 PORT 上, HUB 提供了设备连接检测和设备移除检测的能力,并给各下行 PORT 供电】–摘抄自USB2.0 协议。
集线器提供多个连接点(即Port),连接点上又可以插上集线器(Hub),集线器上又有多个连接点。子子孙孙无穷尽也?不是的,USB Host只能提供128个地址(地址应该是等效于端口吧)。而且集线器本身也占了地址,以及默认地址0提供给枚举用,能够插上的设备是少于127个的。
图2 物理上USB 系统的分布呈星形拓扑
图3 逻辑上每个 USB Device 是直接连接到 Host
至于说,一台电脑能插多少设备,应该怎么算呢?暂时不清楚,我也不太关心这个。
一个USB系统,只有一个 USB Host。为什么USB最多有7层,我暂时不清楚原因。如果每层都只搞一个USB集线器,7层128个端口岂不是用不完。
图4 USB 层的星形拓扑结构USB 层的星形拓扑结构
宏观上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
我先在想要做的是耳麦,应该选择等时传输。
整理的很粗糙,先上传了,回头修改,先整理个大概,下面学习下枚举过程。