USB虚拟串口设计

上传人:d**** 文档编号:140231941 上传时间:2022-08-23 格式:DOCX 页数:50 大小:128.27KB
收藏 版权申诉 举报 下载
USB虚拟串口设计_第1页
第1页 / 共50页
USB虚拟串口设计_第2页
第2页 / 共50页
USB虚拟串口设计_第3页
第3页 / 共50页
资源描述:

《USB虚拟串口设计》由会员分享,可在线阅读,更多相关《USB虚拟串口设计(50页珍藏版)》请在装配图网上搜索。

1、1搭寿瓶/幻成Henan University of Urban Construction毕业设计论文题 目: 基于STM32的USB虚拟串口学院:电气与信息工程学院专业:电气工程及其自动化姓 名:学 号:指导老师:完成时间:2015年5月19日USB接口是最为简单的接口,它具有传输速度快、即插即用、端口扩展简单有 效等特点,在数据传输技术飞速发展的当代USB接口得到广泛的应用。越来越多的 电脑设备开始采用USB接口进行数据的传输,而通用异步串行通信口(简称串口或 者COM 口)是一种比较古老的串行通信口,在几年前的PC上,几乎是必备接口。 以前的设备与PC相连基本上都是用的COM 口,那么将

2、设备移植到USB接口成为人 们研究的热门。本论文以USB通信设备类中的抽象控制模型为基础,对通信设备类及实现虚拟 设备的原理进行了研究,设计并实现了基于通信设备类的虚拟串口驱动程序。论文研究设计了基于STM32单片机的USB虚拟串口驱动程序的结构和实现方 案,该程序主要由通信命令转换和数据传输两部分构成,虚拟串口的实现技术在数据 传输方面进行了改进。论文的主要工作如下:1. 研究了 USB协议的请求和传输模式,分析了通信设备类实现虚拟设备的方案。2. 给出了一种符合通信设备类中抽象控制模型的虚拟串口实现方案。该方案提供 了一种基于通信设备类开发虚拟设备的模板,对设计中的诸多问题进行了详细的说

3、明,并改进了虚拟串口驱动程序中数据的处理流程。3. 将改进后的数据处理流程是现在虚拟串口中,生成的一种基于通信设备类的虚 拟串口稳定、高速。最后,在串口测试软件下对虚拟串口驱动程序进行了测试,达到 了预期目标。关键字:通讯设备类,枚举过程,虚拟串口程序,抽象控制模型AbstractUSB interface is the most simple interface, it has the transmission speed, plug and play, port extension characteristics such as simple and effective, in rapid

4、 development of the contemporary USB data transmission technology has been widely used. More and more computer equipment used USB interface for data transmission, and the universal asynchronous serial communication port (hereinafter referred to as a serial port or COM) is a relatively old serial com

5、munication port, in a few years ago on a PC, is almost a necessary interface. Before the equipment connected to the PC are basically use the COM, then transplanted device into the USB interface become a hot research.Abstract in this paper by USB communication device class control model, based on the

6、 communication device class and realize the principle of virtual device are studied, designed and implemented based on the virtual serial port communication device class driver.Thesis study design based on the STM32 MCU USB virtual serial port driver structure and implementation scheme of the progra

7、m is mainly consisting of communication command conversion and data transmission, the implementation technologies of virtual serial port is improved in terms of data transmission. Papers main work is as follows:1. to study the requests of USB protocol and transmission mode, analyzes the communicatio

8、n device class implementation scheme of virtual devices.2. presents a communication device class of control model of the implement of virtual serial port. This scheme provides a virtual device based on the communication device class development of templates, to account for the problems in detail in

9、the design, and improve the virtual serial port driver in data processing.3. data processing of the improved process is now in virtual serial port, the generated based on the virtual serial port communication device class stability, high speed. Finally, under the serial test software of virtual seri

10、al port driver was tested, and reached the anticipated goal.Keywords : Communication equipment Class ;The enumeration process;Abstract Control Model摘要IAbstractII目录III第1章绪论11.1 USB虚拟串口设计背景及其意义11.2 USB虚拟串口设计研究方法及目标21.3 USB虚拟串口设计国内外研究现状2第2章USB及串口简单介绍42.1 USB 简介42.2串口简介42.3 USB虚拟串口简介5第3章USB和USB CDC协议63.

11、1通用串行总线USB63.1.1 USB协议相关知识介绍63.1.2 USB协议枚举过程分析83.2 USB CDC 协议93.3 USB通信过程10第4章虚拟串口的实现124.1串口的工作原理124.2 USB虚拟串口设计134.2.1 STM32 USB 部分说明134.4.2 USB电路连接144.2.3虚拟串口程序设计15第5章结论18参考文献19致谢20附录:21第1章绪论1.1 USB虚拟串口设计背景及其意义USB作为一种计算机总线技术,在现在的计算机上已经是不可或缺的了。看看 我们身边的计算机外部设备,很多都是通过USB 口连接计算机的:键盘、鼠标、打 印机、数码相机、移动硬盘、

12、优盘、移动光驱、扫描仪、MP3、MP4以及游戏手柄 等,还有一些我们不太常见的USB设备,例如一些带有USB 口协议的仪表仪器、烧 录机、开发用的调试器、USB网卡、USB耳机、USB话筒及USB电话,此外,还有 一些移动电话(手机)也具备USB 口。许许多多的外设似乎都是通过USB和计算机 相连的,可见USB是都么的强大。USB具有速度快,连接简单方便,可扩展性强,支持热插拔操作和标准统一的 特点,所以才会被使用如此广泛。当前的个人主机都配备有好多USB接口。然而在 现代的工业设备中,许多的设备都是嵌入式系统,基本上都是采用最常用的标准外设 异步串行通信接口(串口),那么如何在没有串口的情况

13、下得到串口数据,并完成数据 传输成为一个亟待解决的问题。通用异步串行通信口(串口)随着USB的流行已经慢慢开始退出历史舞台了。 但是很多的设备开发者,都喜欢使用串口与计算机进行通信,因为串口使用起来简单 方便。那么问题就来了,现在的PC上基本上都是USB 口没有串口,那么怎么跟设 备的串口进行连接通信呢?有没有办法可以在计算机上新增加串口呢?这是必须可 以的,通过使用PCI卡设计一个或者多个串口。当然,还可以通过USB 口模拟出串 口设备,因为USB也是一种总线,总线就可以连接不同的设备。所以我们就可以设 计一个USB转串口的器件来解决这个问题。这次设计的预期成果和市场上出现了一些USB转串口

14、的芯片或者USB转串口数 据线相似,大致结构是为了实现USB接口转串口,所以数据线一端是USB 口,一端 是串口,在串口线段完成串口到USB协议的转换。USB接口在连接计算机的时候, 另一端串口端需要被操作系统识别,这说明USB接口对用户基于串口的应用程序和 传统的串口调试工具是公开的,所以PC端的调试和应用程序不用做修改就可以被开 发者识别。由于这些器件的USB类不属标准的USB类,因此需要安装必要的驱动在 操作系统上。另外由于这些设备驱动不是操作系统自带的,而且需要多次转换在通信 阶段,调试会遇到问题限制USB串口器件的应用,因为在调试期间常常无法确定是 串口出了问题还是USB出了问题。设

15、备通信类(Communication Device Class )是USB组织定义的一类专门给各种通 信设备使用的USB子类,是一种可以实现虚拟串口通信的协议。CDC类对实现USB 接口和串口之间的转换提供了一个很好的解决办法。而且CDC类是USB的一个子类, 操作系统默认提供此类驱动,故可以解决USB转串口类器件传输不稳定的问题。1.2 USB虚拟串口设计研究方法及目标本次设计所用到的是采用STM32来实现USB虚拟串口的。STM32系列控制器 具有低成本、低功耗、高性能的特点,它自身带的USB模块符合USB2.0规范和 OTG1.3规范,支持全速12Mbps和低速1.2Mbps两种模式。而

16、且STM32官方封装了 很多库函数,对于编写USB驱动节省了很多时间。本文研究了 USB CDC协议并在 理解USB体系结构,在STM32平台上通过分析USB枚举过程实现了 USB虚拟串口, 达到了 USB与串口通信的预期目的。1.3 USB虚拟串口设计国内外研究现状国内的现开发设备控制芯片研究技术不高,只有中国台湾地区的许多公司可以生 产这种转换的设备,并提供功能齐全的开发接口和文档说明。国内集成电路的设计开 发公司的能力还有限,限于提供不太复杂的应用及单一产品中,并且在国内的市场占 有率还很小,目前正处于蓬勃发展的阶段。USB和串口之间的转换实现,有硬件实现和软件实现两种。硬件实现一般需要

17、 设计专用的设备控制芯片。设备控制芯片分为通用设备控制器,定位于某几类USB 产品的编程应用;专用设备控制器,定位于某一个USB产品的应用。通用设备控制 器大部分被国外芯片垄断,国内在专用设备控制器已有所发展。虚拟串口设备的设计是一个很重要的部分,现在国内外已有很多商业上成熟的此 类接口转换器,都把重点放在了这个设计上面。设计一个列举虚拟串口的驱动程序是 判断一个好的转接器的重要指标。在这种情况下,PC端的应用软件依然是针对RS-232串行端口编程的,外设也是以RS-232为数据通信通道,但从PC到外设之间 的物理连接却是USB总线,其上的数据通信也是USB数据格式。用这种方式有两个 好处,一

18、是可以保护原有的软件开发投入,并且在不用修改RS-232外设应用的情况 下,便可继续使用;二是使USB总线的高传输速率和即插即用的特性得到了充分利 用。虚拟串口的最初就是把网口的操作映射为对串口操作就是把串口转为网络通信接 口。传统的串口总线在许多方面都得到了大量的应用。例如在传统的售饭系统、POS 消费系统、门禁系统和一些其中控制系统等。传统的串口总线也有一些局限性。与网 络相比的局限性在于它的传输距离和可靠性。所以在这个互联网飞速发展的时代,传 统的串口总线可以选择通过TCP/IP网络实现网络连接的方式进行连接,这样就可以 解决传统串口在传输距离和可靠性两方面较大的局限性。通过网络连接可以

19、创建一个 平台软件,利用这个平台软件和电脑串口连接完成来收发数据,假如按照先前的连接 方式势必要改变该平台软件的工作方式,要解决这个问题使平台软件不用改变工作方 式,可以在电脑平台上安装虚拟串口驱动,这样硬件转换器从网络上传来的数据就可 以通过虚拟串口驱动定向传输到一个虚拟串口上。这样,传统的串口总线就可以利用 网络创建平台软件并通过虚拟串口进行数据收发。USB和串口之间的转换实现,还有一种实现是软件实现。这里的软件实现主要 指设计USB转串口的驱动程序。在USB中CDC子类成为规范之前,USB转串口的 驱动程序的实现各种各样,且基于特定的设备,通用性较差。USB中CDC子类中抽 象控制模型规

20、范了虚拟串口实现的框架,增强了虚拟串口驱动程序的通用性。第2章USB及串口简单介绍2.1 USB简介USB是通用串行总线的缩写,英文是Universal Serial Bus。顾名思义,它是一个 外部总线的标准,已有10多年的历史,它的功能主要是用于简化计算机和外部设备 的连接,增加外设的易用性。在以前的计算机中,如果要连接外部设备,必然需要关 掉计算机甚至要打开机箱之后才能连接或者是更换外设,还要在硬件上分配资源,最 后重启计算机才能正常工作。这一过程是相当的不方便,而USB能够在计算机运行 过程中随意地接入并能立刻识别投入使用,这样的特性叫做即插即用(Plug and Play)。 这一特

21、性是计算机变得更加容易使用,更加大众化。另外USB传输速度极快,具有 很强的可扩展性,它可以连接的非常多的外设。比如:键盘、鼠标、耳机、移动硬盘 等。USB设备主要有以下优点:1. 方便携带。USB设备通常很小,很轻,比如常见的U盘,非常的小,但是内 存容量却是相当的大。2. 即插即用。这使计算机用户不再做重复的开关机,连接更换设备避免了许多麻 烦的步骤,简单方便。3. 可扩展性。计算机上往往有很多个USB接口,可以同时连接多个外设,最高 可连接127个设备。4. 标准统一。常见的是串口的鼠标键盘,并口的打印机扫面议,可是有了 USB 之后,这些应用外设都可以和计算机直接相连,这时就有了 US

22、B硬盘,USB鼠标, 等等。2.2串口简介串口简单来说就是串行通信接口,其采用的是串行通信方式。其通信线只有一根 用来传输数据,数据是按一位一位顺序传送这种传输方式的。这样的传输方式既简单 又能降低很多成本,故此种接口被很多嵌入式系统采用。来自CPU的并行数据字符 可以被串行接口接收并转换为连续的串行数据流发送出去,同时给CPU器件发送串 口接收串行数据并转换为并行的数据字符。一般完成这种功能的电路,称为串行接口 电路。串口可用于许多用途,比如连接打印机、鼠标、键盘或者Modem,同时也可 连接工业仪器的仪表。在本文中将简单介绍这种串行接口的工作原理,并详细讲解串 口的编程方法。串口适用于长距

23、离通信,但其传输速率较慢。串口通信总共分为单工、 半双工和全双工三类。只支持数据在一个方向上传输称为单工数据传输;允许数据在 两个方向上传输称为半双工数据传输,但是,在某一时刻,只允许数据在一个方向上 传输,它实际上是一种切换方向的单工通信;允许数据同时在两个方向上传输称为全 双工数据通信,因此,全双工通信结合了两个单工通信方式,它要求发送设备和接收 设备都有独立的接收和发送能力。串口通常有两个端口分别是RXD和TXD,RXD是用于接收的一端,TXD是用 于发送的一端。串口将接收端连接另一个设备的发送端,发送端连接另一个设备的接 收端,然后通过CLK的时序就可以进行数据的发送与接收了。2.3

24、USB虚拟串口简介USB通信设备类在物理层通过USB总线,采用虚拟串口的方式为主机提供一个 物理串口。在系统内部,USB芯片提供一个批量传输IN端点和一个批量传输的OUT 端点,用于数据的接受和发送,模拟串口的RXD线和TXD线;另外,芯片还提供 中断IN端点,发送当前串口的状态,实现对串口传输的控制。串口设备的数据,由 系统的串口采集,在芯片内完成USB包的封装,通过USB总线上传至主机,再由相 应的串口应用程序(串口调试助于)进行处理。对用户来说,看到的是基于串口的数据 采集和传输,而实际上实现的是基于USB协议包的数据传输。第3章USB和USB CDC协议3.1通用串行总线USB3.1.

25、1 USB协议相关知识介绍一、USB2.0 协议USB总线属一种轮训方式的总线,所有的数据通过主机控制端口进行初始化, 每一总线执行动作最多传送三个数据包。主机在每次数据传输开始按照传输前制定好 的原则发送描述传输种类、传输方向,以及USB设备地址和终端号的数据包,这就 是所谓的标志包(token packet)。USB设备从解码后的数据包的适当位置取出属于 自己的数据。数据传输方向要么是从设备到主机,要么从主机到设备,两个传输方向。 标志包在传输开始时会标志数据的传输,包括数据传输的种类及方向,随后包含信息 的数据会被发送端发送,如果没有数据传送,则发送端会表明没有数据传送。接收端 会表明是

26、否传送成功,依据是发送一个相应的握手包的数据包。在主机和设备的端口 之间,发送端和接收端之间的USB数据传输,可被视为一个通道。存在两种类型的 通道:流和信息。流的数据不像消息的数据,它没有USB所定义的结构,而且通道 与数据带宽、传送服务类型,端口特性(如方向和缓冲区大小)有关。多数通道在 USB设备设置完成后即存在。USB中有一个特殊的通道缺省控制通道,它属于 消息通道,当设备一启动即存在,从而设备的设置、查询状况和输入控制信息提供一 个入口。事务预处理允许对一些数据流的通道进行控制,从而在硬件级上防止了对缓冲区 的高估或低估,通过发送不确认握手信号从而阻塞了数据的传输速度。当不确认信号

27、发过后,若总线有空闲,数据传输将再做一次。这种流控制机制允许灵活的任务安排, 可使不同性质的流通道同时正常工作,这样多种流通道可在不同间隔进行工作,传送 不同大小的数据包。二、USB描述符USB2.0协议定义的标准描述符有设备描述符(Device Descriptor)、配置描述符 (Configuration Descriptor) 接口描述符(Interface Descriptor) 端口描述符(Endpoint Descriptor) 字符描述符(String Descriptor)及 Device Qualifier Descriptor 和 Other Speed Configur

28、ation Descriptor,其后两个是新加的标准描述符。一个USB设备只要有一个设备描述符。设备描述符里决定了该设备有多少种配 置,每种配置都有一个配置描述符;而在每个配置描述符中又定义了该配置里有多少 个接口,每个接口都有一个接口描述符;在接口描述符里有定义了该接口有多少个端 点,每隔端点都有一个端点描述符;端点描述符定义了端点的大小、类型等。如果有 类特殊描述符,它跟在相应的接口描述符之后。由此可以看出,USB的描述符之间 的关系是一层一层的,最上一层是设备描述符,接下来是配置描述符,再接下来是接 口描述符,最下面是端点描述符。在主机获取描述符时,首先获取设备描述符,接着 在获取配置

29、描述符,然后再根据配置描述符中的配置集合的总长度,一次将配置描述 符、接口描述符、类特殊描述符(如果有)、端点描述符一次读回。对于字符串描述 符,是单独获取的。主机通过发送获取字符串描述符的请求以及描述符的索引号、语 言ID来获取对应的字符串描述符。例如一个USB鼠标,设备有一个设备地址,USB主机依靠的就是这个设备地址 来访问的。然而设备要和USB设备进行通信,单单靠设备地址是不够的,还要有一 个端点地址。有了设备和端口地址,就可以准确地对端点发送以及读取数据了。而配 置和接口,就是为了能够更方便的管理端点而抽象出来的概念。一个设备可以有多个 配置,但是同一时刻只能有一个配置是可用的,每个配

30、置下又可以有多个接口,当我 们需要不同的功能时,只要选择不同的配置即可。总的来说,接口就是端点的集合,配置就是接口的集合,设备就是配置的集合。 所以我们只要弄清楚它们之间的关系,就能按照要求来构造出一个合格的USB设备。 假如一个设备的各种描述符成功返回了,就可以说成功一大半了。设备 配置接口端点图3.1设备、配置、接口、端点之间的关系三、USB枚举枚举就是介绍主机如何将连接设备,从设备如何读取信息,了解设备的类型,了 解主机如何进行通信,最后使主机根据枚举获得的信息来加载合适的驱动程序。枚举 是调试USB设备很重要的一点,枚举是判断USB设备连接的重要指标,只要枚举成 功了,那么USB设备的

31、调试也就基本成功了。3.1.2 USB协议枚举过程分析USB协议定义了设备的6种状态,枚举过程会经历4种状态的迁移:上电状态, 默认状态,地址状态和配置状态(其他两种是连接状态和挂起状态)。USB主机在枚举到USB设备插入后,就该对设备进行枚举了,枚举就是从设备 读取描述符信息,然后主机通过读取的信息来加载符合要求的驱动程序,从而识别连 接的是什么设备,该如何进行通信等。调试USB设备中USB的枚举过程是很重要的, 只要枚举成功了,那么工作就差不多了。在枚举之前先要了解USB的一种传输模式:控制传输。这种传输模式是非常重 要的,其作用是确保数据的正确性,设备在枚举过程中使用的就是控制传输这种传

32、输 模式。它可以分为三个过程:建立过程、可选的数据过程及状态过程。第一个过程是由USB主机发起的。它开始与一个SETUP令牌包,紧跟一个DATA0 数据包,然后就是数据过程了。对于控制读传输,数据过程就是输入数据;对于控制 写传输,数据过程就是输出数据。假如在这一过程中,数据长度为0,那么就没有数据 过程了。数据过程之后是状态过程。状态过程和数据过程的数据传输的方向是恰好相 反的:对于控制读传输,状态过程是一个输出数据包;对于控制写输入,状态过程就 是一个输入数据包。最后一个过程来判断数据是否已经正确传输了。枚举的详细过程:设备描述符的获取。USB主机在检测有USB设备连接插入后,会对该设备进

33、行 复位。复位后的地址为0,主机可以通过地址0和该USB设备进行通信。主机向地 址为0的设备的端点0发送获取设备描述符的标准请求。设备收到请求后,按照主机 请求参数将设备描述符返回给主机。主机正确获取一个数据包的设备描述符后,会返 回给设备一个长度为0的确认数据包(状态过程)从而进入设置地址阶段。且需要注 意,主机读取数据包的设备描述符的机会只有一次,一般的设备描述符有18个字节, 然而有的USB设备的端点0大小不到18字节,可是USB主机也只能发送一次请求。 所以,当设备端点0大小不满足要求时,这个问题就需要注意了。地址的获取。USB会在控制传输的建立过程发送一个设备地址请求给设备的端 点0

34、(地址为0),建立过程的数据包中会包含一个新的设备地址。USB主机负责管 理具体的地址,主机会给刚刚接入的设备分配一个唯一的地址。设备收到建立过程之 后,就进入了状态过程,原因是此控制传输没有数据过程。设备在收到输入令牌包后 会返回长度为0的状态数据包。若该状态包被主机确认正确收到,那么主机就会发送 给设备应答包ACK,设备收到之后便会启用新的设备地址。这样主机就可以按照设 备分配到的唯一的地址来访问此设备了。主机对设备描述符的再次获取。这次的获取有点特别,第一,主机是使用新的设 备地址来访问设备,而不再使用地址0;第二,这次获取的设备描述符全部是18字 节的,假如端点0最大包长度小于18字节

35、,则主机就会发送多个IN令牌包来完成多 次数据输入请求。主机对配置描述符的获取。主机先获取配置描述符,然后获取配置集合,主机获 取集合的方式是根据配置描述符描述的配置集合的总长度来获取的。配置描述符和配 置描述符集合的请求差不多,区别就是指定长度不同。有些主机直接使用最大长度来 获取配置描述符集合,而不是单独获取配置描述符,原因是设备实际返回的数据可以 少于指定的字节数。配置描述符由端点描述符、类特殊描述符、接口描述符、配置描 述符等组成。端点描述符、类特殊描述符、端点描述符是不能单独获取的,而是以一 个集合的方式跟随配置描述符一并返回。枚举就相当于主机与USB连接的一个过程,为了能够进行数据

36、交换的一个相互 识别的过程。枚举完成后,主机就可以对USB设备进行读写操作了。3.2 USB CDC 协议什么是CDC类? USB 的CDC类是USB通信设备类(Communication Device Class) 的简称。CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速 网络通信设备)使用的USB子类。根据CDC类所针对通信设备的不同,CDC类又 被分成以下不同的模型:USB传统纯电话业务(POTS)模型,USB ISDN模型和USB 网络模型。其中,USB传统纯电话业务模型,又可分为直接线控制模型(Direct Line Control Model)、抽象控制模型(A

37、bstract Control Model)和 USB 电话模型(USB Telephone Model),如 3.2图所示。本文所讨论的虚拟串口就属于USB传统纯电话 业务模型下的抽象控制模型。图3.2 CDC分类3.3 USB通信过程USB通信传输的基本单位是“包”,学习USB通讯的关键在于理解“包”概念, 了解USB主机是如何发送命令给设备,然后设备是怎样对主机的命令做出响应的。USB数据包的格式如3.1表所示:表3.1 USB数据包的格式FieldPIDADDRENDPDATACRCFrame NumberBits4+474N*8(N=0,.,1024)5/1611数据包直接跟在PID

38、之后,如图所示,数据域的长度为N字节,数据域之后以 16位的CRC校验和结束。握手包没有数据,没有校验和,仅有PID域。Start-Split 和Complete-Split包会在分离传输中用到,是一类特殊的包。其格式如表3.2、3.3所示:表 3.2 Start-Split 包FieldSPLIDPIDHubAddrSCPortSEETCRC5Bits87171125表 3.3 Complete-Split 包FieldSPLIDPIDHubAddrSCPortSUETCRC5Bits87171125包标识符PID的作用是识别包的类型。它共有8位,其中USB协议用到的只有4 位(PID0-P

39、ID3),其余4位是前边4位的取反(PID4-PID7),作用是校验PID。USB 协议规定了 4类包:令牌包、数据包、握手包和特殊包。USB2.0协议中规定的各种PID如表3.4所示:表3.4 USB2.0中定义的各种PIDPID类型PID名PID3:0说明令牌包OUT0001B通知设备将要输出数据IN1001B通知设备将要输入数据SOF0101B通知设备这是一个帧起始包SETUP1101B通知设备将要开始一个控制传输数据包DATA00011B不同类的数据包DATA11011BDATA20111BMDATA1111B握手包ACK0010B确认NAK1010B不确认STALL1110B挂起NY

40、ET0110B未准备好特殊包PRE1100B前导(这是一个令牌包)ERR1100B错误(这是一个握手包)SPLIT1000B分裂事务(这是一个令牌包)PING0100BPING测试(这是一个令牌包)0000B保留,未使用如上表3.4所示,令牌包由4个包组成:输出包、输入包、设置包和帧起始包。其中输入、输出包和设置包的格式一样:SYNC+PID+ADDR+ENDP+CRC5。帧起始 包的格式是:SYNC+PID+11 位 FRAM+CRC5。数据包由4中不同的包组成,分别是DATA0包、DATA1包、DATA2包、MDATA 包。当USB进行数据传输时,若发送的数据长度大于相应端点容量时,数据包

41、会被 分为好几个包,然后交替发送。结构最为简单的是握手包,其格式为SYNC+PID。第4章虚拟串口的实现4.1串口的工作原理串行口是一种常用的接口,具有连接简单易识别,所需要的连接线很少等特点,在 计算机接口方面得到广泛的使用。它的全名是“数据终端设备(DTE)和数据通讯设 备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25个脚的 DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规 定。同步通信方式和异步通信方式这两种是串口进行通信的主要方式。同步通信方式 的效率较高。因为在同步通信方式下,通信双方是通过共享一个单位时钟或电视脉冲 来保证通信双方

42、在通信时是以相同的时钟频率进行,不但准确协调,而且保证发送方 和接收方的准确同步,所以效率较高;异步通信方式的效率较低。因为在异步通信方 式下,通信双方要按照异步通信协议进行传输,且数据传输的单位是字符,异步通信 顾名思义,不要求通信双方在相同的时钟下进行传输,而是收发方可采用各自的时钟 源,这样就会导致发送方传送字符的时间间隔不确定,所以发送效率相比同步传送效 率要低一些。串行端口会在发送数据的每一个字节前发送一个开始位,该单位的值为0。然后 会在发送数据的每一个字节后发送一个停止位,表示已经完成传输。另外,端口还可 以发送奇偶校验位。下面介绍一下波特率、数据位、停止位和奇偶校验位。波特率。

43、模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量,其 单位是波特(Baud)。波特率与比特率的关系是比特壮波特率X单个调制状态对应 的二进制位数。波特率用来衡量通信速度。假如5000波特率表示每秒钟5000个bit。 如果协议需要6800波特率,那么时钟就是6800HZ,因为时钟周期就是指波特率。通 常电话线的波特率是36000,28800和14400。波特率和距离成反比,所以可以远大于 这些值。数据位。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII 码。从最低位开始传送,靠时钟定位。当计算机发送一个任意位的信息包时,信息包 的标准值是5、7和8位,实际的数

44、据不会是8位的。可以根据你想要传送的信息来 自行设置。每个包是指一个字节,包括开始和停止位,数据位和奇偶校验位。由于实 际数据位取决于通信协议的选取,术语“包”便可以指任何通信的情况。停止位。它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 数据在传输线上是定时的,每个设备都有自己的时钟,这样就有可能出现两个通信设 备在通信过程中在数据线上发生不同步。所以停止位在表示每次传输结束的同时还可 以提供给主机更多校正时钟的机会。停止位愈多,不同时钟同步的容忍程度就愈大, 但是由于校正时钟的次数过多,当然数据传输的速度就会大大降低。奇偶校验位。奇偶校验位在通信中是一种简单的检错方法。有

45、4种检错方式:高、 低、偶、奇。当然奇偶校验位是可有可无的。串口会设置校验位,一般会设置数据位 的后面一位,用一个值来确保数据传输逻辑高位的奇偶性。举个例子如果数据是011, 那么偶校验的校验位就是偶数个。对于奇校验校验位是1,那么就会有3个逻辑高位。 高位和低位不是数据检查,而是简单的校验逻辑高位和逻辑低位。这样会有效消除噪 声对通信的干扰或者判断传输和接收数据是否同步。4.2 USB虚拟串口设计4.2.1 STM32 USB 部分说明STM32的USB模块可以产生三种中断:USB唤醒中断、USB高优先级中断和 USB低优先级中断,在STM32的参考手册中没有详细说明这三种中断对应哪些事件,

46、 现说明表4.1所示:表4.1 STM32的USB模块分类STM32的USB模块USB中断唤醒在中断向量表中的位置是42。这个中断在USB设备从暂停模式唤醒时 产生,唤醒事件由USB_ISTR寄存器的WKUP位标识。USB高优先级中断在中断向量表中的位置是19。这个中断仅由USB同步(Isochronous)模 式传输或双缓冲块(Bulk)传输模式下的正确传输事件产生,正确传输事 件由USB_ISTR寄存器的CTR位标识。USB低优先级中断在中断向量表中的位置是20。这个中断由所有其它的USB事件产生, 例如正确传输、USB复位等,事件标志位在USB_ISTR寄存器中。在 STM32的USB开

47、发包的例子中包含了上述中断的处理,例如在USB 扬声器的例子中,CTR_HP函数处理USB高优先级中断;在所有例子 中都有USB_Istr()函数处理USB低优先级中断。USB如何区分低速、全速和高速设备:对于全速和高速设备,上拉电阻是接在 D+上;而低速设备则是上拉电阻接在D-上。USB系统中只允许有一个主机,主机分为3个不同的功能模块:应用软件、USB系 统软件和USB总线接口。客户软件负责和USB设备的功能单元进行通信,以实现其 特定功能,它需要开发人员自行开发,包括USB设备驱动程序和界面应用程序两部分。 客户软件不能直接访问USB设备,其与功能单元的通信必须经过USB系统软件和 US

48、B总线接口模块才能实现。4.4.2 USB电路连接USB设备可以含有一个或者多个配置,USB的设备构架从主机角度上讲,是由一 些端点、接口和配置都成的USB设备。一个或者多个接口可以构成一个配置,前边 也有讲到设备、配置、接口及端点它们之间的关系,所以每个接口会有若干个端点。 其中,端点来完成实际的数据传输,而接口和配置只不过是对USB设备功能的抽象, 是虚拟出来的,没有更多实际的意义。而它的作用就是能够指明USB设备连接时必 须采用何种接口和配置。USB设备的构架需要用到许多描述符,也就是前边详细介 绍的那5种描述符:字符串描述符、端点描述符、接口描述符、配置描述符和设备描 述符等。这些描述

49、符常常在USB接口芯片的固件中被保存。r ayR11.5 teUSB A刍33RUSB = I !D3V3寸 _ PRTR5V0U2XVDGND图4.1电路接线4.2.3虚拟串口程序设计USB虚拟串口程序设计的设计程序要根据CDC类通信协议来编写。主要的就是 设备描述符,设备描述符部分是通过枚举过程获取的。主机只有把USB设备的描述 符写成虚拟串口的描述符,才能完成识别串口。描述符的内容是数组的成员,一个数 组包含了设备描述符,此程序设备描述符就是一个数组。下面的设备描述符即是数组:表4.2设备描述符程序const uint8_t Virtual_Com_Port_DeviceDescript

50、or=0x12,/*描述符字节长度*/USB_DEVICE_DESCRIPTOR_TYPE, /* 设备描述符类型*/0x00,0x02,/* USB规范发布号,表示用哪种协议,0x20表示USB2.0*/0x02,/*类型代码即CDC */0x00,/*子类型代码*/0x00,/*协议代码*/0x40,/*端点0最大分组大小,值为,8、16、32、64*/0x83,0x04,/* 供应商 ID*/0x40,0x57,/*产品ID。由产品ID和供应商ID,就可以让操作系统加载不同的驱动程序*/0x00,0x02,/*设备出产编码*/1, /*制造商标示符*/2, /*产品标示符*/3, /*设

51、备串口号描述符*/0x01/*可能配置数,指配置字符串的个数*/;具体的步骤是,首先USB主机在枚举前期先发送SETUP包,其次USB主机将 会获取设备描述符,然后主机识别设备类型,接着主机根据设备类型加载正确的驱动, 这样USB虚拟串口就成功了。程序的编写要在枚举完成之后,程序包括串口的接收 和发送数据的程序。在此设计中我们只需用到STM32的GPIOA,GPIOB和串口以及USB时钟。所以 先要允许GPIOA,GPIOB和串口的时钟。USB时钟会在接下来使能。下面看第一个Set_System()函数:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DI

52、SCONNECT, ENABLE); 这个函数叫允许USB断开线。通过查看RCC_APB2Periph_GPIO_DISCONNECT在 程序中的定义为RCC_APB2Periph_GPIOA。而USB_DISCONNECT_PIN在程序中定义的为GPIO_Pin_11。说明是PA11就是 程序定义的断开线引脚,该引脚连接了一个上拉电阻控制的三极管,查看STM32引 脚图可以看出PA11是连接USB引脚的DM引脚。接下来就是将USB的断开引脚即 PA11配置成上拉的。这是上拉电阻开始使三极管导通,从而加上一个1.5K的电阻在 时DP脚上。这样枚举就开始了。第二个函数Set-USBClock()

53、,这个函数的作用就是先将AP1总线经过PLL分频, 获取AP1时钟,然后使得USB时钟开始工作。第三个函数USB-Interrupts-Config(),顾名思义,这个函数是配置USB中断的。 在该函数中含有USB中断和串口中断这两个中断。优先级方面由于没有设定它们抢 占优先级的程序,所以它们拥有相同的优先级分组。这两个中断不会存在嵌套关系, 因为它们的抢占优先级相同,USB的响应优先级为0,串口的响应优先级为1,所以 任何一个中断都不会影响另一个中断的运行。最后是USB_Init()。第一句是将pInformation指向Device_Info结构体;第三句是 将 pPropert 指向 D

54、evice_Property 结构体;第四句将 pUser_Standard_Requests 指针指 向User_Standard_Requests结构体。具体USB设备的枚举和功能实现就与这三个结构 相关。最后一句实际上运行的是DEVICE_PROP中的Virtual_Com_Port_init()这个函 数。这个函数通过查看可以看到几个函数:1. Get_SerialNum(),可传变为Unicode字符串,这个是获取设备序列号。2. Power On(),这个函数的作用是连接USB设备,但实质是为了让主机能够快速 准确地检测到USB设备。3. USART_Config_Default(

55、),配置串口全缺省状态,波特率为9600,并且没有允 许发送中断,允许了接收中断。4. bDeviceState = UNCONNECTED,未连接状态。到此初始化结束了。在中断部分中,程序的串口的发送中断时为允许的,中断函数所定义的是串口的 接收中断。那么数据是如何被串口发送的呢?可以用写寄存器方式来发送数据。只是 写寄存器方式有很多缺点,有可能在传输的数据量过大时就会出现问题,主要是因为 它没有办法判断发送缓冲是否为空。串口接收中断调用的函数为USART_To_USB_Send_Data()。函数功能是为了 USB 端口能够从串口接收发送的数据。然后USB端口再把接收到的数据向主机发送,然

56、 后主机就可以和USB端口互相通信了。在虚拟串口端还可以连接一个硬件,这样串口可以通过连接到的硬件给USB虚 拟的串口处理器发送数据,数据发送完毕之后虚拟串口就可以通过设备的USB向主 机发送数据。这样数据传输就完成了。USB设备对于主机而言就是一个串口设备, 主机可以将USB串口设备当成一个COM来识别。这样我们就可以用串口调试助于 查看接收到的数据。如果想要返回数据,也可以通过串口调试助于发送数据,并通过 USB虚拟串口设备来返回该数据,这样就实现了双向通信。第5章结论在这个信息技术飞速发展的时代,USB接口通信技术也取得了飞速的发展。市 面上所能见到的很多外设都开始使用USB接口进行数据

57、通信。所以能够合理的实现 运用USB的数据传输变得及其重要,USB通信的开发人员又将基于通信类的虚拟设 备实现作为研究的重点。本论文对基于USB通信设备类的虚拟串口实现方案进行了 研究,而且还研究了如何对虚拟串口驱动的加载、卸载及数据的高速传输和通信命令 的转换等,基本实现了基于USB通信设备类虚拟串口驱动程序。该系统和与现有类 似驱动程序相比具有符合通信设备类的高传输速度和抽象制模型等优点。此外该系统 还具有相当好的兼容性,具有很大的应用前景。并且论文中对基于通信设备类的虚拟 串口实现及对通信设备类的研究,对研究基于通信设备类的虚拟设备实现方案等设计 人员具有很好的指导意义。本论文主要完成以

58、下工作:1. 通过认真阅读英文原版的Windows NT文件系统以及USB协议中的通信设备类 的许多专业书籍,既学习了 Windows驱动程序的一般简单的开发方法,又学习了符 合USB协议的驱动程序的开发方法,并且对Windows驱动的工作原理进行了深入的 研究;2. 对虚拟串口技术实现技术做了深入的研究了,分析了那种实现方法好些,那种 实现方法存在不足,并从中选择了通信设备类的抽象控制模型作为虚拟串口实现的理 论依据,这样就解决了兼容性问题并且避免了重新设计USB转串口电路板,这使得 虚拟串口驱动更高的通用性和更好的高效性,使得虚拟串口驱动有更广阔的应用前 景;3. 对USB协议进行了认真的

59、学习。分析和研究了 USB通信设备类,并根据USB 通信设备类中的各个模型的特点,将抽象控制模型确定为虚拟串口驱动所用的模型; 按照设计目标,对虚拟串口驱动程序的总体结构和详细方案进行了认真的研究和分 析,分析了虚拟串口驱动程序中的难点和重点问题进,优化了对问题的解决方法;4. 根据研究结果,实现了该驱动程序的演示版本,并对稳定性和兼容性进行了测 试,通过测试总结出了系统中存在的不足之处,并对该系统的后续改进和完善做了许 多工作。参考文献1 Universal Serial Bus Specification,Revision 2.0. Compaq,Hewlett-Packard,Intel

60、,Lucent,Microsof t,NEC,Philips IncJ,2000. 李肇庆,廖峰,刘建存.USB接口技术M.北京:国防工业出版社,20043 刘荣.圈圈教你玩USBM.北京:北京航空航天大学出版社,2009.1.4 王成儒,李英伟.USB2.0原理与工程开发M.北京:国防工业出版社,2004.5 许永和.EZ-USB FX系列单片机USB外围设备设计与应用M.北京:北京航空航天大学出版 社,2002.6 周立功.USB2.0与OTG规范及开发指南M.北京:北京航空航天大学出版社,2004.7 Walter Oney. Programming the Microsoft Wind

61、ows Driver Model.Microsoft PressJ,2003.8 Chris Cant.Writing Windows WDM Device Drivers. Focal PressJ,1999.9 Jan Axelson. USB Complete: The Developer GuideM. Lakeview Research,2011.10 肖踞雄,翁铁成,宋中庆.USB技术及应用设计M.北京:清华大学出版社,2004.致谢岁月如白驹过隙,一晃大学四年就这样匆匆而过,转眼间就快要毕业了,四年间 疯过,笑过,有难忘的事,还有遗憾的事,不过大学四年过的很充实,很难忘。毕业 论

62、文也在我的认真学习和研究下,就要接近尾声了,在这里我要向所有给我帮助的人 致以感谢,感谢给我指导、关心和支持的老师、同学,感谢远在家乡的亲人给我的关 心和挂念。首先,我要感谢我平易近人、知识渊博的侯宁老师。您治学严谨,高标准,严要 求,对学术论文一丝不苟,对我的许多不懂的问题也是诲人不倦。我的理论学习和毕 业论文能够顺利的完成,您的悉心指导和不断鼓励给了我非常大的帮助和动力。您知 识渊博,对待生活积极乐观,在我毕业设计遇到阻碍时,您给予我鼓励,让我能够放 轻松,积极乐观的去面对遇到的问题,真正的做到了师者:传道、授业、解惑。您在 学习上给予我很多帮助,在毕业设计演示方面手把手教我调试助于工具的

63、使用。您为 人和蔼,处事沉着冷静,治学严谨,对知识的研究学习孜孜不倦的精神是我学习的良 好榜样。在此向我敬爱的侯老师致以最衷心的感谢,祝福您身体健康、工作顺利、阖 家欢乐、万事如意!其次,感谢刘维同学,感谢你在软件使用和论文修改方面给予的支持和热情帮助。 同时,感谢电气系所有的老师,您们的耐心教导让莘莘学子们能够学有所成,您们的 谆谆教诲和渊博的专业知识让我获得了人生的一大笔财富一一知识。感谢河南城建学 院给予我这么好的学习环境和学习氛围,让我能够开开心心学知识,愉快的度过了大 学四年的时光。非常感激我的爸爸妈妈以及亲人,一直以来都是你们在默默地支持我、关心我、 鼓励我,给了我无私的爱与感动。感谢我的父母,辛苦劳作换来我学习知识的机会, 在我生活中遇到挫折的时候,是我的父母给我鼓励和支持,激励我勇敢向前,不怕失 败和挫折,在父母的帮助和鼓励下,我跨过了生活中一道又一道的坎,让我如此的热 爱生活。在未来的日子里,我会倍加努力,让自己成为你们的骄傲,让自己强大起来, 是自己能够成为你们的依靠,来报答您们的含辛茹苦。最后,感谢所有好朋友的帮助和关怀,希望大家能永远积极向上,工作顺利天天 开心快乐!附录:/* Includes*/#include include.h#include hw_config.h#include usb_li

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!