下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、毕业设计论文题目:基于 STM32STM32 的 USBUSB 虚拟串口学院:专业:姓名:学号:指导老师:完成时间:20142014 年 5 5 月 1919 日USB 接口由于支持热插拔和标准统一等特点得到了广泛应用,越来越多的电脑设备开始采用 USB 接口进行数据的传输,而如何在不改变现有应用软件的情况下,将设备移植到USB 接口成为人们研究的热门。论文以 USB 通信设备类中的抽象控制模型为基础, 研究了通信设备类及实现虚拟设备的原理,设计并实现了基于通信设备类的虚拟串口驱动程序。论文研究设计了基于通信设备类的虚拟审驱动程序的结构和实现方案,程序主要由通信命令转换和数据传输两部分构成,通
2、信命令转换符合通信设备类中抽象控制模型的规范,数据传输部分对现有虚拟串口的实现技术进行了改进。论文的主要工作如下:1)研究了 USB 协议的请求和传输模式,分析了通信设备类实现虚拟设备的方案。2)给出了一种符合通信设备类中抽象控制模型的虚拟串口实现方案。该方案提供了一种基于通信设备类开发虚拟设备的模板,对设计中的诸多问题进行了详细的说明,并改进了虚拟串口驱动程序中数据的处理流程。3)将改进后的数据处理流程应用于虚拟串口的实现中,生成了一种基于通信设备类的稳定、高速的虚拟串口。最后,在串口测试软件下对虚拟审驱动程序进行了测试,达到了预期目标。关键字:通讯设备类;枚举过程;虚拟用程序;抽象控制模型
3、AbstractAbstractUSBinterfacesupportsplugandplaywhichhasunifiedstandards,soithasawiderangeofapplications.MoreandmorecomputerdeviceuseUSBinterfacetotransferdata,sohowtomakemanyolddeavestosupportUSBinterfacewithoutchangingcurrentapplicationisbecomingthehotfield.USBCommunicationDeviceClassanditsabstract
4、controlmodelarestudied,principlesofCommunicationDeviceClassandimplementationtechniquesofabstractdevicearealsoanalyzedinthethesis.Onthebasisofthis,designandimplementationofvirtualserialportdriverbasedonCommunicationDeviceClassaregiven.Theoverallstructureandimplementationschemeofvirtualserialportdrive
5、rbasedonCDCaredesigned.Thevirtualserialportdriverismadeupoftwopartswhicharecommunicationcommandtransfermoduleanddatatransmissionmodule.Thecommunicationcommandtransfermodulesatisfiesthespecificationofabstractcontrolmodel,andthedatatransferpartimprovesthetechniqueofcurrentvirtualserialport.Themainwork
6、sinthethesisareasfollows:1)TherequestandtransfermodelforUSBprotocolarestudied,andtheimplementationtechniquesofvirtualserialportareanalyzed.2)TheimplementationschemeofvirtualserialportdriverthatsatisfyabstractcontrolmodeinCDCisgraven.AnewtemplateforthedevelopmentofvirtualserialportbasedonCDCisbrought
7、out,anditdescribessomeissuesforthevirtualserialportdriverindetails,atthesametime,theprocessingstepsforvirtualserialportdriverisimproved.3)Theimproveddataprocessingstepsforvirtualserialportdriverisappliedintheimplementationofritualserialportdriver,andastable,high-speedvirtualserialportismade.Atlast,t
8、hetestforthevirtualserialportdriveonActiveSyncisgiven,andthetestresultshowthatitsfunctionisachievedtherequirementgoals.Keywords:CommunicationDeviceClass;EnumerationProcess;VirtualSerialPortDriver;AbstractControlModel目录摘要1Abstract2目录3第1章绪论41.1USB虚拟串口设计背景及其意义41.2USB虚拟串口设计研究方法及目标41.3USB虚拟串口设计国内外研究现状5第2
9、章USB及串口简单介绍71USB简介71串口简介71USB虚拟串口简介8第3章USB和USBCDC协议9通用串行总线USB92)USB协议相关知识介绍92)USB协议枚举过程分析10USBCDC协议11USB通信过程12第4章虚拟串口的实现15串口的工作原理15USB虚拟串口设计16STM32USB吾B分说明16USB电路连接16虚拟串口程序设计17第5章结论20参考文献22致明寸23附录:24第 1 1 章绪论USB虚拟串口设计背景及其意义USB 是一种统一的传输规范,但是接口有许多种,最常见的就是咱们电脑上用的那种扁平的,这叫做 A 型口,里面有 4 根连线,根据谁插接谁分为公母接口,一般
10、线上带的是公口,机器上带的是母口。现在的很多电子设备都采用 USB 接口来设计,使得各个设备之间的相互通信更为方便和快捷。然而越来越多的设备开始使用 USB 接口,对 USB 协议也是一个很大的挑战。一般在传输数据的接口与通信协议是对应的,而由于接口的不同,不太外设使用的协议也不同。USB 接口具有使用简单、支持热插拔、传输速度快、便于端口扩展等特点,在高速实时数据传输系统、 数据采集系统等工业领域得到了广泛的应用。 现代个人计算机往往都带有四个以上的 USB 接口。然而在现代嵌入式系统和工业现场中,最常用的标准外设是异步串行通信接口(串口),如何在没有串口的情况下得到串口数据,并完成数据传输
11、成为一个亟待解决的问题。首先, 越来越多带 USB 接口的器件涌现出来, 如带 USB 接口的单片机, 或独立的 USB接口器件,而这些器件的成本已经很接近使用 RS232 电平转换芯片所带来的成本。其次,市场上也出现了一些 USB 转用口的芯片或者 USB 转用口数据线,它们的一头为串口,另一头为 USB 接口,在其内部完成串口到 USB 协议的转换。它们通过 USB 接口连接到个人计算机后,操作系统识别的却是一个串口设备,这说明 USB 接口对于传统的串口调试工具和用户基于串口的应用程序是公开的,开发者完全不用更改 PC 端的调试和应用程序。 但这些器件的 USB 类不属于标准的 USB
12、设备类, 因此需要在操作系统上安装必要的驱动。另外由于不是操作系统自带的设备驱动,而且通信经过了多次转换,当调试遇到问题时常常无法确定是串口出了问题还是 USB 出了问题。这些问题限制了 USB 转用口器件的应用。设备通信类(CommunicationDeviceClass)是 USB 组织定义的一类专门给各种通信设备使用的 USB 子类,是一种可以实现虚拟串口通信的协议。CDC 类对实现 USB 接口和串口之间的转换提供了一个很好的解决办法。而且 CDC 类是 USB 的一个子类,操作系统默认提供此类驱动,故可以解决 USB 转用口类器件传输不稳定的问题。USB虚拟串口设计研究方法及目标本文
13、所讲述的 USB 虚拟用口是采用 STM32 来实现的。STM32 系列控制器具有高性能、低成本、低功耗的特点,它自身带的 USB 模块符合 USB2.0 规范和 OTG1.3规范,支持全速 12Mbps 和低速 1.2Mbps 两种模式。而且 STM32 官方封装了很多库函数,对于编写 USB 驱动节省了很多时间。 本文在理解 USB 体系结构并深入研究 USBCDC 协议的基础上,通过分析 USB 枚举过程在 STM32 平台上实现了 USB 虚拟串口,通过虚拟串口达到了 USB 与串口通信的预期目的。USB虚拟串口设计国内外研究现状国内研究现开发设备控制芯片较难,中国台湾地区的许多公司可
14、以生产这种转换的设备,并提供功能齐全的开发接口和文档说明。国内集成电路的设计开发公司的能力还有限,限于提供不太复杂的应用及单一产品中, 并且在国内的市场占有率还很小, 目前正处于蓬勃发展的阶段。当前 USB 已经成为个人计算机(PC)必备接口,各种 PC 电子消费产品也逐渐配置了这种标准的接口。为了顺应这种情况,对于使用串口开发应用的人员需要提供串口与 USB之间的转接组件,使用口数据和及其控制信号可以在 USB 总线上进行传输。USB 和串口之间的转换实现,有硬件实现和软件实现两种。硬件实现一般需要设计专用的设备控制芯片。开发设备控制芯片较难,需要有专业的硬件设计及编程能力,为了提高USB
15、和串口转换的开发效率,国外有很多公司都开发出了相应的控制芯片。中国台湾地区的许多公司可以生产实现这种转换的设备,并提供功能齐全的开发接口和文档说明。 国内集成电路的设计开发公司能力还有限, 限于提供不太复杂的应用及单一产品中,并且在国内的市场占有率还很小,目前正处于蓬勃发展阶段。设备控制芯片分为通用设备控制器,定位于某几类 USB 产品的编程应用;专用设备控制器,定位于某一个 USB产品的应用。通用设备控制器大部分被国外芯片垄断,国内在专用设备控制器已有所发展。国内外已有很多商业上成熟的此类接口转换器,其重点都是放在虚拟串口设备的设计上。一个好的转接器需要设计一个能列举虚拟串口的驱动程序,在这
16、种情况下,PC 端的应用软件依然是针对 RS-232 串行端口编程的,外设也是以 RS-232 为数据通信通道,但从 PC 到外设之间的物理连接却是 USB 总线, 其上的数据通信也是 USB 数据格式。 采用这种方式的好处在于:一方面可以保护原有的软件开发投入,并使已有的针对 RS-232 外设的应用软件不加修改,便可继续使用;另一方面就是 USB 总线的高传输速率和即插即用的特性得到了充分利用。 虚拟串口的用途最初都是用于用口转网络通信接口,也就是把对网口的操作映射为对串口操作。例如,在传统的门禁系统、考勤系统、售饭系统、POS 消费系统和一些其中控制和可靠性方面存在较大的局限性,随着网络
17、的普及,通过 TCP/IP 网络实现网络连接,解决系统中,传统串口总线获得了大量的应用但与网络相比,传统串口总线在传输距离传统用在传输距离和可靠性方面方面存在较大的局限性成为必然选择。由于原来的平台软件是通过电脑用收发数据,为了使平台软件不用改变工作方式,需要在电脑平台上安装虚拟用口驱动, 通过虚拟串口驱动可以将硬件转换器从网络上传送来的数据重定向到一个虚拟用口上。这样,平台软件通过虚拟审口进行数据收发。USB 和串口之间的转换实现,还有一种实现是软件实现。这里的软件实现主要指设计USB 转用口的驱动程序。在 USB 中 CDC 子类成为规范之前,USB 转用口的驱动程序的实现各种各样,且基于
18、特定的设备,通用性较差。USB 中 CDC 子类中抽象控制模型规范了虚拟串口实现的框架,增强了虚拟审驱动程序的通用性。第 2 2 章 USBUSB 及串口简单介绍USB简介USB 是英文 UniversalSerialBus(通用串行总线)的缩写,是一个外部总线的标准,用于规范电脑与外部设备的连接和通讯,是应用在 PC 领域的接口技术。USB 传输速度极快,使用很方便,它可以连接的非常多的外设。比如:鼠标、键盘、移动硬盘等。USB 设备之所以会被大量应用,主要有以下优点:1)可以热插拔。这让用户在使用外接设备时不需要重复关机这样的动作。2)携带方便。USB 设备通常以“小、轻、薄”见长,对用户
19、来说,同样 40G 硬盘,USB硬盘比 IDE 硬盘要轻一半,在想要随身携带大量数据时,当然 USB 硬盘会是首选了。3)标准统一。常见的是 IDE 接口的硬盘,串口的鼠标键盘,并口的打印机扫面议,可以有了 USB 之后, 这些应用外设统统可以用同样的标准与 PC 连接, 这时就有了 USB 硬盘,USB 鼠标,等等。4)可以连接多个设备。USB 在 PC 上往往具有多个接口,可以同时连接几个外设,最高可连接 127 个设备。每个 USB 只有一个主机,主机也称为根,根结或根 Hub,它做在主板上或作为适配卡安装在计算机上,主机包含有主控制器和根集线器,控制着 USB 总线上的数据和控制信息的
20、流动,每个 USB 系统只能有一个根集线器,它连接在主控制器上。关于 USB 的数据传输:主控制器负责主机和 USB 设备间数据流的传输。它支持四种基本的数据传输模式:控制传输,等时传输,中断传输及数据块传输。串口简介串行通信接口即是用口,采用串行通信方式的扩展接口。其通信线只有一根用来传输数据,数据传输方式是一位一位的顺序传送。这样的传输方式简单可以降低很多成本,故很多嵌入式系统采用此种接口。用口适用于长距离通信,但其传输速率较慢。串口通信可以分为单工、半双工和全双工三种,单工数据传输只支持数据在一个方向上传输;半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上
21、传输,它实际上是一种切换方向的单工通信;全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。串口通常有 RXD 和 TXD 两个端口,RXD 是接收端,TXD 是发送端。串口将 RXD 连接到另一个设备的 TXD 端,TXD 连接到另一个设备的 RXD 端,然后通过 CLK 的时序就可以进行数据的发送与接收了。USB虚拟串口简介USB 通信设备类在物理层通过 USB 总线,采用虚拟串口的方式为主机提供一个物理用口。在系统内部,USB 芯片提供一个批量传输 IN 端点和一个批量传输的 OUT 端点,用于数据的接受
22、和发送,模拟串口的 RXD 线和 TXD 线;另外,芯片还提供中断 IN 端点,发送当前串口的状态,实现对串口传输的控制。串口设备的数据,由系统的串口采集,在芯片内完成 USB 包的封装,通过 USB 总线上传至主机,再由相应的串口应用程序(串口调试助手)进行处理。对用户来说,看到的是基于串口的数据采集和传输,而实际上实现的是基于 USB 协议包的数据传输。第 3 3 章 USBUSB 和 USBCDCUSBCDC 协议通用串行总线USBUSB 协议相关知识介绍USB 端点USB 通信最基本的形式是通过一个名为端点的东西。USB 端点只能往一个方向传送数据,从主机到设备(称为输出端点)或者从设
23、备到主机(称为输入端点)。端点可以看作是单向的管道。USB 是主机与外围设备之间的一种串行连接。它以单一类型的总线连接不同类型的设备3。USB 通过具有一定格式的“信包”按一定的“规程”来传输信息,根据信息的性质可以分为 4 种传输类型:1)控制模式:主要用于配置 USB 设备,获取设备信息,发送数据到设备,或者获取设备的报告。每一个 USB 设备都必须具有名为端点 0 的控制端点,USB 核心使用该端点在插入设备时进行相应的配置。在 USB 虚拟串口设计中使用该模式进行配置 USB 设备,并通过该模式在主机与设备间交换控制请求。2)中断模式:虽然是中断模式,实际上是用于对 USB 设备周期性
24、查询来实现的。USB 设备不存在主动向主机发送“中断请求”的能力,只能被动地接受主机通过 USB总线查询。在 USB 虚拟串口设计中使用该模式来实时报告设备状态。3)批量模式:批量端点用于传输大量的数据,没有很强的时间要求,但需要确保数据的可靠传输。在 USB 虚拟串口设计中该模式进行数据发送与接收。4)等时模式:用于定时传输大量的数据,但不能确保数据是否丢失。USB 描述符USB 是通过描述符来对 USB 设备进行属性说明的,当 USB 第一次连接到主机上时,主机要求了解 USB 设备的一些基本信息,比如设备有何种功能,需要占用多少 USB 资源,属于何种设备类等。只有主机完全确认了这些信息
25、之后,设备才能正常工作。这些信息是通过存储在设备中的 USB 描述符来体现的。当 USB 设备插入主机后,主机要对其进行总线枚举,配置该设备所需的驱动等信息。主机通过标准请求来读取 USB 的描述符。标准的 USB 设备有 5 种描述符,分别为设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。每一个 USB 设备都有一个设备描述符。而每一个设备描述符有一个默认的配置描述符,配置描述符主要定义了 USB 设备功能,那样就需要为每个功能定义一个配置。但是同一个时刻只有一个配置可用,一个配置支持至少一个接口。接口定义了实现功能的硬件的集合,接口往往包括多个端点。USB 枚举枚举就是从设备
26、读取一些信息,知道设备时什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试 USB 设备很重要的一点就是枚举过程,只要枚举成功了,那么就已经成功大半了。USB 协议枚举过程分析USB 协议定义了设备的 6 种状态,枚举过程会经历 4 种状态的迁移:上电状态,默认状态,地址状态和配置状态(其他两种是连接状态和挂起状态)。枚举过程实际上用到而且只用到了总线的“控制传输”的传输方式。 这种传输方式通常用于配置、命令、状态等情形,其中的设置操作 setup 和状态操作 status 过程的数据包具有 USB 协议定义的数据结构,因此,控制传输只能通过消息管道进行。一个完整
27、的控制传输包括三个过程:建立连接、数据过程、状态过程。建立连接的过程都是有主机发起,它开始于一个 Setup 令牌包,后面紧跟着一个 DATA0 包。如果是控制输入传输,数据过程则为输入数据,若是控制输出传输,则数据过程是输出数据。数据过程可选型是指设置过程需要指定数据长度,如果指定为 0,则没有数据过程。状态过程跟在数据之后,状态过程恰好和数据过程的数据传输方向相反,因为此阶段主要是用来确认之前两阶段的所有数据已经正确传输了。下面是枚举详细过程:首先获取设备描述符。USB 主机检测到 USB 设备插入后,就会先对设备复位。设备复位后,USB 主机就会对地址为 0 的设备发送获取设备描述符的标
28、准请求。所有的 USB 设备在总线复位后其地址都为 0,这样主机就可以跟那些刚刚插入的设备通过地址 0(端点 0)通信。主机在建立阶段发出获取设备描述符的输入请求,设备收到该请求后,在数据过程将设备描述符返回给主机。 主机在成功获取到一个数据包的设备描述符后并且确认没有什么错误后(注意:有些 USB 设备的端点 0 大小不足 18字节(但至少具有 8 字节),而标准的设备描述有 18 字节,在这种情况下,USB 设备只能暂时按最大包将部分设备描述符返回,而主机在成功获取到前面一部分描述符后,就不会再请求剩下的设备描述符部分,而是进入设置地址阶段),就会返回一个0 长度的状态数据包给设备。然后获
29、取地址。主机再对设备复位一下,接下来就会进入到设置地址阶段。这时 USB主机发出一个设置地址的请求(建立过程,设置地址无数据过程),地址包含在建立包中,具体的地址 USB 主机会负责管理,它会分配一个唯一的地址给新的设备。USB 设备在收到地址后,返回 0 长度的状态包,主机收到 0 长度的状态包之后,会返回一个 ACK 给设备。设备在收到这个 ACK 之后,就可以启用新的地址了。这样设备就分配到了一个唯一的设备地址,以后主机就通过它来进行访问该设备。然后主机再次获取设备描述符。 这次跟第一次可能有点不一样, 这次需要获取完全部的18 个字节的设备描述符。当然,如果你的端点 0 缓冲大于 18
30、 字节的话,那就跟第一次的情形一样了。接下来,主机就会获取配置描述符。配置描述符总共为 9 字节。主机在获取到配置描述符后,根据里面的配置集合总长度,再获取配置集合。配置集合包括配置描述符,接口描述符,端点描符等等。然后主机就会根据获取的配置集合对设备进行配置,使设备从地址状态进入配置状态。最后主机发送最后一个 Setup 包,允许所有端点进入工作状态。过程大体分为:获取设备描述符、设置地址、再次获取设备描述符(此次获取完整的设备描述符)、获取配置描述符、对设备进行配置。枚举就相当于主机与 USB 连接的一个过程,为了能够进行数据交换的一个相互识别的过程。枚举完成后,主机就可以对 USB 设备
31、进行读写操作了。USBCDC协议USB 通信设备类的研究目前尚未成熟,可以参考的资料文献和代码都比较少,更多的是依靠讨论得出方法,然后对该方法的可行度和可靠性进行试验。存在开发难度大,需要解决的问题多等困难。止匕外,驱动程序开发对操作系统的依赖性很高,需要对操作系统的相关细节了解透彻,但是微软的 WindowsNT 系列操作系统不开源,无法查证实现细节,这也加大了设计实现的难度。由于驱动程序运行在内核态,因此在用户态能用的很多标准函数都无法使用,需要重新查阅函数用法,驱动程序的开发不能像用户态程序一样方便地进行调试40USB 为了实现不同的应用,将具有特定属性与服务的一类设备划分为一个类(Cl
32、ass)。如果提供相似格式的数据流或者相似的主机交换方式,两个设备则被统一在一个类中。如USB 标准就有:AudioClass、CommunicationsDeviceClassHIDClass、VideoClass 等用于在 USB 接口上实现不同的设备接口。USB 标准协议中,有一类专用于通讯设备(主要包括电信通信设备和中速网络通信设备)的 CDC 协议,USB 的 CDC 类(CommunicationsDeviceClass 是 USB 通信设备类的简称。可以通过 USBCDC 协议来将 USB 接口虚拟为其他通讯接口如串口, 以太网接口, ISDN接口等等。根据 CDC 类协议所针对
33、通信设备的不同,CDC 协议又被分成几种不同的模型:USB 传统电话业务(POTS)模型,USBISDN 模型和 USB 网络模型。其中,USB 传统纯电话业务模型,有可分为直接线控制模型(DirectLineControlModel)、抽象控制模型(AbstractControlModel)和 USB 电话模型(USBTelephoneModel),如图 3.1 所示。本文所讨论的虚拟串口就属于 USB 传统纯电话业务模型下的抽象控制模型。CDC类图3.1CDC类分类CDC 协议由根据不同的功能可以分为三个部分:通讯设备类DevicesClass)、通讯接口类(CommunicationIn
34、terfaceClass)和数据接口类(DataInterfaceClass)50通讯设备类是设备层次的定义,通常用于标示一个通讯设备与该设备可以提供相应的接口。通讯接口类则定义了相应的通讯服务,包括如何对设备进行管理和控制,数据接口类则定义了如何传输数据。这两个接口子类占有不同数量和类型的终端点(Endpoints)。对于前面所述的不同 CDC 类模型,其所对应的接口的终端点需求也是不同的。如所需要讨论的抽象控制模型对终端点的需求,通信接口类需要一个控制终端点(ControlEndpoint)和一个可选的中断(Interrupt)型终端点,数据接口子类需要一个方向为输入 (IN) 的周期性
35、(Isochronous 型终端点和一个方向为输出(OUT)的周期性型终端点。其中控制终端点主要用于 USB 设备的枚举和虚拟串口的波特率和数据类型(数据位数、停止位和起始位)设置的通信。输出方向的非同步终端点用于主机(Host)向从设备(Slave)发送数据,相当于传统物理用口中的 TXD 线(如果从单片机的角度看),输入方向的非同步终端点用于从设备向主机发送数据,相当于传统物理用口中的 RXD 线6。USB通信过程USB 最主要的的是要理解 USB 主机发送命令给设备,设备要对主机的命令进行响应,USB 通讯的基本单位为“包”理解好“包”这个概念是学习 USB 的关键所在。USB 数据包的
36、格式如图 3.2 所示。电话模型网络模型(CommunicationISDN模型FieldPIDADDRENDPDATACRCFrameNumberBits4+474N*8(N=0,.,1024)5/1611图3.2USB数据包的格式对于数据包来说, PID 之后直接跟数据域, 数据域的长度为 N 字节, 数据域后以 16 位的 CRC校验和结束。握手包仅有 PID 域,没有数据也没有校验和。分离传输会用到一类特殊的包,S t a r t ? S p l i t C o m p l e t e - S p l i t 包 , 其 格 式 分 别 如 图 3 . 3 和 如 图 3 . 4 所
37、示 。FieldSPLIDPIDHubAddrSCPortSEETCRC5Bits87171125图3.3Start-Split包FieldSPLIDPIDHubAddrSCPortSUETCRC5Bits87171125图3.4Complete-Split包在Start-Split和 Complete-Split包中主要指定了此次分离传输所在的HUB的地址和下行端口编号以及端点类型(控制、中断、批量、同步)。以及此次传输中数据在整个数据中的位置(第一个包、中间的包、末尾的包)。令牌包可分为输入包、输出包、设置包和帧起始包(注意这里的输入包是用于设置输入命令的,输出色是用来设置输出命令的,而不
38、是放据数的)其中输入包、输出包和设置包的格式都是一样的:SYNC+PID+ADDR+ENDP+CRC5(五位的校验码)。帧起始包的格式是 SYNC+PID+11 位 FRAM+CRC5(五位的校验码)。数据包可以分为 DATA0 包和 DATA1 包, 当 USB 发送数据的时候, 当一次发送的数据长度大于相应端点的容量时, 就需要把数据包分为好几个包, 分批发送, DATA0 包和 DATA1包交替发送, 即如果第一个数据包是 DATA0,那第二个数据包就是 DATA10但也有例外情况,在同步传输中(四类传输类型中之一),所有的数据包都是为 DATA0,格式如下:SYNC+PID+01023
39、 字节+CRC16。握手包的结构最为简单的包,格式如下:SYNC+PID。数据在 USB 总线上的传输以包为单位, 包只能在帧内传输。 高速 USB 总线的帧周期为125uS,全速以及低速 USB 总线的帧周期为 1mS。帧的起始由一个特定的包(SOF 包)表示,帧尾为 EOF。EOF 不是一个包,而是一种电平状态,EOF 期间不允许有数据传输。虽然高速总线和全速低速总线的帧周期不一样,当时包中帧编号的增加速度是 USB/USBSOF 一样的,因为在高速 USB 系统中,SOF 包中帧编号实际上取得是计数器的高 11 位, 最低三位作为微帧编号没有使用, 因此其帧编号的增加周期也为 1msoU
40、SB 采用 Httleedian 字节顺序,在总线上先传输一个字节的最低有效位,最后传输最高有效位,采用 NRZI 编码,若遇到连续的 6 个 1 要求进行为填充,即插入一个 00所有的USB包都由 SYNC开始, 高速包的 SYNC宽度为 32bit,全速/低速包的 SYNC段长度为 8bit。实际接收到的 SYNC 产度由于 USBHUB 的关系,可能会小于该值。第 4 4 章虚拟串口的实现4.1串口的工作原理之所以取名为“串行”端口,是因为这种端口会将数据“串行化”。更具体地说,它一次获取一个字节的数据并传输该字节的 8 位。 这样做的优势在于, 串行端口只需要一条线路就能传输 8 个位
41、,而并行端口则需要 8 条。相应的劣势在于,其传输数据的用时是拥有八条线路时的 8 倍。止匕外,串行端口还可以降低线缆成本,使线缆更加小巧。在发送数据的每个字节之前, 串行端口会发送一个开始位, 这是一个值为 0 的单个位。在发送完数据的每个字节之后,它将发送一个停止位,表示该字节已传输完成。此外,它还可以发送奇偶校验位。1)波特率。这是一个衡量通信速度的参数。它表示每秒钟传送的 bit 的个数。例如300 波特表示每秒钟发送 300 个 bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要 4800 波特率,那么时钟是 4800Hz0这意味着串口通信在数据线上的采样率为 4800H
42、z。通常电话线的波特率为 14400,28800 和 36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是 GP 旧设备的通信。2)数据位。这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是 8 位的,标准的值是 5、7 和 8 位。如何设置取决于你想传送的信息。比如,标准的 ASCII 码是 0127(7 位)。扩展的 ASCII 码是 0255(8 位)。如果数据使用简单的文本(标准 ASCII 码),那么每个数据包使用 7 位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据
43、位取决于通信协议的选取,术语“包”指任何通信的情况。3)停止位。用于表示单个包的最后一位。典型的值为 1,1.5 和 2 位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多, 不同时钟同步的容忍程度越大, 但是数据传输率同时也越慢。4)奇偶校验位。在用口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,用口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果
44、数据是 011,那么对于偶校验,校验位为 0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位 1,这样就有 3 个逻辑高位。高位和低位不真正的检查数据, 简单置位逻辑高或者逻辑低校验。 这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同4.2USB虚拟串口设计STM32USB 部分说明STM32 的 USB 模块可以产生三种中断:USB 唤醒中断、USB 高优先级中断和 USB低优先级中断,在 STM32 的参考手册中没有详细说明这三种中断对应哪些事件,现说明如下网:USB 唤醒中断:在中断向量表中的位置是 42。这个中断在 USB 设备从暂停
45、模式唤醒时产生,唤醒事件由 USB_ISTR 寄存器的 WKUP 位标识。USB 高优先级中断:在中断向量表中的位置是 19。这个中断仅由 USB 同步(Isochronous)模式传输或双缓冲块(Bulk)传输模式下的正确传输事件产生, 正确传输事件由 USB_ISTR 寄存器的 CTR 位标识。USB 低优先级中断:在中断向量表中的位置是 20。这个中断由所有其它的 USB 事件产生,例如正确传输(不包括同步模式和双缓冲块模式)、USB 复位等,事件标志位在USB_ISTR 寄存器中。在 STM32 的 USB 开发包的例子中包含了上述中断的处理,例如在 USB 扬声器的例子中,CTR_H
46、P 函数处理 USB 高优先级中断;在所有例子中都有 USB_Istr()函数处理 USB 低优先级中断。USB 如何区分低速、全速和高速设备:对于全速和高速设备,上拉电阻是接在D+上;而低速设备则是上拉电阻接在 D-上。USB 系统中只允许有一个主机,主机分为 3 个不同的功能模块:应用软件、USB 系统软件和 USB 总线接口。客户软件负责和 USB 设备的功能单元进行通信,以实现其特定功能,它需要开发人员自行开发,包才 SUSB 设备驱动程序和界面应用程序两部分。客户软件不能直接访问 USB 设备,具与功能单元的通信必须经过 USB 系统软件和 USB 总线接口模块才能实现。USB 电路
47、连接从主机角度上讲,USB 设备可看作是由一些配置、接口和端点组成的,这是通常所说的 USB 设备架构,即一个 USB 设备可以含有一个或多个配置。在每个配置中可含有一个或多个接口,在每个接口中可含有若干个端点。其中,配置和接口是对 USB 设备功能的抽象,实际的数据传输由端点来完成,在使用 USB 设备前,必须指明其采用哪个配置和接口。USB 设备使用各种描述符来说明其设备构架,包括设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符等,它们通常被保存在 USB 接口芯片的固件中。USB 的电路连接如图 4.1 所示:PRTR5V0U2X图4.1USB硬件接口图虚拟串口程序设计首先是
48、枚举过程中的获取设备描述符部分, 主机如果要识别成串口, 就要将此 USB 设备的描述符写成虚拟串口的描述符,要根据 CDC 类通信协议进行编写。此程序设备描述符是一个数组,数组的成员是描述符的内容。下面定义的数组即是设备描述符。constuint8_tVirtual_Com_Port_DeviceDescriptor=(0 x12,/*描述符字节长度*/USB_DEVICE_DESCRIPTOR_TYPE,/*设备描述符类型*/0 x00,FB13碳侏DGNDB65V】51_UNILIIE-USBP70 x02,/*USB 规范发布号,表示用哪种协议,0 x20 表示 USB2.0*/0 x
49、02,/*类型代码即 CDC*/0 x00,/*子类型代码*/0 x00,/*协议代码*/0 x40,/*端点 0 最大分组大小,值为,8、16、32、64*/0 x83,0 x04,/*供应商 ID*/0 x40,0 x57,/*产品 ID。由产品 ID 和供应商 ID,就可以让操作系统加载不同的驱动程序*/0 x00,0 x02,/*设备出产编码*/*制造商标示符*/*产品标示符*/*设备用口号描述符*/0 x01/*可能配置数,指配置字符串的个数*/);在枚举前期,USB 主机发送 SETUP 包,然后获取设备描述符,然后会得知设备的类型,再加载相应的驱动,此时 USB 虚拟串口就成功了
50、。完成枚举之后,就可以编写作为用口接收和发送数据的程序了。在此设计中我们只需用到 STM32 的 GPIOA,GPIOB 和串口以及 USB 时钟。所以先要允许 GPIOA,GPIOB 和串口的时钟。USB 时钟会在接下来使能。下面看第一个 Set_System()S 数:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT,ENABLE);这个函数叫允许 USB 断开线。通过查看 RCC_APB2Periph_GPIO_DISCONNECT 在程序中的定义为 RCC_APB2Periph_GPIOA。而 USB_DISCONNECT_PI
51、N 在程序中定义的为 GPIO_Pin_11。说明是程序定义的断开线引脚是 PA11,查看 STM32 引脚图可以看出 PA11 是连接 USB 弓|脚的 DM 弓|脚。此引脚连接到一个上拉电阻控制的三极管上面,接下来将 USB 的断开引脚即 PA11配置成上拉的。这也就意味着在开始时这个上拉电阻使得三极管导通,从而使时 DP 脚被加上一个 1.5K 的电阻,这样就可以开始枚举了。第二个函数 Set_USBClock(),这个函数就是先将 USB 所在的总线 AP1 经过 PLL 分频,得到 AP1 时钟,然后再允许 USB 时钟使能。第三个函数 USB_Interrupts_Config()
52、,由名字可以看出是配置 USB 中断的。在该函数中使能了两个中断,一个是 USB,一个是用口。程序中没有设定它们的抢占优先级,故默认它们的优先级分组相同,USB 的响应优先级为 0,串口的响应优先级为 1,由于抢占优先级相同,不存在嵌套关系,故这两个中断都不会被另一个中断打断。在它们中断函数里面是我要处理的各个事情,等一下再介绍它们。最后是 USB_Init()o 第一句是将 pInformation 指向 Device_Info 结构体;第三句是将pProperty 指向 Device_Property 结构体;第四句将 pUser_Standard_Request 指针指向User_Sta
53、ndard_Requests 吉构体。这三个结构体都是与具体设备枚举和功能实现相关的。最后一句实际上运行的是 DEVICE_PROP 中的 Virtual_Com_Port_init()这个函数。这个函数通过查看可以看到几个函数:Get_SerialNum(),此为获取设备序列号,转变为 Unicode 字符串。PowerOn(),连接 USB 设备,实质是让主机检测到 USB 设备。USART_Config_Default(),配置串口至缺省状态,在这里波特率被设置为 9600,并且允许了接收中断。发送中断没有允许。bDeviceState=UNCONNECTED,将当前状态定义为未连接状态
54、。到此初始化结束了。下面就是中断部分了。中断函数是串口的接受中断, 程序中串口的发送中断是没有允许的。那么用口是如何发送数据呢?不用中断方式,那就是直接来用写寄存器方式来发送了。不过写寄存器方式,当有大量数据发送时就会出现问题,因为它没有判断是否发送缓冲区为空。串口接收中断调用的函数为 USART_To_USB_Send_Data()函数功能是从串口向 USB端发送数据。然后数据再从 USB 端向主机发送,这样就可以与主机相互通信了。在做好的虚拟串口端可以连接一个硬件,使其通过串口将数据发送给 USB 虚拟的串口处理器中,然后可以通过设备的 USB 向 PC 机发送数据。而对于 PC 机,US
55、B设备相当于一个串口设备,它识别的也是个 COM 口,所以我们可以通过串口调试助手来查看接收到的数据。也可以用串口调试助手来发送数据,通过 USB 虚拟的串口设备来返回该数据。第 5 5 章结论随着越来越多的外设开始使用 USB 接口进行数据通信,合理并快速地实现基于 USB的数据传输显得尤为重要, 而基于通信设备类的虚拟设备实现又是开发人员研究的重点。 论文研究了以 USB 通信设备类为核心的虚拟串口实现方案, 并对虚拟用口驱动的加载及卸载、通信命令转换和数据高速传输进行了研究, 实现了基于通信设备类的虚拟串口驱动程序的可用版本。 与现有类似驱动程序相比, 该系统具有符合通信设备类的抽象控制
56、模型和高速传输等优点,此外它还与 Windows2003、XP、Vista和 Win7 系统在源代码级别兼容,具有广阔的应用前景。论文中通信设备类的研究及基于通信设备类的虚拟串口实现, 对开发人员设计其他基于通信设备类的虚拟设备实现方案具有很好的指导意义。本论文主要完成以下工作:1) 深入研究了 Windows 驱动的工作原理, 阅读了英文原版的 WindowsNT 文件系统及 USB协议中通信设备类的相关书籍,既学习了 Windows 驱动程序的的一般开发方法,又学习了符合 USB 协议的驱动程序的开发方法。阅读了相关的驱动开发源码,掌握了WindowsNT 操作系统下虚拟设备驱动程序的开发
57、方法;2)研究了现有的虚拟串口实现技术,分析了各种实现方法的优缺点,从中选择了通信设备类的抽象控制模型作为虚拟串口实现的理论依据,避免了重新设计 USB转用口电路板及兼容性的问题,这使得虚拟串口驱动有更广阔的应用前景, 通用性和高效性;3)学习了 USB 协议,对通信设备类进行了深入的研究和分析,并且根据通信设备类中各模型的特点,确定了虚拟串口驱动所用的模型为抽象控制模型;4)根据虚拟串口驱动程序的设计目标,研究了虚拟串口驱动程序的总体结构和详细方案,对虚拟串口驱动程序中的难点和重点问题进行深入的分析和解决方法的优化;5)根据虚拟串口驱动程序的研究结果,实现了该驱动程序的演示版本,进行了兼容性
58、和稳定性的测试,通过测试得出了还需要对系统做后续的改进和完善的工作。参考文献1UniversalSerialBusSpecification,Revision2.0.Compaq,Hewlett-Packard,Intel,Lucent,Microsoft,NEC,PhilipsIncJ,2000.2许永和.EZ-USBFX 系列单片机 USB 外围设备设计与应用M.北京:北京航空航天大学出版社,2002.3MindShare,inc,DonAnderson,DaveDzatko 孟文.USB 系统体系M.北京:中国电力出版社,2003.4李肇庆,廖峰,刘建存.USB 接口技术M.北京:国防工
59、业出版社,20045王成儒,李英伟.USB2.0 原理与工程开发M.北京:国防工业出版社,2004.6张帆,史彩成.Windows 设备驱动程序开发指南M.北京:北京航空航天大学出版社,2008.WalterOneyProgrammingtheMicrosoftWindowsDriverModel.MicrosoftPressJ,2003ChrisCant.WritingWindowsWDMDeviceDrivers.FocalPressJ,1999.9周立功.USB2.0 与 OTG 规范及开发指南M.北京:北京航空航天大学出版社,2004.10肖踞雄,翁铁成,宋中庆.USB 技术及应用设计
60、M.北京:清华大学出版社,2004.11JanAxelson.USBComplete:TheDeveloperGuideM.LakeviewResearch,2011.时光荏苒,四年的大学生活已经接近尾声。在毕业论文完成之际,我谨向所有给予了我指导、关心和支持的老师、同学和亲人们致以最衷心的感谢!首先,深深感谢我的导师侯宁老师。有了您的悉心指导与勉励,我才能顺利完成了理论学习和毕业论文。您平易近人、治学严谨、知识渊博,对待生活积极乐观,为我们营造了轻松积极的环境,真正做到了传道、授业、解惑。您在学习和生活上给予了我很多引导和帮助,为人的和蔼、敏锐的把握能力和孜孜不倦的研究精神永远是我学习、生活和工作的榜样,这将成为我人生中一笔宝贵的财富
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 唇膏盒产业深度调研及未来发展现状趋势
- 恶作剧玩具产业运行及前景预测报告
- 家用油墨辊产业运行及前景预测报告
- 圣经纸市场发展预测和趋势分析
- 套衫产业规划专项研究报告
- 网络安全服务训练学习通超星期末考试答案章节答案2024年
- 后浇带施工质量控制方案
- 搁板置物架市场需求与消费特点分析
- 2024年大学生党团知识竞赛题库及答案(共120题)
- 电力企业安全管理制度流程
- 30题质量检验员岗位常见面试问题含HR问题考察点及参考回答
- 基于大数据的电商平台用户行为分析系统研究与实现
- 财务管理的财务财务数字化转型
- 直线与圆的位置关系-省赛一等奖
- 妊娠期病毒性肝炎
- 知识产权法治宣传活动
- 《现代护士职业素养》课件
- 2024年度患者健康教育制度
- 聚氨酯保温板
- 小学生劳动技能培养与就业市场需求
- 疑难信访培训课件
评论
0/150
提交评论