USB设备的Bulk模式驱动程序设计

USB设备的Bulk模式驱动程序设计

ID:37468010

大小:46.00 KB

页数:7页

时间:2019-05-24

上传者:U-3730
USB设备的Bulk模式驱动程序设计_第1页
USB设备的Bulk模式驱动程序设计_第2页
USB设备的Bulk模式驱动程序设计_第3页
USB设备的Bulk模式驱动程序设计_第4页
USB设备的Bulk模式驱动程序设计_第5页
资源描述:

《USB设备的Bulk模式驱动程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

USB设备的Bulk模式驱动程序设计摘要本文介绍了USB设备Bulk模式驱动程序的设计。该设计使用FIFO消息队列、信号量机制和定时器中断机制,可在不同的操作系统中实现。文中所用到的程序体系结构对于实现不同USB设备进行Bulk模式通讯是通用的。  关键词USB;Bulk模式;驱动设计  引言  通用串行总线(USB)是一种串行接口,具有自动配置能力和良好的兼容性,从而简化了计算机与外设的连接,被计算机外设硬件制造商广泛采纳。USB总线标准由1.1版升级到2.0版后,传输率由12Mbps增加到了480Mbps,更适宜于高速数据传输。USB设备支持打印机、扫描仪、数码相机等外设时,由于这些外设与主机间传输的数据量大,要求驱动程序采用Bulk模式进行高速数据传输。  USB设备驱动的整体结构  USB设备驱动的整体结构包括如下五个主要部分:USB应用程序接口、USB设备驱动函数、USB中断服务程序、USB回调接口程序、USB标准事件处理程序。 USB应用程序接口  USB应用程序接口主要功能是对USB驱动器进行软硬件初始化、打开端口、关闭端口、读端口、写端口和端口控制操作。当设备驱动器装入系统设备表时,I/O系统就调用该应用程序接口。  USB应用程序接口的一个例程所包含的函数:  ·USB_init()--USB端口驱动函数的安装和初始化、硬件配置。   ·USB_open()--打开USB端口。  ·USB_close()--关闭USB端口。  ·USB_read()--对USB端口进行读操作。  ·USB_write()--对USB端口进行写操作。  ·USB_ioctl()--对USB设备进行I/O控制操作。  USB设备驱动函数  1、USB_init()--初始化USB端口  USB_init函数初始化特定USB端口驱动器,进行软硬件配置。  初始化步骤如下:  (1)将USB设备驱动器安装到I/O系统设备表中。  (2)获取USB控制器使用的中断号。  (3)获取各端口所需的系统资源,包括内存、信号量和消息队列。  (4)初始化USB驱动器数据结构与USB端口状态寄存器。  (5)启动USB标准事件处理程序。  (6)启用控制端口0和USB中断最小支持集。  2、USB_open()--打开USB端口  USB_open函数允许应用程序打开一个USB端口,选择DMA数据传输方式。  执行打开调用的典型步骤如下:  (1)如果不是默认的控制端口0,要检查端口状态是否为"CONFIGURED"。  (2)如果不允许多次打开,要确认端口还没有打开。  (3)确认端口对当前选择的接口有效。   (4)选择DMA传输,设置DMA控制器使用该端口的FIFO作为目的地址。  (5)设置端口为打开状态。  3、USB_close()--关闭USB端口  USB_close函数允许USB应用程序关闭一个端口,并关闭DMA通道。  执行关闭调用的典型步骤为:  (1)关闭DMA通道,放弃端口对DMA控制器的使用。  (2)设置端口为关闭状态。  4、USB_read()--对USB端口进行读操作  USB_read函数允许USB应用程序从输出端口或控制端口读取数据。  调用读函数的典型步骤为:  (1)设置端口号、类型和方向。  (2)确认端口处于打开状态。  (3)设置端口信号量,避免多次调用。  (4)调用readDMA()进行DMA写操作。函数内执行步骤为:   (a)启动DMA从端口接收FIFO的读操作,将数据从端口传送到内存。   (b)等待DMA完成中断。(DMA中断向端口消息队列发送一条消息表示数据传输完成。)   (c)重复进行(a)~(c)步骤直至接收到全部数据或USB主机结束传输。如果USB控制器检测到短包中断或零字节包,或者出现等待超时,则停止DMA传送,并转(d)步骤执行。   (d)向USB主机发送一个零字节包,完成控制状态步骤。  (5)释放端口信号量。  (6)返回接收到的字节数或错误信息。   5、USB_write()--对USB端口进行写操作  USB_write函数允许USB应用程序写数据到输入端口或控制端口。  执行写调用的典型步骤为:  (1)确认端口号、类型和方向。   (2)确认端口处于打开状态。  (3)获取端口信号量,避免多次调用。  (4)调用writeDMA()进行DMA写操作。函数内执行步骤为:   (a)DMA将内存数据传送到目标端口的FIFO,并等待DMA完成中断。   (b)若从接收FIFO接收到USB主机的一个零字节包,或者出现等待超时,则退出并返回传输的字节数。   (c)重复执行(a)~(c)步骤直至全部数据传输完毕时,转(d)步骤执行。   (d)强制向USB主机发送最后的零字节包或短包用来结束传输过程。  (5)如果是控制端口,等待来自USB主机的零字节包,完成控制状态步骤。  (6)释放端口信号量。  (7)返回传输的字节数或错误信息。  6、USB_ioctl()--对USB设备进行I/O控制操作  USB_ioctl函数设置端口状态寄存器并执行I/O端口控制功能。  USB应用程序根据控制对象不同分别调用提供应用程序控制USB接口的能力的controlIoctl()和epIoctl()函数。controlIoctl()函数执行USB控制器整体I/O出控制功能。epIoctl()函数执行个别USB端口的I/O控制功能。。  1)controlIoctl()--控制器控制函数  controlIoctl()函数对USB控制器进行控制操作。执行I/O功能之前获取USB控制器信号量,避免多次调用影响正在传输数据的端口。完成I/O操作后释放信号量。   USB控制器应支持的控制功能包括:  ·支持远程唤醒功能。  ·设置USB端口进入/退出挂起状态。  ·复位USB端口。  ·设置USB控制器消息队列等待超时。  ·为DMA选择端口FIFO。  ·允许/禁止可选中断。  ·读取帧时间戳起始位。  ·进行枚举测试。  ·返回接口、备用接口和当前USB端口配置状态。  2)epIoctl()--端口控制函数  epIoctl()函数对端口进行控制操作。执行I/O功能之前获取USB控制器信号量,避免多次调用影响正在传输数据的端口。完成I/O操作后释放信号量。  端口应支持的控制功能包括:  (1)获得USB端口状态。  (2)设置USB端口进入/退出阻塞状态。  (3)设置USB端口消息队列等待超时。USB中断服务程序  USB控制器产生单一中断,多个端口共享。每个端口产生ACK、NACK/ERROR中断。输出端口产生接收零字节包或短包中断。控制端口0接收设置包时产生中断。USB控制器产生USB事件中断,如帧起始(SOF)、挂起、恢复和复位。  USB中断服务程序执行下列步骤:  (1)识别发生了USB中断的类型。   (2)清除中断产生的条件。  (3)读USB状态寄存器,获取当前配置、接口或帧起始时间戳状态信息。  (4)向USB控制器消息队列或回调函数的接收消息队列发送一条消息。  USB标准事件处理程序  USB驱动器初始化后,启动USB标准事件处理程序负责处理枚举过程和异步USB事件。  事件处理程序使用控制端口0,直到完成枚举过程。当USB应用程序处于非活动状态时,除控制端口0以外端口均不可访问。事件处理程序在端口0上执行控制操作,响应USB标准请求,并负责通知USB应用程序枚举完成和接口活动状态,USB事件通过回调接口传递到USB外设应用程序。当对USB端口枚举操作完成,USB应用程序就可打开并使用USB端口。  处理一个USB任务的执行过程为:  (1)读取USB控制器消息队列。  (2)如果接收到设置包,则调用标准请求处理函数。  (3)如果接收到事件,则调用USB事件处理函数。  (4)确定当前状态和有效配置/接口。  (5)更新USB控制器和端口数据结构。  (6)重复(1)~(5)步骤。  USB回调接口程序  回调应用程序接口是向应用程序提供反馈信息的一种接口,包括向应用程序通知USB事件的消息,如复位、配置改变、接口改变、挂起、恢复和帧起始。使用USB的应用程序要以下列方式回应这些消息:  (1)复位关闭端口,等待枚举测试。  (2)配置改变关闭端口,按新配置打开端口。  (3)接口改变关闭端口,从新接口打开端口。   (4)挂起进入低功耗模式。  (5)恢复退出低功耗模式。  (6)帧起始执行应用程序规定的处理。  总结  本文提供了进行USB端口Bulk模式驱动程序设计的过程,实现在USB接口设备与Host主机之间进行高速数据传输,对于嵌入式环境以及windows多线程环境下的USB设备的高速数据传输同样适用。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭