【USB笔记】USB 2.0 包格式 数据包Data Packets

USB笔记 USB2.0 包格式Packet Formats 数据包Data Packets

说明

介绍的是USB 2.0协议中包格式(Packet Formats)的数据包(Data Packets)。

介绍

数据包(data packet)由一个PID、一个包含零个或多个字节数据的数据字段(data field)和一个CRC组成。有四种类型的数据包,由不同的PID标识:DATA0、DATA1、DATA2和MDATA。

这些PID标识共有以下三种使用情况:

  1. 数据切换同步(data toggle synchronization)

在用于支持数据切换同步(data toggle synchronization)时使用两个数据包PID(data PIDs):DATA0和DATA1。

  1. 数据PID排序(data PID sequencing)

在用于高带宽高速等时端点(high bandwidth high-speed isochronous endpoints)的数据PID排序(data PID sequencing)中,使用了全部四个数据PID(data PIDs):DATA0、DATA1、DATA2和MDATA。

  1. 拆分事务(split transactions)

在拆分事务(split transactions)中使用了三个数据PID(data PIDs):MDATA、DATA0、DATA1。

数据包(data packet)的包格式(Packet Formats)如图所示:
Data Packet Format

数据必须始终以整数字节数发送。数据CRC(data CRC)只对数据包中的数据字段(data field)进行计算,不包括PID,PID有自己的校验字段。

低速设备(low-speed devices)允许的最大数据有效负载大小为8个字节(bytes)。全速设备(full-speed devices)的最大数据有效负载大小为1023个字节(bytes)。高速设备(high-speed devices)的最大数据有效负载大小为1024个字节(bytes)。

下面进行介绍。

DATA0

偶数数据包PID(Data packet PID even),用于数据切换(data toggle)或者数据PID排序(data PID sequencing)。

TypeValue
PID TypeData
PID NameDATA0
PID<3:0>0011B
PID value<7:0>0xC3
Transfer types used incontrol, bulk, interrupt, isochronous
Transaction TypeSETUP, OUT, IN
Sourcehost, device
Bus Speedhigh, full, low
DescriptionData packet PID even
DATA0在事务中的位置

下面看下DATA0在各种事务Transaction中的位置

  1. Bulk Transaction
    Bulk Transaction Format

  2. Control Transaction
    Control SETUP Transaction
    Control SETUP Transaction

Control Read and Write Sequences
Control Read and Write Sequences

  1. Interrupt Transaction
    Interrupt Transaction

  2. Isochronous Transaction
    Isochronous Transaction

DATA0的应用
  1. 数据切换同步(data toggle synchronization)
    数据切换同步(data toggle synchronization)用于以保证数据发送器和接收器在多个事务中的数据序列同步。通过使用DATA0和DATA1 PID以及数据发送器和接收器的单独数据切换序列位来实现同步。
    当主机在开机或连接时配置设备时,除了高速高带宽等时端点之外,所有主机和设备都将切换数据序列位设置为DATA0。 数据发送器仅在收到对数据包的ACK之后才切换其序列位。 接收器仅在接收到有效数据包且数据包的数据PID与其序列位的当前值匹配时才切换其序列位。 如下图所示:
    data toggle

  2. 数据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

DATA1

奇数数据包PID(Data packet PID odd),用于数据切换(data toggle)或者数据PID排序(data PID sequencing)。

TypeValue
PID TypeData
PID NameDATA1
PID<3:0>1011B
PID value<7:0>0x4B
Transfer types used incontrol, bulk, interrupt, isochronous
Transaction TypeOUT, IN
Sourcehost, device
Bus Speedhigh, full, low
DescriptionData packet PID odd

DATA1在各种事务Transaction中的位置和应用参照DATA0。

DATA2

在高速高带宽等时事务的微帧中的数据包PID,用于数据PID排序(data PID sequencing)。

TypeValue
PID TypeData
PID NameDATA2
PID<3:0>0111B
PID value<7:0>0x87
Transfer types used inisochronous
Transaction TypeOUT, IN
Sourcehost, device
Bus Speedhigh
DescriptionData packet PID high-speed, high bandwidth isochronous transaction in a microframe

DATA2在High Bandwidth Isochronous Endpoints中的使用:

  1. Data Phase PID Sequence for Isochronous IN High Bandwidth 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。
Data Phase PID Sequence for Isochronous IN High Bandwidth Endpoints

  1. Data Phase PID Sequence for Isochronous OUT High Bandwidth Endpoints

高速、高带宽等时OUT端点(high-speed, high bandwidth isochronous OUT endpoint)的数据PID排序(Data PID sequencing)与IN端点使用的序列不同。

当每个微帧(microframe)有三个事务(transaction)时,主机必须发出两个MDATA事务和一个DATA2用于第三次事务。
Data Phase PID Sequence for Isochronous OUT High Bandwidth Endpoints

MDATA

高速中拆分和高带宽等时事务的数据包PID,用于数据PID排序(data PID sequencing)和拆分事务(split transactions)。

TypeValue
PID TypeData
PID NameMDATA
PID<3:0>1111B
PID value<7:0>0x0F
Transfer types used inisochronous, split transactions
Transaction TypeOUT, IN
Sourcehost, device
Bus Speedhigh
DescriptionData packet PID high-speed for split and high bandwidth isochronous transactions

MDATA在High Bandwidth Isochronous Endpoints中的使用可以参照DATA2。

示例

  1. SETUP
    SETUP

  2. OUT
    OUT

OUT

  1. IN
    IN

参考资料

Universal Serial Bus Specification Revision 2.0

USB Complete, 5th Edition


本文链接:https://blog.csdn.net/u012028275/article/details/113796198

为了深入理解USB2.0数据包的传输机制,理解同步字段和包标识符(PID)的作用至关重要。在USB2.0协议中,每个数据包的开头都包含了同步字段,其目的是帮助接收端对齐本地时钟,确保数据的正确解码。对于全速和低速模式,同步字段为8字节,而高速模式则需要32字节的同步字段。同步字段通常由一系列的高频率边沿转换构成,使得设备能够识别数据包的开始。 参考资源链接:[USB2.0协议详解:同步字段与包标识符解析](https://wenku.csdn.net/doc/1129k4psd9?spm=1055.2569.3001.10343) 包标识符(PID)是USB2.0数据包的一个核心组成部分,它位于同步字段之后,包含了4位的包类型和4位的校验字段。PID不仅标识了数据包的类型(如起始包、数据包、握手包等),而且还包含了对数据包进行错误检测的机制。校验字段是通过对数据包内容进行取反运算得到的,接收端通过重新计算校验字段来验证数据的完整性。如果校验失败,接收端会认为该数据包已损坏,并根据协议要求进行相应的错误处理。 在数据传输过程中,发送端会先发送同步字段,然后发送PID,接着是数据字段,最后是握手包。接收端在识别到同步字段后,会等待PID的到来,并根据PID的类型和内容来处理后续的数据包。例如,在控制传输中,数据传输阶段的开始由带有数据0PID的数据包标记,数据传输完成后,通过握手包(ACK或NAK)来确认传输是否成功。 通过这种结构,USB2.0协议确保了数据传输的可靠性和错误检测机制的完整性。为了进一步了解这些机制的细节及其在USB通信中的应用,建议参阅《USB2.0协议详解:同步字段与包标识符解析》这份资料。文档提供了USB2.0协议层的全面解析,涵盖了同步字段和包标识符的定义、作用以及它们如何共同确保数据正确传输和接收的详细描述,是深入研究USB技术的宝贵资源。 参考资源链接:[USB2.0协议详解:同步字段与包标识符解析](https://wenku.csdn.net/doc/1129k4psd9?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值