a&s专业的自动化&安全生态服务平台
公众号
安全自动化

安全自动化

安防知识网

安防知识网

手机站
手机站

手机站

大安防供需平台
大安防供需平台

大安防供需平台

资讯频道横幅A1
首页 > 资讯 > 正文

USB通信技术研究

USB设备已成为当前移动设备数据传输的主要传输接口,即便在安防,移动存储或扩展存储时,也时常需要到,但USB技术如何?可怎样设计和利用?请看本文就USB的体系结构、USB通信技术基础、USB固
资讯频道文章B

  文/张凡忠 公安部第一研究所 

  摘要:USB设备已成为当前移动设备数据传输的主要传输接口,即便在安防,移动存储或扩展存储时,也时常需要到,但USB技术如何?可怎样设计和利用?请看本文就USB的体系结构、USB通信技术基础、USB固件程序的开发方法等是如何论述的。

  前言

  不管是计算机还是连接的外围设备,在新品开发时保持兼容性是必须考虑的。即使是革命性的新外围设备,也必须使用到连接计算机的接口。当设计一个外围设备的接口时,下列是该外围设备应该具备的特性:

  稳定性:具备自动差错与除错的功能,使错误的发生率几乎为零;

  便宜:让大部分的用户都有能力购买;

  省电:在便携式计算机上节省电池的消耗;

  有弹性:让许多不同种类的外围设备,都可以使用这个接口;

  快速:此接口不可以成为传输的瓶颈;

  容易使用:用户容易安装、设置与使用;

  操作系统的支持:如果操作系统支持此接口,开发者就不必要自行开发底层的驱动程序来使用此接口。

  USB就是一个为符合上述所有条件而开发的最新外围设备接口。USB是一种通用串行总线。它是由COMPAQ、INTEL、MICROSOFT和NEC等公司共同开发的一种新型、快速、双向、同步传输的并可以热插拔的数据传输总线接口。

  规范的版本

  USB规范的版本变动,如表1所示。

  经过多次版本的更新后,USB1.0发表于1996年1月。USB1.1则修订了1.0版本的问题,并且新增一个新的传输类型(中断传输)。USB2.0在2000年4月发表,新增了高速模式。对于支持USB1.1规范的设备最高传输率可达12Mb/s,而支持USB2.0规范的设备最高速率可达48012Mb/s。

  USB系统结构

  一个USB系统主要被定义为三个部分:

  USB互连;

  USB设备;

  USB主机。

  USB互连是指USB设备与主机之间进行连接和通信的操作,支持数据在USB主机与USB设备之间的流动。在任何USB系统中,只有一个主机。USB和主机系统的接口称作主机控制器,主机控制器可由硬件、固件和软件综合实现。USB的主机通过主机控制器与USB设备进行交互。主机功能如下:

  检测USB设备的安装和拆卸;

  管理主机和USB设备之间的控制流;

  收集状态和动作信息;

  提供能量给连接的USB设备。

  USB设备包含一些设备描述符,它们指出了一个给定设备的属性和特征。当设备被连接、编号后,该设备就拥有一个唯一的USB地址。设备就是通过该USB地址被操作的,每一个USB设备通过一个或多个通道与主机通讯。所有USB设备必须在零号端口上有一指定的通道,每个USB设备的USB控制通道将与之相连。通过此控制通道,所有的USB设备都列入一个共同的准入机制,以获得控制操作的信息。

  图2展示了USB通信模型之间基本的信息流与互连关系。

  USB通信基础

  传输基础

  USB通信可以分为两类:配置通信、应用通信。在配置通信中,主机通知设备,然后使它准备好交换数据。大部分这类通信发生在上电或连接时主机检测到外设的时候。应用通信出现在主机的应用程序与一个检测到的外设交换数据的时候。这些是实现设备目的的通信。例如:对键盘来说,应用通信是发送按键数据给主机,告诉一个应用程序显示一个特性或执行其他动作。

  配置通信

  在检测过程中,设备的固件对主机的一系列标准请求做出响应。设备必须识别出每一个请求,返回被请求的信息,并且采取其他一些请求指定的动作。在PC上,Windows执行检测工作,所以不涉及用户编程的问题。然而,为了完成检测工作,Windows必须有两个可用的文件:一个识别这个设备的驱动程序的文件名和位置的INF文件和设备驱动程序本身。

  应用通信

  在主机已经与设备交换了检测信息并且设备驱动已经被分配并载入后,应用程序段可以非常顺利地进行。在主机上,应用程序可以使用标准Windows API功能来读取和写设备。在外设上,传输数据通常需要把要发送的数据放在USB控制器的传输缓存器中,当一个硬件中断发出数据已经到达的信号时从接收器中读取接收到的数据,并且在完成传输时确保外设准备好下一次传输。总线上的每一次数据传输使用下列四种类型之一:控制、中断、批量或同步。

  传输类型

  USB共有四种类型传输方式:分别为控制传输,中断传输,批量传输和同步传输。

  控制传输:用于主机对USB外设的配置,对USB设备的状态查询和控制命令的发送,也可用于用户自定义的命令的发送。

  中断传输:用于小批量的、点式的、非连续性的数据传输的场合,它是低速设备可以传输数据的唯一方法。

  批量传输:用于批量的,非实时的数据传输,即那些需要一次传输较多的数据,但传输过程对时间要求不严格的传输类型。

  同步传输:适用于那些要求数据连续的、实时的,以固定的数据率产生、传送的场合。

  传输(transfers)和事务(transactions)是经常提到的两个概念,分清这两个概念是设计USB外设的关键。传输是指一次完整的发出请求到该请求被完整的处理结束的整个过程。事务是传输中的一个基本元素,或者叫一个传输的内建模块。每一次传输由一个或多个事务组成。事务又由包组成,而包还包含一个包识别器(PID),一个错误校验位以及有时还有其他信息。参见图3。

  事务按照它们的目的和数据流方向可以分为三种类型:SETUP事务、IN事务、OUT事务。它们都是由一个令牌阶段,一个数据阶段和一个握手阶段组成。对于SETUP事务来说,在令牌阶段有主机发出SETUP令牌,然后主机又发出数据包,由该数据包指出本次请求的具体的内容。在握手阶段指出本次事务是否成功。各种事务的组成如图4。

  IN事务是从一个设备接收数据,OUT事务是发送数据给其他一个设备。(IN和OUT事务的命名是从主机的角度出发的,在一个IN事务中,数据是从外设传输给主机的;在一个OUT事务中,数据是从主机传输到外设的。)在一个Setup事务中,数据也是从主机传输到外设的,但一个Setup事务是一个特殊情况,因为它启动一个控制传输。任何事务都可以用IN或OUT事务,但只有控制传输可以使用Setup事务。

  在应用程序可与一个设备通信之前,主机需知道设备支持哪些传输类型和终端。主机也须分配一个地址给设备,主机通过一个被称为枚举的信息交换来完成这些工作。

  USB设备的枚举过程

  枚举是使得主机的设备驱动程序能与这个设备通信的最基本的信息交换。该过程可以由以下动作来完成:

  1、一个设备连到一个USB端口

  或者系统上电时有一个设备已经插入到一个端口中了。这个端口可以在主机的根基线器上或者在连接主机下游的基线器上。集线器正常给这个端口供电,这个设备正处于上电状态。

  2、集线器检测到这个设备

  集线器监视着它的每一个端口的信号线的电压。集线器端口的两根信号线(D+和D-)的每一根都有一个15k 的下拉电阻,而一个设备在D+(为全速设备)和D-(为低速设备)都有一个1.5 k 的上拉电阻。当一个设备插入到一个端口中时,设备的上拉电阻使信号线为高,使得集线器可以检测到一个设备连接上了。

  3、主机知道了这个新设备

  每个集线器使用它的中断流程来报告发生在集线器上的事件。当主机知道了这个事件,它给集线器发送一个Get_Port_Status请求来了解更多的知识。返回的信息告诉主机该设备是什么时候连接的。

  4、集线器重新设置这个设备

  当主机知道有一个新设备时,主机控制器给集线器发送一个Set_Port_Feature请求,请求集线器来重新设置端口。集线器使得设备的USB数据线处于重启状态至少10ms。

  5、集线器在设备和总线之间建立一个信号通路

  主机通过发送一个Get_Port_Status请求来验证设备是否激起重启状态。返回的数据的一位表示设备是否仍然处于重启状态。当集线器已经释放了重启状态,设备就处于默认状态了。设备的USB寄存器已经处于它们的默认状态,设备已经准备好通过终端0的默认流程来响应控制传输。设备现在可以能与主机通信,使用默认地址0h。在这一点上,设备可以从总线上抽取不超过100毫安的电流。

  6、集线器检测设备速度

  或在重启之前或在重启之后,集线器通过检查两个信号线的电压来检测设备的速度。集线器通过测试那根信号线在空闲时有更高的电压来检测一个设备的速度。集线器发送信息给主机,以响应下一个Get_Port_Status请求。

  7、主机发送一个Get_Descriptor请求来获取默认流程的最大包的大小

  主机发送请求给设备地址0、终端0。因为主机一次只列举一个设备,只有一个设备将响应寻址设备地址0的通信。最大包的大小是这个描述符的第8位,因此主机只需要读取头8B。一个Windows主机请求64B,但在仅接收一个包后,它就开始了状态阶段。在完成状态阶段时,主机请求集线器来重启这个设备。这里不需要重启,因为设备应该可以用响应下一个设置阶段的动作来处理任何时候的主机放弃一个控制传输情况。

  8、主机分配一个地址

  主机控制器通过发送一个Set_Address请求来分配一个单独的地址给设备。设备读取这个请求,返回一个确认,并且保存新的地址。这个设备现在处于一个地址状态。从这现在开始的所有通信使用这个新地址。

  9、主机知道了设备的能力

  主机给新地址发送一个Get_Descriptor请求来读取这个设备描述符,这次读取整个部分。这个描述符是一个数据结构包括终端0的最大包的大小,设备支持的配置号,及关于这个设备的其他信息。主机把这些信息应用在其后的通信中。然后主机通过请求在设备描述符规定的一个或多个配置描述符来了解这个设备。一个Windows主机开始申请配置描述符的9B。含在这些B中的是这个配置描述符和它所有的从属描述符的总长度。Windows然后再次请求配置描述符,这次使用得到的总长度,最多可达到FFhB。这导致设备发送跟随在每个配置额的接口描述符后的配置描述符,在它后面是每个接口的终端描述符。若这些描述符总共超过了FFhB,则Windows在第三次请求时得到整套描述符。每个描述符以它的长度和类型开始,使主机能分解其后的数据。

  10、主机分配和载入一个设备驱动

  在主机已经从它的描述符中知道了能够知道的所有信息后,它开始在一个设备启动中查找最合适的匹配来管理与设备间的通信。在选择一个驱动时,Windows尽量去与从设备得到的、保存在系统INF文件中的信息中的销售商和产品ID、发布号和类信息相匹配。在驱动程序被载入以后,它经常请求设备来重新发送描述符或者发送应用于这个设备的类描述符。

  11、主机的设备驱动选择一个配置

  在从描述符了解了设备后,设备驱动程序发送一个Set_Configuration命令来请求希望的配置号。设备读取这个请求并且设置它的配置来匹配它。设备现在处于配置状态,并且设备的接口已经被使能。

  主机枚举是通过给端点0发送包含标准USB请求的控制传输。所有的USB设备必须支持控制传输,标准USB请求和端点0。对一个成功的枚举来说,设备必须对每一个请求响应,返回请求的信息以及采取其他请求的动作。USB设备的枚举过程是在缺省的控制管道进行的,每一步都是在控制传输的SETUP阶段提出请求的。而具体的请求在SETUP事务的数据阶段中,用户可读取并根据USB协议来分析该请求,然后根据分析的结果进入该控制传输的数据阶段。在USB设备的枚举过程中,主机要读取USB设备的设备描述符、配置描述符、接口描述符和端点描述符。

  固件设计

  为了实现上述的枚举过程在设备端需要固件程序的支持。下面以PDIUSBD12为例讲述一下固件的设计方法。PDIUSBD12的固件设计成完全的中断驱动,当PDIUSBD12检测到有相应的事务发生时,就中断CPU处理器调用中断服务程序。

  D12的固件程序可采用如图5的积木式结构。

  硬件抽象层:这是固件中的最低层代码,它执行对PDIUSBD12和硬件与I/O 相关的访问。当与其它CPU 平台接口时这部分代码需要修改或增加。

  PDIUSBD12命令接口:利用这些命令实现对D12的控制。

  中断服务程序:处理USB的各种事务。

  标准请求:USB设备必须对这11种标准请求做出响应,这11种标准代码可以查询设备的能力和状态以及选择配置。当收到请求时,程序通过解析接收到的请求把要发送的数据存放到发送缓冲器中。设备不必执行每一个请求;它只需要以一种可以理解的方式对请求做出响应。

  厂商请求:一个供应商也可以与特定设备进行的传输控制而定义请求。

  主程序:完成D12的初始化。

  在USB通信过程中需要处理多种事务,有些事务的处理需要特别注意,设计者往往忽视,下面分别介绍。

  D12初始化过程

  D12的中断寄存器清零

  Set Address Enable

  Set Endpoint Enable

  Disconnect

  延时1~2秒钟

  Connect

  Setup Transaction处理流程

  如图6所示,对于Setup Transaction的处理需要注意,在读取D12的FIFO数据前必须要选择端点,为了使以后的Setup Packet数据包能够被接收要用Acknowledge Setup命令使能Control In和Control Out端点。当D12接收到一个数据包时一个内部端点缓存满标志有效。后续的数据包将不能够被接收,必须通过Clear Buffer命令来清出标志位。在读取D12的数据后先要利用Acknowlege命令对主机进行回应,然后再清除D12的缓存。这两个命令处理顺序不能交换,因为在没有回应主机前不能够清除掉D12的缓存,这样就不能接收新的数据。

  Control In Transaction处理流程

  如图7所示,在Control In Transaction处理过程中注意,要发送的数据是端点0能传送的最大数据报的整数倍时,在传送完所有的数据后,必须向主机发送零长度数据报。

  Get Descriptor命令处理流程

  如图8所示,在列举过程中,被请求的描述符逐涉及设备的小的元素:首先是整个设备,然后是每个配置,接着是每个配置的接口,最后是每个接口的终端。对于字符串描述符是可选的。关于描述符是设计者可以配置的,可以根基设备的通信能力和要求来定义需要的描述符。

  Set Address命令处理流程

  如图9所示,通过这个请求,主机指定以后与设备通信的地址。值字段是要设置的设备的新的地址。允许值为1到127。当上电或连接后集线器使能一个端口,端口使用默认地址0直到它 从主机接收到一个Set_Address请求。这个请求和大部分的其他请求不同,因为设备直到通过发送零长度数据包完成请求的状态阶段后才执行这个请求。主机发送状态阶段标志包到默认地址,因为设备必须在改变地址之前发送这个包。完成这个请求后,所有通信都使用这个新地址。一个使用默认地址0的设备处于默认状态。在完成Set_Address请求设置一个非0的新地址后,设备进入地址状态。一个设备必须在接收到请求后的50毫秒内发送交换包,并且它必须在完成状态阶段后的2毫秒内完成请求。

  另外要注意的是当USB设备接收主机发送的IN事务,如果设备没有要发送到主机的数据时,这时设备进入挂起状态,为了避免这种情况出现,当没有数据要发送时可以发送零长度的数据报。

  同时利用D12开发时有两个突出的优点:软连接和GoodLink接口。所谓的软连接就是把D12内部集成的1.5K的上拉电阻连接到数据线D+上,通过此特性可以使设备CPU有充足的时间进行初始化,同时也避免频繁的插拔USB数据线。GoodLink接口可以连接发光二极管,当设备枚举成功后发光二极管常亮,当D12进行传送数据时发光二极管闪烁。

参与评论
回复:
0/300
文明上网理性发言,评论区仅供其表达个人看法,并不表明a&s观点。
0
关于我们

a&s是国际知名展览公司——德国法兰克福展览集团旗下专业的自动化&安全生态服务平台,为智慧安防、智慧生活、智能交通、智能建筑、IT通讯&网络等从业者提供市场分析、技术资讯、方案评估、行业预测等,为读者搭建专业的行业交流平台。

免责声明:本站所使用的字体和图片文字等素材部分来源于互联网共享平台。如使用任何字体和图片文字有冒犯其版权所有方的,皆为无意。如您是字体厂商、图片文字厂商等版权方,且不允许本站使用您的字体和图片文字等素材,请联系我们,本站核实后将立即删除!任何版权方从未通知联系本站管理者停止使用,并索要赔偿或上诉法院的,均视为新型网络碰瓷及敲诈勒索,将不予任何的法律和经济赔偿!敬请谅解!
© 2020 Messe Frankfurt (Shenzhen) Co., Ltd, All rights reserved.
法兰克福展览(深圳)有限公司版权所有 粤ICP备12072668号 粤公网安备 44030402000264号
用户
反馈