股票配资系统网站开发,网站 iss,信阳网站设计,陕西免费网站建设STM32F103C8T6音乐控制器实战教程[1]
USB简单介绍#xff1a;
USB代表通用串行总线#xff08;Universal Serial Bus#xff09;#xff0c;是一种用于连接计算机及其外部设备的标准接口。USB接口允许各种设备#xff08;如打印机、存储设备、键盘、鼠标、摄…STM32F103C8T6音乐控制器实战教程[1]
USB简单介绍
USB代表通用串行总线Universal Serial Bus是一种用于连接计算机及其外部设备的标准接口。USB接口允许各种设备如打印机、存储设备、键盘、鼠标、摄像头等通过单一的标准接口与计算机通信和交换数据。USB标准经过多次升级逐渐演变为不同版本每个版本都引入了新的功能和改进。
以下是USB标准的主要版本
USB 1.x: USB 1.0: 最早的USB规范于1996年发布最大传输速率为12 Mbps兆位每秒。USB 1.1: 于1998年发布进行了一些修正和改进。 USB 2.0: 于2000年发布最大传输速率提升至480 Mbps。这个版本在广泛的计算机和设备中得到了应用成为了普遍采用的标准。 USB 3.x: USB 3.0: 于2008年发布又称为“SuperSpeed USB”最大传输速率为5 Gbps。USB 3.1: 于2013年发布分为两个版本分别为5 Gbps和10 Gbps的速率。后来的更新将10 Gbps版本标记为USB 3.1 Gen 2。USB 3.2: 于2017年发布引入更高的传输速率最高版本为20 Gbps被称为USB 3.2 Gen 2x2。 USB 4: 于2019年发布最大传输速率为40 Gbps。USB 4标准集成了雷电Thunderbolt技术使其具备更高的速度和更多的功能。
USB的主要优点和缺点
优点 通用性 USB接口是一种通用标准适用于各种设备如打印机、存储设备、键盘、鼠标、摄像头、移动设备等。这种通用性使得设备之间更容易互相连接。 热插拔 USB设备可以在计算机运行时进行插拔无需重启计算机。这种热插拔功能使设备管理更加便捷无需中断计算机的运行。 高速传输 随着USB版本的升级传输速率不断提高。较新的USB标准如USB 3.0、USB 3.1、USB 3.2和USB 4可以提供很高的传输速率适用于大容量文件和多媒体数据。 供电功能 USB接口可以为连接的设备提供电源这意味着许多设备如键盘、鼠标、移动设备可以通过USB接口获得所需的电力无需额外电源适配器。 广泛支持 USB接口得到了广泛的支持和采用几乎所有的计算机和设备都配备了USB接口使其成为连接设备的通用选项。 适配器和扩展 USB接口可以用于连接各种适配器和扩展设备如USB集线器、转接头等从而扩展计算机的连接能力。
缺点 传输距离限制 USB连接的传输距离相对较短通常在3至5米范围内。超过一定距离后信号衰减可能导致传输不稳定。 共享带宽 在某些情况下多个USB设备共享同一主机上的带宽可能会导致数据传输速率降低特别是在较旧的USB版本中。 物理连接易损 USB插头和插孔是物理连接如果不小心操作可能会导致连接松动、接触不良甚至损坏插头。 复杂性 对于某些高级功能如电源传递、高速数据传输等USB协议可能变得相对复杂需要更多的电子组件和设计。 设备兼容性 尽管USB标准很普遍但有时设备制造商可能会采用不同的规范导致某些设备在不同计算机上的兼容性问题。
USB系统的组成
主机Host 主机是USB系统的控制中心通常是计算机或其他设备负责管理和控制连接到USB总线上的所有设备。主机生成和管理USB通信并为连接的设备提供电力。设备Device 设备是连接到USB总线上的外部设备如打印机、存储设备、键盘等。每个USB设备都有一个唯一的地址主机通过这个地址识别和通信与之连接的设备。总线Bus USB总线是设备连接的物理通道通过这条通道传输数据和电力。USB总线支持多个设备同时连接但所有设备共享总线带宽。集线器Hub 集线器是用于扩展USB端口数量的设备。它可以连接到主机的USB端口并提供多个附加端口使您能够连接更多的USB设备。连接线Cable USB连接线是将主机、集线器和设备连接到一起的物理线缆。USB连接线分为不同类型和版本以适应不同的连接需求和速率。
Hub不能无限拓展的原因
设备数量限制 USB规范将最大连接设备数量限制为127个。这意味着即使使用多个USB集线器您总共连接的USB设备数量也不应超过127个。总线带宽限制 USB总线的带宽是有限的随着连接的设备数量增加总线上的可用带宽会减少。每个USB设备共享总线带宽因此连接的设备越多每个设备可用的带宽越少。信号干扰 随着集线器层数的增加信号可能会变得更加脆弱从而可能导致数据传输错误或稳定性问题。这是因为每个层级都会引入一定的信号损耗。电源供应 随着连接的设备数量增加对于供电的要求也会增加。USB集线器本身需要电源供应而连接的设备也需要电力。如果设备的功耗超过了USB集线器的电源能力可能会导致电力不足的问题。
USB主机需要的程序
主机应用程
在USB系统中应用程序是指在主机计算机上运行的软件用于与连接的USB设备进行交互、数据交换和实现特定的功能。 数据传输 许多USB设备用于数据传输如外部存储设备、摄像头等。应用程序可以与这些设备通信读取或写入数据执行备份、文件传输等操作。 设备控制 一些USB设备具有控制功能如打印机、扫描仪、音频接口等。应用程序可以发送控制命令调整设备的设置、启动打印任务等。 设备监控 应用程序可以监控连接的USB设备的状态和活动。例如监控电池充电状态、存储设备容量等。 音频和视频处理 许多音频和视频设备使用USB接口如耳机、麦克风、摄像头等。应用程序可以与这些设备配合进行音频录制、视频采集、通话等。 数据采集 一些测量设备如传感器、测量仪器通过USB接口传输数据。应用程序可以从这些设备中读取数据分析、记录或可视化数据。 游戏控制 游戏控制器、操纵杆等游戏设备使用USB接口与计算机连接。游戏应用程序可以与这些设备交互实现游戏控制。 移动设备管理 移动设备如智能手机、平板电脑通过USB接口与计算机同步数据、传输文件等。相关的应用程序可以管理这些移动设备的内容。 特定设备交互 某些设备有独特的功能和交互方式应用程序可以根据设备类型和规格实现特定的功能。例如3D打印机的控制、数码相机的图像下载等。
USB应用程序通常需要调用设备驱动程序提供的接口和功能来实现操作。这些应用程序可以是操作系统内置的工具也可以是由第三方开发的应用程序。无论是哪种情况应用程序的目标是实现与USB设备的有效交互使用户能够充分利用连接的设备。
应用程序驱动程序
应用程序驱动程序是特定设备的软件组件它们允许操作系统与连接的USB设备进行通信和交互。每个USB设备可能需要一个特定的驱动程序以便操作系统能够正确识别设备、了解其功能并实现正确的数据交换。这些驱动程序的功能包括 设备识别 驱动程序帮助操作系统识别连接的USB设备。操作系统需要知道设备的厂商、型号以及支持的功能以便正确管理设备。 功能支持 驱动程序允许应用程序利用设备的各种功能。例如对于打印机驱动程序会允许操作系统和应用程序发送打印作业。 数据传输 驱动程序处理数据在设备和计算机之间的传输。它们确保数据正确地从设备发送到计算机或从计算机发送到设备。 错误处理 驱动程序处理设备通信中的错误如数据传输错误、超时等。它们可以通过重新传输数据或采取其他措施来解决这些问题。 电源管理 驱动程序可能负责管理设备的电源状态例如将设备置于休眠状态以节省能源。
主机端控制程序
主机端控制程序是主机计算机上的软件组件用于管理连接到USB总线的所有设备和数据流。这些程序与操作系统和USB控制器一起工作确保设备的正确连接、数据传输和电源管理。它们的功能包括 设备管理 主机端控制程序负责识别连接的USB设备并与之通信。它们监控总线上的设备并允许操作系统访问这些设备。 驱动程序加载 当新设备连接到计算机时主机端控制程序可能会自动加载适当的驱动程序以便设备能够与操作系统交互。 电源分配 对于带有USB供电功能的设备主机端控制程序负责管理为设备提供的电流和电力。它们根据设备的需求分配电源。 数据传输管理 主机端控制程序协调数据传输确保设备之间的数据传输不会冲突或干扰。 设备协商 当设备连接时主机端控制程序可能会与设备进行协商以确定支持的功能、传输速率等。
各个程序之间的关系
在USB系统中应用程序、设备驱动程序和主机端控制程序三者之间有密切的关联它们共同协作以实现设备连接、数据交换和功能操作。以下是它们之间的关联 设备驱动程序和应用程序关联 设备驱动程序是用于操作系统识别和管理USB设备的软件组件。它们与具体的USB设备通信将设备特定的通信协议转化为操作系统和应用程序能够理解的数据。应用程序需要调用这些驱动程序来与连接的设备进行交互。应用程序通过设备驱动程序向操作系统发出请求从设备中读取数据、发送指令或执行其他操作。 主机端控制程序和应用程序关联 主机端控制程序是在主机计算机上运行的软件用于管理连接到USB总线的所有设备。这些程序与操作系统、USB控制器和设备驱动程序一起工作协调设备的连接、数据传输和电源管理。应用程序通过主机端控制程序获得对USB设备的访问权限。主机端控制程序负责识别新连接的设备加载适当的驱动程序分配电源协调数据传输等以确保应用程序与设备的正常通信。 应用程序与主机端控制程序关联 应用程序通过主机端控制程序访问连接的USB设备。应用程序使用主机端控制程序提供的接口来查找已连接的设备、启动数据传输、发送控制命令等。主机端控制程序将应用程序的请求翻译成USB通信协议以便与设备进行交互。应用程序依赖于主机端控制程序来协调设备连接和通信以及提供设备的访问权限。
应用程序、设备驱动程序和主机端控制程序在USB系统中密切关联共同实现了设备的连接、数据交换和操作功能。应用程序通过设备驱动程序和主机端控制程序与USB设备进行通信并依赖于它们来实现设备的功能和操作。
USB设备如何被主机识别
其实就是根据D、D- 的高低电平来检测设备的插入。 在USB集线器的下游端口D和D-上分别接了一个15kΩ下拉电阻 在设备端D或D-上接了一个上拉电阻1.5kΩ本图中是D低速设备的上拉电阻接在D-上高速和全速设备的上拉电阻接在D上。在当没有设备插入时输入端的电平就被这两个下拉电阻拉到了低电平。当有设备插入时接了上拉电阻的数据线电平被拉高根据被拉高的是D还是D- 来判断是低速设备还是全速设备。 USB高速设备显示被识别成全速设备然后通过集线器和设备两者的确认再切换到高速模式。高速模式下是电流传输这时要将D上的上拉电阻断开
USB信号是如何传输的
差分信号 USB信号传输采用差分信号方式。这意味着对于每个信号有一对电线分别是D数据正极和D-数据负极。数据是通过这两根线之间的电压差来传输的。
USB标准中的USB-A、USB-B、USB-C等各种类型的连接器在物理层上包含了不同数量的线用于数据传输、电源供应和其他功能。常见的USB连接器中USB 2.0和USB 3.0采用了差分信号传输方式其线的分布如下
USB 2.0: USB 2.0连接器通常有4根线其中2根用于差分信号传输用于数据传输另外两根用于电源供应和接地。
D 差分信号用于正向数据传输。D- 差分信号用于反向数据传输。VCC 电源线提供电源供应。GND 地线提供电路的接地。
USB 3.0: USB 3.0引入了额外的差分信号线以支持更高的传输速率因此USB 3.0连接器通常有9根线其中4根用于差分信号传输其余的用于电源、接地以及其他功能。
D USB 2.0差分信号用于正向数据传输。D- USB 2.0差分信号用于反向数据传输。VCC 电源线提供电源供应。GND 地线提供电路的接地。SS TX 差分信号用于USB 3.0数据传输的正向通道。SS TX- 差分信号用于USB 3.0数据传输的反向通道。SS RX 差分信号用于USB 3.0数据接收的正向通道。SS RX- 差分信号用于USB 3.0数据接收的反向通道。GND 电路接地。
**差分信号解释**差分信号是指两个信号线之间的电压差来表示数据的传输。在USB中D和D-两根信号线形成了一对差分信号线数据的变化是通过改变这两根线之间的电压差来实现的。这种差分信号传输方式对干扰更加稳健因为外部干扰信号会同时影响这两根线但只要电压差保持数据传输就能保持稳定。这种传输方式提高了数据的可靠性特别是在高速数据传输中。
差分信号的逻辑1跟逻辑
逻辑1High 在差分信号传输中逻辑1由D线的电压高于D-线的电压表示。这会导致电压差增大从而表示逻辑1。这种差异电压是数据传输和解释的基础。
逻辑0Low 逻辑0则相反D-线的电压高于D线的电压。这也会导致电压差但与逻辑1相比电压差更小表示逻辑0。
差分信号传输中的逻辑1和逻辑0是通过比较D线和D-线之间的电压差来确定的。逻辑1的情况下D线电压高于D-线逻辑0的情况下D-线电压高于D线。这种编码方式使得差分信号传输在抵抗干扰、提高可靠性方面具有优势。
USB电路图
由图可知STM32作为一个简单的从设备还是比较简单的只需要把DP DM链接到PA11跟PA12管脚即可。 丰富多样的USB连接器
USB连接器是一种用于连接USB设备和计算机或其他主机设备的物理接口。USB连接器允许设备通过USB总线进行数据传输、电源供应和通信。根据USB的不同版本和用途存在多种类型的USB连接器。以下是一些常见的USB连接器类型 USB Type-A 这是最常见的USB连接器类型通常用于主机设备如计算机、电视、游戏主机的USB端口。它是一个矩形的连接器具有4个针脚用于数据传输、电源供应和地线。 USB Type-B USB Type-B连接器通常用于外部设备如打印机、扫描仪和外部硬盘驱动器。它具有多种不同的变体其中较常见的是标准Type-B和微型Type-B。 USB Type-C USB Type-C连接器是一种逐渐普及的连接器具有可逆插入特性无论插头的方向如何都可以正确连接。它支持更高的数据传输速率和电源功率广泛应用于现代设备包括智能手机、平板电脑、笔记本电脑等。 USB Mini USB Mini连接器是一种较早的连接器类型分为Mini-A、Mini-B和Mini-AB。它们用于一些较旧的移动设备和相机等。 USB Micro USB Micro连接器是取代USB Mini的一种更小的连接器类型分为Micro-A、Micro-B和Micro-AB。它也用于一些移动设备、相机和其他便携式设备。 USB On-The-Go (OTG) USB OTG连接器允许设备在主机模式和设备模式之间切换从而实现设备之间的直接连接和通信而无需计算机的中介。 USB 3.0 Micro-B 这种连接器用于支持USB 3.0的设备具有更多的引脚用于支持高速数据传输。 USB 3.1 Type-C USB 3.1 Type-C连接器是Type-C连接器的增强版本支持更高的数据传输速率和电源功率适用于高性能设备。
这些连接器类型在不同的设备和应用中起着关键的作用它们使设备能够通过USB总线进行数据传输、电源供应和通信从而实现了设备的互连性和通用性。
USB协议规范
USBUniversal Serial Bus协议规范是定义USB系统各个方面的一系列标准包括物理连接、数据传输、电源供应、通信协议等。
USB的基本规范包括通用的USB规范、各种设备类规范以及主机控制器规范它们共同定义了USB系统的不同方面。这些基本规范共同构成了USB技术的基础为USB设备和主机之间的通信、数据交换、电源供应等提供了标准化的框架。各种设备和主机都可以按照这些规范来设计和实现以实现USB系统的互操作性和可靠性。
通用的USB规范 这是USB技术的基础规范定义了USB系统的物理连接、数据传输、电源供应、通信协议等方面。这个规范确保了不同设备和计算机之间的互操作性和通用性。它规定了USB连接器的不同类型如USB Type-A、Type-B、Type-C以及它们的引脚分配、电气特性等。此外USB规范还定义了数据传输的基本机制、速率、帧结构等。
设备类规范 USB设备类规范定义了特定类型的USB设备的通信协议、数据格式和操作行为。不同类型的设备类规范包括但不限于
人机交互式设备 HIDHuman Interface Device用于键盘、鼠标、游戏控制器等人机界面设备。存储设备类 Mass Storage用于外部存储设备如USB闪存驱动器、硬盘驱动器等。打印机类设备 Printer用于打印机设备。音频类设备类 Audio用于音频设备如耳机、扬声器等。视频类设备类 Video用于视频设备如摄像头、显示器等。通信设备类 Communication用于通信设备如调制解调器、网络适配器等。
这些设备类规范规定了特定设备类型的工作方式、数据格式、通信协议等以确保各种设备在不同计算机上正常工作。
当谈到USB设备类规范时有许多特定类型的设备类规范每个规范都定义了特定类型的USB设备在通信、数据交换和操作方面的行为。
主机控制器规范 USB主机控制器规范定义了计算机主机上的USB控制器的工作方式、功能和接口。USB控制器负责管理连接到计算机的USB设备包括设备的识别、配置、数据传输等。主机控制器规范确保了主机和设备之间的有效通信和交互。
深入理解USB的基本规范
明确三个层次
信号层 信号层是USB连接的物理层涉及USB电缆和连接器的物理特性。USB电缆中的差分信号传输是在信号层上完成的其中D和D-线用于数据传输。信号层确保电缆的正确连接和数据传输的稳定性。协议层 协议层定义了USB通信的规则和流程。USB协议层包括设备的枚举、配置、命令传输、数据传输等。USB协议层确保主机和设备之间的正确通信允许主机识别设备、了解设备的能力并与设备进行数据交换。数据传输 数据传输是指在USB连接上实际传输数据的过程。USB定义了两种主要类型的数据传输控制传输、批量传输、中断传输和等时传输。控制传输用于配置和控制设备批量传输用于大量数据的传输中断传输用于低延迟的周期性传输等时传输用于对时间要求较高的数据传输。
理解两个接口 接口概念 在USB设备中一个接口是设备的一个功能单元。每个USB设备可以包含多个接口每个接口可以提供不同的功能。例如一个多功能打印机可能有一个接口用于打印、一个接口用于扫描。每个接口又包含多个端点。 端点概念 在每个USB接口中端点是数据传输的终点或起点。每个接口可以有多个端点包括一个控制端点用于控制和配置和若干批量、中断或等时端点用于数据传输。端点在USB通信中起到了数据传输的重要角色主机和设备通过端点进行数据的发送和接收。
协议层深入理解
在USB通信中协议层的数据传输通过一系列的数据包来完成。每个数据包都包含了不同的字段用于标识、传输和校验数据。以下是USB数据包的各个字段的详细解释 同步字段SYNCSync Field 同步字段是一个特定的数据模式用于同步接收方的时钟。它的作用是帮助接收方正确解析后续的数据。在USB 2.0中同步字段由两个字节16位的位模式组成称为K码。在USB 3.0中使用8位的同步字段。 包标识符PIDPacket Identifier 包标识符是一个4位的字段用于标识数据包的类型。不同的包标识符表示不同类型的数据包如数据包、令牌包、握手包等。 地址字段ADDRAddress Field 地址字段用于指示目标设备的地址。在USB总线上可能存在多个设备地址字段确定了数据包应该传递给哪个设备。 端点标识符EPEndpoint Identifier 在USB 2.0中端点标识符用于指示目标设备的端点以及数据传输的方向输入或输出。在USB 3.0中端点标识符合并到地址字段中。 数据字段DATAData Field 数据字段包含实际的数据内容。根据传输类型和应用数据字段的长度可以不同。不同类型的USB传输如控制传输、批量传输、中断传输、等时传输在数据字段的使用上有所区别。 校验字段CRCCyclic Redundancy CheckCRC 校验字段用于检测数据包是否在传输过程中发生了错误。发送方计算CRC码并将其添加到数据包中接收方根据接收到的数据计算CRC码并与接收到的CRC码进行比较以判断数据是否正确传输。 包结束EOFEnd of Packet 包结束字段标志着数据包的结束通常由一个特定的位模式表示。接收方根据这个标志来识别数据包的结束。
综合起来USB数据包的各个字段共同构成了一个完整的数据包用于在USB总线上进行数据传输。这些字段的设计和使用确保了数据的可靠传输、识别和校验从而实现了USB通信的稳定性和可靠性。
PID字段理解
Packet Identifier包标识符 用于标识数据包的类型。不同的包标识符表示不同类型的数据包如数据包、令牌包、握手包。
ADDR字段理解
在USB数据包的前导码和包标识符之后紧随的是用于指示目标设备地址或端点地址的地址字段。地址字段的具体格式取决于其所在的数据包类型。例如对于令牌包Token Packet地址字段指示目标设备的地址而对于数据包Data Packet地址字段用于指示传输的端点地址。在USB通信中存在两种类型的地址设备地址Device Address和端点地址Endpoint Address。 设备地址Device Address 设备地址是用来标识USB总线上的各个USB设备的唯一标识符。每个USB设备都被赋予一个独特的设备地址以便主机可以区分不同的设备并与它们进行通信。设备地址的范围是从1到127其中0被保留用于未分配地址和默认地址。设备初始化时主机分配一个默认地址通常是0然后设备在初始化完成后获取一个非零的设备地址。 端点地址Endpoint Address 端点地址用于标识USB设备上的不同端点Endpoint每个端点是数据的进出口。在USB设备中一个端点可以是输入端点IN Endpoint或输出端点OUT Endpoint。端点地址由两部分组成一个3位的端点号和一个1位的方向标识用于区分IN和OUT。因此一个USB设备可以有多个端点每个端点都有一个唯一的端点地址。
不同类型的设备支持的端点不同
低速Low-Speed设备和高速High-Speed设备在USB通信中支持的端点地址是不同的。USB设备通过端点来实现数据传输不同速度的设备对端点的数量和功能有一些限制。
低速设备
最多支持两个端点一个控制端点Endpoint 0和一个数据端点IN 或 OUT。控制端点Endpoint 0通常被用于设备的控制和配置支持双向传输。
高速设备
最多支持15个端点一个控制端点Endpoint 0和最多七个输入端点IN Endpoint以及最多七个输出端点OUT Endpoint。控制端点Endpoint 0通常被用于设备的控制和配置支持双向传输。输入端点IN Endpoint用于从设备发送数据到主机输出端点OUT Endpoint用于从主机接收数据。高速设备的端点支持更大的数据传输带宽因此可以同时处理更多数据。
需要注意的是USB规范中还存在其他类型的设备如全速Full-Speed设备其在支持的端点数量和功能上可能与低速设备或高速设备有所不同
帧号的理解
USB 通信中的帧号通常由 11 个比特构成。这 11 个比特用来表示帧号帧号从 0 开始递增循环周期为 2^11 帧即 2048 帧。这个循环周期大约为 1 毫秒ms因为每帧的持续时间是 1 毫秒 / 1000 1 微秒μs帧数为 2048所以循环周期为 1 ms。
帧号的 11 个比特用于表示从 0 到 2047 的帧序号当达到 2047 后会重新从 0 开始计数形成一个循环。帧号的作用是在 USB 设备之间建立时间同步以便数据传输和通信的正确进行。
令牌包Token Packet讲解 0xB4令牌包是USB通信中的一种特殊类型的令牌包用于支持高速USB总线上的低速或全速设备的通信。它的帧格式包含了特定的字段用于指示目标设备和端点以及管理分裂传输的过程。以下是0xB4令牌包的正确帧格式以包标识符PIDPacket Identifier作为起始。
令牌包的格式如下
包起始令牌包的起始由一个包标识符PID来标志表示不同类型的令牌如OUT、IN、SETUP等。目标设备地址指示目标USB设备的地址占用7位。端点号指示目标设备的端点号占用4位。CRC5用于校验令牌包的有效性和完整性的循环冗余校验CRC5占用5位。帧结束标记表示令牌包的结束。
令牌包的类型包括OUT令牌包、IN令牌包和SETUP令牌包它们用于控制数据的传输方向和类型。
帧起始包Start of Frame讲解 帧起始包Start of Frame是USB通信中的一个特殊类型的包用于同步USB设备的时钟并标识USB帧的开始。SOF包在每个USB帧的开始时发送以确保所有设备都保持同步从而实现可靠的数据传输。
以下是SOF包的主要特点和帧格式 用途SOF包主要用于维持USB设备之间的时钟同步。USB设备在SOF包的接收边缘调整其内部时钟以便在帧的持续时间内正确地进行数据传输。 包标识符PIDSOF包的PID为0xA5。这是一个特殊的PID用于标识SOF包。 帧号SOF包携带一个11位的帧号字段用于指示当前USB帧的帧序号。帧号从0开始递增循环周期为2^11帧即2048帧对应约为1毫秒。 CRC5SOF包携带一个5位的CRC5校验字段用于检验SOF包的有效性和完整性。 帧结束标记EOFSOF包的末尾会包含帧结束标记表示SOF包的结束。
SOF包在USB通信中的作用非常重要它确保了所有USB设备都按照相同的时钟进行操作从而保证数据传输的同步和准确性。SOF包的发送频率决定了USB通信的带宽和实时性。
数据包Data Packet讲解: 数据包Data Packet是USB通信中用于传输实际数据的包它包含了要传输的有效数据以及相关的控制和校验信息。USB数据包的格式根据传输的方向主机到设备或设备到主机以及数据的类型控制、批量、中断、等等可能会有所不同。 实际上在USB通信中数据包的PID值是由数据传输的方向和端点号来确定的而不是一个固定的值。以下是关于USB数据包的正确介绍
USB数据包是用于在USB通信中传输实际数据的包。它的组成部分可以根据传输的类型和阶段而有所不同。一般来说USB数据包的格式如下 包起始标识Packet IdentifierPID数据包的PID标识了数据包的类型和传输方向。PID字段的值根据数据传输的具体情况而定例如在批量传输中数据包的PID值可能是0x02而在中断传输中可能是0x06。 数据字段数据包的数据字段承载实际要传输的数据。数据的长度取决于数据包的具体用途和传输类型。 CRCCyclic Redundancy CheckCRC校验码用于检测数据传输过程中是否出现错误。CRC校验字段在数据包中用来验证数据的完整性。 结束标识End of PacketEOP数据包的末尾会包含一个结束标识表示数据包的结束。
数据包的PID值会根据数据的传输方向主机到设备或设备到主机和数据包所用的端点号来确定。不同类型的数据传输如批量传输、中断传输、控制传输等会有不同的PID值用于标识数据包的类型。因此并没有一个固定的PID值用于所有数据包。
握手包Acknowledgment Packet讲解 握手包用于确认数据包的接收以及传输状态的反馈。以下是关于握手包的正确讲解
握手包Handshake Packet是USB通信中用于确认数据包的特殊类型的包它用于传输状态的确认和反馈。握手包的目的是确保数据传输的可靠性并在数据传输的各个阶段提供反馈。
以下是握手包的主要内容
包起始标识PID握手包的PID用于表示不同类型的握手信息。常见的PID值包括0x0EACK包确认包和0x0FNAK包否定确认包。帧结束标识EOF握手包的末尾会包含一个帧结束标识表示握手包的结束。
常见的握手包类型有
ACK包Acknowledgment使用PID 0x0E表示数据包已成功接收。接收方收到数据包后会发送ACK包作为回应以确认数据包的接收。NAK包Negative Acknowledgment使用PID 0x0F表示数据包未能成功接收。接收方在某些情况下可能发送NAK包表示需要重新发送数据包。
握手包在USB通信中扮演着重要角色它确保了数据传输的可靠性以及在不同阶段提供状态的反馈。通过ACK包和NAK包的发送USB设备能够对数据包的接收状态做出明确的回应从而确保通信的有效性。握手包是USB通信中用于确认数据包接收状态和传输状态的特殊包通常使用ACK包和NAK包来提供确认和反馈。
数据传输层深入理解
USB的数据传输层是负责实际数据传输的一部分它涉及从主机到设备OUT传输和从设备到主机IN传输的数据传递。USB数据传输层定义了数据包的格式、错误处理、重传机制等以确保可靠的数据交换。USB数据传输层包括以下几种传输类型控制传输、同步传输、中断传输、大容量数据传输的特点解释 控制传输Control Transfer 特点用于设备的配置、控制和命令交互具有最高的灵活性。控制传输由主机发送命令和设备返回响应组成用于设备初始化、状态查询、设置参数等操作。特征 低带宽占用不适用于大量数据传输主要用于控制信息的传递。可靠性具有重试和错误检测机制确保命令和响应的正确传输。延迟不确定控制传输可能会有较高的传输延迟不适用于实时性要求高的应用。 同步传输Isochronous Transfer 特点用于实时应用如音频和视频传输。提供固定的传输带宽但不保证可靠传输。特征 固定带宽每帧有固定的带宽用于同步传输适用于实时性要求高的应用。无重传机制对于数据的丢失或错误没有重传机制适合不要求完全可靠传输的应用。低延迟具有较低的传输延迟适用于对实时性要求高的音频和视频传输。 中断传输Interrupt Transfer 特点用于周期性地传输小块数据适用于低延迟的应用如鼠标、键盘等。特征 固定带宽每帧有一定的带宽用于中断传输确保周期性的数据传输。较低带宽相对于批量传输和控制传输带宽较低适用于小量数据传输。较低延迟具有较低的传输延迟适用于需要快速响应的应用。 大容量数据传输Bulk Transfer 特点用于大容量数据传输对传输延迟不敏感。特征 高带宽相对于控制传输和中断传输具有较高的带宽适用于大量数据传输。可靠性具有重传机制确保数据的可靠传输。相对高延迟传输延迟可能相对较高适用于不对传输延迟要求过高的应用。
不同的数据传输类型在USB通信中各自发挥重要作用根据应用需求和实时性要求选择合适的传输类型。
USB的枚举过程详解 USB设备的枚举过程是在设备插入到USB主机端口时通过一系列的步骤来识别、配置和启用设备的过程。枚举是USB通信中的重要环节它确保设备与主机之间的正常通信和合作。以下是USB设备枚举的详细步骤
插入设备当USB设备被插入主机的USB端口时主机会检测到一个新的设备插入事件供电当USB设备被插入到主机端口时主机会向设备提供所需的电力。复位在供电之后USB设备会进行复位。复位是一个重要的步骤它确保设备在一个已知状态下开始清除之前的状态和设置。设备检测主机向设备发送一个带有默认地址的令牌包以确认是否有设备响应。设备响应后主机知道有一个新设备连接。设备地址分配主机会为设备分配一个唯一的设备地址。这个地址用于在USB总线上唯一标识设备。设备描述符获取主机请求设备的描述符包括设备描述符、配置描述符、接口描述符等。这些描述符包含了设备的基本信息。设备配置主机根据设备的描述符信息选择一个配置并将配置描述符发送给设备。设备会根据配置进行初始化和设置。设备启用主机发送一个启用设备的命令设备根据命令启用其功能。此时设备完成了枚举过程可以与主机进行正常的数据通信。
USB的描述符
USB描述符的类型
USB1.1协议中定义的标准描述符有 设备描述符(Device Descriptor)、 配置描述符(Configuration Descriptor)、 接口描述符(Interface Descriptor)、 端点描述符(Endpoint Descriptor)、 字符串描述符(String Descriptor) USB2.0又新增了两个新的标准描述符 Device Qualifier Descriptor、 Other Speed Configuration Descriptor 还有一些特殊的描述符如类特殊描述符(HID描述符、音频接口描述符)、厂商自定义的描述符等。
设备描述的理解
USBUniversal Serial Bus设备描述符是一种用于描述连接到USB总线上的设备的信息的数据结构。它提供了有关设备的基本信息如供应商ID、产品ID、设备类别、协议等。
以下是常见的USB设备描述符字段和它们的含义 Device Descriptor设备描述符 bLength: 描述符的长度。 bDescriptorType: 描述符的类型对于设备描述符值为0x01。 bcdUSB: 指示支持的USB规范版本。 bDeviceClass: 设备的类别。 bDeviceSubClass: 设备的子类别。 bDeviceProtocol: 设备的协议。 bMaxPacketSize0: 端点0的最大数据包大小。 idVendor: 供应商ID由USB论坛分配。 idProduct: 产品ID由制造商分配。 bcdDevice: 设备的版本号。 iManufacturer: 制造商信息的字符串描述符索引。 iProduct: 产品信息的字符串描述符索引。 iSerialNumber: 序列号信息的字符串描述符索引。 bNumConfigurations: 设备支持的配置数目。 Configuration Descriptor配置描述符 bLength: 描述符的长度。bDescriptorType: 描述符的类型对于配置描述符值为0x02。wTotalLength: 配置描述符及其子描述符的总长度。bNumInterfaces: 配置中接口的数目。bConfigurationValue: 配置的值用于选择配置。iConfiguration: 配置信息的字符串描述符索引。bmAttributes: 配置特性如自供电、远程唤醒等。bMaxPower: 配置所需的最大电流。 Interface Descriptor接口描述符 bLength: 描述符的长度。bDescriptorType: 描述符的类型对于接口描述符值为0x04。bInterfaceNumber: 接口的编号。bAlternateSetting: 可选择的设置编号。bNumEndpoints: 接口使用的端点数目。bInterfaceClass: 接口的类别。bInterfaceSubClass: 接口的子类别。bInterfaceProtocol: 接口的协议。iInterface: 接口信息的字符串描述符索引。 Endpoint Descriptor端点描述符 bLength: 描述符的长度。bDescriptorType: 描述符的类型对于端点描述符值为0x05。bEndpointAddress: 端点的地址及方向。bmAttributes: 端点的属性如控制、同步、批量、中断等。wMaxPacketSize: 端点支持的最大数据包大小。bInterval: 中断端点的轮询间隔。 String Descriptor字符串描述符 用于提供与设备相关的文本信息如制造商名称、产品名称、序列号等。这些字符串描述符可以帮助用户和操作系统更好地识别和管理连接的USB设备。每个字符串描述符都有一个索引它们包含在设备描述符、配置描述符和接口描述符中。 bLength描述符长度字符串描述符的字节数。bDescriptorType描述符类型对于字符串描述符值为0x03。bString实际的字符串数据使用UTF-16LE编码。字符串的长度是可变的由bLength字段指定。注意字符串描述符并不是以零结尾的C风格字符串而是在数据中直接编码的。Language ID对于字符串描述符索引为0的字符串包含语言ID列表该列表指示支持的语言。索引每个字符串描述符都有一个唯一的索引从1开始。这些索引被用于在描述符中引用特定的字符串。 一些常见的字符串描述符索引包括iManufacturer制造商名称的字符串描述符索引。iProduct产品名称的字符串描述符索引。iSerialNumber序列号信息的字符串描述符索引。iConfiguration配置信息的字符串描述符索引。iInterface接口信息的字符串描述符索引。 这些字符串描述符允许制造商在USB设备中提供易于理解的信息以便用户能够识别设备并与之交互而不必仅仅依赖于设备的硬件信息。
常见的USB描述符类型及其对应的编号
描述符类型bDescriptorType编号bDescriptorType描述设备描述符Device Descriptor0x01描述连接到USB总线的设备的基本信息。配置描述符Configuration Descriptor0x02描述设备的配置和接口信息。字符串描述符String Descriptor0x03提供与设备相关的文本信息。接口描述符Interface Descriptor0x04描述接口的信息包括类别、子类别和协议。端点描述符Endpoint Descriptor0x05描述端点的信息包括方向、类型和最大数据包大小。设备质量描述符Device Qualifier Descriptor0x06用于USB 2.0设备提供设备的速度和能力信息。其他速度配置描述符Other Speed Configuration Descriptor0x07提供USB 2.0设备的其他速度配置信息。接口功率描述符Interface Power Descriptor0x08描述接口的功率需求。OTG描述符OTG Descriptor0x09用于USB On-The-GoOTG设备提供OTG设备的能力信息。接口功能描述符Interface Functional Descriptor0x24描述特定类型的接口的功能性信息如音频、视频等。MIDI接口描述符MIDI Interface Descriptor0x24描述MIDI音频接口的特定功能信息。
注意这只是一些常见的USB描述符类型实际上还有其他特定领域的描述符和扩展描述符用于支持更多的功能和特性。每个描述符类型都有其特定的用途和信息内容帮助操作系统和应用程序正确地配置和与USB设备进行通信。
USB描述符之间的关系
USB描述符之间的关系一个USB设备只有一个设备描述符。 设备描述符决定了该设备有多少种配置每种配置都有一个配置描述符 配置描述符中又定义了该配置有多少个接口每个接口都有一个接口描述符 接口描述符中又定义了该接口有多少个端点每个端点都有一个端点描述符 端点描述符定义了端点的类型、大小等。 如果有HID描述符或音频接口描述符则在接口描述符的后面。 一个设备至少要包含设备描述符、配置描述符和接口描述符如果USB设备没有端点描述符则它仅仅用默认管道与主机进行数据传输。 USB描述符之间的关系是一层一层的设备描述符、配置描述符、接口描述符、端点描述符。
我们在快速开发一个USB设备的时候就是要配置一个描述符结构体这样主机就能识别到我们这个设备是什么东西也就可以实现通信或者控制。 这是描述符号之间的关系图 主机在获取描述符时首先获取设备描述符再获取配置描述符然后根据配置描述符中的配置集合总长度一次将配置描述符、接口描述符、类特殊描述符(如果有)、端点描述符一次读回。注意接口描述符、类特殊描述符、端点描述符不能单独获取必须跟配置描述符以一个集合的方式一并返回。
一个键盘的描述符是什么样的呢 STM32内部的USB模块知识
STM32F103C8T6是STMicroelectronics的STM32F1系列微控制器中的一款型号它在USB功能方面提供了一些基本特性。注意该型号的USB功能主要支持USB设备模式不支持USB主机模式。以下是关于STM32F103C8T6的USB模块的一些基本特性 USB设备支持STM32F103C8T6支持将设备配置为USB设备。这意味着您可以将该微控制器配置为各种USB设备如虚拟串口、HID设备、存储设备等。 USB 2.0全速支持该型号支持USB 2.0全速12 Mbps通信适用于大多数USB设备应用。 USB OTG不支持相比一些更高级的STM32型号STM32F103C8T6不支持USB On-The-GoOTG功能。因此它只能工作在USB设备模式无法在同一个接口上切换为USB主机。 USB接口支持STM32F103C8T6支持多种USB接口包括控制传输、批量传输、中断传输和同步传输等。 USB设备类库STMicroelectronics提供了一套USB设备类库可以帮助您更轻松地实现各种USB设备功能。 USB时钟管理STM32F103C8T6提供了USB时钟管理功能您可以根据需要调整USB时钟频率以满足USB通信的要求。 USB电源管理STM32F103C8T6提供了USB电源管理功能可以管理USB供电和待机模式等。 低功耗模式STM32F103C8T6支持低功耗模式可以最小化功耗适用于电池供电的应用。 双向端点支持STM32F103C8T6支持双向端点这是USB通信中的一个关键特性。双向端点允许在同一个端点上进行双向数据传输从而实现设备和主机之间的双向通信。这意味着设备可以同时接收来自主机的数据以及向主机发送数据。 USB挂起Suspend和唤醒Resume功能 STM32F103C8T6支持USB挂起和唤醒功能这是一种用于节省能源的USB电源管理特性。当USB设备进入挂起状态时它会暂停通信并降低功耗以便在不需要通信时最小化能源消耗。这在移动设备等电池供电场景下非常有用。 当主机希望唤醒设备时它可以向设备发送唤醒信号Resume信号。设备接收到唤醒信号后会从挂起状态恢复并重新开始通信。这使得设备可以在需要时立即响应主机的通信请求。
需要注意的是虽然STM32F103C8T6提供了USB设备模式的支持但它的USB功能相对基本不具备一些高级功能如USB主机模式或USB OTG功能
STM32F103C8T6的USB模块框图解释 USB核心USB Core USB核心是USB模块的核心部分负责处理USB通信的各个阶段和功能。它包括USB控制器、寄存器、状态机等用于管理USB协议的数据传输、状态转换等。 时钟管理Clock Control 时钟管理模块用于提供USB所需的时钟信号。它可以配置USB时钟频率确保USB通信的稳定性和准确性。 电源管理Power Control 电源管理模块用于控制USB模块的供电。它可以管理USB设备的供电状态、低功耗模式以及USB的挂起和唤醒功能。 USB I/O接口USB I/O Interface USB I/O接口用于与外部连接包括USB数据线D、D-和USB电源线。它负责将USB通信的物理信号传输到USB核心进行处理。 USB收发器USB Transceiver USB收发器用于将数字信号转换为模拟信号并将模拟信号传输到USB总线上。同时它还将来自USB总线的模拟信号转换为数字信号以供USB核心处理。 USB握手和控制信号Handshake and Control Signals 这包括USB通信过程中的握手信号如ACK、NAK以及一些控制信号如Reset、Suspend、Resume等。这些信号用于控制USB通信的各个阶段和状态。 端点缓冲区Endpoint Buffers 端点缓冲区用于存储USB通信的数据。每个端点都有对应的缓冲区用于存储输入或输出数据。数据在USB通信过程中通过这些缓冲区进行传输。 中断和DMA控制Interrupt and DMA Control 这部分负责管理USB通信中的中断事件以及可能使用的DMADirect Memory Access传输。中断可以用于处理USB事件而DMA可以加速数据传输过程。 USB协议处理USB Protocol Handling USB协议处理模块负责解析USB协议数据包处理令牌、数据、握手等内容并根据USB协议执行相应的操作。
总之STM32F103C8T6的USB模块框图由多个关键部分组成每个部分都在不同层面上支持USB通信的各个方面包括物理层的信号处理、USB协议的管理、时钟和电源管理等。详细了解这些组成部分将有助于您更好地理解STM32F103C8T6的USB模块以及其在USB通信中的功能。对于更具体的细节和配置请查阅STM32F103C8T6的数据手册和相关的USB库文档。
实现一个STM32USB设备的一般步骤
选择合适的STM32微控制器 选择适合您应用需求的STM32微控制器型号确保它支持USB设备模式。熟悉USB基础知识 在开始之前了解USB的基本原理、协议和通信机制以便理解您将要实现的功能。配置时钟和引脚 配置微控制器的时钟以及与USB相关的引脚确保USB时钟和数据线D、D-的连接正确。初始化USB模块 初始化USB模块包括USB核心、时钟和电源管理。这将启用USB功能并为后续的配置做准备。配置USB端点 配置USB端点确定设备的输入和输出端点。选择适当的传输类型批量、中断、控制等和方向输入、输出。配置USB描述符 编写USB描述符包括设备描述符、配置描述符、接口描述符等。这些描述符定义了设备的特性、功能和通信规则。实现USB类功能如果需要 如果您希望实现特定的USB类功能如HID、CDC等根据USB类规范实现相应的功能和协议。处理USB事件和中断 实现USB事件和中断的处理程序用于响应USB事件如插拔、挂起、唤醒等。实现USB数据传输 在USB通信中实现数据的传输和处理。这可能涉及在端点缓冲区中存储和获取数据。测试和调试 在实现后进行测试和调试确保USB通信正常运作处理各种情况和事件。
STM32支持的设备类
当涉及到STM32微控制器的USB类时以下是一些常见的USB类以及它们在STM32中的支持情况的简要列举。
USB类描述和应用STM32支持情况HIDHuman Interface Device用于键盘、鼠标、游戏控制器等人机交互设备STM32 HAL库提供HID类驱动支持CDCCommunication Device Class用于串口通信设备、虚拟串口、通信接口等STM32 HAL库提供CDC类驱动支持MSCMass Storage Class用于USB存储设备、U盘模拟、SD卡模拟等STM32 HAL库提供MSC类驱动支持Audio Class用于音频设备、麦克风、扬声器、音频接口等一些STM32型号提供Audio类的部分支持Printer Class用于打印机设备、USB打印输出等通常需要自行实现没有官方支持CDC-ECM用于以太网控制模型模拟USB以太网适配器通常需要自行实现没有官方支持HID-Bootloader用于USB引导加载程序、固件更新等通常需要自行实现没有官方支持
这只是一些常见的USB类别和它们的应用STM32系列提供了丰富的USB库和功能使您能够实现各种USB设备功能。
Interface Device | 用于键盘、鼠标、游戏控制器等人机交互设备 | STM32 HAL库提供HID类驱动支持 | | CDCCommunication Device Class | 用于串口通信设备、虚拟串口、通信接口等 | STM32 HAL库提供CDC类驱动支持 | | MSCMass Storage Class | 用于USB存储设备、U盘模拟、SD卡模拟等 | STM32 HAL库提供MSC类驱动支持 | | Audio Class | 用于音频设备、麦克风、扬声器、音频接口等 | 一些STM32型号提供Audio类的部分支持 | | Printer Class | 用于打印机设备、USB打印输出等 | 通常需要自行实现没有官方支持 | | CDC-ECM | 用于以太网控制模型模拟USB以太网适配器 | 通常需要自行实现没有官方支持 | | HID-Bootloader | 用于USB引导加载程序、固件更新等 | 通常需要自行实现没有官方支持 |
这只是一些常见的USB类别和它们的应用STM32系列提供了丰富的USB库和功能我们能够实现各种USB设备功能。
说明
资料都是来自网络仅仅是供大家参考如有错误还请斧正。 部分截图来自哔哩哔哩的视频截图 视频链接在此 https://www.bilibili.com/video/BV1nU4y1g7nD/?p79spm_id_from333.880.my_history.page.clickvd_source54e40fa364fe9f695d8955fd2d0b4f68