最近一段时间忙着毕业课题的设计,其中有一部分设计到USB通信,由于本人初次接触到USB底层硬件设计和软件的编写,同时现在USB通信的应用领域极其广泛,因此将一些关于USB通信的基本知识向大家介绍介绍,希望对大家有一定的帮助!
USB总线协议
USBUniversal Serial Bus总线协议是以Intel为主并有CompaqMicrosoftIBMDECNorthern Telecom以及日本NEC等共七家公司共同制定的串行接口标准1994年11月制定了第一个草案1996年2月公布了USB规范版本1.0USB可把多达127个外设同时联到你的系统上所有的外设通过协议来共享USB的带宽其12Mbps的带宽对于键盘鼠标等低中速外设是完全足够的注在1999年2月发布的USB规范版本2.0草案中已建议将12Mbps的带宽提升到120-240MbpsUSB允许外设在主机和其它外设工作时进行连接配置使用及移除即所谓的即插即用Plug & Play同时USB总线的应用可以清除PC上过多的I/O端口而以一个串行通道取代使PC与外设之间的连接更容易。
一. 总线拓扑结构
USB总线的物理连接是一种分层的菊花链结构集线器(hub)是每个星形结构的中心PC机就是主机和根Hub用户可以将外设或附加的Hub与之相连这些附加的Hub可以连接另外的外设以及下层HubUSB支持最多5个Hub层以及127个外设。
二. USB的物理层
USB的物理接口包括电气特性和机械特性:USB通过一个四线电缆来传输信号与电源。其中D+和D-是一对差模的信号线而VBus和GND则提供了5V的电源,它可以给一些设备(包括Hub)供电。当然要有一定的条件限制。USB提供了两种数据传输率:一种是12Mb的高速(full speed)模式,另一种是1.5Mb的低速模式。这两种模式可以同时存在于一个USB系统中,而引入低速模式主要是为了降低要求不高的设备的成本,比如:鼠标键盘等等。USB信号线在高速模式下必须使用带有屏蔽的双绞线,而且最长不能超过5m。而在低速模式时中可以使用不带屏蔽或不是双绞的线,但最长不能超过3m。这主要是由于信号衰减的限制,为了提供信号电压保证以及与终端负载相匹配,在电缆的每一端都使用了不平衡的终端负载,这种终端负载也保证了能够检测外设与端口的连接或分离并且可以区分高速与低速设备。所有的设备都有上行的接口。上行和下行的接头是不能互换的,这保证了不会有非法的连接出现。插头与插座有两个系列分别为A和B系列。A用于基本固定的外围设备,而系列B用于经常拔插的设备。这两个系列是不能互换的。
三.USB设备
USB设备包括Hub和功能设备,而功能设备又可以细分为定位设备字符设备等等。为了进一步叙述,我们给出端点(endpoint)和管道(pipe)的概念。
端点:每一个USB设备在主机看来就是一个端点的集合。主机只能通过端点与设备进行通讯,以使用设备的功能。每个端点实际上就是一个一定大小的数据缓冲区,这些端点在设备出厂时就已定义好。在USB系统中每一个端点都有唯一的地址,这是由设备地址和端点号给出的。每个端点都有一定的特性,其中包括传输方式,总线访问频率,带宽端点号,数据包的最大容量等等。端点必须在设备配置后才能生效(端点0除外)。
端点0通常为控制端点,用于设备初始化参数等。端点1,2等一般用作数据端点,存放主机与设备间往来的数据。 管道: 一个USB管道是驱动程序的一个数据缓冲区,与一个外设端点的连接。它代表了一种在两者之间移动数据的能力。一旦设备被配置,管道就存在了。管道有两种类型:数据流管道,其中的数据没有USB定义的结构,与消息管道,其中的数据必须有USB定义的结构。管道只是一个逻辑上的概念。所有的设备必须支持端点0以作为设备的控制管道。通过控制管道,可以获取完全描述USB设备的信息。包括设备类型,电源管理配置端点描述,等等。只要设备连接到USB上,并且上电,端点0就可以被访问。与之对应的控制管道就存在了。一个USB设备可以分为三个层。最底层是总线接口,用来发送与接收包。中间层处理总线接口与不同的端点之间的数据流。通一个端点是数据最终的使用者或提供者。它可以看作数据的源或接收端。最上层就是USB设备所提供的功能,比如:鼠标或键盘等。 (To be continued) |