Route Stringの話も終わったところで、いよいよ実際のパケットである。Link LayerではパケットはTransmitter/Receiverそれぞれが必要に応じてパケットを送る(といっても、大半はTransmitter側だが)事になるが、Protocol Layerでは基本的に全てのTransactionがHost側から始まることになる。つまりHostとEndpoint、どちらがデータの送り側であっても、TransactionそのものはHost側から始まる形だ。そしてTransactionの最後はEndpoint側からデータの送信ないしデータ受信通知を送る形で終了する。この管理は全てHostが行っているから、例えば複数のTransactionを同時に進行させる事も可能だが、Transactionの種類によっては制約がある(特にEndpoint→Hostの場合)事や、異常状態(NRDYとかSTALL TPといったPacketが返ってきた場合)には相応の配慮が必要な事もあり、常に複数Transactionを同時に進行させられるわけではない。このあたりはまた後で触れたいと思う。

さて、ではPacket TypeとFormatについて紹介したい。Protocol Layerでは大別して4種類のPacket Typeが定義され、更にSub Typeを幾つか持つ。4種類のTypeとは、

LINK Management Packet(LMP) Link制御。これはHostとEndpointではなく、各々のLinkの間でのみやりとりされる。
Transaction Packet(TP) Transaction制御。これはHostとDevice(Endpoint)の間で交換される。データパケットのフロー制御とかDevice/HubのConfigurationなどに利用される。TPはData Payloadを持たない。
Data Packet(DP) HostとEndpointの間のデータ交換に利用される。DPはData Packet Header(DPH)とData Packet Payload(DP)の2パートから構成される
Isochronus Timestamp Packet(ITP) HostからのTreeにぶら下がっている全てのデバイスにMulticastされるPacket

となっている。

Photo01: これはTransaction Packetのもの

基本的なPacket FormatはPhoto01の様になっている。もっとも、4種類のPacketで共通なのはこのうち、

  • DWORD 0のType field
  • DWORD 3のCRC-16
  • DWORD 3のLink Control Word

のみで、あとはPacket毎に異なっているのが実情だ。このうちType fieldは先に示した4種類のPacketを5bitで示している。具体的には、

00000b LMP
01000b DPH
00100b TP
01100b ITP

となっており(これ以外の値はInvalid)、5bitもとっていながら、実際には2bitしか使っていない。ちなみにSubtypeを持つPacketは、ここではなくこれに続くFieldにSubtypeを示すfieldが用意されるので、ここは2bitが使われるのみである。おそらく将来の拡張に備えてのReserveだと思うが、何でこんなにゆとりをとったのか、機会があれば聞いてみたいところだ。

CRC-16はもうそのまんまで、DWORD 0/1/2の12Bytes分のデータについて16bitのCRCを生成して格納する。続くLink Control Wordは連載の298回で触れたのでここでは割愛する。これら3つのフィールドは全てのPacket Typeで共通な項目だ。ではPacket Type毎に独自の部分は? ということで、まずはLMPから紹介して行きたい。

Photo02: 現時点で用意されているSubTypeは6種類なので、これだけで3bit占有する。将来の拡張性を考えて1bit追加、といったあたりか。Type Fieldに比べると順当な気がする

LMPのフォーマットはこんな具合だ(Photo02)。最初の3つ以外だと、4bitのSubTypeが加わった程度で、あとはSubType毎にばらばらである。ちなみにSubTypeのFieldは、

0000b Reserved
0001b Set Link Function
0010b U2 Inactivity Timeout
0011b Veder Device Test
0100b Port Capability
0101b Port Configuration
0110b Port Configuration Response
その他 Reserved

となっている。

(続く)