当前位置 博文首页 > dadalaohua的博客:【USB笔记】USB 2.0 包格式 数据包Data Packe

    dadalaohua的博客:【USB笔记】USB 2.0 包格式 数据包Data Packe

    作者:[db:作者] 时间:2021-07-27 14:43

    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

    cs