STM32的USB虚拟串口设计

STM32的USB虚拟串⼝设计
毕业设计 [论⽂]
题⽬:基于STM32的USB虚拟串⼝
学院:
专业:
扫地车设计
姓名:牙科涡轮机
学号:
指导⽼师:
完成时间:2014年5⽉19⽇
摘要
USB接⼝由于⽀持热插拔和标准统⼀等特点得到了⼴泛应⽤,越来越多的电脑设备开始采⽤USB接⼝进⾏数据的传输,⽽如何在不改变现有应⽤软件的情况下,将设备移植到USB接⼝成为⼈们研究的热门。
论⽂以USB通信设备类中的抽象控制模型为基础,研究了通信设备类及实现虚拟设备的原理,设计并实现了基于通信设备类的虚拟串⼝驱动程序。
论⽂研究设计了基于通信设备类的虚拟串⼝驱动程序的结构和实现⽅案,程序主要由通信命令转换和数据传输两部分构成,通信命令转换符合通信设备类中抽象控制模型的规范,数据传输部分对现有虚拟串⼝的实现技术进⾏了改进。论⽂的主要⼯作如下:
1)研究了USB协议的请求和传输模式,分析了通信设备类实现虚拟设备的⽅案。
2)给出了⼀种符合通信设备类中抽象控制模型的虚拟串⼝实现⽅案。该⽅案提供了
⼀种基于通信设备类开发虚拟设备的模板,对设计中的诸多问题进⾏了详细的说明,并改进了虚拟串⼝驱动程序中数据的处理流程。
3)将改进后的数据处理流程应⽤于虚拟串⼝的实现中,⽣成了⼀种基于通信设备类金属表面涂料
蜂窝煤采暖炉
的稳定、⾼速的虚拟串⼝。最后,在串⼝测试软件下对虚拟串⼝驱动程序进⾏了测试,达到了预期⽬标。
关键字:通讯设备类;枚举过程;虚拟串⼝程序;抽象控制模型
Abstract
USB interface supports plug and play which has unified standards, so it has a wide ra nge of applications. More and more computer device use USB interface to transfer data, so how to make many old deaves to support USB interface without changing current applicati on is becoming the hot field.
脉动测速USB Communication Device Class and it's abstract control model are studied, princip les of Communication Device Class and implementation techniques of abstract device are a lso analyzed in the thesis. On the basis of this, design and implementation of virtual serial port driver based on Communication Device Class are given.
The overall structure and implementation scheme of virtual serial port driver based on CDC are designed. The virtual serial port driver is made up of two parts which are commu nication command transfer module and data transmission module. The communication com mand transfer module satisfies the specification of abstract control model, and the data tran sfer part improves the technique of current virtual serial port. The main works in the thesis are as follows:
1)The request and transfer model for USB protocol are studied, and the implementation t
echniques of virtual serial port are analyzed.
2)The implementation scheme of virtual serial port driver that satisfy abstract control mo
de in CDC is graven. A new template for the development of virtual serial port based o n CDC is brought out, and it describes some issues for the virtual serial port driver in d etails, at the same time, the processing steps for virtual serial port driver is improved.
3)The improved data processing steps for virtual serial port driver is applied in the impl
ementation of ritual serial port driver, and a stable, high-speed virtual serial port is ma de. At last, the test for the virtual serial port driveon ActiveSync is given, and the test r esult show that it's function is achieved the requirement goals. Keywords: Communication Device Class ;Enumeration Process;
Virtual Serial Port Driver ;Abstract Control Model
⽬录
摘要 (1)
Abstract (2)
⽬录 (3)
第1章绪论 (4)
1.1 USB虚拟串⼝设计背景及其意义 (4)
1.2 USB虚拟串⼝设计研究⽅法及⽬标 (4)
1.3 USB虚拟串⼝设计国内外研究现状 (5)
第2章USB及串⼝简单介绍 (7)
2.1 USB简介 (7)
2.2 串⼝简介 (7)
2.3 USB虚拟串⼝简介 (8)
第3章USB和USB CDC协议 (9)
3.1 通⽤串⾏总线USB (9)
3.1.1 USB协议相关知识介绍 (9)
3.1.2 USB协议枚举过程分析 (10)
3.2 USB CDC协议 (11)
3.3 USB通信过程 (12)
第4章虚拟串⼝的实现 (15)
4.1 串⼝的⼯作原理 (15)
4.2 USB虚拟串⼝设计 (16)
4.2.1 STM32 USB部分说明 (16)
4.4.2 USB电路连接 (16)
4.2.3 虚拟串⼝程序设计 (17)
第5章结论 (20)
参考⽂献 (22)
致谢 (23)
附录: (24)
第1章绪论
1.1 USB虚拟串⼝设计背景及其意义
USB是⼀种统⼀的传输规范,但是接⼝有许多种,最常见的就是咱们电脑上⽤的那种扁平的,这叫做A型⼝,⾥⾯有4根连
线,根据谁插接谁分为公母接⼝,⼀般线上带的是公⼝,机器上带的是母⼝。现在的很多电⼦设备都采⽤USB接⼝来设计,使得各个设备之间的相互通信更为⽅便和快捷。然⽽越来越多的设备开始使⽤USB接⼝,对USB协议也是⼀个很⼤的挑战。⼀般在传输数据的接⼝与通信协议是⼀⼀对应的,⽽由于接⼝的不同,不太外设使⽤的协议也不同。
USB接⼝具有使⽤简单、⽀持热插拔、传输速度快、便于端⼝扩展等特点,在⾼速实时数据传输系统、数据采集系统等⼯业领域得到了⼴泛的应⽤。现代个⼈计算机往往都带有四个以上的USB接⼝。
然⽽在现代嵌⼊式系统和⼯业现场中,最常⽤的标准外设是异步串⾏通信接⼝(串⼝),如何在没有串⼝的情况下得到串⼝数据,并完成数据传输成为⼀个亟待解决的问题。
⾸先,越来越多带USB接⼝的器件涌现出来,如带USB接⼝的单⽚机,或独⽴的USB接⼝器件,⽽这些器件的成本已经很接近使⽤RS232电平转换芯⽚所带来的成本。其次,市场上也出现了⼀些USB转串⼝的芯⽚或者USB转串⼝数据线,它们的⼀头为串⼝,另⼀头为USB接⼝,在其内部完成串⼝到USB协议的转换。它们通过USB接⼝连接到个⼈计算机后,操作系统识别的却是⼀个串⼝设备,这说明USB 接⼝对于传统的串⼝调试⼯具和⽤户基于串⼝的应⽤程序是公开的,开发者完全不⽤更改PC端的调试和应⽤程序。但这些器件的USB类不属于标准的USB设备类,因此需要在操作系统上安装必要的驱动。另外由于不是操作系统⾃带的设备驱动,⽽且通信经过了多次转换,当调试遇到问题时常常⽆法确定是串⼝出了问题还是USB出了问题。这些问题限制了USB转串⼝器件的应⽤。
设备通信类(Communication Device Class)是USB组织定义的⼀类专门给各种通信设备使⽤的USB⼦类,是⼀种可以实现虚拟串⼝通信的协议。CDC类对实现USB 接⼝和串⼝之间的转换提供了⼀个很好的解决办法。⽽且CDC类是USB的⼀个⼦类,操作系统默认提供此类驱动,故可以解决USB转串⼝类器件传输不稳定的问题。
1.2 USB虚拟串⼝设计研究⽅法及⽬标
本⽂所讲述的USB虚拟串⼝是采⽤STM32来实现的。STM32系列控制器具有⾼性能、低成本、低功耗的特点,它⾃⾝带的USB模块符合USB2.0规范和OTG1.3
规范,⽀持全速12Mbps和低速1.2Mbps两种模式。⽽且STM32官⽅封装了很多库函数,对于编写USB驱动节省了很多时间。本⽂在理解USB体系结构并深⼊研究USB CDC协议的基础上,通过分析USB枚举过程在STM32平台上实现了USB虚拟串⼝,通过虚拟串⼝达到了USB与串⼝通信的预期⽬的。
1.3 USB虚拟串⼝设计国内外研究现状
国内研究现开发设备控制芯⽚较难,地区的许多公司可以⽣产这种转换的设备,并提供功能齐全的开发接⼝和⽂档说明。国内集成电路的设计开发公司的能⼒还有限,限于提供不太复杂的应⽤及单⼀产品中,并且在国内的市场占有率还很⼩,⽬前正处于蓬勃发展的阶段。
当前USB已经成为个⼈计算机(PC)必备接⼝,各种PC电⼦消费产品也逐渐配置了这种标准的接⼝。为了顺应这种情况,对于使⽤串⼝开发应⽤的⼈员需要提供串⼝与USB之间的转接组件,使串⼝数据和及其控制信号可以在USB总线上进⾏传输。
USB和串⼝之间的转换实现,有硬件实现和软件实现两种。硬件实现⼀般需要设计专⽤的设备控制芯
⽚。开发设备控制芯⽚较难,需要有专业的硬件设计及编程能⼒,为了提⾼USB和串⼝转换的开发效率,国外有很多公司都开发出了相应的控制芯⽚。地区的许多公司可以⽣产实现这种转换的设备,并提供功能齐全的开发接⼝和⽂档说明。国内集成电路的设计开发公司能⼒还有限,限于提供不太复杂的应⽤及单⼀产品中,并且在国内的市场占有率还很⼩,⽬前正处于蓬勃发展阶段。设备控制芯⽚分为通⽤设备控制器,定位于某⼏类USB产品的编程应⽤;专⽤设备控制器,定位于某⼀个USB产品的应⽤。通⽤设备控制器⼤部分被国外芯⽚垄断,国内在专⽤设备控制器已有所发展。
国内外已有很多商业上成熟的此类接⼝转换器,其重点都是放在虚拟串⼝设备的设计上。⼀个好的转接器需要设计⼀个能列举虚拟串⼝的驱动程序,在这种情况下,PC端的应⽤软件依然是针对RS-232串⾏端⼝编程的,外设也是以RS-232为数据通信通道,但从PC到外设之间的物理连接却是USB总线,其上的数据通信也是USB 数据格式。采⽤这种⽅式的好处在于:⼀⽅⾯可以保护原有的软件开发投⼊,并使已有的针对RS-232外设的应⽤软件不加修改,便可继续使⽤;另⼀⽅⾯就是USB总线的⾼传输速率和即插即⽤的特性得到了充分利⽤。虚拟串⼝的⽤途最初都是⽤于串⼝转⽹络通信接⼝,也就是把对⽹⼝的操作映射为对串⼝操作。
例如,在传统的门禁系统、考勤系统、售饭系统、POS消费系统和⼀些其中控制系统中,传统串⼝总线获得了⼤量的应⽤。但与⽹络相⽐,传统串⼝总线在传输距离
和可靠性⽅⾯存在较⼤的局限性,随着⽹络的普及,通过TCP/IP⽹络实现⽹络连接,解决传统串⼝在传输距离和可靠性⽅⾯⽅⾯存在较⼤的局限性成为必然选择。由于原来的平台软件是通过电脑串⼝收发数据,为了使平台软件不⽤改变⼯作⽅式,需要在电脑平台上安装虚拟串⼝驱动,通过虚拟串⼝驱动可以将硬件转换器从⽹络上传送来的数据重定向到⼀个虚拟串⼝上。这样,平台软件通过虚拟串⼝进⾏数据收发。
USB和串⼝之间的转换实现,还有⼀种实现是软件实现。这⾥的软件实现主要指设计USB转串⼝的驱动程序。在USB中CDC ⼦类成为规范之前,USB转串⼝的驱动程序的实现各种各样,且基于特定的设备,通⽤性较差。USB中CDC⼦类中抽象控制模型规范了虚拟串⼝实现的框架,增强了虚拟串⼝驱动程序的通⽤性。
第2章USB及串⼝简单介绍
2.1 USB简介
USB是英⽂Universal Serial Bus(通⽤串⾏总线)的缩写,是⼀个外部总线的标准,⽤于规范电脑与外部设备的连接和通讯,是应⽤在PC领域的接⼝技术[1]。USB传输速度极快,使⽤很⽅便,它可以连接的⾮常多的外设。⽐如:⿏标、键盘、移动硬盘等。
USB设备之所以会被⼤量应⽤,主要有以下优点:
1)可以热插拔。这让⽤户在使⽤外接设备时不需要重复关机这样的动作。
2)携带⽅便。USB设备通常以“⼩、轻、薄”见长,对⽤户来说,同样40G硬盘,
USB硬盘⽐IDE硬盘要轻⼀半,在想要随⾝携带⼤量数据时,当然USB硬盘会是⾸选了。
3)标准统⼀。常见的是IDE接⼝的硬盘,串⼝的⿏标键盘,并⼝的打印机扫⾯议,
可以有了USB之后,这些应⽤外设统统可以⽤同样的标准与PC连接,这时就有了USB硬盘,USB⿏标,等等。
4)可以连接多个设备。USB在PC上往往具有多个接⼝,可以同时连接⼏个外设,
最⾼可连接127个设备。
每个USB只有⼀个主机,主机也称为根,根结或根Hub,它做在主板上或作为适配卡安装在计算机上,主机包含有主控制器和根集线器,控制着USB总线上的数据和控制信息的流动,每个USB系统只能有⼀个根集线器,它连接在主控制器上。关于USB的数据传输:主控制器负责主机和USB设备间数据流的传输。它⽀持四种基本的数据传输模式:控制传输,等时传输,中断传输及数据块传输。
2.2 串⼝简介
串⾏通信接⼝即是串⼝,采⽤串⾏通信⽅式的扩展接⼝。其通信线只有⼀根⽤来传输数据,数据传输⽅式是⼀位⼀位的顺序传送。这样的传输⽅式简单可以降低很多成本,故很多嵌⼊式系统采⽤此种接⼝。串⼝适⽤于长距离通信,但其传输速率较慢。串⼝通信可以分为单⼯、半双⼯和全双⼯三种[2]。单⼯数据传输只⽀持数据在⼀个⽅向上传输;半双⼯数据传输允许数据在两个⽅向上传输,但是,在某⼀时刻,只允许数据在⼀个⽅向上传输,它实际上是⼀种切换⽅向的单⼯通信;全双⼯数据通信允许数据同时在两个⽅向上传输,因此,全双⼯通信是两个单⼯通信⽅式的结合,它要求发送设备和接收设备都有独⽴的接收和发送能⼒。
串⼝通常有RXD和TXD两个端⼝,RXD是接收端,TXD是发送端。串⼝将RXD连接到另⼀个设备的TXD端,TXD连接到另⼀个设备的RXD端,然后通过CLK的时序就可以进⾏数据的发送与接收了。
2.3 USB虚拟串⼝简介
USB通信设备类在物理层通过USB总线,采⽤虚拟串⼝的⽅式为主机提供⼀个物理串⼝。在系统内部,USB芯⽚提供⼀个批量传输IN端点和⼀个批量传输的OUT 端点,⽤于数据的接受和发送,模拟串⼝的RXD线和TXD线;另外,芯⽚还提供中断IN 端点,发送当前串⼝的状态,实现对串⼝传输的控制。串⼝设备的数据,由系统的串⼝采集,在芯⽚内完成USB包的封装,通过USB总线上传⾄主机,再由相应的串⼝应⽤程序(串⼝调试助⼿)进⾏处理。对⽤户来说,看到的是基于串⼝的数据采集和传输,⽽实际上实现的是基于USB协议包的数据传输。
第3章USB和USB CDC协议
无人机北京天宇创通3.1 通⽤串⾏总线USB
3.1.1 USB协议相关知识介绍
●USB端点
USB通信最基本的形式是通过⼀个名为端点的东西。USB端点只能往⼀个⽅向传送数据,从主机到设备(称为输出端点)或者从设备到主机(称为输⼊端点)。端点可以看作是单向的管道。USB是主机与外围设备之间的⼀种串⾏连接。它以单⼀类型的总线连接不同类型的设备[3]。USB通过具有⼀定格式的“信包”按⼀定的“规程”来传输信息,根据信息的性质可以分为4种传输类型:
1)控制模式:主要⽤于配置USB设备,获取设备信息,发送数据到设备,或者获
取设备的报告。每⼀个USB设备都必须具有名为端点0的控制端点,USB核⼼使⽤该端点在插⼊设备时进⾏相应的配置。在USB虚拟串⼝设计中使⽤该模式进⾏配置USB设备,并通过该模式在主机与设备间交换控制请求。
2)中断模式:虽然是中断模式,实际上是⽤于对USB设备周期性查询来实现的。
USB设备不存在主动向主机发送“中断请求”的能⼒,只能被动地接受主机通过USB总线查询。在USB虚拟串⼝设计中使⽤该模
式来实时报告设备状态。
3)批量模式:批量端点⽤于传输⼤量的数据,没有很强的时间要求,但需要确保数
据的可靠传输。在USB虚拟串⼝设计中该模式进⾏数据发送与接收。
4)等时模式:⽤于定时传输⼤量的数据,但不能确保数据是否丢失。
●USB描述符
USB是通过描述符来对USB设备进⾏属性说明的,当USB第⼀次连接到主机上时,主机要求了解USB设备的⼀些基本信息,⽐如设备有何种功能,需要占⽤多少USB资源,属于何种设备类等。只有主机完全确认了这些信息之后,设备才能正常⼯作。这些信息是通过存储在设备中的USB描述符来体现的。当USB设备插⼊主机后,主机要对其进⾏总线枚举,配置该设备所需的驱动等信息。主机通过标准请求来读取USB的描述符。
标准的USB设备有5种描述符,分别为设备描述符、配置描述符、接⼝描述符、端点描述符和字符串
描述符。每⼀个USB设备都有⼀个设备描述符。⽽每⼀个设备描述符有⼀个默认的配置描述符,配置描述符主要定义了USB设备功能,那样就需要为每个功能定义⼀个配置。但是同⼀个时刻只有⼀个配置可⽤,⼀个配置⽀持⾄少⼀个接⼝。接⼝定义了实现功能的硬件的集合,接⼝往往包括多个端点。
USB枚举
枚举就是从设备读取⼀些信息,知道设备时什么样的设备,如何进⾏通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试USB设备很重要的⼀点就是枚举过程,只要枚举成功了,那么就已经成功⼤半了。
3.1.2 USB协议枚举过程分析
USB协议定义了设备的6种状态,枚举过程会经历4种状态的迁移:上电状态,默认状态,地址状态和配置状态(其他两种是连接状态和挂起状态)。
枚举过程实际上⽤到⽽且只⽤到了总线的“控制传输”的传输⽅式。这种传输⽅式通常⽤于配置、命令、状态等情形,其中的设置操作setup和状态操作status过程的数据包具有USB协议定义的数据结构,因此,控制传输只能通过消息管道进⾏。
⼀个完整的控制传输包括三个过程:建⽴连接、数据过程、状态过程。建⽴连接的过程都是有主机发
起,它开始于⼀个Setup 令牌包,后⾯紧跟着⼀个DATA0包。如果是控制输⼊传输,数据过程则为输⼊数据,若是控制输出传输,则数据过程是输出数据。
数据过程可选型是指设置过程需要指定数据长度,如果指定为0,则没有数据过程。状态过程跟在数据之后,状态过程恰好和数据过程的数据传输⽅向相反,因为此阶段主要是⽤来确认之前两阶段的所有数据已经正确传输了。
下⾯是枚举详细过程:
⾸先获取设备描述符。USB主机检测到USB设备插⼊后,就会先对设备复位。设备复位后,USB主机就会对地址为0的设备发送获取设备描述符的标准请求。所有的USB设备在总线复位后其地址都为0,这样主机就可以跟那些刚刚插⼊的设备通过地址0(端点0)通信。主机在建⽴阶段发出获取设备描述符的输⼊请求,设备收到该请求后,在数据过程将设备描述符返回给主机。主机在成功获取到⼀个数据包的设备描述符后并且确认没有什么错误后(注意:有些USB设备的端点0⼤⼩不⾜18字节(但⾄少具有8字节),⽽标准的设备描述有18字节,在这种情况下,USB设备只能暂时按最⼤包将部分设备描述符返回,⽽主机在成功获取到前⾯⼀部分描述符后,就不会再请求剩下的设备描述符部分,⽽是进⼊设置地址阶段),就会返回⼀个0长度的状态数据包给设备。
然后获取地址。主机再对设备复位⼀下,接下来就会进⼊到设置地址阶段。这时USB主机发出⼀个设
置地址的请求(建⽴过程,设置地址⽆数据过程),地址包含在建⽴包中,具体的地址USB主机会负责管理,它会分配⼀个唯⼀的地址给新的设备。USB设备在收到地址后,返回0长度的状态包,主机收到0长度的状态包之后,会
返回⼀个ACK给设备。设备在收到这个ACK之后,就可以启⽤了。这样设备就分配到了⼀个唯⼀的设备地址,以后主机就通过它来进⾏访问该设备。
然后主机再次获取设备描述符。这次跟第⼀次可能有点不⼀样,这次需要获取完全部的18个字节的设备描述符。当然,如果你的端点0缓冲⼤于18字节的话,那就跟第⼀次的情形⼀样了。
接下来,主机就会获取配置描述符。配置描述符总共为9字节。主机在获取到配置描述符后,根据⾥⾯的配置集合总长度,再获取配置集合。配置集合包括配置描述符,接⼝描述符,端点描符等等。
然后主机就会根据获取的配置集合对设备进⾏配置,使设备从地址状态进⼊配置状态。最后主机发送最后⼀个Setup包,允许所有端点进⼊⼯作状态。
过程⼤体分为:获取设备描述符、设置地址、再次获取设备描述符(此次获取完整的设备描述符)、获取配置描述符、对设备

本文发布于:2024-09-22 22:23:44,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/272409.html

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

标签:设备   数据   虚拟   描述符   实现   过程   配置   传输
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议