STM32之USB虚拟串口
STM32之USB虚拟串⼝
在现代个⼈电脑的USB是⼏乎所有外设的标准通信端⼝。然⽽许多⼯业应⽤软件仍然使⽤经典的串⼝(UART)。USB虚拟串⼝提供了绕过这个问题的⼀个简单的解决⽅案。
为了让USB被视为⼀个COM端⼝,USB设备必须根据通信设备类(CDC)规范来实现两个接⼝:
1.抽象控制模型通信,在端点中有1个中断:在我们的实现中,这个接⼝在描述符中声明,但是相关的端点(端点2)不被使⽤。
2.抽象控制模型数据,具有1个bulk in端点和⼀个bulk out 端点,这个接⼝在实际中由端点1(in)和端点3(out)表⽰。端点1⽤于通过USB将从UART接收到的数据发送到PC。端点3⽤于接收来⾃PC的数据并通过UART发送。
为了实现虚拟COM端⼝,该设备⽀持以下类特定请求:
● SET_CONTROL_LINE_STATE:
RS-232信号⽤于告诉设备数据终端设备现在是存在的.该请求总是在Virtual_Com_Port_NoData_Setup() 函数中返回⼀个
USB_SUCCESS(usb_prop.c中 )。
● SET_COMM_FEATURE:
控制特定通信功能的设置。这个请求总是在Virtual_Com_Port_NoData_Setup() 函数中返回⼀个USB_SUCCESS(usb_prop.c中 )。
● SET_LINE_CODING:
发送设备的配置。它包括波特率、停⽌位、奇偶校验和字符位数。所接收的数据存储在⼀个特定的数据结构中,称为“linecoding”,⽤于更新UART参数。
● GET_LINE_CODING:
此命令要求获取设备当前波特率、停⽌位、奇偶校验和字符位数。该设备⽤存储在“linecoding”结构中的数据做出响应。
硬件配置接⼝
前十名游戏在虚拟COM端⼝中的硬件配置接⼝(hw _ config.c)管理以下程序:
●配置的系统和外设(USB和USART)时钟和中断2022年7月18日五行穿衣
●USART默认值初始化
●⽤通过SET_LINE_CODING命令收到的参数配置串⼝开学季的优美语录
●把收到的数据发送到PC,通过USB串⼝通讯
●发送收到的数据通过USB串⼝通讯
1、USB标准规范类型
USB规范⼤致可分为以下三类:
1)、标准规范
标准规范为最基础的规范,主要有USB1.0、USB1.1、USB2.0和USB3.0等等。
2)、USB设备类规范
设备类规范主要是针对于具体的USB设备⽽推出的类规范,有Mass Storage、Audio Device、Video Device等等设备相关规范。
3)、USB HOST控制器规范
主要有OHC和UHC等
1、标准规范
USB是通⽤串⾏总线的英⽂缩写,是Intel公司开发的总线架构,使得在计算机上添加串⾏设备⾮常容易。只须将设备插⼊计算机的USB 端⼝中,系统会⾃动识别和配置。根据时代发展,USB接⼝标准经历了⼀代USB、第⼆代USB 2.0和第三代USB 3.0。山东会考成绩查询
USB规格第⼀次是于1995年,由Intel、IBM、Compaq、Microsoft、NEC、Digital、North Telecom等七家公司组成的USBIF(USB Implement Forum)共同提出,USBIF于1996年1⽉正式提出USB1.0规格,频宽为1.5Mbps.不过因为当时⽀持USB的周边装置少的可怜,所以主机板商不太把USB Port直接设计在主机板上。
USB2.0技术规范是有由Compaq、Hewlett Packard、Intel、Lucent、Microsoft、NEC、Philips共同制定、发布的,规范把外设数据传输速度提⾼到了480Mbps,是USB 1.1设备的40倍!2000年制定的USB 2.0标准是真正的USB 2.0,被称为USB 2.0的⾼速(High-speed)版本,理论传输速度为480 Mbps.
利智资料
USB 3.0是最新的USB规范,该规范由英特尔等公司发起,USB3.0的最⼤传输带宽⾼达5.0Gbps(640M
B/s),USB3.0 引⼊全双⼯数据传输。5根线路中2根⽤来发送数据,另2根⽤来接收数据,还有1根是地线。也就是说,USB 3.0可以同步全速地进⾏读写操作。
USB版本最⼤传输速率速率称号最⼤输出电流推出时间
USB1.0  1.5Mbps(192KB/s)低速(Low-Speed)5V/500mA1996年1⽉
USB1.112Mbps(1.5MB/s)全速(Full-Speed)5V/500mA1998年9⽉
USB2.0480Mbps(60MB/s)⾼速(High-Speed)5V/500mA2000年4⽉
USB3.05Gbps(500MB/s)超⾼速(Super-Speed)5V/900mA2008年11⽉
USB 3.110Gbps(1280MB/s)超⾼速+(Super-speed+)20V/5A2013年12⽉
这是从时间维度上来看的,但是每⼀代USB接⼝针对不同的设备⼜细分出来具体的型号,如USB Type A/B/C/Mini/Micro。下⾯是
USB2.0和USB3.0标准下的各类接⼝⽰意图:
⼀、USB系统的结构
USB系统是由三个逻辑层组成:功能层、USB设备层和USB总线接⼝层。并且每⼀层都是由主机和USB设备不同的功能模块组成,如下图所⽰:
1、功能层(接⼝)
功能层是由客户软件和设备⽅的功能单元组成,其能够实现USB设备传输的特定功能。通过功能层可直观地理解USB传输的数据内容。其中,客户软件通过USB系统软件来与USB设备进⾏通信。功能单元对于客户软件,可视为接⼝的集合。
2、USB设备层 (端点)
USB设备层是由USB系统软件和USB设备的USB逻辑设备组成,其实现主机和USB设备之间传输的具体配置。USB逻辑设备对于USB系统软件,可视为端点的集合。
3、USB总线接⼝层 
USB总线接⼝层是由主机的USB主控制器和设备的USB总线接⼝组成。其实现主机和USB设备实际的数据传输。
欧洲最权威的12星座分析4、主机部分
USB主机部分由客户软件、USB系统软件和USB总线接⼝组成。
4.1 客户软件
客户软件负责和USB设备的功能单元进⾏通信,以实现特定的功能。客户软件不能直接与USB设备相连接,必须通过USB系统软件和USB总线接⼝才能实现连接。客户软件包括USB设备驱动程序和界⾯应⽤程序两部分。
4.2 USB系统软件
USB系统软件负责和USB逻辑设备进⾏配置通信,并管理客户软件启动的数据。⼀般包括USB总线驱动程序、USB主控制驱动程序和⾮USB主机软件三个部分,这部分会由系统提供。
4.3 USB总线接
USB总线接⼝包括主控制器和跟集线器两部分。其中,主控制器是负责完成主机和USB设备间的数据实际传输。根集线器是为USB系统连接起点。
5、设备部分
USB设备部分由三个功能模块组成,分别是USB总线接⼝、USB逻辑设备和功能单元。
功能单元看作是⼀个接⼝的集合;USB 逻辑设备被USB系统软件看作⼀个端点的集合;USB总线接⼝是USB设备中的串⾏接⼝引擎(SIE)。
当客户程序通过USB管道发送或接收数据时,它⾸先调⽤Win32 APl,调⽤最终将使功能驱动程序收到⼀个IRP。⽽驱动程序的⼯作就是把客户的请求引导到有正确端点的管道上。它把请求提交到总线驱动程序,总线驱动程序再把请求分解成多个事务,然后这些事务被送往总线。总线上的信息流以每毫秒⼀帧数据的形式流动。总线驱动程序必须安排好多个事务以使它们能被装⼊同⼀帧中。
⼆、USB的拓扑结构
USB是⼀种主从结构的系统。主机叫Host,从机叫做Device(也叫设备)。通常所说的主机具有⼀个或者多个USB主控制器(host controller)和根集线器(root hub)。主控制器主要负责数据处理,⽽跟集线器则提供⼀个连接主控制器与设备之间的接⼝和通路。
通常情况下,PC机上有多个主控器和多个USB⼝,⼀个主控器下有⼀根集线器,⼀根集线器通常具有⼀个或者⼏个USB接⼝。通常集线器可以通过USB集线器来扩展USB接⼝,只是带宽是不能够拓宽的,因为带宽是共享⼀个USB主控器的。
了解上⾯的信息后,再来看USB的拓扑结构如下图:
USB的拓扑结构看起来是⼀个⾦字塔形的结构,具体构成如下:
塔顶是USB的主控器和根集线器,下⾯接USB集线器,USB集线器将⼀个USB⼝扩展为多个USB⼝,多个USB⼝同样可以通过USB集线器扩展出更多的接⼝。不过USB⼝并不能通过USB集线器⽆⽌境的扩展,他是有限制的,例如在USB2.0规定它最多扩展6次。
理论上⼀个USB主控器最多可接127个设备,这是因为协议规定每个USB设备具有⼀个7bit地址(取值范围为0~127,地址⽤于给主机识别是哪个设备,其中0地址值得注意,是给刚接⼊未初始化的设备使⽤的)。
三、USB的设备架构
设备架构认为设备是由⼀些配置、接⼝和端点构成的。其中配置和接⼝是USB功能的抽象,实际的数据传输由端点来完成。其对应关系如下图所⽰:
1.设备 
设备代表USB设备,它由⼀个或多个配置组成。设备描述符⽤于说明设备的总体信息,并指出其所包含配置的个数。
2.配置 
在使⽤USB设备前,必须为其选择⼀个合适的配置。如USB设备的低功耗模式和⾼功耗模式分别对应⼀个配置。配置描述符⽤于说明USB设备中各个配置的特性。
3.接⼝ 
⼀个配置可以包含⼀个或多个接⼝。接⼝是⼀个端点的集合。接⼝描述符⽤于说明USB设备中各个接⼝的特性。 
4.端点 
端点是USB设备中的实际物理单元,USB数据传输就是在主机和USB设备各个端点之间进⾏的。
5、管道
管道,是主机软件(数据缓冲区)和USB设备的各个端点之间的数据传输链接,它是两者之间通信流的抽象。然⽽,实际的数据传输是由USB总线接⼝层来完成的。管道和USB设备中的端点⼀⼀对应,并且各个管道的数据传输是相互独⽴的。
管道有两种类型:流管道和消息管道。其中最为重要的消息管道是“缺省控制管道”,这个管道在设备开始上电后就存在了,它⽤于提供设备的配置与状态等信息。主机与设备之间的联络就是通过消息管道实现的。
四、USB枚举与通信的具体过程
1、USB接头
下图是⼀个USB接头的结构图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。