Chinaunix首页 | 论坛 | 博客
  • 博客访问: 477291
  • 博文数量: 56
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1957
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-07 23:02
文章分类

全部博文(56)

文章存档

2016年(1)

2014年(7)

2013年(48)

分类: 嵌入式

2013-07-21 15:54:27

6.2 USB驱动程序的软件结构

6.2.1 概述

如图6.9,在计算机系统中,USB设备的连接如图。

图6.9 USB设备在系统中的结构图

这一点和网络接口有些类似。从功能上说,网络接口的主要作用是数据传输,而USB接口的主要作用是数据传输的设备的控制,二者有一定的相似性。

从硬件层面上来说,USB控制设备HC可以看作是一个PCI设备,通过这个PCI设备,计算机系统就可以与外部USB设备进行通信。这与网卡的作用是一样的。图6.10描述了USB驱动和网卡驱动的对比,从结构上看网卡与HC的作用是相同的,都是起到了一个接口转换的作用。

图6.10 USB设备与网络设备的连接结构对比

二者在硬件结构上的相似性也带来了软件结构上的相似性。表6.2列出了网络的结构层次与USB设备驱动的层次的对比:

表格 6.2 USB与网络驱动的对比关系

Internet网络

USB

数据理解与应用

应用层

各种具体的USB设备驱动,如USB键盘、USB鼠标

数据可靠传输

TCP/IP

USBD

数据传输与控制

链路层(网卡驱动)

HCD

物理层

网线

USB总线

主要作用

远距离数据传输

数据传输和控制


二者在软件结构上的相似性也决定了USB驱动软件上也是分层的,即分为设备驱动层、USBD层和HCD层,如图6.11

6.11 USB驱动的软件层次结构

其中上层通过标准的函数接口调用底层函数完成相应的功能,而底层函数在接收到数据时则是通过调用上层注册的回调函数将接收的数据交给上层。具体来说主要表现在以下方面:

l USBD层实现了一个通用接口函数库usbdLib,应用层可以通过函数库usbdLib完成对与USB设备相对应层次的交互;

l HCD层实现了一个通用接口函数库usbHcdLibUSBD层通过通用接口函数库实现对USB设备对应层次的交互;

l USBD层为上层保留的公共回调函数接口为pIrp->userCallback,对于control pipeUSBD层还为上层额外保留了一个回调函数接口pUrb->callback

l HCD层为USBD层保留的回调函数接口为pIrp->usbdCallback

对一个USB设备来说,只能在USB总线上传输数据信号和控制信号,而不能给出中断信号,这是因为USB总线并没有连接到计算机系统的PIC上。但是对于HC来说则有严格意义上的中断信号,其中断信号线则是通过PCI接口接入到了PCI中,HC的中断处理函数是intHandler,它负责向任务intThread发送信号量pHost->intPending,而intThread在收到信号量之后进行具体的中断处理,这样的处理方法使得中断处理程序简单且执行时间快,而消耗资源的部分则交给系统任务来实现,从而大大提高了中断相应速度。

阅读(4939) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~