460 likes | 628 Views
USB 协议与 U 盘的设计. 内容概述. 一、 USB1.1 协议概述 二、 Bulk-Only 协议及其实现 三、 U 盘的设计过程. 一 、 USB1.1 协议概述. 1.1 起因 Intel 公司开发的通用串行总线架构 (USB) 的目的主要基于以下三方面考虑:
E N D
内容概述 一、 USB1.1协议概述 二、 Bulk-Only协议及其实现 三、 U盘的设计过程
一 、USB1.1协议概述 1.1 起因 Intel公司开发的通用串行总线架构(USB)的目的主要基于以下三方面考虑: (一)易用性:众所周知,PC机的改装是极不灵活的。对用户友好的图形化接口和一些软硬件机制的结合,加上新一代总线结构使得计算机的冲突大量减少,且易于改装。但以终端用户的眼光来看,PC机的输入/输出,如串行/并行端口、键盘、鼠标、操纵杆接口等,均还没有达到即插即用的特性,USB正是在这种情况下问世的。
(二)端口扩充:外围设备的添加总是被相当有限的端口数目限制着。缺少一个双向、价廉、与外设连接的中低速的总线,限制了外围设备(诸如电话/电传/调制解调器的适配器、扫描仪、键盘、PDA)的开发。现有的连接只可对极少设备进行优化,对于PC机的新的功能部件的添加需定义一个新的接口来满足上述需要,USB就应运而生。它是快速、双向、同步、动态连接且价格低廉的串行接口,可以满足PC机发展的现在和未来的需要。
1.2 USB的设计目标 USB的工业标准是对PC机现有的体系结构的扩充。USB的设计主要遵循以下几个准则: ·易于扩充多个外围设备; ·价格低廉,且支持12M比特率的数据传输; ·对声音音频和压缩视频等实时数据的充分支持; ·协议灵活,综合了同步和异步数据传输; ·兼容了不同设备的技术; ·综合了不同PC机的结构和体系特点; ·提供一个标准接口,广泛接纳各种设备; ·赋予PC机新的功能,使之可以接纳许多新设备。
性能 应用 特性 低速 ·交互设备 ·10-20kb/s 键盘、鼠标、游戏棒 低价格、热插拔、易用性 中速 ·音频、视频 ·500kb/s-10Mb/s MP3、MP4 低价格、易用性、动态插拔、限定带宽和延迟 高速 ·音频、磁盘 ·25-500Mb/s 音频、磁盘 高带宽、限定延迟、易用性 1.3 使用的分类 按照数据传输率(USB可以达到)进行了分类。可以看到,12M比特率可以包括中速和低速的情况。总的来说,中速的传输是同步的,低速的数据来自交互的设备,USB设计的初衷是针对桌面电脑而不是应用于可移动的环境下的。软件体系通过对各种主机控制器提供支持以保证将来对USB的扩充。
1.4 USB系统的描述 一个USB系统主要被定义为三个部分: ·USB的互连; ·USB的设备; ·USB的主机。 USB的互连是指USB设备与主机之间进行连接和通信的操作,主要包括以下几方面: ·总线的拓扑结构:USB设备与主机之间的各种连接方式; ·内部层次关系:根据性能叠置,USB的任务被分配到系统的每一个层次; ·数据流模式:描述了数据在系统中通过USB从产生方到使用方的流动方式; ·USB的调度:USB提供了一个共享的连接。对可以使用的连接进行了调度以支持同步数据传输,并且避免的优先级判别的开销。
图1-1 总线的拓扑结构 1.5 USB的拓扑结构 USB连接了USB设备和USB主机,USB的物理连接是有层次性的星型结构。每个网络集线器是在星型的中心,每条线段是点点连接。从主机到集线器或其功能部件,或从集线器到集线器或其功能部件,从图3-1中可看出USB的拓扑结构。
1.6 USB的设备 USB的设备如下所示: ·网络集线器,向USB提供了更多的连接点; ·功能器件:为系统提供具体功能,如ISDN的连接,数 字的游戏杆或扬声器。 USB设备提供的USB标准接口的主要依据: ·对USB协议的运用; ·对标准USB操作的反馈,如设置和复位; ·标准性能的描述性信息;
1-2USB 的电缆 1.7 电气特性 USB传送信号和电源是通过一种四线的电缆,图1-2中 的两根线是用于发送信号。 存在两种数据传输率: ·USB的高速信号的比特率定为12Mbps; ·低速信号传送的模式定为1.5Mbps;
低速模式需要更少的EMI保护。两种模式可在用同一USB总线传输的情况下自动地动态切换。因为过多的低速模式的使用将降低总线的利用率,所以该模式只支持有限个低带宽的设备(如鼠标)。时钟被调制后与差分数据一同被传送出去,时钟信号被转换成NRZI码,并填充了比特以保证转换的连续性,每一数据包中附有同步信号以使得收方可还原出原时钟信号。低速模式需要更少的EMI保护。两种模式可在用同一USB总线传输的情况下自动地动态切换。因为过多的低速模式的使用将降低总线的利用率,所以该模式只支持有限个低带宽的设备(如鼠标)。时钟被调制后与差分数据一同被传送出去,时钟信号被转换成NRZI码,并填充了比特以保证转换的连续性,每一数据包中附有同步信号以使得收方可还原出原时钟信号。 电缆中包括VBUS、GND二条线,向设备提供电源 。VBUS使用+5V电源。USB对电缆长度的要求很宽,最长可为几米。通过选择合适的导线长度以匹配指定的IR drop和其它一些特性,如设备能源预算和电缆适应度。为了保证足够的输入电压和终端阻抗。重要的终端设备应位于电缆的尾部。在每个端口都可检测终端是否连接或分离,并区分出高速,或低速设备。
1.8 总线协议 USB通用串行总线(Universal Serial Bus USB),是一种快速、灵活的总线接口。与其它通信接口比较,USB 接口的最大特点是易于使用,作为一种高速总线接口,USB 适用于多种设备,比如数码相机、MP3 播放机、高速数据采集设备等。易于使用还表现在USB 接口支持热插拔,并且所有的配置过程都由系统自动完成,无需用户干预。 每一总线执行动作最多传送三个数据包。按照传输前制定好的原则,在每次传送开始时,主机控制器发送一个描述传输运作的种类、方向,USB设备地址和终端号的USB数据包,这个数据包通常称为标志包(token packet)。USB设备从解码后的数据包的适当位置取出属于自己的数据。数据传输方向不是从主机到设备就是从设备到主机。在传输开始时,由标志包来标志数据的传输方向,然后发送端
开始发送包含信息的数据包或表明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间的USB数据传输,在主机和设备的端口之间,可视为一个通道。存在两种类型的通道:流和消息。流的数据不像消息的数据,它没有USB所定义的结构,而且通道与数据带宽、传送服务类型,端口特性(如方向和缓冲区大小)有关。多数通道在USB设备设置完成后即存在。USB中有一个特殊的通道——缺省控制通道,它属于消息通道,当设备一启动即存在,从而为设备的设置、查询状况和输入控制信息提供一个入口。开始发送包含信息的数据包或表明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间的USB数据传输,在主机和设备的端口之间,可视为一个通道。存在两种类型的通道:流和消息。流的数据不像消息的数据,它没有USB所定义的结构,而且通道与数据带宽、传送服务类型,端口特性(如方向和缓冲区大小)有关。多数通道在USB设备设置完成后即存在。USB中有一个特殊的通道——缺省控制通道,它属于消息通道,当设备一启动即存在,从而为设备的设置、查询状况和输入控制信息提供一个入口。
二、 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
前两个子规范定义了数据/命令/状态在USB上的传输方法。Bulk- Only传输规范仅仅使用Bulk端点传送数据/命令/状态,CBI传输规范则使用Control/Bulk/Interrupt三种类型的端点进行数据 /命令/状态传送。后两个子规范则定义了存储介质的操作命令。UFI命令规范是针对 USB移动存储而制定的,实际上UFI命令格式是基于SFF-8070i和SCSI-2规范,总共定义了19个12字节长度的操作命令。
2.2标准描述符 设备支持以下的标准USB描述符: • 设备(Device).每个USB设备有一个设备描述符。 • 配置(Configuration).每个USB设备有一个默认的配置描述符,它至少支持一个接口。 • 接口(Interface). 设备支持至少一个接口,在这里知道诸如Bulk-Only 数据接口。有的设备可能支持额外的接口,以此来提供其它的能力。 • 端点(Endpoint). 除了各种USB设备都需要的缺省管道外,设备还支持以下端点: • 批量输入(Bulk-In)端点 • 批量输出(Bulk-Out)端点
有些设备可能会支持额外的端点,以此来提供其它的能力。主机对选中的接口使用先前提到的Bulk-In和Bulk-Out端点。有些设备可能会支持额外的端点,以此来提供其它的能力。主机对选中的接口使用先前提到的Bulk-In和Bulk-Out端点。 • 字符串(String). 设备支持一个唯一的序列号
2.2.1 设备描述符(Device Descriptor) 每个USB设备只有一个设备描述符。设备类码和设备子类码是在接口描述符(Interface Descriptor)而不是在设备描述符中给定的。
2.2.2 配置描述符 配置描述符定义了设备的配置信息
2.2.3接口描述符 设备最少支持一个接口,例如Bulk-Only数据接口。Bulk-Only数据接口使用了3个端点。
2.2.4 端点描述符(Endpoint Descriptors) 设备支持3个端点:控制、Bulk-In、Bulk-Out. 每一个USB设备都定义了控制端点(Endpoint 0)。这就是缺省端点,它不需要描述符。 • Bulk-In端点(从设备传输数据和状态到主机)
2.3 协议介绍 2.3.1术语定义 Command Block Wrapper(CBW) 一个包含一个命令块和一些附加信息的封包。 Command Status Wrapper(CSW) 一个包含一个命令块状态的封包。 Data-In 代表一个从设备到主机的输入传输。 Data-Out 代表一个从主机到设备的输出传输。 Device Request 主机通过缺省管道对设备的请求。
2.3.2 传输协议 Bulk-Only传输规范使用控制端点清除Bulk端点的STALL状态和发送此规范定义的两个块存储类请求(Reset 请求和Get Max LUN 请求)。而数据/命令/状态的传输则仅仅使用Bulk端点。
根据此图我们可以将Bulk 管道上的传输状态定义为:空闲、CBW 处理、Data-Out(从主机向设备传输数据)、 Data-In(从设备向主机传输数据)、CSW处理、管道阻塞等六种状态。 设备在空闲状态下接收到的数据包为CBW包;在Data-Out状态下接收到的数据包为主机期待写入存储设备的数据;在Data-In状态下,主机请求从存储设备读取数据,设备将向主机发送这些数据包;在CSW状态下,设备封装并发送CSW包以向主机返回状态信息。任何Bulk-Only事务均是以主机向设备发送CBW包并试图建立相应的数据传输开始的。设备接收到CBW包,检查并解释它,试图满足主机的要求,并通过CSW 向主机返回状态信息。
2.3.2.1:命令块包(CBW) CBW(Command Block Wrapper)是主机通过Bulk-Out端点向设备发送的命令块包。它必须起始于包边界,并且必须以31字节的短包传输结束。
dCBWSignature: 该字段是CBW的标志。值固定为43425355h。注意:这个值是按照通常的高位在前、低位在后的二进制数顺序排列的;但是,CBW在USB总线上传输的时候,总是先发送LSB,再发送MSB。该字段占用4字节。 dCBWTag: 该字段是命令块标签(Command Block Tag),由USB主机产生并发送给设备。设备会将此值填入CSW的dCSWTag字段,以此回应主机的命令。该字段占用4字节。 dCBWDataTransferLength: 该字段在命令执行期间,主机希望在批量输出或批量输入端点上传输的数据大小。该字段占用4字节。
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,那么该字段中剩余的字节就会被设备忽略
2.3.2.2:命令状态包(CSW) CSW(Command Status Wrapper)命令状态封包总共用了13个字节。
dCSWSignature: 该字段是CSW的标志,固定为53425355h。注意:这个值是按照通常的高位在前、低位在后的二进制数顺序排列的;但是,CSW在USB总线上传输的时候,总是先发送LSB,再发送MSB。该字段占用4字节。 dCSWTag: 该字段是命令状态标签(Command Status Tag),该值与相应的dCBWTag字段相同。该字段占用4字节。 dCSWDataResidue: 该字段表示dCBWDataTransferLength字段中主机希望的数据长度与实际发送的数据长度之间的差额。该字段占用4字节。
bCSWStatus: 该字段指示了该命令的执行情况。如果命令执行成功,设备将会设置该字节为0。如果命令执行失败,将会由下表所示的非零值来指示:
命令传输: 主机可以通过Bulk-Out端点向设备发送包含 一 个命令块的命令块封包(CBW)。发送的 CBW有31(1Fh)个字节。 数据传输: 所有的数据传输都应该起始于封包的边界。 主机将会尝试发送或者接收由 dCBWDataTransferLength字段和方向位所指定的精 确个数的字节数据 状态传输: 设备通过Bulk-In端点来发送每一个CSW到主机。CSW 起始于封包的边界,包括13(Dh)个字节的内容。
2.4:USB的设备请求命令格式 所有的USB设备都是通过“设备的缺省控制通道(Default Control Pipe)”工作在控制传输方式下对主机的请求命令发出响应,请求命令及请求命令的参数通过Setup包发向设备,由主机负责设置Setup包内的每个域的值。
2.5:USB的标准设备请求命令 不管设备是否被分配了非缺省地址或设备当前是被配置了的,它们都应当对标准请求命令产生响应。
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类控制请求)来了解更多的信息(告诉主 机该设备是什么时候连接的)。
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通过信号线的电压来检测设备的速度(参考
02)。并将信息发给主机以响应 Get_Port_Status请求。 07.主机以送一个Get_Descriptor请求来知道默 认流程的最大包的大小主机发送请求给设备 地址0,终端0。 08.主机分配一个地址给设备 主机控制器发送一个Set_Address请求来分 配一个单独的地址给设备。设备读取这个请 求,返回一个确认且保存新的地址。从这个 点起,所有通信皆使用这个新地址。直至设 备断开为止。
09.主机知道设备的能力 主机给新地址发送一个Get_Descriptor请求 来读取这个设备描述符,这次读取整个部分。 本描述符是一个数据结构包括Endpoint 0 的最大包的大小,设备支持的配置号,以及 该设备的其它信息。主机将这些信息用于往 后的通信中。 10.主机分配并载入设备驱动程序 主机从设备获得能够知道的信息后,开始搜 索与之相匹配的驱动程序。
2.7 SCSI 指令集: CBW 中的CBWCB 中的内容即为如下格式的命令块描述符(Command Block Descriptor)。SCSI-2 有三种字长的命令,6 位、10 位和12 位,Microsoft Windows 环境支持12 位字长的命令。
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 为初始程序为返回数据所分配的最大字 节数,此值可以为零,表示不需要传送数据。
INQUIRY 请求的命令块描述符和其返回内容的数 据格式 命令块描述符:
三、U盘的设计过程 具体看程序代码