1 / 46

USB 协议与 U 盘的设计

USB 协议与 U 盘的设计. 内容概述. 一、    USB1.1 协议概述 二、   Bulk-Only 协议及其实现 三、  U 盘的设计过程. 一 、 USB1.1 协议概述. 1.1 起因 Intel 公司开发的通用串行总线架构 (USB) 的目的主要基于以下三方面考虑:

hansel
Download Presentation

USB 协议与 U 盘的设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. USB协议与U盘的设计

  2. 内容概述 一、   USB1.1协议概述 二、   Bulk-Only协议及其实现 三、  U盘的设计过程

  3. 一 、USB1.1协议概述 1.1 起因 Intel公司开发的通用串行总线架构(USB)的目的主要基于以下三方面考虑: (一)易用性:众所周知,PC机的改装是极不灵活的。对用户友好的图形化接口和一些软硬件机制的结合,加上新一代总线结构使得计算机的冲突大量减少,且易于改装。但以终端用户的眼光来看,PC机的输入/输出,如串行/并行端口、键盘、鼠标、操纵杆接口等,均还没有达到即插即用的特性,USB正是在这种情况下问世的。

  4. (二)端口扩充:外围设备的添加总是被相当有限的端口数目限制着。缺少一个双向、价廉、与外设连接的中低速的总线,限制了外围设备(诸如电话/电传/调制解调器的适配器、扫描仪、键盘、PDA)的开发。现有的连接只可对极少设备进行优化,对于PC机的新的功能部件的添加需定义一个新的接口来满足上述需要,USB就应运而生。它是快速、双向、同步、动态连接且价格低廉的串行接口,可以满足PC机发展的现在和未来的需要。

  5. 1.2 USB的设计目标 USB的工业标准是对PC机现有的体系结构的扩充。USB的设计主要遵循以下几个准则: ·易于扩充多个外围设备; ·价格低廉,且支持12M比特率的数据传输; ·对声音音频和压缩视频等实时数据的充分支持; ·协议灵活,综合了同步和异步数据传输; ·兼容了不同设备的技术; ·综合了不同PC机的结构和体系特点; ·提供一个标准接口,广泛接纳各种设备; ·赋予PC机新的功能,使之可以接纳许多新设备。

  6. 性能 应用 特性 低速 ·交互设备 ·10-20kb/s 键盘、鼠标、游戏棒 低价格、热插拔、易用性 中速 ·音频、视频 ·500kb/s-10Mb/s MP3、MP4 低价格、易用性、动态插拔、限定带宽和延迟 高速 ·音频、磁盘 ·25-500Mb/s 音频、磁盘 高带宽、限定延迟、易用性 1.3 使用的分类 按照数据传输率(USB可以达到)进行了分类。可以看到,12M比特率可以包括中速和低速的情况。总的来说,中速的传输是同步的,低速的数据来自交互的设备,USB设计的初衷是针对桌面电脑而不是应用于可移动的环境下的。软件体系通过对各种主机控制器提供支持以保证将来对USB的扩充。

  7. 1.4 USB系统的描述 一个USB系统主要被定义为三个部分: ·USB的互连; ·USB的设备; ·USB的主机。 USB的互连是指USB设备与主机之间进行连接和通信的操作,主要包括以下几方面: ·总线的拓扑结构:USB设备与主机之间的各种连接方式; ·内部层次关系:根据性能叠置,USB的任务被分配到系统的每一个层次; ·数据流模式:描述了数据在系统中通过USB从产生方到使用方的流动方式; ·USB的调度:USB提供了一个共享的连接。对可以使用的连接进行了调度以支持同步数据传输,并且避免的优先级判别的开销。

  8. 图1-1 总线的拓扑结构 1.5 USB的拓扑结构 USB连接了USB设备和USB主机,USB的物理连接是有层次性的星型结构。每个网络集线器是在星型的中心,每条线段是点点连接。从主机到集线器或其功能部件,或从集线器到集线器或其功能部件,从图3-1中可看出USB的拓扑结构。

  9. 1.6 USB的设备 USB的设备如下所示: ·网络集线器,向USB提供了更多的连接点; ·功能器件:为系统提供具体功能,如ISDN的连接,数 字的游戏杆或扬声器。 USB设备提供的USB标准接口的主要依据: ·对USB协议的运用; ·对标准USB操作的反馈,如设置和复位; ·标准性能的描述性信息;

  10. 1-2USB 的电缆 1.7 电气特性 USB传送信号和电源是通过一种四线的电缆,图1-2中 的两根线是用于发送信号。 存在两种数据传输率: ·USB的高速信号的比特率定为12Mbps; ·低速信号传送的模式定为1.5Mbps;

  11. 低速模式需要更少的EMI保护。两种模式可在用同一USB总线传输的情况下自动地动态切换。因为过多的低速模式的使用将降低总线的利用率,所以该模式只支持有限个低带宽的设备(如鼠标)。时钟被调制后与差分数据一同被传送出去,时钟信号被转换成NRZI码,并填充了比特以保证转换的连续性,每一数据包中附有同步信号以使得收方可还原出原时钟信号。低速模式需要更少的EMI保护。两种模式可在用同一USB总线传输的情况下自动地动态切换。因为过多的低速模式的使用将降低总线的利用率,所以该模式只支持有限个低带宽的设备(如鼠标)。时钟被调制后与差分数据一同被传送出去,时钟信号被转换成NRZI码,并填充了比特以保证转换的连续性,每一数据包中附有同步信号以使得收方可还原出原时钟信号。 电缆中包括VBUS、GND二条线,向设备提供电源 。VBUS使用+5V电源。USB对电缆长度的要求很宽,最长可为几米。通过选择合适的导线长度以匹配指定的IR drop和其它一些特性,如设备能源预算和电缆适应度。为了保证足够的输入电压和终端阻抗。重要的终端设备应位于电缆的尾部。在每个端口都可检测终端是否连接或分离,并区分出高速,或低速设备。

  12. 1.8 总线协议 USB通用串行总线(Universal Serial Bus USB),是一种快速、灵活的总线接口。与其它通信接口比较,USB 接口的最大特点是易于使用,作为一种高速总线接口,USB 适用于多种设备,比如数码相机、MP3 播放机、高速数据采集设备等。易于使用还表现在USB 接口支持热插拔,并且所有的配置过程都由系统自动完成,无需用户干预。 每一总线执行动作最多传送三个数据包。按照传输前制定好的原则,在每次传送开始时,主机控制器发送一个描述传输运作的种类、方向,USB设备地址和终端号的USB数据包,这个数据包通常称为标志包(token packet)。USB设备从解码后的数据包的适当位置取出属于自己的数据。数据传输方向不是从主机到设备就是从设备到主机。在传输开始时,由标志包来标志数据的传输方向,然后发送端

  13. 开始发送包含信息的数据包或表明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间的USB数据传输,在主机和设备的端口之间,可视为一个通道。存在两种类型的通道:流和消息。流的数据不像消息的数据,它没有USB所定义的结构,而且通道与数据带宽、传送服务类型,端口特性(如方向和缓冲区大小)有关。多数通道在USB设备设置完成后即存在。USB中有一个特殊的通道——缺省控制通道,它属于消息通道,当设备一启动即存在,从而为设备的设置、查询状况和输入控制信息提供一个入口。开始发送包含信息的数据包或表明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间的USB数据传输,在主机和设备的端口之间,可视为一个通道。存在两种类型的通道:流和消息。流的数据不像消息的数据,它没有USB所定义的结构,而且通道与数据带宽、传送服务类型,端口特性(如方向和缓冲区大小)有关。多数通道在USB设备设置完成后即存在。USB中有一个特殊的通道——缺省控制通道,它属于消息通道,当设备一启动即存在,从而为设备的设置、查询状况和输入控制信息提供一个入口。

  14. 二、   Bulk-Only协议及其实现 2.1 概述 Bulk-Only协议是USB组织针对大容量存储设备制定的一种块存储类协议,目前已经普遍 应用于各种移动存储设备。USB组织定义了大容量存储设备的类规范,这个类规范包括四个独立的子类规范,即: 1. USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport 2. USB Mass Storage Class Bulk-Only Transport 3. USB Mass Storage Class ATA Command Block 4. USB Mass Storage Class UFI Command Specification

  15. 前两个子规范定义了数据/命令/状态在USB上的传输方法。Bulk- Only传输规范仅仅使用Bulk端点传送数据/命令/状态,CBI传输规范则使用Control/Bulk/Interrupt三种类型的端点进行数据 /命令/状态传送。后两个子规范则定义了存储介质的操作命令。UFI命令规范是针对 USB移动存储而制定的,实际上UFI命令格式是基于SFF-8070i和SCSI-2规范,总共定义了19个12字节长度的操作命令。

  16. 2.2标准描述符 设备支持以下的标准USB描述符: • 设备(Device).每个USB设备有一个设备描述符。 • 配置(Configuration).每个USB设备有一个默认的配置描述符,它至少支持一个接口。 • 接口(Interface). 设备支持至少一个接口,在这里知道诸如Bulk-Only 数据接口。有的设备可能支持额外的接口,以此来提供其它的能力。 • 端点(Endpoint). 除了各种USB设备都需要的缺省管道外,设备还支持以下端点: • 批量输入(Bulk-In)端点 • 批量输出(Bulk-Out)端点

  17. 有些设备可能会支持额外的端点,以此来提供其它的能力。主机对选中的接口使用先前提到的Bulk-In和Bulk-Out端点。有些设备可能会支持额外的端点,以此来提供其它的能力。主机对选中的接口使用先前提到的Bulk-In和Bulk-Out端点。 • 字符串(String). 设备支持一个唯一的序列号

  18. 2.2.1 设备描述符(Device Descriptor) 每个USB设备只有一个设备描述符。设备类码和设备子类码是在接口描述符(Interface Descriptor)而不是在设备描述符中给定的。

  19. 2.2.2 配置描述符 配置描述符定义了设备的配置信息

  20. 2.2.3接口描述符 设备最少支持一个接口,例如Bulk-Only数据接口。Bulk-Only数据接口使用了3个端点。

  21. bInterfaceSubClass 处的工业标准命令块代码

  22. 2.2.4 端点描述符(Endpoint Descriptors) 设备支持3个端点:控制、Bulk-In、Bulk-Out. 每一个USB设备都定义了控制端点(Endpoint 0)。这就是缺省端点,它不需要描述符。 • Bulk-In端点(从设备传输数据和状态到主机)

  23. Bulk-Out 端点(传输命令、数据从主机到设备)

  24. 2.3 协议介绍 2.3.1术语定义 Command Block Wrapper(CBW) 一个包含一个命令块和一些附加信息的封包。 Command Status Wrapper(CSW) 一个包含一个命令块状态的封包。 Data-In 代表一个从设备到主机的输入传输。 Data-Out 代表一个从主机到设备的输出传输。 Device Request 主机通过缺省管道对设备的请求。

  25. 2.3.2 传输协议 Bulk-Only传输规范使用控制端点清除Bulk端点的STALL状态和发送此规范定义的两个块存储类请求(Reset 请求和Get Max LUN 请求)。而数据/命令/状态的传输则仅仅使用Bulk端点。

  26. 根据此图我们可以将Bulk 管道上的传输状态定义为:空闲、CBW 处理、Data-Out(从主机向设备传输数据)、 Data-In(从设备向主机传输数据)、CSW处理、管道阻塞等六种状态。 设备在空闲状态下接收到的数据包为CBW包;在Data-Out状态下接收到的数据包为主机期待写入存储设备的数据;在Data-In状态下,主机请求从存储设备读取数据,设备将向主机发送这些数据包;在CSW状态下,设备封装并发送CSW包以向主机返回状态信息。任何Bulk-Only事务均是以主机向设备发送CBW包并试图建立相应的数据传输开始的。设备接收到CBW包,检查并解释它,试图满足主机的要求,并通过CSW 向主机返回状态信息。

  27. 2.3.2.1:命令块包(CBW) CBW(Command Block Wrapper)是主机通过Bulk-Out端点向设备发送的命令块包。它必须起始于包边界,并且必须以31字节的短包传输结束。

  28. dCBWSignature: 该字段是CBW的标志。值固定为43425355h。注意:这个值是按照通常的高位在前、低位在后的二进制数顺序排列的;但是,CBW在USB总线上传输的时候,总是先发送LSB,再发送MSB。该字段占用4字节。 dCBWTag: 该字段是命令块标签(Command Block Tag),由USB主机产生并发送给设备。设备会将此值填入CSW的dCSWTag字段,以此回应主机的命令。该字段占用4字节。 dCBWDataTransferLength: 该字段在命令执行期间,主机希望在批量输出或批量输入端点上传输的数据大小。该字段占用4字节。

  29. bmCBWFlags: 该字段的内容为1字节位图,位D7表示数据的传输方向。当D7=0时,表示主机到设备的数据输出;当D7=1时,表示设备到主机的数据输入。位D6没有用,设置为0。位D5~D0保留为0。 bCBWLUN: 该字段表示接收该命令的设备的逻辑单元号LUN。如果设备只有1个逻辑单元,那么该值设置为0。该字段占用半个字节。 bCBWCBLength: 该字段表示CBWCB的字节数,也就是将要发送的特定子类命令的长度。其合法值为1到16(01h~10h)。 CBWCB:该字段中填入的内容就是特定的各种子类命令。详细的该字段值的结构就可以在个子类的命令协议中有定义。该字段占用16字节。如果相应的子类命令长度小于16,那么该字段中剩余的字节就会被设备忽略

  30. 2.3.2.2:命令状态包(CSW) CSW(Command Status Wrapper)命令状态封包总共用了13个字节。

  31. dCSWSignature: 该字段是CSW的标志,固定为53425355h。注意:这个值是按照通常的高位在前、低位在后的二进制数顺序排列的;但是,CSW在USB总线上传输的时候,总是先发送LSB,再发送MSB。该字段占用4字节。 dCSWTag: 该字段是命令状态标签(Command Status Tag),该值与相应的dCBWTag字段相同。该字段占用4字节。 dCSWDataResidue: 该字段表示dCBWDataTransferLength字段中主机希望的数据长度与实际发送的数据长度之间的差额。该字段占用4字节。

  32. bCSWStatus: 该字段指示了该命令的执行情况。如果命令执行成功,设备将会设置该字节为0。如果命令执行失败,将会由下表所示的非零值来指示:

  33. 命令传输: 主机可以通过Bulk-Out端点向设备发送包含 一 个命令块的命令块封包(CBW)。发送的 CBW有31(1Fh)个字节。 数据传输: 所有的数据传输都应该起始于封包的边界。 主机将会尝试发送或者接收由 dCBWDataTransferLength字段和方向位所指定的精 确个数的字节数据 状态传输: 设备通过Bulk-In端点来发送每一个CSW到主机。CSW 起始于封包的边界,包括13(Dh)个字节的内容。

  34. 2.4:USB的设备请求命令格式 所有的USB设备都是通过“设备的缺省控制通道(Default Control Pipe)”工作在控制传输方式下对主机的请求命令发出响应,请求命令及请求命令的参数通过Setup包发向设备,由主机负责设置Setup包内的每个域的值。

  35. 2.5:USB的标准设备请求命令 不管设备是否被分配了非缺省地址或设备当前是被配置了的,它们都应当对标准请求命令产生响应。

  36. 2.6:USB设备枚举 01.用户插入一设备至USB端口 02.Hub检测到该设备Hub端口的两根信号线(D+和D-) 的每一根都有一个15K的下拉电阻。而一个设备在 D+(全速设备) /D-(低速设备)均有一个1.5K的 上拉电阻。当设备插入到一个端口时,设备的上 拉电阻使信号为高。Hub以此检测到一个设备已经 连接上了。 03.主机知道该设备 Hub使用它的中断流程来报告发生在Hub上的事情 (包括具体端口)。主机知道后,给Hub发出一个 Get_Port_Status请求(该请求为所有Hub理解的 标准Hub类控制请求)来了解更多的信息(告诉主 机该设备是什么时候连接的)。

  37. 04.Hub重新设置该设备 当主机知道有一新设备时,主机控制器给Hub发送 一个Set_Port_Feature请求,让Hub来重新设置端 口。Hub使设备的USB数据线处在重启状态(D+和D- 均为逻辑低 )至少10ms. 05.Hub在设备和总线间建立一个信号通道 主机发送一个Get_Port_Status请求来验证设备是 否激起重工业启状态。返回的数据的一位表示设备 否仍然处在重启状态。当Hub已经释放了重启状态 设备就处在默认状态了(设备的USB Register已 经处在它们的默认状态),设备已准备发通过 Endpoint 0的默认流程来响应控制流程。 06.Hub检测设备速度 Hub通过信号线的电压来检测设备的速度(参考

  38. 02)。并将信息发给主机以响应 Get_Port_Status请求。 07.主机以送一个Get_Descriptor请求来知道默 认流程的最大包的大小主机发送请求给设备 地址0,终端0。 08.主机分配一个地址给设备 主机控制器发送一个Set_Address请求来分 配一个单独的地址给设备。设备读取这个请 求,返回一个确认且保存新的地址。从这个 点起,所有通信皆使用这个新地址。直至设 备断开为止。

  39. 09.主机知道设备的能力 主机给新地址发送一个Get_Descriptor请求 来读取这个设备描述符,这次读取整个部分。 本描述符是一个数据结构包括Endpoint 0 的最大包的大小,设备支持的配置号,以及 该设备的其它信息。主机将这些信息用于往 后的通信中。 10.主机分配并载入设备驱动程序 主机从设备获得能够知道的信息后,开始搜 索与之相匹配的驱动程序。

  40. 2.7 SCSI 指令集: CBW 中的CBWCB 中的内容即为如下格式的命令块描述符(Command Block Descriptor)。SCSI-2 有三种字长的命令,6 位、10 位和12 位,Microsoft Windows 环境支持12 位字长的命令。

  41. Operation Code: 是操作代码,表示特定的命令。高 3 位为Group Code,共有8 种组合,即8 个组, 低5 五位为Command Code,可以有32 种命令。 Logicol unit Number 是为了兼容SCSI-1 而设的, 此处可以不必关心。 Logical block address 为高位在前,低位在后的逻辑 块地址,即扇区地址。第2 位为高位,第3、4、 5 依次为低位。 Transfer length 为需要从逻辑块地址处开始传输的扇区数 (比如在Write 命令中); Parameter list length 为需要传输的数据长度(比如在Mode Sense 命令中); Allocation length 为初始程序为返回数据所分配的最大字 节数,此值可以为零,表示不需要传送数据。

  42. INQUIRY 请求的命令块描述符和其返回内容的数 据格式 命令块描述符:

  43. 返回数据格式:查看数据

  44. 三、U盘的设计过程 具体看程序代码

  45. 谢谢大家~

More Related