(57)【要約】 【課題】ホストと記憶装置との間で安定な通信を可能とする記憶装置とその制御方法を提供する。【解決手段】不揮発性メモリ３１は、通信の速度情報を記憶する。インターフェース４２はホスト２１と通信する。レジスタ４２ａは、インターフェース４２に設けられている。制御部４４は、不揮発性メモリ及びインターフェースを制御する。制御部４４は、起動時、不揮発性メモリから速度情報を読み出してレジスタに設定し、インターフェースは、レジスタに設定された速度情報に基づきホストと通信する。【選択図】図１
2013156929.tif 000002
【特許請求の範囲】
【請求項１】
通信の速度情報を記憶する不揮発性メモリと、
ホストと通信するインターフェースと、
前記インターフェースに設けられたレジスタと、
前記不揮発性メモリ及び前記インターフェースを制御する制御部と
を具備し、
前記制御部は、起動時、前記不揮発性メモリから前記速度情報を読み出して前記レジスタに設定し、
前記インターフェースは、前記レジスタに設定された前記速度情報に基づき前記ホストと通信することを特徴とする記憶装置。
【請求項２】
前記制御部は、前記ホストから第１のコマンドが発行された場合、前記第１のコマンドに含まれる通信の速度情報を前記不揮発性メモリに記憶することを特徴とする請求項１記載の記憶装置。
【請求項３】
前記不揮発性メモリから読み出された前記速度情報を記憶する揮発性メモリをさらに具備し、
前記制御部は、前記ホストから第２のコマンドが発行された場合、前記揮発性メモリに記憶された前記速度情報を読み出し、
前記インターフェースは、前記速度情報を前記ホストに送信することを特徴とする請求項１記載の記憶装置。
【請求項４】
前記速度情報は、ホストがサポートしている通信の速度情報であることを特徴とする請求項２又は３記載の記憶装置。
【請求項５】
前記インターフェースは、シリアルＡＴＡであることを特徴とする請求項４記載の記憶装置。
【請求項６】
起動時に不揮発性メモリから通信の速度情報を読み出してインターフェースのレジスタに設定し、
前記インターフェースは、前記レジスタに設定された前記速度情報に基づきホストと通信することを特徴とする記憶装置の制御方法。
【請求項７】
前記ホストから第１のコマンドが発行されたとき、前記第１のコマンドに含まれる通信の速度情報を前記不揮発性メモリに記憶させることを特徴とする請求項６記載の記憶装置の制御方法。
【請求項８】
前記起動時に前記不揮発性メモリから読み出された前記速度情報を揮発性メモリに記憶させ、
前記ホストから第２のコマンドが発行された場合、前記揮発性メモリに記憶された前記速度情報を読み出し、前記ホストに送信することを特徴とする請求項６記載の記憶装置の制御方法。
【請求項９】
前記速度情報は、ホストがサポートしている通信の速度情報であることを特徴とする請求項７又は８記載の記憶装置の制御方法。
【請求項１０】
前記インターフェースは、シリアルＡＴＡであることを特徴とする請求項９記載の記憶装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばＳＳＤ（Solid-State Drive）などのように、シリアルＡＴＡ（Serial AT Attachment 規格によるインターフェース仕様）(以下、ＳＡＴＡと称す)を利用する記憶装置とその制御方法に関する。
【背景技術】
【０００２】
例えばＳＡＴＡインターフェースは、通信プロトコルや通信速度などが規格により定められており、ＳＳＤやハードディスク装置のようなＳＡＴＡインターフェースを使用するＳＡＴＡデバイスや、これを利用するホストは、この規格に基づく機能を実装している。
【０００３】
しかし、ＳＡＴＡ規格は、その一部にデバイスやホストを開発するベンダーが独自に仕様を定義することができる部分や、任意の仕様を許容する曖昧な規格がある。このため、ＳＡＴＡデバイスとホストとの間で通信を行う場合、通信が不安定となり、通信に失敗することがある。この場合、ＳＡＴＡデバイスが使用できないこととなる。ＳＡＴＡデバイスは、例えば記憶装置に適用されることが多いため、ＳＡＴＡデバイスが使用できないことは、記憶装置にデータを保存したり、記憶装置からデータを読み出したりすることができなくなるため大きな問題である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−１１６５９号公報
【特許文献２】特開２００６−４０２９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本実施形態は、ホストと記憶装置との間で安定な通信を可能とする記憶装置とその制御方法を提供しようとするものである。
【課題を解決するための手段】
【０００６】
本実施形態の記憶装置によれば、通信の速度情報を記憶する不揮発性メモリと、ホストと通信するインターフェースと、前記インターフェースに設けられたレジスタと、前記不揮発性メモリ及び前記インターフェースを制御する制御部とを具備し、前記制御部は、起動時、前記不揮発性メモリから前記速度情報を読み出して前記レジスタに設定し、前記インターフェースは、前記レジスタに設定された前記速度情報に基づき前記ホストと通信することを特徴とする。
【図面の簡単な説明】
【０００７】
【図１】本実施形態に係るＳＡＴＡデバイスとしての記憶装置を示す構成図。
【図２】本実施形態に係る速度情報の設定動作を説明するために示す図。
【図３】図１に示す記憶装置の起動時の動作を説明するために示す図。
【図４】ホストと記憶装置とのネゴシエーション動作を説明するために示すタイミング図。
【図５】記憶装置に記憶された速度情報を確認する動作を説明するために示す図。
【図６】ネゴシエーション動作の比較例を示すタイミング図。
【発明を実施するための形態】
【０００８】
以下、実施の形態について、図面を参照して説明する。
【０００９】
（第１の実施形態）
図１は、第１の実施形態が適用されるＳＡＴＡデバイスを示すものであり、本実施形態を例えばＳＳＤに適用した場合を示している。
【００１０】
ＳＳＤ１１は、ホスト２１にＳＡＴＡケーブル５１により接続され、ホスト２１からのアクセスに応じた処理を行う。ホスト２１は、例えばパーソナルコンピュータなどにより構成される。
【００１１】
ＳＳＤ１１は、記憶装置としてのＮＡＮＤフラッシュメモリ３１と、ＳＳＤコントローラ４１を有している。
【００１２】
ＮＡＮＤフラッシュメモリ３１は、例えば積層ゲート構造のメモリセル、又はＭＯＮＯＳ構造のメモリセルにより構成されている。このＮＡＮＤフラッシュメモリ３１は、例えばユーザデータや、アプリケーションソフトウェア、ＳＳＤを記憶領域として利用するシステムソフトウェアを記憶する。さらに、ＮＡＮＤフラッシュメモリ３１は、ＳＡＴＡデバイスのプロパティや通信速度の情報を記憶するデバイスプロパティ領域を有している。
【００１３】
ＳＳＤコントローラ４１は、例えばＳＡＴＡインターフェース４２、ＮＡＮＤインターフェース４３、ＣＰＵ４４、ＲＯＭ（Read only Memory）４５、ＲＡＭ（Random Access Memory）４６、バッファ４７により構成されている。
【００１４】
ＳＡＴＡインターフェース４２は、ＳＡＴＡの仕様に従って、ＳＤＤコントローラ４１とホスト２１との間のインターフェース処理を行う。このＳＡＴＡインターフェース４２は、後述する速度情報を保持するレジスタ４２ａを有している。また、ＮＡＮＤインターフェース４３は、ＮＡＮＤフラッシュメモリ３１との間のインターフェース処理を行う。
【００１５】
ＣＰＵ４４は、ＳＳＤ１１全体の制御を司るものである。ＣＰＵ４４は、ホスト２１からライト（書き込み）コマンド、リード（読み出し）コマンド、イレース（消去）コマンドなどを受けてＮＡＮＤフラッシュメモリ３１上の領域をアクセスしたり、バッファ４７を介してデータ転送処理を制御したりする。
【００１６】
ＲＯＭ４５は、ＣＰＵ４４により使用されるＩＰＬ（Initial Program loader）、制御プログラム、コマンドを処理するコマンド処理モジュール、デバイスを初期化する初期化処理モジュールなどのファームウェアを格納する。
【００１７】
ＲＡＭ４６は、ＣＰＵ４４の作業エリアとして使用され、制御プログラムやIdentify Device （Ｉ．Ｄ．）テーブル等のテーブルを記憶する。このIdentify Device テーブルは、ＳＡＴＡデバイスを識別する情報を有し、Identify Device テーブルには、例えば後述する速度情報も設定される。
【００１８】
バッファ４７は、ホスト２１から送られてくるデータを、例えばＮＡＮＤフラッシュメモリ３１へ書き込む際、一定量のデータを一時的に記憶したり、ＮＡＮＤフラッシュメモリ３１から読み出されたデータをホスト２１へ送り出す際、一定量のデータを一時的に記憶したりする。
【００１９】
ホスト２１は、図示せぬＣＰＵ、メモリ、及びＳＡＴＡインターフェース６１を有している。ＳＡＴＡインターフェース６１は、ＳＡＴＡの仕様に従って、ホスト２１とＳＤＤコントローラ４１との間のインターフェース処理を行う。ＳＡＴＡインターフェース６１は、後述する速度情報を保持するレジスタ６１ａを有している。
【００２０】
図２は、本実施形態に係るＳＡＴＡデバイスにおいて、通信速度を設定するための速度情報を更新する際の動作を示している。
【００２１】
一般に、ＳＡＴＡデバイスは、ホストと通信を行う場合、スピードネゴシエーションが実行され、ＳＡＴＡデバイスとホストにおいて、通信可能な速度が設定される。しかし、ＳＡＴＡデバイスとホストとの間で通信を行う際に、スピードネゴシエーションが不安定であったり、失敗することがある。
【００２２】
そこで、本実施形態においては、先ず、ホスト２１からＳＳＤ１１に通信の速度情報を含むコマンドが送られ、このコマンドに基づき、速度情報がＳＳＤ１１のＮＡＮＤフラッシュメモリ３１に記憶される。この速度情報の設定は、例えばＳＡＴＡデバイスの製造時、製造者により、又は出荷後、ユーザにより行うことが可能とされている。
【００２３】
すなわち、図２に示すように、例えば製造時、ＳＳＤ１１のＳＡＴＡインターフェース４２ａとホスト２１のＳＡＴＡインターフェース６１ａとの間で予め設定された通信速度により、ネゴシエーションが確定した状態において、先ずホスト２１からＳＡＴＡデバイスの通信速度を設定するためのコマンドが発行される（Ｓ１）。このコマンドは、例えばコマンドを識別するためのコマンド名（ＣＮ）、及びデータとしての速度情報により構成されている。この速度情報は、ホスト２１がサポートしている速度情報である。
【００２４】
ホスト２１から出力されたコマンドがＳＡＴＡケーブル５１を介してＳＳＤ１１のＳＡＴＡインターフェース４２により受信されると、ＳＡＴＡインターフェース４２からＣＰＵ４４にコマンドの受信が通知される（Ｓ２）。
【００２５】
ＣＰＵ４４は、この通知に従い受信したコマンドをコマンド処理モジュールにより処理する（Ｓ３）。すなわち、コマンド名が判別され、コマンドに含まれる速度情報がＮＡＮＤインターフェース４３を介してＮＡＮＤフラッシュメモリ３１に書き込まれる（Ｓ４）。つまり、速度情報は、ＮＡＮＤフラッシュメモリ３１のデバイスプロパティ領域に記憶される。
【００２６】
ＮＡＮＤフラッシュメモリ３１のデバイスプロパティの領域に速度情報が記憶されると、ＣＰＵ４４は、ＳＡＴＡインターフェース４２に、速度情報の設定が正常終了したことを示す情報を含むコマンド応答を供給する（Ｓ５）。
【００２７】
ＳＡＴＡインターフェース４２は、コマンド応答を、ＳＡＴＡケーブル５１を介してホスト２１に送信する（Ｓ６）。
【００２８】
このようにして、ＳＡＴＡデバイスとしてのＳＳＤ１１に通信の速度情報が設定される。
【００２９】
また、製品の出荷後、ユーザにより、上記コマンドを発行し、ＮＡＮＤフラッシュメモリのデバイスプロパティ領域に記憶されている速度情報を変更することも可能である。例えば、製品の出荷後、初回起動時にネゴシエーションが確立したときの速度情報を、ＮＡＮＤフラッシュメモリに記憶することにしてもよい。これにより、次回起動以降はＮＡＮＤフラッシュメモリに記憶された速度情報に基づいてネゴシエーションが開始される。
【００３０】
図３は、ＳＡＴＡデバイスの起動時の動作を示している。
【００３１】
ＳＳＤ１１に電源投入されると、ＣＰＵ４４は、ＩＰＬにより制御プログラム、コマンドを処理するコマンド処理モジュール、デバイスを初期化する初期化処理モジュールなどがＲＯＭ４５から読み出され、ＲＡＭ４６にロードされる。さらに、例えばＩＰＬにより、ＮＡＮＤインターフェース４３を介してＮＡＮＤフラッシュメモリ３１のデバイスプロパティ領域がアクセスされ、デバイスプロパティ領域に記憶されたプロパティなどの情報及び速度情報が読み出される（Ｓ１１）。この読み出されたプロパティなどの情報及び速度情報は、ＲＡＭ４６に記憶される。
【００３２】
この後、例えば初期化モジュールにより、ＳＳＤ１１の起動処理が実行される（Ｓ１２）。すなわち、ＲＡＭ４６に記憶された速度情報は、ＳＡＴＡインターフェース４２のレジスタ４２ａに供給されて保持される（Ｓ１３）。
【００３３】
次いで、ＣＰＵ４４からＳＡＴＡインターフェース４２にネゴシエーション開始が指示される（Ｓ１４）。
【００３４】
図４に示すように、ＳＡＴＡインターフェース４２は、ネゴシエーション開始の指示に基づき、例えばＯＯＢ（Out Of Band）信号を用いた初期化シーケンスを実行する。すなわち、ホスト２１のＳＡＴＡインターフェース６１は、６個の信号有り、無しにより構成される信号COMRESETを送信する。ＳＡＴＡインターフェース４２は、信号COMRESETを受信すると信号COMINITを送信する。ホスト２１のＳＡＴＡインターフェース６１は、信号COMINITを受信すると、信号COMWAKEを送信する。ＳＳＤ１１のＳＡＴＡインターフェース４２は、ホスト２１からの信号COMWAKEを受けると、信号COMWAKEをホスト２１に送信する。信号COMRESET、COMINIT、COMWAKEは、信号無しの期間（Idle 期間）がそれぞれ異なる信号である。
【００３５】
ホスト２１のＳＡＴＡインターフェース６１は、ＳＳＤ１１からの信号COMWAKEを受けると、例えば信号Ｄ１０．２を送信する。ＳＡＴＡデバイスで使用されるシリアル通信は、データのみが送信され、送信側のクロックは受信側に通知されない。このため、受信側は何等かの手段によって受信クロックを生成する必要がある。信号Ｄ１０．２は、１０ビットの数字の並びが０１…０１０１…０１０１という“０”と“１”が交互に組み合わされた信号であり、送信側の送信クロックの周期と一致した信号である。ＳＳＤ１１のＳＡＴＡインターフェース４２は、信号Ｄ１０．２を受けると、この信号によりクロック信号を生成する。
【００３６】
また、ＳＳＤ１１のＳＡＴＡインターフェース４２は、レジスタ４２ａに保持された速度情報に基づき、ＡＬＩＧＮと呼ばれるデータパターンをホスト２１に送信し、例えば５４．６μｓの間、ホスト２１からＡＬＩＧＮが送信されることを待つ。
【００３７】
ホスト２１のＳＡＴＡインターフェース６１ａは、自身がサポートする速度のＡＬＩＧＮを検出するまで、信号Ｄ１０．２を出力し、自身がサポートする速度のＡＬＩＧＮを検出した場合、これと同じ速度でＡＬＩＧＮをＳＳＤ１１に送信する。すなわち、ＳＳＤ１１のＳＡＴＡインターフェース４２から送信された自身がサポートする速度のＡＬＩＧＮを検出した場合、そのＡＬＩＧＮの速度情報をレジスタ６１ａに保持し、この保持した速度情報に基づきＡＬＩＧＮをＳＳＤ１１に送信する。
【００３８】
ＳＳＤ１１及びホスト２１において、ＳＳＤ１１及びホスト２１で使用する速度と同じ速度のＡＬＩＧＮが検出された場合、ＳＹＮＣと呼ばれるデータパターンがＳＳＤ１１及びホスト２１からそれぞれ送信される。この状態において、ネゴシエーションが完了される。ネゴシエーションにより確定された通信速度は、ＳＳＤ１１又はホスト２１電源が切られるまでレジスタ４２ａ、６１ａに保持される。
【００３９】
上記ネゴシエーションが完了した後、図３に示すように、ＳＳＤ１１のＣＰＵ４４からＳＡＴＡインターフェース４２にコマンド受信が開始可能であることが設定される（Ｓ１６）。ＳＡＴＡインターフェース４２は、この設定に基づき、ホスト２１に起動が完了したことを通知する（Ｓ１７）。
【００４０】
以降、上記確定された通信速度により、ＳＳＤ１１とホスト２１の間で情報を送受信することが可能となる。
【００４１】
図５は、ホスト２１により、動作中のＳＡＴＡの通信速度を確認する場合の動作を示している。ホスト２１のＳＡＴＡインターフェース６１のレジスタ６１ａには、通信速度が保持されている。しかし、ホスト２１は、レジスタ６１ａをアクセスできるように構成されていない。このため、ホスト２１は、予め設定されたコマンドを用いて、ＳＡＴＡデバイスから通信速度を読み出し確認する。
【００４２】
すなわち、ホスト２１は、動作中のＳＡＴＡの通信速度を確認する場合、IDENTIFY DEVICE コマンドを発行する（Ｓ２１）。このコマンドは、例えばＲＡＭ４６に記憶されたIDENTIFY DEVICEテーブルを読み出すコマンドである。
【００４３】
ＳＡＴＡインターフェース４２は、IDENTIFY DEVICE コマンドを受けるとＣＰＵ４４にコマンドを受信したことを通知する（Ｓ２２）。
【００４４】
ＣＰＵ４４は、コマンド処理モジュールにより、受信したコマンドを解析し、処理する（Ｓ２３）。
【００４５】
すなわち、ＣＰＵ４４は、IDENTIFY DEVICE コマンドに基づき、ＲＡＭ４６のIdentify Device テーブルのデータを読み出す（Ｓ２４）。
【００４６】
このIdentify Device テーブルには、ＮＡＮＤフラッシュメモリ３１から読み出された速度情報が記憶されており、ＣＰＵ４４は、この速度情報を含むIdentify Device テーブルをＳＡＴＡインターフェース４２に供給する（Ｓ２５）。
【００４７】
ＳＡＴＡインターフェース４２は、供給されたIdentify Device テーブルをホスト２１に送信する（Ｓ２６）。
【００４８】
この後、ＣＰＵ４４は、IDENTIFY DEVICE コマンドが正常に終了したことを示すデータをＳＡＴＡインターフェース４２に設定する（Ｓ２７）。
【００４９】
ＳＡＴＡインターフェース４２は、設定されたデータをコマンド応答としてホスト２１に送信する（Ｓ２８）。
【００５０】
このような動作により、ホスト２１は、Identify Device テーブルに含まれる速度情報に基づき、ＳＡＴＡデバイスの速度情報を確認することができる。
【００５１】
上記実施形態によれば、ＳＳＤ１１は、ホスト２１がサポートしているＳＡＴＡデバイスとの通信速度情報を、ＮＡＮＤフラッシュメモリ３１に記憶し、ＳＳＤ１１の起動時に、ＮＡＮＤフラッシュメモリ３１に記憶された速度情報を読み出してＳＡＴＡインターフェース４２のレジスタ４２ａに設定し、ホスト２１とのネゴシエーションにおいて、レジスタ４２ａに設定された速度情報に基づきＡＬＩＧＮをホスト２１に送信する。また、ホスト２１は、受信したＡＬＩＧＮの速度情報が、ホスト２１がサポートする速度情報と同一であるため、この速度情報に基づきＡＬＩＧＮをＳＡＴＡデバイスに送信することにより、ネゴシエーションを完了することができる。したがって、ホスト１１は、ホスト１１がサポートする速度によりＳＳＤ１１からＡＬＩＧＮが送られてくるため、素早く同じ速度でＡＬＩＧＮを送信してネゴシエーションを完了することができる。このため、ＳＡＴＡの速度ネゴシエーションを確実、且つ短時間に行うことが可能である。したがって、ホスト２１とＳＳＤ１１との間において、通信が不安定となることを防止でき、ＳＳＤ１１の書き込み、読み出し動作を安定に保持することが可能である。
【００５２】
これに対して、図６に示す一般的なＳＡＴＡの速度ネゴシエーションと実施形態とを比較する。図６に示すネゴシエーション動作は、ホスト及びＳＡＴＡデバイスからCOMWAKEが送信された以降の動作を示している。
【００５３】
図６に示す一般的なネゴシエーションの場合、ホストから信号Ｄ１０．２が送信された後、ＳＡＴＡデバイスから例えばそのデバイスの最高速度でＡＬＩＧＮが送信される。すなわち、ＳＡＴＡデバイスは、ホストがサポートしている速度を知ることができないため、先ず、ＳＡＴＡデバイスの最高速度でＡＬＩＧＮを送信する。ＳＡＴＡデバイスは、設定時間としての５４．６μｓの間、ホストから同一の速度のＡＬＩＧＮが送信されることを待つが、設定時間に達してもホストからＡＬＩＧＮが送信されない場合、速度を低下して再度ＡＬＩＧＮを送信する。このような動作が、ホストからＡＬＩＧＮが送信されるまで実行される。
【００５４】
このように、ＳＡＴＡデバイスにおいて、ホストがサポートしている速度情報を知ることができない場合、起動の度にＳＡＴＡデバイスがサポートする最高速度でのＡＬＩＧＮ送信からチャレンジすることになり、ネゴシエーションに時間を要する。これに対して、本実施形態の場合、ＳＡＴＡデバイスのＮＡＮＤフラッシュメモリ３１に、ホストがサポートしている速度情報を記憶しておくことにより、電源が切られた後も速度情報がＮＡＮＤフラッシュメモリ３１内に保持される。したがって、電源が投入された後、当該速度情報に基づいてネゴシエーションが開始されるため、高速、且つ確実にネゴシエーションを実行することが可能である。
【００５５】
また、上記実施形態によれば、ホスト２１から速度情報を変更するためのコマンドを発行することにより、ＮＡＮＤフラッシュメモリのデバイスプロパティ領域に記憶される速度情報を変更することがきる。このため、例えば接続先のホストが変更された場合においても、接続先のホスト仕様に合わせて速度情報を変更し、高速、且つ確実にネゴシエーションを実行することが可能である。
【００５６】
尚、上記実施形態の説明は、実施形態をＳＡＴＡデバイスとしのＳＳＤに適用した場合について説明した。しかし、ＳＳＤに限定されるものではなく、ハードディスクなどに適用することが可能である。
【００５７】
また、本実施形態は、ＳＡＴＡデバイスに限定されるものではなく、例えばＳＡＴＡコントローラ、インターフェースコントローラ、ＳＡＳ（Serial Attached SCSI）、ＰＣＩ(Programmable Communications Interface)に本実施形態を適用することも可能である。
【００５８】
その他、本発明は上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【００５９】
１１…ＳＳＤ、２１…ホスト、３１…ＮＡＮＤフラッシュメモリ、４１…ＳＳＤコントローラ、４２、６１…ＳＡＴＡインターフェース、４３…ＮＡＮＤインターフェース、４４…ＣＰＵ、４５…ＲＯＭ、４２ａ、６１ａ…レジスタ。
【図１】
2013156929.tif 000003
【図２】
2013156929.tif 000004
【図３】
2013156929.tif 000005
【図４】
2013156929.tif 000006
【図５】
2013156929.tif 000007
【図６】
2013156929.tif 000008