欢迎来到天天文库
浏览记录
ID:32585831
大小:76.17 KB
页数:7页
时间:2019-02-13
《vxworks下的usb驱动程序原理与分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、VxWorks下的USB驱动程序原理与分析1、问题的提出通用串行总线(USB)作为一种中高速的数据方式,己经很普遍地应用于外设与主机的通信屮。VxWorks是当今十分流行的实时操作系统,在通信、国防、工业控制、医疗设备等嵌入式实时应用领域。很多VxWorks系统中都有USB设备,可是关于USB的驱动实现并没有相关的资料可以参考,给实际工作带来了难题。本文通过详细地分析VxWorks下的USB驱动栈,具体提出了其实际应用的方法,为USB在应用VxWorks的嵌入式系统的开发扫清了技术障碍。2、VxWorks简介VxWorks是WindRiver公司开发的具有工业
2、领导地位的高性能实时操作系统(RealTimOperationSystem,RTOS)内核,具有先进的网络功能。VxWorks的开放式结构和对工业标准的支持,使得开发人员易于设计高效的嵌入式系统,并可以很小的工作量移植到其它不同的处理器上。作为一种先进的实时操作系统,它具有以下特点:可裁剪微内核结构。高效的任务管理:①多任务,具有256个优先级。②具有优先级排队和循环调度。③快速的、确定性的上下文切换。灵活的任务间通讯:①三种信号灯:二进制、计数、有优先级继承特性的互斥信号灯。②消息队列。③套接字(Socket)o④共享内存。⑤信号(Signals)微秒级的中
3、断处理。支持POSIX1003.1b实时扩展标准。支持多种物理介质及标准的、完整的TCPIP网络协议。灵活的引导方式。支持从ROM、flash、本地盘(软盘或硬盘)或网络引导。支持多处理器并行处理。快速灵活的I/O系统。支持MS-DOS和RT-11文件系统。支持本地盘,flash,CD-ROM的使用。完全符合ANSIC标准。多个系统调用。3、USB驱动程序的结构概述图1提供了一个USB主驱动栈结构的简单概括。图2显示了USB主驱动栈的各模块Z间的功能联系。在栈的最底部是USB主控制器(USBHC,即USBHostController),这是主系统中控制每一个U
4、SB设备的硬件部分。目前,市场上主要有两大类USB主控制器,一种是支持由ime1公司最先提出的通用主控制器接口(UniversalHostControllerInterface,简称UHCI),另一种是支持由微软、康柏和国家半导体公司联合设计提出的开放主控制器接口(OpenHostControllerInterface,简称OHCI)o硬件厂商一般根据这两个规范设计他们的USB主控制器。对于每一类型的主控制器都有一个与硕件独立的USB主控制器驱动HCD(HostControllerDriver,简称HCD)。WindRiver提供了两个驱动:usbHcdUhc
5、iLib(UHCI主控制器库)和usbHedOheiLib(OHCI主控制器库)。USB主驱动USBD(USBhostdriver,简称USBD)和HCDZ间的接口允许一个或超过一个的底层主控制器。而且,WindRiver的USBD能够同时连接多个USBHCDo这样的设计特点可以使开发者建立复杂的USB系统。USBD是在HCD之上的与硬件独立的模块。USBD管理每一个与主机相连的USB设备,向更高层次提供了可与USB设备通信的路径。它还负责自动处理USB电力管理以及USB带宽管理。而且,USBD还管理USBhub.Hub功能是一个驱动能否对USB正确操作的评价
6、Z一。因此WindRiver的USBD设计者要使USBD透明地处理hub的功能。这意味着,USBD还能处理USBhub和设备的动态插拔。USBClient模块在USB主驱动栈的顶端。USB类驱动(USBClassDriver)是Client模块的典型例子。USB类驱动负责管理连接到USB上的不同类型的设备;它们依靠USBD来提供与每个设备的通信路径。USBclient模块的其他例子就是那些利用USBD与USB设备通信的应用程序。4、USBD驱动详解这一部分将要描述USBD(USBHostDriver)的典型应用。例如初始化,client注册,动态连接注册,设备
7、配置,数据传输,同吋还探讨了USBD内部设计的关键特性°这部分是VxWorks下USB驱动的核心。4.1初始化USBD:分为两步⑴必须至少调用一次两数usbdlnitialize()o在一个给定的系统中,usbdlnifialize()初始化内部USBD数据结构,并依次调用其它USB驱动栈模块的入口。usbdinitialize()可以在启动时调用一次,也可以对每一个设备各调用一次。USBD自己记录了调用usbdlnitialize()(<+,)和usbdShutDown()(L)的次数。只有大于等于1时才是真正初始化了,而等于0是关闭了。⑵用USBD的lis
8、bdHedAttaeh()函数来把至少
此文档下载收益归作者所有