USB



通用串行总线,Universal Serial Bus(USB)是连接外部设备的一个串口总线标准,在计算机上使用广泛,但也可以用在机顶盒和游戏机上,补充标准On-The-Go(OTG)使其能够用于在便携设备之间直接交换数据。
概述
USB 最初是由英特尔与微软公司倡導發起,其最大的特点是支持热插拔(Hot plug)和即插即用(Plug&Play,PnP)。当设备插入时,主机枚举 (enumerate) 此设备并加载所需的驱动程序,因此使用远比 PCI 和 ISA 总线方便。
USB 速度比并行端口(Parallel Port,例如 EPP、LPT)與串行接口(Serial Port,例如 RS-232)等傳統電腦用標準匯流排快上許多。原标准中 USB 1.1 的最大傳輸頻寬為 12Mbps,USB 2.0 的最大傳輸頻寬為 480Mbps。
USB 的设计为非对称式的,它由一个主机(host)控制器和若干通过 hub设备以树形连接的设备组成。一个控制器下最多可以有 5 级 hub,包括 Hub 在内,最多可以连接 127 个设备,而一台计算机可以同时有多个控制器。 和 SPI-SCSI 等标准不同,USB hub 不需要终结器。

USB 可以连接的外设有鼠标、键盘、游戏手柄、游戏杆、扫描仪、数码相机、打印机、硬盘和网络部件。对数码相机这样的多媒体外设 USB 已经是缺省接口;由于大大简化了与计算机的连接,USB 也逐步取代并口成为打印机的主流连接方式。2004 年已经有超过 1 亿台 USB 设备;到 2005 年显示器和高清晰度数字视频外设是仅有的 USB 未能染指的外设类别,因为他们需要更高的传输速率。2007年三星更推出用 USB 連接的显示器,並表示將於 2008年5月 上市。
现标准中将 USB 统一为 USB 2.0, 分为:
- 高速: 传输速率 25Mbps~400Mbps (最大 480Mbps)
- 全速: 传输速率 500Kbps~10Mbps (最大 12Mbps)
- 低速: 传输速率 10Kbps~100Kbps (最大 1.5Mbps)
标准
USB实装论坛 (USB Implementers Forum, USBIF) 负责 USB 标准制订,其成员包括: 苹果电脑、惠普、NEC、Microsoft 和 Intel。
USBIF 于 2001年底公布了 2.0 规范,之前还有 0.9、1.0、和 1.1,他们都是完全向后兼容的。On-The-Go Supplement to the USB 2.0 Specification 的当前版本是 1.0a。
USB 的连接器分为 A、B 两种,分别用于主机和设备;其各自的小型化的连接器是 Mini-A 和 Mini-B,另外还有 Mini-AB(可同時支援 Mini-A 及 Mini-B)的插口。
技术细节
技术指标
目前USB支持3种数据信号速率,USB设备应该在其外壳或者有时是自身上正确标明其使用的速率。USB-IF进行设备认证并为通过兼容测试并支付许可费用的设备提供基本速率(低速和全速)和高速的特殊商标许可。
- 1.5 Mbit/s(183 KByte/s)的低速速率,主要用于人机接口设备(Human Interface Devices,HID)例如键盘、鼠标、游戏杆。
- 12 Mbit/s(1.4 MByte/s)的全速速率, 在USB 2.0之前是曾经是最高速率,后起的更高速率的高速接口应该兼容全速速率。多个全速设备间可以按照先到先得法则划分带宽;使用多个等时设备时会超过带宽上限也并不罕见。所有的USB Hub支持全速速率。
- 480 Mbit/s(57 MByte/s)的高速速率。 并非所有的USB 2.0设备都是高速的。高速设备插入全速hub时应该与全速兼容。而高速hub具有所谓Transaction Translator(事务翻译器)功能,能够隔离全速、低速设备与高速之间数据流,但是不会影响供电和串联深度。
机械和电气标准
标准 USB 接口
触点 | 功能(主机) | 功能 (设备) |
---|---|---|
1 | VBUS (4.75-5.25 V) | VBUS (4.4-5.25 V) |
2 | D- | D- |
3 | D+ | D+ |
4 | 接地 | 接地 |
USB 信号使用分别标记为 D+ 和 D- 的双绞线传输,它们各自使用 半双工的差分信号 并协同工作,以抵消长导线的电磁干扰,
Mini USB接口
触点 | 功能 |
---|---|
1 | VBUS (4.4–5.25 V) |
2 | D− |
3 | D+ |
4 | ID |
5 | 接地 |
mini USB除了第4针外,其他接口功能皆與标准USB相同。第4针成为ID,在mini-A上连接到第5针,在mini-B可以悬空亦可连接到第5针。
编码方式
USB标准采用NRZI方式(翻转不归零制)对数据进行编码。翻转不归零制(non-return to zero,inverted),电平保持时传送逻辑1,电平翻转时传送逻辑0。
软件架构

一个USB主机通过hub链可以连接多个设备。由于理论上一个物理设备可以承担多种功能,例如路由器同时也可以是一个SD卡读卡器,USB的术语中设备(device)指的是功能(functions)。集线器(hub)由于作用特殊,按照正式的观点并不认为是function。 直接连接到主机的hub是根(root)hub。
端点
设备/功能(和集线器)与管道pipe (逻辑通道)联系在一起,管道把主机控制器和被称为端点endpoint的逻辑实体连接起来。 管道和比特流(例如UNIX的pipeline)有着相同的含义,而在USB词汇中术语端点经常和管道混用,甚至在正式文档中。
端点(和各自的管道)在每个方向上按照0-15编号,因此一个设备/功能最多有32个活动管道,16个进,16个出。(出( OUT)指离开控制器,而入(IN)指进入主机控制器。)两个方向的端点0总是留给总线管理,占用了32个端点中的2个。在管道中,数据使用不同长度的包传递,端点可以传递的包长度上限一般是字节,所以USB包经常包含的数据量依次有8、16、32、64、128、256、512或者1024字节。
一个端点只能单向(进/出)传输数据,自然管道也是单向的。每个USB设备至少有两个端点/管道:它们分别是进出方向的,编号为0,用于控制总线上的设备。按照各自的传输类型,管道被分为4类:
- 控制传输(Control)——一般用于短的、简单的对设备的命令和状态反馈,例如用于总线控制的0号管道。
- 同步传输(Isochronous)——按照有保障的速度(可能但不必然是尽快地)传输,可能有数据丢失,例如实时的音频、视频。
- 中断传输(Interrupt)——用于必须保证尽快反应的设备(有限延迟),例如鼠标、键盘。
- 批量传输(Bulk)——使用余下的带宽大量地(但是没有对于延迟、连续性、带宽和速度的保证)传输数据,例如普通的文件传输。
一旦设备(功能)通过总线的hub附加到主机控制器,主机控制器就给它分配一个主机上唯一的7位地址。主机控制器通过投票分配流量,一般是通过轮询模式,因此没有明确向主机控制器请求之前,设备不能传输数据。
为了访问端点,必须获得一个分层的配置。连接到主机的设备有且仅有一个设备描述符(device descriptor),而设备描述符有若干配置描述符(configuration descriptors)。这些配置一般与状态相对应,例如活跃和节能模式。 。每个配置描述符有若干接口描述符(interface setting),用于描述设备的一定方面,所以可以被用于不同的用途:如一个相机可能拥有视频和音频两个接口。接口描述符有一个缺省接口设置(default interface setting)和可能多个替代接口设置(alternate interface settings),它们都拥有如上所述的端点描述符。一个端点能够在多个接口和替代接口设置之间复用。
HCD
包含主机控制器和根HUB的硬件为程序员提供了由硬件实现定义的接口主机控制器设备 (HCD)。而实际上它在计算机是就是端口和内存映射。
1.0和1.1的标准有两个竞争的HCD实现。康柏的 开放主机控制器接口 (OHCI)和Intel的通用主机控制器接口 (UHCI) 。VIA威盛采纳了UHCI;其他主要的芯片组多使用OHCI。它们的主要区别是UHCI更加依赖软件驱动,因此对CPU要求更高,但是自身的硬件会更廉价。它们的并存导致操作系统开发和硬件厂商都必须在两个方案上开发和测试,从而导致费用上升。因此 USB-IF在USB 2.0的设计阶段坚持只能有一个实现规范,这就是扩展主机控制器接口 (EHCI)。因为EHCI只支持全速传输,所以EHCI控制器包括四个虚拟的全速或者慢速控制器。这里同样是 Intel和Via使用虚拟UHCI,其他一般使用OHCI控制器。
某些版本的Windows上,打开设备管理器,如果设备说明中是否有“增强”("Enhanced"),就能够确认它是2.0版的。而在Linux系统中,命令lspci能够列出所有的PCI设备,而USB会分别命名为OHCI、UHCI或者EHCI。
列出为16位地址的为EHCI,32位的为OHCI
命令lsusb能够显示所有USB设备的信息。命令dmesg能够显示OS启动时关于USB设备的信息。
USB 封包格式
USB 的封包格式和早期的互联网封包格式非常相似,要了解USB連接原理就一定要先了解封包格式。
偏移量 | 类型 | 大小 | 值 |
---|---|---|---|
0 | HeaderChksum | 1 | 包头的效验和 by adding the header bytes, excluding the header checksum. |
1 | HeaderSize | 1 | 头的大小, including strings if applicable. |
2 | Signature | 2 | Signature: 0x1234 |
4 | VendorID | 2 | USB提供商的ID |
6 | ProductID | 2 | USB产品ID |
8 | ProductVersion | 1 | 产品版本号 |
9 | FirmwareVersion | 1 | 固件版本号 |
10 | UsbAttributes | 1 | USB attributes: Bit 0: If set to 1, the header includes all three strings: language, manufacture, and product strings; if set
to 0, the header does not include any strings. |
11 | 最大电力 | 1 | 设备需要的最大电力,以2mA(毫安)为单位。 |
12 | Attribute | 1 | Device attributes: Bit 0: If set to 1, the CPU speed runs at 24 MHz; if set to 0, the CPU speed runs at 12 MHz. |
13 | WPageSize | 1 | Maximum I2C write page size |
14 | DataType | 1 | This value defines if the device is application EEPROM or device EEPROM. 0x01: Application EEPROM |
15 | RpageSize | 1 | Maximum I2C read page size. If the value is zero, the whole PayLoadSize is read in one I2C read setup. |
16 | PayLoadSize | 2 | Size of the application, if using EEPROM as an application EEPROM; otherwise the value is 0. |
0xxx | Language string | 4 | Language string in standard USB string format if applicable. |
0xxx | Manufacture string | ... | Manufacture string in standard USB string format if applicable. |
0xxx | Product string | ... | Product string in standard USB string format if applicable. |
0xxx | Application Code | ... | Application code if applicable. |
设备分类
依附在总线上的设备可以是需要特定的驱动程序的完全定制的设备,也可能属于某个设备类别。这些类别定义了某种设备的行为和接口描述符,这样一个驱动程序可能用于所有此种类别的设备。一般操作系统都为支持这些设备类别,为其提供通用驱动程序。
设备分类由USB设计论坛设备工作组决定,并分配ID。
如果一个设备类型属于整个设备,该设备的描述府bDeviceClass的域保存类别ID;如果它这是设备的一个界面,其ID保存在界面描述府的;bInterfaceClass域。他们都占用一个字节,所以最多有253种设备类别。(0x00和0xFF保留)。当bDeviceClass设为0x00,操作系统会检查每个接口的bInterfaceClass以确定其类别。
每种类别可选支持子类别(SubClass)和协议子定义(Protocol subdefinition)。这样可以用于主设备类型的不断修订。
常用设备类别和ID有:
- 0x00
- 保留值
- 0x01
- USB音频设备, 像声卡这样的设备。
- 0x03
- 人机接口设备, 键盘鼠标等
- 0x06
- 静止图像捕捉设备,用在USB上的Picture Transfer Protocol。
- 0x07
- USB打印设备, 打印机。
- 0x08
- USB大容量存储设备, 闪存盘 移动硬盘, MMC卡、SD卡、CF卡读卡器, 数码相机, 数字音频播放器等。 这一类设备显示成一个文件系统。
- 0x09
- USB集线器。
- 0x0A
- USB通信设备 ("CDC"),用于调制解调器(包括软件调制解调器), 网卡 (双绞线), ISDN, 传真。
- 0x0E
- USB视频设备, 类似摄像头,电视卡的动态图像捕捉设备。
- 0xE0
- 无线控制器,如蓝牙。
- 0xFF
- 定制设备。
USB接头
接头是由USB协会所指定,接头的设计一方面为了支持众多USB的基本需求,另一方面也避免以往许多类似串行接头所出现的问题。
- 接头设计的相当耐用。许多以往使用的接头较脆弱,即使受力不大,有时针脚或零件也会折弯甚至断裂。而USB接头的金属导电部份周围有塑料作为保护,而且整个连接部份被金属的保护套围住,因此USB接头不论插拔,都不容易受损。由於金屬保護套和外圍塑料護套的保護,需要較大的力量才能造成USB接头明顯的損壞。
- 不可能把USB接口插错。这是防呆设计,方向相反的插头不可能插到插座里,方向正反很容易感觉出来。
- 接头能相对便宜地大量生产。
- 在USB网络中,接头被强制使用定向拓扑。USB不支持环形网络,因此不兼容的USB设备之间接口也不兼容。不像其他通讯系统(如RJ-45电缆)不能使用转换插头,防止环形USB网络产生。
- 适度的插拔力。USB电缆和小型USB设备能被插口卡住(不需要夹子、螺丝或者其他接口那样的锁扣)。允许通过适当力量插拔,连接器要方便困难环境和残障人士使用。
- 由于接头的构造,在将USB插头插入USB座时,插头外面的金属保护套会先接触到USB座内对应的金属部份,之后插头内部的四个触点才会接触到USB座。金属保护套会连接到系统的地点,提供路径使静电可以放电,避免因静电通过电子零件而造成损坏。
USB电缆最长允许5米,更长的距离需要HUB[1].

電源
USB 接頭提供一組5伏特的電壓,可作為相連接USB設備的電源。實際上,設備接收到的電源可能會低於5V,只略高於4V。USB規範要求在任何情形下,電壓均不能超過5.25V;在最壞情形下(經由USB供電HUB所連接的LOW POWER設備)電壓均不能低於4.375V,一般情形電壓會接近5V。
一個 USB 的根集線器最多只能提供 500 mA 的電流。如此的電流已足以驅動許多電子設備,不過連接在總線供電HUB的所有設備,需要共享 500mA 的電流額度。一個由總線供電的設備可以使用到它所連接埠上允許輸出的所有電源。
總線供電的HUB可以將電源供給連接在 HUB 上的所有設備,不過 USB 的規範只允許總線供電的 HUB 下游串接一層總線供電的設備,因此,總線供電的 HUB 下游不允許再串接另一個由總線供電的 HUB。許多 HUB 有外加電源,因此可以提供電源給下游的設備,不會消耗總線上的電源。若設備需要的電壓超過5V,或是需要電流超過500mA,都需要使用外加電源。
相對於之前其他溝通介面僅能傳遞訊息資料,高電壓USB插槽本身還能提供5V(伏特)的主動電壓,及0.5A(安培)的電流,因此對於一些小型設備而言,可以不必再外接電源供應裝置,就能利用來自USB插槽的電力順利運作。利用這特點,也有廠商開發出適當的排線,將USB拿來當作供電插座般使用,例如作為行動電話的充電器,或是提供小型桌燈的電力需要,反而與原本用來連接電腦用的主要用途無關。
同类标准比较
Storage

USB 使用 USB mass storage device class标准实现Storage设备的连接.它最初被用于传统的磁盘和光盘驱动,但是现在已经扩展到支持大量不同的设备.USB不能用于计算机内部存储设备的基本总线: 像 ATA (IDE), Serial ATA (SATA), 和 SCSI.
然而, USB有一个非常重要的优点,那就是它能够在不关闭计算机的情况下动态的安装和删除USB设备,这使它成为一个有用的外部设备.今天,大量的生产商提供便携式USB移动硬盘或者一个空的,能够兼容内部驱动的盒子.这些内部驱动通常提供一个转换驱动接口,用以转换IDE, ATA, SATA, ATAPI, 或者 SCSI 到USB port。对于用户来讲,就像连接了一个内部的驱动。其他的竞争标准是eSATA 以及 Firewire.
人机接口设备(HID)
USB没有完全取代AT键盘接口和PS/2键盘鼠标接口,但是事实上现在所有主板制造商都提供至少多于一个USB接口。到2004年,大多数新主板都配有多个高速USB 2.0接口,尽管有些是内置在主板上的,需要使用电缆连接到位于主机前面板或者侧面的接口。同样的对游戏操纵杆,手柄,写字板和其他人机接口设备的支持逐渐从原声卡上的“MIDI/游戏”接口和PS/2接口上转移到USB上。现在带着USB转PS/2接口转换插头的USB键盘鼠标相当普遍,他们可以使用任意2种接口之一。
使用专用键盘鼠标的苹果电脑1999年一月也开始使用USB接口。最初的IPOD只有IEEE1394接口,後來在3G的IPOD,蘋果電腦開始支持USB2.0,但是還不能用作充電,現在的IPOD,已經全面兼容USB與IEEE1394,兩者均可充電以及連接計算機。
历史
USB
- USB 1.0 FDR:1995年11月释出,同一年苹果公司发布IEEE 1394标准,就是著名的火线接口。
- USB 1.0:1996年1月释出。
- USB 1.1:1998年9月释出。
- USB 2.0:2000年4月释出。这一标准的主要特性就是高速(理论值480Mbps)。这是当前版本。
- USB 2.0:2002年12月修订。加入三个不同速度标准,允许所有USB2.0兼容所有标准的USB设备包括1.1和1.0。这使得标准能够向后兼容,但是增加了不察看标记来计算设备吞吐量的难度。
USB On-The-Go Supplement
- USB On-The-Go Supplement 1.0:2001年12月发布。
- USB On-The-Go Supplement 1.0a:2003年6月发布,即当前版本。
扩展
PictBridge标准可以使得消费者使用的图形设备彼此互通(例如数码相机直接通过打印机输出)。一般它使用USB做为其底层通信协议。
Microsoft's Xbox game console uses standard USB 1.1 signalling, but features a proprietary connector rather than the standard USB connector. Similarly IBM UltraPort uses standard USB signalling but provides more power to devices, and uses a proprietary connection format.
無線通用序列匯流排
正在开发中的一种无线数据传输标准。[2]设计标准:在3米内达到480Mbp的传输速率,在10米内达到110Mbps的传输速率。
参见
- ACCESS.bus
- 闪存盘
- USB streaming
- U3
- 串口(被USB替代)
外部链接
- USB論壇--USB標準的制定組織,包括 USB 2.0规范
- USB Central for developers of USB devices and hosts
- DOS下使用USB
- Linux USB项目, 包含許多技術資訊和文件
- USB联网介绍
- Linux下USB设备加载.
- USB 2.0 vs 火线 - Mac下外部设备评测
- USB @ NutShell - 开发入门
- 通用主机控制器接口(UHCI)
- 从USB引导Linux
- USB產品認證,與 認證測試實驗室