(57)【要約】      （修正有）【課題】ブリッジに接続されるデバイスの種類に応じて当該デバイスに送信可能なコマンドを変更することで、ミラーリング機能と高速なアクセス速度とを両立する。【解決手段】ストレージシステムは、第１のブリッジと、第１のブリッジに接続可能な第２のブリッジと、第１のブリッジに接続可能な第１の記憶装置と、第２のブリッジに接続可能な第２及び第３の記憶装置と、を備える。第１のブリッジは、メインコントローラからの入力データに基づき暗号データを生成する暗号化を行う暗号化手段と、第２のブリッジ又は第１の記憶装置からの暗号データに基づき復号データを生成する復号化を行う復号化手段と、第１のブリッジに接続されるデバイスの種類を判断するデバイス判断手段と、デバイス判断手段による判断に基づきメインコントローラからの入力コマンドの処理を変更するコマンド処理手段と、を備える。【選択図】図１
2019200709.tif 000002
【特許請求の範囲】
【請求項１】
第１のブリッジと、
前記第１のブリッジに接続可能な第２のブリッジと、
前記第１のブリッジに接続可能な第１の記憶装置と、
前記第２のブリッジに接続可能な第２及び第３の記憶装置と、を備え、
前記第１のブリッジは、
メインコントローラからの入力データに基づき暗号データを生成する暗号化を行う暗号化手段と、
前記第２のブリッジ又は前記第１の記憶装置からの暗号データに基づき復号データを生成する復号化を行う復号化手段と、
前記第１のブリッジに接続されるデバイスの種類を判断するデバイス判断手段と、
前記デバイス判断手段による判断に基づき前記メインコントローラからの入力コマンドの処理を変更するコマンド処理手段と、を備え、
前記第２のブリッジは、
前記第２及び第３の記憶装置に対するミラーリングを行うミラーリング手段を備え、
前記コマンド処理手段は、
前記入力コマンドが前記第２のブリッジに対する設定又は問い合わせに関する拡張コマンドである場合に、前記暗号化を行わずに当該拡張コマンドを前記第２のブリッジに送信し、かつ前記復号化を行わずに当該拡張コマンドの応答を前記メインコントローラに送信する、
ことを特徴とするストレージシステム。
【請求項２】
前記メインコントローラ、前記第１のブリッジ、及び前記第２のブリッジは、直列接続される、
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記第１の記憶装置は、ＳＳＤ装置であり、前記第２及び第３の記憶装置は、ＨＤＤ装置である、
ことを特徴とする請求項１又は２に記載のストレージシステム。
【請求項４】
前記第１のブリッジは、複数の接続ポートを備え、
前記デバイス判断手段は、各接続ポートの状態を、前記デバイスの探索前、前記第２のブリッジの接続有り、前記第１の記憶装置の接続有り、及び前記デバイスの接続無しの４段階で管理する、
ことを特徴とする請求項１乃至３のいずれか１項に記載のストレージシステム。
【請求項５】
前記複数の接続ポートのうち所定の接続ポートの状態が前記デバイスの探索前である場合に、前記デバイス判断手段は、前記所定の接続ポートの状態が前記第２のブリッジの接続有り、前記第１の記憶装置の接続有り、及び前記デバイスの接続無しのいずれにあるかを判断する、
ことを特徴とする請求項４に記載のストレージシステム。
【請求項６】
前記複数の接続ポートの状態が前記第１の記憶装置の接続有り及び前記デバイスの接続無しのいずれかであり、かつ前記入力コマンドが前記第２のブリッジにアクセスする拡張コマンドである場合に、前記コマンド処理手段は、当該拡張コマンドをマスクする、
ことを特徴とする請求項５に記載のストレージシステム。
【請求項７】
前記入力コマンドが前記第２のブリッジにアクセスする拡張コマンドである場合に、前記コマンド処理手段は、当該拡張コマンドを前記第２のブリッジが実行可能な形式に変更したうえで前記第２のブリッジに送信する、
ことを特徴とする請求項１乃至６のいずれか１項に記載のストレージシステム。
【請求項８】
前記入力コマンドが前記第１のブリッジにアクセスする拡張コマンドである場合に、前記コマンド処理手段は、当該拡張コマンドを前記第１のブリッジ内で処理する、
ことを特徴とする請求項１乃至７のいずれか１項に記載のストレージシステム。
【請求項９】
前記入力コマンドが前記第１の記憶装置にアクセスする標準コマンドである場合に、前記コマンド処理手段は、当該標準コマンドを前記第１の記憶装置に送信する、
ことを特徴とする請求項１乃至８のいずれか１項に記載のストレージシステム。
【請求項１０】
前記入力コマンドが前記暗号化又は前記復号化に関する拡張コマンドである場合に、前記コマンド処理手段は、当該拡張コマンドを前記第１のブリッジ内で処理し、当該拡張コマンドを前記第２のブリッジに送信しない、
ことを特徴とする請求項１乃至９のいずれか１項に記載のストレージシステム。
【請求項１１】
前記入力コマンドが前記ミラーリングに関する拡張コマンドである場合に、前記コマンド処理手段は、当該拡張コマンドを前記第２のブリッジに送信する、
ことを特徴とする請求項１乃至１０のいずれか１項に記載のストレージシステム。
【請求項１２】
前記第１及び第２のブリッジは、前記メインコントローラから見たときに１つのブリッジとして認識される、
ことを特徴とする請求項１乃至１１のいずれか１項に記載のストレージシステム。
【請求項１３】
前記入力コマンドが前記１つのブリッジに対する設定又は問い合わせに関する拡張コマンドである場合に、前記コマンド処理手段は、当該拡張コマンドを前記第１のブリッジ内で処理すると共に、前記第２のブリッジに送信し、かつ前記第１及び第２のブリッジからの応答は、マージされて前記メインコントローラに送信される、
ことを特徴とする請求項１２に記載のストレージシステム。
【請求項１４】
前記入力コマンドが前記第２又は第３の記憶装置に対する読み出し／書き込みに関するコマンドであり、かつ前記暗号化が認証されている場合に、前記コマンド処理手段は、前記第２のブリッジに前記読み出し／書き込みに関するコマンドを送信する、
ことを特徴とする請求項１乃至１３のいずれか１項に記載のストレージシステム。
【請求項１５】
第１のブリッジと、前記第１のブリッジに接続可能な第２のブリッジと、前記第１のブリッジに接続可能な第１の記憶装置と、前記第２のブリッジに接続可能な第２及び第３の記憶装置と、を備えるストレージシステムの制御方法であって、
前記第１のブリッジがメインコントローラからの入力データに基づき暗号データを生成する暗号化を行う暗号化工程と、
前記第１のブリッジが前記第２のブリッジ又は前記第１の記憶装置からの暗号データに基づき復号データを生成する復号化を行う復号化工程と、
前記第１のブリッジが前記第１のブリッジに接続されるデバイスの種類を判断するデバイス判断工程と、
前記第１のブリッジが前記デバイス判断手段による判断に基づき前記メインコントローラからの入力コマンドの処理を変更するコマンド処理工程と、
前記第２のブリッジが前記第２及び第３の記憶装置に対するミラーリングを行うミラーリング工程と、を備え、
前記コマンド処理工程では、
前記入力コマンドが前記第２のブリッジに対する設定又は問い合わせに関する拡張コマンドである場合に、前記暗号化を行わずに当該拡張コマンドを前記第２のブリッジに送信し、かつ前記復号化を行わずに当該拡張コマンドの応答を前記メインコントローラに送信する、
ことを特徴とする制御方法。
【請求項１６】
請求項１乃至１４のいずれか１項に記載のストレージシステムの各手段としてコンピュータを機能させるためのプログラム。
【請求項１７】
記憶装置又は外部ブリッジ装置からコマンドを受信し、当該コマンドを前記記憶装置又は前記外部ブリッジ装置とは別のデバイスに対して自ブリッジ装置を介して転送するコマンド転送手段と、
転送先となる前記別のデバイスとして前記外部ブリッジ装置とは別のブリッジ装置が自ブリッジ装置に対して装着されているかを問い合わせるコマンドを発行するコマンド発行手段と、を備え、
転送先となる前記別のデバイスとして前記別のブリッジ装置が前記自ブリッジ装置に装着されていない場合には、前記自ブリッジ装置は、上流のデバイスから受信したコマンドを前記別のデバイスへに転送しない処理を行う、
ことを特徴とする記憶制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びその制御方法、プログラム、並びに記憶制御システムに関する。
【背景技術】
【０００２】
ＭＦＰ（Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｒｉｎｔｅｒ）などの情報処理装置は、装置のプログラムやユーザの画像データを保存するため、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）など記憶装置を備える。また、従来から、記憶装置のインターフェース規格であるＡＴＡ（Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）などのコマンドの制御方法が提案される。例えば、特許文献１は、メインコントローラとＳＡＴＡブリッジのセキュリティ認証の際、ＡＴＡ８−ＡＣＳなどでリザーブされている領域にベンダユニークコマンドとして拡張したコマンドを用いる技術を開示する。この技術では、ＳＡＴＡブリッジは、認証開始前に記憶装置へのアクセスコマンドを発行せず、認証終了後に記憶装置へのアクセスコマンドを発行する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第４８２９６３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に開示されるＳＡＴＡブリッジは、認証されたかどうかにかかわらず、ＳＡＴＡ  Ｉ／Ｆから拡張コマンドを発行しない。そのため、ＳＡＴＡブリッジは、ＳＳＤ、ＨＤＤなどの記憶装置にしか接続できないという課題を有する。
【０００５】
一方、ＳＡＴＡブリッジがホストとして拡張コマンドを送信可能することで、ＳＡＴＡブリッジに記憶装置以外のデバイス、例えば、後段のＳＡＴＡデバイスを接続することもできる。この場合、前段のＳＡＴＡブリッジに高速なアクセス動作を実現するＳＳＤ装置を接続し、後段のＳＡＴＡブリッジに複数のＨＤＤ装置を接続し、かつ複数のＨＤＤ装置を用いてミラーリング機能を実現することも可能と考えられる。しかし、前段のブリッジは、自らに接続される後段のデバイスの種類を判断する機能を有しないため、コマンドの種類（標準コマンド又は拡張コマンド）に基づいて、適切に、当該コマンドを後段のデバイスに送信することができない。従って、誤ったコマンドの送信により後段のデバイスが誤動作する虞が生じる。
【０００６】
本発明は、ブリッジに記憶装置以外のデバイスを接続可能とすると共に、後段のデバイスの種類に応じて当該デバイスに送信可能なコマンドを変更することで、ミラーリング機能と高速なアクセス速度とを両立することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一実施形態のストレージシステムは、第１のブリッジと、前記第１のブリッジに接続可能な第２のブリッジと、前記第１のブリッジに接続可能な第１の記憶装置と、前記第２のブリッジに接続可能な第２及び第３の記憶装置と、を備える。前記第１のブリッジは、メインコントローラからの入力データに基づき暗号データを生成する暗号化を行う暗号化手段と、前記第２のブリッジ又は前記第１の記憶装置からの暗号データに基づき復号データを生成する復号化を行う復号化手段と、前記第１のブリッジに接続されるデバイスの種類を判断するデバイス判断手段と、前記デバイス判断手段による判断に基づき前記メインコントローラからの入力コマンドの処理を変更するコマンド処理手段と、を備える。前記第２のブリッジは、前記第２及び第３の記憶装置に対するミラーリングを行うミラーリング手段を備える。前記コマンド処理手段は、前記入力コマンドが前記第２のブリッジに対する設定又は問い合わせに関する拡張コマンドである場合に、前記暗号化を行わずに当該拡張コマンドを前記第２のブリッジに送信し、かつ前記復号化を行わずに当該拡張コマンドの応答を前記メインコントローラに送信する。
【発明の効果】
【０００８】
本発明によれば、ブリッジに記憶装置以外のデバイスを接続可能とすると共に、後段のデバイスの種類に応じて当該デバイスに送信可能なコマンドを変更することで、ミラーリング機能と高速なアクセス速度とを両立することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明のストレージシステムの構成図である。
【図２】メインコントローラの詳細構成図である。
【図３】第１のブリッジの詳細構成図である。
【図４】第２のブリッジの詳細構成図である。
【図５】デバイス判断部の動作を示すフローチャートである。
【図６】デバイス判断部の動作を示すフローチャートである。
【図７】コマンド処理部の動作を示すフローチャートである。
【図８】コマンド処理時の状態遷移図である。
【図９】拡張コマンドの例を示す図である。
【図１０】標準コマンドの例を示す図である。
【図１１】第１のブリッジの詳細構成図である。
【図１２】第２のブリッジの詳細構成図である。
【図１３】コマンド処理部の動作を示すフローチャートである。
【図１４】コマンドリストの例を示す図である。
【図１５】比較例のストレージシステムの構成図である。
【発明を実施するための形態】
【００１０】
以下の実施形態では、前段のブリッジから拡張コマンドを送信可能することで、前段のブリッジに記憶装置以外のデバイス、例えば、後段のブリッジを接続可能とする技術を説明する。例えば、前段のブリッジに記憶装置が接続される場合、拡張コマンドをマスクする、即ち送信しない。また、前段のブリッジに後段のブリッジが接続される場合、拡張コマンドをその後段のブリッジに送信する。これにより、ブリッジに記憶装置とそれ以外のデバイスの両方を接続できる。
【００１１】
ところで、ＭＦＰなどの情報処理装置の中には、複数の記憶装置を装着し、各記憶装置に同一データを書き込むことで、データを強固に保護可能なミラーリング機能を備えたモデルが存在する。ミラーリング機能は、複数の記憶装置の１つが故障し、それがリード／ライト不能な状態になっても、残りの記憶装置からデータを復元可能である点に特徴を有し、データを失う危険性を回避できることから有望な技術と言える。
【００１２】
一方、近年、記憶装置としてＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）装置が登場し、リード／ライトの高速処理が行えることから、ＭＦＰなどの情報処理装置の記憶装置としても使用され始めている。そこで、上述のミラーリング機能を複数のＳＳＤ装置で実現することが検討されるが、ＳＳＤ装置単体のコストはＨＤＤ装置単体のコストよりも高く、ＳＳＤ装置のみでミラーリング機能を実現することは、コストの面から現実的に不可能である。
【００１３】
上述の手段は、このような課題を解決する。即ち、第１及び第２のブリッジをカスケード接続し、前段である第１のブリッジに高速なアクセス速度を実現する第１の記憶装置（例えば、ＳＳＤ装置）を接続する。また、後段である第２のブリッジにミラーリング機能を実現する第２及び第３の記憶装置（例えば、ＨＤＤ装置）を接続する。この場合、第１の記憶装置にアクセスする標準コマンドは、第１の記憶装置に送信され、かつ第２のブリッジに対してはマスクされる。また、ミラーリングに関する拡張コマンドは、第２のブリッジが実行可能な形式に変更したうえで第２のブリッジに送信され、かつ第１の記憶装置に対してはマスクされる。
【００１４】
このように、第１のブリッジに接続される後段のデバイスの種類に応じて当該デバイスに送信可能なコマンドを変更することで、ミラーリング機能と高速なアクセス速度とを両立した情報処理装置が実現される。従って、以下のストレージシステムは、ＨＤＤ装置などの大容量の記憶装置とＳＳＤ装置などの小容量かつ高速の記憶装置とが接続され、ＡＴＡコマンド、ベンダユニークコマンドなどでミラーリング機能及び暗号化・復号化機能を制御するのに好適である。
【００１５】
以下、本発明の実施例を具体的に説明する。
（第１の実施例）
図１は、本発明のストレージシステムの構成図を示す。
このストレージシステムは、情報処理装置としてのＭＦＰに適用されることを前提として説明するが、これに限定されるものではなく、例えば、複数の記憶装置を備える情報処理装置であれば本発明を適用可能である。
【００１６】
ストレージシステムは、メインコントローラ１００と、第１乃至第３の記憶装置４００、４０１、４０２と、第１及び第２のブリッジ２００、３００と、を備える。メインコントローラ１００は、ＭＦＰ全体を制御する。第１乃至第３の記憶装置４００、４０１、４０２は、データを記憶する。第１及び第２のブリッジ２００、３００は、第１乃至第３の記憶装置４００、４０１、４０２に対してデータの送受信を行う。
【００１７】
以下の説明では、第１の記憶装置４００は、ＳＳＤ装置を前提とし、第２及び第３の記憶装置４０１、４０２は、ＨＤＤ装置を前提とするが、これに限定されるものではない。第１の記憶装置４００は、第２及び第３の記憶装置４０１、４０２に比べて、高速なアクセス速度でデータを記憶可能な記憶装置であればよい。また、第２及び第３の記憶装置４０１、４０２は、第１の記憶装置４００に比べて、アクセス速度が遅いが、大きな記憶容量を有する記憶装置であればよい。第２及び第３の記憶装置４０１、４０２は、起動プログラムやユーザデータなどを記憶する。また、このようなデータは、信頼性が要求されるので、ミラーリング機能により保存される。
【００１８】
メインコントローラ１００、第１のブリッジ２００、及び第２のブリッジ３００は、直列接続される。第１のブリッジ２００は、複数の接続ポートを備える。第１のブリッジ２００の複数の接続ポートのうちの１つには、第１の記憶装置４００が接続可能であり、他の１つには、第２のブリッジ３００が接続可能である。同様に、第２のブリッジ３００も、複数の接続ポートを備える。第２のブリッジ３００の複数の接続ポートのうちの１つには、第２の記憶装置４０１が接続可能であり、他の１つには、第３の記憶装置４０２が接続可能である。本例では、ブリッジの数は、２つであるが、これに限定されるものではない。第１及び第２のブリッジ２００、３００に、さらに他のブリッジを接続してもよい。
【００１９】
また、第１及び第２のブリッジ２００、３００は、メインコントローラ１００から見たときに、１つのブリッジとして認識される。
【００２０】
図２は、メインコントローラの詳細構成図を示す。
メインコントローラ（ホスト）１００は、ＣＰＵ１０１と、ＲＯＭ１０２と、ＤＲＡＭ１０３と、Ｎｅｔｗｏｒｋ１０４と、を備える。さらに、メインコントローラ１００は、スキャン画像処理部１０５と、スキャナ１０６と、プリンタ画像処理部１０７と、プリンタ１０８と、操作部１０９と、ＳＡＴＡコントローラ１１０と、を備える。
【００２１】
ＣＰＵ１０１は、ストレージシステム全体を制御するコントローラであり、システム制御、演算処理、ＯＳ、アプリケーションなどを実行する。ＲＯＭ１０２は、リード専用のメモリであり、ＣＰＵ１０１で実行されるプログラム及び設定情報を記憶する。ＤＲＡＭ１０３は、ＣＰＵ１０１で実行する制御プログラムを記憶する。ＤＲＡＭ１０３は、一時的なワークエリアとしても使用される。
【００２２】
Ｎｅｔｗｏｒｋ１０４は、ネットワークＩ／Ｆであり、ストレージシステム内で画像処理を施した画像データをＬＡＮ１１１経由で外部、即ち、図示しない情報機器に送信する。Ｎｅｔｗｏｒｋ１０４は、外部から画像データを受信する。
【００２３】
スキャン画像処理部１０５は、スキャナ１０６から受信した画像データに画像処理を施す。スキャン画像処理部１０５で処理された画像データは、ＳＡＴＡコントローラ１１０を経由して第１及び第２のブリッジ２００、３００に送信され、第１乃至第３の記憶装置４００〜４０２に記憶される。スキャナ１０６は、画像入力デバイスであり、例えば、原稿となる紙上の画像に光を照射し、ＣＣＤラインセンサを走査させ、反射光を検出することで、ラスター・イメージデータとしての電気信号を取得する。
【００２４】
プリンタ画像処理部１０７は、外部、又は第１乃至第３の記憶装置４００〜４０２から受信した画像データに画像処理を施す。プリンタ画像処理部１０７で処理された画像データは、プリンタ１０８に送信される。プリンタ１０８は、画像出力デバイスであり、ラスター・イメージデータを用紙上に印刷すべき画像に変換する。
【００２５】
操作部１０９は、表示機能と操作機能を兼ね揃えたタッチパネルなどのデバイスである。操作部１０９は、入力された画像データを表示する役割と、ユーザが入力した情報をＣＰＵ１０１に伝える役割と、を有する。ＳＡＴＡコントローラ１１０は、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）規格に準拠して接続機器を制御し、かつ第１のブリッジ２００に対してデータの送受信を行う。ＬＡＮ１１１は、メインコントローラ１００を含む情報処理装置と外部（情報機器）との間で通信を行うためのネットワーク網である。
【００２６】
図３は、第１のブリッジ２００の詳細構成図を示す。
ＣＰＵ２０１は、第１のブリッジ２００のシステム制御、演算処理、ＡＴＡコマンド処理などを行う。また、ＣＰＵ２０１は、メインコントローラ１００から受信し、かつ第２のブリッジ３００又は第１の記憶装置４００に送信すべき入力コマンドの処理を行う。
【００２７】
コマンド処理は、ＣＰＵ２０１内のデバイス判断部による、第１のブリッジ２００に接続されるデバイスの種類を判断する処理、及びＣＰＵ２０１内のコマンド処理部による、当該デバイスの種類に基づき入力コマンドの処理を変更する処理を含む。
【００２８】
コマンド処理部は、入力コマンドが第２のブリッジ３００に対する設定又は問い合わせに関する拡張コマンドである場合に、当該拡張コマンドを第２のブリッジ３００に送信し、かつ当該拡張コマンドの応答をメインコントローラ１００に送信する。
【００２９】
また、コマンド処理部は、入力コマンドが第１の記憶装置４００にアクセスする標準コマンドである場合に、当該標準コマンドを第１の記憶装置４００に送信する。さらに、コマンド処理部は、入力コマンドが暗号化又は復号化に関する拡張コマンドである場合に、当該拡張コマンドを第１のブリッジ２００内で処理し、第２のブリッジ３００に送信しない。一方、コマンド処理部は、入力コマンドがミラーリングに関する拡張コマンドである場合に、当該拡張コマンドを第２のブリッジ３００に送信する。
【００３０】
さらに、第１及び第２のブリッジ２００、３００がメインコントローラ１００から見たときに、１つのブリッジとして認識される場合、コマンド処理部は、以下の処理を行う。例えば、入力コマンドが当該１つのブリッジに対する設定又は問い合わせに関する拡張コマンドである場合、コマンド処理部は、当該拡張コマンドを第１のブリッジ２００内で処理すると共に第２のブリッジ３００に送信する。また、コマンド処理部は、第１及び第２のブリッジからの応答をマージしてメインコントローラ１００に送信する。
【００３１】
ＲＯＭ２０２は、ＣＰＵ２０１の制御プログラム、各種モードの設定値に関するデータなどを記憶する。ＲＡＭ２０３は、ＣＰＵ２０１で実行する制御プログラムを記憶する。ＲＡＭ２０３は、一時的なワークエリアとしても使用される。
【００３２】
ＳＡＴＡ  Ｉ／Ｆ２０４は、メインコントローラ１００に接続される接続ポートを備え、ＳＡＴＡ規格に準拠して、メインコントローラ１００内のＳＡＴＡコントローラ１１０（図２）と通信を行う。この場合、メインコントローラ１００は、ホストとして機能し、ＳＡＴＡ  Ｉ／Ｆ２０４は、ホストに制御されるデバイスとして機能する。
【００３３】
ＳＡＴＡ  Ｉ／Ｆ２０５は、第１の記憶装置４００に接続される接続ポートを備え、かつＳＡＴＡ  Ｉ／Ｆ２０６は、第２のブリッジ３００に接続される接続ポートを備える。ＳＡＴＡ  Ｉ／Ｆ２０５、２０６は、ＳＡＴＡ規格に準拠して、第１の記憶装置４００又は第２のブリッジ３００と通信を行う。この場合、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６は、ホストとして機能し、第１の記憶装置４００及び第２のブリッジ３００は、ホストに制御されるデバイスとして機能する。
【００３４】
図４は、第２のブリッジ３００の詳細構成図を示す。
ＣＰＵ１００１は、第２のブリッジ３００のシステム制御、演算処理、ＡＴＡコマンド処理などを行う。また、ＣＰＵ１００１は、第１のブリッジ２００から受信し、かつ第２の記憶装置４０１又は第３の記憶装置４０２に送信すべき入力コマンドの処理を行う。
【００３５】
コマンド処理は、ＣＰＵ１００１内のデバイス判断部による、第２のブリッジ３００に接続されるデバイスの種類を判断する処理、及びＣＰＵ１００１内のコマンド処理部による、当該デバイスの種類に基づき入力コマンドの処理を変更する処理を含む。
【００３６】
コマンド処理部は、入力コマンドが第２又は第３の記憶装置４０１、４０２にアクセスする標準コマンドである場合に、当該標準コマンドを第２又は第３の記憶装置４０１、４０２に送信する。また、コマンド処理部は、入力コマンドがミラーリングに関する拡張コマンドである場合に、当該拡張コマンドを第２のブリッジ３００内で処理する。
【００３７】
ＲＯＭ１００２は、ＣＰＵ１００１の制御プログラム、各種モードの設定値に関するデータなどを記憶する。ＲＡＭ１００３は、ＣＰＵ１００１で実行する制御プログラムを記憶する。ＲＡＭ１００３は、一時的なワークエリアとしても使用される。
【００３８】
ＳＡＴＡ  Ｉ／Ｆ１００４は、第１のブリッジ２００に接続される接続ポートを備え、ＳＡＴＡ規格に準拠して、第１のブリッジ２００内のＳＡＴＡ  Ｉ／Ｆ２０６（図３）と通信を行う。この場合、ＳＡＴＡ  Ｉ／Ｆ２０６（図３）は、ホストとして機能し、ＳＡＴＡ  Ｉ／Ｆ１００４は、ホストに制御されるデバイスとして機能する。
【００３９】
ＳＡＴＡ  Ｉ／Ｆ１００５は、第２の記憶装置４０１に接続される接続ポートを備え、かつＳＡＴＡ  Ｉ／Ｆ１００６は、第３の記憶装置４０２に接続される接続ポートを備える。ＳＡＴＡ  Ｉ／Ｆ１００５、１００６は、ＳＡＴＡ規格に準拠して、第２の記憶装置４０１又は第３の記憶装置４０２と通信を行う。この場合、ＳＡＴＡ  Ｉ／Ｆ１００５、１００６は、ホストとして機能し、第２の記憶装置４０１及び第３の記憶装置４０２は、ホストに制御されるデバイスとして機能する。
【００４０】
尚、図３及び図４の例では、第１及び第２のブリッジ２００、３００は、同一の要素を備えるが、これに限定されるものではない。即ち、第１及び第２のブリッジ２００、３００の一方は、その他方にない要素又は機能を備えていてもよい。
【００４１】
また、図２のＳＡＴＡコントローラ１１０、第１のブリッジ２００、及び第２のブリッジ３００は、それぞれ異なるチップ内に形成されててもよいし、同一チップ内に形成されてもよい。また、ＳＡＴＡコントローラ１１０と第１のブリッジ２００が同一チップ内に形成されてもよいし、又は第１のブリッジ２００と第２のブリッジ３００が同一チップ内に形成されてもよい。
【００４２】
次に、図５乃至図７のフローチャートを用いて、第１及び第２のブリッジ２００，３００の動作を説明する。
【００４３】
図５及び図６は、ＣＰＵ２０１、１００１内のデバイス判断部の動作を示す。
このフローチャートは、ＣＰＵ２０１、１００１上で動作するプログラムにより実行され、当該プログラムは、ＲＡＭ２０３、１００３、ＲＯＭ２０２、１００２、又は、第１乃至第３の記憶装置４００〜４０２のいずれかに記憶される。
【００４４】
また、このフローチャートは、ＳＡＴＡ  Ｉ／Ｆ毎に実行される。即ち、本例では、図３に示すように、第１のブリッジ２００は、２つのＳＡＴＡ  Ｉ／Ｆ  ２０５、２０６を備えるため、本フローは、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６に対して１回ずつ、合計２回実行される。ＳＡＴＡ  Ｉ／Ｆ２０５、２０６のうち、いずれを先に本フローチャートの対象とするか、については、特に限定されない。
【００４５】
例えば、ＳＡＴＡ  Ｉ／Ｆ２０５に対して本フローチャートを実行した後、ＳＡＴＡ  Ｉ／Ｆ２０６に対して本フローチャートを実行してもよいし、又は、その逆でもよい。また、２つのＳＡＴＡ  Ｉ／Ｆ２０５、２０６に対して、並列に、本フローチャートを実行してもよい。
【００４６】
同様に、本例では、図４に示すように、第２のブリッジ３００は、２つのＳＡＴＡ  Ｉ／Ｆ  １００５、１００６を備えるため、本フローは、ＳＡＴＡ  Ｉ／Ｆ１００５、１００６に対して１回ずつ、合計２回実行される。ＳＡＴＡ  Ｉ／Ｆ１００５、１００６のうち、いずれを先に本フローチャートの対象とするか、については、特に限定されない。
【００４７】
また、本フローチャートは、本ストレージシステムを起動するときなど、第１及び第２のブリッジ２００、３００の初期化時に実行することが望ましい。但し、本フローチャートは、これに限定されるものではなく、例えば、メインコントローラ１００がＳＡＴＡデバイスにアクセスするときに実行してもよい。
【００４８】
・  第１のブリッジ２００の動作
Ｓ４０１〜Ｓ４０３は、第１のブリッジ２００にＳＡＴＡデバイスが接続されるか否か、及び第１のブリッジ２００にＳＡＴＡデバイスが接続される場合には、当該ＳＡＴＡデバイスの種類を判断するステップである。
【００４９】
まず、Ｓ４０１において、デバイス判断部は、ＳＡＴＡホストにＳＡＴＡデバイスが接続されるか否かを判断する。ここで、ＳＡＴＡホストとは、図３のＳＡＴＡ  Ｉ／Ｆ２０５、２０６のことであり、ＳＡＴＡデバイスとは、図３の第１の記憶装置４００及び第２のブリッジ３００のことである。
【００５０】
例えば、デバイス判断部は、ＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥなどのＡＴＡコマンドを発行し、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６から応答がなければ、それらにＳＡＴＡデバイスが接続されないと判断し、Ｓ４０４に進む。一方、デバイス判断部は、ＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥなどのＡＴＡコマンドを発行し、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６から応答があれば、それらにＳＡＴＡデバイスが接続されると判断し、Ｓ４０２に進む。
【００５１】
但し、ＳＡＴＡホストにＳＡＴＡデバイスが接続されるか否かの判断は、ＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥなどのＡＴＡコマンドの発行による判断に限定されるものではない。当該判断は、ＳＡＴＡデバイスの接続の有無を確認できる方法であれば、どのような方法を用いても構わない。もちろん、この判断に使用されるコマンドも、ＡＴＡコマンドに限定されるものはなく、拡張コマンドを発行してもよい。
【００５２】
尚、Ｓ４０１は、必須の処理ではなく、省略しても構わない。
【００５３】
次に、Ｓ４０２において、デバイス判断部は、ＳＡＴＡホストにブリッジが接続されるか否かを判断する。例えば、デバイス判断部は、ＡＴＡコマンド又は拡張コマンドを発行し、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６から応答がなければ、それらにブリッジが接続されないと判断し、Ｓ４０３に進む。一方、デバイス判断部は、ＡＴＡコマンド又は拡張コマンドを発行し、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６から応答があれば、それらにブリッジが接続されると判断し、Ｓ４０６に進む。
【００５４】
次に、Ｓ４０３において、デバイス判断部は、ＳＡＴＡホストに記憶装置が接続されるか否かを判断する。例えば、デバイス判断部は、ＡＴＡコマンドを発行し、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６から応答がなければ、それらに記憶装置が接続されない、即ち、未知のＳＡＴＡデバイスが接続されると判断し、Ｓ４０４に進む。一方、デバイス判断部は、ＡＴＡコマンドを発行し、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６から応答があれば、それらに記憶装置が接続されると判断し、Ｓ４０５に進む。
【００５５】
以上により、デバイス判断部は、ＳＡＴＡ  Ｉ／Ｆ（接続ポート）２０５、２０６の各々について、ＳＡＴＡデバイスの接続無し、ブリッジ（第２のブリッジ３００）の接続有り、及び記憶装置（第１の記憶装置４００）の接続有りの３つの状態を確認できる。但し、ＳＡＴＡデバイスの接続無しは、未知のＳＡＴＡデバイスが接続される場合を含む。また、デバイス判断部は、この３つの状態に、ＳＡＴＡデバイスの探索前（本フローチャートの実行前）という状態を加え、合計４つの状態（４段階）で、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６を管理できる。
【００５６】
また、デバイス判断部は、ＳＡＴＡ  Ｉ／Ｆ（接続ポート）２０５、２０６のうち所定の接続ポートがＳＡＴＡデバイスの探索前の状態にあるとき、さらに、その所定の接続ポートについてＳＡＴＡデバイスの探索を行う。そして、デバイス判断部は、所定の接続ポートの状態を、ＳＡＴＡデバイスの接続無し、ブリッジの接続有り、及び記憶装置の接続有りのいずれにあるかを判断する。
【００５７】
従って、ＳＡＴＡホストにＳＡＴＡデバイスが未接続であるか、又は未知のＳＡＴＡデバイスが接続される場合、ＣＰＵ２０１は、第１のブリッジ２００が未接続モードにあると判断できる。また、ＣＰＵ２０１は、例えば、第１のブリッジ２００が未接続モードにあることを把握し続けるため、例えば、未接続モードにあることを示す２ビットデータ“００”をＲＯＭ２０２又はＲＡＭ２０３に記憶する（Ｓ４０４）。
【００５８】
さらに、ＣＰＵ２０１は、第１のブリッジ２００が未接続モードにあることをメインコントローラ１００に通知する。この通知は、例えば、ＳＡＴＡ規格のＲｅｇｉｓｔｅｒ  Ｄｅｖｉｃｅ  ｔｏ  Ｈｏｓｔ（ＲｅｇＤＨ）などを用い、ＳＡＴＡ  Ｉ／Ｆ２０４を経由して行うことができる（Ｓ４０４）。
【００５９】
一方、ＳＡＴＡホストに記憶装置（第１の記憶装置４００）が接続される場合、ＣＰＵ２０１は、第１のブリッジ２００が記憶装置接続モードにあると判断できる。また、ＣＰＵ２０１は、例えば、第１のブリッジ２００が記憶装置接続モードにあることを把握し続けるため、例えば、記憶装置接続モードにあることを示す２ビットデータ“０１”をＲＯＭ２０２又はＲＡＭ２０３に記憶する（Ｓ４０５）。
【００６０】
さらに、ＣＰＵ２０１は、第１のブリッジ２００が記憶装置接続モードにあることをメインコントローラ１００に通知する。この通知は、上述のように、例えば、ＳＡＴＡ規格のＲｅｇＤＨなどを用い、ＳＡＴＡ  Ｉ／Ｆ２０４を経由して行うことができる（Ｓ４０５）。
【００６１】
また、ＳＡＴＡホストにブリッジ（第２のブリッジ３００）が接続される場合、ＣＰＵ２０１は、第１のブリッジ２００がブリッジ接続モードにあると判断できる。また、ＣＰＵ２０１は、例えば、第１のブリッジ２００がブリッジ接続モードにあることを把握し続けるため、例えば、ブリッジ接続モードにあることを示す２ビットデータ“１０”をＲＯＭ２０２又はＲＡＭ２０３に記憶する（Ｓ４０６）。
【００６２】
さらに、ＣＰＵ２０１は、第１のブリッジ２００がブリッジ接続モードにあることをメインコントローラ１００に通知する。この通知は、上述のように、例えば、ＳＡＴＡ規格のＲｅｇＤＨなどを用い、ＳＡＴＡ  Ｉ／Ｆ２０４を経由して行うことができる（Ｓ４０６）。
【００６３】
図５のフローチャートにおいて、第１のブリッジ２００が記憶装置接続モードにあると判断された場合（Ｓ４０５）、続けて、図６のフローチャートが実行される。図６のフローチャートは、第１のブリッジ２００に接続される記憶装置（第１の記憶装置４００）の種類（ＳＳＤ装置又はＨＤＤ装置）を判別するためのものである。
【００６４】
但し、図６のフローチャートの実行は、省略してもよい。即ち、第１のブリッジ２００に接続される記憶装置の種類を特定する必要がないときは、図５のフローチャートのみを実行すればよい。
【００６５】
まず、Ｓ５０１において、デバイス判断部は、第１のブリッジ２００が記憶装置接続モードにあるか否かを判断する。即ち、デバイス判断部は、第１のブリッジ２００に記憶装置（第１の記憶装置４００）が接続される場合、Ｓ５０２に進む。一方、デバイス判断部は、第１のブリッジ２００に記憶装置（第１の記憶装置４００）が接続されない場合、Ｓ５０４に進む。
【００６６】
次に、Ｓ５０２において、デバイス判断部は、ＳＡＴＡホストにＨＤＤ装置が接続されるか否かを判断する。例えば、デバイス判断部は、第１のブリッジ２００に接続可能なＨＤＤ装置の型番をＲＯＭ２０２に予め格納しておく。この場合、デバイス判断部は、図５のＳ４０１で発行したＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥで取得した型番（Ｗｏｒｄ  ２７〜４６）を、ＲＯＭ２０２内に予め格納した型番と比較することで、第１の記憶装置４００がＨＤＤ装置か否かを判断できる。
【００６７】
また、デバイス判断部は、例えば、ＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥのメディア回転レート（Ｗｏｒｄ  ２１７）に基づいて、第１のブリッジ２００に接続される記憶装置がＨＤＤ装置であるか否かを判断できる。例えば、デバイス判断部は、当該メディア回転レート（Ｗｏｒｄ  ２１７）がＮｏｎ−ｒｏｔａｔｉｎｇ  ｍｅｄｉａ（０ｘ０００１）以外の場合、第１のブリッジ２００に接続される記憶装置がＨＤＤ装置であると判断できる。
【００６８】
但し、第１のブリッジ２００に接続される記憶装置がＨＤＤ装置であるか否かの判断は、これに限定されるものではなく、種々の方法を採用することができる。
【００６９】
Ｓ５０２において、デバイス判断部は、第１のブリッジ２００に接続される記憶装置がＨＤＤ装置であると判断した場合、Ｓ５０６に進む。一方、デバイス判断部は、第１のブリッジ２００に接続される記憶装置がＨＤＤ装置でないと判断した場合、Ｓ５０３に進む。
【００７０】
次に、Ｓ５０３において、デバイス判断部は、ＳＡＴＡホストにＳＳＤ装置が接続されるか否かを判断する。第１のブリッジ２００に接続される記憶装置がＳＳＤ装置であるか否かの判断は、第１のブリッジ２００に接続される記憶装置がＨＤＤ装置であるか否かの判断と同様に行うことができる。
【００７１】
Ｓ５０３において、デバイス判断部は、第１のブリッジ２００に接続される記憶装置がＳＳＤ装置であると判断した場合、Ｓ５０５に進む。一方、デバイス判断部は、第１のブリッジ２００に接続される記憶装置がＳＳＤ装置でないと判断した場合、即ち、第１のブリッジ２００に接続される記憶装置が未知の記憶装置である場合、Ｓ５０４に進む。
【００７２】
以上の処理により、デバイス判断部は、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６の各々について、未接続モード、ＳＳＤ接続モード、及びＨＤＤ接続モードを確認できる。
【００７３】
未接続モードの場合、ＣＰＵ２０１は、例えば、第１のブリッジ２００が未接続モードにあることを把握し続けるため、例えば、未接続モードにあることを示す２ビットデータ“００”をＲＯＭ２０２又はＲＡＭ２０３に記憶する。また、ＣＰＵ２０１は、第１のブリッジ２００が未接続モードにあることをメインコントローラ１００に通知する。この通知は、例えば、ＳＡＴＡ規格のＲｅｇＤＨなどを用い、ＳＡＴＡ  Ｉ／Ｆ２０４を経由して行うことができる（Ｓ５０４）。
【００７４】
ＳＳＤ接続モードの場合、ＣＰＵ２０１は、例えば、第１のブリッジ２００がＳＳＤ接続モードにあることを把握し続けるため、例えば、ＳＳＤ接続モードにあることを示す２ビットデータ“１１”をＲＯＭ２０２又はＲＡＭ２０３に記憶する。また、ＣＰＵ２０１は、第１のブリッジ２００がＳＳＤ接続モードにあることをメインコントローラ１００に通知する。この通知は、例えば、ＳＡＴＡ規格のＲｅｇＤＨなどを用い、ＳＡＴＡ  Ｉ／Ｆ２０４を経由して行うことができる（Ｓ５０５）。
【００７５】
ＨＤＤ接続モードの場合、ＣＰＵ２０１は、例えば、第１のブリッジ２００がＨＤＤ接続モードにあることを把握し続けるため、例えば、ＨＤＤ接続モードにあることを示す２ビットデータ“０１”をＲＯＭ２０２又はＲＡＭ２０３に記憶する。また、ＣＰＵ２０１は、第１のブリッジ２００がＨＤＤ接続モードにあることをメインコントローラ１００に通知する。この通知は、例えば、ＳＡＴＡ規格のＲｅｇＤＨなどを用い、ＳＡＴＡ  Ｉ／Ｆ２０４を経由して行うことができる（Ｓ５０６）。
【００７６】
・  第２のブリッジ３００の動作
第２のブリッジ３００においても、第１のブリッジ２００と同様に、ＣＰＵ１００１内のデバイス判断部により、図５及び図６のフローチャートが実行される。
【００７７】
まず、Ｓ４０１〜Ｓ４０３において、デバイス判断部は、第２のブリッジ３００にＳＡＴＡデバイスが接続されるか否か、及び第２のブリッジ３００にＳＡＴＡデバイスが接続される場合には、当該ＳＡＴＡデバイスの種類が何であるかを判断する。
【００７８】
まず、Ｓ４０１において、デバイス判断部は、ＳＡＴＡホストにＳＡＴＡデバイスが接続されるか否かを判断する。ＳＡＴＡホストにＳＡＴＡデバイスが接続されない場合、Ｓ４０４に進む。一方、ＳＡＴＡホストにＳＡＴＡデバイスが接続される場合、Ｓ４０２に進む。尚、Ｓ４０１は、第１のブリッジ２００の場合と同様に、省略しても構わない。
【００７９】
次に、Ｓ４０２において、デバイス判断部は、ＳＡＴＡホストにブリッジが接続されるか否かを判断する。ＳＡＴＡホストにブリッジが接続されない場合、Ｓ４０３に進む。一方、ＳＡＴＡホストにブリッジが接続される場合、Ｓ４０６に進む。
【００８０】
次に、Ｓ４０３において、デバイス判断部は、ＳＡＴＡホストに記憶装置が接続されるか否かを判断する。ＳＡＴＡホストに記憶装置が接続されない場合、Ｓ４０４に進む。一方、ＳＡＴＡホストに記憶装置が接続される場合、Ｓ４０５に進む。
【００８１】
以上の処理により、デバイス判断部は、ＳＡＴＡ  Ｉ／Ｆ１００５、１００６の各々について、ＳＡＴＡデバイスの接続無し、ブリッジの接続有り、及び記憶装置（第２及び第３の記憶装置４０１、４０２）の接続有りの３つの状態を確認できる。但し、第１のブリッジ２００の場合と同様に、ＳＡＴＡデバイスの接続無しは、未知のＳＡＴＡデバイスが接続される場合を含む。また、デバイス判断部は、この３つの状態に、ＳＡＴＡデバイスの探索前（本フローチャートの実行前）という状態を加え、合計４つの状態（４段階）で、ＳＡＴＡ  Ｉ／Ｆ１００５、１００６を管理してもよい。
【００８２】
そして、ＣＰＵ１００１は、第２のブリッジ３００が未接続モードにあることを把握し続けるため、例えば、未接続モードにあることを示す２ビットデータ“００”をＲＯＭ１００２又はＲＡＭ１００３に記憶する。また、ＣＰＵ１００１は、第２のブリッジ３００が未接続モードにあることをメインコントローラ１００に通知する（Ｓ４０４）。
【００８３】
また、ＣＰＵ１００１は、第２のブリッジ３００が記憶装置接続モードにあることを把握し続けるため、例えば、記憶装置接続モードにあることを示す２ビットデータ“０１”をＲＯＭ１００２又はＲＡＭ１００３に記憶する。また、ＣＰＵ１００１は、第２のブリッジ３００が記憶装置接続モードにあることをメインコントローラ１００に通知する（Ｓ４０５）。
【００８４】
さらに、ＣＰＵ１００１は、第２のブリッジ３００がブリッジ接続モードにあることを把握し続けるため、例えば、ブリッジ接続モードにあることを示す２ビットデータ“１０”をＲＯＭ１００２又はＲＡＭ１００３に記憶する。また、ＣＰＵ１００１は、第２のブリッジ３００がブリッジ接続モードにあることをメインコントローラ１００に通知する（Ｓ４０６）。
【００８５】
図５のフローチャートにおいて、第２のブリッジ３００が記憶装置接続モードにあると判断された場合（Ｓ４０５）、第１のブリッジ２００の場合と同様に、続けて、図６のフローチャートを実行してもよい。
【００８６】
まず、Ｓ５０１において、デバイス判断部は、第２のブリッジ３００が記憶装置接続モードにあるか否かを判断する。即ち、デバイス判断部は、第２のブリッジ３００に記憶装置（第２及び第３の記憶装置４０１，４０２）が接続される場合、Ｓ５０２に進む。一方、デバイス判断部は、第２のブリッジ３００に記憶装置が接続されない場合、Ｓ５０４に進む。
【００８７】
次に、Ｓ５０２において、デバイス判断部は、ＳＡＴＡホストにＨＤＤ装置が接続されるか否かを判断する。デバイス判断部は、第２のブリッジ３００に接続される記憶装置がＨＤＤ装置であると判断した場合、Ｓ５０６に進む。一方、デバイス判断部は、第２のブリッジ３００に接続される記憶装置がＨＤＤ装置でないと判断した場合、Ｓ５０３に進む。
【００８８】
次に、Ｓ５０３において、デバイス判断部は、ＳＡＴＡホストにＳＳＤ装置が接続されるか否かを判断する。デバイス判断部は、第２のブリッジ３００に接続される記憶装置がＳＳＤ装置であると判断した場合、Ｓ５０５に進む。一方、デバイス判断部は、第２のブリッジ３００に接続される記憶装置がＳＳＤ装置でないと判断した場合、即ち、第２のブリッジ３００に接続される記憶装置が未知の記憶装置である場合、Ｓ５０４に進む。
【００８９】
以上の処理により、デバイス判断部は、ＳＡＴＡ  Ｉ／Ｆ１００５、１００６の各々について、未接続モード、ＳＳＤ接続モード、及びＨＤＤ接続モードを確認できる。
【００９０】
未接続モードの場合、ＣＰＵ１００１は、第２のブリッジ３００が未接続モードにあることを把握し続けるため、例えば、未接続モードにあることを示す２ビットデータ“００”をＲＯＭ１００２又はＲＡＭ１００３に記憶する。また、ＣＰＵ１００１は、第２のブリッジ３００が未接続モードにあることをメインコントローラ１００に通知する（Ｓ５０４）。
【００９１】
ＳＳＤ接続モードの場合、ＣＰＵ１００１は、第２のブリッジ３００がＳＳＤ接続モードにあることを把握し続けるため、例えば、ＳＳＤ接続モードにあることを示す２ビットデータ“１１”をＲＯＭ１００２又はＲＡＭ１００３に記憶する。また、ＣＰＵ１００１は、第２のブリッジ３００がＳＳＤ接続モードにあることをメインコントローラ１００に通知する（Ｓ５０５）。
【００９２】
ＨＤＤ接続モードの場合、ＣＰＵ１００１は、第２のブリッジ３００がＨＤＤ接続モードにあることを把握し続けるため、例えば、ＨＤＤ接続モードにあることを示す２ビットデータ“０１”をＲＯＭ１００２又はＲＡＭ１００３に記憶する。また、ＣＰＵ１００１は、第２のブリッジ３００がＨＤＤ接続モードにあることをメインコントローラ１００に通知する（Ｓ５０６）。
【００９３】
図７は、ＣＰＵ２０１、１００１内のコマンド処理部の動作を示す。
このフローチャートは、ＣＰＵ２０１、１００１上で動作するプログラムにより実行され、当該プログラムは、ＲＡＭ２０３、１００３、ＲＯＭ２０２、１００２、又は、第１乃至第３の記憶装置４００〜４０２のいずれかに記憶される。
【００９４】
また、本フローチャートは、第１及び第２のブリッジ２００、３００が初期化されるとき、メインコントローラ１００がＳＡＴＡデバイスにアクセスするときなど、上述の図５及び図６のフローチャートに続けて実行することが望ましい。但し、本フローチャートは、これに限定されるものではなく、例えば、上述の図５及び図６のフローチャートに並行して、又は当該フローチャートの実行後、一定期間を空けて実行してもよい。
【００９５】
・  第１のブリッジ２００の動作
まず、Ｓ６０１において、コマンド処理部は、メインコントローラ１００からのコマンドを受信したか否かを判断する。メインコントローラ１００からコマンドを受信していない場合、当該コマンドを受信するまで、Ｓ６０１を繰り返す。当該コマンドを受信したか否かの確認は、一定期間毎に行うのが望ましい。
【００９６】
一方、メインコントローラ１００からコマンドを受信した場合、Ｓ６０２に進む。Ｓ６０２において、コマンド処理部は、Ｓ６０１で受信したコマンドが拡張ＡＴＡコマンドであるか否かを判断する。当該受信したコマンドが拡張ＡＴＡコマンドでない場合、即ち標準ＡＴＡコマンドである場合、又は当該受信したコマンドが拡張ＡＴＡコマンドであるが実行不可能な場合、Ｓ６０９に進む。当該受信したコマンドが拡張ＡＴＡコマンドであり、かつ実行可能な場合、Ｓ６０３に進む。
【００９７】
Ｓ６０３において、コマンド処理部は、Ｓ６０１で受信した拡張ＡＴＡコマンドが第１のブリッジ２００で実行可能であり、かつ第１のブリッジ２００の内部にアクセスするコマンドであるか否かを判断する。当該拡張ＡＴＡコマンドが第１のブリッジ２００で実行可能でないか、又は第１のブリッジ２００の内部にアクセスするコマンドでない場合、Ｓ６０４に進む。当該拡張ＡＴＡコマンドが第１のブリッジ２００で実行可能であり、かつ第１のブリッジ２００の内部にアクセスするコマンドである場合、Ｓ６０６に進む。
【００９８】
Ｓ６０４において、コマンド処理部は、Ｓ６０１で受信した拡張ＡＴＡコマンドが第１の記憶装置４００にアクセスするコマンドであるか否かを判断する。当該拡張ＡＴＡコマンドが第１の記憶装置４００にアクセスするコマンドでない場合、Ｓ６０５に進む。当該拡張ＡＴＡコマンドが第１の記憶装置４００にアクセスするコマンドである場合、即ち第１の記憶装置４００で実行不可能なコマンドである場合、Ｓ６０７に進む。
【００９９】
Ｓ６０５において、コマンド処理部は、Ｓ６０１で受信した拡張ＡＴＡコマンドがＳＡＴＡ  Ｉ／Ｆ２０６に接続される第２のブリッジ３００にアクセスするコマンドであるか否かを判断する。当該拡張ＡＴＡコマンドが第２のブリッジ３００にアクセスするコマンドでない場合、又は当該拡張ＡＴＡコマンドが第２のブリッジ３００で実行可能でない場合、Ｓ６０７に進む。当該拡張ＡＴＡコマンドが第２のブリッジ３００にアクセスするコマンドであり、かつ第２のブリッジ３００で実行可能である場合、Ｓ６０８に進む。
【０１００】
Ｓ６０６において、コマンド処理部は、Ｓ６０１で受信した拡張ＡＴＡコマンドを第１のブリッジ２００の内部で処理する。即ち、ＣＰＵ２０１は、当該拡張ＡＴＡコマンドを解釈し、ＳＡＴＡ  Ｉ／Ｆ２０４、２０５、２０６のレジスタに対してデータの読み出し／書き込みを行う、又は第１のブリッジ２００を認証するなどの動作を行う。
【０１０１】
Ｓ６０７は、Ｓ６０１で受信した拡張ＡＴＡコマンドが第１及び第２のブリッジ２００、３００で処理できず、かつ第１乃至第３の記憶装置４００、４０１、４０２でも処理できない場合に行われるステップである。即ち、Ｓ６０７において、コマンド処理部は、実行不可能な拡張ＡＴＡコマンドを受信すると、当該拡張ＡＴＡコマンドをマスクする（エラー処理）。従って、ＣＰＵ２０１は、第２のブリッジ３００又は第１の記憶装置４００に当該拡張ＡＴＡコマンドを送信せず、メインコントローラ１００にアボートエラーを通知する。
【０１０２】
尚、Ｓ６０１で受信した拡張ＡＴＡコマンドが実行可能か又は実行不可能かは、例えば、ＲＯＭ２０２又はＲＡＭ２０３内に予め記憶された実行可能なコマンドのリストに基づいて判断される。これについては後述する。
【０１０３】
Ｓ６０８において、コマンド処理部は、Ｓ６０１で受信した拡張ＡＴＡコマンドをＳＡＴＡ  Ｉ／Ｆ２０６経由で、第２のブリッジ３００に送信する。また、Ｓ６０９において、コマンド処理部は、Ｓ６０１で受信した標準ＡＴＡコマンドをＳＡＴＡ  Ｉ／Ｆ２０５、２０６経由で、第１の記憶装置４００又は第２のブリッジ３００に送信する。
【０１０４】
・  第２のブリッジ３００の動作
第２のブリッジ３００においても、第１のブリッジ２００と同様に、ＣＰＵ１００１内のコマンド処理部により、図７のフローチャートが実行される。
【０１０５】
まず、Ｓ６０１において、コマンド処理部は、メインコントローラ１００から、第１のブリッジ２００経由で、コマンドを受信したか否かを判断する。メインコントローラ１００からコマンドを受信していない場合、当該コマンドを受信するまで、Ｓ６０１を繰り返す。当該コマンドを受信したか否かの確認は、第１のブリッジ２００と同様に、一定期間毎に行うのが望ましい。
【０１０６】
一方、メインコントローラ１００からコマンドを受信した場合、Ｓ６０２に進む。Ｓ６０２において、コマンド処理部は、Ｓ６０１で受信したコマンドが拡張ＡＴＡコマンドであるか否かを判断する。当該受信したコマンドが拡張ＡＴＡコマンドでない場合、又は当該受信したコマンドが拡張ＡＴＡコマンドであるが実行不可能な場合、Ｓ６０９に進む。当該受信したコマンドが拡張ＡＴＡコマンドであり、かつ実行可能な場合、Ｓ６０３に進む。
【０１０７】
Ｓ６０３において、コマンド処理部は、Ｓ６０１で受信した拡張ＡＴＡコマンドが第２のブリッジ３００で実行可能であり、かつ第２のブリッジ３００の内部にアクセスするコマンドであるか否かを判断する。当該拡張ＡＴＡコマンドが第２のブリッジ３００で実行可能でないか、又は第２のブリッジ３００の内部にアクセスするコマンドでない場合、Ｓ６０４に進む。当該拡張ＡＴＡコマンドが第２のブリッジ３００で実行可能であり、かつ第２のブリッジ３００の内部にアクセスするコマンドである場合、Ｓ６０６に進む。
【０１０８】
Ｓ６０４において、コマンド処理部は、Ｓ６０１で受信した拡張ＡＴＡコマンドが第２又は第３の記憶装置４０１、４０２にアクセスするコマンドであるか否かを判断する。当該拡張ＡＴＡコマンドが第２又は第３の記憶装置４０１、４０２にアクセスするコマンドでない場合、Ｓ６０５に進む。当該拡張ＡＴＡコマンドが第２及び第３の記憶装置４０１、４０２にアクセスするコマンドである場合、即ち第２及び第３の記憶装置４０１、４０２で実行不可能なコマンドである場合、Ｓ６０７に進む。
【０１０９】
Ｓ６０５において、コマンド処理部は、Ｓ６０１で受信した拡張ＡＴＡコマンドが第２のブリッジ３００のＳＡＴＡ  Ｉ／Ｆ（図示せず）に接続される他のブリッジにアクセスするコマンドであるか否かを判断する。当該拡張ＡＴＡコマンドが当該他のブリッジにアクセスするコマンドでない場合、又は当該拡張ＡＴＡコマンドが当該他のブリッジで実行可能でない場合、Ｓ６０７に進む。当該拡張ＡＴＡコマンドが当該他のブリッジにアクセスするコマンドであり、かつ当該他のブリッジで実行可能である場合、Ｓ６０８に進む。
【０１１０】
Ｓ６０６において、コマンド処理部は、Ｓ６０１で受信した拡張ＡＴＡコマンドを第２のブリッジ３００の内部で処理する。即ち、ＣＰＵ１００１は、当該拡張ＡＴＡコマンドを解釈し、ＳＡＴＡ  Ｉ／Ｆ１００４、１００５、１００６のレジスタに対してデータの読み出し／書き込みを行う、又は第２のブリッジ３００を認証するなどの動作を行う。
【０１１１】
Ｓ６０７は、Ｓ６０１で受信した拡張ＡＴＡコマンドが第２のブリッジ３００及び当該他のブリッジで処理できず、かつ第２及び第３の記憶装置４０１、４０２でも処理できない場合に行われるステップである。即ち、Ｓ６０７において、コマンド処理部は、実行不可能な拡張ＡＴＡコマンドを受信すると、当該拡張ＡＴＡコマンドをマスクする（エラー処理）。従って、ＣＰＵ１００１は、当該他のブリッジ、又は第２及び第３の記憶装置４０１、４０２に当該拡張ＡＴＡコマンドを送信せず、第１のブリッジ２００経由で、メインコントローラ１００にアボートエラーを通知する。
【０１１２】
尚、Ｓ６０１で受信した拡張ＡＴＡコマンドが実行可能か又は実行不可能かは、第１のブリッジ２００と同様に、例えば、ＲＯＭ１００２又はＲＡＭ１００３内に予め記憶された実行可能なコマンドのリストに基づいて判断される。これについては後述する。
【０１１３】
Ｓ６０８において、コマンド処理部は、Ｓ６０１で受信した拡張ＡＴＡコマンドをＳＡＴＡ  Ｉ／Ｆ（図示せず）経由で、当該他のブリッジに送信する。また、Ｓ６０９において、コマンド処理部は、Ｓ６０１で受信した標準ＡＴＡコマンドをＳＡＴＡ  Ｉ／Ｆ１００５、１００６経由で、第２又は第３の記憶装置４０１、４０２に送信する。
【０１１４】
図８は、コマンド処理時の状態遷移図を示す。
第１及び第２のブリッジ２００、３００の動作モードは、大きく分けて「通常ステート」と、「バイパスステート」と、「内部動作ステート」と、を備える。第１及び第２のブリッジ２００、３００をいずれの動作モードにて動作させるかは、ＣＰＵ２０１、１００１がＲＯＭ２０２、１００２、又はＲＡＭ２０３、１００３内に記憶されたプログラムを実行することにより判断する。
【０１１５】
第１及び第２のブリッジ２００、３００に電源が投入されると、第１及び第２のブリッジ２００、３００は、まず、通常ステートＳ７０２に設定される。通常ステートＳ７０２は、第２のブリッジ３００、又は第１乃至第３の記憶装置４００、４０１、４０２に対するアクセスを行うステートである。
【０１１６】
ＳＡＴＡコントローラ１１０からのコマンドに対して、第１及び第２のブリッジ２００、３００は、自らが当該コマンドを実行可能か否か、及び自らに接続される第１乃至第３の記憶装置４００、４０１、４０２が当該コマンドを実行可能か、を判断する。例えば、第１及び第２のブリッジ２００、３００は、後述するように、図９及び図１０で指定されるコマンド以外は、実行不可能なコマンドとして、第１乃至第３の記憶装置４００、４０１、４０２に送信しない。
【０１１７】
ＳＡＴＡコントローラ１１０からのコマンドが第１及び第２のブリッジ２００、３００、又は第１乃至第３の記憶装置４００、４０１、４０２にて実行可能であるか否かの判断は、例えば、ＲＡＭ２０３、１００３内に記憶された参照データに基づき行われる。即ち、第１及び第２のブリッジ２００、３００は、ＳＡＴＡコントローラ１１０からのコマンドをＳＡＴＡ  Ｉ／Ｆ２０４、１００４にて受信し、かつＣＰＵ２０１、１００１にて認識する。ＣＰＵ２０１、１００１は、当該コマンドをＲＡＭ２０３、１００３内の参照データと比較することで、当該判断を行う。
【０１１８】
ＣＰＵ２０１、１００１は、当該コマンドを実行可能であると判断したら、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６を設定し、かつ第１乃至第３の記憶装置４００、４０１、４０２に当該コマンドを送信する。
【０１１９】
第１及び第２のブリッジ２００、３００は、レジスタアクセスコマンド（「ＰＩＯ  ＲＥＡＤ」タイプのコマンド）を受け取ると、ＰＩＯデータ転送を開始し、通常ステートＳ７０２からバイパスステートＳ７０３に移行する。そして、第１及び第２のブリッジ２００、３００は、メインコントローラ１００へのＰＩＯデータ送信がを完了した後、バイパスステートＳ７０３から通常ステートＳ７０２に移行する。
【０１２０】
また、第１及び第２のブリッジ２００、３００は、データの読み出し／書き込みを示すＤＭＡ転送タイプのコマンドを受け取ると、ＤＭＡデータ転送を開始し、通常ステートＳ７０２からバイパスステートＳ７０３に移行する。そして、第１及び第２のブリッジ２００、３００は、メインコントローラ１００へのＤＭＡデータ転送が完了した後、バイパスステートＳ７０３から通常ステートＳ７０２に移行する。
【０１２１】
図９は、拡張コマンドの例を示す。
ここに示す拡張コマンドは、第１及び第２のブリッジ２００、３００が実行可能な拡張コマンドの例である。即ち、ここに示す拡張コマンドは、通常のＨＤＤアクセスで使用されるＡＴＡコマンドとは異なり、第１及び第２のブリッジ２００、３００のみが実行可能なコマンドである。これらのコマンドリストは、実行可能な拡張コマンドとして、ＲＡＭ２０３、１００３、又はＲＯＭ２０２、１００２内に記憶される。
【０１２２】
コマンド名８０１は、実行可能なコマンドの名称を示す。タイプ８０２は、アクセスの種類を示す。例えば、「Ｎｏｎ  Ｄａｔａ」タイプは、データ転送を伴わないアクセスを意味し、例えば、ステータスの確認／遮断モードから通常モードへの移行などで使用される。「ＰＩＯ  ｄａｔａ−ｏｕｔ」タイプ、及び「ＰＩＯ  ｄａｔａ−ｉｎ」タイプは、データの読み出し／書き込みを伴うアクセスを意味し、例えば、バージョン情報の取得、後述する認証のチャレンジなどで使用される。
【０１２３】
以下、拡張コマンドの例を説明する。
８０３は、ＳＥＬＥＣＴ  ＰＯＲＴコマンドであり、ＳＡＴＡ  Ｉ／Ｆ２０５及びＳＡＴＡ  ＩＦ２０６のいずれか一方を指定するコマンドである。即ち、ＳＥＬＥＣＴ  ＰＯＲＴコマンドは、対象となるコマンド名とＳＡＴＡ  Ｉ／Ｆとを対応付ける。
【０１２４】
例えば、ＳＥＬＥＣＴ  ＰＯＲＴコマンドでＳＡＴＡ  Ｉ／Ｆ２０５を指定した場合を考える。この場合、その指定直後に、拡張コマンドがメインコントローラ１００から第１又は第２のブリッジ２００、３００に発行されると、第１又は第２のブリッジ２００、３００は、ＳＡＴＡ  Ｉ／Ｆ２０５に対してコマンドを発行する。一方、ＳＥＬＥＣＴ  ＰＯＲＴコマンドが発行されていない場合、ミラーリングのホスト側となるＳＡＴＡ  Ｉ／Ｆ２０５、２０６にコマンドを発行する。
【０１２５】
但し、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６を指定する方法は、上述のようなコマンドを用いる方法に限定されるものではない。即ち、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６を指定する方法は、それ以外の方法、例えば、ＳＡＴＡのＦＩＳ（Ｆｒａｍｅ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｓｔｒｕｃｔｕｒｅ）のＰＭ  Ｐｏｒｔビットを用いる方法などを使用できる。
【０１２６】
８０４は、ＴＯ  ＣＡＳＣＡＤＥコマンドであり、後段のブリッジに対する拡張コマンドであることを示す。例えば、第１のブリッジ２００は、ＴＯ  ＣＡＳＣＡＤＥコマンドを受信すると、そのコマンドの次のコマンドの実行を行わず、当該次のコマンドを第２のブリッジ３００に送信する。これは、判断の対象となるコマンドのうち、その直前にＴＯ  ＣＡＳＣＡＤＥコマンドが存在しないコマンドについては、Ｓ６０３でＹｅｓと判断され、第１のブリッジ２００の内部で実行されることを意味する。
【０１２７】
図１０は、標準コマンドの例を示す。
メインコントローラ１００から第１乃至第３の記憶装置４００，４０１、４０２に転送可能なコマンドは、例えば、図１０に示す標準コマンドに限定される。ここに示すコマンドのリストは、ＡＴＡコマンドとして、ＲＡＭ２０３、１００３、又はＲＯＭ２０２、１００２、及び、ＲＯＭ１０２又はＤＲＡＭ１０３内に記憶される。
【０１２８】
コマンド名９０１は、実行可能なコマンドの名称を示す。タイプ９０２は、アクセスの種類を示す。「Ｎｏｎ−Ｄａｔａ」転送タイプは、データ転送を伴わないアクセスを意味する。「ＰＩＯ  ｄａｔａ−ｉｎ」転送タイプは、データの読み出しを伴うアクセスを意味する。「ＤＭＡ  ｄａｔａ−ｉｎ」及び「ＤＭＡ  ｄａｔａ−ｏｕｔ」転送タイプは、ＤＭＡを用いたデータの読み出し／書き込みを伴うアクセスを意味する。
【０１２９】
尚、「ＰＩＯ  ｄａｔａ−ｉｎ」転送タイプは、メインコントローラ１００内のＤＲＡＭ１０３と第１乃至第３の記憶装置４００、４０１、４０２との間のデータ転送を、メインコントローラ１００内のＣＰＵ１０１の管理の下で行う。一方、「ＤＭＡ  ｄａｔａ−ｉｎ」及び「ＤＭＡ  ｄａｔａ−ｏｕｔ」転送タイプは、これらの間のデータ転送を、メインコントローラ１００内のＣＰＵ１０１を介さずに行う。
【０１３０】
ここで、図９及び図１０を、図７のフローチャート及び図８の状態遷移図に関連付けて説明する。メインコントローラ１００からコマンドが発行されると、コマンド処理部は、第１及び第２のブリッジ２００、３００の内部でコマンドを一旦保持する（Ｓ６０１）。また、コマンド処理部は、当該コマンドが、第２のブリッジ３００、又は第１乃至第３の記憶装置４００、４０１、４０２にて実行可能であるか否かを判断する（Ｓ６０４、Ｓ６０５）。
【０１３１】
そして、コマンド処理部は、第２のブリッジ３００にて実行可能なコマンド（図９に示すコマンド）を第２のブリッジ３００に送信する（Ｓ６０８）。また、コマンド処理部は、第１乃至第３の記憶装置４００、４０１、４０２にて実行可能なコマンド（図１０に示すコマンド）を第２のブリッジ３００又は第１の記憶装置４００に送信する（Ｓ６０９）。
【０１３２】
ここで、実行不可能であると判断されたコマンド（図９及び図１０に示すコマンド以外のコマンド）は、エラーと判断される。即ち、コマンド処理部は、当該コマンドを第２のブリッジ３００又は第１の記憶装置４００に送信することなく、アボートエラーをメインコントローラ１００に通知する（Ｓ６０７）。尚、アボートエラーは、例えば、ＳＡＴＡ  Ｉ／Ｆ２０４のＡＴＡタスクファイルレジスタのＳｔａｔｕｓレジスタのＥＲＲビット＝１、かつＥｒｒｏｒレジスタのＡＢＲＴビット＝１で、メインコントローラ１００に通知される。
【０１３３】
（第２の実施例）
上述の第１の実施例は、第１及び第２のブリッジ２００、３００がＳＳＤ制御機能、及びミラーリング機能を有する場合を例に説明した。しかし、本発明は、これに限定されるものではなく、第１及び第２のブリッジ２００、３００に他の機能を追加してもよいことは言うまでもない。そこで、第２の実施例は、第１及び第２のブリッジ２００、３００が暗号化機能及び復号化機能を有する場合を例に説明する。
【０１３４】
図１１は、第１のブリッジの詳細構成図を示す。
ＣＰＵ２０１は、認証の制御、送受信データの暗号化及び復号化の制御、第１のブリッジ２００のシステム制御、演算処理、ＡＴＡコマンド処理などを行い、かつ第１乃至第３の記憶装置４００、４０１、４０２に対するコマンド処理などを行う。
【０１３５】
ＲＯＭ２０２は、ＣＰＵ２０１の起動プログラム、暗号化・復号化プログラム、暗号化及び復号化を含む各種モードの設定値のデータ、暗号鍵情報などを記憶する。ＲＡＭ２０３は、ＣＰＵ２０１で実行する制御プログラムを記憶する。また、ＲＡＭ２０３は、暗号化及び復号化に関する処理を含む一時的なワークエリアとしても使用される。尚、ＳＡＴＡ  Ｉ／Ｆ２０４、２０５、２０６は、第１の実施例と同様なので、ここでの詳細な説明を省略する。
【０１３６】
２０７は、暗号器であり、認証後、ＳＡＴＡ  Ｉ／Ｆ２０４により受信した入力データを暗号化し、かつ暗号化されたデータ（暗号データ）を生成する。暗号データは、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６に転送される。２０８は、復号器であり、認証後、ＳＡＴＡ  Ｉ／Ｆ２０５、２０６により受信した暗号データを復号化し、かつ復号化されたデータ（復号データ）を生成する。復号データは、ＳＡＴＡ  Ｉ／Ｆ２０４に転送される。２０９は、認証機能であり、メインコントローラ１００と第１のブリッジ２００との間で認証を行う際に使用される。
【０１３７】
図１２は、第２のブリッジの詳細構成図を示す。
以下では、第２のブリッジ３００の要素が第１のブリッジ２００の要素と同じであることを前提とするが、第１の実施例の場合と同様に、これに限定されるものではない。第２のブリッジ３００は、第１のブリッジ２００内に存在しない要素を含んでもよいし、逆に、第１のブリッジ２００は、第２のブリッジ３００内に存在しない要素を含んでもよい。
【０１３８】
ＣＰＵ１４０１は、認証の制御、送受信データの暗号化及び復号化の制御、第２のブリッジ３００のシステム制御、演算処理、ＡＴＡコマンド処理などを行い、かつ第２及び第３の記憶装置４０１、４０２に対するコマンド処理などを行う。
【０１３９】
ＲＯＭ１４０２は、ＣＰＵ１４０１の起動プログラム、暗号化・復号化プログラム、暗号化及び復号化を含む各種モードの設定値のデータ、暗号鍵情報などを記憶する。ＲＡＭ１４０３は、ＣＰＵ１４０１で実行する制御プログラムを記憶する。また、ＲＡＭ１４０３は、暗号化及び復号化に関する処理を含む一時的なワークエリアとしても使用される。尚、ＳＡＴＡ  Ｉ／Ｆ１４０４、１４０５、１４０６は、第１の実施例と同様なので、ここでの詳細な説明を省略する。
【０１４０】
１４０７は、暗号器であり、認証後、ＳＡＴＡ  Ｉ／Ｆ１４０４により受信した入力データを暗号化し、かつ暗号化されたデータ（暗号データ）を生成する。暗号データは、ＳＡＴＡ  Ｉ／Ｆ１４０５、１４０６に転送される。１４０８は、復号器であり、認証後、ＳＡＴＡ  Ｉ／Ｆ１４０５、１４０６により受信した暗号データを復号化し、かつ復号化されたデータ（復号データ）を生成する。復号データは、ＳＡＴＡ  Ｉ／Ｆ１４０４に転送される。１４０９は、認証機能であり、メインコントローラ１００と第２のブリッジ３００との間で認証を行う際に使用される。
【０１４１】
図１３は、ＣＰＵ２０１、１４０１内のコマンド処理部の動作を示す。
このフローチャートは、ＣＰＵ２０１、１４０１上で動作するプログラムにより実行され、当該プログラムは、ＲＡＭ２０３、１４０３、ＲＯＭ２０２、１４０２、又は、第１乃至第３の記憶装置４００〜４０２のいずれかに記憶される。
【０１４２】
また、本フローチャートは、第１及び第２のブリッジ２００、３００が初期化されるとき、メインコントローラ１００がＳＡＴＡデバイスにアクセスするときなど、上述の図５及び図６のフローチャートに続けて実行することが望ましい。但し、本フローチャートは、これに限定されるものではなく、例えば、上述の図５及び図６のフローチャートに並行して、又は当該フローチャートの実行後、一定期間を空けて実行してもよい。
【０１４３】
・  第１のブリッジ２００の動作
まず、Ｓ１２０１において、コマンド処理部は、メインコントローラ１００からのコマンドを受信したか否かを判断する。メインコントローラ１００からコマンドを受信していない場合、当該コマンドを受信するまで、Ｓ１２０１を繰り返す。当該コマンドを受信したか否かの確認は、一定期間毎に行うのが望ましい。
【０１４４】
一方、メインコントローラ１００からコマンドを受信した場合、Ｓ１２０２に進む。Ｓ１２０２において、コマンド処理部は、Ｓ１２０１で受信したコマンドが図１４のコマンドリストに記載されるか否かを判断する。尚、図１４のコマンドリストの詳細については、後述する。当該受信したコマンドが図１４のコマンドリストに記載されてない場合、即ち、実行可能なコマンドでない場合、Ｓ１２０７に進む。当該受信したコマンドが図１４のコマンドリストに記載される場合、即ち、実行可能なコマンドである場合、Ｓ１２０３に進む。
【０１４５】
Ｓ１２０３において、コマンド処理部は、Ｓ１２０１で受信したコマンドが第１のブリッジ２００の内部にアクセスするコマンドであるか否かを判断する。当該コマンドが第１のブリッジ２００の内部にアクセスするコマンドでない場合、Ｓ１２０４に進む。当該コマンドが第１のブリッジ２００の内部にアクセスするコマンドである場合、Ｓ１２０６に進む。
【０１４６】
Ｓ１２０４において、コマンド処理部は、Ｓ１２０１で受信したコマンドが第１の記憶装置４００にアクセスするコマンドであるか否かを判断する。当該コマンドが第１の記憶装置４００にアクセスするコマンドでない場合、Ｓ１２０５に進む。当該コマンドが第１の記憶装置４００にアクセスするコマンドである場合、Ｓ１２０９に進む。
【０１４７】
Ｓ１２０５において、コマンド処理部は、Ｓ１２０１で受信したコマンドがＳＡＴＡ  Ｉ／Ｆ２０６に接続される第２のブリッジ３００にアクセスするコマンドであるか否かを判断する。当該コマンドが第２のブリッジ３００にアクセスするコマンドでない場合、Ｓ１２０７に進む。当該コマンドが第２のブリッジ３００にアクセスするコマンドである場合、Ｓ１２０８に進む。
【０１４８】
Ｓ１２０６において、コマンド処理部は、Ｓ１２０１で受信したコマンドを第１のブリッジ２００の内部で処理する。即ち、ＣＰＵ２０１は、当該コマンドを解釈し、ＳＡＴＡ  Ｉ／Ｆ２０４、２０５、２０６のレジスタに対してデータの読み出し／書き込みを行う、又は第１のブリッジ２００を認証するなどの動作を行う。
【０１４９】
Ｓ１２０７は、Ｓ１２０１で受信したコマンドが第１及び第２のブリッジ２００、３００で処理できず、かつ第１乃至第３の記憶装置４００、４０１、４０２でも処理できない場合に行われるステップである。即ち、Ｓ１２０７において、コマンド処理部は、実行不可能なコマンドを受信すると、当該コマンドをマスクする（エラー処理）。従って、ＣＰＵ２０１は、第２のブリッジ３００又は第１の記憶装置４００に当該コマンドを送信せず、メインコントローラ１００にアボートエラーを通知する。
【０１５０】
Ｓ１２０８において、コマンド処理部は、Ｓ１２０１で受信したコマンドをＳＡＴＡ  Ｉ／Ｆ２０６経由で、第２のブリッジ３００に送信する。また、Ｓ１２０９において、コマンド処理部は、Ｓ１２０１で受信したコマンドをＳＡＴＡ  Ｉ／Ｆ２０５、２０６経由で、第１の記憶装置４００又は第２のブリッジ３００に送信する。
【０１５１】
・  第２のブリッジ３００の動作
第２のブリッジ３００においても、第１のブリッジ２００と同様に、ＣＰＵ１４０１内のコマンド処理部により、図１３のフローチャートが実行される。
【０１５２】
まず、Ｓ１２０１において、コマンド処理部は、メインコントローラ１００から、第１のブリッジ２００経由で、コマンドを受信したか否かを判断する。メインコントローラ１００からコマンドを受信していない場合、当該コマンドを受信するまで、Ｓ１２０１を繰り返す。当該コマンドを受信したか否かの確認は、第１のブリッジ２００と同様に、一定期間毎に行うのが望ましい。
【０１５３】
一方、メインコントローラ１００からコマンドを受信した場合、Ｓ１２０２に進む。Ｓ１２０２において、コマンド処理部は、Ｓ１２０１で受信したコマンドが図１４のコマンドリストに記載されるか否かを判断する。当該受信したコマンドが図１４のコマンドリストに記載されてない場合、即ち、実行可能なコマンドでない場合、Ｓ１２０７に進む。当該受信したコマンドが図１４のコマンドリストに記載される場合、即ち、実行可能なコマンドである場合、Ｓ１２０３に進む。
【０１５４】
Ｓ１２０３において、コマンド処理部は、Ｓ１２０１で受信したコマンドが第２のブリッジ３００の内部にアクセスするコマンドであるか否かを判断する。当該コマンドが第２のブリッジ３００の内部にアクセスするコマンドでない場合、Ｓ１２０４に進む。当該コマンドが第２のブリッジ３００の内部にアクセスするコマンドである場合、Ｓ１２０６に進む。
【０１５５】
Ｓ１２０４において、コマンド処理部は、Ｓ１２０１で受信したコマンドが第２又は第３の記憶装置４０１、４０２にアクセスするコマンドであるか否かを判断する。当該コマンドが第２又は第３の記憶装置４０１、４０２にアクセスするコマンドでない場合、Ｓ１２０５に進む。当該コマンドが第２及び第３の記憶装置４０１、４０２にアクセスするコマンドである場合、Ｓ１２０９に進む。
【０１５６】
Ｓ１２０５において、コマンド処理部は、Ｓ１２０１で受信したコマンドが第２のブリッジ３００のＳＡＴＡ  Ｉ／Ｆ（図示せず）に接続される他のブリッジにアクセスするコマンドであるか否かを判断する。当該コマンドが当該他のブリッジにアクセスするコマンドでない場合、Ｓ１２０７に進む。当該コマンドが当該他のブリッジにアクセスするコマンドである場合、Ｓ１２０８に進む。
【０１５７】
Ｓ１２０６において、コマンド処理部は、Ｓ１２０１で受信したコマンドを第２のブリッジ３００の内部で処理する。即ち、ＣＰＵ１４０１は、当該コマンドを解釈し、ＳＡＴＡ  Ｉ／Ｆ１４０４、１４０５、１４０６のレジスタに対してデータの読み出し／書き込みを行う、又は第２のブリッジ３００を認証するなどの動作を行う。
【０１５８】
Ｓ１２０７は、Ｓ１２０１で受信したコマンドが第２のブリッジ３００及び当該他のブリッジで処理できず、かつ第２及び第３の記憶装置４０１、４０２でも処理できない場合に行われるステップである。即ち、Ｓ１２０７において、コマンド処理部は、実行不可能なコマンドを受信すると、当該コマンドをマスクする（エラー処理）。従って、ＣＰＵ１４０１は、当該他のブリッジ、又は第２及び第３の記憶装置４０１、４０２に当該コマンドを送信せず、第１のブリッジ２００経由で、メインコントローラ１００にアボートエラーを通知する。
【０１５９】
Ｓ１２０８において、コマンド処理部は、Ｓ１２０１で受信したコマンドをＳＡＴＡ  Ｉ／Ｆ（図示せず）経由で、当該他のブリッジに送信する。また、Ｓ１２０９において、コマンド処理部は、Ｓ１２０１で受信したコマンドをＳＡＴＡ  Ｉ／Ｆ１４０５、１４０６経由で、第２又は第３の記憶装置４０１、４０２に送信する。
【０１６０】
図１４は、コマンドリストの例を示す。
ここに示すコマンドリストは、第１及び第２のブリッジ２００、３００、又は第１乃至第３の記憶装置４００，４０１、４０２で実行可能なコマンドのリストである。既に述べたように、同図のコマンドリストは、予めＲＡＭ２０３、ＲＯＭ２０２などに記憶される。そして、メインコントローラ１００からのコマンドが実行可能であるか否かの判断は、ＣＰＵ２０１、１４０１内のコマンド処理部が当該コマンドとコマンドリストとを比較することにより行われる。
【０１６１】
１３０１は、コマンド受信時の動作ステートである。１３０２は、コマンドの行先（処理先）がブリッジ内部であることを示す。例えば、第１のブリッジ２００が図１３のコマンドリストを備える場合、１３０２は、コマンドの行先（処理先）が第１のブリッジ２００であることを意味する。また、第２のブリッジ３００が図１３を用いる場合、コマンドの行先（処理先）が第２のブリッジ３００が図１３のコマンドリストを備える場合、１３０２は、コマンドの行先（処理先）が第２のブリッジ３００であることを意味する。
【０１６２】
１３０３は、コマンドの行先が、ＳＡＴＡ  Ｉ／Ｆ（ＳＡＴＡホスト）に接続されるデバイス、即ち、ＳＡＴＡホストの接続先であることを示す。例えば、第１のブリッジ２００が図１３のコマンドリストを備える場合、１３０３は、コマンドの行先（処理先）がＳＡＴＡ  ＩＦ２０５、２０６の接続先であることを意味する。また、第２のブリッジ３００が図１３を用いる場合、コマンドの行先（処理先）がＳＡＴＡ  ＩＦ１４０５、１４０６の接続先であることを意味する。
【０１６３】
尚、１３０３は、例えば、図５のＳ４０４、Ｓ４０５、及びＳ４０６において、デバイス判断部が認識かつ記憶したデバイスを示し、かつ図６のＳ５０４、Ｓ５０５、及びＳ５０６において、デバイス判断部が認識かつ記憶したデバイスを示す。
【０１６４】
コマンド処理部は、１３０１、１３０２、及び１３０３に基づき、ＳＡＴＡホスト（接続ポート）毎に、実行可能なコマンドを判断する。ここで、同図では、ＡＴＡコマンド（標準コマンド）と拡張コマンドの２つのリストを示すが、これに限定されるものではなく、どちらか一方のみを用いてリストを形成しても構わない。
【０１６５】
（比較例）
図１５は、比較例のストレージシステムの構成図を示す。
フラッシュメモリデバイスを備えるＳＳＤ（ソリッド・ステート・ドライブ）装置は、不揮発性記憶装置の代表格であるＨＤＤ（ハード・ディスク・ドライブ）装置と比較して、２倍以上の高速動作が可能である。しかし、ＳＳＤ装置は、データ書き換え回数に対する耐性が低いという特徴を有する。
【０１６６】
この比較例では、この問題を解消するため、情報処理装置、例えば、印刷装置を、ＨＤＤ装置とＳＳＤ装置の両方を搭載するハイブリッド構成とする。そして、印刷データの処理過程でのページ単位書き込みに必要なデータサイズが所定の閾値以下の場合に、ＨＤＤ装置を使用して当該データを記憶する。また、当該データサイズが所定の閾値を超える場合には、ＳＳＤ装置を使用して当該データを記憶する。即ち、ＨＤＤ装置の処理スピードで十分な処理は、ＨＤＤ装置を利用し、ＨＤＤ装置の処理スピードでは不十分な高速処理については、ＳＳＤ装置を利用する。これにより、ＳＳＤ装置の欠点であるデータ書き換え回数を実質的に減らし、ストレージシステム全体の寿命を延ばす。 
【０１６７】
図１５は、比較例のストレージシステムの構成図を示す。
このストレージシステムは、ＭＦＰ全体を制御するメインコントローラ１００と、データを記憶する第１及び第２の記憶装置４００、４０１と、これらの記憶装置に対してデータ送受信を実行するブリッジ２００´と、を備える。
【０１６８】
第１の記憶装置４００は、例えば、ＳＳＤ装置であり、第２の記憶装置４０１は、例えば、ＨＤＤ装置である。第１の記憶装置４００は、高速なアクセス速度が要求されるデータを記憶する。第２の記憶装置４０１は、高速なアクセス速度が要求されない、例えば、起動プログラム、ユーザデータなどを記憶する。このような構成の場合、アクセス速度が異なるこれら第１及び第２の記憶装置４００、４０１を用いてミラーリングを実質的に行えず、結果として、データの信頼性が確保できない問題が生じる。
【０１６９】
これに対し、第１及び第２の実施例で説明したストレージシステムによれば、図１に示すように、第１のブリッジ２００に第２のブリッジ３００をカスケード接続する。そして、高速なアクセス速度が要求されるデータは、第１のブリッジ２００に接続される第１の記憶装置４００内に記憶される。また、高速なアクセス速度が要求されないデータは、第２のブリッジ３００に接続される第２及び第３の記憶装置４０１、４０２内に記憶される。
【０１７０】
即ち、ミラーリングは、第２のブリッジ３００に接続される第２及び第３の記憶装置４０１、４０２を用いて行えるため、データの信頼性を向上できる。しかも、高速なアクセス速度が要求されるデータは、第１の記憶装置４００内に記憶可能なため、ミラーリング機能と高速なアクセス速度とを両立することができる。
【０１７１】
尚、比較例では、ブリッジ２００´は、拡張コマンドをＳＡＴＡ  Ｉ／Ｆに発行しないので、図１に示すように、複数のブリッジをカスケード接続できない。上述の第１及び第２の実施例では、第１のブリッジ２００が拡張コマンドをＳＡＴＡ  Ｉ／Ｆに発行する種々の工夫について提案する。従って、第１及び第２の実施例では、第１及び第２のブリッジ２００、３００をカスケード接続し、ミラーリング機能と高速なアクセス速度とを両立することができる。
【０１７２】
（その他の実施形態）
本発明は、記憶装置又は外部ブリッジ装置からコマンドを受信し、当該コマンドを記憶装置又は外部ブリッジ装置とは別のデバイスに対して自ブリッジ装置を介して転送するコマンド転送部を備える記憶制御システムに適用可能である。この場合、記憶制御システムは、転送先となる別のデバイスとして外部ブリッジ装置とは別のブリッジ装置が自ブリッジ装置に対して装着されているか否かを問い合わせるコマンドを発行するコマンド発行部を備える。そして、転送先となる別のデバイスとして別のブリッジ装置が自ブリッジ装置に装着されていない場合には、自ブリッジ装置は、上流のデバイス（記憶装置又は外部ブリッジ装置）から受信したコマンドを別のデバイスへに転送しない処理を行う。このような記憶制御システムにおいても、上述の実施形態と同様の効果を得ることができる。
【０１７３】
本発明は、上述の１つ以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム／装置に供給し、そのシステム／装置のコンピュータにおける１つ以上のプロセッサが該プログラムを実行する場合にも適用可能である。また、本発明は、上述の１つ以上の機能を所定の回路（例えば、ＡＳＩＣ）によって実現することも可能である。
【０１７４】
（むすび）
以上、説明したように、本発明によれば、ブリッジに記憶装置以外のデバイスを接続可能とすると共に、後段のデバイスの種類に応じて当該デバイスに送信可能なコマンドを変更することで、ミラーリング機能と高速なアクセス速度とを両立することができる。
【０１７５】
本発明は、上述の実施形態に限定されず、その要旨の範囲内で種々の変形及び変更が可能である。
【符号の説明】
【０１７６】
１００  メインコントローラ
１１０  ＳＡＴＡコントローラ
２００  第１のブリッジ
３００  第２のブリッジ
２０１  ＣＰＵ
４００  第１の記憶装置
４０１  第２の記憶装置
４０２  第３の記憶装置
【図１】
2019200709.tif 000003
【図２】
2019200709.tif 000004
【図３】
2019200709.tif 000005
【図４】
2019200709.tif 000006
【図５】
2019200709.tif 000007
【図６】
2019200709.tif 000008
【図７】
2019200709.tif 000009
【図８】
2019200709.tif 000010
【図９】
2019200709.tif 000011
【図１０】
2019200709.tif 000012
【図１１】
2019200709.tif 000013
【図１２】
2019200709.tif 000014
【図１３】
2019200709.tif 000015
【図１４】
2019200709.tif 000016
【図１５】
2019200709.tif 000017