第二章USB协议 全速低速UsB 全速USB 传输器 双纹,屏蔽 传输器 (45Q Outputs)D o=90±15% 最大5米 主机或 RI ±5% Hub port o Hub port ±5% 全速设备 全速低速UsB叶 低速UsB 传输器 RI 非双绞,非屏蔽 传输 45Q Outputs)D. 最大3米 (45Q2 Outputs) 主机或 R,=15kQ士5% R,=1.5KQ±5% 低速设备 Hub port 图2.4USB设备连接示意图 如图所示,主机或Hub的下行端口(图左)的D+与D-都用15K9电阻接地 使得在没有设备插入的时候,D+与D一上的电平始终为低。全速设备的上行端口 的D+通过1.5K9电阻接到3.3V,而低速设备的上行端口的D一通过1.5K9电 阻也接到3.3V,使得在设备插入主机或Hub的时候,D或D-一上会产生一个上升 沿,如图2.5 设备插入 32.5μs 探测到设备插入 全速设备的插入探测 设备插入 12.5μs 探测到设备插入 低速设备的插入探测 图2.5USB设备的插入探测
第二章 USB 协议 10 图 2.4 USB 设备连接示意图 如图所示 主机或 Hub 的下行端口 图左 的 D+与 D 都用 15K 电阻接地 使得在没有设备插入的时候 D+与 D 上的电平始终为低 全速设备的上行端口 的 D+通过 1.5K 电阻接到 3.3V 而低速设备的上行端口的 D 通过 1.5K 电 阻也接到 3.3V 使得在设备插入主机或 Hub 的时候 D+或 D 上会产生一个上升 沿 如图 2.5 图 2.5 USB 设备的插入探测
第二章USB协议 主机或Hb就依靠这个上升沿判断出设备的插入和设备的类型(全速还是低 速),并开始与设备通讯。具体的步骤如下 a)设备插入后自动复位,并将自己的地址设置为0 b)主机向地址为0的设备发送命令,请求设备描述符 c)设备发回设备描述符; d)主机向地址为0的设备发送命令,分配新地址(不为0); e)设备存储新地址; f)主机向新分配地址的设备请求设备描述符 g)设备发回设备描述符 h)主机请求配置和报告描述符 i)设备发回所有描述符 j)总线枚举过程结束,设备开始正常工作 在这个过程中,主机会为设备分配包括地址、数据堆栈等一系列的资源,并 装载相应的驱动程序 同样的,在设备拔出的过程中,PC和Hub也会检测到D+或D一上电平的变 化(由高到低),然后收回为设备分配的资源,并卸载相应的驱动程序。 有了即插即用这一特点,USB设备可以随时插入和拔出,在使用上极其方便 这是USB最吸引普通用户的地方。 224UsB的低功耗 USB设备的供电方式有两种:自供电(Self- powered)和总线供电 (Bus-powered) 所谓自供电就是由设备自己提供电源,设备不需要从VBus上取得电流,这 类设备的功率不受USB协议的限制,设计时只需要将VBus用电容连接到GN就 可以了。 总线供电设备完全从VBus上取得电流,它们的功率受USB协议的限制 般不能超过500mA。总线供电设备有两种工作状态:一是正常工作( Norma1)状 态,一是挂起( Suspend)状态。USB协议规定:如果总线供电设备在3ms内没 有进行总线操作(即总线处于空闲态),设备需要自动进入挂起状态,而挂起的
第二章 USB 协议 11 主机或 Hub 就依靠这个上升沿判断出设备的插入和设备的类型 全速还是低 速 并开始与设备通讯 具体的步骤如下 a) 设备插入后自动复位 并将自己的地址设置为 0 b) 主机向地址为 0 的设备发送命令 请求设备描述符 c) 设备发回设备描述符 d) 主机向地址为 0 的设备发送命令 分配新地址 不为 0 e) 设备存储新地址 f) 主机向新分配地址的设备请求设备描述符 g) 设备发回设备描述符 h) 主机请求配置和报告描述符 i) 设备发回所有描述符 j) 总线枚举过程结束 设备开始正常工作 在这个过程中 主机会为设备分配包括地址 数据堆栈等一系列的资源 并 装载相应的驱动程序 同样的 在设备拔出的过程中 PC 和 Hub 也会检测到 D 或 D 上电平的变 化 由高到低 然后收回为设备分配的资源 并卸载相应的驱动程序 有了即插即用这一特点 USB 设备可以随时插入和拔出 在使用上极其方便 这是 USB 最吸引普通用户的地方 2.2.4 USB 的低功耗 USB 设备的供电方式有两种 自供电 Self-powered 和总线供电 Bus-powered 所谓自供电就是由设备自己提供电源 设备不需要从 VBus 上取得电流 这 类设备的功率不受 USB 协议的限制 设计时只需要将 VBus 用电容连接到 GND 就 可以了 总线供电设备完全从 VBus 上取得电流 它们的功率受 USB 协议的限制 一 般不能超过 500mA 总线供电设备有两种工作状态 一是正常工作 Normal 状 态 一是挂起 Suspend 状态 USB 协议规定 如果总线供电设备在 3ms 内没 有进行总线操作 即总线处于空闲态 设备需要自动进入挂起状态 而挂起的
第二章USB协议 设备从总线上吸收的电流必须小于500μA。而实际上协议规定的500μA包括了 主机端15KΩ的电缆终端匹配电阻(见图2.4)的电流(通常为220μA),所以 对于使用总线电源的设备而言,进入挂起状态通常便意味着设备的总电流功耗不 能超过280μA,这个功耗值是非常低的。 总线供电设备在进入挂起状态以后,可以通过唤醒( Resume)操作恢复到正 常工作状态。唤醒操作既可以由主机发送唤醒或复位信号来触发,也可以由设备 自行通过远程唤醒操作来完成。所谓远程唤醒是指一个被挂起的USB设备发送信 号给处于挂起状态的主机,使得主机醒来,处理设备端的突发事件。 225USB的标准接口和外设 USB协议体系中的外设都是非常标准的,从底层的物理和电气特性,到上层 的软件协议、数据通讯,都有明确的定义。USB将设备和主机都看作不同的对象, 而这些对象又是由不同的模块和子模块组成的。就这样,USB根据设备和主机各 部分的功能和实现的不同,将整个USB系统划分成了很多的层次和模块。 USB首先根据设备功能的不同,将设备划分为不同的子类:例如人机接口设 备(HID)类,包括鼠标、键盘等与人的交互较多的设备;音频设备( Audio)类 包括音箱、话筒等;还有通讯设备( Communication device)类,大容量存储器 ( Mass storage)类,打印机( Printer)类和图象设备( Imaging)类等等。 在不同的子类中,设备使用不同的通讯协议(包括数据包的格式等等),使 用不同的主机端驱动程序。而同一类的设备往往可以共享部分通讯协议和主机端 的驱动程序,它们的对象模型和具体的功能模块是相似的。比如同属于HID类的 鼠标和跟踪球,它们都向PC提供鼠标的移动信息,所以它们都有功能相同的坐 标捕捉模块,采集意义相冋的坐标偏移量(X和Y方向),并以相同格式的数据 包发往PC,而PC在收到它们的数据以后,也可以用同一个驱动程序进行处理并 实现光标的移动。这样就在同一类设备中实现了软件和硬件资源的共享,大大降 低了系统的开销,也减少了开发者的工作量。 同时USB又将单一的USB设备或主机划分为不同的层次和模块,如图2.6。图 中的黑箭头表示实际的数据流,灰箭头表示逻辑上的数据流
第二章 USB 协议 12 设备从总线上吸收的电流必须小于 500 A 而实际上协议规定的 500 A 包括了 主机端 15K 的电缆终端匹配电阻 见图 2.4 的电流 通常为 220 A 所以 对于使用总线电源的设备而言 进入挂起状态通常便意味着设备的总电流功耗不 能超过 280 A 这个功耗值是非常低的 总线供电设备在进入挂起状态以后 可以通过唤醒 Resume 操作恢复到正 常工作状态 唤醒操作既可以由主机发送唤醒或复位信号来触发 也可以由设备 自行通过远程唤醒操作来完成 所谓远程唤醒是指一个被挂起的 USB 设备发送信 号给处于挂起状态的主机 使得主机醒来 处理设备端的突发事件 2.2.5 USB 的标准接口和外设 USB 协议体系中的外设都是非常标准的 从底层的物理和电气特性 到上层 的软件协议 数据通讯 都有明确的定义 USB 将设备和主机都看作不同的对象 而这些对象又是由不同的模块和子模块组成的 就这样 USB 根据设备和主机各 部分的功能和实现的不同 将整个 USB 系统划分成了很多的层次和模块 USB 首先根据设备功能的不同 将设备划分为不同的子类 例如人机接口设 备 HID 类 包括鼠标 键盘等与人的交互较多的设备 音频设备 Audio 类 包括音箱 话筒等 还有通讯设备 Communication Device 类 大容量存储器 Mass Storage 类 打印机 Printer 类和图象设备 Imaging 类等等 在不同的子类中 设备使用不同的通讯协议 包括数据包的格式等等 使 用不同的主机端驱动程序 而同一类的设备往往可以共享部分通讯协议和主机端 的驱动程序 它们的对象模型和具体的功能模块是相似的 比如同属于 HID 类的 鼠标和跟踪球 它们都向 PC 提供鼠标的移动信息 所以它们都有功能相同的坐 标捕捉模块 采集意义相同的坐标偏移量 X 和 Y 方向 并以相同格式的数据 包发往 PC 而 PC 在收到它们的数据以后 也可以用同一个驱动程序进行处理并 实现光标的移动 这样就在同一类设备中实现了软件和硬件资源的共享 大大降 低了系统的开销 也减少了开发者的工作量 同时 USB 又将单一的 USB 设备或主机划分为不同的层次和模块 如图 2.6 图 中的黑箭头表示实际的数据流 灰箭头表示逻辑上的数据流
第二章USB协议 Interconnect Physical Device Client sw Function Function Layer USB System SW USB Logical Devic USB Device USB Host USB Bus USB Bus Controller Actual communications flow Implementation Focus Area 图2.6USB对象模型 设备端虽然分成了总线接口层、设备层和功能层,但在一般的USB设备实现 中,这3层仍然是一个整体,它们之间并没有很明确、很标准的接口定义。 主机端由于使用了大型的操作系统(如 Windows、 Linux等等),又需要同时 处理多个USB设备的接入,所以不论是在定义上,还是在具体的实现上,都分成 了如图所示的主机控制器层、系统软件层、用户软件层。3层之间的接口是非常 标准的,不能由开发者任意更改 这些复杂的层次和模块划分主要有两个好处:一是可以规范设备和主机的行 为,消除不同硬件厂商的区别,减少兼容性的问题;二是可以将USB设备开发的 工作量细化,硬件工程师可以集中精力设计设备的总线接口层,而软件工程师可 以只需要考虑优化用户界面。 Windows98就专为HID设备编写了一个类驱动程序(对应于主机的系统软件 层),用于处理HID设备通用的命令和请求,用户只需要编写一个简单的用户界 面程序,就可以与自己的USB设备进行各种标准的HID数据通讯了。也就是说, 开发一个HID设备,只需要考虑实现USB设备和主机的用户界面,而不需要考虑 主机的底层硬件和驱动程序,这样开发者的工作量就大大减少了
第二章 USB 协议 13 Client SW USB Host Controller USB Logical Device Function Host Physical Device Interconnect USB Bus Interface USB System SW Actual communications flow Logical communications flow Implementation Focus Area Function Layer USB Device Layer USB Bus Interface Layer 图 2.6 USB 对象模型 设备端虽然分成了总线接口层 设备层和功能层 但在一般的 USB 设备实现 中 这 3 层仍然是一个整体 它们之间并没有很明确 很标准的接口定义 主机端由于使用了大型的操作系统 如 Windows Linux 等等 又需要同时 处理多个 USB 设备的接入 所以不论是在定义上 还是在具体的实现上 都分成 了如图所示的主机控制器层 系统软件层 用户软件层 3 层之间的接口是非常 标准的 不能由开发者任意更改 这些复杂的层次和模块划分主要有两个好处 一是可以规范设备和主机的行 为 消除不同硬件厂商的区别 减少兼容性的问题 二是可以将 USB 设备开发的 工作量细化 硬件工程师可以集中精力设计设备的总线接口层 而软件工程师可 以只需要考虑优化用户界面 Windows 98 就专为 HID 设备编写了一个类驱动程序 对应于主机的系统软件 层 用于处理 HID 设备通用的命令和请求 用户只需要编写一个简单的用户界 面程序 就可以与自己的 USB 设备进行各种标准的 HID 数据通讯了 也就是说 开发一个 HID 设备 只需要考虑实现 USB 设备和主机的用户界面 而不需要考虑 主机的底层硬件和驱动程序 这样开发者的工作量就大大减少了
第二章USB协议 但是目前各个类所能获得的支持是不同的,比如HID类设备能在 Windows98 下找到驱动程序,而大容量存储类设备就不能,它只能在 Windows2000下才能 找到驱动程序。也就是说,虽然USB设计的初衷是希望所有的设备在各个层次上 都能得到支持,但目前还没能实现,所以建议开发者在设计自己的方案的时候, 如果可能的话,尽量采用能够获得的支持较多的方案。 相信随着USB的发展,对USB各类设备的支持也将越来越完善,到那时开发 者只需要在把精力集中在设备的与众不同之处,稍做开发,就能使设备在整个系 统中正常工作了。 226结论 USB的技术优势主要就集中在这五个方面。平心而论,虽然USB在具体的实 现中还有很多不足,但它相比以往的RS-232串口而言,的确有了本质的提高。 USB正在不断地占领PC外设的市场,成为了PC外设的主流接口。在自己的产品 中使用USB,己经成为了一种潮流。如果希望产品被市场接受,开发者往往不得 不使用USB将设备与PC连接。这一点才是最致命的,也才是USB受到开发者和 用户普遍关注的根本原因。 2.3UsB软件通讯协议 这里提到的软件通讯协议主要是指设备和主机间的数据流协议以及其他相 关协议。 231UsB数据流 首先需要提一下端点( endpoint)和管道(pipe)的概念。 ◆端点:每一个USB设备在主机看来就是一个端点的集合,主机只能 通过端点与设备进行通讯,以使用设备的功能。每个端点实际上就 是一个一定大小的数据缓冲区,这些端点在设备出厂时就已定义好。 在USB系统中,每一个端点都有唯一的地址,这是由设备地址和端点 号给出的。每个端点都有一定的特性。其中包括:传输方式、总线 访问频率、带宽、端点号、数据包的最大容量等等。端点必须在设 备配置后才能生效(端点0除外)。端点0通常为控制端点,用于设备
第二章 USB 协议 14 但是目前各个类所能获得的支持是不同的 比如 HID 类设备能在 Windows 98 下找到驱动程序 而大容量存储类设备就不能 它只能在 Windows 2000 下才能 找到驱动程序 也就是说 虽然 USB 设计的初衷是希望所有的设备在各个层次上 都能得到支持 但目前还没能实现 所以建议开发者在设计自己的方案的时候 如果可能的话 尽量采用能够获得的支持较多的方案 相信随着 USB 的发展 对 USB 各类设备的支持也将越来越完善 到那时开发 者只需要在把精力集中在设备的与众不同之处 稍做开发 就能使设备在整个系 统中正常工作了 2.2.6 结论 USB 的技术优势主要就集中在这五个方面 平心而论 虽然 USB 在具体的实 现中还有很多不足 但它相比以往的 RS-232 串口而言 的确有了本质的提高 USB 正在不断地占领 PC 外设的市场 成为了 PC 外设的主流接口 在自己的产品 中使用 USB 已经成为了一种潮流 如果希望产品被市场接受 开发者往往不得 不使用 USB 将设备与 PC 连接 这一点才是最致命的 也才是 USB 受到开发者和 用户普遍关注的根本原因 2.3 USB 软件通讯协议 这里提到的软件通讯协议主要是指设备和主机间的数据流协议以及其他相 关协议 2.3.1 USB 数据流 首先需要提一下端点 endpoint 和管道 pipe 的概念 端点 每一个USB设备在主机看来就是一个端点的集合 主机只能 通过端点与设备进行通讯 以使用设备的功能 每个端点实际上就 是一个一定大小的数据缓冲区 这些端点在设备出厂时就已定义好 在USB系统中 每一个端点都有唯一的地址 这是由设备地址和端点 号给出的 每个端点都有一定的特性 其中包括 传输方式 总线 访问频率 带宽 端点号 数据包的最大容量等等 端点必须在设 备配置后才能生效 端点0除外 端点0通常为控制端点 用于设备