当我们把USB1.0的鼠标、键盘插入USB 2.0的端口时,系统宽容地接纳了它们。那么,USB控制电路是通过什么样的措施来实现两种不同版本相互兼容的呢?
USB从1994年开始提出以来,到目前为止共有三个版本:USB 1.0、USB 1.1和USB 2.0。USB 1.0只有低速(low speed,1.5Mbps)一种传输模式,USB 1.1增加了全速(full speed,12Mbps)模式,USB 2.0又增加了高速(high speed,480Mbps)模式。
图1 USB端口与高速USB端口的标志
为了使USB1.0的设备(鼠标和键盘)在USB 2.0下面仍可以工作,首先要做的工作,就是让2.0端口的物理形状与1.0保持完全一致(图2)。所以,仅从外观上来看,我们是分别不出USB端口的版本。当我们把U盘或移动硬盘插入到主机的USB接口时,往往并不知道移动设备的工作模式,也不知道数据传输率是究竟1.5Mbps、12Mbps,还是480Mbps。
图2 两种USB版本具有相同的连接器
(还有一种mini-B型,比B型的尺寸更小一些)
那么,USB 2.0端口怎样保持与USB 1.0、USB 1.1设备之间相互兼容呢?2.0控制器又是怎样判断出设备是1.0还是2.0的呢?这就是本文将要解决的问题。
一、主机如何识别USB设备类型?
当USB设备插上主机时,主机就通过一系列的动作来对设备进行枚举配置,其中包括如下一些状态:
(1)接入态(Attached):设备接入主机后,主机通过检测信号线上的电平变化来发现设备的接入;
(2)供电态(Powered):就是给设备供电,分为设备接入时的默认供电值,配置阶段后的供电值(按数据中要求的最大值,可通过编程设置);
(3)缺省态(Default):USB在被配置之前,通过缺省地址0与主机进行通信;
(4)地址态(Address):经过了配置,USB设备被复位后,就可以按主机分配给它的唯一地址来与主机通信,这种状态就是地址态;
(5)配置态(Configured):主机发出标准的USB请求命令来获取设备的各种信息,并根据这些信息对控制器进行设置。
(6)挂起态(Suspended):总线供电设备在3ms内没有总线操作,即USB总线处于空闲状态的话,该设备就要自动进入挂起状态,在进入挂起状态后,总的电流功耗不超过280UA。
USB设备的EEPROM芯片中存储有设备描述符、配置描述符、字符描述符、接口描述符和端点描述符,其中的接口描述符会告诉主机该接口的类型。在配置态,主机获取USB设备信息,Windows的设备管理器将描述符内的信息与PC内部INF文档进行比较,从中找出最佳匹配,然后指定一个设备驱动程序,这样应用程序就能够访问该设备了(图3)。
图3 Windows的“设备管理器”中可以看到枚举成功的设备
二、保持兼容性的措施
为了保持向下兼容,需从软硬件两个方面去考虑。软件方面的问题这里不准备讨论,我关心的只是硬件方面。
(1)带宽分配与速率转换
虽然USB 2.0定义了1.5Mbps、12Mbps和480Mbps三种传输速率,但任何一个设备的实际传输速率只能达到设备自身所允许的最高值。对于连接到2.0端口的低速设备,主控端需要降低速率,以保证通信的成功。USB2.0控制器中有一个称为“Transaction Translator”的电路,就是负责进行传输速率转换的。
(2)电平设置与电流分配
我们知道,USB连接线中有四条导线,其中的两条用于传送数据,另外两条则分别用来传送电力与接地。这些拥有专门用途的导线都有特别的名称:VBUS(电源)、Ground(接地)、D+与D-(信号线)。其中D+与D-是传送USB数据的差分信号线。
图4 由一对双绞线组成差模信号传输线路
在全速与低速传输时,这对信号线的差分电压为+/-3V。 而在高速传输时,这对信号线的差分电压为+/-400mV。高速传输模式采用较低的电位有助于减少信号传送的耗电量以及降低电磁干扰(EMI)。
当设备刚插入时,仅允许它吸入100mA的电流,只有当确定设备为USB 2.0时,才允许它吸入最高500mA的电流。
三、 如何确认USB设备工作在1.0,1.1,还是2.0模式?
虽然今天的电脑提供两个以上的USB端口,但有些只能用于USB1.0和USB 1.1的数据传输,并不能支持USB 2.0的数据传输。另外,从设备管理器中我们还可以看到,USB控制器保留了10%的带宽,所以USB的带宽只能达到理论带宽的90%。当我们把一个移动硬盘插入电脑时,系统并没有告诉我们它的实际速率,Windows的设备管理器中也没有显示它的工作模式。这就是说,即便插入的设备可以工作,但是它是否达到了我们所期望数据传输速度,尚无法确认。从这个意义上讲,弄清楚它的工作模式是有实际意义的。
如何得知设备的实际工作模式呢?看来只有借助于第三方测试软件了。下面以Travel star 40GB移动硬盘为例,使用两款软件测试其数据传输率。
HD Tach是一款专用的硬盘速度测试软件,测出的数据为:最大值23.8MB/s,最小值:13.8MB/s;平均值:20.0MB/s(图5)。
图5 HD Tach 2.70的测量结果
SiSoft Sandra Pro 2005 是一款系统信息测试软件,该软件的“文件系统测试”项可以测试硬盘(包括移动硬盘)的传输速率,测出的数据传输率为24MB/s(图6)。
图6 SiSoft Sandra Pro 2005 的测量结果
虽然两款软件测试结果不尽相同,却说明了同一个事实:移动硬盘确实工作在USB 2.0模式下,因为这些数据都超过了USB 1.1规范的最大理论值12MB/s。
四、USB 2.0 为何≠ 480Mbps
由上面这些测试数据,我们已经看到,USB2.0的设备,也未必就意味着它们就是以480Mbps的数据传输率进行数据交换。这是因为:
(1)传输线路的影响
由于USB 2.0 High-speed接口的传输速率是USB 1.1的40倍,二者的数据延长线有明显不同。仔细观察USB 2.0 High-speed延长线缆,通常可看到“USB Revision 2.0”或“High-speed USB”的标注。如果使用不符合标准的或者劣质的延长线,可能会导致传输率下降或读写错误。
(2)设备性能的限制
就目前来说,突发传输率能够达到480Mbps的设备还不多见。硬盘的数据传输率最高,也没有达到这个数值。与硬盘相比,闪存的读写速度更慢一些,至少目前还达不到480Mps这么高的速度。