USB驱动开发(2) .

时间:2021-01-07 16:12:48
  在上一节中了解了大致模型,现在了解USB的硬件方面的原理。本人从事嵌入式硬件设计和linux驱动开发所以对硬件方面比较关注,软件开发人员可以跳过此节。 USB设备端的连接器是由D+、D-及Vbus,GND和其它数据线构成的简短连续电路,并要求连接器上有电缆屏蔽,以免设备在使用过程中被损坏。有两种工作状态,即低态和高态。在低态时,驱动器的静态输出端的工作电压Vol范围为0~0.3V,接有一个15kΩ的接地负载, 处于差分的高态和低态之间的输出电压变动应尽量保持平衡,以能很好地减小信号的扭曲变形。在任何驱动状态下, USB设备必须能接收如图 1所示的波形。这些波形从一个 输出阻抗为39Ω的电压源直接进入每一个 USB数据口。

USB驱动开发(2) .

 

高速驱动器:高速USB设备连接是通过阻抗为90Ω±15%,最大单路时延为26ns的屏蔽双绞线电缆进行的,其到达的最大速率为12Mb/s,并且每个驱动器的阻抗必须在28Ω~44Ω之间。

 

 低速驱动器:低速USB设备在插口端必须要有一个带有串行A口连接器的可控制电缆,其速率为1.5Mb/s。当电缆与设备相连时,D+/D-线上必须要有一个200450PF的单终端电容器。低速电缆的传播时延必须小于18ns,从而保证信号响应在其上升沿或下降沿的第一个中点处产生(即要考虑信号完整性),图2,3高速和低速设备连接图

 

 USB驱动开发(2) .

                           2

 

USB驱动开发(2) .

 

                           3

 下形端口处的Rpu电阻是与地相连的,其电阻为15KΩ±5%。其用途是USB设备挂载后用于给D+或D-提供低电压以便为下次的设备连接或中断提供依据。

根据如上电气特性在电路设计过程中可分为作为host时

USB驱动开发(2) .

 

此源端D+和D-数据线均连接15K满足电气特性,而串行22ohm电阻是为了满足驱动器的输出阻抗满足信号完整性以防止过冲,振荡响铃等干扰产生。

      集线器和高速的功能设备上形端口必须使用高速驱动器,上形集线器端口既可以高速又可以低速来传送数据,但是在信号发送时总是使用高速和边缘速率。低速数据的传输不改变驱动器的特性,低速设备的上形端口必须使用低速驱动器。

    所有集线器(包括主机的)外部下形端口必须能适用于两种特性的驱动器,也就是说,任何类型的设备都能被插入这些端口中。当收发器工作在高速模式时,它使用高速和边缘速率来进行信号的发送;工作在低速时,它使用低速和边缘速率来发送数据。

   下表为USB各种类型特性表:

 

 USB驱动开发(2) .

 

USB驱动开发(2) .

 

 信号的发送标准如上表中所示。

 

 连结与中断信号的发送:USB设备是一个智能型的设备,当它发现主机或集线器的下形端口上没有设备连接时,存在的Rpu电阻将使D+和D-上的电压低于主机或集线器端口的单终端电压,此时该端口不是由集线器控制的,这将在下形端口产生一个SE0态(仔细查看上表区分和逻辑0的差别,前者是+ -均为低电位)。如果主机或集线器不在控制数据线并且下形端口的SEO态的持续时间超过2.5ns,则此时USB设备将发送中断信号。如果集线器发现其中一根数据线上的电压大于它的临界值的持续时间超过2.5us,则便开始信号的发送。

 

 数据信号的发送:

   通过控制D+D-线从空闲态到相反的逻辑电平(K),就可以实现源端口的包发送(SOP)。同步字中的第一位代表了这种在电平上的转换。

    SE0态通常用来表示包的发送结束(EOP),可以通过同时控制D+D-2位时(two bit time)到达SEO态,然后控制D+D-线1位时后到达J态,就可实现EOP信号的发送,然后D+D-上的输出驱动器均处于高阻抗状态,总线尾端的电阻此时控制总线处于空闲态.如下图所示为其发送过程:

 

 USB驱动开发(2) .

 仔细可得到SOP是+信号下降沿到低电位(K态),而EOP是将+ -同时为地电位持续2个位时后再转换为J态并持续1个位时表示EOP,之后总线进入空闲状态。

     复位信号的发送:复位就是将一个信号从挂起态唤醒。集线器信号通过控制端口上的持久的SE0态来实现对下形端口的复位。复位信号清除后,设备都将处于缺省状态。复位信号可在任一个集线器或主机的控制端口产生,该复位信号的最小持续时间为10ms一个设备如果见其上形端口的SE0态持续时间超过2.5us,则它就把该信号作为复位信号处理。在复位信号发送结束前,它必须已产生作用。

    挂起:所有的设备都必须能支持挂起状态,并可从任一电平状态进入挂起态。当设备发现它们的上形总线上的空闲态持续时间超3.0ms时,它们便进入挂起态。当设备的所有端口上的总线不活动时间超过10ms后,设备必须被真正的挂起,此时它仅从总线上获得挂起电流。当处在挂起状态时,设备必须继续为它的D+(高速)D-(低速)上的Rpu电阻提供电压从而维持一个空闲态,这样上形集线器才能为设备维持正确的连结状态。

  挂起又可分为全局挂起和局部挂起

  全局挂起:当在总线的任何地方没有通信需要时,就要用到全局挂起,此时所有总线都处在挂起状态

   局部挂起:可以通过向集线器端口发送SetPortFeature(PORT-SUSPEND)来使与其相连的总线部分被挂起,此时处于那部分的设备经过上面所说的适当时延后进入挂起状态。

 

 数据的编码与解码

   在包传送时,USB使用一种NRII(None Return Zero Invert,即无回零反向码)编码方案。在该编码方案中,“1”表示电平不变,“0”表示电平改变。图8列出了一个数据流及其它的NRII编码,在该图的第二个波形图中,一开始的高电平表示数据线上的J态,后面就是NRII编码。

 为了确保信号发送的准确性,当在USB上发送一个包时,传送设备就要进行位插入操作。所谓位插入操作是指在数据被编码前,在数据流中每六个连续的‘1’后插入一个‘0’,从而强迫NRII码发生变化

 

 USB驱动开发(2) .

 关于位的插入有一个特例,那就是刚好在EOP前的时间间隔,EOP前的最后一个数据位可能被集线器的转换偏移而拉长,这种情况如图所示

 

 USB驱动开发(2) .

 电压分布

 

 所有USB设备的缺省电压为低电压,当设备要从低电压变化到高电压时,则是由软件来控制的。在允许设备达到高电压之前,软件必须保证有足够的电压可供使用。

 按类别可分为如下几点:

      根端口集线器:它是直接与USB主机控制器相连的,并与其相同的电源来源。从外部获得操作电压(ACDC)的系统,在每个端口至少支持五个单位负载这些端口称为高电压端口。由电池组提供电压的系统可以支持一个或五个单位负载。哪些只能支持一个单位负载的端口称为低电压端口

   从总线获得电压的集线器:它的所有内部功能设备和下形端口都从它的上形端口的Vbus上获得电压。在电压升高时,它可以接一个单位负载,经过初始设置后,它可以接五个单位负载。初始设置电压被分配给了集线器,任一固定功能设备和外部端口。它的外部端口只能接一个单位负载,当集线器处于活动或挂起态时,它必须为这个端口提供电流。

 

 USB驱动开发(2) .

自给电压集线器:如图所示,它的任一内部功能设备和下形端口不再从Vbus上获得电压,但当它的其余部分电压下降时,它的USB接口可接一个单位负载并从Vbus处获得电压,以允许该接口能工作。从外部(从USB)获得操作电压的集线器,可在每个端口接五个单位负载。由电池组提供电压的集线器,每端口可接一个或五个单位负载

 

 

 

USB驱动开发(2) .

从总线获得电压的低电压功能设备:该种设备上的所有电压均来自Vbus,在任一时刻,它们最多只能接一个单位负载。

 

USB驱动开发(2) .

从总线获得电压的高电压设备:如图所示,该种设备上的所需电压均来自Vbus。在电压升高时,它们至多只能接一个单位负载,但当初始设置后,可接五个单位负载。

 

USB驱动开发(2) .

自给电压功能设备,当它的其余设备电压下降时,它可以接一个单位负载,并从Vbus上获取所需电压,以使USB接口处于活动状态。

 

USB驱动开发(2) .

 

在前面,我们已经讲过HUB的挂起与唤醒,下面我们来谈谈在这两种情况下的电压分布情况。

       低电压设备或高电压设备工作低电压下时,它们所允许的挂起电流限制为500uA,如果一个设备被初始设置为高电压并且具有远程唤醒功能,则在挂起期间,它的电流可达到2.5mA.

      当一个集线器处在挂起状态时,它必须仍能为每个端口提供最大电流值。对于具有远程唤功能的设备,当它的电压在升高而系统的其余部分仍处于挂起态时,上面的要求是十分必要的。

      当设备被唤醒时(远程唤醒或由唤醒信号唤醒),它们此时必须能限制Vbus上的流入电压,集线器Vbus所允许的最大电压落差为330mV。设备必须有足够的分流电容器或要有一个可控制的电压打开顺序,以便当设备正在被唤醒的任一时间内,从集线器来的电流不能超过端口的最大电流允许值。