赞
踩
介绍的是USB 2.0协议中包格式(Packet Formats)的数据包(Data Packets)。
数据包(data packet)由一个PID、一个包含零个或多个字节数据的数据字段(data field)和一个CRC组成。有四种类型的数据包,由不同的PID标识:DATA0、DATA1、DATA2和MDATA。
这些PID标识共有以下三种使用情况:
在用于支持数据切换同步(data toggle synchronization)时使用两个数据包PID(data PIDs):DATA0和DATA1。
在用于高带宽高速等时端点(high bandwidth high-speed isochronous endpoints)的数据PID排序(data PID sequencing)中,使用了全部四个数据PID(data PIDs):DATA0、DATA1、DATA2和MDATA。
在拆分事务(split transactions)中使用了三个数据PID(data PIDs):MDATA、DATA0、DATA1。
数据包(data packet)的包格式(Packet Formats)如图所示:
数据必须始终以整数字节数发送。数据CRC(data CRC)只对数据包中的数据字段(data field)进行计算,不包括PID,PID有自己的校验字段。
低速设备(low-speed devices)允许的最大数据有效负载大小为8个字节(bytes)。全速设备(full-speed devices)的最大数据有效负载大小为1023个字节(bytes)。高速设备(high-speed devices)的最大数据有效负载大小为1024个字节(bytes)。
下面进行介绍。
偶数数据包PID(Data packet PID even),用于数据切换(data toggle)或者数据PID排序(data PID sequencing)。
Type | Value |
---|---|
PID Type | Data |
PID Name | DATA0 |
PID<3:0> | 0011B |
PID value<7:0> | 0xC3 |
Transfer types used in | control, bulk, interrupt, isochronous |
Transaction Type | SETUP, OUT, IN |
Source | host, device |
Bus Speed | high, full, low |
Description | Data packet PID even |
下面看下DATA0在各种事务Transaction中的位置
Bulk Transaction
Control Transaction
Control SETUP Transaction
Control Read and Write Sequences
Interrupt Transaction
Isochronous Transaction
数据切换同步(data toggle synchronization)
数据切换同步(data toggle synchronization)用于以保证数据发送器和接收器在多个事务中的数据序列同步。通过使用DATA0和DATA1 PID以及数据发送器和接收器的单独数据切换序列位来实现同步。
当主机在开机或连接时配置设备时,除了高速高带宽等时端点之外,所有主机和设备都将切换数据序列位设置为DATA0。 数据发送器仅在收到对数据包的ACK之后才切换其序列位。 接收器仅在接收到有效数据包且数据包的数据PID与其序列位的当前值匹配时才切换其序列位。 如下图所示:
数据PID排序(data PID sequencing)
数据PID排序(data PID sequencing)用于为数据接收器提供可以检测每个微帧(microframe)的一个或多个丢失/损坏的包。高带宽等时端点(High bandwidth isochronous endpoints)支持数据PID排序(data PID sequencing)。DATA0在数据PID排序(data PID sequencing)的使用参照下面DATA2部分或者可以参考数据PID排序data PID sequencing。
奇数数据包PID(Data packet PID odd),用于数据切换(data toggle)或者数据PID排序(data PID sequencing)。
Type | Value |
---|---|
PID Type | Data |
PID Name | DATA1 |
PID<3:0> | 1011B |
PID value<7:0> | 0x4B |
Transfer types used in | control, bulk, interrupt, isochronous |
Transaction Type | OUT, IN |
Source | host, device |
Bus Speed | high, full, low |
Description | Data packet PID odd |
DATA1在各种事务Transaction中的位置和应用参照DATA0。
在高速高带宽等时事务的微帧中的数据包PID,用于数据PID排序(data PID sequencing)。
Type | Value |
---|---|
PID Type | Data |
PID Name | DATA2 |
PID<3:0> | 0111B |
PID value<7:0> | 0x87 |
Transfer types used in | isochronous |
Transaction Type | OUT, IN |
Source | host, device |
Bus Speed | high |
Description | Data packet PID high-speed, high bandwidth isochronous transaction in a microframe |
DATA2在High Bandwidth Isochronous Endpoints中的使用:
高速、高带宽等时IN端点(high-speed, high bandwidth isochronous IN endpoint)的数据PID排序(data PID sequencing),对微帧(microframe)中每个事务(transaction)的数据包(data packet)采用DATA2、DATA1、DATA0 PID的重复序列。
如果每个微帧(microframe)有三个事务,那么第一个事务数据包(transaction data packet)使用DATA2,第二个事务数据包(transaction data packet)使用DATA1,第三个事务数据包(transaction data packet)使用DATA0。
高速、高带宽等时OUT端点(high-speed, high bandwidth isochronous OUT endpoint)的数据PID排序(Data PID sequencing)与IN端点使用的序列不同。
当每个微帧(microframe)有三个事务(transaction)时,主机必须发出两个MDATA事务和一个DATA2用于第三次事务。
高速中拆分和高带宽等时事务的数据包PID,用于数据PID排序(data PID sequencing)和拆分事务(split transactions)。
Type | Value |
---|---|
PID Type | Data |
PID Name | MDATA |
PID<3:0> | 1111B |
PID value<7:0> | 0x0F |
Transfer types used in | isochronous, split transactions |
Transaction Type | OUT, IN |
Source | host, device |
Bus Speed | high |
Description | Data packet PID high-speed for split and high bandwidth isochronous transactions |
MDATA在High Bandwidth Isochronous Endpoints中的使用可以参照DATA2。
SETUP
OUT
Universal Serial Bus Specification Revision 2.0
USB Complete, 5th Edition
本文链接:https://blog.csdn.net/u012028275/article/details/113796198
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。