USB:USB通信中的端点(endpoint)和四种传输模式

USB的传输模式有4种,分别是控制传输(Control Transfer)、中断传输(Interrupt Transfer)、批量传输或叫块传输(Bulk Transfer)、实时传输或叫同步传输(Isochronous Transfer)。每种传输方式都有其特点,其特点如下:

端点(endpoint)

端点位于USB 外设内部,所有通信数据的来源或目的都基于这些端点,是一个可寻址的FIFO。
每个USB 外设有一个唯一的地址,可能包含最多十六个端点。主机通过发出器件地址和每次数据传输的端点号,向一个具体端点(FIFO)发送数据。
每个端点的地址为0 到15,一个端点地址对应一个方向。所以,端点2-IN 与端点2-OUT 完全不同。 每个器件有一个默认的双向控制端点0,因此不存在端点0-IN 和端点0-OUT。

控制传输特点

  USB协议引用控制传输有两方面的原因,一方面,在USB系统中,设备在正常工作之前必须先进行配置,USB主机必须为设备分配总线上唯一的设备地址,并完成读取设备的各种描述符,根据描述符的需求为设备的端点配置管道,分配带宽等工作。另一方面,在设备的工作过程中,主机希望能及时地获取设备的当状态,或者设备出现问题时希望主机能及时做出补救措施,或者主机根据某些需求改变设备的当前配置等工作。这两方面的目的对所有的USB设备都要求适用,为了达到此目的,从而引入了控制传输。所有设备都要求有支持控制传输的端点,一般端点号为0的为控制端点,USB协议将其定义设备的默认端点。控制传输有以下特点:

  • 控制传输由以下几个事务处理组成:

(1)建立联系,把请求信息从主机传到它的应用设备
(2)零个工多个数据传送的事务处理,按照命令中指明的方向传送数据
(3)状态信息回传

  • 用于控制传输的设备的端点是双向的,即可以接收数据包又可以发送数据包,相应的控制传输的管道也是双向的
  • 所有的设备必须有至少一个控制端点,且端点号为0
  • 是可靠的数据传输,支持错误检测和数据重传,并尽可能满足主机和设备的同步,因为一次控制传输需要三个或两个阶段
  •   控制机制提供访问设备描述符和命令操作的机制。USB协议为设备定义了标准的、设备类的或由设备生产商厂提供的命令(或叫请求),这些命令可操作设备的状态。同时协议又定义了一套描述符,用于存放USB设备的各种信息,用于对设备进行配置,这些都是通过控制传输完成
  • 系统没有为控制传输指定访问总线的频率和带宽,一般由USB协议软件(即主机操作系统的USB控制程序)从全局优化角度来决定

中断传输的特点

   中断传输为这样一类设备设计的,它们只发送或接收少量的数据,而且并不经常进行数据传输,但它们有一个确定的传输周期,每隔一定的周期要求传输一次(并不是要求必须按固定周期要发送一次数据)。使用这种传输方式的设备有键盘、鼠标、游戏杆等。所有的USB设备在正常工作之前,系统都要对它们进行配置,当配置成功后设备才能正常的工作。因为中断传输是一种周期性的传输方式,系统在对进行中断传输的设备进行配置时,只要当前总线上用于周期性传输的空闲带宽能够容纳此设备,设备就可以工作。中断传输有如下特点:

  • 中断传输管道的最大服务周期(单位:毫秒)必须得到保证
  • 是一种可靠的数据传输方式
  • 由于错误而引起的数据重传将在下一服务周期进行
  • 数据的结尾也是通过与包的最大传输字节数比较来确定
  • 设备中用于中断传输的端点可用来为某些实时传输传达其速率的反馈信息,例如音频设备。当使用这种模式时,在每个数据包被发送到主机之后,不管握手包是否存在或类型如何,端点的DATA0/DATA1同步切换都应该改变,不过只有中断传输的输入端点支持种能力

批量传输的特点

  USB协议提供批量传输类型是为了支持在某些不确定的时间内进行大量的数据通信,如打印机、扫描仪、硬盘、光盘等设备的数据传输都有这种特点。当一帧内的总线时间(带宽)有空余时,USB主机就会将剩余的时间(带宽)分配给等待使用总线的批量传输的USB设备,也就是说,批量传输可以利用任何可获得的总线带宽来进行数据传输。批量传输有以下特点:

  • 可以动态地获得总线带宽
  • 是一种可靠的数据传输方式,如果传送失败,可进行重发
  • 有确认的数据传输,但不保证传输的带宽和延迟
  • 只有当获得空闲的带宽时,批量传输才会发生。如果USB总线有较多的空闲带宽,则批量传输会较频繁地进行,如果空闲带宽较少,可能有很长时间没有批量传输发生

实时传输(同步传输)的特点

  实时传输是为支持某些对时间要求很高、数据量很大应用要求而提出的,使用这种传输类型的设备有麦克风、调制解调器、音频设备等。为了完成实时传输,总线必须事先提供足够的带宽。实进传输有如下特点:

    • 实时传输有数据有固定的时间延迟,但有固定的带宽保证
    • 是不一种不可靠的数据传输,充许有一定的误码率
    • 只要数据供得上,就能保证管道上的恒定数据传送速率
    • 当被用来支持同步的源和目的时,使用这个传输类型的软件并不要求是实时的
    • 对于实时传输来说,实时性比正确性和数据重传更重要。考虑到总线的错误率较低,协议就认为传送一般都可以成功,即使有少量的数据出错,也不会对应用软件产生太大的影响(如音频软件)。实时传输的接收端可以判断自己是否在一个帧内错过了一些数据,而且能知道丢了多少数据。
    • 在实时传输的过程中,因为没有握手信号来指示中止,所以实时传输的端点从不中途停止。即使能够查到错误,实时管道也不会因此停下,USB主机也仍继续处理下一帧的数据。因为实时传输的协议不支持每次事务处理都进行握手,所以错误检测的功能相对弱了许多
    • 只有全速设备可以使用实时传输 
    • Android API 貌似暂时不支持,可用libusb实现。

你可能感兴趣的:(USB,linux,usb)