全部博文(240)
分类:
2012-08-09 16:01:54
原文地址:USB系统的主从机制 作者:LINUX农场
USB作为一种主从总线,就意味着任何USB事务都是由主机引发。USB主机处于主模式,设备处于从模式。在主机中,USB所需要的唯一的系统资源是 USB系统软件所使用的内存空间、USB主控制器所使用的内存地址空间(I/O地址空间)和中断请求(RIQ)线。每一个设备有一些专有寄存器,也就是端点(EndPoint)。在进行数据交换时,应用程序可以通过设备驱动间接访问它。每一个端点支持几种特殊的传输类型,并且有一个唯一的地址和传输方向。不同的是端点0仅用作控制传输,并且其传输可以是双向的。系统上电后,具有PnP特性的USB主机负责检测设备的连接与拆除、初始化设备的列举过程,并根据设备描述表安装设备驱动后自动重新配置系统,收集每个设备的状态信息。设备描述表标识了设备的属性、特征并描述了设备的通信要求。USB主机根据这些信息配置设备、查找驱动,并且与设备通信。典型的USB数据传输是由设备驱动开始的,当主机需要与设备通信时,设备驱动提供内存缓冲区,用来存放设备收到或者即将发送的数据。USB驱动提供USB设备驱动和USB主控制器之间的接口,并将传输请求转化为USB事务,转化时需要与带宽要求及协议结构保持一致。某些传输是由大块数据构成的,这时需要先将它划分为几个事务再进行传输。每一个传输包含一笔或多笔事务(Transaction),而每一笔事务包含一个,两个或是三个信息包(Packet)。每一个信息包包含一个信息包标识符(PacketIdentifier,PID),CRC校验位,以及额外的信息。每一笔事务包含一个令牌(token)信息包,并且可能包含一个数据或联络(Handshake)信息包。USB的规范将事务定义为“将一个服务传送到一个端点”。这里的服务是指主机传送信息给设备,或是主机的要求与从设备接收信息。
USB的设备、USB的主机和USB的互连三个部分共同组成一个USB通信系统。USB设备提供的USB标准接口必须支持对USB协议的运用和对标准 USB操作的反馈,如设置和复位、标准性能的描述性信息。USB规范中定义了两种设备,高速设备和低速设备。Hub能用电子方式区分这两种设备。发生在总线上的通讯通常都是高速的,Hub一般不向低速设备发送数据。操作系统把任何发往低速设备的消息前加上一个前导包,这将使Hub临时降为低速,并完成低速设备的数据发送;USB的主机:在任何USB系统中,只有一个主机。USB和主机系统的接口称作主机控制器,主机控制器可由硬件、固件和软件综合实现。根集线器是由主机系统整合的,用以提供更多的连接点;USB的互连是指USB设备与主机之间进行连接和通信的操作,主要包括以下几方面:总线的拓扑结构 (USB设备与主机之间的各种连接方式);内部层次关系(根据性能叠置,USB的任务被分配到系统的每一个层次);数据流模式(描述了数据在系统中通过 USB从产生方到使用方的流动方式);USB的调度(USB提供了一个共享的连接,对可以使用的连接进行了调度以支持同步数据传输,并且避免了优先级判别的开销)。
USB设备的配置、接口和端点之间的逻辑关系,从设备看配置,每个usB设备可以有一个或多个配置(Configuration),使用多配置的一个原因是对操作系统的支持,例如,系统BIOS可以使用一个简单的配置,而操作系统的驱动程序则使用另一个更复杂的配置。从配置看接口,设备的每个配置中都含有一个或更多的接口(interafce),接口可以有替换设置(alternate settngi)以适应不同的带宽需求,接口指出软件应该怎样访问硬件。从接口看端点,设备的接口露出一个或多个端点(EndPoint),端点是通信管道(pipe)的一个终点。
USB通信模型,主机分客户软件层,USB系统软件层和USB主机控制器。设备分USB总线接口层,USB设备层和功能层。USB系统软件是指在某一操作系统上支持UsB的软件,它独立于USB设备和客户软件;USB主机控制器是主机方的USB接口。从图中可以看出,USB总线接口提供主机和设备之间的物理连接,从逻辑上看,UsB设备层和USB系统软件层相对应,它们完成USB设备一些基本的、共有的工作;功能层和客户软件层相对应,它们实现单个USB 设备特有的功能。与PCI总线的显著差异是在设备访问时,USB客户软件通过系统软件提供的编程接口操作对应的设备,而不是直接通过操作内存或I/O口来实现。在系统软件层和USB设备层之间有一条缺省管道,对应于主机与设备的端点0通信,用于实现一些USB设备的基本控制功能。在客户软件层和功能层有多组通信管道,他们实现UsB设备的特定通信功能。实际的信号物理流程为(以信号从主机流向
设备为例):客户软件经USB传输给系统软件的数据不具有USB通信格式,系统软件对这些数据分帧,实现带宽分配策略,然后交给UsB主机控制器。主机控制器对数据按USB格式打包,实现传输任务,经串行接口引擎(SEI)后,将数据最终转化成符合USB电气特征的差分码,再从USB电缆发往设备。数据到达设备后是一个逆过程,在设备层中将设备解码,发往不同端点的数据包被分开并正确排列,帧结构被拆除,数据成为非USB格式的,最后数据送往各端点,完成通讯。