USB-BULK ENDPOINTS

http://blog.sina.com.cn/s/blog_6cb8cdbd0102vh9u.html
关于bulk endpoints
一个USB bulk端点可以传输大量的数据。bulk传输而且很可靠,因为有硬件上的错误检测和一定次数的重试机制。对于bulk endpoint的传输而言,总线上的带宽是无保留的。当有多个传输对应多个种类的endpoint时,controller总是先处理对于时间更敏感的数据,例如isochronous和interrupt数据包。只有在总线空闲的时候,controller会处理bulk传输。当总线上没有特定的传输时候,bulk传输可以到达最快的速度。但是,当总线忙于处理其他的传输时,bulk数据可能会不定期的等待。

bulk endpoint的一些特征:

· bulk endpoint是可选择的。当USB设备需要传输大量数据的时候,bulk传输可以作为一个好的选择。例如,传输文件到闪存设备,或者扫描仪,打印机的数据收发。

· USB的full speed,high speed,和super speed设备可以支持bulk endpoint。 low speed 设备不支持bulk endpoint。

· endpoint是没有特定方向的,可以作为IN或者OUT。 bulk IN 是指从设备把数据送到主机,而bulk OUT则是把数据从主机传输到设备。

· endpoint提供CRC bit来检测错误,以此来保证数据的完整性。对于CRC错误,数据自动重新传输。
· Superspeed bulk endpoint可以支持streams。 stream允许主机发送传输到不同的steam pipe。

· 最大支持的包大小(MaxPackageSize)由设备的总线速度决定。对于full speed,high speed和super speed,最大包大小对应的为64,512,1024 bytes。

Bulk 传输
和其他的USB传输一样,主机总是初始化bulk 传输。通信发生在主机与目标endpoint之间。在bulk传输中,USB协议不会强制任何的数据格式。
主机和设备之间怎么通信取决于某个设备和其速度。这里描述一些high和super speed bulk传输的例子。

可以使用USB analyzer来观察数据传输和包的结构,例如Beagle,Ellisys,LeCroy USB protocol analyzer。这些分析仪可以展示数据是怎么传输的。这里给出一个使用LeCroy USB analyzer的例子,此例子只作为信息使用,不被微软所支持。

Bulk OUT 传输例子
分析仪给出了一个在high speed下的bulk OUT例子
USB <wbr>bulk <wbr>传输

一开始,主机给一个high-speed bulk endpoint发送了一个有着OUT PID的token(OUT token)。这个包包含了设备的地址和目标endpoint。在OUT报纸后,主机发送一个包含bulk payload的数据包。如果endpoint接受了这个数据,endpoint会发送一个ACK包来回应主机。在这个例子里,我们可以看到主机发送了31bytes到设备地址:1,endpoint地址:2.

在数据包到达的时候,endpoint很忙且不能接受数据的时候,设备会发送一个NAK包。在这个情况下,主机开始发送PING包到设备。设备会一直回应NAK包直到设备准备完毕,准备完毕之后设备回应ACK包,此时主机又可以回到之前的OUT传输了。

分析仪给出了一个SuperSpeed bulk OUT传输的例子。
USB <wbr>bulk <wbr>传输

一开始,主机发送了一个数据包来初始化一个SuperSpeed bulk endpoint的OUT传输。这个数据包包括了bulk payload,设备和endpoint地址。在这个例子里,我们可以看到主机发送了31bytes到设备地址:4,endpoint地址:2.

设备收到数据包之后发送一个ACK包给主机。如果此时endpoint很忙,数据发送了但是无法接受,设备会发送一个NRDY包。和high speed不同的是,在主机收到NRDY包之后,不会一直询问设备,而是等待一个从设备发过来的ERDY包。当设备就绪之后,发送一个ERDY包到主机而此时主机可以发送数据到endpoint。

Bulk IN 传输例子
分析仪给出了一个high speed的bulk IN 例子。
USB <wbr>bulk <wbr>传输

一开始,主机发送一个包含IN PID的token(IN token)包来初始化传输。然后设备会发送一个包含bulk payload的数据包。若是endpoint没有数据或者没有准备好,设备会发送一个NAK握手包。主机会重试IN传输直到设备发送一个NAK包。ACK包表示了设备已经接受了数据。(这里对原文有些疑问“That ACK packet implies that the device has accepted the data”)

分析仪给出了一个SuperSpeed bulk IN传输的例子。
USB <wbr>bulk <wbr>传输

为了初始化一个SuperSpeed endpoint的bulk IN传输,主机发送一个ACK包。USB3.0标准优化了传输的初始化阶段,ACK和IN包合并到一个ACK包中了。对于SuperSpeed,主机发送ACK token来初始化bulk传输来代替之前的IN token。设备会用数据包来回应。主机之后再发送一个ACK包来表明收到数据包。若是endpoint很忙不能发送数据,设备会发送NRDY包。在这个情况下,主机一直等待直到ERDY包的到来。

猜你喜欢

转载自blog.csdn.net/z_hualin/article/details/80677105