2024年5月9日发(作者:)

下USB OTG设备驱动程序设计

孔旋,邓中亮

北京邮电大学电子电子工程学院计算机应用技术专业,北京(100876)

E-mail:kongxuan1982@

摘 要:本文介绍了USB OTG技术,分析了两用USB OTG设备驱动程序配置模型以及

下设备驱动程序模型,并详细介绍了下pl2303的usb转串口桥接

器芯片驱动程序的设计与实现。

关键词:USB OTG,,驱动程序

1. 引 言

USB,全称是Universal Serial Bus(通用串行总线)。在1994年年底,由当时的康柏、

IBM、Microsoft等多家公司联合发起成立的通用串行总线开发者论坛(USB Implementers

Forum,简称USB IF)先后陆续推出了USB0.7、USB1.1、USB2.0规范,其理论传输数率最

高可达480Mb/s。最近,根据现有的USB接口在有线/无线,性能及应用规范上的不同,USB

IF将USB接口分为5类,并发布了相应的标识,分别是:Wireless USB、Original USB、Hi-Speed

USB、On-The-Go USB及Hi-Speed On-The-Go USB

[1]

是微软公司向嵌入式领域推出的一款紧凑、高效的32位嵌入式操作系统,

具有多任务、实时性、模块化及可伸缩性、强大的通信和多媒体能力等特点

[2]

,在移动计算、

工业控制和信息家电等诸多领域都有广泛的应用。

本文将通过工具Platform Builder实现TI OMAP850 PDA手机平台下USB OTG设备驱

动程序,并实现基于OTG技术的一种应用——在无PC条件下,以PDA手机平台端为USB

主机端的数据通信。

2. USB OTG技术

2.1 OTG技术简介

USB技术的发展,使得PC和周边设备能够通过较简单、可方便热插拔的方式连接在一

起,通过USB总线,在PC的控制下进行数据交换。但这种方便的数据交换方式,就在不

久以前(10年以内),一旦离开了PC,各设备间无法利用USB接口进行操作,因为当时

没有任何一种PC以外的其他设备能够充当PC一样的Host。然而近年来,随着如潮水般涌

来的数码便携产品,如PDA、移动电话、数码相机等产品在人们日常生活中的普及,在移

动通信计算领域中,人们对于通过移动计算设备直接和USB外围设备直接进行数据交换,

从而在一定程度上摆脱对PC机的依赖的需求越来越大。在这种背景下,USB IF推出的

On-The-Go(简称OTG)规范应运而生,以实现两个不同的外设之间通过USB接口直接传

输数据(如数码相机在无PC的情况下直接通过USB接口与PDA手机实现照片传输)。

OTG 有两种设备类型: 两用OTG 设备(Dual- role device)和外设式OTG 设备

两用OTG 设备完全符合USB2.0 规范, 它同时提供有限的

(Peripheral- only OTG device)

[1]

主机能力和一个Mini- AB插座, 支持主机流通协议(Host Negotiation Protocol, HNP), 并和外

设式OTG 设备一样支持事务请求协议(Session Request Protocol, SRP)。当作为主机工作时,

两用OTG 设备可在总线上提供8mA的电流, 而以往标准主机则需要提供100~500mA 的

电流。两个两用OTG 设备连接在一起时可交替以主机和从机的方式工作, 这个特点兼容了

现有USB 规范主机/外设的结构模型。OTG 主机负责初始化数据通信, 比如: 总线复位、获

- 1 -

取各种USB 描述符和配置设备。这些配置完成后, 两个OTG 设备便可分别以主机和从机

方式传输信息, 两个设备主从角色交换的过程由主机传输协议 (HNP)来定义。

OTG 是对USB 规范的补充, 标准的USB 主控设备和外设都没有变化。新的OTG 特

性只是对于具有主机功能的设备是必要的, 普通的USB 设备和OTG 设备并没有太大的变

化。OTG 只是提供了在主从设备间的转换以及判决任务, 但在每一个任务过程当中, 主从两

端扮演的角色与不同的USB 设备的主从两端是完全相同的。图1所示为OTG应用示意图:

图1 OTG应用示意图

2.2两用OTG设备驱动程序配置模型

USB OTG的产生背景决定了USB OTG技术主要应用于便携式设备中。与PC机不同,

便携式设备一般没有便携的方式和足够的空间装载新的驱动程序。因此,OTG规范要求每

个OTG设备(以下主要针对两用OTG 设备展开)有一个支持外设式OTG目标设备的列表,

列表中包括可与之通信的设备信息,如设备的类型和制造商等。

如图2所示,两用OTG设备驱动程序由USB主机软件包和USB设备软件包构成。OTG

驱动程序通过连接器“ID”的连接状态,或通过是否有主/从设备转换协议引起两用设备工作

方式的转换,确定使用USB主机软件包还是USB设备软件包。

图2 两用OTG设备驱动程序配置图

当两用OTG设备以主机方式工作时,USB主机软件包工作。主机控制器驱动程序完成

USB主机软件包与USB OTG硬件层的数据交换,USB总线驱动程序保存设备的信息,主

机端设备驱动程序支持目标设备列表里的设备。OTG提供通用的主机端设备驱动程序。当

两用OTG设备以从机方式工作时,USB设备软件包工作。设备控制器驱动程序完成USB

设备软件包与硬件层的数据交换,USB协议层完成USB协议规范,USB设备的功能取决于

该两用OTG设备的功能

[3]

- 2 -

3. 下的驱动程序

基于Windows CE. net 的两种模型是本机设备驱动程序和流接口驱动程序[1 ] 。本机设

备驱动程序用于低级、内置设备,提供一组定制的接口可通过移植、定制微软提供的驱动样

例来实现。流接口驱动程序实现一组固定的流接口函数,所有的CE 设备皆可使用此模型实

现。开发工具Platform Builder中包含的样本设备驱动程序分为两种:单片驱动程序和分层的

驱动程序如图3 所示。单片驱动程序基于单个码片,该码片直接把硬件设备的功能传递给操

作系统。与弹片驱动程序相比,分层驱动程序由两个设置好的层组成,上层是模型设备驱动程

序(Model Device Driver ,MDD) ,下层是依赖平台的驱动程序( Platform Dependent

Driver ,PDD) 。大多数的样本设备驱动程序都配置成分层的。

图3 单体驱动程序与分层驱动程序

微软为链接驱动程序提供了模型设备驱动程序(MDD) 。对平台和函数来讲模型设备

驱动程序(MDD) 是通用的,即是源代码也是库。模型设备驱动程序(MDD) 执行下列任务:

(1) 链接PDD 层并定义它希望调用的函数,通常这些函数叫做设备驱动程序提供器接口

(DeviceDriver Service Provider Interface ,DDSI) ;

(2) 把不同的函数集提供给操作系统,通常这些函数叫做设备驱动程序接口(Device

Driver Interface ,DDI) ;

(3) 处理像中断处理这样复杂的任务;

(4) 负责与GWES 模块和内核通信。不像MDD 层,依赖平台的驱动程序(PDD) 层与

MDD 和硬件都有接口,这就意味着必须适合目标平台的需要。一个PDD 由针对具体硬件的

函数组成。而这些函数与一个MDD 相对应、但这种对应不是直接的一一对应。MDD 函数

实现独立的任务,而MDD则通过使用这些任务来实现其目标。因为PDD 是硬件相关的,因

此必须生成一个设置好的PDD 并输出到平台硬件。

像其他计算机结构一样,当设备需要驱动程序的服务时,基于Windows CE. net 的平台要

使用中断通知操作系统。Windows CE. net 把中断处理分两部分

[4]

,中断服务例行程序

( Interrupt Service Routine ,ISR) 和中断服务线程( Interrupt Service Thread , IST) ,实质上,中断

服务例行程序把物理中断映射为逻辑中断,并以中断标识号实现形式返回给系统任务调度进

程; IST 则是在设备驱动程序中具体实现的中断处理。实现过程如图4 所示。

- 3 -

图4 中断处理实现过程

例外处理程序是所有中断的主要目标,当中断发生时,核心直接跳到例外处理程序,然后

例外处理程序调用已注册的中断服务例行程序( IST) 处理当前中断。原始设备制造商(OEMs)

在启动时向例外处理程序登记中断处理程序( ISR) 。

4. PL2303桥接器芯片驱动程序设计实现

4.1 PL2303桥接器芯片的USB虚拟串口设计

PL2303是Prolific公司的推出的USB转RS232桥接器芯片,这种芯片一头为串口,另一

头为USB接口,在其内部完成串口到USB 协议的转换。该芯片通过mini-AB USB 口连接到

USB OTG接口后,在操作系统中表现为一个串口设备,这意味着USB 接口对于

传统的串口调试工具和用户基于串口的应用程序是透明的,即虚拟串口技术。如图5所示,

芯片支持控制传输、中断传输、块传输,其中:控制传输使用USB设备的端点0;中断传

输使用USB设备的端点1,端点1用作中断传输模式的输入端点;块传输使用USB设备的

端点2&3,端点2用作块数据输出端点,端点3用作块数据输入端点。虚拟串口使用USB

的CDC类(Communication Device class通信设备类)来实现。由于PL2303的USB类不属于

标准的USB类,在USB标准子类中,有一类称为CDC类,通常一个CDC类由两个接口子

类:通信接口类(Communication Interface Class)和数据接口类(Data Interface Class)组成。通信

接口类对设备进行管理和控制,数据接口类负责传输数据。通信接口类占有一个控制端点(端

点0)和中断端点(端点1),数据接口类占有块数据输出端点(端点2)和块数据输入端

点(端点3)。其中控制端点主要用于USB 设备的枚举和虚拟串口的波特率和数据类型(数

据位数、停止位和起始位) 设置的通信。输出方向的块数据输出端点用于主机(host,实验

中为TI OMAP850手机平台中的两用USB OTG设备端口)向设备(slave)发送数据,相当

于物理串口设备中的TXD线(如果从桥接器芯片角度看),输入方向的块数据输入端点用

于设备向主机发送数据,相当于物理串口设备中的RXD线。

- 4 -

图5 Pl2303HXD功能模块图

4.2 两用USB OTG设备驱动程序设计

由于从主机端看,桥接器芯片显示为串口设备,因此,应用程序要对(虚拟)串口进行

操作,只需要在COMx上调用CreateFile () 、WriteFile () 往串口写数据、CloseHandle( ) 关

闭串口等。因此,希望驱动可以导出Open ,Close ,Read 和Write 接口。串口属于流接口设备,

它的驱动采用分层驱动设计方法。PDD 为MDD 层提供函数接口,MDD 层调用PDD 层的

接口函数并向操作系统提供函数接口。通常MDD 层由微软提供,可以直接使用,具体的驱动

开发只需要设计PDD 层代码,以下为串口驱动要实现的主要函数。

(1) DDI 函数(MDD 层接口函数)

COM_Close COM_PowerDown

COM_Deinit COM_PowerUp

COM_Init COM_Read

COM_IOControl COM_Write

COM_Open

(2)DDSI 函数(PDD 层接口函数)

GetSerialObject , HWClearBreak , HWClearBreak ,

HWClearRTS , HWClearRTSHWDeinit , HWClearDTR ,

HWClearRTS , HWGetStatus , HWClose , HWInit , HWSet2

DCB , HWDeinit , HWSetDTRHWDisableIR , HWLine2

IntrHandler ,HWSetRTS 等。

其中GetSerialObject (获得串口设备对象) 这个函数由PDD 层定义,函数最先被MDD

- 5 -

层的COMINIT函数调用,返回HWOBJ 结构体,这个结构体主要包含该驱动对应的中断识别

号以及PDD 层提供的所有其他函数接口;HWSetCommTimeouts设置通讯超时参数,保证串

口通信的正常进行;HWGetIntrType读串口中断状态寄存器判断中断类型;

HWModemIntrHandler 中断模式下实现与modem通信中所有可能发生事件的处理函

数;HWRxIntrHandler 中断模式下的数据接收函数。

5. 驱动测试与安装

这里将简略介绍驱动的测试与安装。其中在测试部分,将主要介绍测试方法与流程。

5.1 驱动测试

通过编写好的测试应用程序,向驱动程序发出各种I/O控制,读写请求,检查执行结果。

测试过程大致如下:

(1)将烧过电路模块的FPGA电路板一端连接PDA手机平台,一端连接支持PL2303转接

器的带串口及小液晶显示屏的(zigbee)电路模块。

(2)在PDA手机上安装编译成功的驱动程序后,安装手机桥接器应用程序(由手

机厂商针对PL2302桥接器而设计的)。

(3)由应用程序向(zigbee)电路模块发送字符、数字,由于(zigbee)电路模块不带键盘,

无法进行反向操作。实践证明,单向传输准确顺畅,达到功能设计要求。

5.2 驱动的安装

由于桥接器与PDA手机的两用USB OTG设备接口连接,所以安装开始前,系统会认

为它是一个USB设备;但这里的目标是让驱动实现创建虚拟串口的功能,因此桥接器在系

统里必须注册为一个串口。另外,安装过程中,除了WinCE安装组件外,INF文件和系统

注册表起着重要作用。

6. 结论

本文介绍了USB OTG技术,分析了两用USB OTG设备驱动程序配置模型以及

下设备驱动程序模型,并详细介绍了下pl2303的usb转串口桥接器芯

片驱动程序的设计与实现。最后,通过实验测试实现了USB OTG技术的一种应用——在无

PC条件下通过移动计算设备和USB外围设备直接进行数据通信。可以预见在不久的将来,

随着移动数码产品市场的不断扩大,不断完善的USB OTG技术将拥有更加广阔的市场前景。

参考文献

[1] 周立功.USB 2,0与OTG规范及开发指南[M].北京:北京航空航天大学出版社,2004.

[2] 周毓林,宁杨,陆贵强,等.Windows CE. net内核定制及应用开发[M].北京:电子工业出版社,

2005.

[3] 邵小桃.USB OTG在移动领域中的应用[M].北京:北京交通大学出版社,2004.

[4] 李长河,王永强,刘刚,等.嵌入式Windows CE设备驱动的研究实现[J].微机发展,2003 ,7(13):

69 – 72.

- 6 -

Design of USB OTG Device Driver Based on

Kong Xuan, Deng Zhongliang

Department of Electronic Engineering, Beijing University of Posts and Telecommunications,

Beijing (100876)

Abstract

This paper introduces the technology of USB OTG, analyses the models of dual-role OTG device

driver and the device driver, and focuses, finally, on the design and implementation of

pl2303 usb-to-rs232 chip driver.

Keywords: USB OTG, , driver

- 7 -