usb的bulk传输

网上看到的一些论坛:http://bbs.21ic.com/icview-334294-1-1.html  里面有讨论

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、1024bytes。

1、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例子

一开始,主机给一个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传输的例子。

一开始,主机发送了一个数据包来初始化一个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 例子

一开始,主机发送一个包含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传输的例子。

为了初始化一个SuperSpeed endpoint的bulk IN传输,主机发送一个ACK包。

USB3.0标准优化了传输的初始化阶段,ACK和IN包合并到一个ACK包中了。

对于SuperSpeed,主机发送ACK token来初始化bulk传输来代替之前的IN token。设备会用数据包来回应。主机之后再发送一个ACK包来表明收到数据包。

若是endpoint很忙不能发送数据,设备会发送NRDY包。在这个情况下,主机一直等待直到ERDY包的到来。

参考 How to send USB bulk transfer requests
--------------------- 
作者:水木无痕 
来源:CSDN 
原文:https://blog.csdn.net/yxfabcdefg/article/details/52998813 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值