基于VxWorks操作系统的USB2.0驱动分析
基于VxWorks操作系统的USB2(0驱动分
析
2007年l1月
第26卷第ll期
基于VxWorks操作系统的USB2.0驱动分析
陈安军梁小琴
(中国电子科技集团公司第41研究所青岛266555)
摘要:现代智能仪器中已经开始使用USB接口作为
输入输出接口;智能仪器
对实时性要求的提高,使得V文works操作
系统在其中得到了广泛应用.本文分析了VxWorks操作系统下USB2.0驱动程序
模型结构与功能,详细地说明了USB2.0
主机
栈.在此基础上,给出了智能仪器中使用USB2.0主机栈来完成USB主机
功能的方法和注意事项.
关键词:VxWorks;嵌入式系统;通用串行总线;驱动程序
中图分类号:TM930.9文献标识码:A
AnalysisonUSB2.0driverbasedon
VxWorksoperationsystem
ChenAnjunLiangXiaoqin
(The41stResearchInstituteofCETC,Qingdao266555) Abstract:USBinterfacehasbeenappliedasastandardI/Ointerfaceinthemodernintelligence
instrument.Asthein—
creasingrequirementsofreal-timeperformanceforintelligentinstruments,VxworksOShas
gotwidelyapplicationinit.
ThispaperanalyzesthestructureandfunctionofUSB2.0drivermodule,andexplainshostpro
tocolstackofUSB2.0in
detail.FinallymethodsandsomenoticesofimplementoftheUSBhostfunctionsbyusingUS
B2.0hoststackarealso
given.
Keywords:VxWorks,embeddedsystem;USB;driver
0引言
通用串行总线(universalserialbus)是一种计算机外 围串行通信接口,具有高速数据传输,热插拔,即插即用 (PnP),成本低等特点.随着USB规范的日趋完善和成 熟,测量仪器中也已经开始使用USB作为其标准的外围 接口.Vxworks操作系统以其良好的可靠性和卓越的实 时性在仪器仪表领域得到了广泛应用,本文针对Vx— Works操作系统下最新的USB2.0驱动程序进行了分 析,为基于Vxworks的仪器仪表使用USB2.0总线提供 了技术参考,并结合作者开发某仪器过程中遇到的问
, 给出了使用注意事项.
1USB2.0驱动程序模型结构
USB体系结构是基于主从结构的,USB的驱动程序
指的是主机端的驱动程序.图1给出了Vxworks操 作系统下USB主驱动栈各模块之间的功能关系. 在栈最底层的是硬件:USB主控制器(USBhostcon— troller),USB主控制器在嵌入式主机系统中控制USB,实 现USB主机功能.目前,USB控制器主要有3类: (1)(UHCI,universalhostcontrollerinterface)通用 的主控制器,由Intel最先设计并制定相应规范; (2)(OHCI,openhostcontrollerinterface)开放的主 控制器,由Microsoft,Compaq和NationalSemiconductor
最先设计并制定相应规范;
(3)(EHCI,enhancedhostcontrollerinterface)增强 的主控制器,该控制器支持USB2.0.
每一主控制器在其上都有相对应的主控制器驱动程 序(HcD),这些设备驱动程序与底层的硬件相关,为上层
提供统一的功能接口.
USB主机驱动(USBD)与底层硬件无关,通过HCD 与底层控制器通信.USBD管理连接到主机上的每一个 USB连接,并提供高层与USB设备通信的通道.除此之 外,USBD还自动对USB设备进行电源管理和分配带宽. 在USB系统中,集线器(HUB)对USB系统的正常操作起 到关键性作用,因此USBD直接对集线器进行控制.这就 作者简介:陈安军(1980-),男,学士,主要从事智能测量仪器软件设计工作.
一
68,
己口口7年l1月
第己5卷第ll期
cIl1dearserusbTool
USBExerciserUtility USB2.0HubusbKeyboardLibI ClassDriverUusb/v0useLib U…I
usB.1ClassDrivers
f
IusBz.ohns-anonLayer —I承-nf一一一一,一一一I一一一一一一一L] 0SAL卜一lJJ,Device}JuS,BRequ.est_JZ— I
1UHCIHCDOHCIHCDEHCIHCD 1
?
巳.壁1i,苎鬯一一一一一一一一一
lusbPciLibl
/\\\
SystemHardwareUHCIorOHCIOrEHCI
(forexample,PCIbuscontroller)HostController
图1USB2.0主驱动栈功能关系
意味着USBD还具有控制USB设备和集线器动态插拔的 能力.
在主机栈的最顶层是USB设备驱动程序.设备驱动 程序依赖USBD提供的通信通道,驱动连接到USB系统 中的USB设备.
OsAL为USB主机栈提供了与Vxworks操作系统 相关的操作,包括任务管理,互斥及信号灯,内存分配以及 系统时钟.
通过图1的结构,可以看出USB主机栈的设计关键 是USB主机驱动(USBD)的设计,USBD为USB设备驱 动程序提供标准的USBDAPI;为主机控制器驱动提供 HCDAPI
2USB主机栈启动过程
USB主机栈的启动分为3步:
(1)初始化USB主机驱动(USBD);
(2)加载USB主控制器驱动(HCD);
(3)加载USB设备驱动程序.
集成开发环境(IDE)下可以通过工具进行配置,其步 骤如下所述:
(1)包含USB主机栈USBHostStack组件,通过在
中包含USB主机栈完成对USBD的支持.在系统启 动时对USB主机驱动进行初始化需要包含USBHost StackInit组件;
(2)包含主机控制器(HC),根据具体设计选用相应的 控制器.一般在嵌人式模块的手册中都有其模块控制器 ?应用
的类别.在系统启动时对主机控制器进行初始化需要包 含相应控制器的初始化组件;
(3)包含设备驱动,根据设计的需求选择相应的设备 驱动.
通过上述配置生成的Vxworks系统中带有USB主 机栈,可以完成USB2.0主机功能.
3USB主机驱动(USBD)分析
在使用USBD提供的接口之前,首先需要对USBD 进行初始化,USBD的初始化分为3步,其步骤如下: (1)调用USBD的人口函数usbdlnit(),usbdlnit初始 化USBD用到的数据结构;
(2)调用USB集线器(HUB)的初始化函数usbHu— blnit(),初始化集线器驱动的数据结构;
(3)使用函数usbHCDInit()挂接相应的主机驱动器. 对于每一个挂接到USBD上的主机驱动程序,集线器 驱动程序都会为其创建一个优先级为100的任务来监视 USB总线上的事件.这个任务一直处于睡眠状态,一旦 集线器上的某一个端口状态发生改变,该任务立即被激 活.由于该任务的优先级为100,可以立刻获得资源变为 运行状态将总线状态告知USBD.
USB设备类驱动需要首先在USBD中注册,USBD 为每一个设备类维护着一个设备类结构,它的定义如下: Typedeftructusbhst—
device——
driver
{
BOOLbFlagVendorSFlecific; UINT16uVendorlDorClass: UINT16uProductlDorSubClass: UINT16uBCDUSBorProtocol:
USBHsT—
STATUS(*addDevice)
(UINT32hDevice,UINT8InterfaceNumber, UINT8uSpeed,void*pDriverData); Void(*removeDevice)(UINT32hDevice,void*
pDriverData);
Void(*suspendDevice)(UINT32hDevice,void*
pDriverData);
Void(*resumedevice)(UINT32hDevice.void*
pDriverData);
}
USBHST—
DEVICE—
DRIVER,pUSBHST—
DE—
VICE_
DRIVER;
当USB设备插人或拔出USB系统时,集线器驱动程
序将USB设备插人或拔出的信息通知USBD,USBD根
据得到设备信息(例如:设备类号,子类号,协议号等)查找
设备驱动程序列表,查找到该设备的驱动程序后,调用
USB设备的相应函数,进行设备的相应操作.
当一个设备类不在系统中使用时,通过撤销函数来撤
销注册,该操作的实质是删除相应设备类的设备类结构. 一
69—
4结束语
天地
本文介绍的Vxworks操作系统下USB2.0驱动程序 已经成功在国内某高性能频谱分析仪中使用,在使用过程 中有以下几点注意事项:
(1)通过分析USB主机栈启动过程,可以对USB主 机栈原理进行研究;
(2)为考虑USB系统的可移植性,VxWorks提供的 源程序并没有基于平台做处理.当使用X86平台时,需 要修改相应的PCI设置以适应X86平台下的PCI机制. 具体方法:修改usbPciStub.c定义:
#definelNTENABLE(i)sysIntEnablePIC(i)
#definelNT_
DISABLE(i)syslntDisablePIC(i) (3)在使用EHC时,一定要注意系统中使用的
USB1.1的控制器是什么类型,并将相应的驱动程序组件 加到VxWorks的Image中.
2gg7年I1月
第己巨卷第1I期?_
参考文献
[1]WindRiverSystemInc.HosTsTACKPROGRA
MER'SGUIDE[Z].2004.
[2]ANDERSONnUSB系统结构[M].北京:中国电力出版 社,2001.
[3]孔祥营,柏桂枝.嵌入式实时操作系统VxWorks及其开 发环境TornadoFM].北京:中国电力出版社,2001. [4]邵高平.通用串行总线(UsB)及其开发方法[J].微计算 机信息,1999,15(3):10—13.
[5]林宝如,张帆,陈怡.基于VxWorks操作系统的USB驱 动分析口].重庆建筑大学,2005,27(3):98—100. [6]朱泽诚,王兴元,李洁.Vxw0rks实时操作系统的USB
驱动程序原理与分析[J].计算机工程与应用,2003,39 (22):122—125.
(上接第34页)
N
匦
一
70一
I停止内部计数器l,2
读出计数器值I
J计算时间误差
'
I显示
图3系统流程图
3结束语
本文采用该系统对不同标准频率进行测试后,得到该 系统的频率测量准确度:?0.15PPM,日误差准确度? 10ms.该系统采用多周期同步测量方法利用PIC单片机 实现了复费率电能表误差检定仪的设计,具有体积小,重 量轻,稳定可靠,易于操作,测量精度高的特点,实现了复 费率电能表的误差检定.
参考文献
[1]李友红.多功能电能表计量应用的现状与展望[J].电测 与仪表,2007,44(4):32—35.
[2]俞盛荣.电子式电能表应用中的技术导向[J].电测与仪 表,2004,41(8):25—28.
[3]周渭,朱根富.频率及时间计量[M].西安:陕西省出版 社,1986.
[4]马凤呜.时间频率计量[M].北京:中国计量出版 社,1990.
[5]窦振中,汪立森.PIC系列单片机应用设计与实例[M]. 北京:北京航空航天大学出版社,1998.
[6]郝莹,申亚芳,金文.PIG单片机实现的字符与图形液晶 显示口].实验室科学,2007(1):114-115. [7]何立民.单片机高级教程一应用与设计[M=].北京:航空航 天大学出版社,2000.