深入理解USB2.0通信协议——数据流传输模型
本帖最后由 sunsili 于 2024-4-10 14:52 编辑深入理解USB2.0通信协议——数据流传输模型
导言
在USB系统中,一个USB设备(Device)表现为一组USB端点(Endpoint)的集合。接口(Interface)是一种功能的抽象,他描述了一种可用的功能(Function),USB设备(Device)的功能通过这些接口(Interface)展现给USB系统。USB系统软件使用默认控制管道(Default Control Pipe)来管理设备,默认控制(Default Control Pipe)管道用于访问设备的配置、状态和控制信息。客户端软件使用管道(Pipe)捆绑来管理一个接口(Intreface)。客户端软件通过发起数据传输请求请求在USB主机(Host)和USB设备(Device)之间缓冲区(Buffer)进行数据交换。
1设备端点(Device Endpoint)
端点的定义:端点是USB设备的一个独特可识别的部分,它是主机和设备之间通信流的终点。每个USB逻辑设备由多个独立的端点组成。设备地址:每个USB逻辑设备在连接到系统时会被系统分配一个唯一的地址。这个地址是在设备连接时由系统分配的,用于唯一标识每个逻辑设备。端点号: 每个设备的端点在设计时会被赋予一个唯一的设备确定的标识符,称为端点号。这个端点号是在设计时分配的,用于唯一标识设备上的每个端点。
数据流方向: 每个端点都有一个在设计时由设备确定的数据流方向。数据流方向是指数据在端点上的流动方向,可以是输入IN(从设备到主机)或输出OUT(从主机到设备)。
唯一引用: 通过设备地址、端点号和数据流方向的组合,可以唯一地引用每个端点。这种组合确保了对USB设备中的特定端点的唯一标识。
连接:每个端点都是一个简单连接,支持数据在一个方向上的流动。它要么是输入连接(从设备到主机),要么是输出连接(从主机到设备)。
端点0所有USB设备都必须实现一个默认控制方法( default control method),该方法使用端点号为0的输入(IN)和输出(OUT)端点。USB系统软件使用这个默认控制方法来初始化和通用地操纵逻辑设备(Device)(例如,配置逻辑设备),作为默认控制管道(Default Control Pipe)。默认控制管道(Default Control Pipe)提供对设备配置信息的访问,并允许通用的USB状态和控制访问。默认控制管道支持控制传输。一旦设备连接、上电并接收到总线复位信号后,端点号为0的端点始终是可访问的。
非0端点
USB功能(Functions)可以根据其实现的需要拥有出端点0外的其他端点。低速设备(Device)被限制在最多两个非0可选端点。全速设备(Device)可以拥有的额外非0端点数量受到协议的定义限制。具体而言,最多可以有15个额外的输入端点和15个额外的输出端点(共15组)。 除了用于默认控制管道的端点外,其他端点在设备被配置为正常工作的一部分之前不能被使用。
主机(Host)、设备(Device)、接口(Interface)、功能(Function)、端点(Endpoint)
[*]一个USB系统只有一个USB主机(Host)
[*]一个USB(Host)主机可以有多个USB设备(Device)
[*]一个USB设备(Device)可以有多个接口(Interface)
[*]每个接口(Interface)定义了一种功能(Function)
[*]每个功能(Function)可以由多个端点(Endpoint)实现
2管道(Pipe)
USB管道是设备上的一个端点与主机上的软件之间的关联的交互通道。管道代表通过内存缓冲区和设备上的端点在主机上的软件之间进行数据交换的能力。
流管道(Stream)
通过管道传输的数据是没有数据格式定义的,主要用于数据传输。
流管道适用于以下情况:连续流式数据:当需要在主机和设备之间传输连续的数据流,而数据本身没有明确定义的结构时,可以使用流管道。这适用于音频、视频等连续流媒体数据的传输。无特定格式的数据:如果数据不需要按照USB定义的结构进行组织,而只是一连串的字节流,那么流管道是一个合适的选择。实时性要求低:流管道通常用于数据传输,对于实时性要求较低的情况。因为流管道不对数据进行特定的结构化,它更适合于对实时性要求不严格的数据传输场景。较大数据量的传输:流管道可以有效地处理大量的数据,因为它没有特定的结构要求,可以自由地传输大块的数据流。
消息管道(Message)
与流管道不同,消息管道的数据需要遵循USB定义的结构,这种结构可以包括消息头、数据字段等。任何USB设备一旦上电就会存在一个消息管道,即默认控制管道(Default Control Pipe),他由两个端点0(IN和OUT)组成,一旦设备上电并接收到总线复位信号,默认控制管道始终可用。其他管道在USB设备被配置时才会存在。
使用消息管道的场景可能包括:结构化数据传输:当数据需要按照特定的结构进行组织,而不仅仅是连续的字节流时,消息管道是一个适合的选择。特定格式的通信:如果在通信中需要使用特定的数据格式、消息头或标记,消息管道可以提供一种有序、结构化的通信方式。应用层通信:在某些应用中,消息管道可能更适合处理应用层的通信需求,例如传输命令、配置信息等。数据解析和处理:如果在主机和设备之间的通信中需要进行更多的数据解析和处理,消息管道可以提供更明确的数据结构,便于解析和处理。
3传输(transfer)
USB通过管道在主机上与软件客户端关联的内存缓冲区和USB设备上的端点之间传输数据。这个过程涉及数据的交换,其中主机上的软件客户端通过管道将数据发送到USB设备的端点,或从USB设备的端点接收数据。使用消息管道(Message Pipe)传输的数据需要符合USB定义的结构。虽然USB规定了消息管道(Message Pipe)中的数据应该以一定的结构存在,但USB也允许特定设备在USB定义的消息数据有效负载内传输其自定义结构化数据。USB规定了在总线上移动的数据需要被封装成数据包,无论是在流管道还是消息管道中。但是,数据在总线事务的数据有效载荷中的格式和解释最终由使用管道的客户软件和功能负责。USB提供了不同的传输类型,这些类型被优化以更接近地匹配使用管道的客户软件和功能的服务需求。这意味着USB允许使用不同的传输类型来满足特定软件客户端和功能的性能和服务要求。
控制传输(Control Transfer)
控制传输是USB通信中一种用于配置、命令和状态等类型通信的传输方式。它是一种灵活且通用的传输类型,可用于设备的初始化、配置以及向设备发出特定命令。控制传输是通过控制管道(Control Pipe)来实现的。每个USB设备都必须实现默认控制管道作为消息管道。这个管道由USB系统软件使用,它提供了访问USB设备的配置、状态和控制信息的途径。USB设备也可以选择性地为其自身的实现需求提供额外的控制管道。这允许设备在默认控制管道之外支持特定的控制传输流程。
控制传输过程通常包括以下阶段:
[*]Setup Transaction(设置事务):主机向设备发送一个设置事务,其中包含命令、请求类型、目标端点等信息,以指定控制传输的目的和操作。
[*]Data Transaction(数据事务):根据设置事务的内容,可能会有零个或多个数据事务,用于在主机和设备之间传输数据。这个阶段的存在与否以及数据量的大小取决于具体的控制传输操作。
[*]Status Transaction(状态事务):控制传输的最后一个阶段是状态事务,用于设备向主机返回执行结果或状态信息。如果控制传输成功完成,状态事务将返回“成功”。
同步传输(Isochronous Transfer)
同步传输是USB通信中的一种传输方式,主要用于需要实时性的应用场景,同步传输需要按照预定的时间表定期传输数据,以确保实时性要求得到满足。在音频设备中,如麦克风或扬声器,同步传输可以用于实时传输音频数据,确保音频信号的即时性。在摄像头或视频采集设备中,同步传输可以用于实时传输视频数据,以满足视频流的实时性要求。在某些实时控制系统中,需要按时传输控制信号,同步传输也可以应用于这种场景。
同步传输过程包括以下关键步骤:
[*]帧和微帧的基准:USB系统在全速/低速总线上建立了1毫秒的时间基准,称为帧(Frame),而在高速总线上建立了125微秒的时间基准,称为微帧(Microframe)。
[*]同步传输的时机:同步传输的数据传输时机是由USB系统按照特定的规则决定的。在同步传输中,数据传输的发生频率是固定的,并且按照帧或微帧的时序来进行。
[*]数据传输:在同步传输的时机到来时,数据从主机传输到设备或从设备传输到主机,以满足实时性的需求。数据传输的方向由同步传输的设置和规范决定。
[*]数据完整性:虽然同步传输确保了按时传输数据,但它不对数据的完整性进行检查和重传。这使得同步传输更适合对实时性要求高而对数据完整性要求相对较低的应用。
中断传输(Interrupt Transfer)
中断传输是USB通信中的一种传输方式,用于支持设备周期性地向主机报告状态或事件。它适用于需要以间歇性的、带有周期性要求的方式传输小量数据的场景。输入设备:中断传输可用于鼠标、键盘等输入设备向主机报告按键状态或鼠标移动事件。传感器数据:中断传输可用于传感器设备向主机报告周期性测量数据,如温度传感器、光传感器等。定时报告状态: 某些设备需要以一定的时间间隔向主机报告状态,例如定时报告电池电量、连接状态等。
中断传输过程通常包括以下关键步骤:
[*]时序要求:中断传输有一个预定的间隔,设备在这个间隔内周期性地向主机报告状态或事件。这个间隔通常是由设备的配置和USB系统的规范决定的。
[*]数据传输:在每个中断传输的时机,设备可以传输一小段数据(通常是几个字节)到主机,以向主机报告设备的当前状态、事件或其他信息。
[*]低带宽:中断传输通常具有较低的带宽要求,适用于传输小量数据并且对传输时延有一定要求的场景。
批量传输(Bulk Transfer)
批量传输是USB通信中的一种传输方式,主要用于大容量、不对传输时延敏感的数据传输场景。它适用于需要传输大量数据,但对传输时延相对较为宽松的应用。打印机: 打印机需要传输大量的打印数据,批量传输是一个合适的选择。存储设备: 移动硬盘、U盘等存储设备需要传输大容量的文件数据,批量传输可以满足这种需求。摄像头: 数码摄像头在传输照片或视频数据时,可以使用批量传输。音视频录制设备: 在需要传输大容量音视频数据的设备中,批量传输也是一个常见的选择。
批量传输过程包括以下关键步骤:
[*]数据块传输:在批量传输中,数据通常被划分为较小的块,并在每个传输时机传输一个数据块。
[*]时延宽松:与同步传输和中断传输不同,批量传输对传输时延的要求较为宽松。数据传输的时机不是固定的,而是在空闲时进行。
[*]错误检查:批量传输通常包含一定的错误检查和重传机制,以确保数据的完整性。
页:
[1]