USB超高速 超高速端点伴随描述符
2021-03-24
1730
0
在接口中描述的每个超高速端点都紧跟着一个超高速端点伴侣描述符( EndpointCompanion descriptor)。这个描述符包含只给超高速端点定义的附加端点特性。这个描述符总是 作 为 配 置 描 述 符 信 息 的 一 部 分 在GetDescriptor(Configuration) 请 求 中 返 回 , 不 能 被GetDescriptor() 或 SetDescriptor()请求直接访问。默认的控制管道(Default Control Pipe)不具有端点伴侣描述符。在配置信息中,端点伴侣描述符应该紧跟在它所关联的端点描述符后面
数据结构定义如下:
typedef struct _SUPER_SPEED_ENDPOINT_COMPANION
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bMaxBurst;
UCHAR bmAttributes;
USHORT wBytesPerInterval;
}SUPER_SPEED_ENDPOINT_COMPANION;
- bLength:该描述符的长度,固定为6。
- bDescriptorType:描述符类型,固定为SUPERSPEED_USB_ENDPOINT_COMPANION,值为0x30.
- bMaxBurst:端点在一次突发中可以发送或接收的数据包的最大数量。有效值为从 0 到 15。值为 0 表示端点只能突发一次一个包,而 15 值表示端点可以突发一次最多 16 个包。对于控制类型的端点,这个字段应设置为 0。
bmAttributes:
- 如果这是个批量端点:4:0 MaxStreams。 这个端点支持的流的最大数量。有效值是从 0 到 16,其中值为 0 表示端点没有定义流。对于值 1 至 16,所支持的流等于2^MaxStream。7:5 保留。这些位是保留,并应设置为零。
- 如果这是个控制或中断端点:7:0 保留。这些位是保留,并应设置为零。
- 如果这是个等时端点:1:0 Mult。基于零的值,决定服务时间间隔内,这端点支持的包的最大数量。包的最大数量 = bMaxBurst x (Mult + 1) 。这个字段可设置的最大值是2. 7:2 保留。这些位是保留,并应设置为零.
wBytesPerInterval:此端点每一个服务间隔将传输的字节总数。此字段只对周期端点有效。 对于等时端点,此值用于保留在调度中的总线时间,为每 125微秒的帧数据有效载荷所需。管道可在持续时间的基础上(on anongoing basis),实际使用不到保留的带宽。如有必要,设备通过正常的非 USB 定义的机制报告实际使用的带宽。
如对于一个等时传输端点,其赋值可以为:
pOpEndpointDesc->bLength = 0x07;
pOpEndpointDesc->bDescriptorType = 0x05;
pOpEndpointDesc->bEndpointAddress = 0x81;
pOpEndpointDesc->bmAttributes = 0x05;
pOpEndpointDesc->wMaxPacketSize = 1024; //bMaxBurst==0?0-1024:1024
pOpEndpointDesc->bInterval = 0x01;
pSuperSpeedEndpointCompanion->bLength = 6;
pSuperSpeedEndpointCompanion->bDescriptorType = 0x30;
pSuperSpeedEndpointCompanion->bMaxBurst = 0x0f; //突发16次 包的最大数量 = bMaxBurst x (Mult + 1)
pSuperSpeedEndpointCompanion->bmAttributes = 0x00;//bit01=mut, == 1 * (2+1)
pSuperSpeedEndpointCompanion->wBytesPerInterval = 16384; //1024*16
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936