目录1、USB系统概述1.1USB主机1.2USB设备1.3管道1.4描述符1.5总线枚举2、USB物理特性3、USB数据传输4、USB事务处理4.1USB信息包4.2USB事务处理(Transaction)5、USB传输类型5.1控制传输5.2块传输5.3中断传输5.4同步传输6、USB设备请求7、USB枚举过程8、USB2.0接口芯片CY7C680138.1EZ-USB控制传输8.2Cypress提供的开发库8.3上位机查找USB设备示例典型的USB应用系统组成:一个支持USB的主机,一个或多个带有USB端口的设备以及将设备连接到主机所需要的集线器、连接器和线缆。主机内设置了一个根集线器,提供了主机上的初始附属点。1、USB系统概述主机定时对集线器的状态进行查询。当一个新设备接入集线器时,主机会检测到集线器的状态改变,主机发出一个命令使该端口有效并对其进行设置。位于这个端口上的设备进行响应,主机收到关于设备的信息,主机的操作系统确定对这个设备使用哪种驱动程序,接着设备被分配一个唯一标识的地址,范围从0~127,其中0为所有的设备在没有分配唯一地址时使用的默认地址。主机向它发出内部设置请求,当一个设备从总线上移走时,主机就从其可用资源列表中将这个设备删除。USB3.0主机支持4种速率,2.0主机只支持低速、全速和高速,1.X的主机只支持低速和全速模式(例外情况:On-The-GO(OTG无主机参与情况下外设直接互连通信)设备以及嵌入式系统中完成其他专属目的的主机,这些设备也许支持访问特殊周边设备所需的速率)1.1USB主机USB主机功能需要软件和硬件共同支持,硬件由USB主机控制器和含有一个或多个USB端口的根集线器构成。软件构架可分为:客户软件,USB系统软件,USB总线接口。客户软件负责和USB设备的功能单元进行通信,以实现特定的功能,一般由开发人员自行开发。客户软件不能直接访问USB设备,其与USB设备功能单元的通信必须经过USB系统软件和USB总线接口模块才能实现。客户软件一般包括USB设备驱动程序和界面应用程序。设备驱动程序负责和USB系统软件进行通信。通常,它向USB总线驱动程序发出I/O请求包(IRP)以启动一次USB数据传输,此外,根据传输的方向,它还应提供一个或空或满的数据缓冲区以存储这些数据。界面应用程序负责和USB设备驱动程序进行通讯,以控制USB设备。它是最上层的软件,只能看到向USB设备发送的原始数据和从USB设备接收的最终数据。USB系统软件负责和USB逻辑设备进行配置通信,并管理客户软件启动的数据传输。USB逻辑设备是程序猿与USB设备打交道的部分。USB系统软件分为USB总线驱动程序和USB主控制器驱动程序(操作体统提供)USB总线接口包括主控制器和根集线器两部分。主控制器负责完成主机和USB设备之间数据的实际传输,包括对传输数据进行串行编解码、差错控制等。1.2USB设备USB设备由3个功能模块组成:USB总线接口、USB逻辑设备和功能单元。这里的USB总线接口指的是USB设备中的串行接口引擎(SIE);USB逻辑设备被USB系统软件看做是一个端点的集合;功能单元被客户软件看做是一个接口的集合。SIE、端点和接口都是USB设备的组成单元。为了更好的描述USB设备特征,USB设备是由一些配置、接口、和端点组成,一个USB设备可以含有一个或多个配置,在每个配置中可含有一个或多个接口,在每个接口中可含有若干个端点。其中,配置和接口是对USB设备功能的抽象,实际的数据传输由端点完成。在使用USB设备前,必须指明其采用的配置和接口,这个步骤一般是在设备接入主机时设备进行自举完成的。USB设备使用各种描述符来说明其设备架构,包括设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。他们通常被保存在USB设备的固件程序中。USB设备架构图如下:①设备:设备代表一个USB设备,它由一个或多个配置组成。设备描述符用于说明设备的总体信息,并指明其所含的配置的个数。一个USB设备只能有一个设备描述符。②配置一个USB设备可以包含一个或多个配置,如USB设备的低功耗模式和高功耗模式可分别对应一个配置。在使用USB设备之前,必须为其选择一个合适的适配器。配置描述符用于说明USB设备中各个配置的特性,如配置含有的接口数等。USB设备的每一个配置都必须有一个配置描述符。③接口一个配置可以包含一个或多个接口,如对一个光驱来说,当于用文件传输时使用其大容量存储接口;而当用于播放CD时,使用其音频接口。接口是端点的集合,可以包含一个或多个可替换的设置,用户能够在USB处于配置状态时,改变当前接口所含的个数和特性。接口描述符用于说明USB设备中各个接口的特性,如接口所属的设备类及其子类等。USB设备的每个接口都必须有一个接口描述符。④端点端点是USB设备中实际的物理单元,USB数据传输就是在主机和USB设备各个端点之间进行的。每个端点所支持的数据传输方向一般而言也是确定的(或是IN或是OUT)0端点比较特殊,它有数据输入IN和数据输出OUT两个物理单元,且只能支持控制传输。所有USB设备都必须含有一个0端点,用作缺省控制管道。系统软件及时使用该管道和USB逻辑设备进行配置通信的。利用设备地址、端点号和传输方向就可以指定一个端点,并和它进行通信1.3管道USB系统中的数据传输可以认为是在主机软件(USB系统软件和客户软件)和USB设备的各个端点之间的直接进行的。他们之间的连接称为管道。如下图:根据传输数据不同分为流管道与消息管道,流管道不具有USB定义的格式数据流,可用于块传输、中断传输、同步传输,通常是单向的。消息管道具有USB定义的格式,只能用于控制传输。USB设备0号端点所实现的就是一条消息管道。1.4描述符USB采用USB标准描述符说明一个USB设备。这些描述符包括设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。对于高速设备还包括设备限定描述符和其他速率配置描述符。(1)设备描述符(DeviceDecriptor)用于指出USB设备的总体信息,其内容对该设备中同一传输模式下的所有配置都有效。一个设备只能有一个设备描述符,但是一个设备允许多个配置描述符。(2)配置描述符(ConfigurationDescriPtor)为usB设备的配置指出其配置信息,USB设备的一个配置可以包含一个或者多个接口,且每个接口都可以相互独立工作,所有的USB设备都至少支持一个配置描述符,每个配置都必须有自己的配置描述符。当主机请求配置描述符时,其所有相关的接口描述符和端点描述符都将被返回。(3)接口描述符(hite而ceDescriPtor)用于指定usB设备中各个接口的特性,设备的每个接口都必须有一个描述符。USB设备的接口是一个端点的集合,负责完成设备的特定功能,接口可以包含一个或者多个可替换配置,它们能够在USB设备处于配置状态时,改变当前接口所含端点的个数和特性。USB设备同一配置的各个接口间不能使用相同的端点,但是同一接口的各个可替换配置间可以使用相同的端点。(4)端点描述符(Endpointdescriptor)用于指出usB设备端点的特性,如其所支持的传输类型、传输方向等信息。除端点O外,USB设备的每个端点都必须有一端点描述符。(5)字符串描述符(stringDescriptor)用于保存一些文本信息,它是可选的。在USB设备的其他描述符中,可以含有指向字符串描述符的索引值。(6)设备限定描述符(DevieeQualifierDeseriptor)只适用于高速usB设备,如果高速USB设备既需要高速传输,又需要全速传输,则它必须支持设备限定描述符,以指出另一传输速率下该设备的总体信息。(7)其它速率配置描述符(Other_Speed_Configuration_Descriptor)用于指出高速设备在采用全速传输下的配置信息,其不能用于低冷速USB设备,且主机只有在成功读取USB设备的设备限定描述符后,它才会进一步发出Get_Descriptor(Other_Speed_Configuration_Descriptor)请求。1.5总线枚举当USB设备接上或者从USB设备移开时,主机启动一个被称作总线枚举的进程,来列举并怜理设备状态的改变,当USB设备接上一个加电端口时,系统采取以下操作:(1)USB设备已连接在下行端口上,集线器通过状态交换管道通知主机此事件。此时,USB设备处于加电状态,它所连接的端口是无效的;(2)主机通过询问集线器标记出某个设备已连接上;(3)主机一旦得知新设备已连上后,发送端口使能及复位命令给此端口;(4)集线器将发向端口的复位信号持续10ms,当复位信号撤消后,端口己经有效,这时USB设备处于缺省状态,并且从总线上可以得到100mA的电流,所有设备寄存器状态已经复位,设备可对缺省地址产生响应;(5)主机给设备分配一个唯一的地址,设备进入地址状态;(6)在USB设备接受地址之前,其缺省控制管道在缺省地址处是可寻址的,主机通过读取设备描述符,决定设备缺省管道的实际数据净负荷大小;(7)主机从设备读取配置信息,从0读到n一1(n为配置个数),此操作需花费几毫秒;(8)基于从设备读取的配置信息及设备如何使用的信息,主机给设备一个配置值,此刻,USB设备处于配置状态,并配置有关的端口,按照配置USB设备就可以从VBUS得到所要求的电量。从设备的角度而言,设备己经准备就绪。当USB设备断开时,集线器同样会通知主机,断开一个设备连接会使得设备所连接的端口无效,一收到断开通知,主机就会更新本地拓扑信息。2、USB的物理特性2.1USB接口USB使用一根屏蔽的4线电缆与设备进行互联。数据传输通过一个差分双绞线进行,这两根线分别表为D+与D-,另外两根是Vcc和Ground,其中Vcc向USB设备供电。使用USB电源的设备称为总线供电设备,而使用自己外部电源的设备叫做自供电设备。从一个设备连回主机,称为上行连接;从主机到设备的连接,称为下行连接。为房主回环的情况发生,上行和下行的端口使用不同的连接器,所以USB在电缆和设备的连接中分别采用了两种类型的连接头。如下图:15A型连接头1234B型连接头1243黑Ground4绿Data+(D+)3白Data-(D-)2红Vcc1缆线颜色信号名称引脚编号3、USB数据传输在USB总线上所有与USB设备功能单元的数据传输都是由客户软件启动的,其传输过程必须经过四个软硬件实体:客户软件、USB总线驱动程序、USB主控制器驱动程序和USB主控制器。下图向下的箭头表示了客户软件向USB设备发送数据的情况,其传输步骤如下:(l)客户软件把要传输的数据放入数据缓冲区,并向USB总线驱动程序发出IRP,以请求数据传输;(2)USB总线驱动程序响应客户软件的IRP,并将其中的数据转化为一个具有USB格式的事务处理,然后将其向下传递;(3)USB主控制器驱动程序负责为这些事务处理建立一系列以帧/小帧为单位的事务列表,并保证其不会超过USB的带宽;(4)USB总线控制器负责读取事务列表,并将其中的事务处理以信息包为单位发送到USB总线上;(5)USB设备接收到这些信息包后,sIE自动将其解包并将数据放入指定端点的接收缓冲区内,由芯片固件对其进行处理。客户软件USB总线驱动程序USB主控制器驱动程序事务队列事务处理事务处理USB主控USBIRPs数据USBD接口HCD接口传输事务处理数据包HW/SW接口4、USB事务处理4.1USB信息包在USB协议中,USB的数据传输是由信息包组成,这些信息包组合起来可以构成完整的事务处理。包(packet)是USB系统中信息传送的基本单元,所有数据都是经过打包后在总线上传输的。USB包由五部分组成:同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),格式如下①SYNC字段:由8位组成,作为每个数据封包的前导,用来产生同步作用,是USB设备与总线的包传输率同步,它的数值固