USB数据通信协议简介

     数据通信协议部分是USB的核心内容。主要包括:以差模串行信号为载体传送二进制代码来传输信号;数据包作为最基本的完整信息单元,包含一系列数据信息。数据包可以分解为更小的单元—域;以包为基础,构成USB的三种事务。进而,组合不同的传输类型,传输各种类型的数据,实现USB的各种功能。
       包是USB最基本的数据单元,每个包,基本包含一个完整的USB信息。按照其在整个USB数据传输中的作用不同,包分为三类:令牌包、数据包和握手包。他们之间的区别是由更小的单元—域来划分的。域又分为七类:同步序列域、包标识域、地址域、端点域、帧号域、数据域和CRC校验域。
      以包为基础,USB定义了四种数据的传输类型:控制传输、中断传输、批量传输和同步传输。每一种类型都由一定的包按照某种特定的格式组成。不同的传输类型的最大传输速度、占用USB总线的带宽、传输数据的总量和应用场合等都是不同的。传输是一种比较笼统的说法,在实际的数据传输中,往往还需要细分为多个数据交换过程,每一次的数据交换过程既不能叫做某种传输,也不是包,而是另外一个重要的概念—处理事务。每种传输方式都由多个处理事务来完成,每一笔处理事务由底层包组成。域、包、处理事务和传输的关系就是实现USB通信的过程。
      为了细化USB的通信机制,USB协议的开发者采用了分层的概念,每一层传输的数据结构对其他逻辑层是透明的,USB设备和USB主机通信的逻辑结构和每层的逻辑通道。为了便于理解USB协议,将USB通信逻辑上分成了三层:信号层、协议层和数据传输层。信号层用来实现在USB设备和主机的物理连接之间传输位信息流的信息。协议层用来实现USB设备和USB主机端的系统协议软件之间传输包字节流的信息,它们在信号层被编码成NRZI位信息后传送出去。数据传输层用来实现在USB主机端的客户端驱动程序和设备端的功能接口之间传输有一定意义的信息,这些信息在协议层被打包成包格式。协议将信号层传输的位信息流称为包,将协议层传输的包信息流称为处理事务,将数据传输层传输的信息流称为传输。所有的传输最终都以比特流的方式在信
号层上实现通信。
数据传输类型
     USB的传输,是USB面向用户的最高级的数据结构。USB定义了四种数据传输类型,即控制传输、中断传输、批量传输和同步传输,用以完成各种类型的数据传输。
     处理事务和传输的关系是核心。传输是由一个或多个处理事务组成的,而处理事务按照其特点分为三种类型:输入(工n)处理事务、输出(Out)处理事务和设置(SetuP)处理事务。任何一种传输都是由这三种处理事务组成,不同的只是这三种处理事务的组合和搭配情况。
      中断传输由In处理事务或Out处理事务组成,主要用于如鼠标、键盘等自ID设备的数据传输中。中断传输中,“中断”的概念并不等同于PC系统中硬件设备的中断,USB主机是以周期性的方式对设备进行轮询,以确定设备是否有数据发送。中断传输没有固定的传输速率,低速、全速和高速设备均支持中断传输,只是对传送的数据包的大小要求不同。
      批量传输由In处理事务或Out处理事务组成,主要用于大容量数据的传输中,如硬盘、光盘刻录机及数码相机等。批量传输对传输速率和宽带没有固定的要求,当总线“忙”时,USB会优先考虑其他类型的数据传输,而暂停批量传输。低速设备不支持批量传输,只有全速和高速设备才支持批量传输。
      同步传输由In处理事务或Out处理事务组成,主要用于音频流恒定传输速率的数据传输中,如音箱、显示器和摄像头等设备。同步传输讲究的是数据传输速率的恒定,而对数据的准确性的要求不如批量传输严格。所以,同步传输中没有握手包,不对发送错误的数据进行重试。需要说明的是,与中断传输和批量传输不同的是,对于全速设备,同步传输不支持数据包的交替触发机制,只能以Data0发送。而高速设备在一定条件下
支持触发机制,由于情况复杂,不予讨论。低速设备不支持同步传输,只有全速和高速设备才支持同步传输。
      控制传输是最复杂、最重要的传输类型,也是USB枚举阶段最主要的数据交换方式。当USB设备初次连接到主机之后,主机通过控制传输来交换信息、设备地址和读取设备的描述符来识别该设备,并安装相应的驱动程序,在此基础之上其余三种可能的传输方式才能够使用。进行USB系统开发时,首要的任务就是利用控制传输实现设备的枚举过程,提供各种设备信息。控制传输由In处理事务、Out处理事务和Setup处理事务组成,

其中核心是Setup处理事务。

       USB的两根信号线负责与总线上的设备交换数据。这些电缆形成了所有设备必须共享的惟一的一条传输通路。 RS-232有一条Tx线用来传输一个方向的数据,一条Rx线用来传输另一个方向的数据。与RS-232不同,USB的一对电线只传输一个不同的信号,不 同方向的信号要按顺序来传输。

  因为所有的传输共享一个数据通道,所以每一个事务必须包括事务的源和目的地址。每个设备有一个由 主机分配的惟一的地址,所有的数据都是流向主机或从主机获取。每个事务都是以主机发送数据块开始的,这个数据块包括接收设备的地址以及设备中被称为终端的 一个特殊位置。一个设备发送的每个数据是为了响应从主机接到的请求而发送的接收到的数据或状态信息。  

  USB通信分为两类,根据它们被用于原始配置还是应用中。在配置通信中主机通知设备,设备收到通知后准备好交换数据。大部分这类通信发生在上电或连接时主机检测到外设的时候。应用通信出现在主机的应用程序与一个检测到的外设交换数据的时候。这些是实现设备应用的通信。例如,对鼠标来说,应用通信是发送点击动作给主机,主机端应用程序接收到这个动作后执行相应动作。

配置通信

  在检测过程中,设备的固件对主机的一系列标准请求做出响应。设备必须识别出每一个请求,返回被请求的信息。

  在PC上,Windows执行检测工作,所以不涉及用户编程的问题。然而,为了完成检测工作,Windows必须有两个可用的文件:一个识别这个设备驱动程序的文件名和位置的INF文件和设备驱动程序本身,如果您的项目符合某种通用设备类,则操作系统可能已经提供了此类设备的所需的这两个文件,而不需要开发人员自己提供。

  根据设备以及设备将被如何使用,设备驱动可能是如下两者之一;Wlndows自带的或芯片或外设厂商提供的。INF文件是一个文本文件,通常你可以对驱动提供考提供例子,稍加修改就可以得到了。

应用通信

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

主机与设备建立通信的过程

  主机端的USB集线器监视着它的每个端口的信号线的电压,当USB设备插入主机时,信号线的电平会发生变化,此时主机知道有新设备插入了。

  当主机检测到设备的插入后会首选重启这个设备,接着主机发出Get_Port_Status请求来验证设备是否已经重启,设备重启后主机通过检测根信号线的电平状态判断设备的速度。

  主机发送第一次Get_Descriptor(wValue字段的高字节为0x01,表示设备描述符)请求取得设备描述符,设备描述符提供了设备的多种信息,包括:设备通讯终端0的最大包的大小,设备支持的配置号以及有关这个设备的其它信息,主机通过对这些信息的分析以确定接下来的通信动作。

  设备描述符里规定了设备一个或多个配置描述符,主机再次或多次发出Get_Descriptor(wValue字段的高字节为0x02,表示配置描述符)指令来读取这些配置描述符,第一次只读出配置描述符的前9个字节,这9个字节里包含了配置描述符和它的所有从属描述符(接口描述符、端点描述符)的总长度,然后主机根据这个长度读出设备的所有配置描述符(当然包括其所有从属描述符)。

  在读取完配置描述符后,若之间读取的设置描述中指定了相关字符串描述符(用来描述厂商、产品和设备序列号信息的)的索引,主机将发出若干次Get_Descriptor(wValue字段的高字节为0x03,表示字符串描述符)命令来获得这些字符串描述,此时主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。

  在主机已经从它的描述符中知道了能够知道的所有信息后,便开始为这个设备安装驱动程序。

  加载了USB设备驱动以后,主机发送Set_Configuration命令请求为该设备选择一个合适的配置。

  至此,USB枚举过程结束,设备可以正常使用了。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值