• 欢迎光临~

linux usb端点

开发技术 开发技术 2022-10-01 次浏览

前言

端点在实际的USB通讯过程种的具体作用与含义十分重要,但是有些难以理解,自己整理一些知识作为备忘。

(注:1、文中的EP表示Endpoint;

一、端点概念。

端点(Endpoint),是主机与设备之间通讯数据的接收或来源。主机与设备之间通信时最终会总用于设备上的各个端点,它是主机与设备间通信流的一个逻辑终端。一系列相互独立的端点在一起构成了USB逻辑设备,在系统结构中,位于下方红色方框内:

linux usb端点

二、端点的分类

每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对USB设备进行访问。但是在设备内部地址会被分的更细,设备会分出一些端点来,每个端点在设备都会有唯一的端点号,这个端点号是设计设备时给定的。如端点0,端点1等。一个设备最多可以包含16个端点,每个端点的地址为0-15。(网上也有说几十个的,有待考究)

其中每个端点地址对应一个方向。例如端点3-IN,端点3-OUT,这两个含义完全不同。但是需要注意其中的一个特殊端点--端点0,每个USB设备必须要有一个端点0,其作用为对设备枚举和对设备进行一些基本的控制功能,端点0也被称为控制端点。并且它与其他的端点还有一个不同之处在于端点0的数据传输方向是双向的,即端点0既可以给主机发送数据,也可以接收主机发送过来的数据,而其它端点均为单向。

虽然有16个端点,但通常我们只用到3个,如下:

1)、EP0:做传输配置和控制信息;

2)、EP1:做数据输入IN_EP;

3)、EP2:做数据输出OUT_EP。

注意:除了端点0,其余的端点在设备配置之前不能与主机通信,只有向主机报告这些端点的特性并被确认后才能被激活。

三、端点的特性

一个端点的特性决定了它与客户软件进行传送的类型。一个端点具有以下一些特性:

  • 端点的总线访问频率要求
  • 端点的总线延迟要求
  • 端点的带宽要求
  • 端点的端点号
  • 对错误处理的要求
  • 端点能接收或发送的包的最大长度
  • 端点的传送类型
  • 端点与主机的数据传送方向

四、端点描述符

USB设备中端点描述符描述了端点信息,端点描述符格式如下:

typedef struct _USB_ENDPOINT_DESCRIPTOR_
{
    BYTE        bLength,
    BYTE        bDescriptorType,
    BYTE        bEndpointAddress,
    BYTE        bmAttributes,
    WORD      wMaxPacketSize,
    BYTE        bInterval
}USB_ENDPOINT_DESCRIPTOR;

各变量具体释义如下:

bLength : 描述符大小.固定为0x07.

bDescriptorType : 接口描述符类型.固定为0x05.

bEndpointType : USB设备的端点地址.Bit7,方向,对于控制端点可以忽略,1/0:IN/OUT.Bit6-4,保留.BIt3-0:端点号.

bmAttributes : 端点属性.Bit7-2,保留.BIt1-0:00控制,01同步,02批量,03中断.

wMaxPacketSize : 本端点接收或发送的最大信息包大小.

bInterval : 轮训数据传送端点的时间间隔.对于批量传送和控制传送的端点忽略.对于同步传送的端点,必须为1,对于中断传送的端点,范围为1-255。

五、端点与管道

1、管道的概念

管道是主机软件(数据缓存区),和USB设备各各端点之间的数据传输连接,他是两者之间通信流的抽象(实际上数据传输是USB总线接口完成)。管道与USB设备中的端点逐个对应,并且各个管道的数据传输是相互独立的。

2、管道的格式分类

管带的通信格式分为两种,一种为流,另一种为消息,这两种通信格式不同且互斥。

1)、“流”指不具有USB定义格式的数据流,流通道中的数据是流的形式,也就是该数据内容不具有USB要求的结构。数据从流通道一端流进的顺序与它们从流通道另一端流出时的顺序是一样的(先进先出),并且流通道中的通信流总是单向的。

2)、“消息”指具有某种USB定义格式的数据流。消息通道与端点的关系同流通道与端点的关系是不同的。首先,主机向USB设备发出一个请求;接着,就是数据的传送;最后,是一个状态阶段(这部分即一次命令请求的过程)。为了能够容纳请求/数据/状态的变化,消息通道要求数据有一个格式,此格式保证了命令能够被可靠地传送和确认。消息通道允许双方向的信息流。

六、端点的传输类型

一个具体的端点只能属于四个传输模式下中的一种。数据传输类型分为四种分别是:控制传输、批量传输、同步传输和中断传输。一般情况下,通常把工作在什么模式下的端点就叫什么端点,例如:控制端点、批量端点、同步端点和中断端点。    端点0,是设备的默认控制端点,在设备上电后就存在并可以使用,在Set Config之前所有的传输都是通过端点0传输的。

程序员灯塔
转载请注明原文链接:linux usb端点
喜欢 (0)