usb transaction与transfer

来源:互联网 发布:僵尸相机软件 编辑:程序博客网 时间:2024/06/01 07:45

transaction概念

一个transfer中有一个或者多个transaction

bulk传输中的transaction

这里写图片描述
一个bulk transfer out transaction由OUT token, DATA token和ACK token构成
一个bulk transfer in transaction由IN token, DATA token和ACK token构成


control传输中的transaction

这里写图片描述
只有两个阶段的control传输有两次transaction:
SETUP transaction,由SETUP token, DATA token和ACK token构成
IN transaction,由IN token, DATA token和ACK token构成

有三个阶段的control传输有三次transaction:
SETUP transaction,由SETUP token, DATA token和ACK token构成
IN transaction,由IN token, DATA token和ACK token构成
OUT transaction,由OUT token, DATA token和ACK token构成

以上不管是两个阶段(setup阶段,status阶段)还是三个阶段(setup阶段,data阶段,status阶段)的control传输,最后一个status阶段会发送一个零长包。


transfer概念

A bulk transfer is complete when the endpoint does one of the following:
• Has transferred exactly the amount of data expected
这里写图片描述

这里写图片描述

• Transfers a packet with a payload size less than wMaxPacketSize or transfers a zero-length packet
这里写图片描述


零长包

零长包只有在以下几种情况才会出现:

control传输的最后一个阶段

这里写图片描述


bulk out传输发送完maxpacket size后

如果上层软件bulk out传输时在urb->transfer_flags设置了URB_ZERO_PACKET,那么在发送完maxpacket size大小的数据后,会再发送一个零长包代表transfer结束。不过一般不会这么用,一般只要把数据传输完了之后就不用在发送额外的零长包了。

0 0
原创粉丝点击