Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1339809
  • 博文数量: 92
  • 博客积分: 10389
  • 博客等级: 上将
  • 技术积分: 1918
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-10 16:13
文章存档

2014年(1)

2012年(15)

2009年(6)

2008年(37)

2007年(72)

2006年(54)

我的朋友

分类: LINUX

2006-09-25 17:04:18

摘要 本文介绍了USB设备Bulk模式驱动程序的设计。该设计使用FIFO消息队列、信号量机制和定时器中断机制,可在不同的操作系统中实现。文中所用到的程序体系结构对于实现不同USB设备进行Bulk模式通讯是通用的。

  关键词 USB;Bulk模式;驱动设计

  引言

  通用串行总线(USB)是一种串行接口,具有自动配置能力和良好的兼容性,从而简化了计算机与外设的连接,被计算机外设硬件制造商广泛采纳。USB总线标准由1.1版升级到2.0版后,传输率由12Mbps增加到了480Mbps,更适宜于高速数据传输。USB设备支持、扫描仪、数码相机等外设时,由于这些外设与主机间传输的数据量大,要求驱动程序采用Bulk模式进行高速数据传输。

  USB设备驱动的整体结构

  USB设备驱动的整体结构包括如下五个主要部分:USB应用程序接口、USB设备驱动函数、USB中断服务程序、USB回调接口程序、USB标准事件处理程序。


图1 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写操作。函数内执?D
阅读(2519) | 评论(0) | 转发(0) |
0

上一篇:lun_logic unit number

下一篇:lib_rootfs

给主人留下些什么吧!~~