您现在的位置是:主页 > USB2.0规范 >

USB端点描述符bInterval的时间周期解释

发布时间:2022-12-25 22:36:09所属栏目:USB2.0规范 已帮助编辑作者:【USB接口百科】

USB 端点描述符用于描述主机查询端点的时间间隔,这个值根据USB的版本和端点的类型而不同。

中断传输 同步传输 控制传输 批量传输
低速 1-255,单位为ms / / /
全速 1-255,单位为ms 1-16,2^(N-1)个周期单位 / /
高速 1-16,2^(N-1)个周期单位 1-16 ,2^(N-1)个周期单位 解释1 解释1
超高速 125us为单位 1-16,2^(N-1)个周期单位 未用 未用
解释1:对于高速批量/控制输出端点,bInterval必须指定端点的最大NAK频率。值0表示端点永不NAK。其它值表示每个微帧的bInterval*125us时间最多1个NAK。这个值的范围必须在0到255之间;

周期其单位表示多少个周期单位同步传输一次数据。如:

bInterval 轮询周期2^(N-1)
1 1; 每个总线间隔传输数据。
2 2; 数据每隔一个总线间隔传输一次。
3 4; 每四个总线间隔传输一次数据。
4 8; 每八个总线间隔传输一次数据。
对于全速,总线间隔是一帧。一帧的长度是 1 毫秒。对于高速和超高速,总线间隔是一个微帧。微帧的长度是 125 微秒。八个连续的微帧构成一个高速或超高速帧。 高速端点的同步数据传输

如对于一个高速端点,它的端点特性为:

wMaxPacketSize是 1024。位 12..11 为01表示两个额外的事务。bInterval为1。
选择配置后,同步管道的MaximumPacketSize为1024*(2+1)=3072个字节(2个额外的事务),所以这样USB设备端可以在每个微帧中传输3072个字节,一帧(8个微帧)中传输3072*8=24576个字节。
下图显示了不同的bInterval配置在高速同步传输中的数据传输频率。
高速端点的同步数据传输

每个方格代表一个微帧

超高速端点的同步数据传输

对于一个超高速端点,它的端点特性为:

wMaxPacketSize是 1024。bMaxBurst 是15bInterval为1Isochronous.Mult是2wBytesPerInterval是45000

所以其最大字节数可以计算为wMaxPacketSize * ( bMaxBurst +1) * ( Mult + 1) =49152。
设备将该值限制为 45000 字节的wBytesPerInterval值。该值表示在MaximumPacketSize 45000 中。客户端驱动程序只能使用MaximumPacketSize值。在这个例子中,请求可以分为三个突发事务。前两个突发事务各包含 16 个wMaxPacketSize块. 最后一个突发事务包含 12 个块来保存剩余的字节。此图显示了通过超高速传输的同步数据包传输的轮询间隔和字节。
1024*(16+16+12)=45056,所以第三个突发传输的第12事务,数据为1024-56=968个字节。
超高速端点的同步数据传输

关于高速设备控制传输、批量传输中的bInterval

在高速设备控制传输、批量传输的bInterval表示端点的最大NAK频率。
这里我们首先回顾一下NAK握手包的用法:

NAK握手包由设备端发出,主机接收对于输入数据传输,表示设备没有数据或者没有计划向主机发送数据。对于输出数据传输,表示设备无法接收来自主机的数据。

从以上NAK的用法来看:

设备是无法收发数据,由设备主动通知主机的定时机制。对于控制传输,一般一次控制一次数据的传输,这个NAK好像没有什么意义。因为即使设备没有数据或无法接收数据时,也会对控制传输NAK掉。对于BULK传输,这里的bInterval有一定的意义。由于批量传输支持突发即burst传输,所以在进行大批量数据传输时,可以不必每次传输都ACK,而这里的NAK表示数据无法接收或无数据发送了,可以早点知道传输结束或无法继续接收数据。这样就大大提高了数据的发送效率。

如我们手中一个硬盘,其输入输出端点如下:

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x02 (Direction=OUT EndpointID=2)
bmAttributes             : 0x02 (TransferType=Bulk)
wMaxPacketSize           : 0x0200 (max 512 bytes)
bInterval                : 0x00 (never NAKs)
Data (HexDump)           : 07 05 02 02 00 02 00  

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x83 (Direction=IN EndpointID=3)
bmAttributes             : 0x02 (TransferType=Bulk)
wMaxPacketSize           : 0x0200 (max 512 bytes)
bInterval                : 0x00 (never NAKs)
Data (HexDump)           : 07 05 83 02 00 02 00                              .......

这里都是永不NAK。

所以本人这里对于bInterval的NAK的理解是,这东西有没啥用,而且还费带宽。因为这会和高速设备中的PING机制重复。

PING 机制来探测设备是否就绪,并且PING只用于控制传输或批量传输的OUT传输中.

     以上就是USB接口百科为您提供USB端点描述符bInterval的时间周期解释的解读,本文章链接: http://www.usb-hub.cn/usb20gf/42289.html 欢迎分享转载,更多婚礼相关资讯请前往USB2.0规范