端点(Endpoint):主机与从机之间通讯数据的接收或发送的逻辑通道。每个USB设备必须要有一个端点0,其作用为对设备枚举和对设备进行一些基本的控制功能,端点0也被称为控制端点。并且它与其他的端点还有一个不同之处在于端点0的数据传输方向是双向的,即端点0既可以给主机发送数据,也可以接收主机发送过来的数据,而其它端点均为单向。
端点描述符是描述USB通信通道或管道的类型和功能的标准USB描述符。
偏移量 | 名称 | 大小 | 说明 |
0 | bLength | 1 | 描述符的长度(7字节) |
1 | bDescriptorTyep | 1 | 描述符类型(端点描述符为0x05) |
2 | bEndpointAddress | 1 | 该端点的地址 |
3 | bmAttributes | 1 | 该端点的属性 |
4 | wMaxPackeSize | 2 | 该端点支持的最大包长 |
5 | bInterval | 1 | 端点的查询时间 |
- bEndpointAddress:端点的地址。
Bit 3…0: 端点值
Bit 6…4: 保留,默认为0
Bit 7:如果是控制端点可以忽略,否则一般表示数据传输方向
0 = OUT endpoint
1 = IN endpoint
- bmAttributes:端点属性。
Bits 1..0: Transfer Type,传输类型
00 = Control-控制传输
01 = Isochronous-等时传输
10 = Bulk-批量传输
11 = Interrupt-中断传输
如果不是一个等时传输端点,第5~2位是保留的,必须设置为0。如果它是等时的,则定义如下:
Bits 3..2: Synchronization Type-同步类型
00 = No Synchronization-无同步
01 = Asynchronous-异步
10 = Adaptive-适配
11 = Synchronous-同步
Bits 5..4: Usage Type-用途
00 = Data endpoint-数据端点
01 = Feedback endpoint-反馈端点
10 = Implicit feedback Data endpoint-暗含反馈的数据端点
11 = Reserved-保留
- wMaxPackeSize:端点支持的最大包长
对于等时端点,此值用于在调度中保留总线时间,这是每(微)帧数据有效负载所需的时间。
对于所有的端点,bit10~bit0指定最大数据包大小(以字节为单位)。
对于高速同步和中断端点:bit12~bit11指定每个微帧的额外通信次数:
00 = None (1 transaction per microframe)
01 = 1 additional (2 per microframe)
10 = 2 additional (3 per microframe)
11 = Reserved
其它位默认为0
- bInterval:轮训数据传送端点的时间间隔
对于批量传送和控制传送的端点忽略.对于同步传送的端点,必须为1,对于中断传送的端点,范围为1-255
每种传输类型的端点定义的最大长度不同。
1. 控制传输的端点:
低速模式包长固定为8字节,高速模式则为64字节,全速模式可以在8,16,32,64字节中选择。
2. 等时传输的端点:
全速模式最大包长为1023字节,高速模式为1024字节,低速模式不支持等时传输。
3. 中断传输的端点:
低速模式最大包长为8字节,全速模式为64字节,高速模式为1024字节。
4. 批量传输的端点
高速固定为512字节,全速模式在8,16,32,64字节中选择。低速模式不支持批量传输。