USB2.0 中断传输和批量传输数据包的PID序列
2021-12-07
1908
0
其实在Windows下开发USB驱动时,USB的数据传输模式只有三种模式:
这一点在URB的结构体上表现的很清楚.
struct _URB_CONTROL_TRANSFER
UrbControlTransfer;
struct _URB_BULK_OR_INTERRUPT_TRANSFER
UrbBulkOrInterruptTransfer; //中断或批量传输
struct _URB_ISOCH_TRANSFER
UrbIsochronousTransfer; //同步传输
struct _URB_CONTROL_DESCRIPTOR_REQUEST
UrbControlDescriptorRequest;
struct _URB_CONTROL_GET_STATUS_REQUEST
UrbControlGetStatusRequest;
struct _URB_CONTROL_FEATURE_REQUEST
UrbControlFeatureRequest;
struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST
UrbControlVendorClassRequest;
struct _URB_CONTROL_GET_INTERFACE_REQUEST
UrbControlGetInterfaceRequest;
struct _URB_CONTROL_GET_CONFIGURATION_REQUEST
UrbControlGetConfigurationRequest;
其实微软基于这种的合并,也表现在其数据包序列上。
一句话:中断传输和批量传输的数据包PID序列是一样的。这里我们以批量方式为示例进行介绍。
批量传输数据包的序列,读数据和写入数据的PID序列是一致的。
端点在初始化后,从DATA0开始,每成功执行一个事务,数据包序列翻转一次(从DATA0变为DATA1或从DATA1变为DATA0).数据翻转和传输的个数没有直接关系,只由端点在初始化后处理的总数决定。
端点的数据翻转只有在端点重新初始化或者CLEAR_FEATURE(Endpoint Halt)后才恢复为DATA0.
批量传输写数据数据包的PID序列
批量传输读数据数据包的PID序列
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936