欢迎访问电子工程网!   登录 | 免费注册 ]   

yd2763132的个人空间 http://www.eechina.com/space-uid-36266.html [收藏] [复制] [分享] [RSS]

博客

USB驱动开发(1)

已有 466 次阅读2011-5-13 22:26 |个人分类:linux

usb是嵌入式系统中很重要的数据传输工具,所以linux usb驱动开发显得尤为重要。
usb物理总线拓扑结构如下所示:
usb总线接口包含主机和根集线器,根集线器用于连接子集线器和子设备构成树状拓扑结构,为USB物理设备构成的拓扑结构。
以上只是描述了各USB物理设备的组成结构,那么主机和单个USB设备如何进行数据传输的呢?
USB互联通信模型如下图所示
这里有几个基本概念需要描述:
     端点endpoint 通俗的说端点就是一个逻辑(虚拟)连接点,就是通信的发送或者接收点,你要发送数据,那你只要把数据发送到正确的端点那里就可以了。端点也是有方向的,从usb 主机到设备称为out 端点,从设备到主机称为in 端点,端点有4中数据传输方式:控制,中断,同步,批量。
     管道pipe是主机和设备端点之间的连接。管道可分为流管道和消息管道,前者进行数据传输无USB定义结构它对数据没有特殊的要求;后者中的数据必须有USB定义的消息结构,即请求/数据/状态的形式进行;主机向设备发送一个请求后是数据传输最后针对传送状态进行确认。
     USB协议中规定所有的USB 设备必须具有端点0,它可以作为in 端点,也可以作为out 端点,USB 系统软件利用连接到0端点的管道为默认控制管道来控制设备。
     接口interface:我起初以为此接口就是诸如PC上插入U盘的接口弄的我一头雾水,后来才了解到U盘插口的术语不叫接口而被称为HUB下的设备端口,完全不同的两个概念。其实接口是一个逻辑体,它是对同性质的端点组合的称谓,即一个接口用来实现一种功能。可用下图来说明:
    上图是使用3个管道与主机进行数据传输,3个管道所连接的3个端点构成一个接口,此接口为端点组合,它的存在是为了完成与主机某个软件通信的功能,仔细看左下方怎么是USB逻辑设备呢?USB总线分为3层,分别是接口层,设备层,功能层这3层,此模型即为第2个图所描述。
    主机被USB总线分为4个部分:
    USB物理设备:在电缆端口的硬件(鼠标和键盘)
    客户软件:即针对具体USB设备的,具体的来说就是则指设备相关,也就是对应于特定设备的部分,你的USB 键盘驱动、触摸屏驱动什么的都在这儿。
    USB系统软件:只表示了系统里支持USB协议 的部分,与连接的设备无关,相对于linux 来说,就是usb core,并不包括各种设备驱动。
    USB主机控制器(主机方向的总线接口):下设的根集线器用于连接设备。
    USB 物理设备这边看着也分了三层,其实我们可以把它们看成一样,只是为了对应了主机这边的不同层次。真实的数据流只发生在
Host Controller 和设备的Bus Interface 之间,其它的都是逻辑上的,也就说是虚的包括逻辑设备也是虚的;而USB 逻辑设备就是一群端点(endpoint)的集合,它与主机之间的通信发生在主机上的一个缓冲区和设备上的一个端点之间,通过管道来传输数据。意思就是管道的一端是主机上的一个缓冲区,一端是设备上的端点(见第3个图)。
    可以这么说,USB物理设备的观察者是HOST CONTROLLER,而usb逻辑设备的观测者是客户软件(即USB设备驱动程序就是对端点,接口,配置等等逻辑题进行操作的)。
    下面两个图形形象的描述了物理设备和逻辑设备的差别:
    从主机控制器来看,看见的都是物理设备
 对于系统软件来说,所有的hub 和设备都被看作是一个个的逻辑设备,好像它们本来就直接连接在root hub 上一样。仔细看第2个图客户软件对应的是接口(也称功能),而虚拟设备是在其下方,这是由于有的设备可以有多个接口功能。
 
集线器 图3 –3  典型集线器
 
一种典型的集线器。从用户的观点出发,集线器极大简化了USB的互连复杂性,而且以很低的价格和高易用性提供了设备的健壮性。
 
    集线器串接在集中器上,可让不同性质的设备连接在USB上,连接点称作端口。每个集线器将一个连接点转化成许多的连接点。并且该体系结构支持多个集线器的连接。
    每个集线器的上游端口向主机方向进行连接。每个集线器的下游端口允许连接另外的集线器或功能部件,集线器可检测每个下游端口的设备的安装或拆卸,并可对下游端口的设备分配能源,每个下游端口都具有独立的能力,不论高速或低速设备均可连接。集线器可将低速和高速端口的信号分开。
    一个集线器包括两部分:集线控制器(Controller)和集线放大器(Repeater)。集线放大器是一种在上游端口和下游端口之间的协议控制开关。而且硬件上支持复位、挂起、唤醒的信号。集线控制器提供了接口寄存器用于与主机之间的通信、集线器允许主机对其特定状态和控制命令进行设置,并监视和控制其端口。
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yd4330152763132/archive/2010/07/15/5738320.aspx

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

回顶部