(57)【特許請求の範囲】
【請求項１】
バスに接続される相手ノードと自ノードとの間でのデータ転送のためのデータ転送制御装置であって、
バスを介して接続される相手ノードとの間で転送される転送データの先頭アドレスである第１のアドレスを記憶するアドレス記憶手段と、
ノードのトポロジ情報をクリアしデータ転送を中断させるリセットが発生した場合に、前記アドレス記憶手段により記憶された前記第１のアドレスと、該リセットの発生後の転送データの先頭アドレスである第２のアドレスとを比較するアドレス比較手段と、
前記第１、第２のアドレスが同一である場合には、リセットにより中断したデータ転送を該リセット発生時点のデータ転送の続きから再開する再開手段とを含み、
前記アドレス記憶手段が、
転送データがページテーブルを用いて転送される場合において、ページテーブルの先頭セグメントに格納されるアドレスを前記第１のアドレスとして、ページテーブルの記憶領域とは別の領域に記憶しておくことを特徴とするデータ転送制御装置。
【請求項２】
請求項１において、
ノードのトポロジ情報をクリアするリセットの発生前に相手ノードから転送されてきたデータ転送オペレーション要求のための第１のコマンドパケットの内容と、該リセットの発生後に相手ノードから転送されてきたデータ転送オペレーション要求のための第２のコマンドパケットの内容とを、前記第１、第２のアドレスの比較処理に先立って比較するコマンド比較手段を含むことを特徴とするデータ転送制御装置。
【請求項３】
請求項２において、
前記第１、第２のコマンドパケットが、コマンドパケットを識別するための識別情報を含み、
前記コマンド比較手段が、
前記第１、第２のアドレスの比較処理に先立って、第１のコマンドパケットに含まれる第１の識別情報と、第２のコマンドパケットに含まれる第２の識別情報とを比較することを特徴とするデータ転送制御装置。
【請求項４】
請求項１乃至３のいずれかにおいて、
データ転送完了のステータスを相手ノードに転送したが、ノードのトポロジ情報をクリアするリセットの発生が要因となって相手ノードからアクノリッジメントが返って来なかった場合に、データ転送不可状態に状態遷移することを特徴とするデータ転送制御装置。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記リセットが、ＩＥＥＥ１３９４の規格において定義されるバスリセットであることを特徴とするデータ転送制御装置。
【請求項６】
バスに接続される相手ノードと自ノードとの間でのデータ転送のためのデータ転送制御装置であって、
バスを介して接続される相手ノードから転送されてくるデータ転送オペレーション要求のためのコマンドパケットが、コマンドパケットを識別するための識別情報を含む場合に、ノードのトポロジ情報をクリアしデータ転送を中断させるリセットの発生前に転送されてきた第１のコマンドパケットが含む第１の識別情報と、該リセットの発生後に転送されてきた第２のコマンドパケットが含む第２の識別情報とを比較するコマンド比較手段と、
前記第１、第２の識別情報が同一である場合には、リセットにより中断したデータ転送を該リセット発生時点のデータ転送の続きから再開し、前記第１、第２の識別情報が同一ではない場合にはデータ転送の再開処理を行わない再開手段と、
を含むことを特徴とするデータ転送制御装置。
【請求項７】
請求項６において、
データ転送完了のステータスを相手ノードに転送したが、ノードのトポロジ情報をクリアするリセットの発生が要因となって相手ノードからアクノリッジメントが返って来なかった場合に、相手ノードがデータ転送完了のステータスを受け取ったか否かを、コマンドパケットが含む識別情報に基づいて判断することを特徴とするデータ転送制御装置。
【請求項８】
請求項６又は７において、
前記リセットが、ＩＥＥＥ１３９４の規格において定義されるバスリセットであることを特徴とするデータ転送制御装置。
【請求項９】
請求項１乃至５のいずれかのデータ転送制御装置との間でのデータ転送を制御するためのプログラムを記憶したコンピュータ読み取り可能な情報記憶媒体であって、
ノードのトポロジ情報をクリアするリセットがデータ転送中に発生した場合には、該リセットの発生前の転送データの先頭アドレスである第１のアドレスと該リセットの発生後の転送データの先頭アドレスである第２のアドレスとが同一になるようにデータ転送オペレーション要求のためのコマンドパケットを作成し、データ転送制御装置に転送要求する手段としてコンピュータを機能させるプログラムを含むことを特徴とする情報記憶媒体。
【請求項１０】
請求項６乃至８のいずれかのデータ転送制御装置との間でのデータ転送を制御するためのプログラムを記憶したコンピュータ読み取り可能な情報記憶媒体であって、
データ転送オペレーション要求のためのコマンドパケットの所与のフィールドにコマンドパケットを識別するための識別情報を書き込み、識別情報が書き込まれたコマンドパケットをデータ転送制御装置に転送要求する手段としてコンピュータを機能させるプログラムを含むことを特徴とする情報記憶媒体。
【請求項１１】
請求項１乃至８のいずれかのデータ転送制御装置と、
前記データ転送制御装置及びバスを介して相手ノードから受信したデータに所与の処理を施す装置と、
処理が施されたデータを出力又は記憶するための装置とを含むことを特徴とする電子機器。
【請求項１２】
請求項１乃至８のいずれかのデータ転送制御装置と、
前記データ転送制御装置及びバスを介して相手ノードに転送するデータに所与の処理を施す装置と、
処理が施されるデータを取り込むための装置とを含むことを特徴とする電子機器。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ転送制御装置、情報記憶媒体及び電子機器に関し、特に、バスに接続される複数のノード間でＩＥＥＥ１３９４などの規格に準じたデータ転送を行うためのデータ転送制御装置、情報記憶媒体及び電子機器に関する。
【０００２】
【背景技術及び発明が解決しようとする課題】
近年、ＩＥＥＥ１３９４と呼ばれるインターフェース規格が脚光を浴びている。このＩＥＥＥ１３９４は、次世代のマルチメディアにも対応可能な高速シリアルバスインターフェースを規格化したものである。このＩＥＥＥ１３９４によれば、動画像などのリアルタイム性が要求されるデータも扱うことができる。また、ＩＥＥＥ１３９４のバスには、プリンタ、スキャナ、ＣＤ−ＲＷドライブ、ハードディスクドライブなどのコンピュータの周辺機器のみならず、ビデオカメラ、ＶＴＲ、ＴＶなどの家庭用電化製品も接続できる。このため、電子機器のデジタル化を飛躍的に促進できるものとして期待されている。
【０００３】
さて、このＩＥＥＥ１３９４においては、バスに電子機器が新たに接続されたり、バスから電子機器が取り外されたりして、バスに接続されるノードが増減すると、いわゆるバスリセットが発生する。そしてバスリセットが発生するとノードのトポロジ情報がクリアされ、その後、トポロジ情報が自動的に再設定される。即ち、バスリセットの発生後、ツリー識別（ルートノードの決定）、自己識別が行われ、その後、アイソクロナスリソースマネージャ等の管理ノードが決定される。そして通常のパケット転送が再開される。
【０００４】
このようにＩＥＥＥ１３９４では、バスリセット後にトポロジ情報が自動的に再設定されるため、いわゆるホット状態でのケーブルの抜き差し（ホットプラグ）が可能となる。このため、一般ユーザは、ＶＴＲなどの通常の家庭用電化製品と同じように、電子機器へのケーブルの抜き差を自由にできるようになり、いわゆるホームネットワークシステムの普及に役立つことができる。
【０００５】
しかしながら、ＩＥＥＥ１３９４のバスに接続されたプリンタやスキャナなどのデバイスにおいて、このバスリセットの発生が要因となって以下のような問題が生じることが判明した。
【０００６】
即ち、ＩＥＥＥ１３９４のバス上で印刷データの転送中にバスリセットが発生すると、パーソナルコンピュータなどのイニシエータは、印刷データの転送を最初から再度やり直す。従って、ターゲットであるプリンタに対して、印刷データの一部分だけが二重に送られてしまい、二重印刷などの誤印刷の問題が生じる。
【０００７】
また、スキャナでは、一旦ヘッドが動き出すと、ヘッドを元に戻して再度同じデータを取得することはできない。従って、バスリセットの発生後、イニシエータがデータ転送を最初から再度やり直そうとしても、データ転送を継続することができないという問題がある。
【０００８】
なお、バスリセットの発生により生じる不具合を解決する従来技術として、例えば特開平１１−１９４９０２号公報に開示されるものがある。この従来技術では、バスリセットが発生すると、データ処理をホールドし、ネットワーク構成が再構築された後にデータ処理を再開する。
【０００９】
しかしながら、この従来技術では、バスリセット発生後に転送データを単に再送するだけであり、再送される転送データがバスリセット発生前の転送データの続きか否かの判断については行っていない。従って、この従来技術によっては二重印刷の問題を解決できない。
【００１０】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、ノードのトポロジ情報をクリアするリセットが発生した場合に生じる不具合を解消できるデータ転送制御装置、情報記憶媒体及び電子機器を提供することにある。
【００１１】
【課題を解決するための手段】
上記課題を解決するために本発明は、バスに接続される複数のノード間でのデータ転送のためのデータ転送制御装置であって、相手ノードとの間で転送される転送データの先頭アドレスである第１のアドレスを記憶するアドレス記憶手段と、ノードのトポロジ情報をクリアするリセットが発生した場合に、前記アドレス記憶手段により記憶された前記第１のアドレスと、該リセットの発生後の転送データの先頭アドレスである第２のアドレスとを比較するアドレス比較手段と、前記第１、第２のアドレスが同一である場合には、リセット発生時点のデータ転送の続きからデータ転送を再開する再開手段とを含むことを特徴とする。
【００１２】
本発明によれば、転送データの先頭アドレスである第１のアドレスが記憶される。そして、ノードのトポロジ情報をクリアするリセットが発生した場合に、記憶された第１のアドレスと、リセットの発生後の転送データの先頭アドレスである第２のアドレスが比較される。そして、これらの第１、第２のアドレスが同一である場合には、リセット発生時点の続きから（例えばリセット発生時点で転送を完了したデータの次のデータから）、データ転送が再開されるようになる。
【００１３】
一方、第１、第２のアドレスが同一でない場合には、例えば、リセット発生後の転送データは新たな転送データであるとして処理されるようになる。
【００１４】
従って本発明によれば、相手ノードが、リセット発生後にリセット発生前と同一の転送データを送ってきた場合には、リセット発生時点の続きからデータ転送を再開できるようになる。従って、例えばデータ転送制御装置の上層のデバイスにデータが重複して転送されてしまい、上層のデバイスが誤動作するなどの問題を解消できる。
【００１５】
また本発明は、前記アドレス記憶手段が、転送データがページテーブルを用いて転送される場合において、ページテーブルの中の先頭セグメントに格納されるアドレスを前記第１のアドレスとして、ページテーブルの記憶領域とは別の領域に記憶しておくことを特徴とする。このようにすれば、ページテーブル記憶領域へのデータの上書きにより転送データの先頭アドレスである第１のアドレスが消失してしまうという不具合を防止できる。
【００１６】
また本発明は、ノードのトポロジ情報をクリアするリセットの発生前に相手ノードから転送されてきたデータ転送オペレーション要求のための第１のコマンドパケットの内容と、該リセットの発生後に相手ノードから転送されてきたデータ転送オペレーション要求のための第２のコマンドパケットの内容とを、前記第１、第２のアドレスの比較処理に先立って比較するコマンド比較手段を含むことを特徴とする。このようにすれば、例えば、第１、第２のコマンドパケットの内容が同一である場合に、第１、第２のアドレスの比較処理を行わなくて済むようになり、処理負荷の軽減化を図れる。
【００１７】
また本発明は、前記第１、第２のコマンドパケットが、コマンドパケットを識別するための識別情報を含み、前記コマンド比較手段が、前記第１、第２のアドレスの比較処理に先立って、第１のコマンドパケットに含まれる第１の識別情報と、第２のコマンドパケットに含まれる第２の識別情報とを比較することを特徴とする。このようにすれば、リセット発生時点の続きからデータ転送を再開するか否かを、コマンドパケットが含む識別情報に基づいて判断できるようになり、処理の簡素化を図れる。
【００１８】
また本発明は、データ転送完了のステータスを相手ノードに転送したが、ノードのトポロジ情報をクリアするリセットの発生が要因となって相手ノードからアクノリッジメントが返って来なかった場合に、データ転送不可状態に状態遷移することを特徴とする。このように、相手ノードからアクノリッジメントが返って来なかった場合には、相手ノードがステータスを受け取ったか否かが不明となる。従って、このような場合にリセット発生時点の続きからデータ転送を開始してしまうと、誤ったデータ転送が行われてしまう可能性がある。本発明によれば、ノードのトポロジ情報をクリアするリセットが要因となって相手ノードからアクノリッジメントが返って来なかった場合には、データ転送不可状態に状態遷移するため、このような誤ったデータ転送が行われる事態を防止できる。
【００１９】
また本発明は、バスに接続される複数のノード間でのデータ転送のためのデータ転送制御装置であって、相手ノードから転送されてくるデータ転送オペレーション要求のためのコマンドパケットが、コマンドパケットを識別するための識別情報を含む場合に、ノードのトポロジ情報をクリアするリセットの発生前に転送されてきた第１のコマンドパケットが含む第１の識別情報と、該リセットの発生後に転送されてきた第２のコマンドパケットが含む第２の識別情報とを比較するコマンド比較手段と、前記第１、第２の識別情報が同一である場合には、リセット発生時点のデータ転送の続きからデータ転送を再開する再開手段とを含むことを特徴とする。
【００２０】
本発明によれば、第１、第２の識別情報が同一である場合には、リセット発生時点の続きからデータ転送が再開されるようになる。一方、第１、第２のアドレスが同一でない場合には、例えば、リセット発生後の転送データは新たな転送データであるとして処理されるようになる。従って、データ転送制御装置の上層のデバイスにデータが重複して転送されてしまい、上層のデバイスが誤動作するなどの問題を解消できる。
【００２１】
また本発明は、データ転送完了のステータスを相手ノードに転送したが、ノードのトポロジ情報をクリアするリセットの発生が要因となって相手ノードからアクノリッジメントが返って来なかった場合に、相手ノードがデータ転送完了のステータスを受け取ったか否かを、コマンドパケットが含む識別情報に基づいて判断することを特徴とする。このようにすれば、相手ノードからステータスのアクノリッジメントが返って来なかった場合に、データ転送制御装置を、データ転送不可状態に状態遷移させなくても済むようになる。
【００２２】
なお本発明では、前記リセットが、ＩＥＥＥ１３９４の規格において定義されるバスリセットであることが望ましい。
【００２３】
また本発明は、上記のいずれかのデータ転送制御装置との間でのデータ転送を制御するためのプログラムを含む情報記憶媒体であって、ノードのトポロジ情報をクリアするリセットがデータ転送中に発生した場合には、該リセットの発生前の転送データの先頭アドレスである第１のアドレスと該リセットの発生後の転送データの先頭アドレスである第２のアドレスとが同一になるようにデータ転送オペレーション要求のためのコマンドパケットを作成し、データ転送制御装置に転送要求するためのプログラムを含むことを特徴とする。このようにすれば、データ転送制御装置は、第１、第２のアドレスが同一である場合には、リセット発生前と同一の転送データであると判断でき、第１、第２のアドレスが同一でない場合には、リセット発生前とは異なる転送データであると判断できる。これにより、誤ったデータ転送が行われる事態を防止できる。
【００２４】
また本発明は、上記のいずれかのデータ転送制御装置との間でのデータ転送を制御するためのプログラムを含む情報記憶媒体であって、データ転送オペレーション要求のためのコマンドパケットの所与のフィールドにコマンドパケットを識別するための識別情報を書き込み、識別情報が書き込まれたコマンドパケットをデータ転送制御装置に転送要求するためのプログラムを含むことを特徴とする。このようにすれば、データ転送制御装置は、第１、第２の識別情報が同一である場合には、リセット発生前と同一の転送データであると判断でき、第１、第２の識別情報が同一でない場合には、リセット発生前とは異なる転送データであると判断できる。これにより、誤ったデータ転送が行われる事態を防止できる。
【００２５】
また本発明に係る電子機器は、上記のいずれかのデータ転送制御装置と、前記データ転送制御装置及びバスを介して相手ノードから受信したデータに所与の処理を施す装置と、処理が施されたデータを出力又は記憶するための装置とを含むことを特徴とする。また本発明に係る電子機器は、上記のいずれかのデータ転送制御装置と、前記データ転送制御装置及びバスを介して相手ノードに送信するデータに所与の処理を施す装置と、処理が施されるデータを取り込むための装置とを含むことを特徴とする。
【００２６】
本発明によれば、ノードのトポロジー情報をクリアするリセットの発生によりシステムに不具合が生じる事態を防止でき、電子機器が誤動作するのを防止できる。またデータ転送の高速化を図れ、電子機器の低コスト化、電子機器の処理の高速化なども図ることができる。
【００２７】
【発明の実施の形態】
以下、本発明の好適な実施形態について図面を用いて詳細に説明する。
【００２８】
１．ＩＥＥＥ１３９４
まず、ＩＥＥＥ１３９４について簡単に説明する。
【００２９】
１．１  概要
ＩＥＥＥ１３９４（ＩＥＥＥ１３９４−１９９５、Ｐ１３９４．ａ）では１００〜４００Ｍｂｐｓの高速なデータ転送が可能となっている（Ｐ１３９４．ｂでは８００〜３２００Ｍｂｐｓ）。また、転送速度が異なるノードをバスに接続することも許される。
【００３０】
各ノードはツリー状に接続されており、１つのバスに最大で６３個のノードが接続可能になっている。なお、バスブリッジを利用すれば約６４０００個のノードを接続することも可能である。
【００３１】
ＩＥＥＥ１３９４では、パケットの転送方式として非同期転送とアイソクロナス転送が用意されている。ここで非同期転送は、信頼性が要求されるデータの転送に好適な転送方式であり、アイソクロナス転送は、リアルタイム性が要求される動画像や音声などのデータの転送に好適な転送方式である。
【００３２】
１．２  層構造
ＩＥＥＥ１３９４の層構造（プロトコル構成）を図１に示す。
【００３３】
ＩＥＥＥ１３９４のプロトコルは、トランザクション層、リンク層、物理層により構成される。また、シリアルバスマネージメントは、トランザクション層、リンク層、物理層をモニターしたり制御したりするものであり、ノードの制御やバスのリソース管理のための種々の機能を提供する。
【００３４】
トランザクション層は、上位層にトランザクション単位のインターフェース（サービス）を提供し、下層のリンク層が提供するインターフェースを通して、リードトランザクション、ライトトランザクション、ロックトランザクション等のトランザクションを実施する。
【００３５】
ここで、リードトランザクションでは、応答ノードから要求ノードにデータが転送される。一方、ライトトランザクションでは、要求ノードから応答ノードにデータが転送される。またロックトランザクションでは、要求ノードから応答ノードにデータが転送され、応答ノードがそのデータに処理を施して要求ノードに返信する。
【００３６】
リンク層は、アドレッシング、データチェック、パケット送受信のためのデータフレーミング、アイソクロナス転送のためのサイクル制御などを提供する。
【００３７】
物理層は、リンク層により使用されるロジカルシンボルの電気信号への変換や、バスの調停や、バスの物理的インターフェースを提供する。
【００３８】
１．３  ＳＢＰ−２
さて、図２に示すように、ＩＥＥＥ１３９４のトランザクション層の一部の機能を含む上位のプロトコルとして、ＳＢＰ−２（Ｓｅｒｉａｌ  Ｂｕｓ  Ｐｒｏｔｏｃｏｌ−２）と呼ばれるプロトコルが提案されている。
【００３９】
ここでＳＢＰ−２は、ＳＣＳＩのコマンドセットをＩＥＥＥ１３９４のプロトコル上で利用可能にするために提案されたものである。このＳＢＰ−２を用いれば、既存のＳＣＳＩ規格の電子機器で使用されていたＳＣＳＩのコマンドセットに最小限の変更を加えて、ＩＥＥＥ１３９４規格の電子機器に使用できるようになる。従って、電子機器の設計や開発を容易化できる。また、ＳＣＳＩのコマンドだけではなく、デバイス固有のコマンドもカプセル化して利用できるため、非常に汎用性が高い。
【００４０】
図３に示すようにＳＢＰ−２では、まず、イニシエータ（例えばパーソナルコンピュータ）により作成されたログインＯＲＢ（Ｏｐｅｒａｔｉｏｎ  Ｒｅｑｕｅｓｔ  Ｂｌｏｃｋ）を用いてログイン処理が行われる（ステップＴ１）。次に、ダミーＯＲＢを用いてフェッチエージェントの初期化が行われる（ステップＴ２）。そして、コマンドブロックＯＲＢ（ノーマルコマンドＯＲＢ）を用いてコマンド処理が行われ（ステップＴ３）、最後に、ログアウトＯＲＢを用いてログアウト処理が行われる（ステップＴ４）。
【００４１】
ここで、ステップＴ３のコマンド処理においては、図４のＡ１に示すように、イニシエータがライト要求パケットを転送して（ライト要求トランザクションを発行して）、ターゲットのドアベルレジスタをリングする。すると、Ａ２に示すように、ターゲットがリード要求パケットを転送し、イニシエータが対応するリード応答パケットを返す。これにより、イニシエータが作成したＯＲＢ（コマンドブロックＯＲＢ）が、ターゲットのデータバッファにフェッチされる。そして、ターゲットは、フェッチされたＯＲＢに含まれるコマンドを解析する。
【００４２】
そして、ＯＲＢに含まれるコマンドがＳＣＳＩのライトコマンドであった場合には、Ａ３に示すように、ターゲットがリード要求パケットをイニシエータに転送し、イニシエータが対応するリード応答パケットを返す。これにより、イニシエータのデータバッファに格納されているデータがターゲットに転送される。そして、例えばターゲットがプリンタであった場合には、転送されたデータがプリンタエンジンにより印刷される。
【００４３】
一方、ＯＲＢに含まれるコマンドがＳＣＳＩのリードコマンドであった場合には、図５のＢ１に示すように、ターゲットは、一連のライト要求パケットをイニシエータに転送する。これにより、例えばターゲットがスキャナであった場合には、スキャナエンジンにより取得されたスキャンデータが、イニシエータのデータバッファに転送されることになる。
【００４４】
このＳＢＰ−２によれば、ターゲットは、自身が都合の良いときに要求パケットを転送して（トランザクションを発行して）、データを送受信できる。従って、イニシエータとターゲットが同期して動く必要がなくなるため、データ転送効率を高めることができる。
【００４５】
なお、ＩＥＥＥ１３９４の上位プロトコルとしては、ＳＢＰ−２以外にも、ＦＣＰ（Ｆｕｎｃｔｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）と呼ばれるプロトコルなども提案されている。
【００４６】
さて、ターゲット、イニシエータ間でデータ転送を行う場合、図６（Ａ）のようにイニシエータ（相手ノード）のデータバッファ（記憶手段）にページテーブルが存在する場合と、存在しない場合がある。
【００４７】
そして、ページテーブルが存在する場合には、図６（Ｂ）に示すように、イニシエータが作成したＯＲＢの中には、そのページテーブルのアドレスやエレメント数が含まれる。そして、転送データのアドレス（読み出しアドレス、書き込みアドレス）は、このページテーブルを用いて間接アドレス指定される。
【００４８】
一方、ページテーブルが存在しない場合には、図６（Ｃ）に示すように、ＯＲＢの中にアドレスとデータ長が含まれ、転送データのアドレスが直接アドレス指定される。
【００４９】
１．４  バスリセット
ＩＥＥＥ１３９４では、電源が投入されたり、途中でデバイスの抜き差しが発生すると、バスリセットが発生する。即ち、各ノードは、ポートの電圧変化を監視している。そして、バスに新たなノードが接続されるなどしてポートの電圧に変化が生じると、この変化を検知したノードは、バス上の他のノードに対して、バスリセットが発生したことを知らせる。また、各ノードの物理層は、バスリセットが発生したことをリンク層に伝える。
【００５０】
そして、このようにバスリセットが発生すると、ノードＩＤなどのトポロジ情報がクリアされる。そして、その後、トポロジー情報が自動的に再設定される。即ち、バスリセット後、ツリー識別、自己識別が行われる。その後、アイソクロナスリソースマネージャ、サイクルマスタ、バスマネージャ等の管理ノードが決定される。そして、通常のパケット転送が再開される。
【００５１】
このようにＩＥＥＥ１３９４では、バスリセット後にトポロジ情報が自動的に再設定されるため、電子機器のケーブルを自由に抜き差しできるようになり、いわゆるホットプラグを実現できる。
【００５２】
なお、トランザクションの途中でバスリセットが発生した場合には、そのトランザクションはキャンセルされる。そして、キャンセルされたトランザクションを発行した要求ノードは、トポロジー情報が再設定された後に、要求パケットを再度転送する。また、応答ノードは、バスリセットによりキャンセルされたトランザクションの応答パケットを要求ノードに返送してはならない。
【００５３】
２．全体構成
次に、本実施形態のデータ転送制御装置の全体構成例について図７を用いて説明する。なお、以下では、イニシエータとの間でデータ転送を行うターゲットがプリンタである場合について例にとり説明するが、本発明はこれに限定されない。
【００５４】
本実施形態のデータ転送制御装置１０は、ＰＨＹデバイス１２（物理層のデバイス）、リンクデバイス１４（リンク層のデバイス）、ＣＰＵ１６（中央処理ユニット）、データバッファ１８（記憶手段）、ファームウェア２０（プロセッサ）を含む。なお、ＰＨＹデバイス１２、リンクデバイス１４、ＣＰＵ１６、データバッファ１８は、任意の構成要素であり、本実施形態のデータ転送制御装置１０は、これらの構成要素を全て含む必要はない。
【００５５】
ＰＨＹデバイス１２は、図１の物理層のプロトコルをハードウェアにより実現するための回路であり、リンクデバイス１４により使用されるロジカルシンボルを電気信号に変換する機能を有する。
【００５６】
リンクデバイス１４は、図１のリンク層のプロトコルやトランザクション層のプロトコルの一部をハードウェアにより実現するための回路であり、ノード間でのパケット転送のための各種サービスを提供する。
【００５７】
ＣＰＵ１６は、装置全体の制御やデータ転送の制御を行うものである。
【００５８】
データバッファ１８は、転送データ（パケット）を一時的に格納するバッファであり、ＳＲＡＭ、ＳＤＲＡＭ、或いはＤＲＡＭなどのハードウェアにより構成される。なお、本実施形態では、データバッファ１８は、ランダムアクセス可能なパケット記憶手段として機能する。
【００５９】
ファームウェア２０は、ＣＰＵ１６上で動作する種々の処理ルーチン（処理モジュール）を含むプログラムであり、トランザクション層のプロトコルは、このファームウェア２０と、ハードウェアであるＣＰＵ１６等により実現される。
【００６０】
なお、イニシエータであるパーソナルコンピュータ１００が含むデバイスドライバ１０２は、周辺機器を管理制御するための種々の処理ルーチンを含むプログラムである。このプログラムは、情報記憶媒体１１０（ＦＤ、ＣＤ−ＲＯＭ、ＤＶＤ、ＲＯＭ）を利用してパーソナルコンピュータ１００にインストールされる。
【００６１】
ここで、デバイスドライバ１０２のプログラムは、ホストシステムが有する情報記憶媒体（ハードディスク、磁気テープ等）からインターネットなどのネットワークを介してダウンロードし、パーソナルコンピュータ１００にインストールするようにしてもよい。このようなホストシステムが有する情報記憶媒体の使用も本発明の範囲内に含まれる。
【００６２】
ファームウェア２０（Ｆ／Ｗ）は、コミュニケーション部３０（ＣＯＭ）、マネージメント部４０（ＭＮＧ）、プリントタスク部５０（ＰＲＴ）、フェッチ部６０（ＦＣＨ）を含む。
【００６３】
ここで、コミュニケーション部３０は、リンクデバイス１４などのハードウェアとの間のインターフェースとして機能する処理モジュールである。
【００６４】
マネージメント部４０（マネージメントエージェント）は、ログイン、リコネクト、ログアウト、リセット等の管理を行う処理モジュールである。例えばイニシエータがターゲットにログインを要求した場合には、まず、このマネージメント部４０が、このログイン要求を受け付けることになる。
【００６５】
プリントタスク部５０は、後段のアプリケーション層（上層）であるプリンタエンジンとの間のデータ転送処理を行う処理モジュールである。
【００６６】
フェッチ部６０（フェッチエージェント、コマンドブロックエージェント）は、コマンドブロックＯＲＢが含むコマンドを実行するための処理モジュールである。フェッチ部６０は、単一の要求しか扱うことができないマネージメント部４０と異なり、イニシエータからの要求により自身がフェッチしたＯＲＢのリンクリストも扱うことができる。
【００６７】
フェッチ部６０は、判断部６２、コマンド記憶部６４、コマンド比較部６６、アドレス記憶部６８、アドレス比較部７０、データ転送再開部７２を含む。
【００６８】
ここで判断部６２は、イニシエータ（相手ノード）との間で印刷データを転送するデータ転送期間中に、バスリセット（広義には、ノードのトポロジ情報をクリアするリセット）が発生したか否かを判断する処理を行う。
【００６９】
コマンド記憶部６４は、バスリセットの発生前にイニシエータから転送されてきたＯＲＢ（コマンドブロックＯＲＢ。広義には、データ転送オペレーション要求のためのコマンドパケット）の内容を、バスリセットが発生した時点やリコネクトが成功した時点などで記憶するための処理を行う。
【００７０】
コマンド比較部６６は、バスリセットの発生前にイニシエータから転送されてきたＯＲＢ（コマンドブロックＯＲＢ）の内容（コマンド記憶部６４により記憶された内容）と、バスリセットの発生後にイニシエータから転送されてきたＯＲＢの内容とを比較する処理を行う。
【００７１】
アドレス記憶部６８は、イニシエータとの間で転送される転送データ（印刷データ）の先頭アドレス（第１のアドレス）を記憶するための処理を行う。
【００７２】
アドレス比較部７０は、バスリセットが発生した場合に、アドレス記憶部６８により記憶された先頭アドレス（第１のアドレス）と、バスリセット発生後の転送データの先頭アドレス（第２のアドレス）とを比較する処理を行う。
【００７３】
データ転送再開部７２は、バスリセット発生前と発生後とで、転送データの先頭アドレスが一致した場合や、ＯＲＢ（コマンドブロックＯＲＢ）の内容が一致した場合に、バスリセット発生時点のデータ転送の続き（バスリセット発生時点で転送したデータの次のデータ）からデータ転送を再開する処理を行う。
【００７４】
３．処理の概要
次に、本実施形態の処理の概要について説明する。
【００７５】
図８は、ターゲット側（ファームウェア）の処理の概要について示すフローチャートである。
【００７６】
イニシエータから印刷要求があると、ターゲットは、イニシエータのデータバッファからＯＲＢをリードする（ステップＳ１）。そして、ページテーブルが存在する場合には、ＯＲＢに含まれるページテーブルアドレス（図６（Ｂ）参照）に基づいて、イニシエータのデータバッファからページテーブルをリードする（ステップＳ２）。次に、リードしたページテーブルに基づいてイニシエータのデータバッファから印刷データをリードする（ステップＳ３）。そして、ページテーブルにより指定される印刷データを全てリードすると、ステータスをライトして、データ転送が成功したか否かなどのステータスをイニシエータに伝える（ステップＳ４）。以上の処理を、全ての印刷データが転送されるまで繰り返す（ステップＳ５）。
【００７７】
そして本実施形態では、印刷データの転送中（データ転送期間）にバスリセットが発生すると、リコネクト後の最初の印刷要求時に以下の処理を行う。
【００７８】
即ち、まず、バスリセット前のＯＲＢの内容や印刷データの先頭アドレスと、バスリセット後のＯＲＢの内容や印刷データの先頭アドレスとが同一か否かを判断する（ステップＳ６）。そして、同一であると判断した場合には、バスリセット発生時点の続きからデータ転送を再開する（ステップＳ７）。一方、同一でないと判断した場合には、バスリセット後のＯＲＢを新規のＯＲＢとして最初から処理する（ステップＳ８）。
【００７９】
図９は、イニシエータ側（デバイスドライバ）の処理の概要について示すフローチャートである。
【００８０】
アプリケーションプログラムからの印刷ジョブが発生すると、イニシエータは、印刷のためのＯＲＢやページテーブルを作成し、データバッファに書き込む（ステップＳ１０）。次に、作成したＯＲＢをリードするようにターゲットに対して指示する（ステップＳ１１。図４のＡ１参照）。
【００８１】
次に、バスリセットが発生したか否かを判断し（ステップＳ１２）、発生しなかった場合には、ステータスがターゲットから送られてきたか否かを判断する（ステップＳ１３）。そして、送られてきた場合には、全ての印刷データが転送されたか否かを判断し（ステップＳ１４）、転送されていない場合には、ステップＳ１０に戻り、転送された場合には印刷ジョブを終了する。
【００８２】
そして本実施形態では、ステップＳ１２でバスリセットが発生したと判断されると、イニシエータが、ＯＲＢ、ページテーブルを再作成し（ステップＳ１５）、再作成したＯＲＢをリードするようにターゲットに対して指示する（ステップＳ１１）。この場合にイニシエータ（デバイスドライバ）は、バスリセット発生前のＯＲＢの内容や印刷データの先頭アドレスと、バスリセット発生後のＯＲＢの内容や印刷データの先頭アドレスとが同一になるように、ＯＲＢを再作成する。
【００８３】
４．本実施形態の特徴
さて、印刷データの転送中にバスリセットが発生すると、以下のような問題が生じることが判明した。
【００８４】
例えば図１０（Ａ）に示すように、Ｃ１に示す位置（アドレス）までデータを転送したところで、バスリセットが発生したとする。この場合には、バスリセット発生時点で処理中であったトランザクションは全てキャンセルされる。従って、バスリセット前に印刷データの転送を要求していたイニシエータは、図１０（Ｂ）に示すように、バスリセット後に印刷のためのＯＲＢを再度作成して、印刷データの転送を最初からやり直すようにターゲットに指示する。このため、図１０（Ｂ）のＣ２に示す位置からデータ転送が再開されてしまい、印刷データの一部分だけが二重に送られてしまう。この結果、図１０（Ｃ）に示すような二重印刷の問題が発生する。
【００８５】
このような問題を解決するために、本実施形態では、以下に説明するような手法を採用している。
【００８６】
即ち本実施形態では、図１１に示すように、バスリセット前のＯＲＢのページテーブルにより指定される転送データの先頭アドレス（バスアドレス）ＡＤ１を記憶しておく。
【００８７】
そして、バスリセットが発生した場合には、記憶しておいた先頭アドレスＡＤ１と、バスリセット後のＯＲＢのページテーブルにより指定される転送データの先頭アドレスＡＤ２とを比較する（図８のステップＳ６参照）。
【００８８】
そして、ＡＤ１とＡＤ２が同一の場合には、バスリセット前の転送データとバスリセット後の転送データは同一であると判断し、Ｄ１に示すように、バスリセット発生時点のデータ転送の続きからデータ転送を再開する（図８のステップＳ７参照）。即ち、バスリセット発生時点で既に転送を完了していたデータの次のデータからデータ転送を再開する。
【００８９】
一方、ＡＤ１とＡＤ２が同一でない場合には、バスリセット後の転送データは全く新規の転送データであると判断し、最初から処理する（図８のステップＳ８参照）。
【００９０】
このようにすることで、図１１のＤ２に示す部分の転送データが、図１０（Ｂ）の場合と異なり、二重転送されないようになる。従って、図１０（Ｃ）に示すような誤印刷が生じなくなる。また二重転送を避けることができるため、転送時間も短縮できる。
【００９１】
本実施形態は、バスリセットが発生しても、イニシエータのデータバッファ上での転送データの先頭アドレスについては変更されない点に着目したことに特徴がある。
【００９２】
即ち、バスリセットが発生すると、イニシエータがＯＲＢやページテーブルを再度作成するため、ページテーブルの構成等については変更されてしまう可能性がある。
【００９３】
これに対して、転送データの先頭アドレス（転送データの位置）は、アプリケーションプログラムなどが決めるものであるため、バスリセットが発生しても先頭アドレスが変わることはない。
【００９４】
本実施形態は、この点に着目し、転送データの先頭アドレスがバスリセット前とバスリセット後で同一ならば、同じ転送データが送られてきたと判断している。
【００９５】
例えば、本実施形態と異なる手法として、先頭アドレスの比較処理を行わずに、常に、バスリセット発生時点の続きからデータ転送を再開するという手法も考えられる。
【００９６】
しかしながら、この手法によると、例えば、バスリセット後にイニシエータが印刷データの転送処理をキャンセルし、バスリセット前と全く異なるＯＲＢを作成した場合にも、図１１のＤ１からデータ転送が再開されてしまうという不具合が生じる。
【００９７】
これに対して本実施形態では、転送データの先頭アドレスがバスリセットの前後で同一の場合には、図１１のＤ１からデータ転送が再開するが、同一でない場合には、全く新規のＯＲＢとして処理されるため、上記のような不具合が生じない。
【００９８】
さて、本実施形態では、転送データがページテーブルを用いて転送される場合には、具体的には次のようにして転送データの先頭アドレスの比較処理を行っている。
【００９９】
即ち図１２に示すように、まず、バスリセット前のＯＲＢのページテーブルの中の先頭セグメントＳＥＧ１に格納されている先頭アドレスＡＤ１を、ページテーブル記憶領域（ターゲットのデータバッファ上の領域）とは別の領域に記憶しておく。そして、この記憶されたＡＤ１と、バスリセット後のＯＲＢのページテーブルの中の先頭セグメントＳＥＧ１に格納される先頭アドレスＡＤ２とを比較する。
【０１００】
ページテーブルが例えば１２８個のセグメントを有する場合を考える。この場合に、１２８個の全てのセグメントをイニシエータから一度にリードし、ターゲットのデータバッファ上のページテーブル記憶領域に記憶すると、ページテーブルの記憶に必要な記憶容量が不要に増加してしまう。
【０１０１】
そこで本実施形態では、ページテーブルのセグメントを例えば８個ずつリードし、これらの８個のセグメントをターゲットのデータバッファ上のページテーブル記憶領域に書き込む。このようにすることで、ページテーブル記憶領域の使用記憶領域を節約できる。
【０１０２】
しかしながら、このようにすると、例えば最初の８個のセグメントをリードしてページテーブル記憶領域に書き込んだ後、次の８個のセグメントをリードしてページテーブル記憶領域に上書きすると、最初の８個のセグメントの情報が消えてしまい、ページテーブルの先頭セグメントＳＥＧ１に格納されている先頭アドレスＡＤ１も消えてしまうという不具合が生じる。
【０１０３】
本実施形態によれば、ページテーブルの先頭セグメントＳＥＧ１に格納されている先頭アドレスＡＤ１は、ページテーブル記憶領域とは別の領域に記憶される。従って、上記のような不具合が発生するのを防止できると共に、ページテーブル記憶領域の使用記憶容量も節約できるようになる。
【０１０４】
また本実施形態では、バスリセット前のＯＲＢ（コマンドブロックＯＲＢ）の内容とバスリセット後のＯＲＢの内容とを、先頭アドレスＡＤ１、ＡＤ２の比較処理に先立って比較するようにしている。
【０１０５】
即ち図１３に示すように、バスリセットの発生後、イニシエータがリコネクトに成功し、新たなＯＲＢを作成して転送要求してきた場合に、まず、バスリセット前のＯＲＢの内容とバスリセット後のＯＲＢの内容を比較する。そして、ＯＲＢの内容が同一の時に、初めて、バスリセット前のＯＲＢにより特定される先頭アドレスＡＤ１とバスリセット後のＯＲＢにより特定される先頭アドレスＡＤ２が同一か否かを比較する。
【０１０６】
例えば、イニシエータのパーソナルコンピュータで動作するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が第１のＯＳである場合には、後述するようにＯＲＢが順序番号などの識別情報を含む場合がある。従って、ＯＲＢの内容を比較すれば、バスリセット後のＯＲＢによる転送データが、バスリセット前のＯＲＢによる転送データの続きか否かを容易に判断できる。そして、ＯＲＢの内容を先に比較し、ＯＲＢの内容が同一でないと判断した場合には、先頭アドレスの比較処理を省略できるため、処理負荷を軽くできる。
【０１０７】
一方、イニシエータのＯＳが第２のＯＳである場合には、ＯＲＢが順序番号などの識別情報を含まない。従って、この場合には、先頭アドレスＡＤ１、ＡＤ２を比較することで、バスリセット後の転送データがバスリセット前の続きか否かを確実に判断できるようになる。
【０１０８】
また本実施形態のように、ＯＲＢの内容比較と先頭アドレスの比較とを両方行うことにより、ファームウェアは、イニシエータのＯＳが第１のＯＳか第２のＯＳかを意識する必要が無くなる。即ち、イニシエータのＯＳが第１のＯＳであっても第２のＯＳであっても、同一構成のファームウェアで処理できるようになり、ファームウェアの開発期間の短縮化や、デバッグ作業の容易化を図れる。
【０１０９】
なお本実施形態では、ＯＲＢの内容比較の際に識別情報以外にも種々の情報を比較している。例えば図１４に示すように、本実施形態では、コマンドブロックＯＲＢが含むページテーブル存在フラグＰや、データサイズや、コマンドブロック（コマンドセット）フィールドの中のオペレーションコード（印刷コマンド、リードコマンドなどを区別するコード）やデータ長を比較している。このような情報を比較することで、バスリセット前後のＯＲＢが同一か否かを簡素な処理で確実に判断できるようになる。
【０１１０】
さて、イニシエータのパーソナルコンピュータで動作するＯＳが、第１のＯＳである場合（或いは第２のＯＳの最新バージョンである場合）には、ＯＲＢが、ＯＲＢ同士を識別するための順序番号などの識別情報を含む。即ち、イニシエータのデバイスドライバが、ＯＲＢの所与のフィールドにＯＲＢの識別情報を書き込む。
【０１１１】
このような場合には、図１５に示すように、バスリセット前のＯＲＢが含む識別情報とバスリセット後のＯＲＢが含む識別情報とを比較する。そして、これらの識別情報が同一である場合には、図１５のＥ１に示すように、リセット発生時点の続きからデータ転送を再開するようにする。一方、同一でない場合には、バスリセット後のＯＲＢは新規のＯＲＢであるとして処理を行う。
【０１１２】
このようにすることで、バスリセット（リコネクト）後の転送データが、バスリセット前の続きか否かを、簡素な処理で判断できるようになる。そして、印刷データが二重転送されるのを避けることができるため、二重印刷などの誤印刷が生じるのを防止できると共に転送時間も短縮化できる。
【０１１３】
なお、ＯＲＢを識別するための識別情報としては、ＯＲＢの順序番号以外にも種々の情報を考えることができる。例えば、ＯＲＢが転送しようとしているデータのデータアドレスなどを識別情報として用いてもよい。即ち、ターゲットがハードディスクドライブである場合には、データのセクタアドレスなどをＯＲＢの識別情報として用いることができる。
【０１１４】
さて、バスリセットの発生時期は全くの任意である。従って、例えば図１６に示すように、ターゲットがデータ転送完了のステータスをイニシエータに転送したが、バスリセットの発生が要因となってイニシエーターからＡＣＫ（ＡＣＫコンプリート）が返って来ず、ＡＣＫミッシングになる場合がある。
【０１１５】
このような場合には、バスリセットの発生が要因となってイニシエータがステータスを受け取れず、ＡＣＫミッシングになったという第１のケースと、イニシエータはステータスを受け取り、ＡＣＫを返したが、バスリセットの発生が要因となってＡＣＫミッシングになったという第２のケースが考えられる。
【０１１６】
そして、上記第１のケースでは、イニシエータはデータ転送が不成功であったと考え、バスリセット後に同一のＯＲＢを再度作成するという第１の処理を行う。一方、上記第２のケースでは、イニシエータはデータ転送が成功したと考え、バスリセット後に次のＯＲＢを作成するという第２の処理を行う。
【０１１７】
ところが、ターゲットにはＡＣＫミッシングであったという情報しか伝わらないため、ターゲットは、イニシエータが上記第１、第２の処理のいずれを行ったのかを知ることができない。従ってこのような場合にバスリセット発生時点の続きからデータ転送を開始してしまうと、誤ったデータ転送が行われてしまう可能性がある。
【０１１８】
そこで本実施形態では図１６に示すように、バスリセットの発生が要因となってイニシエータからアクノリッジメントが返って来なかった場合には、デッド状態（データ転送不可状態）に遷移する。このようにすることで、誤ったデータ転送が行われる事態を防止できる。
【０１１９】
なお、図１５で説明した識別情報をＯＲＢに常に含ませるようにすれば、イニシエータが上記第１、第２の処理のいずれを行ったかを（イニシエータがデータ転送完了のステータスを受け取ったか否かを）、図１７に示すように、ＯＲＢが含む識別情報を比較することで判断できるようになる。
【０１２０】
即ち、バスリセット前のＯＲＢの識別情報とバスリセット後のＯＲＢの識別情報が同一である場合には、イニシエータが上記第１の処理を行ったと判断でき、同一でない場合には、上記第２の処理を行ったと判断できる。従って、ターゲットは、デッド状態に遷移することなく、バスリセット発生時点の続きからデータ転送を再開できるようになる。
【０１２１】
５．詳細な処理例
次に本実施形態の詳細な処理例について図１８〜図２２のフローチャートを用いて説明する。
【０１２２】
図１８〜図２０は、バスリセット発生時（リコネクト時）の処理の詳細例を示すフローチャートである。
【０１２３】
バスリセットが発生すると、ターゲットは、まず、イニシエータがログインしているか否かを判断し（ステップＳ２０）、ログインしている場合にはＩＥＥＥ１３９４のバス上の全ての転送処理（トランザクション）をキャンセルする（ステップＳ２１）。一方、ログインしていない場合には、バスリセットが発生しても特別な処理は不要であるため、何もしない（ステップＳ２２）。
【０１２４】
次に、既にバスリセット処理に入っているか否かを判断する（ステップＳ２３）。これにより、バスリセットが複数回発生した場合にそれに対応するバスリセット処理が無用に複数回繰り返される事態を防止できる。
【０１２５】
次に、バスリセット発生時点のＡＣＫ（アクノリッジメント）の状態を記憶しておく（ステップＳ２４）。これにより、その後に発生するトランザクション（例えばリコネクトのトランザクション）により、バスリセット直後のＡＣＫの内容が消されてしまう事態を防止できる。
【０１２６】
次に、ＩＥＥＥ１３９４のバス上で転送済みのデータのサイズ（バイト数）を記憶する（ステップＳ２５）。即ち、バスリセット発生時点において処理中であったセグメントの中での転送済みのデータのサイズを記憶する。そして、ステップＳ２３の判断のために、バスリセット処理中であることを示すフラグをオンにする（ステップＳ２６）。即ち、このフラグがオンになると、その後に、バスリセットが発生しても、ステップＳ２４〜Ｓ２６の処理は行われない。
【０１２７】
次に、イニシエータからのリコネクト待ちになり（ステップＳ２７）、イニシエータによりリコネクトされたか否かを判断する（ステップＳ２８）。そして、リコネクトされなかった場合には、ログインＯＲＢのリコネクトフィールドで指定されたリコネクトタイムアウト時間が経過したか否かを判断する（ステップＳ２９）。そして、経過した場合には、継続フラグ（データ転送が継続して再開される可能性があることを示すフラグ）をオフにして（ステップＳ３０）、ログアウト状態に状態遷移する（ステップＳ３１）。
【０１２８】
一方、リコネクトタイムアウト時間内にリコネクトされた場合には、リコネクトしてきたイニシエータが、バスリセット前にログインしていたイニシエータか否かを判断し（ステップＳ３２）、バスリセット前と異なるイニシエータであった場合には、そのイニシエータのリコネクトを拒否し、リコネクト待ちに戻る。
【０１２９】
バスリセット前と同じイニシエータがログインしてきた場合には、印刷のためのコマンドブロックＯＲＢ（印刷コマンドを含むＯＲＢ）を、バスリセット発生時点において処理中だったか否かを判断する（図１９のステップＳ３３）。そして、処理中でなかった場合には、継続フラグをオフにして（ステップＳ３６）、アイドル状態に状態遷移する（ステップＳ３７）。
【０１３０】
一方、印刷のためのコマンドブロックＯＲＢを処理中であった場合には、ステータスのライト中（ステータスをライトしてからＡＣＫが返ってくるまでの期間）にバスリセットが発生したか否かを判断する（ステップＳ３４）。そして、ステータスのライト中にバスリセットが発生した場合には、図１８のステップＳ２４で記憶したＡＣＫの情報に基づいて、ＡＣＫコンプリートか否かを判断する（ステップＳ３５）。
【０１３１】
そして、ＡＣＫコンプリートの場合には、継続フラグをオフにして（ステップＳ３６）、アイドル状態に状態遷移する（ステップＳ３７）。一方、ＡＣＫコンプリートでない場合には、ＡＣＫミッシングか否かを判断する（ステップＳ３８）。そして、ＡＣＫミッシングでなければ何もせず（ステップＳ３９）、ＡＣＫミッシングの場合には、継続フラグをオフにして（ステップＳ４０）、図１６で説明したようにデッド状態（データ転送不可状態）に状態遷移する（ステップＳ４１）。
【０１３２】
ステップＳ３４でバスリセットの発生がステータスのライト中でないと判断された場合には、処理中のＯＲＢの転送（印刷）データを１バイトでも後段のプリンタエンジンに転送したか否かを判断する（ステップＳ４２）。そして、１バイトも転送していなかった場合には継続フラグをオフにし（ステップＳ４３）、アイドル状態に状態遷移する（ステップＳ４９）。
【０１３３】
一方、１バイトでもプリンタエンジンに転送していた場合には、ＯＲＢの内容（データサイズ、ページテーブル存在フラグＰ、コマンドブロック）や、バスリセット発生時点までに転送できたデータのサイズを記憶する（ステップＳ４４）。
このデータのサイズは、バスリセット発生時点で後段のプリンタエンジンに既に転送したデータのバイト数と、バスリセット発生時点でＩＥＥＥ１３９４のバス上でのデータ転送は既に完了し、後段のプリンタエンジンに転送中又はこれから転送する予定のデータのバイト数の合計に相当する。即ち、例えば、プリンタで既に印刷したデータのバイト数と、プリンタで現在印刷中又はこれから印刷予定のデータのバイト数の合計に相当する。
【０１３４】
次に、ページテーブルが存在するか否かを判断し（ステップＳ４５）、存在しない場合には、ＯＲＢのデータスクリプタの内容を記憶する（ステップＳ４６）。即ち、ページテーブルが存在しない場合には、直接アドレス指定の場合の転送データのアドレス及びデータ長が記憶される（図６（Ｃ）参照）。
【０１３５】
一方、ページテーブルが存在する場合には、ページテーブルの先頭セグメントの内容（アドレス、データ長）と、バスリセット発生時点で処理中だったセグメントの内容（アドレス、データ長）及びセグメント番号を記憶する（ステップＳ４７）。そして、継続フラグをオンにして（ステップＳ４８）、アイドル状態に状態遷移する（ステップＳ４９）。
【０１３６】
図２１、図２２は、通常時の処理の詳細例を示すフローチャートである。
【０１３７】
まず、イニシエータからＯＲＢのリードを指示されたか否か（ドアベルレジスタがリングされたか否か）を判断し（ステップＳ５１）、指示されなかった場合にはアイドル状態にとどまる（ステップＳ５０）。一方、指示された場合には、イニシエータが作成したＯＲＢをイニシエータからリードする（ステップＳ５２）。そして、ＯＲＢが含むページテーブル存在フラグＰに基づいて、ページテーブルが存在するか否かを判断する（ステップＳ５３）。そして、ページテーブルが存在する場合には、ページテーブルのセグメントを例えば８セグメントずつリードする（ステップＳ５４）。
【０１３８】
次に、ＯＲＢのコマンドブロックにあるオペレーションコードに基づいて、リードしたＯＲＢが印刷のためのコマンドブロックＯＲＢか否かを判断する（ステップＳ５５）。そして、印刷のためのコマンドブロックＯＲＢであった場合には、ステップＳ５４でリードした８セグメントが、ページテーブルの最初の８セグメント（先頭セグメントを含む８セグメント）か否かを判断し（ステップＳ５６）、最初の８セグメントであった場合には、図２２に示すコマンド・アドレス比較処理に移行する（ステップＳ５７）。
【０１３９】
ステップＳ５５で印刷のためのコマンドブロックＯＲＢではないと判断された場合、ステップＳ５６で最初の８セグメントでないと判断された場合、及び、ステップＳ５７のコマンド・アドレス比較処理が終了した場合には、データのリード／ライトを行う（ステップＳ５８）。そして、１セグメント分のデータ、８セグメント分のデータをリード／ライトするまで繰り返す（ステップＳ５９、Ｓ６０）。
【０１４０】
次に、ページテーブルの全てのセグメントをリード／ライトしたか否かを判断し（ステップＳ６１）、全てのセグメントをリード／ライトしていない場合には、ページテーブルの次の８セグメントをリードする（ステップＳ５４）。一方、ページテーブルの全てのセグメントをリードした場合には、イニシエータに対してステータスをライトする（ステップＳ６２）。そして、印刷物の印刷のための全てのＯＲＢをリードしたか否かを判断し（ステップＳ６３）、次のＯＲＢがある場合にはステップＳ５２に戻り、次のＯＲＢが無い場合にはアイドル状態に状態遷移する（ステップＳ５０）。
【０１４１】
ステップＳ５３でページテーブルが存在しないと判断した場合には、リードしたＯＲＢが印刷のためのコマンドブロックＯＲＢか否かを判断する（ステップＳ６４）。そして、印刷のためのコマンドブロックＯＲＢであった場合には、図２２に示すコマンド・アドレス比較処理に移行する（ステップＳ６５）。
【０１４２】
一方、印刷のためのコマンドブロックＯＲＢではないと判断された場合、及び、コマンド・アドレス比較処理が終了した場合には、データをリード／ライトし（ステップＳ６６）、全てのデータをリード／ライトするまで繰り返す（ステップＳ６７）。そして、全てのデータをリード／ライトした場合には、ステップＳ６２に移行し、イニシエータに対してステータスをライトする。
【０１４３】
図２２のコマンド・アドレス比較処理においては、まず、継続フラグがオンか否かを判断する（ステップＳ７０）。この継続フラグは、図２０のステップＳ４８においてオンにされるフラグである。そして、継続フラグがオフの場合にはステップＳ７６に移行して、図１２で説明したように転送データの先頭アドレス（ページテーブルの先頭セグメントのアドレス）を記憶し、コマンド・アドレス比較処理を終了する。
【０１４４】
継続フラグがオンの場合には、図１３、図１４で説明したように、リードしたＯＲＢの内容がバスリセット前のＯＲＢの内容と同一か否かを判断する（ステップＳ７１）。この場合に、比較対象となるバスリセット前のＯＲＢの内容は、図２０のステップＳ４４において記憶されている。また、図１３で説明したように本実施形態では、アドレス比較（ステップＳ７２）に先立って、ＯＲＢの内容比較（ステップＳ７１）を行っている。
【０１４５】
ＯＲＢの内容がバスリセット前と同一であった場合には、図１１で説明したように、転送データの先頭アドレスがバスリセット前と同一か否かを判断する（ステップＳ７２）。そして、同一の場合には、データ転送の設定をバスリセット発生前の状態に戻す（ステップＳ７３）。即ち、図２０のステップＳ４４で記憶したバスリセット発生時点までの転送済みデータサイズや、ステップＳ４７で記憶したセグメントの内容やセグメント番号などに基づいて、図１１のＤ１に示す位置（バスリセット発生時点の続き）からデータ転送を再開できるように、データ転送の設定をバスリセット前の状態に戻す。そして、継続フラグをオフに戻す（ステップＳ７４）。この場合、バスリセット前に既に転送を完了していたデータが消失しないように、ターゲットのデータバッファ上のデータをクリアしないようにする。
【０１４６】
なお、ステップＳ７４の後に、ステップＳ７６のように転送データの先頭アドレスを記憶しておかないのは、バスリセット発生時点の続きからデータ転送を再開する場合には、バスリセット発生前に記憶しておいた先頭アドレスがそのまま使えるからである。
【０１４７】
ステップＳ７１でＯＲＢの内容がバスリセット前と同一でないと判断した場合、或いはステップＳ７２で先頭アドレスがバスリセット前と同一でないと判断した場合には、データ転送の再開処理を行わず、継続フラグをオフに戻すと共に転送データの先頭アドレスを記憶しておく（ステップＳ７５、Ｓ７６）、即ち、この場合には、リードしたＯＲＢを全くの新規のＯＲＢとして処理することになる。
【０１４８】
なお、ステップＳ７５の場合には、リードしたＯＲＢを最初から処理することになるため、ステップＳ７４と異なり、ターゲットのデータバッファのデータをクリアする。
【０１４９】
６．電子機器
次に、本実施形態のデータ転送制御装置を含む電子機器の例について説明する。
【０１５０】
例えば図２３（Ａ）に電子機器の１つであるプリンタの内部ブロック図を示し、図２４（Ａ）にその外観図を示す。ＣＰＵ（マイクロコンピュータ）５１０はシステム全体の制御などを行う。操作部５１１はプリンタをユーザが操作するためのものである。ＲＯＭ５１６には、制御プログラム、フォントなどが格納され、ＲＡＭ５１８はＣＰＵ５１０のワーク領域として機能する。表示パネル５１９はプリンタの動作状態をユーザに知らせるためのものである。
【０１５１】
ＰＨＹデバイス５０２、データ転送制御装置５００を介して、パーソナルコンピュータなどの相手ノードから送られてきた印字データは、バス５０４を介して印字処理部（プリンタエンジン）５１２に直接送られる。そして、印字データは、印字処理部５１２にて所与の処理が施され、プリントヘッダなどからなる印字部（データを出力するための装置）５１４により紙に印字されて出力される。
【０１５２】
図２３（Ｂ）に電子機器の１つであるスキャナの内部ブロック図を示し、図２４（Ｂ）にその外観図を示す。ＣＰＵ５２０はシステム全体の制御などを行う。操作部５２１はスキャナをユーザが操作するためのものである。ＲＯＭ５２６には制御プログラムなどが格納され、ＲＡＭ５２８はＣＰＵ５２０のワーク領域として機能する。
【０１５３】
光源、光電変換器などからなる画像読み取り部（データを取り込むための装置）５２２により原稿の画像が読み取られ、読み取られた画像のデータは画像処理部（スキャナエンジン）５２４により処理される。そして、処理後の画像データがバス５０５を介してデータ転送制御装置５００に直接送られる。データ転送制御装置５００は、この画像データにヘッダなどを付加することでパケットを生成し、ＰＨＹデバイス５０２を介してパーソナルコンピュータなどの相手ノードに送信する。
【０１５４】
図２３（Ｃ）に電子機器の１つであるＣＤ−ＲＷドライブの内部ブロック図を示し、図２４（Ｃ）にその外観図を示す。ＣＰＵ５３０はシステム全体の制御などを行う。操作部５３１はＣＤ−ＲＷをユーザが操作するためのものである。ＲＯＭ５３６には制御プログラムなどが格納され、ＲＡＭ５３８はＣＰＵ５３０のワーク領域として機能する。
【０１５５】
レーザ、モータ、光学系などからなる読み取り＆書き込み部（データを取り込むための装置又はデータを記憶するための装置）５３３によりＣＤ−ＲＷ５３２から読み取られたデータは、信号処理部５３４に入力され、エラー訂正処理などの所与の信号処理が施される。そして、信号処理が施されたデータが、バス５０６を介してデータ転送制御装置５００に直接送られる。データ転送制御装置５００は、このデータにヘッダなどを付加することでパケットを生成し、ＰＨＹデバイス５０２を介してパーソナルコンピュータなどの相手ノードに送信する。
【０１５６】
一方、ＰＨＹデバイス５０２、データ転送制御装置５００を介して、相手ノードから送られてきたデータは、バス５０６を介して信号処理部５３４に直接送られる。そして、信号処理部５３４によりこのデータに所与の信号処理が施され、読み取り＆書き込み部５３３によりＣＤ−ＲＷ５３２に記憶される。
【０１５７】
なお、図２３（Ａ）、（Ｂ）、（Ｃ）において、ＣＰＵ５１０、５２０、５３０の他に、データ転送制御装置５００でのデータ転送制御のためのＣＰＵを別に設けるようにしてもよい。
【０１５８】
また、図２３（Ａ）、（Ｂ）、（Ｃ）ではＲＡＭ５０１（データバッファに相当）がデータ転送制御装置５００の外部に設けられているが、ＲＡＭ５０１をデータ転送制御装置５００に内蔵させてもよい。
【０１５９】
本実施形態のデータ転送制御装置を電子機器に用いれば、バスに新たな電子機器が接続されてバスリセットが発生した場合にも、バスリセットを原因とする不具合の発生が防止される。これにより、電子機器の誤動作を防止できる。
【０１６０】
また本実施形態のデータ転送制御装置を電子機器に用いれば、高速なデータ転送が可能になる。従って、ユーザがパーソナルコンピュータなどによりプリントアウトの指示を行った場合に、少ないタイムラグで印字が完了するようになる。また、スキャナへの画像取り込みの指示の後に、少ないタイムラグで読み取り画像をユーザは見ることができるようになる。また、ＣＤ−ＲＷからのデータの読み取りや、ＣＤ−ＲＷへのデータの書き込みを高速に行うことができるようになる。
【０１６１】
また本実施形態のデータ転送制御装置を電子機器に用いることで、ＣＰＵ上で動作するファームウェアの処理負担が軽減され、安価なＣＰＵや低速のバスを用いることが可能になる。更に、データ転送制御装置の低コスト化、小規模化を図れるため、電子機器の低コスト化、小規模化も図れるようになる。
【０１６２】
なお本実施形態のデータ転送制御装置を適用できる電子機器としては、上記以外にも例えば、種々の光ディスクドライブ（ＣＤ−ＲＯＭ、ＤＶＤ）、光磁気ディスクドライブ（ＭＯ）、ハードディスクドライブ、ＴＶ、ＶＴＲ、ビデオカメラ、オーディオ機器、電話機、プロジェクタ、パーソナルコンピュータ、電子手帳、ワードプロセッサなど種々のものを考えることができる。
【０１６３】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１６４】
例えば、本発明のデータ転送制御装置の構成は、図７に示す構成が特に望ましいが、これに限定されるものではない。
【０１６５】
また、先頭アドレスの比較手法、コマンドの比較手法、データ転送の再開の手法も、本実施形態で説明した手法が特に望ましいが、これに限定されるものではない。
【０１６６】
また、本発明はＩＥＥＥ１３９４におけるバスリセットに特に有用だが、これ以外にも、少なくともノードのトポロジー情報をクリアするようなリセットであれば適用できる。
【０１６７】
また、本発明は、ＩＥＥＥ１３９４規格でのデータ転送に適用されることが特に望ましいが、これに限定されるものではない。例えばＩＥＥＥ１３９４と同様の思想に基づく規格やＩＥＥＥ１３９４を発展させた規格におけるデータ転送にも本発明は適用できる。
【図面の簡単な説明】
【図１】ＩＥＥＥ１３９４の層構造について示す図である。
【図２】ＳＢＰ−２について説明するための図である。
【図３】ＳＢＰ−２のデータ転送処理の概略について説明するための図である。
【図４】データをイニシエータからターゲットに転送する場合のコマンド処理について説明するための図である。
【図５】データをターゲットからイニシエータに転送する場合のコマンド処理について説明するための図である。
【図６】図６（Ａ）、（Ｂ）、（Ｃ）は、ページテーブルについて説明するための図である。
【図７】本実施形態のデータ転送制御装置の構成例を示す図である。
【図８】ターゲット側（ファームウェア）の処理の概要を示すフローチャートである。
【図９】イニシエータ側（デバイスドライバ）の処理の概要を示すフローチャートである。
【図１０】図１０（Ａ）、（Ｂ）、（Ｃ）は、二重印刷の問題について説明するための図である。
【図１１】転送データの先頭アドレスの比較結果に基づいてデータ転送を継続して再開する手法について説明するための図である。
【図１２】転送データの先頭アドレスの比較手法について説明するための図である。
【図１３】アドレス比較に先立ってコマンド比較を行う手法について説明するための図である。
【図１４】ＯＲＢの内容比較について説明するための図である。
【図１５】ＯＲＢの識別情報の比較結果に基づいてデータ転送を継続して再開する手法について説明するための図である。
【図１６】ステータスのライト中にバスリセットが発生し、ＡＣＫミッシングとなった場合に、デッド状態に移行する手法について説明するための図である。
【図１７】ステータスのライト中にバスリセットが発生し、ＡＣＫミッシングとなった場合に、イニシエータがステータスを受け取ったか否かをＯＲＢが含む識別情報に基づいて判断する手法について説明するための図である。
【図１８】バスリセット発生時（リコネクト時）の本実施形態の詳細な処理例について示すフローチャートである。
【図１９】バスリセット発生時（リコネクト時）の本実施形態の詳細な処理例について示すフローチャートである。
【図２０】バスリセット発生時（リコネクト時）の本実施形態の詳細な処理例について示すフローチャートである。
【図２１】通常時の本実施形態の詳細な処理例について示すフローチャートである。
【図２２】通常時の本実施形態の詳細な処理例について示すフローチャートである。
【図２３】図２３（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の内部ブロック図の例である。
【図２４】図２４（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の外観図の例である。
【符号の説明】
１０    データ転送制御装置
１２    ＰＨＹデバイス
１４    リンクデバイス
１６    ＣＰＵ
１８    データバッファ
２０    ファームウェア（Ｆ／Ｗ）
３０    コミュニケーション部（ＣＯＭ）
４０    マネージメント部（ＭＮＧ）
５０    プリントタスク部（ＰＲＴ）
６０    フェッチ部（ＦＣＨ）
６２    判断部
６４    コマンド記憶部
６６    コマンド比較部
６８    アドレス記憶部
７０    アドレス比較部
７２    データ転送再開部
１００  パーソナルコンピュータ
１０２  デバイスドライバ
１０４  データバッファ
１１０  情報記憶媒体
【図１】
0003598922.tif 000002
【図２】
0003598922.tif 000003
【図３】
0003598922.tif 000004
【図４】
0003598922.tif 000005
【図５】
0003598922.tif 000006
【図６】
0003598922.tif 000007
【図７】
0003598922.tif 000008
【図８】
0003598922.tif 000009
【図９】
0003598922.tif 000010
【図１０】
0003598922.tif 000011
【図１１】
0003598922.tif 000012
【図１２】
0003598922.tif 000013
【図１３】
0003598922.tif 000014
【図１４】
0003598922.tif 000015
【図１５】
0003598922.tif 000016
【図１６】
0003598922.tif 000017
【図１７】
0003598922.tif 000018
【図１８】
0003598922.tif 000019
【図１９】
0003598922.tif 000020
【図２０】
0003598922.tif 000021
【図２１】
0003598922.tif 000022
【図２２】
0003598922.tif 000023
【図２３】
0003598922.tif 000024
【図２４】
0003598922.tif 000025