【コラム】

セカンド・オピニオン

307 USB 3.0の研究(34)

    大原雄介  [2009/10/23]

    次はTransaction Packet(TR)である。こちらはHostとDeviceの間でやりとりされるPacketだ。TRは8種類のSubTypeを持ち、まずこれを識別するために4bitのSubTypeフィールドが用意される(Photo01)では、具体的にもう少し見てみたい。

    Photo01: SubTypeはこの8種類。8種類なら3bitで済むわけだが、将来の拡張を考えて4bitにしたものと思われる。0000bと1001b~1111bはReservedになっており、Ackが0001b、NRDYが0010b、...と順に並び、Ping Responseが1000bになっている。

    ACK TP(Photo02)

    Photo02: TPの場合、先頭のDWORDはTypeとRoute String、Device Addressのみとなっており、SubTypeは2番目のDWORDに入る。これはHubのインプリメントでCut Through(先頭のDWORDだけを見てRoutingを判断し、転送する)が出来るようにということではないかと思う。仮に先頭のDWORDにSubTypeまで入れてしまうとRoute StringかDevice Addressが入りきらなくなるから、Hubは2番目のDWORDまで解釈せねばならず、処理時間が余分にかかり消費電力も無駄に増える形になる。

    ACKには2つの意味があり

    • IN endpoint: この場合、HostからDeviceがACKは送られ、直前にDeviceから送られたPacketがが正常受信した事をDeviceに通知する。
    • OUT endpoint: この場合、DeviceからHostにACKが送られ、直前にHostから送られたPacketが正常に受信出来たことをHostに通知する。同時にHostはDeviceに対し、あとどれだけバッファに余りがあるかを通知する
    • といった目的で利用される。各フィールドの意味は(Photo01にも多少入っているが)
    • Rty(Retrt Data Packet): 1bit

    これはHostなりDeviceなりが、実際にはData Packetを受け取っていない、あるいは受け取ったものの破損していることを検出し、再送要求を出す場合にSetする。この際に再送されるのは、後述するSequence Numberフィールドで指定されたものとなる。

    • D(Direction): 1bit

    送受信方向を示す。0ならばHost→Deviceの転送だし、1ならばDevice→Hostの転送となる。

    • Ept Num(Endpoint Number): 4bit

    各Deviceは、理論上15のIN EndpointとOUT Endpointを利用できる。例えばUSBで2ポートのSATAポートを持つブリッジを作った場合、IN #1とOUT #1を1つ目のSATAポートに、IN #2とOUT #2を2つ目のSATAポートにそれぞれ割り当てることが出来る。同時に複数のINなりOUTなりのトランザクションを実行できるわけではないから、これで高速化とかは不可能だが、開発の容易さを考えるとこれは便利だ。あるいはMultiFunction Deviceの場合、各々のFunctionにそれぞれ別のEndpoint Numberを割り振るなんていうこともあるだろう。こうした場合に、どのEndpointかをこのフィールドで指定する。

    • HE(Host Error): 1bit

    これはHost→Deviceの転送の場合にのみ関係する。Host側が自身の内部エラーなどでパケットを受け取れない(or解釈できない)場合にこれをセットする。ちなみにこれがセットされた場合、同時にRtyフィールドもセットする必要がある。

    • NumP(Number of Packets): 5bit

    このフィールドを使い、Data Packetの受信側は最大いくつのData Packetを受信できるかを指示する。このサイズは、Endpointがサポートする最大バースト転送長以下でなければならない。

    • SeqNum(Sequence Number): 5bit

    文字通りSequence Number。次に到着するData PacketのSequence Numberをここから算出することになる。

    • Stream ID: 16bit

    これはEndpointがバルク転送を行う場合に必要とされるStream IDを指定する。ちなみに値は1~65535までで、0はStream PIPE用に予約されている。バルク転送を行わない場合は0となる。

    • PP(Packet Pending): 1bit

    これもまたHostのみで使われる。これがSetされている場合、HostはEndpoint NumberとDirectionで示される、別のPacketを処理中であることが示される。ただし、存在しないEndpoint Numberが指定されている場合は、Hostが例えばU1とかU2のLow Power stateに入っており、このためにPacketの処理が留保されていることを示す。

    となっている(ちなみにRsvdはReservedの略)。

    (続く)

    関連したタグ

    新着記事

    特設サイトの情報

      人気記事

      一覧

      新着記事

      特別企画

      マイナビニュースマガジン