近年、AV機器やコンピュータ機器等を接続するディジタルインターフェースとして、IEEE1394方式が注目されている。この方式は、従来のSCSI方式等によるコンピュータ機器間の通信のみならず、AV機器間での通信にも用いることが出来るものである。これは、IEEE1394方式が、アシンクロナス(Asynchronous)通信とアイソクロノス(Isochronous)通信とが定義されているためである。アシンクロナス通信は、コンピュータデータの伝送のような、リアルタイム性が要求されず、しかも信頼性がより要求されるデータの伝送に用いられる伝送であり、アイソクロノス通信は、動画のAVデータ等のような、信頼性以上にリアルタイム性が要求されるデータの伝送に用いられる。従って、一般的にIEEE1394方式を用いて、例えばコンピュータデータをDVD−RAMドライブ装置等に格納したり、DVD−RAMドライブ装置から記録済みのコンピュータデータを読み出したりする際には、アシンクロナス通信により、データが伝送される。
このアシンクロナス通信を用いて、ホストコンピュータ(イニシエータ)とターゲットとの間のプロトコルについてはSBP−2(SerialBusProtocol−2)が現在ANSIにて審議されている。
このプロトコルに従って、ターゲット、例えばDVD−RAMドライブ等からデータをホストコンピュータ(イニシエータ)が読み込む場合、つまりREADコマンドが発行された場合の動作について、図6を用いて説明する。
図6はIEEE1394バス上でSBP−2を用いて、イニシエータとターゲット間でデータの転送を行う場合の、プロトコルの動作説明図である。
また、図7はIEEE1394で定義されている非同期パケットの一部の構造を示すパケット構造図である。IEEE1394では、動作の要求を行うための要求パケット(リクエストパケット)と要求パケットによって要求された動作の結果を返すための応答パケット(レスポンスパケット)が定義されている。いずれのパケットに対しても、パケットを受信した場合には、パケットの受信状態を示すアクノリッジパケット(acknoledgepacket、以下Ackパケットと略す)を相手機器に返す。Ackパケットには、処理完了を示すack_complete、受信は完了したが処理中であることを示すack_pending、再送要求を示すack_busy等の状態を示す。要求パケットと応答パケットとは通常対をなして使用されるが、Ackパケットの内容によってはAckパケットの受信で処理が完了する場合もある。
図7において、(a)、(b)、(d)は要求パケットであり、それぞれブロックデータ書き込み要求パケット(Write request for data block packet、以下BWRQと略す)、クワドレットデータ書き込み要求パケット(Write request for data quadlet packet、以下QWRQと略す)、ブロックデータ読み込み要求パケット(Read request for data block packet、以下BRRQと略す)であり、書き込み要求パケットに対する応答パケットとして(c)に示す書き込み応答パケット(Write response packet、以下WRSパケットと略す)が定義されており、またBRRQパケットに対する応答パケットとして(e)に示すブロックデータ読み込み応答パケット(Read response for data block packet、以下BRRSパケットと略す)が定義されている。いずれの場合もパケットの種類を識別するパケット識別情報tcode(transaction code)とパケットラベル情報tl(transaction label、トランザクション固有のタグ情報)が含まれており、また応答パケットの場合には、応答状態をしめす応答識別情報rcode(responsecode)が含まれている。従って、パケット識別情報tcodeによりトランザクションの種類が識別でき、またパケットラベル情報tlにより対をなす要求パケットと応答パケットを認識することができる。
なお、詳細については、IEEE1394−1995規格書を参照されたい。
図6、図7を用いて、その動作を説明するが、データ転送を行う前には、種々のやり取りが行われるが、ここでは省略し、イニシエータからREADコマンドが発行される際のプロトコルについて説明する。
(1)データを転送しようとすると、まずイニシエータは、ターゲット側のCSR(Control and Status Registers)空間に定義されているCommand Block Agent RegistersのAGENT_RESETレジスタ宛にQWRQパケットを発行し、command block fetch agentをリセットする。
(2)イニシエータはQWRQパケットに対して、ターゲットから返される以下Ackパケットがack_completeであるか、或いはAckパケットがack_pendingで返され、その後ターゲットからのrcodeが処理完了(resp_complete)を示すWRSパケットが返されると、イニシエータは、ターゲット側のORB_POINTERレジスタ宛に、自らのシステムメモリ内に作成しておいたORB’s(Operation request blocks)のアドレスをデータフィールドに含むBWRQパケットを発行し、ターゲット側のORB_POINTERレジスタに書き込む。ORBは、イニシエータからのコマンドを含むものである。ターゲットは書き込まれたBWRQパケットに含まれるORBが格納されたイニシエータのシステムメモリアドレスに対して、BRRQパケットを発行する。イニシエータはこのBRRQパケットを受信すると、その応答パケットであるBRRSパケットのデータフィールドにORBを格納し送信する。この様にして、ターゲットはイニシエータからORB、つまりコマンドを受け取る。
(3)ターゲットは、受け取ったORBを解析し、READコマンドであった場合、転送すべきデータが準備できると、そのデータをデータフィールドに含んだBWRQパケットを、READコマンドが含まれるORBで指定されたイニシエータのシステムメモリアドレスに対して発行し、データを書き込む。この時、パケットの大きさは、IEEE1394バスの転送速度等に依存するために、大量のデータを転送しようとすると、データを複数個のパケットに分割して、転送を行うことになる。この時、転送のタイミングとしては、1つのトランザクションが完了する、つまり要求パケットに対して処理完了をしめすAckパケットが受信されるか、あるいは受信完了処理中を示すAckパケットが受信され、その後要求パケットに対して対となる応答パケットが受信されることを確認しながら行われる。
(4)ORBで指定されたデータ長の転送が全て終了すると、ターゲットは、予めイニシエータが指定したアドレスにREADコマンドに対するステータスをBWRQパケットを用いて書き込む。
以上で、READコマンドに関する一連の動作が完了する。
これらのトランザクションのうち、イニシエータがターゲットから送られたBWRQパケットを受信できない場合、再送要求を示すAckパケットをイニシエータが返すことにより、リトライ(再送)を行うことが出来る。
同様に、WRITEコマンドの場合は、データの転送時には、ターゲットがイニシエータのシステムメモリ中に格納されたデータをBRRQパケットを利用して、読み込み、例えばDVD−RAMディスクに書き込む。
このような、送受信を行うデータ伝送装置として、図8に示されるような構成があげられる。図8に示すように、基本構成としては、物理層コントローラ(PHY)100と、リンク層コントローラ(LINK)101と、CPU102と、DMAコントローラ103と、ローカルメモリ104とからなる。物理層コントローラ100は、バスのイニシャライズ、データのエンコード/デコード、アービトレーション、バイアス電圧の出力/検出などの機能を持つ。またリンク層コントローラ101は、誤り検出符号の生成/検出、パケットの生成/検出、パケット送出のリトライ動作等の機能を持つリンクコア部101a、送受信パケット用のFIFO101b、コンフィグレーションROM101c、インターフェース部101d等から構成される。このFIFOは、送信用FIFO(ATF)と受信用FIFOを持ち、そのサイズは最大転送パケットサイズと等しいことが多い。
また、SBP−2規格では、LOGIN、QUERYLOGINS、ABORT TASK等のタスク管理系のコマンドが定義されている。これは、図6のORB_POINTERへのBWRQパケットによるアクセスの代わりに、SBP−2規格で定義されるManagementAgentレジスタへアクセスし、その後上記のタスク管理系のコマンドを含むManagementORBをBRRQパケットで読み込み、そのレスポンスのBRRSパケットに含まれるManagementORB(タスク管理系のコマンドが含まれる)ターゲット側で解析し、コマンドを実行することにより行われる。例えば、データ転送中であっても、イニシエータがデータ転送を途中で終了させるために発行されたABORT TASKコマンドの処理は、データ転送中であっても処理されなければ、イニシエータの意図通りにターゲットが動作しないので、データ転送中であってもタスク管理系コマンド処理を行わなければならない。
IEEE Std 1394-1995 IEEE Standard for a High Performance Serial Bus -Description(http://standards.ieee.org/reading/ieee/std_public/description/busarch/1394-1995_desc.html)
以下、図面を参照して本発明の実施の形態を詳細に説明するが、これによって本発明の技術的範囲が制限されるものではないのはもちろんである。
(実施の形態1)
以下本発明の一実施の形態について、図面を参照しながら説明する。
図1は、本発明の第一の実施の形態のデータ伝送装置の構成図である。1はコマンドを発行したりするホストコンピュータ(以降イニシエータとも呼ぶ)で、2はDVD−RAMドライブ装置(以降ターゲットとも呼ぶ)である。ホストコンピュータ1とDVD−RAMドライブ装置2は、IEEE1394シリアルバス3を介して接続されている。4は送受信回路で、物理層コントローラ(PHY)41とリンク層コントローラ(LINK)42とからなっており、物理層コントローラ41は、バスのイニシャライズ、データのエンコード/デコード、アービトレーション、バイアス電圧の出力/検出等の機能を持ち、リンク層コントローラ42は、誤り訂正符号の生成/検出、パケットの生成/検出等の機能を持つ。5はコマンド等を受信するための受信専用バッファで、6はステータス等を送信するための送信専用バッファ、7はデータを送受信するための送受信兼用バッファである。8は受信用フィルタであり、データ受信時には、イニシエータ1からのデータの送信を要求する要求パケットに対応するデータフィールドにデータが含まれた応答パケットが受信された場合には、その受信された応答パケットの格納先を送受信兼用バッファにし、それ以外のパケットが受信された場合には、その格納先を受信専用パケットにするように動作する。またイニシエータ1にデータを送信する時には、受信されたパケットのうち、パケットラベル情報とパケット識別情報と応答識別情報とから、データフィールドに送信するデータを含む要求パケットに対して対をなす応答パケットが受信されたと判断されると、後述するパケット処理回路10にその受信を知らせ、それ以外のパケットが受信された場合には、受信専用バッファに格納するように動作する。
9は同様に、データ転送時において、送信するパケットを送信専用バッファ6に格納するか、或いは送受信兼用バッファ7に格納するかを送信するパケットのパケット識別情報(tcode)により選択する送信用フィルタである。さらに10は、受信されたパケットから必要なデータのみを抜き出し、光ディスクコントローラ(以降ODCと呼ぶ)13にDMAバス14を介して転送するためのデータに変換したり、或いは光ディスク16から読み出されたデータを所定のアナログ信号処理を施すアナログ信号処理回路15を経て、ODC13で復調や誤り訂正処理等が施されたデータにヘッダを付与したり、パケット化を行うパケット変換回路である。
また図2は、1394シリアルバス3上に送出するために、リンク層コントローラ42に書き込まれる、或いは1394シリアルバス3から受信されたパケットをリンク層コントローラ42から読み出される際の各パケットの構造を示す。図2中の斜線部分は、リザーブ領域である。具体的に示すと、図2(a)は、図7(a)に示すBWRQパケットを送信するためのリンク層コントローラ42に書き込まれる、つまりパケット処理回路10やマイコン11により各バッファに書き込まれるパケット構成を示す。図2(b)は図7(b)に示すQWRQパケットをリンク層コントローラ42に書き込む際のパケット構造である。また図2(c)は図7(c)に示すWRSパケットを受信し、リンク層コントローラ42から読み出される際のパケット構成を示し、図2(d)は図7(d)に示すBRRQパケットを送信するためにリンク層コントローラ42に書き込まれる際のパケット構成である。さらに図2(e)は図7(e)に示すBRRSパケットが受信され、リンク層コントローラ42から読み出される際のパケット構成を示す。これら図2で示したパケットのうち送信パケットは、図7に示すように、header_CRCやdata_CRCの計算やsource_IDの付加等のパケットの再構成がリンク層コントローラ42で行われ、また受信されたパケットに対しては、CRCによる誤り検出等がリンク層コントローラ42で行われる。
そして、図3及び図4は本実施の形態のデータ伝送装置の動作を説明する動作説明図である。図4はイニシエータ1がターゲット2のデータを読み込む、つまりイニシエータ1がREADコマンドを発行した場合の本実施の形態の動作説明図であり、図5はイニシエータ1がターゲット2にデータを格納する、つまりイニシエータ1がWRITEコマンドを発行した場合の本実施の形態の動作説明図である。
図3において、横軸に時間をとり、(1)はパケット処理回路10の動作状態を、(2)は送受信兼用バッファ(DTRF)7の内部に格納されたパケットの状態、(3)は1394シリアルバス3上の状態、(4)は受信用フィルタ8の状態を示し、(5)は、送受信兼用バッファ7の内部状態を示し、白丸はパケット処理回路10によりDTRFに書き込まれる際の書き込みアドレスポインタを示し、黒丸はリンク層コントローラ42に書き込まれる際に送受信兼用バッファ7から読み出される際の読み出しアドレスポインタを示す。この時、送受信兼用バッファ7の容量は2×kクワッドレットで表す。
また図4において、(1)から(3)は図3と同じで、(4)は送信専用バッファ6の状態を示す。(5)は図3(5)と同様に送受信兼用バッファ7の内部状態を示し、白丸は受信されたパケットがリンク層コントローラ42から読み出され送受信兼用バッファ7に書き込まれる際の書き込みアドレスポインタを示し、黒丸は送受信兼用バッファ7からパケット処理回路10により読み出される際の読み出しアドレスポインタを示す。同様に、送受信兼用バッファ7の容量は2×kクワッドレットで表す。
さらに、IEEE1394を介してデータを転送する際には、その転送速度によりパケットの転送可能な最大ペイロードサイズは規定されるので、転送速度に応じたパケットを格納できるサイズのバッファ量が必要となるが、本実施の形態では、送受信兼用バッファ7のバッファサイズは、データを転送する際に用いられるパケット、つまりSBP−2プロトコルの場合は、READコマンドではBWRQパケット、WRITEコマンドではBRRSパケットであるので、これらのパケットサイズの2倍であるとする。上述したようにパケットのデータフィールドの最大サイズは転送速度に応じてIEEE1394規格により定義されている。従って、本実施の形態では、転送速度をS400であるとし、転送可能なパケットに含まれるデータ部のサイズは2048バイト(512クワッドレット)であり、本実施の形態では、送受信兼用バッファ7のパケットサイズを図2(a)または(e)に示す様に、ヘッダフィールド及びデータフィールドの最後の1クワドレットを加えて(2048+16+4)×2=4136バイトとする。
以上の様に構成された本実施の形態の動作について、図面を用いて説明する。
まず、READコマンドがイニシエータ1から発行される場合について、その動作を説明する。1回のREADコマンドで、イニシエータ1から要求されるデータ長を64kBとする。従って、64kBのデータを転送するためには、データを転送するパケットのデータフィールドのサイズが2kBであるので、32回に分けてデータ転送が行われる。
(1)イニシエータ1は、自らのメモリ内にREADコマンドのCDBを含むORBを作成する。
(2)イニシエータ1はターゲット2のORB_POINTERレジスタに、ORBを作成したメモリの1394空間上のアドレスをBWRQパケットによりターゲット2に送信する。
(3)ターゲット2は、(2)で送られたORBが格納されたアドレスに対して、BRRQパケットを発行し、イニシエータ1はORBを含むBRRSパケットをターゲット2に返す。
(4)ターゲット2は受信したBRRSパケットに含まれるCDBを取り出し、READコマンドを確認後、ドライブから必要なデータを読み出すために初期設定を行う。この時、パケット処理回路10に、レジスタ12を経由して、マイコン11からREADコマンドで指定されたデータ格納先を示すイニシエータ1のシステムメモリ領域のアドレス、イニシエータ1のID等のヘッダ情報が書き込まれる。
また、受信用フィルタ8には、データ送信時であるので、WRSパケットを受信し、そのパケットに含まれる応答識別情報(rcode)が処理完了(resp_complete)であり、かつパケットラベル情報tlがデータを送信するための要求パケット、BWRQパケットのそれと一致すれば、パケット処理回路10に検出信号を送り、また受信したパケットがWRSパケット以外(パケット識別情報で判断)か、あるいは受信されたパケットがWRSパケットであっても、データを送信するための要求パケット、BWRQパケットに格納されたパケットラベル情報tlと受信したWRSパケットのパケットラベル情報が一致しない場合、あるいは受信したパケットであり、パケットラベル情報tlも一致したが、応答識別情報rcodeが処理完了を示すresp_complete以外であれば、その受信されたパケットは受信専用バッファ5に受信されたパケットが格納されるように設定しておく。
起動がかけられると、パケット処理回路10に設定されたヘッダ情報に続いて、指定されたデータがディスクから読み出され、アナログ信号処理回路15を介して、光ディスクコントローラ13で復調処理や誤り訂正処理が施され、パケット処理回路10に入力される。
(5)(4)で書き込まれたヘッダ情報とデータとから2048バイトのデータフィールドを持つ図2(a)に示すパケット構成で送受信兼用バッファ7に書き込む(図3のSTEP1)。
(6)1パケットを構成するすべてのデータが書き込まれると、送受信兼用バッファ7からリンク層コントローラ42で図7(a)に示すようなCRCを付加したりしてBWRQパケットを作成し、物理層コントローラ41でアービトレーションを行い、バスの使用権を確保した後、イニシエータ1に送られる。同時に、次のパケットをパケット処理回路10で作成し、送受信兼用バッファ7に書き込まれる。このパケットのdestination_offsetフィールドには先に送信したパケットのdestination_offsetフィールドに書き込んだアドレスに2048を加えたアドレスが書き込まれる。図3では、この時、既に送られたBWRQパケットに対して、処理完了(ack_complete)を示すAckパケットが、図2(a)で示すパケットの最後の1クワッドレットのデータを送受信兼用バッファ7に書き込まれる前にリンク層コントローラ42で検出されているので、続けてこの最後の1クワッドレットデータを書き込む(図3のSTEP2)。
(7)最後の1クワッドレットのデータが送受信兼用バッファ7に書き込まれるとリンク層コントローラ42に出力され、リンク層コントローラ42で図7(a)で示すBWRQパケットを構成し、物理層コントローラ41でのアービトレーション後、出力される。と同時に、次のパケットをパケット処理回路10で作成し、送受信兼用バッファに書き込まれる。
同様に、このパケットのdestination_offsetフィールドには先に送信したパケットのdestination_offsetフィールドに書き込んだアドレスに2048を加えたアドレスが書き込まれる。
この時、先に送られたBWRQパケットに対して、受信完了処理中(ack_pending)を示すAckパケットがリンク層コントローラ42で検出されると、パケット処理回路10は、図2(a)で示すパケットの最後の1クワッドレットのデータを送受信兼用バッファ7に書き込まずに、図7(c)で示したWRSパケットがイニシエータ1から送信されるのを待つ。そして、WRSパケットが受信され、リンク層コントローラ42を介して受信用フィルタ8で、WRSパケットであることを示すパケット識別情報(tcode)が検出されかつ、応答識別情報(rcode)が処理完了(resp_complete)で、かつパケットラベル情報tlがデータを送信した要求パケットBWRQパケットのパケットラベルtlに一致することが検出されれば、パケット処理回路10に再起動信号が送られる。パケット処理回路10は、その検出信号を受けて、最後の1クワッドレットデータを送受信兼用バッファ7に書き込む(図3のSTEP3)。
(8)最後の1クワッドレットのデータが送受信兼用バッファ7に書き込まれるとリンク層コントローラ42に出力され、リンク層コントローラ42で図7(a)で示すBWRQパケットを構成し、物理層コントローラ41でのアービトレーション後、出力される。と同時に、次のパケットをパケット処理回路10で作成し、送受信兼用バッファに書き込まれる。
同様に、このパケットのdestination_offsetフィールドには先に送信したパケットのdestination_offsetフィールドに書き込んだアドレスに2048を加えたアドレスが書き込まれる。
この時、先に送られたBWRQパケットに対して、再送要求(ack_busy)を示すAckパケットが検出されると、パケット処理回路10は最後の1クワッドレット分のデータを送受信兼用バッファ7に書き込まずに、データ受信バッファにある前のパケット((7)で作成したパケット)のデータを再度送信し、イニシエータ1から、再送したBWRQパケットに対して、処理完了(ack_complete)を示すAckパケットが送信されたことをリンク層コントローラ42で検出して、その後、最後の1クワッドレットのデータを送受信兼用バッファ7に書き込む(図3のSTEP4)。
以降、上記動作が、READコマンドで指定されたデータ数の転送が終了するまで繰り返される。
次にWRITEコマンドがイニシエータ1から発行された場合の動作について説明する。
1回のWRITEコマンドで、イニシエータ1から送信されるデータのデータ長を64kBとする。従って、64kBのデータを転送するためには、データを転送するパケットのデータフィールドのサイズが2kBであるので、32回に分けてデータ転送が行われる。
(1)イニシエータ1は、自らのメモリ内にWRITEコマンドのCDBを含むORBを作成する。
(2)イニシエータ1はターゲットのORB_POINTERレジスタにORBを作成したメモリの1394空間上のアドレスをBWRQパケットによりターゲット2に送信する。
(3)ターゲット2は、(2)で送られたORBが格納されたアドレスに対して、BRRQパケットを発行し、イニシエータ1はORBを含むBRRSパケットをターゲット2に返す。
(4)ターゲット2は受信したBRRSパケットに含まれるCDBを取り出し、WRITEコマンドを確認後、ドライブにデータを書き込むための初期設定を行う。この時、パケット処理回路10に、レジスタ12を経由して、マイコン11からWRITEコマンドでディスクに書き込むデータが格納されたイニシエータ1のシステムメモリ領域のアドレス、イニシエータ1のID等のヘッダ情報が書き込まれる。
また、受信用フィルタには、データ受信時であるので、データの送信要求をイニシエータ1に対して要求する要求パケットであるBRRQパケットに対して対となるBRRSパケットを受信したことをパケットラベル情報tlとパケット識別情報tcodeで検出し、かつその応答識別情報rcodeが処理完了(resp_complete)である時には、受信パケットを送受信兼用バッファ7に格納するようにし、それ以外であれば受信専用バッファ5に格納するように設定しておく。
起動がかけられると、パケット処理回路10に設定されたヘッダ情報を用いて、イニシエータ1のシステムメモリ上の書き込みデータを取りに行くためのBRRQパケット(図7(d))を作成するために、図2(d)で示した構成のパケットをパケット処理回路10で作成し、送信用フィルタ9を介して、送信専用バッファ6に書き込む。
すべてのデータが書き込まれると、リンク層コントローラ42、物理層コントローラ41を経て、バスの使用権を獲得した時点で、イニシエータ1に送信される。イニシエータ1から、BRRQパケットで要求されたデータがデータフィールドに含まれたBRRSパケットがターゲット2に送られる。ターゲット2において、受信されたBRRSパケットは、受信用フィルタ8を介して、そのパケットラベル情報とパケット識別情報と応答識別情報をチェックし、要求パケットに対して正当な応答パケットであれば、送受信兼用バッファ7に格納される(図4のSTEP1)。
(5)(4)で受信され、送受信兼用バッファ7に格納されたBRRSパケットのヘッダ情報のうち、まずパケット識別情報(tcode)と応答識別情報(rcode)をパケット処理回路10にて確認し、それぞれがBRRSパケットであり、かつ処理完了(resp_complete)を示すものであれば、次のデータを要求するために、次のデータ送信を要求するための要求パケット(この場合はBRRQパケット)を送信用フィルタ9を介して、送信専用バッファに書き込む。このときdestination_offsetは先に送信したBRRQパケットのdestination_offsetに2048を加えた値になる。同時に、(4)で受信されたパケットのデータを順次読み出し、光ディスクコントローラ13で誤り訂正符号の付加や変調処理等が施され、アナログ信号処理回路15を経てディスク16上に書き込まれる。送信専用バッファ6に書き込まれた次のデータを要求するためのBRRQパケットは、リンク層コントローラ42、物理層コントローラ41を経て、バスの使用権を獲得後、イニシエータ1に送信される。
イニシエータ1からは、BRRQパケットで要求されたデータをデータフィールドに含んでBRRSパケットがターゲット2に送られる。ターゲット2において、受信されたBRRSパケットは、受信用フィルタ8を介して、送受信兼用バッファ7に格納される(図4のSTEP2)。
以降、上記動作が、WRITEコマンドで指定されたデータ数の転送が終了するまで、繰り返される。
以上、述べてきたように、送受信兼用バッファのバッファサイズをデータを転送する際に用いられるパケットサイズの2倍にすることにより、オーバーヘッドを少なくし、高速なデータ転送を図ることが出来る。
次に、READコマンド実行中にイニシエータ1から別のタスク管理系のコマンドが発行された場合について説明する。図5はREADコマンド実行中にイニシエータ1から別のタスク管理系のコマンドが発行された場合の動作を示す動作説明図である。
図5において(1)はパケット処理回路10の動作、(2)は送受信兼用バッファ7の内部状態、(3)は1394バス3上パケットを示し、例えば、BWRQ(T→I)はBWRQパケットがターゲット(T)2からイニシエータ(I)1に送信されたことを示す。(4)はコマンド送信バッファ5の内部状態、(5)は、マイコン11の動作、(6)は送信専用バッファ6の内部状態を示す。
以下、図面を用いて、その動作を説明するが、実際にデータを含むパケットが転送されるまでの動作は、上述の動作と同じであるので省略する。
(1)データ転送中にイニシエータ1からタスク制御系のコマンド(例えば、QueryLogin)が発行されたとする(図5中の(3)のBWRQパケット(I→T))。
その時、イニシエータ1から発行されるManegementAgentへのBWRQパケットは、受信用フィルタ8により受信専用バッファ5に格納される。これは、先述したように、READコマンド実行中、つまりターゲット2からみてデータ送信中は、受信用フィルタ8に、受信されたパケットがWRSパケット以外(パケット識別情報tcodeで判断)か、受信されたパケットがWRSパケットであるがそれに含まれるパケットラベル情報tlがデータ送信を行うBWRQパケットのパケットラベル情報tlと一致しないか、あるいは受信されたパケットがWRSパケットでかつそれに含まれるパケットラベル情報tlがデータ送信を行うBWRQパケットのパケットラベル情報に一致するが、応答識別情報rcodeが処理完了を示すresp_complete以外であれば、受信専用バッファ5に受信されたパケットを格納するように設定しているためである。
この応答として、リンク層コントローラ42からは、受信は完了したが処理中であること(ack_pending)を示すAckパケットが返される(図中には図示せず)。
受信専用バッファ5に受信されたパケットが格納されると、マイコン11に割り込みが発生し、転送中のトランザクションを停止するようにコマンドが発行される。このコマンドを受けて、パケット処理回路10は、光ディスクコントローラ13から読み込んでいるデータのうち、現在送信しようとしているパケット分のデータの読み込みが終了するまで、光ディスクコントローラ13からのデータの読み込みを続行する。パケットを構成するためのデータをすべて読み込み、送受信兼用バッファ7に書き込み終わると、リンク層コントローラ42、物理層コントローラ41を経て、バスの使用権の獲得後、イニシエータ1に送られる。そのBWRQパケットに対する処理完了(acl_complete)を示すAckパケットを受信すると、マイコン11に対してトランザクションの中断通知がなされる(図5のSTEP1)。
(2)トランザクションの中断通知がなされると、マイコン11は受信専用バッファ5に格納されたコマンドを読み出し、ManagementAgent宛へのBWRQパケットであることを認識し、同時に処理完了(resp_complete)のrcodeを持つWRSパケットを送信専用バッファ6に送信フィルタ9を経由して書き込む。
書き込みが完了するとリンク層コントローラ42、物理層コントローラ41を経てイニシエータ1に送出される。引き続き、上記で認識したManagementAgent宛へのBWRQパケットに含まれるManagementORBが格納されたアドレスに対して、タスク管理系のコマンドが含まれるManegementORBを要求するBRRQパケットを送信専用バッファ6に書き込み、リンク層コントローラ42、物理層コントローラ41を介して、バスの使用権獲得後、イニシエータ1に送信される(図5のSTEP2)。
(3)(2)で送信されたBRRQパケットに対応して、ManegemetORBを含むBRRSパケットがイニシエータ1から送信される。ターゲット2で受信されたBRRSパケットは、受信用フィルタ8を介してリンク層コントローラ42から受信専用バッファ5に格納される。これも同様にWRSパケット以外の受信されたパケットが受信専用バッファ5に格納されるように設定しているためである。受信専用バッファに格納されたパケットは、マイコン11により読み出され、ManagemetORBの処理を行い、その処理が終わると、そのManagementORBに対するステータスを送信専用バッファ6に書き込み、イニシエータ1に送信する。送信したBWRQパケットに対して、イニシエータ1から処理完了(ack_complete)を示すAckパケットが送られるとマイコン11は通知を受ける(図5のSTEP3)。
(4)ManagementORBの処理が終わると、マイコン11は、パケット処理回路10にデータ転送再開命令を発行し、データ転送を再開する(図5のSTEP4)。
またWRITEコマンドを実行中であっても、データ転送中は、受信用フィルタ8に、受信されたパケットがBRRSパケット以外か、あるいは受信されたパケットがBRRSパケットでありかつそれに含まれるパケットラベル情報tlがデータ送信を要求するために使用されるBRRQパケットのパケットラベルに一致しないか、あるいは受信されたパケットがBRRSパケットであり、かつそれに含まれるパケットラベル情報tlがデータ送信を要求するために使用されるBRRQパケットのパケットラベルに一致しかつそれに含まれる応答識別情報rcodeが処理完了を示すresp_complete以外であれば、受信されたパケットが受信専用バッファ5に格納されるように設定されるので、同様に処理を行うことが出来る。
以上の述べてきたように本実施の形態によれば、受信専用バッファ、送信専用バッファ、送受信兼用バッファのように、パケットの送受信に必要なバッファをそれぞれ独立して設けることにより、ファームウェアのオーバーヘッドを少なくして、高速なデータ転送を可能とするものである。またデータ転送中のコマンドに対しての処理も、データ転送中にコマンドが発行された場合のみ、ファームウェアの処理が介在するので、ファームウェアのオーバーヘッドを少なくして、高速化を図ったデータ転送を可能にし、かつタスク管理系のコマンドに対しても容易に対応できるものである。
なお、コマンド受信の一連の流れをマイコン11で処理するように説明したが、コマンドを含むORBをフェッチするまでをハードウェアで処理しても何らの問題もなく、同様の効果を得ることもできる。
またデータ転送中のコマンドに対する処理では、送信しようとしているパケットの転送が完了してから、コマンド処理を行うように説明したが、コマンドが発行された時点で、データ転送を中断して、コマンドの処理を行っても何らの問題もない。