(57)【特許請求の範囲】
【請求項１】
バスを介して接続される相手ノードと自ノードとの間でのデータ転送のためのデータ転送制御システムであって、
第１のバスを介して相手ノードから転送されてきた第１のコマンドパケットにより指定されるページテーブルのページテーブルエレメントのうち、バスリセット発生時点において処理中であったページテーブルエレメントに格納される第１のアドレスを記憶するアドレス記憶部と、
データ転送を中断させるバスリセット発生後に第１のバスを介して相手ノードから第２のコマンドパケットが転送されてきた場合に、第２のコマンドパケットにより指定されるページテーブルのページテーブルエレメントのうち、前記第１のアドレスが格納されるページテーブルエレメントと同一エレメント番号のページテーブルエレメントに格納される第２のアドレスを読み出し、記憶された第１のアドレスと読み出した第２のアドレスを比較するアドレス比較部と、
第１のアドレスと第２のアドレスが同一であると判断された場合に、バスリセットにより中断したデータ転送を該バスリセット発生時点において処理中であったページテーブルエレメントから再開する転送再開部と、
を含むことを特徴とするデータ転送制御システム。
【請求項２】
請求項１において、
前記アドレス記憶部が、
ページテーブルの非存在時には、第１のコマンドパケットにより直接指定される第１の直接アドレスを記憶し、
前記アドレス比較部が、
ページテーブルの非存在時には、第１のコマンドパケットにより直接指定される第１の直接アドレスと、第２のコマンドパケットにより直接指定される第２の直接アドレスとを比較し、
前記転送再開部が、
第１の直接アドレスと第２の直接アドレスが同一であると判断された場合に、データ転送を再開することを特徴とするデータ転送制御システム。
【請求項３】
請求項１又は２において、
前記アドレス記憶部が、
第１のコマンドパケットにより指定されるページテーブルのページテーブルエレメントのうち、先頭ページテーブルエレメントから処理中ページテーブルエレメントに至るＫ個（Ｋは２以上の整数）のページテーブルエレメントに格納されるＫ個の第１のアドレスを記憶し、
前記アドレス比較部が、
バスリセット発生後に転送されてきた第２のコマンドパケットにより指定されるページテーブルのページテーブルエレメントのうち、前記Ｋ個の第１のアドレスが格納されるページテーブルエレメントと同一エレメント番号のページテーブルエレメントに格納されるＫ個の第２のアドレスを読み出し、記憶された前記Ｋ個の第１のアドレスと読み出された前記Ｋ個の第２のアドレスを比較し、
前記転送再開部が、
Ｋ個の第１のアドレスとＫ個の第２のアドレスが同一であると判断された場合に、バスリセット発生時点において処理中であったページテーブルエレメントからデータ転送を再開することを特徴とするデータ転送制御システム。
【請求項４】
バスを介して接続される相手ノードと自ノードとの間でのデータ転送のためのデータ転送制御システムであって、
第１のバスを介して相手ノードから転送されてきた第１のコマンドパケットの内容を記憶するコマンド記憶部と、
ページテーブルの非存在時には、第１のコマンドパケットにより直接指定される第１の直接アドレスを記憶するアドレス記憶部と、
データ転送を中断させるバスリセット発生後に第１のバスを介して相手ノードから第２のコマンドパケットが転送されてきた場合に、第１のコマンドパケットの内容と第２のコマンドパケットの内容を比較するコマンド比較部と、
ページテーブルの非存在時には、第１のコマンドパケットにより直接指定される第１の直接アドレスと、第２のコマンドパケットにより直接指定される第２の直接アドレスとを比較するアドレス比較部と、
ページテーブルの非存在時には、第１、第２のコマンドパケットの内容が同一であり且つ第１、第２の直接アドレスが同一であると判断された場合に、バスリセット発生時点のデータ転送の続きからデータ転送を再開し、ページテーブルの存在時には、第１、第２のコマンドパケットの内容が同一であると判断された場合に、バスリセットにより中断されたデータ転送を該バスリセット発生時点のデータ転送の続きから再開する転送再開部と、
を含むことを特徴とするデータ転送制御システム。
【請求項５】
請求項１乃至４のいずれかにおいて、
第１のバスを介して転送されてきたコマンドパケットを受け、コマンドパケットにより指示されるコマンドを、第２のバスに接続されるデバイスに対して発行し、第２のバスを介したＤＭＡ転送の開始を指示するコマンド処理部と、
前記転送再開部によるデータ転送の再開を行わない場合に、第１のコマンドパケットに基づき第２のバスに接続されるデバイスに対して発行したコマンドを、第１のコマンドパケットに基づき開始したＤＭＡ転送の完了後にアボートするコマンドアボート部とを含むことを特徴とするデータ転送制御システム。
【請求項６】
請求項５において、
前記コマンドアボート部が、
ＤＭＡ転送が完了するまで、第２のバスに接続されるデバイスとの間でダミーデータを転送する制御を行うことを特徴とするデータ転送制御システム。
【請求項７】
請求項６において、
前記コマンドアボート部が、
コマンドをアボートするか否かの判断時においてＤＭＡ転送が動作中でなかった場合には、ダミーデータの転送制御を行うことなくコマンドをアボートすることを特徴とするデータ転送制御システム。
【請求項８】
請求項６又は７において、
転送データを一時的に記憶するパケットバッファのポインタをリングバッファ方式で管理し、第２のバスからの転送データがパケットバッファに書き込まれる毎に第１のポインタを更新し、第１のバスへの転送データがパケットバッファから読み出される毎に第２のポインタを更新するポインタ管理部を含み、
前記コマンドアボート部が、
第２のバスからの転送データがパケットバッファに書き込まれる毎に更新される第１のポインタにより、第２のポインタが追い越されないように第２のポインタをダミー更新することで、ダミーデータの転送制御を行うことを特徴とするデータ転送制御システム。
【請求項９】
請求項６乃至８のいずれかにおいて、
転送データを一時的に記憶するパケットバッファのポインタをリングバッファ方式で管理し、第２のバスへの転送データがパケットバッファから読み出される毎に第３のポインタを更新し、第１のバスからの転送データがパケットバッファに書き込まれる毎に第４のポインタを更新するポインタ管理部を含み、
前記コマンドアボート部が、
第２のバスへの転送データがパケットバッファから読み出される毎に更新される第３のポインタにより、第４のポインタが追い越されないように第４のポインタをダミー更新することで、ダミーデータの転送制御を行うことを特徴とするデータ転送制御システム。
【請求項１０】
請求項１乃至９のいずれかにおいて、
第１のバスが、ＩＥＥＥ１３９４規格によりデータ転送が行われるバスであることを特徴とするデータ転送制御システム。
【請求項１１】
請求項１乃至１０のいずれかのデータ転送制御システムと、
データ転送制御システムの第２のバスに接続されるデバイスと、
を含むことを特徴とする電子機器。
【請求項１２】
バスを介して接続される相手ノードと自ノードとの間でのデータ転送のためのデータ転送制御方法であって、
第１のバスを介して相手ノードから転送されてきた第１のコマンドパケットにより指定されるページテーブルのページテーブルエレメントのうち、バスリセット発生時点において処理中であったページテーブルエレメントに格納される第１のアドレスを記憶し、
データ転送を中断させるバスリセット発生後に第１のバスを介して相手ノードから第２のコマンドパケットが転送されてきた場合に、第２のコマンドパケットにより指定されるページテーブルのページテーブルエレメントのうち、前記第１のアドレスが格納されるページテーブルエレメントと同一エレメント番号のページテーブルエレメントに格納される第２のアドレスを読み出し、記憶された第１のアドレスと読み出した第２のアドレスを比較し、
第１のアドレスと第２のアドレスが同一であると判断された場合に、バスリセットにより中断されたデータ転送を該バスリセット発生時点において処理中であったページテーブルエレメントから再開することを特徴とするデータ転送制御方法。
【請求項１３】
バスを介して接続される相手ノードと自ノードとの間でのデータ転送のためのデータ転送制御方法であって、
第１のバスを介して相手ノードから転送されてきた第１のコマンドパケットの内容を記憶し、
ページテーブルの非存在時には、第１のコマンドパケットにより直接指定される第１の直接アドレスを記憶し、
データ転送を中断させるバスリセット発生後に第１のバスを介して相手ノードから第２のコマンドパケットが転送されてきた場合に、第１のコマンドパケットの内容と第２のコマンドパケットの内容を比較し、
ページテーブルの非存在時には、第１のコマンドパケットにより直接指定される第１の直接アドレスと、第２のコマンドパケットにより直接指定される第２の直接アドレスとを比較し、
ページテーブルの非存在時には、第１、第２のコマンドパケットの内容が同一であり且つ第１、第２の直接アドレスが同一であると判断された場合に、データ転送を再開し、
ページテーブルの存在時には、第１、第２のコマンドパケットの内容が同一であると判断された場合に、バスリセットにより中断されたデータ転送を該バスリセット発生時点のデータ転送の続きから再開することを特徴とするデータ転送制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ転送制御システム、電子機器及びデータ転送制御方法に関する。
【０００２】
【背景技術】
近年、ＩＥＥＥ１３９４と呼ばれるインターフェース規格が脚光を浴びている。このＩＥＥＥ１３９４では、バスに電子機器が新たに接続されたり、バスから電子機器が取り外されたりして、バスに接続されるノードが増減すると、いわゆるバスリセットが発生する。そしてバスリセットが発生するとノードのトポロジ情報がクリアされ、その後、トポロジ情報が自動的に再設定される。これにより、いわゆるホット状態でのケーブルの抜き差し（ホットプラグ）が可能となるため、一般ユーザは、ＶＴＲなどの通常の家庭用電化製品と同じように、電子機器へのケーブルの抜き差を自由にできるようになる。
【０００３】
しかしながら、このバスリセットの発生が要因となって種々の問題が生じる。このような問題を解決する従来技術としては例えば以下のものがある。
【０００４】
【特許文献１】
特開２００１−１７７５３７号公報
【特許文献２】
特開２００１−１７７５３６号公報
しかしながら、上記の従来技術によっても、将来登場するＯＳ（オペレーティングシステム）やアプリケーションプログラムの仕様によっては、バスリセット時の正常動作を保証できない可能性もある。
【０００５】
また例えばハードディスクドライブ（広義にはストレージデバイス。更に広義にはデバイス）に対してコマンドを発行してＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を開始した後、このＤＭＡ転送中にバスリセットが発生すると、ハードディスクドライブがハングアップするなどの問題が生じる可能性もある。
【０００６】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、バスリセット時の正常動作を、より確実に保証できるデータ転送制御システム、電子機器及びデータ転送制御方法を提供することにある。
【０００７】
【課題を解決するための手段】
本発明は、バスを介してデータ転送を行うデータ転送制御システムであって、第１のバスを介して転送されてきた第１のコマンドパケットにより指定されるページテーブルのページテーブルエレメントのうち、バスリセット発生時点において処理中であったページテーブルエレメントに格納される第１のアドレスを記憶するアドレス記憶部と、バスリセット発生後に第１のバスを介して第２のコマンドパケットが転送されてきた場合に、第２のコマンドパケットにより指定されるページテーブルのページテーブルエレメントのうち、前記第１のアドレスが格納されるページテーブルエレメントと同一エレメント番号のページテーブルエレメントに格納される第２のアドレスを読み出し、記憶された第１のアドレスと読み出した第２のアドレスを比較するアドレス比較部と、第１のアドレスと第２のアドレスが同一であると判断された場合に、バスリセット発生時点において処理中であったページテーブルエレメントからデータ転送を再開する転送再開部とを含むデータ転送制御システムに関係する。
【０００８】
本発明によれば、バスリセット発生時点において処理中であったページテーブルエレメントに格納される第１のアドレスが記憶される。そして、バスリセット後の第２のコマンドパケットで指定されるページテーブルのページテーブルエレメントのうち、第１のアドレスが格納されるページテーブルエレメントと同一エレメント番号のページテーブルエレメントに格納される第２のアドレスが読み出される。そして第１、第２のアドレスが同一であることを１つの条件として、データ転送が再開される。このようにすることで、バスリセット時に処理中であったページテーブルエレメントからデータ転送を確実に再開できるようになり、より信頼度の高いデータ転送を実現できる。
【０００９】
また本発明では、前記アドレス記憶部が、ページテーブルの非存在時には、第１のコマンドパケットにより直接指定される第１の直接アドレスを記憶し、前記アドレス比較部が、ページテーブルの非存在時には、第１のコマンドパケットにより直接指定される第１の直接アドレスと、第２のコマンドパケットにより直接指定される第２の直接アドレスとを比較し、前記転送再開部が、第１の直接アドレスと第２の直接アドレスが同一であると判断された場合に、データ転送を再開するようにしてもよい。
【００１０】
このようにすれば、ページテーブルの存在の有無に依存せずに、バスリセット発生時の正常動作を保証できるようになる。
【００１１】
また本発明では、前記アドレス記憶部が、第１のコマンドパケットにより指定されるページテーブルのページテーブルエレメントのうち、先頭ページテーブルエレメントから処理中ページテーブルエレメントに至るＫ個（Ｋは２以上の整数）のページテーブルエレメントに格納されるＫ個の第１のアドレスを記憶し、前記アドレス比較部が、バスリセット発生後に転送されてきた第２のコマンドパケットにより指定されるページテーブルのページテーブルエレメントのうち、前記Ｋ個の第１のアドレスが格納されるページテーブルエレメントと同一エレメント番号のページテーブルエレメントに格納されるＫ個の第２のアドレスを読み出し、記憶された前記Ｋ個の第１のアドレスと読み出された前記Ｋ個の第２のアドレスを比較し、前記転送再開部が、Ｋ個の第１のアドレスとＫ個の第２のアドレスが同一であると判断された場合に、バスリセット発生時点において処理中であったページテーブルエレメントからデータ転送を再開するようにしてもよい。
【００１２】
なお先頭ページテーブルエレメントから処理中ページテーブルエレメントに至るページテーブルエレメントのうち、一部のページテーブルエレメントの比較処理をバスリセットの前後で行って、データ転送の再開処理を行うようにしてもよい。
【００１３】
また本発明は、バスを介してデータ転送を行うデータ転送制御システムであって、第１のバスを介して転送されてきた第１のコマンドパケットの内容を記憶するコマンド記憶部と、ページテーブルの非存在時には、第１のコマンドパケットにより直接指定される第１の直接アドレスを記憶するアドレス記憶部と、バスリセット発生後に第１のバスを介して第２のコマンドパケットが転送されてきた場合に、第１のコマンドパケットの内容と第２のコマンドパケットの内容を比較するコマンド比較部と、ページテーブルの非存在時には、第１のコマンドパケットにより直接指定される第１の直接アドレスと、第２のコマンドパケットにより直接指定される第２の直接アドレスとを比較するアドレス比較部と、ページテーブルの非存在時には、第１、第２のコマンドパケットの内容が同一であり且つ第１、第２の直接アドレスが同一であると判断された場合に、バスリセット発生時点のデータ転送の続きからデータ転送を再開し、ページテーブルの存在時には、第１、第２のコマンドパケットの内容が同一であると判断された場合に、バスリセット発生時点のデータ転送の続きからデータ転送を再開する転送再開部とを含むデータ転送制御システムに関係する。
【００１４】
本発明によれば、ページテーブルの非存在時には、第１、第２のコマンドパケットの内容が同一であり且つ第１、第２の直接アドレスが同一の場合に、データ転送の再開処理が行われる。一方、ページテーブルの存在時には、第１、第２のコマンドパケットの内容が同一である場合に、データ転送の再開処理が行われる。このようにすることで、ページテーブル存在時に、ページテーブルエレメントに格納されるアドレスの比較処理を行わなくて済むようになり、処理負荷を軽減できる。また第１、第２のコマンドパケットの内容が同一であることを条件にデータ転送の再開処理が行われるため、バスリセットの発生時点のデータ転送から、適正にデータ転送を再開できるようになる。
【００１５】
また本発明では、第１のバスを介して転送されてきたコマンドパケットを受け、コマンドパケットにより指示されるコマンドを、第２のバスに接続されるデバイスに対して発行し、第２のバスを介したＤＭＡ転送の開始を指示するコマンド処理部と、前記転送再開部によるデータ転送の再開を行わない場合に、第１のコマンドパケットに基づき第２のバスに接続されるデバイスに対して発行したコマンドを、第１のコマンドパケットに基づき開始したＤＭＡ転送の完了後にアボートするコマンドアボート部とを含むようにしてもよい。
【００１６】
本発明では、第１のバスから転送されてきたコマンドパケットにより指示されるコマンドが、第２のバスに接続されるデバイスに対して発行され、ＤＭＡ転送の開始が指示される。そして、第２のバスに接続されるデバイスに発行したコマンドが、ＤＭＡ転送の完了後にアボート（中止、キャンセル）される。これにより、ＤＭＡ転送が不正に終了することで第２のバスに接続されるデバイスがハングアップする事態等を防止でき、デバイスに発行したコマンドを適正にアボートできるようになる。なお、例えば、第１のバスは、第１のインターフェース規格に準拠したデータ転送を行うためのバスであり、第２のバスは、第２のインターフェース規格に準拠したデータ転送を行うためのバスである。
【００１７】
また本発明では、前記コマンドアボート部が、ＤＭＡ転送が完了するまで、第２のバスに接続されるデバイスとの間でダミーデータを転送する制御を行うようにしてもよい。
【００１８】
この場合のダミーデータの転送制御は、転送データを一時的に記憶するパケットバッファのポインタをダミー更新することで実現してもよいし、ダミーデータ転送用のハードウェアを設けて実現してもよい。また、ダミーデータは、例えば、第２のバスを介して転送される一方で、第１のバスを介して転送されないデータである。
【００１９】
また本発明では、前記コマンドアボート部が、コマンドをアボートするか否かの判断時においてＤＭＡ転送が動作中でなかった場合には、ダミーデータの転送制御を行うことなくコマンドをアボートするようにしてもよい。
【００２０】
このようにすることで、ダミーデータの転送制御の処理を省略でき、処理の効率化を図れる。
【００２１】
また本発明では、転送データを一時的に記憶するパケットバッファのポインタをリングバッファ方式で管理し、第２のバスからの転送データがパケットバッファに書き込まれる毎に第１のポインタを更新し、第１のバスへの転送データがパケットバッファから読み出される毎に第２のポインタを更新するポインタ管理部を含み、前記コマンドアボート部が、第２のバスからの転送データがパケットバッファに書き込まれる毎に更新される第１のポインタにより、第２のポインタが追い越されないように第２のポインタをダミー更新することで、ダミーデータの転送制御を行うようにしてもよい。
【００２２】
また本発明では、転送データを一時的に記憶するパケットバッファのポインタをリングバッファ方式で管理し、第２のバスへの転送データがパケットバッファから読み出される毎に第３のポインタを更新し、第１のバスからの転送データがパケットバッファに書き込まれる毎に第４のポインタを更新するポインタ管理部を含み、前記コマンドアボート部が、第２のバスへの転送データがパケットバッファから読み出される毎に更新される第３のポインタにより、第４のポインタが追い越されないように第４のポインタをダミー更新することで、ダミーデータの転送制御を行うようにしてもよい。
【００２３】
また本発明では、第１のバスが、ＩＥＥＥ１３９４規格によりデータ転送が行われるバスであってもよい。
【００２４】
また本発明は、上記のいずれかのデータ転送制御システムと、データ転送制御システムの第２のバスに接続されるデバイスとを含む電子機器に関係する。
【００２５】
【発明の実施の形態】
以下、本発明の実施形態について詳細に説明する。
【００２６】
なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００２７】
１．ＩＥＥＥ１３９４、ＳＢＰ−２
１．１  層構造
ＩＥＥＥ１３９４のトランザクション層の一部の機能を含む上位のプロトコルとして、ＳＢＰ−２（Ｓｅｒｉａｌ  Ｂｕｓ  Ｐｒｏｔｏｃｏｌ−２）と呼ばれるプロトコルが提案されている。このＳＢＰ−２（広義にはＳＢＰ）は、ＳＣＳＩ（ＳＰＣ−２）のコマンドセットをＩＥＥＥ１３９４のプロトコル上で利用可能にするために提案されたものである。このＳＢＰ−２を用いれば、既存のＳＣＳＩ規格対応の電子機器で使用されていたコマンドセットに最小限の変更を加えて、ＩＥＥＥ１３９４規格の電子機器に使用できるようになる。従って、電子機器の設計や開発を容易化できる。
【００２８】
図１に、ＩＥＥＥ１３９４、ＳＢＰ−２の層構造（プロトコル・スタック）を簡略化して示す。ＩＥＥＥ１３９４（ＩＥＥＥ１３９４−１９９５、Ｐ１３９４ａ、Ｐ１３９４ｂ等）のプロトコルは、トランザクション層、リンク層、物理層により構成される。
【００２９】
トランザクション層は、上位層にトランザクション単位のインターフェース（サービス）を提供し、下層のリンク層が提供するインターフェースを通して、リードトランザクション、ライトトランザクション、ロックトランザクション等のトランザクションを実施する。ここで、リードトランザクションでは、応答ノードから要求ノードにデータが転送される。一方、ライトトランザクションでは、要求ノードから応答ノードにデータが転送される。またロックトランザクションでは、要求ノードから応答ノードにデータが転送され、応答ノードがそのデータに処理を施して要求ノードに返信する。
【００３０】
リンク層は、アドレッシング、データチェック、パケット送受信のためのデータフレーミング、アイソクロナス転送のためのサイクル制御などを提供する。物理層は、リンク層により使用されるロジカルシンボルの電気信号への変換や、バスの調停や、バスの物理的インターフェースを提供する。ＳＢＰ−２層は、図１に示すように、ＩＥＥＥ１３９４（広義には第１のインターフェース規格）のトランザクション層の一部の機能を含む上位のプロトコルを提供する。
【００３１】
１．２  ＳＢＰ−２の処理
図２に、ＳＢＰ−２（広義には第１のインターフェース規格の上位の第１のプロトコル）の処理の全体についてのフローチャートを示す。
【００３２】
図２に示すように、ＳＢＰ−２では、まず、接続機器の確認を行うためのコンフィギュレーションＲＯＭのリード処理が行われる（ステップＴ１）。
【００３３】
次に、イニシエータ（例えばパーソナルコンピュータ）が、ターゲット（例えばストレージデバイス）に対するアクセス権（リクエスト開始の許可。バスの使用権）を獲得するためのログイン処理が行われる（ステップＴ２）。具体的には、イニシエータにより作成されたログインＯＲＢ（Ｏｐｅｒａｔｉｏｎ  Ｒｅｑｕｅｓｔ  Ｂｌｏｃｋ）を用いてログイン処理が行われる。
【００３４】
次に、フェッチエージェントの初期化が行われる（ステップＴ３）。そして、コマンドブロックＯＲＢ（ノーマルコマンドＯＲＢ）を用いてコマンド処理が行われ（ステップＴ４）、最後に、ログアウトＯＲＢを用いてログアウト処理が行われる（ステップＴ５）。
【００３５】
ここで、ステップＴ４のコマンド処理においては、図３のＡ１に示すように、イニシエータがライト要求パケットを転送して（ライト要求トランザクションを発行して）、ターゲットのドアベルレジスタをリングする。すると、Ａ２に示すように、ターゲットがリード要求パケットを転送し、イニシエータが対応するリード応答パケットを返す。これにより、イニシエータが作成したＯＲＢ（コマンドブロックＯＲＢ）が、ターゲットのデータバッファ（パケットバッファ）にフェッチされる。そして、ターゲットは、フェッチされたＯＲＢに含まれるコマンドを解析する。
【００３６】
そして、ＯＲＢに含まれるコマンドがＳＣＳＩのライトコマンドであった場合には、Ａ３に示すように、ターゲットがリード要求パケットをイニシエータに転送し、イニシエータが対応するリード応答パケットを返す。これにより、イニシエータのデータバッファに格納されているデータがターゲットに転送される。そして、例えばターゲットがストレージデバイスであった場合には、転送されたデータがストレージデバイスに書き込まれる。
【００３７】
一方、ＯＲＢに含まれるコマンドがＳＣＳＩのリードコマンドであった場合には、図４のＢ１に示すように、ターゲットは、一連のライト要求パケットをイニシエータに転送する。これにより、例えばターゲットがストレージデバイスであった場合には、ストレージデバイスから読み出されたデータが、イニシエータのデータバッファに転送されることになる。
【００３８】
このＳＢＰ−２によれば、ターゲットは、自身が都合の良いときに要求パケットを転送して（トランザクションを発行して）、データを送受信できる。従って、イニシエータとターゲットが同期して動く必要がなくなるため、データ転送効率を高めることができる。
【００３９】
なお、ＩＥＥＥ１３９４の上位プロトコルとしては、ストレージデバイスやプリンタのデータの転送に最適なＳＢＰ−２以外にも、映像や音声のデータの転送に最適なＡＶ／Ｃコマンドが提案されている。また、ＩＥＥＥ１３９４バス上で、インターネットプロトコル（ＩＰ）のパケットを転送するものとしてＩＰｏｖｅｒ１３９４と呼ばれるプロトコルも提案されている。
【００４０】
なお、ターゲット、イニシエータ間でデータ転送を行う場合、図５（Ａ）のようにイニシエータ（パーソナルコンピュータ、相手ノード）のデータバッファにページテーブルが存在する場合と、存在しない場合がある。
【００４１】
そして、ページテーブルが存在する場合には、図５（Ｂ）に示すように、イニシエータが作成したＯＲＢの中には、そのページテーブルのデータバッファ（イニシエータ）上でのアドレスや、ページテーブルのエレメント数（ページテーブルエレメントの個数）が含まれる。そして、転送データのアドレス（先頭アドレス、読み出しアドレス、書き込みアドレス）は、このページテーブルを用いて間接アドレス指定される。より具体的には、ページテーブルは複数のページテーブルエレメントにより構成され、各ページテーブルエレメントはエレメント番号により指定される。そして転送データの各セグメントデータのデータバッファ（イニシエータ）上でのアドレスは、ページテーブルの各ページテーブルエレメントに格納されるアドレスにより指定される。
【００４２】
一方、ページテーブルが存在しない場合には、図５（Ｃ）に示すように、ＯＲＢの中にアドレスとデータ長が含まれる。そして、ＯＲＢに含まれるアドレスにより転送データのアドレスが直接アドレス指定される。なおページテーブルが存在するか否かは、ＯＲＢが含むページテーブル存在フラグを用いて判断できる。
【００４３】
１．３  バスリセット
ＩＥＥＥ１３９４では、電源が投入されたり、途中でデバイスの抜き差しが発生すると、バスリセットが発生（発行）する。即ち、各ノードは、ポートの電圧変化を監視している。そして、バスに新たなノードが接続されるなどしてポートの電圧に変化が生じると、この変化を検知したノードは、バス上の他のノードに対して、バスリセットが発生したことを知らせる。また、各ノードの物理層は、バスリセットが発生したことをリンク層に伝える。
【００４４】
そして、このようにバスリセットが発生すると、トポロジ情報（ノードＩＤ等）がクリアされる。そして、その後、トポロジー情報が自動的に再設定される。即ち、バスリセット後、ツリー識別、自己識別が行われる。その後、アイソクロナスリソースマネージャ、サイクルマスタ、バスマネージャ等の管理ノードが決定される。そして、通常のパケット転送が再開される。
【００４５】
このようにＩＥＥＥ１３９４では、バスリセット後にトポロジ情報が自動的に再設定されるため、電子機器のケーブルを自由に抜き差しできるようになり、いわゆるホットプラグを実現できる。
【００４６】
なお、トランザクションの途中でバスリセットが発生した場合には、そのトランザクションはキャンセルされる。そして、キャンセルされたトランザクションを発行した要求ノードは、トポロジー情報が再設定された後に、要求パケットを再度転送する。また、応答ノードは、バスリセットによりキャンセルされたトランザクションの応答パケットを要求ノードに返送してはならない。
【００４７】
１．４  バスリセット時の問題点
さて、バスリセットがデータ転送中に発生すると以下のような問題が生じる。例えば図６（Ａ）に示すように、Ｃ１に示す位置（アドレス）までデータを転送したところで、バスリセットが発生したとする。この場合には、バスリセット発生時点で処理中であったトランザクションは全てキャンセルされる。従って、バスリセット発生前のＯＲＢ１によりデータの転送を要求していたパーソナルコンピュータ等のイニシエータは、図６（Ｂ）に示すように、バスリセット発生後にＯＲＢ２を再度作成して、データの転送を最初からやり直すようにデバイス（ストレージデバイス、プリンタデバイス、スキャナデバイス、或いは撮像デバイス等）に指示する。このため、図６（Ｂ）のＣ２に示す位置からデータ転送が再開されてしまい、データが二重に転送される問題が生じる。
【００４８】
このような問題を解決するために特開平２００１−１７７５３７号の従来技術では、バスリセット前のＯＲＢ（以下、適宜ＯＲＢ１と呼ぶ）と、バスリセット後のＯＲＢ（以下、適宜ＯＲＢ２と呼ぶ）の内容を比較し、ＯＲＢ１とＯＲＢ２が同一内容ならば図６（Ｂ）のＣ３に示す位置からデータ転送を再開する手法を採用している。また特開平２００１−１７７５３６号の従来技術では、バスリセット前の転送データ（ページテーブルで転送される全転送データ）の先頭アドレスＡＤＳ１と、バスリセット後の転送データの先頭アドレスＡＤＳ２を比較し、ＡＤＳ１とＡＤＳ２が同一であればＣ３に示す位置からデータ転送を再開する手法を採用している。
【００４９】
このようにＯＲＢ１とＯＲＢ２の比較結果やＡＤＳ１とＡＤＳ２の比較結果に基づいてデータ転送を再開しても、現在の仕様のＯＳ（オペレーティングシステム）においては問題は生じない。しかしながら、将来登場するＯＳ（オペレーティングシステム）やアプリケーションプログラムの仕様によっては、バスリセット時の正常動作の確実な保証を実現できない可能性がある。
【００５０】
例えば図６（Ａ）においてＣ４に示すセグメントデータを転送した後にバスリセットが発生したとする。この時、先頭アドレスであるＡＤＳ１とＡＤＳ２が同じあったとしても、データ転送を再開してはならない場合がある。具体的には、ＯＳのＭＭＵ（メモリ・マネージメント・ユニット）の動作の仕方によっては、バスリセット前のＯＲＢ１で指定されるページテーブルに格納されるアドレスが例えばＡＤ１、ＡＤ２、ＡＤ３、ＡＤ４・・・であるのに対して、バスリセット後のＯＲＢ２で指定されるページテーブルに格納されるアドレスが例えばＡＤ１、ＡＤ５、ＡＤ６、ＡＤ７となってしまう場合も考えられる。このような場合には、たとえ先頭アドレス（ＡＤ１）が同じであっても、データ転送を再開してはならない。従って、先頭アドレスの比較処理だけで、データ転送再開処理の可否を決めると、バスリセット後の正常動作を保証できない可能性がある。
【００５１】
また従来技術では次のような問題が生じる可能性もある。例えば、ＯＲＢ１が図３に示すようなＳＣＳＩ（ＳＰＣ−２）のライトコマンドを含んでおり、このライトコマンドに基づくデータ転送中にバスリセットが発生したとする。この場合に、バスリセット後に、パーソナルコンピュータのＯＳが、ＦＡＴ（ファイルアロケーションテーブル）の内容を調べるために、ＦＡＴのリードコマンドを含むＯＲＢ２を送ってくる場合がある。
【００５２】
この場合には、バスリセット前のＯＲＢ１ではデータのライトコマンドが指示され、バスリセット後のＯＲＢ２ではＦＡＴのリードコマンドが指示されており、ＯＲＢ１とＯＲＢ２の内容が異なる。従って、後段のストレージデバイスに対して既に発行したＯＲＢ１のライトコマンドを、アボートする必要がある。
【００５３】
ところが、バスリセット前のＯＲＢ１のライトコマンドに基づいて既にＤＭＡ転送が開始されている場合に、このライトコマンドをアボートすると、後段のストレージデバイスがハングアップしてしまう可能性がある。
【００５４】
２．全体構成
以上のような問題を解決できるデータ転送制御システム及びこれを含む電子機器の構成例を図７に示す。なお、以下では、デバイス１００がストレージデバイス（ハードディスクドライブ、ＣＤドライブ、ＤＶＤドライブ等）である場合について主に例にとり説明するが、本発明ではこれに限定されず、プリンタデバイス、スキャナデバイス、或いは撮像デバイスなどの種々のデバイスに適用できる。
【００５５】
データバッファ４を有するパーソナルコンピュータ（ホストコンピュータ）２と電子機器８は、ＩＥＥＥ１３９４に準拠したＢＵＳ１（第１のバス）により接続される。そして、電子機器８は、データ転送制御システム１０とデバイス１００（ストレージデバイス、プリンタデバイス、スキャナデバイス等）を有する。
【００５６】
なお、電子機器８には、図示しないシステムＣＰＵ、システムメモリ（ＲＯＭ、ＲＡＭ）、操作部、或いは信号処理デバイス等を含めることができる。
【００５７】
データ転送制御システム１０は、物理層（ＰＨＹ）回路１４、リンク層回路２０、ＳＢＰ−２回路２２、インターフェース回路３０、パケット管理回路３８、パケットバッファ４０（データバッファ）を含む。また、ＣＰＵ４２、フラッシュメモリ４４（ＥＥＰＲＯＭ）を含む。また、フラッシュメモリ４４にその処理モジュール（プログラム）が記憶され、ＣＰＵ４２（広義にはプロセッサ）により実行されるファームウェア５０を含む。なお、本実施形態のデータ転送制御システム１０は、図７に示す全ての回路ブロック、機能ブロックを含む必要はなく、その一部を省略してもよい。
【００５８】
物理層回路１４は、図１の物理層のプロトコルをハードウェアにより実現するための回路であり、リンク層回路２０により使用されるロジカルシンボルを電気信号に変換する機能を有する。
【００５９】
リンク（＆トランザクション）層回路２０は、図１のリンク層のプロトコルやトランザクション層のプロトコルの一部をハードウェアにより実現するための回路であり、ノード間でのパケット転送のための各種サービスを提供する。
【００６０】
これらの物理層回路１４、リンク層回路２０の機能により、ＩＥＥＥ１３９４に準拠したデータ転送を、ＢＵＳ１（第１のバス）を介してパーソナルコンピュータ２（広義には電子機器）との間で行うことが可能になる。
【００６１】
ＳＢＰ−２回路２２（広義には転送実行回路）は、ＳＢＰ−２のプロトコルの一部やトランザクション層の一部をハードウェアにより実現する回路である。このＳＢＰ−２回路２２の機能により、転送データを一連のパケットに分割し、分割された一連のパケットを連続転送する処理が可能になる。
【００６２】
インターフェース回路３０は、デバイス１００とのインターフェース処理を行う回路である。このインターフェース回路３０の機能により、ＡＴＡ（ＡＴ  Ａｔｔａｃｈｍｅｎｔ）、ＡＴＡＰＩ（ＡＴＡ  Ｐａｃｋｅｔ  Ｉｎｔｅｒｆａｃｅ）に準拠したデータ転送を、ＢＵＳ２（第２のバス）を介してデバイス１００との間で行うことが可能になる。
【００６３】
そして、図７のように物理層回路１４、リンク層回路２０、インターフェース回路３０を設けることで、ＩＥＥＥ１３９４（広義には第１のインターフェース規格）とＡＴＡ（ＩＤＥ）／ＡＴＡＰＩ（広義には第２のインターフェース規格）の変換ブリッジ機能をデータ転送制御システム１０に持たせることが可能になる。
【００６４】
インターフェース回路３０が含むＤＭＡコントローラ３２は、ＢＵＳ２を介してデバイス１００との間でＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を行うための回路である。なお、ＢＵＳ２に接続されるデバイス１００は、ＡＴＡ（ＩＤＥ）／ＡＴＡＰＩに準拠したデータ転送を行うためのインターフェース回路１０２と、ストレージ１０６へのアクセス制御（書き込み又は読み出し制御）を行うアクセス制御回路１０４と、ハードディスク、光ディスク、メモリなどのストレージ１０６を含む。
【００６５】
バッファ管理回路３８は、パケットバッファ４０とのインターフェースを管理する回路である。バッファ管理回路３８は、バッファ管理回路３８の制御のためのレジスタ、パケットバッファ４０へのバス接続を調停する調停回路、各種の制御信号を生成するシーケンサなどを含む。
【００６６】
また、バッファ管理回路３８はポインタ管理部３９を含む。このポインタ管理部３９は、パケットバッファ４０のポインタをリングバッファ方式で管理し、書き込み用、読み込み用の複数のポインタを更新する処理を行う。
【００６７】
パケットバッファ４０（パケットメモリ、データバッファ）は、パケット（転送データ）を一時的に格納するためのバッファであり、ＳＲＡＭ、ＳＤＲＡＭ、或いはＤＲＡＭなどのハードウェアにより構成される。なお、本実施形態では、パケットバッファ４０は、ランダムアクセス可能なパケット記憶部として機能する。また、パケットバッファ４０を、データ転送制御システム１０に内蔵せずに、外付けにしてもよい。
【００６８】
ＣＰＵ４２（広義にはプロセッサ）は、装置全体の制御やデータ転送の制御を行うものである。フラッシュメモリ４４（ＥＥＰＲＯＭ）は、電気的にデータの書き換えが可能な不揮発性メモリである。このフラッシュメモリ４４には、ファームウェア５０の処理モジュール（プログラム）が記憶される。
【００６９】
ファームウェア５０は、ＣＰＵ４２上で動作する種々の処理モジュール（処理ルーチン）を含むプログラムであり、トランザクション層等のプロトコルは、このファームウェア５０と、ハードウェアであるＣＰＵ４２等により実現される。
【００７０】
ファームウェア５０（Ｆ／Ｗ）は、コミュニケーション部５２、マネージメント部６０、フェッチ部７０、タスク部８０を含む。なお、ファームウェア５０は、これらの全ての機能ブロックを含む必要はなく、その一部を省略してもよい。
【００７１】
ここで、コミュニケーション部５２は、物理層回路１４、リンク層回路２０などのハードウェアとの間のインターフェースとして機能する処理モジュールである。
【００７２】
マネージメント部６０（マネージメントエージェント）は、ログイン、リコネクト、ログアウト、リセット等の管理を行う処理モジュールである。例えばイニシエータがターゲットにログインを要求した場合には、まず、このマネージメント部６０が、このログイン要求を受け付けることになる。
【００７３】
フェッチ部７０（フェッチエージェント）は、ＯＲＢ（Ｏｐｅｒａｔｉｏｎ  Ｒｅｑｕｅｓｔ  Ｂｌｏｃｋ）受信と、ステータスの発行と、タスク部８０へのコマンド処理依頼を行う処理モジュールである。フェッチ部７０は、単一の要求しか扱うことができないマネージメント部６０とは異なり、イニシエータからの要求により自身がフェッチしたＯＲＢのリンクリストも扱うことができる。
【００７４】
タスク部８０は、ＯＲＢが含むコマンドの処理とＤＭＡ転送処理を実行するための処理モジュールである。
【００７５】
フェッチ部７０は、判断部７２、コマンド記憶部７３、コマンド比較部７４、アドレス記憶部７５、アドレス比較部７６、転送再開部７７を含む。
【００７６】
ここで判断部７２は、ＯＲＢ（広義にはコマンドパケット、データ転送オペレーション要求のためのコマンドパケット。明細書中の他の説明でも同様）によるデータ転送処理中にバスリセット（ノードのトポロジ情報をクリアするリセット）が発生したか否かを判断する処理を行う。
【００７７】
コマンド記憶部７３は、バスリセットの発生前にイニシエータから転送されてきたＯＲＢ１（第１のコマンドパケット）の内容を、バスリセットが発生した時点やリコネクトが成功した時点などで記憶するための処理を行う。
【００７８】
コマンド比較部７４は、バスリセットの発生前にＢＵＳ１を介してイニシエータから転送されてきたＯＲＢ１の内容（コマンド記憶部７３により記憶された内容）と、バスリセットの発生後にＢＵＳ１を介してイニシエータから転送されてきたＯＲＢ２の内容とを比較する処理を行う。
【００７９】
アドレス記憶部７５は、アドレス（間接アドレス、直接アドレス）の記憶処理を行う。より具体的には、ページテーブル存在時（ページテーブル存在フラグがアクティブ）においては、ＯＲＢ１により指定されるページテーブル（図５（Ｂ）参照）のページテーブルエレメントのうち、バスリセット発生時点において処理中であったページテーブルエレメントＰＥＫ１に格納されるアドレスＡＤＫ１（第１のアドレス）を記憶する。なお、アドレス記憶部７５は、ページテーブル非存在時（ページテーブル存在フラグが非アクティブ）においては、ＯＲＢ１により直接指定（図５（Ｃ）参照）される転送データのアドレスＤＡＤ１（第１の直接アドレス）を記憶する。
【００８０】
アドレス比較部７６は、アドレスの比較処理（第１、第２のアドレスの比較処理、第１、第２の直接アドレスの比較処理）を行う。より具体的には、ページテーブル存在時には、バスリセット後のＯＲＢ２により指定されるページテーブルのページテーブルエレメントのうち、上述のＡＤＫ１が格納されるページテーブルエレメントＰＥＫ１と同一エレメント番号のページテーブルエレメントＰＥＫ２に格納されるアドレスＡＤＫ２を読み出す。そして、アドレス記憶部７５に記憶されたＡＤＫ１（第１のアドレス）と、読み出したＡＤＫ２（第２のアドレス）を比較する。なお、アドレス比較部７６は、ページテーブル非存在時においては、アドレス記憶部７５に記憶されるＤＡＤ１（第１の直接アドレス）と、ＯＲＢ２により直接指定されるＤＡＤ２（第２の直接アドレス）を比較する。
【００８１】
転送再開部７７はデータ転送の再開処理を行う。より具体的にはＯＲＢ１（第１のコマンドパケット）とＯＲＢ２（第２のコマンドパケット）の内容が同一であったり、ＡＤＫ１（第１のアドレス）とＡＤＫ２（第２のアドレス）が同一であると判断された場合等に、バスリセット発生時点のデータ転送の続きからデータ転送を再開する処理を行う。更に具体的には、ＡＤＫ１（第１のアドレス）とＡＤＫ２（第２のアドレス）が同一であると判断された場合に、バスリセット発生時点において処理中であったページテーブルエレメントについてのデータ転送の再開処理を行う。なおページテーブル非存在時には、ＤＡＤ１（第１の直接アドレス）とＤＡＤ２（第２の直接アドレス）が同一であると判断された場合に、データ転送の再開処理を行う。
【００８２】
タスク部８０は、コマンド処理部８２、コマンドアボート部８４を含む。ここでコマンド処理部８２は、ＢＵＳ１（ＩＥＥＥ１３９４等の第１のインターフェース規格の第１のバス）を介して転送されてきたＯＲＢ（広義にはコマンドパケット、データ転送オペレーション要求のためのコマンドパケット）についての種々の処理を行う。具体的には、ＢＵＳ１からのＯＲＢを受け、ＯＲＢが含むコマンド（ＳＣＳＩ、−２のコマンド）を、ＢＵＳ２（ＡＴＡ／ＡＴＡＰＩ等の第２のインターフェース規格の第２のバス）に接続されるデバイス１００（ストレージデバイス）に対して発行し、ＢＵＳ２を介したＤＭＡ転送（ＣＰＵを介在させないデータ転送）の開始を指示する。
【００８３】
コマンドアボート部８４は、ＯＲＢに基づきデバイス１００に対して発行したコマンド（ＳＣＳＩのリードコマンド、ライトコマンド等）を、そのＯＲＢ（コマンド）に基づき開始したＤＭＡ転送（連続したデータ転送）の完了後にアボートする。
【００８４】
より具体的にはコマンドアボート部８４は、データ転送の再開処理を行わない場合（バスリセット前のＯＲＢ１とバスリセット後のＯＲＢ２の内容が異なると判断された場合や、ＯＲＢ１、ＯＲＢ２で間接指定又は直接指定されるアドレスが異なると判断された場合等）に、ＯＲＢ１に基づきデバイス１００に対して発行したコマンドを、そのＯＲＢ１（コマンド）に基づき開始したＤＭＡ転送の完了後にアボート（中止、キャンセル）する。
【００８５】
この場合、コマンドアボート部８４は、ＯＲＢに基づき開始したＤＭＡ転送が完了するまで、デバイス１００との間でダミーデータが転送されるように制御を行う。
【００８６】
即ち、バスの変換ブリッジ機能を有する本実施形態のデータ転送制御システム１０では、通常は、デバイス１００からＢＵＳ２を介して転送されてきたデータは、ＢＵＳ１を介してパーソナルコンピュータ２に転送される。また、パーソナルコンピュータ２からＢＵＳ１を介して転送されてきたデータは、ＢＵＳ２を介してデバイス１００に転送される。
【００８７】
これに対して、ダミーデータの転送時においては、デバイス１００からＢＵＳ２を介してダミーデータがデータ転送制御システム１０に転送される一方で、このダミーデータはパーソナルコンピュータ２に転送されない。また、パーソナルコンピュータ２からＢＵＳ１を介してデータがデータ転送制御システム１０に転送されなくても、ＢＵＳ２を介してデバイス１００にダミーデータを転送する。
【００８８】
なお、コマンドアボート部８４でのアボート処理は、バスリセット後に行われるリコネクト処理が終了した後に行われる。
【００８９】
３．処理の詳細
次に、本実施形態の処理の詳細について図８、図９、図１０、図１１のフローチャート等を用いて説明する。
【００９０】
３．１  全体処理
図８は、本実施形態の全体的な処理を示すフローチャートである。ＳＢＰ−２の処理中に、コマンドＣＭＤ１を含むＯＲＢ１を受信すると（ステップＳ１）、バスリセットが発生したか否かを判断する（ステップＳ２）。そして、バスリセットが発生していない場合には、図１２のＤ１に示すように、デバイス１００（ストレージデバイス）に対して、ＯＲＢ１に含まれるコマンドＣＭＤ１を発行する（ステップＳ３）。
【００９１】
即ち、ＳＢＰ−２では、ＳＣＳＩ（ＳＰＣ−２）に類似したコマンド（リード、ライト、モードセンス、モードセレクト等）が使用されており、デバイス１００（ストレージデバイス）は、これらのコマンドを用いて、リード、ライトなどの動作を行う。本実施形態のデータ転送制御システム１０は、ＯＲＢ１に含まれるコマンドＣＭＤ１を取り出し、このＣＭＤ１を、インターフェース回路３０、ＢＵＳ２（ＡＴＡ／ＡＴＡＰＩ）を介してデバイス１００に発行する。
【００９２】
ＣＭＤ１を発行した後、バスリセットが発生したか否かを判断する（ステップＳ４）。そして、バスリセットが発生していない場合には、ＢＵＳ２を介してデバイス１００からＤＭＡＲＱが来たか否かを判断する（ステップＳ５）。
【００９３】
即ち、ＡＴＡ／ＡＴＡＰＩに準拠するＢＵＳ２では、後述するように、ＤＭＡ転送要求であるＤＭＡＲＱやＤＭＡＲＱに対するアクノリッジであるＤＭＡＣＫなどの信号が定義されている。そして、デバイス１００のインターフェース回路１０２がＤＭＡＲＱをアクティブにした後、データ転送制御システムのインターフェース回路３０がＤＭＡＣＫをアクティブにすると、ＤＭＡ転送が開始することになる。
【００９４】
ＤＭＡＲＱが来ていない場合には、バスリセットが発生したか否かを判断する（ステップＳ６）。そして、バスリセットが発生していない場合には、ＤＭＡＲＱが来たか否かを判断し、ＤＭＡＲＱが来るまでステップＳ５、Ｓ６の判断を繰り返す。
【００９５】
ＤＭＡＲＱが来ると、ＤＭＡＣＫをアクティブにする処理等を行って、ＤＭＡ転送の開始を指示する（ステップＳ７）。そして、図１２のＤ２、Ｄ３に示すように、ＢＵＳ１（ＩＥＥＥ１３９４）、ＢＵＳ２（ＡＴＡ／ＡＴＡＰＩ）を介したデータ転送が行われるようになる。
【００９６】
ここで、ＢＵＳ１を介したデータ転送は、物理層回路１４、リンク層回路２０、ＳＢＰ−２回路２２などにより実現される。このデータ転送により、パーソナルコンピュータ２のデータバッファ４のデータがパケットバッファ４０に書き込まれたり、パケットバッファ４０のデータがデータバッファ４に読み込まれる。
【００９７】
一方、ＢＵＳ２を介したデータ転送は、インターフェース回路３０などにより実現される。このデータ転送により、パケットバッファ４０のデータが、デバイス１００のストレージ１０６に書き込まれたり、ストレージ１０６のデータがパケットバッファ４０に読み込まれる。
【００９８】
次に、バスリセットが発生したか否かを判断し（ステップＳ８）、ＤＭＡ転送が完了すると（ステップＳ９）、ＯＲＢ１についてのコマンド処理を終了し（ステップＳ１０）、ＯＲＢ１のステータスをパーソナルコンピュータ２に対して伝える（ステップＳ１１）。このようにして、ＯＲＢ１についての一連のコマンド処理が終了する。
【００９９】
３．２  バスリセット時処理
図８のステップＳ２、Ｓ４、Ｓ６、Ｓ８でバスリセットが発生したと判断されると、バスリセット時処理が行われる（ステップＳ１２）。図９、図１０に、このバスリセット時処理のフローチャートを示す。
【０１００】
まず図１２のＤ４に示すようにイニシエータからのリコネクトを待つリコネクト処理が行われる（ステップＳ２１）。
【０１０１】
即ち、ＳＢＰ−２においては、バスリセット前にログインしていたイニシエータは、バスリセット後、一定期間の間は、優先的にそのターゲットに対してリコネクトできる。バスリセット後に、このリコネクト処理を行うことで、イニシエータは、そのターゲットに対するアクセス権（バス使用権）を専有できる。
【０１０２】
そしてリコネクトが成功しなかった場合には（ステップＳ２２）、図１０のステップＳ４２に移行する。一方、リコネクトが成功した場合には、後段のデバイス１００との間でＯＲＢの転送データを転送したか否かを判断する（ステップＳ２３）。そして、１バイトもデータを転送していなかった場合には継続フラグをオフにする（ステップＳ２４）。
【０１０３】
一方、１バイトでもデータを転送していた場合には、ＯＲＢの内容（データサイズ、ページテーブル存在フラグＰ、コマンドブロック等）や、バスリセット発生時点までに転送できたデータのサイズを記憶する（ステップＳ２５）。このデータサイズは、バスリセット発生時点で後段のデバイス１００との間で既に転送したデータのバイト数と、バスリセット発生時点でＩＥＥＥ１３９４のバス上でのデータ転送は既に完了し、後段のデバイス１００との間で転送中又はこれから転送する予定のデータのバイト数の合計に相当する。
【０１０４】
次に、ページテーブルが存在するか否かを判断し（ステップＳ２６）、存在しない場合には、ＯＲＢのデータデスクリプタの内容を記憶する（ステップＳ２７）。即ち、ページテーブルが存在しない場合には、直接アドレス指定の場合の転送データのアドレスＤＡＤ１（第１の直接アドレス）及びデータ長ＤＤＬ１が記憶される（図５（Ｃ）参照）。
【０１０５】
一方、ページテーブルが存在する場合には、バスリセット発生時点で処理中だったページテーブルエレメントＰＥＫ１の内容（アドレスＡＤＫ１、データ長ＤＬＫ１）及びエレメント番号を記憶する（ステップＳ２８）。そして、継続フラグをオンにする（ステップＳ２９）。
【０１０６】
３．３  コマンド比較処理、アドレス比較処理
次に、コマンドＣＭＤ２を含むＯＲＢ２を受信すると（ステップＳ３０）、図１２のＤ５や図１３に示すように、バスリセット前のＯＲＢ１（ＣＭＤ１）とバスリセット後のＯＲＢ２の内容を比較するコマンド比較処理や、バスリセット前の転送データのアドレスＡＤＫ１とバスリセット後の転送データのアドレスＡＤＫ２を比較するアドレス比較処理を行う。
【０１０７】
ここでコマンド比較処理は次のように行われる。即ち図１４に示すように本実施形態では、ＯＲＢが含むページテーブル存在フラグＰや、データサイズや、コマンドブロック（コマンドセット）フィールドの中のオペレーションコード（ライトコマンド、リードコマンドなどを区別するコード）やデータ長を比較している。またＯＲＢが、ＯＲＢの識別情報（例えば順序番号）を含む場合には、この識別情報を比較してもよい。なお、ページテーブルを使用していない場合はデータディスクリプタの値を比較し、ページテーブルを使用している場合は、セグメント数を比較する。以上のような情報を比較することで、バスリセット前のＯＲＢ１とバスリセット後のＯＲＢ２が同一か否かを簡素な処理で確実に判断できる。
【０１０８】
またアドレス比較処理は次のように行われる。即ち従来例では図６（Ａ）、（Ｂ）に示すように、ページテーブルで指定される全転送データの先頭アドレスＡＤＳ１、ＡＤＳ２を比較していた。これに対して本実施形態では図１５に示すように、バスリセット時に処理中であったページテーブルエレメントに格納されるアドレスＡＤＫ１と、それに対応するＡＤＫ２を比較している。つまりバスリセット時に転送中であったＦ１に示すセグメントデータのアドレスを比較している。
【０１０９】
ページテーブルは図１６に示すように複数のページテーブルエレメント（ＰＥ１１〜ＰＥＭ１、ＰＥ１２〜ＰＥＭ２）により構成され、各ページテーブルエレメントはエレメント番号により順次指定される。そしてページテーブルを用いるデータ転送は、図５（Ｂ）で説明したように、ページテーブルエレメントに格納されるアドレス（ＡＤ１１〜ＡＤＭ１、ＡＤ１２〜ＡＤＭ２）を例えばエレメント番号の順に読み出して、読み出されたアドレスを用いて転送データの位置を間接アドレス指定することで行われる。
【０１１０】
そして本実施形態では、ＢＵＳ１（第１のバス）を介して転送されてきたＯＲＢ１（第１のコマンドパケット）によりアドレス指定されるページテーブルのページテーブルエレメントのうち、バスリセット発生時点において処理中であったページテーブルエレメントＰＥＫ１に格納されるアドレスＡＤＫ１（第１のアドレス）を記憶しておく。つまり、バスリセット時に転送中であったＦ１のセグメントデータについてのアドレスを記憶しておく。
【０１１１】
そしてバスリセット後にＯＲＢ２（第２のコマンドパケット）が転送されてきた場合には、ＯＲＢ２でアドレス指定されるページテーブルのページテーブルエレメントのうち、ＰＥＫ１と同一エレメント番号のページテーブルエレメントに格納されるアドレスＡＤＫ２（第２のアドレス）を読み出す。そして記憶されたＡＤＫ１と読み出したＡＤＫ２を比較し、ＡＤＫ１とＡＤＫ２が同一であると判断された場合には、図１５のＦ２に示すようにバスリセット発生時点において処理中であったページテーブルエレメント（ＰＥＫ１）からデータ転送を再開する。
【０１１２】
このように本実施形態ではバスリセット時に処理中であったページテーブルエレメントからデータ転送を再開できるため、図６（Ａ）、（Ｂ）で説明した従来例に比べて、バスリセット時の正常動作を更に確実に保証できるようになる。
【０１１３】
即ち図６（Ａ）、（Ｂ）において、既に転送が終了しているＣ４のセグメントデータの格納領域が、他のアプリケーション用途に使用されてしまうと、転送データの先頭アドレス（ＡＤＳ１、ＡＤＳ２）がバスリセットの前後で異なったアドレスになってしまう可能性がある。このような場合にも本実施形態では、バスリセット時に処理中であるページテーブルエレメントの格納アドレス（ＡＤＫ１、ＡＤＫ２）が比較されるため、例えば転送データの先頭アドレス（ＡＤＳ１、ＡＤＳ２）が異なったアドレスになっても、データ転送に不具合が生じない。従って従来例に比べて、より確実なデータ転送を保証できる。
【０１１４】
なお、処理中のページテーブルエレメントのみならず、既に処理が終了したページテーブルエレメントの格納アドレスを、バスリセットの前後において比較するようにしてもよい。
【０１１５】
より具体的には図１７に示すように、ＯＲＢ１によりアドレス指定されるページテーブルのページテーブルエレメントのうち、先頭ページテーブルエレメントから処理中ページテーブルエレメントに至るＫ個（Ｋは２以上の整数）のページテーブルエレメントに格納されるＫ個のアドレスＡＤ１１、ＡＤ２１、ＡＤ３１・・・・ＡＤＫ１（第１のアドレス群）を記憶しておく。
【０１１６】
そしてバスリセット発生後のＯＲＢ２によりアドレス指定されるページテーブルのページテーブルエレメントのうち、Ｋ個のアドレスＡＤ１１、ＡＤ２１、ＡＤ３１・・・・ＡＤＫ１と同一エレメント番号のページテーブルエレメントに格納されるＫ個のアドレスＡＤ１２、ＡＤ２２、ＡＤ３２・・・・ＡＤＫ２（第２のアドレス群）を読み出す。そして、記憶されたＡＤ１１、ＡＤ２１、ＡＤ３１・・・・ＡＤＫ１と、読み出されたＡＤ１２、ＡＤ２２、ＡＤ３２・・・・ＡＤＫ２を比較する。そしてこれらのアドレスが同一であると判断された場合には、データ転送を再開するようにする。このようにすれば、バスリセット時のデータ転送を更に確実に保証できるようになる。なお先頭ページテーブルエレメントから処理中のページテーブルに至る全てのページテーブルエレメントの格納アドレスを比較するのではなく、そのうちの一部の複数のページテーブルエレメントを比較するようにしてもよい。
【０１１７】
次に図１０のフローチャートの説明に戻る。バスリセット後にＯＲＢ２（ＣＭＤ２）を受信すると（ステップＳ３０）、継続フラグがオンか否かを判断する（ステップＳ３１）。この継続フラグは、図９のステップＳ２９においてオンにされるフラグである。そして、継続フラグがオフの場合にはステップＳ４２に移行する。
【０１１８】
継続フラグがオンの場合には図１４で説明したように、バスリセット前のＯＲＢ１とバスリセット後のＯＲＢ２が同一か否かを判断する（ステップＳ３２）。この場合に、ＯＲＢ２と比較されるＯＲＢ１の内容は、図９のステップＳ２７において記憶されている。
【０１１９】
ＯＲＢ１とＯＲＢ２の内容が同一であった場合には、ページテーブルが存在するか否かを判断する（ステップＳ３３）。これは図１４のページテーブル存在フラグＰにより判断できる。そしてページテーブルが存在する場合には、図１５、図１６で説明したように、ＯＲＢ２のページテーブルエレメントのうち、ＰＥＫ１のエレメント番号と同一番号のページテーブルエレメントＰＥＫ２に格納されるアドレスＡＤＫ２をリードする（ステップＳ３４）。そして図９のステップＳ２８で記憶しておいたアドレスＡＤＫ１と、リードしたアドレスＡＤＫ２が同一か否かを判断する（ステップＳ３５）。そしてＡＤＫ１とＡＤＫ２が同一である場合には、データ転送の再開処理を行う（ステップＳ３６）。即ち、図９のステップＳ２５で記憶したバスリセット発生時点までの転送済みデータサイズやステップＳ２８で記憶したページテーブルエレメントの内容やエレメント番号などに基づいて、バスリセット発生時点の続きからデータ転送を再開できるように、データ転送の設定をバスリセット前の状態に戻す。そして、継続フラグをオフに戻す（ステップＳ３７）。この場合、バスリセット前に既に転送を完了していたデータが消失しないように、ターゲットのデータバッファ上のデータをクリアしないようにする。
【０１２０】
ステップＳ３３でページテーブルが存在しないと判断された場合には、ＯＲＢ１で直接指定されるアドレスＤＡＤ１と、ＯＲＢ２で直接指定されるアドレスＤＡＤ２が同一か否かを判断する（ステップＳ３８）。そしてＤＡＤ１（第１の直接アドレス）とＤＡＤ２（第２の直接アドレス）が同一であると判断された場合には、データ転送の設定をバスリセット発生前の状態に戻し、データ転送の再開処理を行う（ステップＳ３９）。そして、継続フラグをオフに戻す（ステップＳ４０）。この場合、バスリセット前に既に転送を完了していたデータが消失しないように、ターゲットのデータバッファ上のデータをクリアしないようにする。
【０１２１】
このように本実施形態では、ページテーブルが存在する場合には、ページテーブルエレメントの格納アドレスＡＤＫ１、ＡＤＫ２を比較する一方で（ステップＳ３５）、ページテーブルアドレスが存在しない場合には、ＯＲＢ１、ＯＲＢ２で直接指定されるアドレスＤＡＤ１、ＤＡＤ２を比較するようにしている（ステップＳ３８）。これにより、ページテーブルの存在の有無に依存せずに、バスリセット時の正常動作を保証できるようになる。
【０１２２】
ステップＳ３１でＯＲＢ１とＯＲＢ２の内容が同一でないと判断された場合、ステップＳ３５でアドレスＡＤＫ１、ＡＤＫ２が同一でないと判断された場合、或いは、ステップＳ３８でＤＡＤ１とＤＡＤ２が同一でないと判断された場合には、データ転送の再開処理を行わず、継続フラグをオフに戻すと共に転送データのアドレスを記憶しておく（ステップＳ４１、Ｓ４２）。
【０１２３】
次に、ＯＲＢ１が含むＣＭＤ１をデバイス１００に対して既に発行しているか否かを判断する（ステップＳ４３）。そして、ＣＭＤ１を発行していない場合には、コマンドのアボート処理を行うことなく、新たに送られてきたＯＲＢ２についての処理に移行する（ステップＳ４８）。このように本実施形態では、ＣＭＤ１の処理中にバスリセットが発生した場合において、ＣＭＤ１が発行済みと判断（ステップＳ４３）された時にはアボート処理（ステップＳ４７）を行うが、ＣＭＤ１が未発行と判断された場合にはアボート処理を行うことなくＯＲＢ２（ＣＭＤ２）の処理（ステップＳ４８）に移行する。
【０１２４】
一方、デバイス１００にＣＭＤ１を既に発行している場合には、ＤＭＡ転送を既に開始しているか否かを判断する（ステップＳ４４）。そして、開始している場合には、図１８のＥ５に示すように、コマンドＣＭＤ１のアボート処理（ステップＳ４７）に移行する。一方、ＣＭＤ１が未発行の場合には、ＤＭＡ転送要求ＤＭＡＲＱが来ているか否かを判断し（ステップＳ４５）、ＤＭＡＲＱが来ていない場合にはＣＭＤ１のアボート処理に移行する。一方、ＤＭＡＲＱが来ている場合には、ＤＭＡ転送の開始を指示した後（ステップＳ４６）、ＣＭＤ１のアボート処理に移行する。そして、ＣＭＤ１のアボート処理が終了すると、ＯＲＢ２（ＣＭＤ２）の処理に移行する（ステップＳ４８）。
【０１２５】
３．４  ページテーブル存在時のアドレス比較処理の省略
図１０のステップＳ３４、Ｓ３５ではページテーブルの存在時に、ページテーブルエレメントＰＥＫ１、ＰＥＫ２に格納されるアドレスＡＤＫ１、ＡＤＫ２を比較しているが、この比較処理を行わないようにすることもできる。この場合の処理のフローチャート例を図２５に示す。
【０１２６】
例えば図２５のステップＳ３２では、バスリセット発生後にＯＲＢ２（第２のコマンドパケット）が転送されてきた場合に、バスリセット発生前のＯＲＢ１（第２のコマンドパケット）の内容とバスリセット発生後のＯＲＢ２の内容がコマンド比較部７４（図７参照）により比較される。ここでＯＲＢ１の内容は、図９のステップＳ２５においてコマンド記憶部７３により記憶されたものである。
【０１２７】
そしてページテーブルが存在するか否かが判断され（ステップＳ３３）、ページテーブルの存在時には、転送再開部７７によるデータ転送の再開処理（バスリセット発生時点からのデータ転送の再開処理）が行われる（ステップＳ３６）。即ちページテーブルの存在時には、ＯＲＢ１とＯＲＢ２の内容が同一であると判断されると、データ転送が再開される。つまり図１０のステップＳ３４、Ｓ３５の処理を行うことなく、データ転送が再開される。
【０１２８】
一方、ページテーブルの非存在時には、ＯＲＢ１で直接指定されるＤＡＤ１（第１の直接アドレス）と、ＯＲＢ２で直接指定されるＤＡＤ２（第２の直接ドレス）がアドレス比較部７６により比較される（ステップＳ３８）。ここでＤＡＤ１は、図９のステップＳ２７において、ページテーブルの非存在時にアドレス記憶部７５により記憶されたものである。
【０１２９】
そしてステップＳ３８でＤＡＤ１とＤＡＤ２が同一であると判断されると、転送再開部７７によるデータ転送の再開処理（バスリセット発生時点からのデータ転送の再開処理）が行われる（ステップＳ３９）。即ちページテーブルの非存在時には、ＯＲＢ１とＯＲＢ２の内容が同一であり且つＤＡＤ１とＤＡＤ２が同一であると判断された場合に、データ転送が再開される。
【０１３０】
例えばＯＳの処理の仕方や、デバイス１００の種類（例えばストレージデバイス）に依っては、ページテーブルエレメントに格納されるアドレスを比較しなくても、適正なデータ転送再開処理を保証できる場合がある。このような場合には、図１０のステップＳ３４、Ｓ３５のアドレス比較処理を行うことなくデータ転送を再開することで、処理負荷を軽減できるようになる。
【０１３１】
３．５  コマンドのアボート処理
図１１は、ＣＭＤ１のアボート処理に関するフローチャートである。まず、ＤＭＡ転送が動作中か否かを判断する（ステップＳ５１）。例えば、図１０のステップＳ４４でＤＭＡ転送が開始していないと判断され、ステップＳ４５でＤＭＡＲＱが未だ来ていないと判断された場合には、図１１のステップＳ５１でＤＭＡ転送が動作中ではないと判断される可能性がある。この場合には、ステップＳ５２〜Ｓ５８のダミーデータの転送制御処理を行うことなく、コマンドＣＭＤ１をアボートする。このようにすることで、ステップＳ５２〜Ｓ５８の処理を省くことができ、処理の効率化を図れる。
【０１３２】
ＤＭＡ転送が動作中であると判断された場合には、コマンドＣＭＤ１がリードコマンドかライトコマンドかを判断する（ステップＳ５２）。
【０１３３】
ＣＭＤ１がリードコマンドである場合には、図１８のＥ６に示すように、ＣＭＤ１についてのＤＭＡ転送が完了しているか否かを判断する（ステップＳ５３）。そして、ＤＭＡ転送が完了するまで、デバイス１００との間で、ステップＳ５３〜Ｓ５５のダミーデータの転送（リード）処理を行う。そして、ＤＭＡ転送が完了したと判断されると、図１８のＥ７に示すようにコマンドＣＭＤ１のアボート処理を行う（ステップＳ５９）。
【０１３４】
一方、ＣＭＤ１がライトコマンドである場合には、ＣＭＤ１についてのＤＭＡ転送が完了しているか否かを判断する（ステップＳ５６）。そして、ＤＭＡ転送が完了するまで、デバイス１００との間で、ステップＳ５６〜Ｓ５８のダミーデータの転送（ライト）処理を行う。そして、ＤＭＡ転送が完了したと判断されると、コマンドＣＭＤ１のアボート処理を行う（ステップＳ５９）。
【０１３５】
なお、コマンドのアボート処理は、例えば、ＡＴＡ／ＡＴＡＰＩで定義されるソフトウェアリセットにより実現できる。具体的には、デバイス１００のインターフェース回路１０２が有するデバイス制御用レジスタのＳＲＳＴビットに「１」をセットすることで、このソフトウェアリセットが実行される。このレジスタへの値のセットは、後述するＢＵＳ２の信号ＣＳ［１：０］、ＤＡ［２：０］、ＤＩＯＷ、ＤＩＯＲ等を用いたＰＩＯ転送により、インターフェース回路３０がインターフェース回路１０２のレジスタにアクセスすることで実現できる。
【０１３６】
なおＳＲＳＴ（ソフトウェアリセット）を行う代わりに、ダミーデータを転送した結果、デバイス１００から通常完了割り込み（ＩＮＴＲＱ）が入った場合には、割り込み処理関数を実行して終了処理を行うようにしてもよい。
【０１３７】
以上のように本実施形態では、バスリセット前にデバイス１００に発行したコマンドＣＭＤ１（図８のステップＳ３、図１８のＥ１参照）を、ＯＲＢ１（ＣＭＤ１）に基づき開始したＤＭＡ転送（図８のステップＳ７、図１０のステップＳ４６、図１８のＥ３参照）が完了した後にアボートしている（図１１のステップＳ５９、図１８のＥ７参照）。
【０１３８】
このようにすることで、デバイス１００とのＢＵＳ２を介したＤＭＡ転送が正常に完了した後に、コマンドＣＭＤ１がアボートされるようになる。従って、デバイス１００は、ＤＭＡ転送を正常に完了できるため、デバイス１００がハングアップする事態を防止できる。また、コマンドＣＭＤ１をアボートするまでのＢＵＳ２を介したＤＭＡ転送は、ダミーデータ転送により行われるため、パーソナルコンピュータ２の処理に悪影響が及ぶこともない。
【０１３９】
特に、ＡＴＡ（ＩＤＥ）／ＡＴＡＰＩのインターフェースを備えたデバイス１００は、元々、パーソナルコンピュータ２の内蔵ストレージデバイスとして設計されており、ＤＭＡ転送中のＩＥＥＥ１３９４のバスリセットの発生を想定した設計は行われていない。従って、デバイス１００を、ＩＥＥＥ１３９４とＡＴＡ／ＡＴＡＰＩのブリッジ機能を備えた本実施形態のデータ転送制御システム１０に接続すると、予期しないバスリセットの発生により、デバイス１００がハングアップする可能性が高い。本実施形態によれば、ＤＭＡ転送の完了後にコマンドをアボートするため、このようなハングアップの発生を未然に防止できる。
【０１４０】
４．ダミーデータの転送
次に、図１１のステップＳ５３〜Ｓ５５、Ｓ５６〜Ｓ５８のダミーデータの転送処理について、図１９（Ａ）〜（Ｅ）、図２０（Ａ）〜（Ｅ）を用いて説明する。
【０１４１】
図１９（Ａ）〜（Ｅ）は、デバイス１００のデータをパーソナルコンピュータ２がリードする場合（データ転送制御システム１０のデータ送信時）における、パケットバッファ４０のポインタ制御について説明するための図である。
【０１４２】
図１９（Ａ）〜（Ｅ）において、ポインタＡＴＸＰ１（第１のポインタ）は、ＢＵＳ２（デバイス１００、ＡＴＡ／ＡＴＡＰＩ）からの転送データをパケットバッファ４０に書き込むためのポインタであり、ＢＵＳ２からの転送データが書き込まれる毎に更新される。また、ポインタＬＴＸＰ２（第２のポインタ）は、ＢＵＳ１（パーソナルコンピュータ２、ＩＥＥＥ１３９４）への転送データをパケットバッファ４０から読み出すためのポインタであり、ＢＵＳ１への転送データが読み出される毎に更新される。これらのポインタの更新は、ポインタ管理部３９により行われる。
【０１４３】
図１９（Ａ）に示すように、ＢＵＳ２からの転送データがインターフェース回路３０によりパケットバッファ４０に書き込まれる毎に、ポインタＡＴＸＰ１が更新され、その指示位置が下側方向（データの蓄積方向）に移動する。そして、ポインタＡＴＸＰ１はリングバッファ方式で管理されている。従って、図１９（Ｂ）に示すように、ポインタＡＴＸＰ１が記憶領域の下側の境界ＢＤ２に達すると、ＡＴＸＰ１は記憶領域の上側の境界ＢＤ１に戻る（リングする）。
【０１４４】
そして、ＡＴＸＰ１＝ＬＴＸＰ２と判断された場合（図１１のステップＳ５４）には、図１９（Ｃ）に示すように、パケットバッファ４０の記憶領域の全てにデータが蓄積されたことになる。なお、図１９（Ａ）〜（Ｅ）において、斜線で示す部分が蓄積データを表している。
【０１４５】
すると本実施形態では、図１９（Ｄ）に示すように、ＬＴＸＰ２のポインタレジスタに、ＬＴＸＰ２と同じ値が再度書き込まれる（図１１のステップＳ５５）。これにより、ポインタＬＴＸＰ２がダミー更新され、記憶領域の全ての蓄積データが読み出されたのと同様の結果になる。そして、その後、図１９（Ｅ）に示すようにポインタＡＴＸＰ１が更新され、擬似的な読み出しが行われた記憶領域にＢＵＳ２からの転送データが書き込まれる。そして、ＤＭＡ転送が完了するまで（図１１のステップＳ５３）、図１９（Ａ）〜（Ｅ）のポインタ制御が繰り返され、ＢＵＳ２との間でのダミーデータの転送処理が行われるようになる。
【０１４６】
以上のように本実施形態では、ＢＵＳ２からの転送データが書き込まれる毎に更新されるＡＴＸＰ１（第１のポインタ）により、ＬＴＸＰ２（第２のポインタ）が追い越されないように、ＬＴＸＰ２をダミー更新することで、ダミーデータの転送制御の実現に成功している。
【０１４７】
図２０（Ａ）〜（Ｅ）は、パーソナルコンピュータ２がデバイス１００にデータをライトする場合（データ転送制御システム１０のデータ受信時）における、パケットバッファ４０のポインタ制御について説明するための図である。
【０１４８】
図２０（Ａ）〜（Ｅ）において、ポインタＡＲＸＰ３（第３のポインタ）は、ＢＵＳ２への転送データをパケットバッファ４０から読み出すためのポインタであり、ＢＵＳ２への転送データが読み出される毎に更新される。また、ポインタＬＲＸＰ４（第４のポインタ）は、ＢＵＳ１からの転送データをパケットバッファ４０に書き込むためのポインタであり、ＢＵＳ１からの転送データが書き込まれる毎に更新される。これらのポインタの更新は、ポインタ管理部３９により行われる。
【０１４９】
図２０（Ａ）に示すように、ＢＵＳ２への転送データがパケットバッファ４０から読み出される毎に、ポインタＡＲＸＰ３が更新され、その指示位置が下側方向に移動する。そして、ポインタＡＲＸＰ３はリングバッファ方式で管理されている。従って、図２０（Ｂ）に示すように、ポインタＡＲＸＰ３が下側の境界ＢＤ２に達すると上側の境界ＢＤ１に戻る。
【０１５０】
そして、ＡＲＸＰ３＝ＬＲＸＰ４と判断された場合（図１１のステップＳ５７）には、図２０（Ｃ）に示すように、パケットバッファ４０の記憶領域の全てのデータが読み出されたことになる。
【０１５１】
すると本実施形態では、図２０（Ｄ）に示すように、ＬＲＸＰ４のポインタレジスタに、ＬＲＸＰ４と同じ値が再度書き込まれる（図１１のステップＳ５８）。これにより、ポインタＬＲＸＰ４がダミー更新され、記憶領域の全てにデータが書き込まれたのと同様の結果になる。そして、図２０（Ｅ）に示すようにポインタＡＲＸＰ３が更新され、擬似的な書き込みが行われた記憶領域からＢＵＳ２への転送データが読み出される。そして、ＤＭＡ転送が完了するまで（図１１のステップＳ５６）、図２０（Ａ）〜（Ｅ）のポインタ制御が繰り返され、ＢＵＳ２との間でのダミーデータの転送処理が行われるようになる。
【０１５２】
このように本実施形態では、ＢＵＳ２への転送データが読み出される毎に更新されるＡＲＸＰ３（第３のポインタ）により、ＬＲＸＰ４（第４のポインタ）が追い越されないように、ＬＲＸＰ４をダミー更新することで、ダミーデータの転送制御の実現に成功している。
【０１５３】
以上のように本実施形態では、ＤＭＡ転送が完了するまで、ＢＵＳ２を介してダミーデータをデバイス１００との間で擬似的に転送し、ＤＭＡ転送が完了した後に、コマンドＣＭＤ１をアボートしている。そして、パーソナルコンピュータ２側の転送データの読み出しや書き込みは、図１９（Ｄ）、図２０（Ｄ）に示すように、ポインタＬＴＸＰ２、ＬＲＸＰ４のダミー更新より擬似的に行われる。従って、コマンドＣＭＤ１をアボートするまでＤＭＡ転送を継続することによる悪影響が、パーソナルコンピュータ２の処理に及ぶのを防止できる。そして、バスリセット後にパーソナルコンピュータ２が新たに送ってきたＯＲＢ２（ＣＭＤ２）の処理を、ＣＭＤ１がアボートされた後に適正に実行することが可能になる。
【０１５４】
なお、ポインタＬＴＸＰ２、ＬＲＸＰ４のダミー更新の手法は、図１９（Ａ）〜図２０（Ｅ）に示す手法に限定されず、少なくともポインタＡＴＸＰ１、ＡＲＸＰ３に追い越されないように、ＬＴＸＰ２、ＬＲＸＰ４を制御すればよい。また、ダミーデータの転送処理を、図１９（Ａ）〜図２０（Ｅ）に示すようなポインタ制御ではなく、ダミーデータ転送用の専用のハードウェア回路を設けて実現してもよい。
【０１５５】
５．ＡＴＡ／ＡＴＡＰＩのインターフェース回路
図２１に、ＡＴＡ／ＡＴＡＰＩのインターフェース回路３０の構成例を示す。なお、インターフェース回路３０は図２１の全ての回路ブロックを備える必要はなく、その一部を省略してもよい。
【０１５６】
ＦＩＦＯ３１は、データ転送の転送レートの差を調整（緩衝）するためのバッファである。ＤＭＡコントローラ３２は、ＦＩＦＯ３１やインターフェースコア回路３４の制御（ＲＥＱ／ＡＣＫ制御）等を行う回路である。
【０１５７】
インターフェースコア回路３４は、ＤＭＡの制御等を行う回路である。インターフェースコア回路３４が含むカウンタ３５は、ＡＴＡ（ＩＤＥ）／ＡＴＡＰＩ用のリセットカウンタである。インターフェースコア回路３４が含むＵＤＭＡ回路３６は、ＡＴＡ／ＡＴＡＰＩのＵｌｔｒａＤＭＡ転送を制御するための回路であり、ＵｌｔｒａＤＭＡ用のＦＩＦＯ３７、ＵｌｔｒａＤＭＡ用のＣＲＣ演算回路３８を含む。
【０１５８】
レジスタ３３は、ＤＭＡ転送の開始等を制御するためのレジスタであり、このレジスタ３３は、ファームウェア５０（ＣＰＵ４２）によりアクセス可能になっている。
【０１５９】
ＣＳ［１：０］は、ＡＴＡの各レジスタにアクセスするために使用するチップセレクト信号である。ＤＡ［２：０］は、データ又はデータポートにアクセスするためのアドレス信号である。
【０１６０】
ＤＭＡＲＱ、ＤＭＡＣＫは、ＤＭＡ転送に使用される信号である。データ転送の準備が整った時にデバイス１００側がＤＭＡＲＱをアクティブ（アサート）にし、これに応答して、データ転送制御システム１０（ホスト）側がＤＭＡ転送開始時にＤＭＡＣＫをアクティブにする。
【０１６１】
ＤＩＯＷ（ＳＴＯＰ）は、レジスタ又はデータポートの書き込み時に使用するライト信号である。なお、ＵｒｔｒａＤＭＡ転送中はＳＴＯＰ信号として機能する。ＤＩＯＲ（ＨＤＭＡＲＤＹ、ＨＳＴＲＯＢＥ）は、レジスタ又はデータポートの読み出し時に使用するリード信号である。なお、ＵｒｔｒａＤＭＡ転送中はＨＤＭＡＲＤＹ、ＨＳＴＲＯＢＥ信号として機能する。
【０１６２】
ＩＯＲＤＹ（ＤＤＭＡＲＤＹ、ＤＳＴＲＯＢＥ）は、デバイス１００のデータ転送の準備が整っていない時のウェイト信号等に使用される。なお、ＵｒｔｒａＤＭＡ転送中はＤＤＭＡＲＤＹ、ＤＳＴＲＯＢＥ信号として機能する。
【０１６３】
図２２（Ａ）〜図２４（Ｂ）に、以上のＡＴＡ用の信号の波形例を示す。なお、これらの図において「＃」は負論理（Ｌレベルがアクティブ）の信号であることを表す。
【０１６４】
図２２（Ａ）、（Ｂ）は、ＰＩＯ（Ｐａｒａｌｌｅｌ  Ｉ／Ｏ）リード、ＰＩＯライト時の信号波形例である。ＡＴＡのステータスレジスタのリードは図２２（Ａ）のＰＩＯリードにより行い、制御レジスタへのライトは図２２（Ｂ）のＰＩＯライトにより行う。例えば、デバイス１００に発行したコマンドをアボートするためのソフトウェアリセットは、図２２（Ｂ）のＰＩＯライトにより、インターフェース回路１０２のレジスタのＳＲＳＴビットに「１」をセットすればよい。
【０１６５】
図２３（Ａ）、（Ｂ）は、ＤＭＡリード、ＤＭＡライト時の信号波形例である。データ転送の準備ができると、デバイス１００（インターフェース回路１０２）が、ＤＭＡＲＱをアクティブ（Ｈレベル）にする。そして、それを受けて、データ転送制御システム１０（インターフェース回路３０）が、ＤＭＡＣＫをアクティブ（Ｌレベル）にして、ＤＭＡ転送を開始する。その後、ＤＩＯＲ（リード時）又はＤＩＯＷ（ライト時）を使用して、データＤＤ［１５：０］のＤＭＡ転送を行う。
【０１６６】
図２４（Ａ）、（Ｂ）は、ＵｌｔｒａＤＭＡリード、ＵｌｔｒａＤＭＡライト時の信号波形例である。データ転送の準備ができると、デバイス１００が、ＤＭＡＲＱをアクティブにする。そして、それを受けて、データ転送制御システム１０が、ＤＭＡＣＫをアクティブにして、ＤＭＡ転送を開始する。その後、ＤＩＯＷ、ＤＩＯＲ、ＩＯＲＤＹを使用して、データＤＤ［１５：０］のＵｌｔｒａＤＭＡ転送を行う。
【０１６７】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１６８】
例えば、明細書中の記載において広義な用語（第１のインターフェース規格、第２のインターフェース規格、第１のインターフェース規格の上位の第１のプロトコル、第１のインターフェース規格の上位の第２のプロトコル、コマンドパケット、電子機器、転送実行回路、ストレージデバイス、デバイス、プロセッサ等）として引用された用語（ＩＥＥＥ１３９４、ＡＴＡ／ＡＴＡＰＩ、ＳＢＰ−２、ＩＰｏｖｅｒ１３９４、ＯＲＢ、パーソナルコンピュータ、ＳＢＰ−２回路、ハードディスクドライブ・光ディスクドライブ、ストレージデバイス・プリンタデバイス・スキャナデバイス、ＣＰＵ等）は、明細書中の他の記載においても広義な用語に置き換えることができる。
【０１６９】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【０１７０】
また、本発明のデータ転送制御システム、電子機器の構成は、図７に示す構成に限定されず、種々の変形実施が可能である。例えば、これらの各図の各回路ブロック、機能ブロックの一部を省略したり、その接続関係を変更してもよい。例えば物理層回路とリンク層回路とパケットバッファの接続構成も図７に示す接続構成に限定されない。
【０１７１】
また本実施形態では、判断部、コマンド記憶部、コマンド比較部、アドレス記憶部、アドレス比較部、転送再開部、コマンド処理部、コマンドアボート部等の機能をファームウェア（プログラム）により実現する場合について説明したが、これらを機能の一部又は全部をハードウェア回路により実現してもよい。
【０１７２】
また、本発明はＩＥＥＥ１３９４におけるバスリセットに特に有用だが、これ以外にも、少なくともノードのトポロジー情報をクリアするようなリセットであれば適用できる。また本発明は、バスリセット発生時以外におけるコマンドアボート処理にも適用可能である。
【０１７３】
また本発明は種々の電子機器（ハードディスクドライブ、光ディスクドライブ、光磁気ディスクドライブ、ＰＤＡ、拡張機器、オーディオ機器、デジタルビデオカメラ、携帯電話、プリンタ、スキャナ、ＴＶ、ＶＴＲ、電話機、表示デバイス、プロジェクタ、パーソナルコンピュータ或いは電子手帳等）に適用できる。
【０１７４】
また、本実施形態では、ＩＥＥＥ１３９４、ＳＢＰ−２、ＡＴＡ／ＡＴＡＰＩ規格でのデータ転送に本発明を適用した場合について説明した。しかしながら本発明は、例えばＩＥＥＥ１３９４（Ｐ１３９４ａ）、ＳＢＰ−２（ＳＢＰ）、ＡＴＡ／ＡＴＡＰＩと同様の思想に基づく規格や、ＩＥＥＥ１３９４、ＳＢＰ−２、ＡＴＡ／ＡＴＡＰＩを発展させた規格におけるデータ転送にも適用できる。
【図面の簡単な説明】
【図１】ＩＥＥＥ１３９４、ＳＢＰ−２の層構造の説明図である。
【図２】ＳＢＰ−２の処理の概略について説明図である。
【図３】イニシエータからターゲットへのデータ転送の説明図である。
【図４】ターゲットからイニシエータへのデータ転送の説明図である。
【図５】図５（Ａ）（Ｂ）（Ｃ）はページテーブルの説明図である。
【図６】図６（Ａ）（Ｂ）はバスリセット発生時の問題の説明図である。
【図７】データ転送制御システム、電子機器の構成例である。
【図８】本実施形態の詳細な処理例のフローチャートである。
【図９】本実施形態の詳細な処理例のフローチャートである。
【図１０】本実施形態の詳細な処理例のフローチャートである。
【図１１】本実施形態の詳細な処理例のフローチャートである。
【図１２】データ転送の再開処理の説明図である。
【図１３】データ転送の再開処理の説明図である。
【図１４】ＯＲＢの比較処理の説明図である。
【図１５】アドレスの比較処理の説明図である。
【図１６】アドレスの比較処理の説明図である。
【図１７】アドレスの比較処理の説明図である。
【図１８】コマンドのアボート処理の説明図である。
【図１９】図１９（Ａ）〜（Ｅ）はダミーデータ転送処理の説明図である。
【図２０】図２０（Ａ）〜（Ｅ）はダミーデータ転送処理の説明図である。
【図２１】インターフェース回路の構成例である。
【図２２】図２２（Ａ）（Ｂ）はＰＩＯ転送の信号波形例である。
【図２３】図２３（Ａ）（Ｂ）はＤＭＡ転送の信号波形例である。
【図２４】図２４（Ａ）（Ｂ）はＵｌｔｒａＤＭＡ転送の信号波形例である。
【図２５】ページテーブル存在時にアドレス比較を省略する場合のフローチャートである。
【符号の説明】
ＢＵＳ１  第１のバス、ＢＵＳ２  第２のバス、
２  パーソナルコンピュータ、８  電子機器、１０  データ転送制御システム、
１４  物理層回路、２０  リンク層回路、２２  ＳＢＰ−２回路、
３０  インターフェース回路、３２  ＤＭＡコントローラ、
３８  バッファ管理回路、４０  パケットバッファ４２  ＣＰＵ、
４４  フラッシュメモリ、５０  ファームウェア、
５２  コミュニケーション部、６０  マネージメント部、７０  フェッチ部
７２  判断部、７３  コマンド記憶部、７４  コマンド比較部、
７５  アドレス記憶部、７６  アドレス比較部、７８  転送再開部、
８０  タスク部、８２  コマンド処理部、８４  コマンドアボート部、
１００  デバイス、１０２  インターフェース回路、
１０４  アクセス制御回路、１０６  ストレージ、
【図１】
0003599053.tif 000002
【図２】
0003599053.tif 000003
【図３】
0003599053.tif 000004
【図４】
0003599053.tif 000005
【図５】
0003599053.tif 000006
【図６】
0003599053.tif 000007
【図７】
0003599053.tif 000008
【図８】
0003599053.tif 000009
【図９】
0003599053.tif 000010
【図１０】
0003599053.tif 000011
【図１１】
0003599053.tif 000012
【図１２】
0003599053.tif 000013
【図１３】
0003599053.tif 000014
【図１４】
0003599053.tif 000015
【図１５】
0003599053.tif 000016
【図１６】
0003599053.tif 000017
【図１７】
0003599053.tif 000018
【図１８】
0003599053.tif 000019
【図１９】
0003599053.tif 000020
【図２０】
0003599053.tif 000021
【図２１】
0003599053.tif 000022
【図２２】
0003599053.tif 000023
【図２３】
0003599053.tif 000024
【図２４】
0003599053.tif 000025
【図２５】
0003599053.tif 000026