(57)【要約】【課題】SATA規格に基づく通信制御において、デバイス側がアップデート用の専用ピンを有していないようなケースでも、後にベンダーユニークコマンドの追加が必要になった際に、ベンダーユニークコマンドを追加できる様にすることを目的とする。【解決手段】SATA規格に準拠してホストとデバイスとの間でデータ通信を行う情報処理システムであって、前記ホストは、未定義のコマンドの情報を書き込んだセットアップコマンドを、前記デバイスに送信し、前記デバイスは、前記SATA規格で用いるコマンドに関し、各コマンドを識別するコマンドコードと各コマンドの転送プロトコルの情報を記述したコマンドテーブルを有し、受け取った前記セットアップコマンドに従って、前記未定義のコマンドの情報を前記コマンドテーブルに書き込む、ことによって、前記未定義のコマンドを、前記ホスト及び前記デバイスとの間で使用可能にする、ことを特徴とする。【選択図】図７
2018022283.tif 000002
【特許請求の範囲】
【請求項１】
SATA規格に準拠してホストとデバイスとの間でデータ通信を行う情報処理システムであって、
前記ホストは、
未定義のコマンドの情報を書き込んだセットアップコマンドを、前記デバイスに送信し、
前記デバイスは、
前記SATA規格で用いるコマンドに関し、各コマンドを識別するコマンドコードと各コマンドの転送プロトコルの情報を記述したコマンドテーブルを有し、
受け取った前記セットアップコマンドに従って、前記未定義のコマンドの情報を前記コマンドテーブルに書き込む、
ことによって、前記未定義のコマンドを、前記ホスト及び前記デバイスとの間で使用可能にする、
ことを特徴とする情報処理システム。
【請求項２】
前記ホストは、前記未定義のコマンドの情報として、前記未定義のコマンドのコマンドコード及び当該未定義のコマンドの転送プロトコルを、各転送プロトコルをコード化したプロトコルコードが記述された転送プロトコルテーブルを用いて前記セットアップコマンドに書き込んで、前記デバイスに送信する
ことを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記セットアップコマンドは、RegHD-FISとData-FISとで構成され、
前記ホストは、
前記セットアップコマンドのコマンドコードを書き込んだ前記RegHD-FISを前記デバイスに送信し、前記RegHD-FISを受け取った前記デバイスからのPIO転送の準備完了の通知に応答して、前記未定義のコマンドのコマンドコードと当該未定義のコマンドの転送プロトコルを書き込んだ前記Data-FISを前記デバイスに送信する
ことを特徴とする請求項２に記載の情報処理システム。
【請求項４】
前記デバイスは、
前記ホストから受け取った前記RegHD-FISに含まれる前記セットアップコマンドのコマンドコードを前記コマンドテーブルと照合することで、前記セットアップコマンドの転送プロトコルを認識した後に、前記PIO転送の準備を行い、
前記ホストから受け取った前記Data-FISに含まれる前記未定義のコマンドのコマンドコードと当該未定義のコマンドの転送プロトコルを前記コマンドテーブルに書き込み、
前記コマンドテーブルへの前記書き込みの完了をRegDH-FISを用いて、前記ホストに通知する
ことを特徴とする請求項３に記載の情報処理システム。
【請求項５】
前記情報処理システムは、前記ホストとしてのコントローラと、前記デバイスとしての大容量記憶装置とを有する情報処理装置であり、
前記大容量記憶装置は、前記SATA規格に基づくコマンドの処理を含む制御を行うプロセッサ、当該大容量記憶装置を起動する為の制御プログラムを格納する書き込みも可能なROM、前記プロセッサの作業領域として使用するRAMを有し、
前記大容量記憶装置の前記プロセッサは、
前記情報処理装置への電源オフの操作に応答して、前記大容量記憶装置の前記ROMに前記コマンドテーブルを保存し、
前記情報処理装置への電源オンの操作に応答して、前記ROMに保存された前記コマンドテーブルを読み出して前記RAMに展開することで、前記書き込みを可能にする
ことを特徴とする請求項１乃至４のいずれか１項に記載の情報処理システム。
【請求項６】
ホストにブリッジチップが接続され、当該ブリッジチップにデバイスが接続されたブリッジ構成を有する、SATA規格に準拠して前記ホストと前記デバイスとの間でデータ通信を行う情報処理システムであって、
前記ホストは、
未定義のコマンドの情報を書き込んだセットアップコマンドを、前記ブリッジチップに送信し、
前記ブリッジチップは、
前記SATA規格で用いるコマンドに関し、各コマンドを識別するコマンドコードと各コマンドの転送プロトコルの情報を記述したコマンドテーブルを有し、
受け取った前記セットアップコマンドに従って、前記未定義のコマンドの情報を前記コマンドテーブルに書き込む、
ことによって、前記未定義のコマンドを、前記ホスト、前記ブリッジチップ及び前記デバイスとの間で使用可能にする、
ことを特徴とする情報処理システム。
【請求項７】
前記ホストは、前記未定義のコマンドの情報として、前記未定義のコマンドのコマンドコード及び当該未定義のコマンドの転送プロトコルを、各転送プロトコルをコード化したプロトコルコードが記述された転送プロトコルテーブルを用いて前記セットアップコマンドに書き込んで、前記ブリッジチップに送信する
ことを特徴とする請求項６に記載の情報処理システム。
【請求項８】
前記セットアップコマンドは、RegHD-FISとData-FISとで構成され、
前記ホストは、
前記セットアップコマンドのコマンドコードを書き込んだ前記RegHD-FISを前記ブリッジチップに送信し、前記RegHD-FISを受け取った前記ブリッジチップからのPIO転送の準備完了の通知に応答して、前記未定義のコマンドのコマンドコードと当該未定義のコマンドの転送プロトコルを書き込んだ前記Data-FISを前記ブリッジチップに送信する
ことを特徴とする請求項７に記載の情報処理システム。
【請求項９】
前記ブリッジチップは、
前記ホストから受け取った前記RegHD-FISに含まれる前記セットアップコマンドのコマンドコードを前記コマンドテーブルと照合することで、前記セットアップコマンドの転送プロトコルを認識した後に、前記PIO転送の準備を行い、
前記ホストから受け取った前記Data-FISに含まれる前記未定義のコマンドのコマンドコードと当該未定義のコマンドの転送プロトコルを前記コマンドテーブルに書き込み、
前記コマンドテーブルへの前記書き込みの完了をRegDH-FISを用いて、前記ホストに通知する、
ことを特徴とする請求項８に記載の情報処理システム。
【請求項１０】
ホストにブリッジチップが接続され、当該ブリッジチップにデバイスが接続されたブリッジ構成を有する、SATA規格に準拠して前記ホストと前記デバイスとの間でデータ通信を行う情報処理システムであって、
前記ホストは、
未定義のコマンドの情報及び当該未定義のコマンドの設定先を特定する設定先コードを書き込んだセットアップコマンドを、前記ブリッジチップに送信し、
前記ブリッジチップは、
前記ホストから受け取った前記セットアップコマンドを、前記設定先コードに従って前記デバイスに送信し、
前記ブリッジチップ及び前記デバイスは、
前記SATA規格で用いるコマンドに関し、各コマンドを識別するコマンドコードと各コマンドの転送プロトコルの情報を記述したコマンドテーブルを有し、
受け取った前記セットアップコマンドに従って、前記未定義のコマンドの情報を前記コマンドテーブルに書き込む、
ことによって、前記未定義のコマンドを、前記ホスト及び前記デバイスとの間で使用可能にする、
ことを特徴とする情報処理システム。
【請求項１１】
前記ブリッジチップは、前記ホストから受け取った前記セットアップコマンドに含まれる前記設定先コードにおいて、前記未定義のコマンドの設定先として前記デバイスが指定されていない場合、当該受け取ったセットアップコマンドを前記デバイスに送信しないことを特徴とする請求項１０に記載の情報処理システム。
【請求項１２】
SATA規格に準拠してホストとデバイスとの間でデータ通信を行う情報処理システムにおける、前記SATA規格における未定義のコマンドを、前記ホスト及び前記デバイスとの間で使用可能にする方法であって、
前記ホストが、
未定義のコマンドの情報を書き込んだセットアップコマンドを、前記デバイスに送信するステップと、
前記デバイスが、
受け取った前記セットアップコマンドに従って、前記未定義のコマンドの情報を、コマンドテーブルに書き込むステップと
を含み、
前記コマンドテーブルは、前記SATA規格で用いるコマンドに関し、各コマンドを識別するコマンドコードと各コマンドの転送プロトコルの情報を記述したテーブルである
ことを特徴とする方法。
【請求項１３】
コンピュータを、請求項１乃至１１のいずれか１項に記載の情報処理システムとして機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、SATA規格に基づく通信制御に関する。
【背景技術】
【０００２】
MFP(Multi Function Printer)などの画像処理装置では、入力画像データを保存するための記憶装置としてハードディスクドライブ(HDD)が多く用いられている。また、近年では入力画像データの高画質化及び高性能処理の要求から、より高速な処理が可能な記憶装置、例えばSSD(Solid State Drive)の需要が伸びてきている。そして、これらHDDやSSDなどの記憶装置とMFPとの間のデータ通信は、一般にSerial‐ATA（SATA）規格に基づいて行われている。
【０００３】
ここで、SATA規格のコマンドは、各々のコマンドコードに対して転送プロトコルが関連付けられている。ホスト（上述のMFPが対応）とデバイス（上述のHDDやSSDが対応）の双方は転送プロトコルを把握することで、データ通信を行うことが可能となる。一方で、SATA規格のコマンドの中には、転送プロトコルとの関連付けが行われていないコマンドコードも存在する。この転送プロトコルとの関連付けがされていないコマンドコードは、ベンダーが独自に転送プロトコルとの関連付けを行い得るもので、ベンダーユニークコマンドと呼ばれている。このベンダーユニークコマンドを用いることでより多様なデータ処理をデバイスに要求することが可能となる。
【０００４】
上記ベンダーユニークコマンドは、コマンドコードに転送プロトコルを関連付けて利用することから、ホストとデバイスの双方で予め定義しておく必要がある。つまり、どちらか一方でも転送プロトコルの情報が欠けてはならない。仮に、デバイス側で転送プロトコルの関連付けがされていないベンダーユニークコマンドを、ホストがデバイスに転送したとする。この場合、デバイス側では、送られてきたベンダーユニークコマンドの転送プロトコルが分からない。そのため、受け取ったベンダーユニークコマンドをどのように処理してよいかが分からず、プログラムの実行を中止して、エラーを返すといった処理がなされることになる。この点、例えば特許文献１には、ファクシミリ装置へのベンダーユニークコマンドの追加設定方法に関し、拡張性のある追加設定を可能にする手法が開示されている。具体的には、ファクシミリ装置内のROMにコマンド／アドレス／コードの各々のテーブルを持ち、電源投入時にアドレステーブルからRAMアドレスを順次読み出してその該当するエリアに、コマンドテーブルに記憶されたコードを記憶する。これにより、電源投入時に書き換えられたコードテーブルからベンダーユニークコマンドが作成され、結果、ベンダーユニークコマンドの追加・編集を可能にしている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平６−１５２９１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記特許文献１の手法では、ホストがホスト自身のコードテーブルをアップデート（もしくはデバイスがデバイス自身のコードテーブルをアップデート）することで、ベンダーユニークコマンドを追加・変更することが可能である。しかし、アップデートを行うためには専用ピンが必要となるところ、HDDやSSDの中にはコスト等を考慮して限定された数の専用ピンしか有していなかったり、そもそも専用ピンを持たないものも存在する。このような記憶装置を含むシステム構成では、上記特許文献１の手法を適用することは困難である。
【０００７】
本発明は、SATA規格に基づく通信制御において、デバイス側がアップデート用の専用ピンを有していないようなケースでも、後にベンダーユニークコマンドの追加が必要になった際に、ベンダーユニークコマンドを追加できる様にすることを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係る情報処理システムは、SATA規格に準拠してホストとデバイスとの間でデータ通信を行う情報処理システムであって、前記ホストは、未定義のコマンドの情報を書き込んだセットアップコマンドを、前記デバイスに送信し、前記デバイスは、前記SATA規格で用いるコマンドに関し、各コマンドを識別するコマンドコードと各コマンドの転送プロトコルの情報を記述したコマンドテーブルを有し、受け取った前記セットアップコマンドに従って、前記未定義のコマンドの情報を前記コマンドテーブルに書き込む、ことによって、前記未定義のコマンドを、前記ホスト及び前記デバイスとの間で使用可能にする、ことを特徴とする。
【発明の効果】
【０００９】
本発明によれば、SATA規格に基づく通信制御において、デバイス側がアップデート用の専用ピンを有していなくても、後にベンダーユニークコマンドの追加が必要になった際に、ベンダーユニークコマンドを追加することができる。
【図面の簡単な説明】
【００１０】
【図１】情報処理システムとしてのMFPの全体構成を示すブロック図である。
【図２】HDDの内部構成を示すブロック図である。
【図３】実施例１に係る、メインコントローラからHDDへのコマンド転送の概略を示す図である。
【図４】コマンドテーブルの一例である。
【図５】メインコントローラとHDDとの間でのコマンド転送の一例を示す図である。
【図６】PIOデータOutプロトコルでデータ通信をする際に用いるFISの構造を示す図である。
【図７】実施例１に係る、セットアップコマンドの詳細を示す図である。
【図８】転送プロトコルテーブルを示す図である。
【図９】（ａ）はホストがRegHD-FISをデバイスへ送信する処理の流れを示すフローチャート、（ｂ）は受け取ったRegHD-FISをデバイスが複製する処理の流れを示すフローチャートである。
【図１０】（ａ）はデバイスがPIO転送の準備完了をホストへ通知する処理の流れを示すフローチャート、（ｂ）はPIO転送の準備完了通知に応答してホストがData-FISをデバイスへ転送する処理の流れを示すフローチャートである。
【図１１】実施例１に係る、デバイスにおける追加コマンドの登録及びその完了をホストへ通知する処理の流れを示すフローチャートである。
【図１２】（ａ）はデバイス用コマンドテーブルをHDDの起動時にRAMに展開する様子を示す図、（ｂ）はデバイス用コマンドテーブルをHDDの停止時にサブROMに保存する様子を示す図である。
【図１３】実施例２に係る、ブリッジチップを介したコマンド転送の概略を示す図である。
【図１４】ブリッジチップの内部構成を示すブロック図である。
【図１５】実施例２に係る、ブリッジチップにおける追加コマンドの登録及びその完了をホストへ通知する処理の流れを示すフローチャートである。
【図１６】実施例３に係る、ブリッジチップを介したコマンド転送の概略を示す図である。
【図１７】コードテーブルを示す図である。
【図１８】実施例３に係る、セットアップコマンドの内部構成の一例を示す図である。
【図１９】実施例３に係る、ブリッジチップにおける追加コマンドの登録及びその完了をホストへ通知する処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して、本発明を好適な実施例に従って詳細に説明する。なお、以下の実施例において示す構成は一例にすぎず、本発明は図示された構成に限定されるものではない。
【実施例１】
【００１２】
図１は、本実施例に係る、情報処理システムとしてのMFPの全体構成を示すブロック図である。本実施例では、MFPという1つの閉じた情報処理装置の構成の中で説明するが、データ通信をSerial‐ATA（SATA）規格に準拠して行う、ホストとデバイスを含む情報処理システムについては広く適用可能である。
【００１３】
MFP１０のメインコントローラ（ホストに対応）１００は、CPU１０１、ROM１０６、DRAM１０７、SRAM１０８、5つのＩＦ（１０２、１０３、１０４、１０５、１１０）、及び２つの画像処理部（１１１、１１２）で構成されている。そして、メインコントローラ１００の上記構成要素は、システムバス１１３もしくは画像バス１１４によって接続されている。
【００１４】
CPU１０１は、MFP１０全体を制御するプロセッサであり、ROM１０６等に格納されたプログラムに基づいて、各種制御や演算処理を行なう。Network I/F１０２は、ＬＡＮ等のネットワークに接続し、不図示のPCといった外部装置から例えば印刷ジョブ等を受け取る。操作部I/F１０３は、操作部１１５に表示する画像データの出力、ならびにユーザが操作部１１５で行った入力操作を制御する。SATA I/F１０４は、SATA規格に準拠したデバイスとしてのHDD１１６との間で、データの入出力を行うインタフェースである。画像バスI/F１０５は、システムバス１１３と画像バス１１４を接続し、データを高速に転送する為のブリッジである。ROM１０６は、リード専用のメモリであり、ブート用のROMとして使用され、システムのブートプログラムが格納されている。DRAM１０７は、CPU１０１が動作するためのシステムワークメモリである。また、画像データを一時記憶する為の画像メモリの役割も担う。SRAM１０８は、不揮発性のメモリでありシステムの設定データを保持する。システム検知部１０９は、システム全体の電力モードを監視し、各部の電力供給の指示を行う。スキャナ・プリンタI/F１１０は、スキャナ１１７及びプリンタ１１８とメインコントローラ１００とを接続し、画像データの入出力制御を行う。スキャナ画像処理部１１１は、スキャナ１１７で読み取ったスキャン画像データに対して、変倍やMTF補正といった各種画像処理を行う。プリント画像処理部１１２は、プリンタ１１８に出力する画像データを生成するためのγ補正や量子化といった各種画像処理を行う。
【００１５】
システムバス１１３は、制御バス及びデータバスと任意ブロック間のローカルなバス及び信号線を便宜的にまとめて表現したものである。画像バス１１４は、PCIバスを便宜的にまとめて表現したものである。操作部１１５は、表示機能と操作機能を兼ね揃えたタッチパネル等のユーザインタフェースであり、入力された画像データを表示する役割とユーザが入力した情報をCPU１０１に伝える役割を持つ。HDD１１６は、比較的大容量のデータを記憶する記憶装置であり、システムソフトウェア、各種アプリケーション、画像データ及びそれらの管理情報を格納する。なお、HDD１１６は、SATA規格に準拠した大容量記憶装置であればよく、SSDなど他の種類の記憶装置でも構わない。スキャナ１１７は、不図示の原稿台等にセットされた原稿を光学的に読み取って電気信号に変換し、例えばRGBで表現されるラスタイメージデータ（スキャン画像データ）を生成する。プリンタ１１８は、例えば電子写真やインクジェットといった方式によって、プリント画像処理部１１２で生成された印刷用画像データに従った画像を紙等の記録媒体上に形成する。
【００１６】
図２は、HDD１１６の内部構成を示すブロック図である。サブCPU２０１は、不図示のデバイス・タスクファイルレジスタ（以下、デバイスTFR）でのSATAコマンドの処理、送受信データの転送処理等の制御を司るプロセッサである。サブROM２０２は、HDD１１６を起動する為の制御プログラムや各種パラメータを格納する、例えばフラッシュメモリのような書き込みも可能なROMである。サブRAM２０３は、サブCPU２０１の作業領域及び、コマンドテーブルの展開領域として使用される読み書き可能なメモリである。SATA-I/F２０４は、メインコントローラ１００との間でデータの入出力を行うインタフェースである。HDDコントローラ（HDC）２０５は、ヘッド２０６を制御して、磁気ディスク２０７にデータを記憶させるコントローラである。ヘッド２０６は、磁気によって磁気ディスク２０７にデータを書き込んだり読み込んだりする。磁気ディスク２０７は、ディスクに磁性体を塗布した磁性層で構成され、磁化を利用することでデータを記憶する。そして、サブCPU２０１、サブROM２０２、サブRAM２０３、SATA−I/F２０４、HDC２０５は、バス２０８を介して相互に接続されている。
【００１７】
次に、ホストとしてのメインコントローラ１００からデバイスとしてのHDD１１６へのコマンド転送について説明する。図３は、本実施例に係る、メインコントローラ１００からHDD１１６へのコマンド転送の概略を示す図である。
【００１８】
メインコントローラ１００がHDD１１６に対して任意のコマンド３００を転送する際、メインコントローラ１００とHDD１１６の双方は当該コマンド３００内に記載されたコマンドコードから転送プロトコルを判断し、データの送受信の制御を行う。メインコントローラ１００内のCPU１０１は、転送するコマンド３００のコマンドコードを、ホスト用コマンドテーブル３０１を参照し照合することで、当該コマンド３００の転送プロトコルを判断する。そして、HDD１１６内のサブCPU２０１は、転送されてきたコマンド３００のコマンドコードを読み取り、デバイス用コマンドテーブル３０２を参照し照合することで、当該コマンド３００の転送プロトコルを判断する。これにより、CPU１０１とサブCPU２０１の双方は、コマンド３００の転送プロトコルを判断出来、メインコントローラ１００とHDD１１６との間でコマンド３００に対応したデータの送受信制御が可能になる。
【００１９】
図４は、SATA規格で使用するコマンドに関して、各コマンドを識別するコマンドコードと、各コマンドの転送プロトコルの情報を記述したコマンドテーブルの一例である。メインコントローラ１００とHDD１１６との間でデータ通信をする際、CPU１０１とサブCPU２０１が、コマンドの転送プロトコルを知るためにこのようなコマンドテーブルをそれぞれ参照する。図４のコマンドテーブルは、「コマンドNo.」列４０１、「コマンドコード」列４０２、「転送プロトコル」列４０３から構成される。そして、ホスト用コマンドテーブル３０１はROM１０６内に保存されており、MFP１０の起動時にDRAM１０７に展開される。また、デバイス用コマンドテーブル３０２は、サブROM２０２内に保存されており、HDD１１６の起動時にサブRAM２０３に展開される。
【００２０】
コマンドテーブルの「コマンドNo.」列４０１には、コマンドの管理番号として、0から255の通し番号が記述されている。また、「コマンドコード」列４０２には、SATA規格のコマンドコードの一覧として、“0x00”〜“0xff”が記述されている。なお、コマンドコードにおける“0xけは16進数であることを表す。この「コマンドコード」列４０２内の各コマンドコードは、後述する“RegHD-FIS”のCommand領域に書き込まれ、そのコマンドの識別子となる。「転送プロトコル」列４０３には、各コマンドの転送プロトコルとして、“PIOデータIn”、“PIOデータOut”、“NonData”等のプロトコルが記述されている。この「転送プロトコル」列４０３が空欄となっているコマンドコード（例えば、0xc1〜0xc3等）が、前述のベンダーユニークコマンドとして使用できる。
【００２１】
図５は、メインコントローラ１００とHDD１１６との間での、コマンド転送の一例を示す図である。SATA規格においてコマンドのプロトコル制御は、FIS（Frame Instruction Structure）と呼ばれるフレーム単位で行われる。本実施例では、専用の設定コマンド（以下、「セットアップコマンド」と呼ぶ）をメインコントローラ１００内のCPU１０１がデータ通信線を用いてHDD１１６に転送する。このセットアップコマンドによって、新たに追加するベンダーユニークコマンドのコマンドコードと当該コマンドコードに対応する転送プロトコルとが、メインコントローラ１００からHDD１１６へ通知される。以下では、セットアップコマンドのコマンドコードとして“コマンドコ、その転送プロトコルに“PIOデータOut”プロトコルを用いた例を説明するものとする。具体的には、以下に示す手順（図５の符号５０１〜５０７に対応）によって、セットアップコマンドを用いた追加コマンドの設定が実現される。  
５０１：メインコントローラ１００から“インコントローラ１０をHDD１１６へ送信
５０２：HDD１１６で“RegHD-FIS”を複製し、PIO転送を準備
５０３：PIO転送の準備完了を“PIOSU完でメインコントローラ１００へ通知
５０４：メインコントローラ１００で“Data-FIS”に追加コマンドとその転送プロトコルを書き込み
５０５：追加コマンドとその転送プロトコルを書き込んだ“Data-FIS”をHDD１１６へ送信
５０６： HDD１１６で、受け取った“Data-FIS”に基づきデバイス用コマンドテーブル３０２に追加コマンドを登録
５０７：追加コマンドの登録完了を“RegDH-FIS”でメインコントローラ１００へ通知
なお、RegHD は「Register Host to Device」を意味し、RegDHは「Register Device to Host」を意味する。
【００２２】
図６（ａ）〜（ｄ）は、“PIOデータOut”プロトコルでデータ通信をする際に用いるFISの構造を示している。図６（ａ）の“RegHD-FIS”は、メインコントローラ１００がHDD１１６へ指示をする際に用いるFISである。メインコントローラ１００が“RegHD-FIS”をHDD１１６へ送信することで、以下の図９〜図１１に示す一連のフローが開始される。また、“RegHD-FIS”にはコマンド転送に必要なレジスタが全て含まれている。そのCommand領域６０１には、図４に示したコマンドテーブル内の「コマンドコード」列４０２内のいずれかのコマンドコードが記載され、SATAのどのコマンドであるかを識別する識別子となる。図６（ｂ）の“Data-FIS”は、メインコントローラ１００とHDD１１６との間のデータ通信を行う際に用いられる。そのData領域６０２には、実際に転送でやり取りされるデータがCPU１０１によって書き込まれる。
【００２３】
図７は、本実施例に係る、セットアップコマンドの詳細を示す図である。セットアップコマンド７００は、“RegHD-FIS”と“Data-FIS”とで構成される。“RegHD-FIS”内のCommand領域６０１には、CPU１０１によってセットアップコマンドのコマンドコードが書き込まれる。セットアップコマンド自身のコマンドコード（ここでは“0xF0“）もベンダーユニークコマンドである為、予めホスト用コマンドテーブル３０１とデバイス用コマンドテーブル３０２内で、このコマンドがどういった転送プロトコルに則って処理を行うかの関連付けを行っておく。
【００２４】
そして、“Data-FIS”内のData領域６０２には、未定義の追加したいコマンドのコマンドコードと転送プロトコルがCPU１０１によって書き込まれる。例えば、ベンダーユニークコマンドとして設定可能な“0xC1”のコマンドコードに対して、転送プロトコル“PIOデータIn”を関連付けたい場合を考える。ここでは、Data領域６０２内に各々1Byteずつを使い、未定義の追加コマンドのコマンドコードとして“0xC1”、当該追加コマンドの転送プロトコルとして“0x01”を格納した例を示している。後述する転送プロトコルテーブル８００に基づき、追加コマンドのコマンドコード“0xC1”とその転送プロトコル“送プロトコをData領域６０２に格納することで、“PIOデータIn”を転送プロトコルコードに置き換えている。これにより、CPU１０１は、HDD１１６へ未定義の追加コマンドの情報を通知することが可能となる。
【００２５】
図８は、転送プロトコルテーブルを示している。この転送プロトコルテーブル８００は、CPU１０１が図７に示すセットアップコマンドの“Data-FIS”に転送プロトコル（例えば“0x01”）を埋め込む時に参照される。また、サブCPU２０１が、受け取った“Data-FIS”からコマンドコードに対応した転送プロトコル（“0x01”）を判断する時に参照される。転送プロトコルテーブル８００は、「転送プロトコルNo.」列８０１、「プロトコルコード」列８０２、「転送プロトコル」列８０３から構成される。転送プロトコルテーブル８００は、メインコントローラ１００側では、ROM１０６内に保管されており、HDD１１６側ではサブROM２０２内に保管されている。
【００２６】
転送プロトコルテーブル８００の「転送プロトコルNo.」列８０１には、転送プロトコルの管理番号として、0からnの通し番号が記述されている。「プロトコルコード」列８０２には、転送プロトコルをコード化したプロトコルコードが記述され、“Data-FIS”に転送プロトコル（例えば“0x01”）を埋め込む際に使用される。「転送プロトコル」列８０３には、コマンドの転送時のプロトコルである“PIOデータIn”、“PIOデータOut”、“NonData”等が記述されている。
【００２７】
図９（ａ）は、ホストであるメインコントローラ１００が、セットアップコマンドを含む“RegHD-FIS”を、デバイスであるHDD１１６へ送信する処理（前述の５０１）の流れを示すフローチャートである。そして、図９（ｂ）は、デバイスであるHDD１１６が、受け取った“RegHD-FIS”を複製する処理（前述の５０２）の流れを示すフローチャートである。
【００２８】
ホスト側の図９（ａ）のフローを説明する。まず、ステップ９０１で、メインコントローラ１００のCPU１０１は、SATA I/F１０４内にあるシャドウTFRに、“RegHD-FIS”の必要な情報（Command領域６０１以外）を書き込む。ここで、「シャドウTFR」は、シャドウ・タスクファイルレジスタの略である。次に、ステップ９０２で、CPU１０１は、 上記シャドウTFRに、“RegHD-FIS”のCommand領域６０１の情報として、セットアップコマンドのコマンドコード（ここでは“0xF0”）を書き込む。そして、ステップ９０３で、CPU１０１は、“RegHD-FIS”をHDD１１６へ転送する。
【００２９】
次に、デバイス側の図９（ｂ）のフローを説明する。まず、ステップ９１１で、HDD１１６のサブCPU２０１は、メインコントローラ１００から“RegHD-FIS”を受信したかどうかを判定する。“RegHD-FIS”を受信していればステップ９１２へ進み、受信していなければ“RegHD-FIS”の受信の監視を継続する。そして、ステップ９１２で、サブCPU２０１は、メインコントローラ１００から受信した“RegHD-FIS”の内容をSATA I/F２０４内にあるデバイスTFRに複製する。ここで、「デバイスTFR」は、デバイス・タスクファイルレジスタの略である。
【００３０】
以上のようにして、メインコントローラ１００のシャドウTFRの情報がHDD１１６のデバイスTFRに複製されることで、ホスト側のCPU１０１とデバイス側のサブCPU２０１との間でタスクファイルレジスタの情報が共有可能な状態となる。
【００３１】
図１０（ａ）は、デバイス側であるHDD１１６が、受け取った“RegHD-FIS”の情報に基づくPIO転送の準備完了をメインコントローラ１００へ通知する処理（前述の５０３）の流れを示すフローチャートである。そして、図１０（ｂ）は、ホスト側であるメインコントローラ１００が、PIO転送の準備完了通知に応答して、追加したいコマンドの情報を格納した“Data-FIS”をHDD１１６へ転送する処理（前述の５０４及び５０５）の流れを示すフローチャートである。なお、PIOはProgrammed Input/Outputの略である。
【００３２】
デバイス側の図１０（ａ）のフローを説明する。まず、ステップ１００１で、HDD１１６のサブCPU２０１は、デバイスTFRに複製された情報に含まれるコマンドコード（ここでは“0xF0コ）を、デバイス用コマンドテーブル３０２を用いて照合する。これにより、セットアップコマンドを“PIOデータOut”プロトコルに則ったフローで処理可能なことをサブCPU２０１は認識する。続くステップ１００２で、サブCPU２０１は、PIO転送の準備を行なう。PIO転送の準備が完了すると、サブCPU２０１は、図６（ｃ）に示す“PIOSU”の各領域の情報をデバイスTFRに書き込む。そして、PIO転送の準備が完了した旨を“PIOSU”を用いてメインコントローラ１００へ通知する。
【００３３】
次に、ホスト側の図１０（ｂ）のフローを説明する。まず、ステップ１０１１で、メインコントローラ１００のCPU１０１は、HDD１１６からの“PIOSU”の受信の有無を判定する。“PIOSU”を受信していればステップ１０１２へ進み、受信していなければ“PIOSU”の受信の監視を継続する。そして、ステップ１０１２で、CPU１０１は、“Data-FIS”の各領域の情報をシャドウTERに書き込む。具体的には、追加したいコマンドのコマンドコード（ここでは“0xC1”）及び当該追加コマンドの転送プロトコル（ここでは“0x01”）の情報がシャドウTFRに書き込まれる。この書き込みの際には、追加コマンドとその転送プロトコルのいずれについてもデータ領域内の1Byteが用いられる。また、転送プロトコルの書き込みの際には、前述の転送プロトコルテーブル８００が参照され、追加コマンドコードに対応する転送プロトコルコードが使用される。これにより“Data-FIS”のData領域６０２にコマンドコードと転送プロトコルの情報が格納された状態となる。そして、ステップ１０１３で、CPU１０１は、必要な情報が書き込まれた“Data-FIS”をHDD１１６に転送する。
【００３４】
図１１は、デバイス側であるHDD１１６が、受け取った“Data-FIS”に基づいてデバイス用コマンドテーブルに追加コマンドを登録し、その完了をメインコントローラ１００へ通知する処理（前述の５０６及び５０７）の流れを示すフローチャートである。
【００３５】
まず、ステップ１１０１で、HDD１１６内のサブCPU２０１は、メインコントローラ１００から“Data-FIS”を受信したかどうかを判定する。“Data-FIS”を受信していればステップ１１０２へ進み、受信していなければ“Data-FIS”の受信の監視を継続する。
【００３６】
ステップ１１０２で、サブCPU２０１は、受け取った“Data-FIS”のData領域の情報をSATA I/F２０４内のデバイスTFRに複製する。そして、ステップ１１０３で、サブCPU２０１は、デバイスTFRから追加コマンドのコマンドコード（ここでは“0xC1”）を読み出して取得する。
【００３７】
続いて、ステップ１１０４で、サブCPU２０１は、取得したコマンドコードに係る追加コマンドの転送プロトコル（ここでは“0x01”）を、デバイス用コマンドテーブル３０２に書き込む。具体的には、以下の通りである。まず、デバイス用コマンドテーブル内の「コマンドコード」列４０１を上から順に参照していき、読み出したコマンドコード（“0xC1”）の位置に書き込み指定のポインタを止める。次に、当該コマンドコードの「転送プロトコル」列４０２の部分に、デバイスTFR内に複製されている、当該追加コマンドの転送プロトコル（“0x01”）を書き込む。
【００３８】
そして、ステップ１１０５で、サブCPU２０１は、デバイス用コマンドテーブル３０２への追加コマンドの登録処理が終わった旨を、“RegDH-FIS”を用いてメインコントローラ１００へ通知する。
【００３９】
以上で、本実施例におけるセットアップコマンドに従った、追加コマンドの設定処理が終了する。
【００４０】
図１２（ａ）は、デバイス用コマンドテーブル３０２を、HDD１１６の起動時（MFP１０への電源オンの操作時）に、より処理を早く行えるRAMに展開する様子を示す図である。デバイス用コマンドテーブル３０２は、HDD１１６の電源がＯＦＦ状態の時にはサブROM２０２に保存されている。HDD１１６への電源オンの操作に応答して、デバイス用コマンドテーブル３０２は、サブCPU２０１によってサブROM２０２から読み出され（矢印１２０１）、サブRAM２０３に展開される（矢印１２０２）。一方、図１２（ｂ）は、デバイス用コマンドテーブル３０２を、HDD１１６の停止時（MFP１０への電源オフの操作時）に、電源供給が遮断されても情報が維持されるよう、書き込みも可能なROMであるサブROM２０２に保存する様子を示す図である。先述したように、デバイス用コマンドテーブル３０２へのベンダーユニークコマンドの追加は、HDD１１６の動作中にされる。そのため、HDD１１６に対して電源オフの操作がなされると、サブCPU２０１はデバイス用コマンドテーブル３０２をサブROM２０２に保存する作業を行う。これにより、当該ベンダーユニークコマンドについて、その使用時に再度メインコントローラ１００からHDD１１６へセットアップコマンドを送って設定する必要がなくなる。HDD１１６への電源オフの操作に応答して、サブCPU２０１は、デバイス用コマンドテーブル３０２をサブRAM２０３から読み出し（矢印１２１１）、サブROM２０２に上書き保存する（矢印１２１２）。
【００４１】
以上のとおり、追加コマンドの情報（コマンドコードと転送プロトコル）を格納したセットアップコマンドを、メインコントローラ１００からHDD１１６に転送することでコマンドの追加設定が可能となる。これにより、コマンドコードと転送プロトコルとの関連付けが行われておらず使用できなかったコマンドを使用することが出来るようになる。
【００４２】
例えば、最初は、あるベンダーユニークコマンドについて転送プロトコルの関連付けを行わずに使用できない状態にしておく。そして、エラーが発生した際にセットアップコマンドを使用して、当該ベンダーユニークコマンドに転送プロトコルを関連付けする。こうすることで当該ベンダーユニークコマンドは使用できる様になり、HDD１１６内の情報をホストであるメインコントローラ１００で吸い上げられるようになる。このようにすれば、普段は特定のベンダーユニークコマンドを使用できないようにしておき（隠しコマンド）、必要に応じて当該隠しコマンドを利用することができる。
【実施例２】
【００４３】
実施例１では、ホストとしてのメインコントローラとデバイスとしてのHDDが、１対１で直接接続されている構成であった。次に、ホストとしてのメインコントローラとデバイスとしてのHDDとの間にブリッジチップを挟んだ構成（SATA−SATAブリッジ構成）において、ブリッジチップにベンダーユニークコマンドを追加する態様について、実施例２として説明する。本実施例の構成において使用するブリッジチップは、ホスト側から転送されてきたコマンドをデバイス側に転送する機能を持っている。この場合において、ブリッジチップがベンダーユニークコマンドの転送プロトコルを知らないと、ホスト側から転送されてきたベンダーユニークコマンドをデバイス側に転送することができず、ブリッジチップはエラーを返すことになる。
【００４４】
そこで、本実施例では、ブリッジチップへセットアップコマンドを送ってベンダーユニークコマンドを使用可能な状態にし、ブリッジチップがデバイス側へベンダーユニークコマンドを転送できるようにする。なお、実施例１と共通する内容は省略ないしは簡略化し、以下では差異点を中心に説明するものとする。
【００４５】
図１３は、本実施例に係る、ブリッジチップを介したコマンド転送の概略を示す図である。実施例１で説明したように、コマンドテーブルは、ホストとデバイスという対の関係で各々保持される。従って、ブリッジチップ１３００は、図１３に示すように２つのコマンドテーブルを持つ。すなわち、メインコントローラ１００のホスト用コマンドテーブル３０１に対応するデバイス用コマンドテーブルA１３０１と、HDD１１６’のデバイス用コマンドテーブル３０２’に対応するホスト用コマンドテーブルB１３０２を持つこととなる。本実施例では、メインコントローラ１００からセットアップコマンド１３１０がブリッジチップ１３００に送られ、ブリッジチップ１３００内のデバイス用コマンドテーブルA１３０１とホスト用コマンドテーブルB１３０２にコマンドが追加される。そして、このコマンド追加により、メインコントローラ１００からHDD１１６’に対して、新たなベンダーユニークコマンドの転送ができるようになる。なお、本実施例においては、メインコントローラ１００とHDD１１６’との間では、追加対象のコマンドに関する情報は共有されているものとする。
【００４６】
図１４は、ブリッジチップ１３００の内部構成を示すブロック図である。サブCPU１４０１は、HDD１１６’へのコマンド送信といった、SATA規格のコマンド処理を行うプロセッサである。サブROM１４０２は、サブCPU１４０１の起動プログラムや各種モードの設定値のデータを格納する読み出し専用メモリである。サブRAM１４０３は、サブCPU１４０１の作業領域及び、コマンドテーブルの展開領域として使用される読み書き可能なメモリである。SATA-I/F(Device)１４０４は、メインコントローラ１００との間でコマンドやデータの入出力を行うインタフェースである。SATA-I/F(Host)１４０５は、HDD１１６’との間でコマンド及びデータの入出力を行うインタフェースである。そして、サブCPU１４０１、サブROM１４０２、サブRAM１４０３、SATA-I/F(Device)１４０４、SATA-I/F(Host)１４０５は、バス１４０６を介して相互に接続されている。なお、本実施例のHDD１１６’は、実施例１とは異なりサブCPUやサブROM、サブRAMといった構成は有さず、前述の図２に示す構成のうちSATA−I/F２０４、HDC２０５、ヘッド２０６、磁気ディスク２０７で構成される。
【００４７】
図１５は、実施例１の図１１に対応する本実施例のフローチャートである。すなわち、ブリッジチップ１３００が、メインコントローラ１００から受け取った“Data-FIS”に基づいてデバイス用及びホスト用のコマンドテーブルA１３０１及びB１３０２に追加コマンドを登録し、その完了を通知するまでの流れを示すフローチャートである。なお、デバイス用コマンドテーブルA１３０１及びホスト用コマンドテーブルB１３０２は、サブROM１４０２に保存されており、ブリッジチップ１３００の起動に伴ってサブRAM１４０３に展開されて使用される。
【００４８】
また、本フローの開始に至るまでの手順に関しては、前述の実施例１で行った説明中の「HDD１１６」を「ブリッジチップ１３００」に読み替えればよい。すなわち、まずメインコントローラ１００がセットアップコマンド１３１０の“RegHD-FIS”を設定してブリッジチップ１３００へ転送する（前述の図９（ａ）のフローに相当）。“RegHD-FIS”を受け取ったブリッジチップ１３００は、PIO転送の準備を行ってその完了を“PIOSU”でメインコントローラ１００へ通知する（前述の図９（ｂ）及び図１０（ａ）のフローに相当）。そして、追加コマンドとその転送プロトコルが書き込まれた“Data-FIS”をメインコントローラ１００から受け取ると（前述の図１０（ｂ）のフローに相当）、ブリッジチップ１３００で以下の各ステップが実行される。
【００４９】
まず、ステップ１５０１で、ブリッジチップ１３００内のサブCPU１４０１は、メインコントローラ１００から“Data-FIS”を受信したかどうかを判定する。“Data-FIS”を受信していればステップ１５０２へ進み、受信していなければ“Data-FIS”の受信の監視を継続する。
【００５０】
ステップ１５０２で、サブCPU１４０１は、受け取った“Data-FIS”のData領域の情報をSATA−I/F１４０４内のデバイスTFRに複製する。そして、ステップ１５０３で、サブCPU１４０１は、デバイスTFRから追加コマンドのコマンドコードを読み出して取得する。
【００５１】
続いて、ステップ１５０４で、サブCPU１４０１は、取得したコマンドコードに係る追加コマンドの転送プロトコルを、デバイス用コマンドテーブルA１３０１及びホスト用コマンドテーブルB１３０２に書き込む。具体的には、以下の通りである。まず、デバイス用コマンドテーブルA１３０１内の「コマンドコード」列４０１を上から順に参照していき、読み出したコマンドコードの位置に書き込み指定のポインタを止める。次に、当該コマンドコードの「転送プロトコル」列４０２の部分に、デバイスTFR内に複製されている、追加コマンドの転送プロトコルを書き込む。また、同様に、ホスト用コマンドテーブルB１３０２内の「コマンドコード」列４０１を上から順に参照していき、読み出したコマンドコードの「転送プロトコル」列４０２の部分に、追加コマンドの転送プロトコルを書き込む。
【００５２】
そして、ステップ１５０５で、サブCPU１４０１は、両コマンドテーブルへの追加コマンドの登録処理が終わった旨を、“RegDH-FIS”を用いてメインコントローラ１００へ通知する。
【００５３】
以上で、本実施例における、セットアップコマンド１３１０に従った、ブリッジチップにおける追加コマンドの設定処理が終了する。これにより、例えば、ブリッジチップの先に接続されるHDD等の記憶装置が変更になって使用するベンダーユニークコマンドが変わるようなケースにも柔軟に対応することができる。すなわち、ホストと違ってコマンドを追加するための十分な構成を有さないブリッジチップにおいて、容易にベンダーユニークコマンドの追加が可能となる。
【００５４】
本実施例によれば、SATA−SATAブリッジ構成において、実施例１と同様、ブリッジチップにベンダーユニークコマンドを追加することができる。
【実施例３】
【００５５】
次に、実施例２と同じSATA−SATAブリッジ構成において、デバイスとしてのHDDにもホスト側からのセットアップコマンドでコマンドを追加する態様を実施例３として説明する。なお、実施例１及び２と共通する内容は省略ないしは簡略化し、以下では差異点を中心に説明するものとする。
【００５６】
図１６は、本実施例に係る、ブリッジチップを介したコマンド転送の概略を示す図である。メインコントローラ１００、ブリッジチップ１３００及びHDD１１６が接続したSATA−SATAブリッジ構成であり、ブリッジチップ１３００は、デバイス用コマンドテーブルA１３０１とホスト用コマンドテーブルB１３０２を持つ。ただし、本実施例のHDD１１６の構成は実施例１と同じである。すなわち、前述の図２に示すとおり、サブCPU２０１、サブROM２０２、サブRAM２０３、SATA−I/F２０４、HDC２０５がバス２０８を介して相互に接続され、さらにヘッド２０６と磁気ディスク２０７を備える。
【００５７】
本実施例では、ホストであるメインコントローラ１００から送られるセットアップコマンド１６１０に、追加したいコマンドのコマンドコードと転送プロトコルの他に、追加コマンドの設定先を特定する設定先コードが含まれる。図１７は、本実施例で使用可能な設定先コードを規定するコードテーブルを示している。コードテーブル１７００は、「設定先コード」列１７０１と「設定先情報」列１７０２で構成される。「設定先コード」列１７０１には、追加コマンドの設定先を示すコードの情報が記述されており、各設定先コードが2ビットのデータで管理されている。具体的には、ブリッジチップ１３００とHDD１１６のそれぞれに対して設定する場合を“1合、設定しない場合を“2合で表した2ビットのデータである。そして、「設定先情報」列１７０２には、設定先となるハードウェアの名称が記述されている。このような設定先コードによって、ブリッジチップ１３００又はHDD１１６のいずれかにのみコマンドを追加するか、ブリッジチップ１３００とHDD１１６の双方にコマンドを追加するかを任意に選択することができる。
【００５８】
図１８は、本実施例に係る、セットアップコマンド１６１０の“RegHD-FIS”と“Data-FIS”の内部構成の一例を示す図である。ここでは、実施例１と同様に転送プロトコルに“PIOデータOut”を使用して、新たにベンダーユニークコマンドを追加する場合を例に説明を行うものとする。“RegHD-FIS”については実施例１と異なるところはないので説明を省略する。図１８に示す“Data-FIS”は、追加したいコマンドのコマンドコード“0xC1”と転送プロトコル“0x01”に加え、このセットアップコマンド１６１０がどのハードウェアに対して追加コマンドの設定を行うものなのかを示す設定先コード“0b11”、“0b01”、“0b10ーのいずれかが書き込まれる。なお、設定先コードの“0b”は2進数であることを表す。メインコントローラ１００のCPU１０１は、この書き込み対象の設定先コードを上述のコードテーブル１７００に従って決定する。例えば、ブリッジチップ１３００とHDD１１６’の両方に新たなベンダーユニークコマンドを追加したい場合の設定先コードは、図１８に示す“0b11”となる。
【００５９】
図１９は、実施例２の図１５に対応する、本実施例に係るフローチャートである。すなわち、ブリッジチップ１３００が、メインコントローラ１００から受け取った“Data-FIS”内の設定先コードで指定された先のコマンドテーブルに追加コマンドを登録し、その完了をメインコントローラ１００へ通知するまでの流れを示すフローチャートである。なお、本フローの開始に至るまでの手順に関しては、実施例２と同様である。すなわち、まずメインコントローラ１００がセットアップコマンド１６１０の“RegHD-FIS”を設定してブリッジチップ１３００へ転送する。“RegHD-FIS”を受け取ったブリッジチップ１３００は、PIO転送の準備を行ってその完了を“PIOSUをでメインコントローラ１００へ通知する。そして、追加コマンドとその転送プロトコルが書き込まれた“Data-FIS”をメインコントローラ１００から受け取ると、ブリッジチップ１３００で以下の各ステップが実行される。
【００６０】
まず、ステップ１９０１で、ブリッジチップ１３００内のサブCPU１４０１は、メインコントローラ１００から“Data-FIS”を受信したかどうかを判定する。“Data-FIS”を受信していればステップ１９０２へ進み、受信していなければ“Data-FIS”の受信の監視を継続する。
【００６１】
ステップ１９０２で、サブCPU１４０１は、受け取った“Data-FIS”のData領域の情報をSATA−I/F１４０４内のデバイスTFRに複製する。そして、ステップ１９０３で、サブCPU１４０１は、デバイスTFRから上述の設定先コードを読み出して取得する。
【００６２】
ステップ１９０４で、サブCPU１４０１は、取得した設定先コードの上位ビットの値が“1”であるかどうかを判定する。上位ビットの値が“1”であれば、ブリッジチップ１３００内のコマンドテーブルに対し追加コマンドの設定を行うためにステップ１９０５へ進む。一方、上位ビットの値が“0”であれば、ブリッジチップ１３００内のコマンドテーブルへの追加コマンドの設定は不要であるため、ステップ１９０７へ進む。
【００６３】
ステップ１９０５で、サブCPU１４０１は、デバイスTFRから追加コマンドのコマンドコードを読み出して取得する。そして、ステップ１９０６で、サブCPU１４０１は、取得したコマンドコードに係る追加コマンドの転送プロトコルを、デバイス用コマンドテーブルA１３０１及びホスト用コマンドテーブルB１３０２に書き込む。具体的には、以下の通りである。まず、デバイス用コマンドテーブルA１３０１内の「コマンドコード」列４０１を上から順に参照していき、読み出したコマンドコードの位置に書き込み指定のポインタを止める。次に、当該コマンドコードの「転送プロトコル」列４０２の部分に、デバイスTFR内に複製されている、追加コマンドの転送プロトコルを書き込む。また、同様に、ホスト用コマンドテーブルB１３０２内の「コマンドコード」列４０１を上から順に参照していき、読み出したコマンドコードの「転送プロトコル」列４０２の部分に、追加コマンドの転送プロトコルを書き込む。
【００６４】
ステップ１９０７で、サブCPU１４０１は、ステップ１９０５で取得した設定先コードの下位ビットの値が“1ビであるかどうかを判定する。下位ビットの値が“1ビであれば、HDD１１６内のコマンドテーブルに対し追加コマンドの設定を行うためにステップ１９０８へ進む。一方、下位ビットの値が“0ビであれば、HDD１１６内のコマンドテーブルへの追加コマンドの設定は不要であるため、ステップ１９０９へ進む。
【００６５】
ステップ１９０８において、ブリッジチップ１３００はホストとしての位置付けとなる。具体的には、サブCPU１４０１が、HDD１１６へセットアップコマンド１６１０を転送し、HDD１１６との間でベンダーユニークコマンドを追加する一連の処理を実行する。この一連の処理は、実施例１で述べたとおりであるので、ここでは説明を省略する。
【００６６】
そして、ステップ１９０９で、サブCPU１４０１は、ブリッジチップ１３００におけるすべての処理が完了した旨を、“RegDH-FIS”を用いてメインコントローラ１００へ通知する。
【００６７】
以上で、本実施例における、セットアップコマンド１６１０に従った追加コマンドの設定処理が終了する。これにより、例えば、メインコントローラ１００からブリッジチップ１３００を経由して、ベンダーユニークコマンドをHDD１１６に転送することも可能となるし、HDD１１６に対して新たなベンダーユニークコマンドを設定することも可能となる。
【００６８】
本実施例によれば、SATA−SATAブリッジ構成において、セットアップコマンドによる追加コマンドの設定先を、ブリッジチップのみにするのか、その先のデバイスのみにするのか、その両方にするのかを任意に選択することが可能となる。
【００６９】
＜その他の実施例＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【図１】
2018022283.tif 000003
【図２】
2018022283.tif 000004
【図３】
2018022283.tif 000005
【図４】
2018022283.tif 000006
【図５】
2018022283.tif 000007
【図６】
2018022283.tif 000008
【図７】
2018022283.tif 000009
【図８】
2018022283.tif 000010
【図９】
2018022283.tif 000011
【図１０】
2018022283.tif 000012
【図１１】
2018022283.tif 000013
【図１２】
2018022283.tif 000014
【図１３】
2018022283.tif 000015
【図１４】
2018022283.tif 000016
【図１５】
2018022283.tif 000017
【図１６】
2018022283.tif 000018
【図１７】
2018022283.tif 000019
【図１８】
2018022283.tif 000020
【図１９】
2018022283.tif 000021