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