(57)【要約】  フラッシュメモリコントローラは、フラッシュメモリチップからのリードのためのパラメータ値を指定するリードオプション、の実行順序を示すリードパターンを保持する。フラッシュメモリコントローラは、リードコマンドに従ってフラッシュメモリチップからリードしたデータのエラー訂正を実行する。フラッシュメモリコントローラは、エラー訂正によってリードしたデータの全てのエラーを訂正できない場合、リードパターンが示す次のリードオプションをフラッシュメモリチップに指定して、フラッシュメモリチップからデータをリードする。
2016203631.tif 000002
【特許請求の範囲】
【請求項１】
データを格納する、フラッシュメモリチップと、
外部からのリード要求を解析し、リードコマンドを生成するプロセッサと、
前記プロセッサから前記リードコマンドを受け付けるフラッシュメモリコントローラと、を含み、
前記フラッシュメモリコントローラは、
前記フラッシュメモリチップからのリードのためのパラメータ値を指定するリードオプション、の実行順序を示すリードパターンを保持し、
前記リードコマンドに従って前記フラッシュメモリチップからリードしたデータの、エラー訂正を実行し、
前記エラー訂正によって前記リードしたデータの全てのエラーを訂正できない場合、前記リードパターンが示す次のリードオプションを前記フラッシュメモリチップに指定して、前記フラッシュメモリチップから前記データをリードする、フラッシュメモリデバイス。
【請求項２】
請求項１に記載のフラッシュメモリデバイスであって、
前記フラッシュメモリコントローラは、複数のリードパターンを保持し、
前記プロセッサは、リードパターンを前記フラッシュメモリコントローラに指定し、
前記フラッシュメモリコントローラは、前記リードコマンドに従った前記フラッシュメモリチップからのリードにおいて前記指定されたリードパターンを参照する、フラッシュメモリデバイス。
【請求項３】
請求項２に記載のフラッシュメモリデバイスであって、
前記プロセッサは、前記リードコマンドのアクセス先の状態に基づいて前記フラッシュメモリコントローラに指定するリードパターンを決定する、フラッシュメモリデバイス。
【請求項４】
請求項２に記載のフラッシュメモリデバイスであって、
前記プロセッサは、前記フラッシュメモリコントローラが保持する前記リードパターンを、異なるリードパターンに変更する、フラッシュメモリデバイス。
【請求項５】
請求項４に記載のフラッシュメモリデバイスであって、
前記プロセッサは、
前記フラッシュメモリコントローラが保持するリードパターンを管理し、
前記フラッシュメモリコントローラが前記指定するリードパターンを保持していない場合、前記フラッシュメモリコントローラが保持する前記リードパターンを、前記指定するリードパターンに変更する、フラッシュメモリデバイス。
【請求項６】
請求項４に記載のフラッシュメモリデバイスであって、
前記プロセッサは、
複数のリードパターンを保持し、
前記フラッシュメモリチップの複数の領域それぞれの状態に基づき、前記複数の領域それぞれのリードパターンを決定し、
前記複数のリードパターンそれぞれに対応する、前記フラッシュメモリチップ内の領域数に基づき、前記フラッシュメモリコントローラに保持させるリードパターンを前記複数のリードパターンから選択する、フラッシュメモリデバイス。
【請求項７】
請求項１に記載のフラッシュメモリデバイスであって、
前記フラッシュメモリコントローラは、
前記フラッシュメモリチップからリードしたデータをコードワード毎にエラー訂正し、
異なるリードオプションによりリードされたデータを保持し、
前記異なるリードオプションでリードされたデータにおいて訂正されたコードワードのユーザデータをマージして、前記リードコマンドに対応する全訂正されたデータを生成する、フラッシュメモリデバイス。
【請求項８】
請求項１に記載のフラッシュメモリデバイスであって、
前記フラッシュメモリコントローラは、前記フラッシュメモリチップからリードしたデータをコードワード毎にエラー訂正し、
前記プロセッサは、異なるオプションでリードされたデータにおいて訂正されたコードワードのユーザデータをマージして、前記リードコマンドに対応するリードデータを生成する、フラッシュメモリデバイス。
【請求項９】
複数のフラッシュメモリデバイスと、
前記複数のフラッシュメモリデバイスに対して、Ｉ／Ｏ要求を発行するストレージコントローラと、を含むストレージ装置であって、
前記複数のフラッシュメモリデバイスのそれぞれは、
データを格納する、フラッシュメモリチップと、
外部からのリード要求を解析し、リードコマンドを生成するプロセッサと、
前記プロセッサが実行するプログラムを格納するメモリと、
前記プロセッサから前記リードコマンドを受け付けるフラッシュメモリコントローラと、を含み、
前記フラッシュメモリコントローラは、
前記フラッシュメモリチップからのリードのためのパラメータ値を指定するリードオプション、の実行順序を示すリードパターンを保持し、
前記リードコマンドに従って前記フラッシュメモリチップからリードしたデータの、エラー訂正を実行し、
前記エラー訂正によって前記リードしたデータの全てのエラーを訂正できない場合、前記リードパターンが示す次のリードオプションを前記フラッシュメモリチップに指定して、前記フラッシュメモリチップから前記データをリードする、ストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリデバイスに関する。
【背景技術】
【０００２】
近年、高速にリード／ライトすることが可能なフラッシュメモリを記憶媒体とするフラッシュメモリデバイスが普及している。フラッシュメモリデバイスは、フラッシュメモリの微細化の進展に伴って低価格化している一方、格納したデータのエラー発生率が増加している。そのため、フラッシュメモリデバイスは、エラー訂正機能を使用したデータ回復を必要とする。さらに、フラッシュメモリチップの状態によって、一回のリードによるデータが、訂正限界値を超えるエラーを含むことがある。【０００３】
そこで、信頼性の向上のために、フラッシュメモリデバイスは、リード時に使用するパラメータを変更して再リードを行う、リードリトライ機能を搭載している。リードリトライ機能によって、一回のリードによるデータ内のエラーを訂正限界値以下に抑えてデータをリードできる可能性を高めることができる。例えば、米国特許出願公開２０１３／０２３８８３６号は、プロセッサが、リードパラメータを探索し、フラッシュメモリインタフェースにリードパラメータの転送を指示することを開示する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開２０１３／０２３８８３６号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、リードリトライの結果をプロセッサが受け取り、リードパラメータを変更してリードリトライをさらに指示する構成は、プロセッサのオーバーヘッドが大きく、リードリトライに多くの時間を必要とする。【０００６】
また、フラッシュメモリはデータの読み出し／書込みをページ単位で実行するという制約がある。フラッシュメモリチップのあるページからリードされたページデータが訂正できないエラーを含む場合、当該ページデータは訂正不可能であり、フラッシュメモリデバイス単体ではデータを回復できない。このため、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）機能による他のフラッシュメモリデバイスのデータを使用したデータ回復のための時間を必要とする。以上のように、エラー訂正に時間がかかると、フラッシュメモリの高速性を活かすことができない。
【課題を解決するための手段】
【０００７】
本発明の代表的な一例は、データを格納する、フラッシュメモリチップと、外部からのリード要求を解析し、リードコマンドを生成するプロセッサと、前記プロセッサから前記リードコマンドを受け付けるフラッシュメモリコントローラと、を含み、前記フラッシュメモリコントローラは、前記フラッシュメモリチップからのリードのためのパラメータ値を指定するリードオプション、の実行順序を示すリードパターンを保持し、前記リードコマンドに従って前記フラッシュメモリチップからリードしたデータの、エラー訂正を実行し、前記エラー訂正によって前記リードしたデータの全てのエラーを訂正できない場合、前記リードパターンが示す次のリードオプションを前記フラッシュメモリチップに指定して、前記フラッシュメモリチップから前記データをリードする、フラッシュメモリデバイスである。
【発明の効果】
【０００８】
本発明の一態様によれば、フラッシュメモリデバイスにおけるリードを高速化できる。
【図面の簡単な説明】
【０００９】
【図１】計算機システムの概略構成を模式的に示す。
【図２Ａ】ＳＳＤの構成例を示す。
【図２Ｂ】ＳＳＤのメモリが格納する制御情報を示す。
【図３】劣化度管理テーブルの構成例を示す。
【図４】リードパターン構成テーブルの構成例を示す。
【図５】エラービットの原因とリードオプションとの関係例を示す。
【図６】劣化度−リードパターン対応テーブルの構成例を示す。
【図７】リードパターン管理テーブルの構成例を示す。
【図８】ストレージコントローラからのリード要求に応じた、デバイスコントローラにおけるプロセッサの処理のフローチャートを示す。
【図９】プロセッサからのリードコマンドに応じた、フラッシュメモリコントローラの処理のフローチャートを示す。
【図１０】ページデータの構成を示す。
【図１１】リードオプションと、コードワードのエラー訂正成否（可能／不可能）と、の関係例を示す。
【図１２】異なるリードオプションにおいて訂正されたコードワードのユーザデータのマージを模式的に示している。
【図１３】異なるリードオプションにおいて訂正されたコードワードのユーザデータをマージする処理を模式的に示す。
【図１４】プロセッサからのリードコマンドに応じた、フラッシュメモリコントローラの処理のフローチャートを示す。
【図１５】プロセッサがコードワードのユーザデータをマージする例を示す。
【図１６】プロセッサがコードワードのユーザデータをマージする他の例を示す。
【図１７】リード要求に応じたリードパターンの選択を模式的に示す。
【図１８】リードパターンレジスタに格納されるリードパターンの書き換えを模式的に示す。
【図１９】フラッシュメモリチップの状態検査及び検査結果に応じた劣化度管理テーブルの更新のフローチャートを示す。
【図２０】フラッシュメモリコントローラが格納するリードパターンの更新のフローチャートを示す。
【発明を実施するための形態】
【００１０】
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。特に説明がない場合、各図において共通の構成については同一の参照符号が付されている。
【００１１】
以下において、フラッシュメモリチップを含むフラッシュメモリデバイス及びフラッシュメモリデバイスを含むストレージ装置が開示される。フラッシュメモリデバイスは、プロセッサと、フラッシュメモリコントローラとを含む。プロセッサは、上位装置からのリード要求を解析してリードコマンドを生成し、フラッシュメモリコントローラに発行する。
【００１２】
フラッシュメモリコントローラは、リードコマンドに従って、フラッシュメモリチップからデータをリードする。フラッシュメモリコントローラは、リードオプションとアクセス先となる物理領域を指定して、フラッシュメモリチップにリードを指示する。フラッシュメモリチップは、リードオプションが対応するリードパラメータを使用して、データをリードする。
【００１３】
フラッシュメモリコントローラは、リードオプションの実行順序を示すリードパターンを保持している。フラッシュメモリコントローラは、リードパターンに従って、フラッシュメモリチップにリードオプションを指示して、リードを実行する。一回のリードによる全データが訂正可能である場合、リードは完了する。フラッシュメモリコントローラがリードパターンを保持することにより、リードリトライにおけるプロセッサの介在回数（オーバーヘッド）を削減し、リードを高速化できる。
【００１４】
一例において、フラッシュメモリコントローラは、複数のリードパターンを保持し、プロセッサは、アクセス先領域の状態に応じたリードパターンを指定する。フラッシュメモリコントローラは、指定されたリードパターンに従って、異なるリードオプションのリードリトライを実行する。これにより、リードリトライ回数を低減し、リードを高速化できる。
【００１５】
一例において、フラッシュメモリデバイスは、エラー訂正単位（コードワード）毎にデータを回復し、さらに、コードワード毎にデータとエラー訂正成否情報を管理する。フラッシュメモリチップのリードはページ単位であり、複数コードワードが１ページ内に存在する。一つのコードワードは、ユーザデータとエラー訂正コードで構成される。フラッシュメモリデバイスは、コードワード毎にデータを回復し、複数回のリードによる回復後のデータをマージする。これにより、データ回復できる可能性を高め、さらに、リードリトライ回数を低減できる。
【００１６】
以下に説明する例は、リードパターンに従ったリードリトライ及びコードワードのユーザデータのマージの双方を実行するが、フラッシュメモリデバイスは、いずれか一方の機能のみが実装されていてもよい。以下に説明する例は、フラッシュメモリコントローラに複数のリードパターンを保持するが、フラッシュメモリコントローラが保持するリードパターンは一つのみでもよい。この場合、プロセッサからのリードパターンの指定は省略できる。
【００１７】
図１は、本実施形態の計算機システムの概略構成を模式的に示す。図１において、同構成の要素に対する参照符号は省略されている。本計算機システムは、ホスト計算機１０及びストレージ装置１２を含む。ホスト計算機１０及びストレージ装置１２は、データネットワーク１１により接続されている。各ホスト計算機１０は、ストレージ装置１２のリソースにアクセスし、業務を行う装置である。
【００１８】
データネットワーク１１はデータ通信用のネットワークであって、一例において、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）である。データネットワーク１１は、データ通信用のネットワークであれば、ＳＡＮと異なるネットワークでもよい。
【００１９】
ストレージ装置１２は、記憶デバイス１３４、１３５及びストレージコントローラ１２０を含む。本例において、ストレージ装置１２は、２種類の記憶デバイスを含み、具体的には、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）１３４及びＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１３５を含む。ストレージコントローラ１２０は、記憶デバイスの上位装置である。
【００２０】
ストレージコントローラ１２０は、プロセッサ１２２、メモリ１２３、パリティ演算回路１２５、複数のディスクインタフェース（Ｉ／Ｆ）１２７、及び複数のホストインタフェース（Ｉ／Ｆ）１２１を含む。これらは、相互接続スイッチ（ＳＷ）１２６で通信可能に接続されている。
【００２１】
ホストインタフェース１２１は、それぞれ、データネットワーク１１に接続し、ネットワーク１１での通信に用いられるプロトコルを、ストレージコントローラ１２０内部で用いられるプロトコルに変換する機能を有する。
【００２２】
プロセッサ１２２は、メモリ１２３に格納されているストレージ制御プログラム及び必要な他のプログラムを実行することで、ホスト計算機１０からのＩ／Ｏアクセス（リード／ライト）の制御及びストレージ装置１２のボリュームの管理制御を含む所定の機能を実現する。
【００２３】
メモリ１２３は、プロセッサ１２２が実行するプログラム及びその制御データを格納する。メモリ１２３は、さらに、ホスト計算機１０のユーザデータ（ホストデータ）を、キャッシュ領域１２４に一時的に格納する。具体的には、キャッシュ領域１２４は、ホスト計算機１０からのライトデータを一時的に格納して、その後、記憶デバイス１３４、１３５に転送し、記憶デバイス１３４、１３５からホスト計算機１０に転送されるリードデータを一時的に格納する。
【００２４】
パリティ演算回路１２５は、ホスト計算機１０からのホストデータから、ＲＡＩＤ機能のためのパリティデータを生成する。記憶デバイス１３４のグループ及び記憶デバイス１３５のグループは、それぞれ、冗長構成（ＲＡＩＤ構成）を有し、生成されたパリティデータは、ホストデータと共に記憶デバイスに格納される。パリティ演算回路１２５は、パリティデータを使用して、記憶デバイスから正確にリードできなかったホストデータを回復する。
【００２５】
ディスクインタフェース１２７は、それぞれ、同一種類の記憶デバイスのグループに接続し、記憶デバイスグループとキャッシュ領域１２４との間において、ライトデータ及びリードデータを仲介する。ディスクインタフェース１２７は、記憶デバイス１３４又は１３５とおいて用いられる通信プロトコルと、ストレージコントローラ１２０で用いられるプロトコルとの間の変換を行う。記憶デバイス１３４又は１３５のプロトコルは設計に依存する。
【００２６】
各ディスクインタフェース１２７は、バッファ１２８及びＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）コントローラ（ＳＡＳ  ＣＴＬ）１２９を含む。バッファ１２８は、記憶デバイスに書き込むライトデータ及び記憶デバイスから読み出したリードデータを一時的に格納する。ＳＡＳコントローラ１２９は、ＳＡＳプロトコルに従って記憶デバイス１３４又は１３５と通信する。
【００２７】
図２Ａは、ＳＳＤ１３４の構成例を示す。ＳＳＤ１３４はフラッシュメモリ（ＦＭ）を記憶媒体として使用するフラッシュメモリデバイスである。図２Ａの例において、ＳＳＤ１３４は、デバイスコントローラ１５０と、複数のフラッシュメモリチップ１６１と、を含む。
【００２８】
フラッシュメモリにおいては、ページ単位でデータのリード及びライトが実行される。ライトは、消去済みページに対して実行される。フラッシュメモリにおいては、ブロック単位でデータが消去される。ブロックは複数のページで構成される。また、フラッシュメモリにおいては、データを上書きできないという特性がある。ページにデータを上書きする場合、デバイスコントローラ１５０は、当該ページとは異なるページにデータをライトし、当該ページの物理アドレスと論理アドレスのマッピングを更新する。
【００２９】
デバイスコントローラ１５０は、ＳＡＳコントローラ（ＳＡＳ  ＣＴＬ）１５１、プロセッサ１５３、メモリ１５４、及びフラッシュメモリ（ＦＭ）コントローラ１５５を含む。これらは、内部接続スイッチ（ＳＷ）１５２で通信可能に接続されている。フラッシュメモリコントローラ１５５は、制御部１５６、マイクロプログラムインタフェース１５７、データバッファ１５８、ＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋｉｎｇ  ａｎｄ  Ｃｏｒｒｅｃｔｉｏｎ）演算回路１５９、及びフラッシュメモリインタフェース（ＦＭ  Ｉ／Ｆ）１６０を含む。
【００３０】
ＳＡＳコントローラ１５１は、ディスクインタフェース１２７との間で、ＳＡＳプロトコルに従って通信を行う。プロセッサ１５３は、メモリ１５４に格納されているプログラムを実行することで、ディスクインタフェース１２７からのＩ／Ｏ要求を処理する。Ｉ／Ｏ要求はリード要求又はライト要求である。
【００３１】
メモリ１２３は、プロセッサ１５３が実行するプログラム及び制御データの他、フラッシュメモリチップ１６１のデータを一時的に格納する。具体的には、メモリ１２３は、ディスクインタフェース１２７からチップ１６１に転送されるライトデータを一時的に格納して、フラッシュメモリコントローラ１５５からディスクインタフェース１２７に転送されるリードデータを一時的に格納する。
【００３２】
制御部１５６は、マイクロプログラムインタフェース１５７、データバッファ１５８、及びフラッシュメモリインタフェース１６０を制御するシーケンサである。制御部１５６は、レジスタセット１６２を含む。後述するように、レジスタセット１６２は、リードパターンを格納するリードパターンレジスタを含む。リードパターンは、リードオプションの実行順序を指示する。リードオプションは、フラッシュメモリチップ１６１によるデータリードのパラメータ値（パラメータセットの値）に対応づけられる。
【００３３】
制御部１５６は、プロセッサ１５３からのリードコマンドと共に、アクセス先アドレス及びリードパターンの指定を受け付ける。制御部１５６は、アドレスからアクセス先のフラッシュメモリチップ１６１、当該チップ１６１内のブロック及びページを決定する。制御部１５６は、アクセス先のフラッシュメモリチップ１６１からのリードにおいて、指定されたリードパターンに従ったリードオプションを、順次、フラッシュメモリチップ１６１に指示する。
【００３４】
マイクロプログラムインタフェース１５７は、プロセッサ１５３との通信のインフェースである。データバッファ１５８は、リードデータ及びライトデータを一時的に格納する。ＥＣＣ演算回路１５９は、フラッシュメモリチップ１６１に書き込まれるデータにエラー訂正のための冗長データ（エラー訂正コード）を付加する。ＥＣＣ演算回路１５９は、各ページデータのエラー訂正コードを生成し、各ページデータに付加する。後述するように、ＥＣＣ演算回路１５９は、ページデータ内のエラー訂正単位毎にエラー訂正コードを生成する。
【００３５】
ＥＣＣ演算回路１５９は、フラッシュメモリチップ１６１から読み出されたデータのエラー訂正を、エラー訂正コードを使用して実行する。エラー訂正は、検出したエラーを訂正する。
【００３６】
フラッシュメモリインタフェース１６０は、フラッシュメモリチップ１６１との通信のインタフェースであり、選択したフラッシュメモリチップ１６１にデータをライト及びリードする。後述するように、フラッシュメモリインタフェース１６０は、制御部１５６からリードオプションの指定を受け付け、フラッシュメモリチップ１６１にリードオプションを指定する。フラッシュメモリチップ１６１は、指定されたリードオプションに対応するパラメータ値において、セルから値を読み出す。
【００３７】
図２Ｂは、メモリ１５４が格納する制御情報を示す。メモリ１５４は、劣化度管理テーブル２３０、リードパターン構成テーブル２５０、劣化度−リードパターン対応テーブル２７０、及びリードパターン管理テーブル２９０を格納している。
【００３８】
図３は劣化度管理テーブル２３０の構成例を示す。劣化度管理テーブル２３０は、フラッシュメモリチップ１６１におけるブロックの劣化度に関する情報を管理する。本例においては、劣化度を計算するために参照される情報を格納する。劣化度は、セルのデータ保持能力を示し、セル電圧の本来の値からのずれに対応する。後述するように、フラッシュメモリチップ１６１からのリードにおいて使用されるリードパターンは、データを読み出す領域の劣化度に応じて決定される。なお、ブロック単位でデータが消去されるため、ブロック内のセルの劣化度はほぼ同じになる。このため、ブロックの状態を管理すれば、セルの劣化度を管理できる。
【００３９】
チップ番号欄はフラッシュメモリチップ１６１の番号を示し、ブロック番号欄は、フラッシュメモリチップ１６１内のブロックの番号を示す。累積消去回数欄は、計測開始（例えば起動時）からのブロックの総消去回数を示す。プロセッサ１５３は、ストレージコントローラ１２０から消去要求毎に累積消去回数欄を更新する。ライト日時欄は、ブロックへの最新のライト（前回ライト）の日時を示し、ストレージコントローラ１２０からのライト要求毎に更新される。
【００４０】
ＥＣＣ訂正ビット数欄は、後述するフラッシュメモリチップ１６１の状態検査において検出されたブロック内のＥＣＣ訂正ビット数を示す。リードオプション欄は、フラッシュメモリチップ１６１の状態検査において、ブロックに格納されているデータを正確にリードできたリードオプションの番号を示す。
【００４１】
リトライリード使用率欄は、現在のリードパターンを適用してからの、ページ単位の１回のリードにおけるリトライ回数の平均値を示し、ストレージコントローラ１２０からのリード要求毎に更新される。ＦＭ温度欄は、ＳＳＤ１３４に実装されている温度センサ（不図示）による温度を示し、フラッシュメモリチップ１６１の温度に対応する。
【００４２】
チップ別使用不可ブロック数は、フラッシュメモリチップ１６１内で使用できないブロック数を示す。使用リードパターン欄は、ブロックに対する次回のリードにおいて使用されるリードパターンの番号を示す。なお、劣化度管理テーブル２３０は、ブロックと異なる記憶領域単位、例えば、ページ単位で情報を保持してもよい。
【００４３】
図４は、リードパターン構成テーブル２５０の構成例を示す。リードパターン構成テーブル２５０は、リードパターンそれぞれの構成情報、つまり、リードパターンそれぞれの、リードオプション実行順序の情報を格納する。図４の例においては、２０のリードパターンが用意されており、例えば、リードオプション番号は０〜１５である。フラッシュメモリチップ１６１は、リードオプション番号それぞれに対応するパラメータ値を保持している。
【００４４】
図５は、エラービットの原因とリードオプションとの関係例を示す。図５は、異なるリードオプションにおける、セルの閾値電圧Ｖｔｈ、セル数及びリード基準電圧（Ｖ＿Ｒ）の関係を示す。図５は、４値セル（２ビットセル）のフラッシュメモリチップ１６１の例を示すが、本開示は、２値のセル又は４値より大きいセルのフラッシュメモリチップに適用できる。
【００４５】
リードオプション０及び１それぞれにおける二つのグラフは、ＬＥＶＥＬ０〜３それぞれにおける、セルの閾値電圧Ｖｔｈの分布を示す。具体的には、ＬＥＶＥＬ０〜３それぞれにおける、セルの閾値電圧Ｖｔｈとセルの数との関係を示す（閾値電圧Ｖｔｈの確率分布）。
【００４６】
セルのレベルを判定するため、三つのリード基準電圧値Ｖ＿Ｒ（ＬＥＶＥＬ１）〜Ｖ＿Ｒ（ＬＥＶＥＬ３）が設定されている。三つのリード基準電圧値は、リードオプションによって決められる。
【００４７】
セルの閾値電圧Ｖｔｈは、セルの劣化やライトからの時間経過等によって変化する。図５の例において、ＬＥＶＥＬ３の閾値電圧Ｖｔｈが低下している。リードオプション０におけるリード基準電圧値Ｖ＿Ｒ（ＬＥＶＥＬ３）は、ＬＥＶＥＬ３の閾値電圧Ｖｔｈに比較して高すぎるため、ＬＥＶＥＬ３のセルのビットエラー率が高くなり、ＥＣＣ演算回路１５９によりページデータのエラーを訂正できない可能性が高まる。
【００４８】
一方、リードオプション１は、リードオプション０よりも低いリード基準電圧値Ｖ＿Ｒ（ＬＥＶＥＬ３）を指定する。低いリード基準電圧値Ｖ＿Ｒ（ＬＥＶＥＬ３）によって、電圧変動を起こしているＬＥＶＥＬ３のセルのビットエラー率が低くなる。このように、適切なリードオプションを選択することによって、ページデータ内のビットエラー数を、ＥＣＣ演算回路１５９により訂正可能は範囲に収めることができる。
【００４９】
図６は、劣化度−リードパターン対応テーブル２７０の構成例を示す。劣化度−リードパターン対応テーブル２７０は、フラッシュメモリチップ１６１における劣化度と、適用されるリードパターンと、の間の関係を示す。劣化度は、フラッシュメモリチップ１６１内の記憶領域の状態に基づき、所定記憶領域単位で決定される。例えば、劣化度は、最新のライトからの経過時間や消去回数等のＩ／Ｏ情報（Ｉ／Ｏ履歴）やチップ温度等の物理状態情報に基づき、ブロック単位、チップ単位又はページ単位で決定される。
【００５０】
図７は、リードパターン管理テーブル２９０の構成例を示す。リードパターン管理テーブル２９０は、フラッシュメモリコントローラ１５５内のリードパターンレジスタが格納しているリードパターンを示す。リードパターンレジスタは、制御部１５６のレジスタセット１６２に含まれており、リードパターンレジスタ番号により識別される。プロセッサ１５３は、例えば、リードパターンレジスタ番号によって、使用するリードパターンを指定する。なお、プロセッサ１５３は、レジスタ番号ではなくリードパターン番号でリードパターンを指示してもよい。
【００５１】
図８は、ストレージコントローラ１２０からのリード要求に応じた、デバイスコントローラ１５０におけるプロセッサ１５３の処理のフローチャートを示す。プロセッサ１５３は、ＳＡＳコントローラ１５１を介して、リード要求を受信する（Ｓ１０１）。
【００５２】
プロセッサ１５３は、リード要求を解析し、データを読み出すフラッシュメモリチップ１６１の領域を計算する。例えば、リード要求はアクセス先アドレスを示し、プロセッサ１５３は、保持するマッピング情報を使用して、当該アドレスからアクセス先のフラッシュメモリチップ１６１並びに当該チップ１６１内のブロック及びページを特定する。
【００５３】
プロセッサ１５３は、劣化度管理テーブル２３０を参照し、アクセス先のブロックのエントリから「使用リードパターン」の値を取得する（Ｓ１０２）。プロセッサ１５３は、アクセス先の領域及びリードパターンを指定するリードコマンドを生成する（Ｓ１０３）。プロセッサ１５３は、リードパターン管理テーブル２９０を参照し、上記リードパターンを格納するリードパターンレジスタ番号を特定し、当該リードパターンレジスタ番号をリードコマンドに含める。
【００５４】
リードパターン管理テーブル２９０が上記リードパターンの番号を格納していない場合、プロセッサ１５３は、上記リードパターンの番号に最も近いリードパターン番号をリードパターン管理テーブル２９０において検索し、検索したリードパターン番号に対応するリードパターンレジスタ番号を取得する。プロセッサ１５３は、劣化度管理テーブル２３０を参照して劣化度を計算し、計算した劣化度に最も近い劣化度範囲に対応するリードパターンを、リードパターン管理テーブル２９０において検索してもよい。
【００５５】
または、プロセッサ１５３は、劣化度管理テーブル２３０の「使用リードパターン」が示すリードパターンを、リードパターン構成テーブル２５０から取得し、いずれかのリードパターンレジスタを書き換えてもよい。プロセッサ１５３は、書き換えたリードパターンレジスタの番号をリードコマンドに含める。リードパターンの書き換えは、図１８を参照して後述する。
【００５６】
プロセッサ１５３は、生成したリードコマンドを、フラッシュメモリコントローラ１５５に発行する（Ｓ１０４）。具体的には、プロセッサ１５３は、生成したリードコマンドをメモリ１５４に格納し、マイクロプログラムインタフェース１５７は、メモリ１５４から当該リードコマンドを取得する。
【００５７】
プロセッサ１５３は、フラッシュメモリコントローラ１５５からの、リード終了応答を待つ（Ｓ１０５）。リード終了応答を受信すると（Ｓ１０５：ＹＥＳ）、プロセッサ１５３は、リード終了応答を参照し、正常にリードが終了したか否か判定する（Ｓ１０６）。
【００５８】
ステップ１０６の判定結果がＹＥＳである場合、プロセッサ１５３は、メモリ１５４に格納されているデータを、ＳＡＳコントローラ１５１を介してストレージコントローラ１２０に転送する（Ｓ１０７）。ステップ１０６の判定結果がＮＯである場合、プロセッサ１５３は、エラー結果を、ＳＡＳコントローラ１５１を介してストレージコントローラ１２０に転送する（Ｓ１０８）。ストレージコントローラ１２０は、パリティ演算回路１２５によって、他のＳＳＤ１３４から読み出したデータから、読み出せなかったデータを回復できる。
【００５９】
図９は、プロセッサ１５３からのリードコマンドに応じた、フラッシュメモリコントローラ１５５の処理のフローチャートを示す。本フローチャートは、フラッシュメモリチップ１６１から１ページのデータをリードする処理を示す。制御部１５６は、マイクロプログラムインタフェース１５７を介して、リードコマンドを受信する（Ｓ１２０）。
【００６０】
制御部１５６は、リードコマンドが示すリードパターンをレジスタセット１６２から取得し、１回目のリードオプションを当該リードパターンから選択する（Ｓ１２１）。リードコマンドは、例えば、リードパターンレジスタ番号を示し、制御部１５６は、レジスタセット１６２における当該リードパターンレジスタ番号のレジスタから、リードパターンを取得する。１回目のリードオプションは、リードパターンに拠らず、予め設定された全フラッシュメモリチップに共通のリードオプションであってもよい。
【００６１】
制御部１５６は、選択したリードオプションにおいて、フラッシュメモリチップ１６１からのデータリードを実行する（Ｓ１２２）。具体的には、制御部１５６は、リードオプション番号を、チップ番号及びチップ内ページアドレスと共に指定したリードコマンドを、フラッシュメモリインタフェース１６０に送信する。フラッシュメモリインタフェース１６０は、ページアドレスとリードオプション番号を指定して、指定されたフラッシュメモリチップ１６１にリードを指示する。
【００６２】
フラッシュメモリチップ１６１からのページデータは、ＥＣＣ演算回路１５９に転送される。ＥＣＣ演算回路１５９は、ページデータのエラー訂正を実行する（Ｓ１２３）。図１０はページデータの構成を示す。ページデータは、複数のコードワードを含んで構成されている。コードワードは、ユーザデータ及びエラー訂正コード（ＥＣＣ）を含んで構成されている。コードワードはエラー訂正単位である。ＥＣＣ演算回路１５９は、ユーザデータに対するエラー訂正コードを生成してコードワードを生成し、さらに、各コードワードのエラー訂正を実行する。
【００６３】
図９に戻って、制御部１５６は、ページの全コードワードのエラーが訂正されているか判定する（Ｓ１２４）。具体的には、ＥＣＣ演算回路１５９は、エラー訂正処理を実行したデータをデータバッファ１５８に格納し、さらに、エラー訂正成否情報を制御部１５６に送信する。データは、データバッファ１５８を経由しなくてもよい。エラー訂正成否情報は、各コードワードのエラー訂正の成否を示す。エラーが検出されない場合又は検出された全エラーが訂正された場合、エラー訂正は成功である。エラービット数が訂正限界を超えており、訂正できないエラーが存在する場合、エラー訂正は失敗（不可能）である。
【００６４】
データバッファ１５８に格納されるページデータは、正常にエラー訂正されたコードワードと、エラー訂正できなかったコードワードとを含み得る。いずれかのコードワードのエラーを訂正できてない場合は、ページデータはデータバッファ１５８に格納されなくてもよい。
【００６５】
全てのコードワードのエラーが訂正できた場合（Ｓ１２４：ＹＥＳ）、制御部１５６は、リードの正常終了をプロセッサ１５３に通知する（Ｓ１２５）。プロセッサ１５３は、データバッファ１５８に格納されているデータをメモリ１５４に転送する。データは、データバッファ１５８から、メモリ１５４を介することなく、ストレージコントローラ１２０に転送されてもよい。
【００６６】
いずれかのコードワードのエラーが訂正できなかった場合（Ｓ１２４：ＮＯ）、制御部１５６は、リードパターンの全てのリードオプションを試したか判定する（Ｓ１２６）。全リードオプションを終了している場合（Ｓ１２６：ＹＥＳ）、制御部１５６は、リードのエラー終了をプロセッサ１５３に通知する（Ｓ１２５）。
【００６７】
試していないリードオプションが残っている場合（Ｓ１２６：ＮＯ）、制御部１５６は、リードパターンから次のリードオプションを選択し（Ｓ１２８）、選択したリードオプションにおけるフラッシュメモリチップ１６１からのリードを実行する（Ｓ１２２）。
【００６８】
上述のように、フラッシュメモリコントローラ１５５がリードパターンを保持し、当該リードパターンが示す実行順序に従ったリードオプションでリードを繰り返しリトライすることで、プロセッサ１５３の介在回数を削減し、リードリトライのためのオーバーヘッドを大きく低減できる。
【００６９】
図９のフローチャートにおいて、制御部１５６は、一回のリードで読み出したページデータの全コードワードのエラー訂正が可能である場合に、正常終了をプロセッサ１５３に通知する。これと異なり、制御部１５６は、異なるリードオプションでリードされ、エラー訂正されたコードワードのユーザデータをマージして、エラーを含まないページデータを形成してもよい。ここで、エラー訂正されたデータは、エラーが検出されなかったデータを含む。
【００７０】
図１１は、リードオプションと、コードワードのエラー訂正成否（可能／不可能）と、の関係例を示す。グラフ４１１〜４１４は、それぞれ、コードワード１〜コードワード４のエラービット数と、リードオプションとの関係を示す。
【００７１】
コードワード１は、リードオプション２又は３において、訂正限界以下のエラービット数を示す。コードワード２は、リードオプション０、１、４又は５において、訂正限界以下のエラービット数を示す。コードワード３は、リードオプション０において、訂正限界以下のエラービット数を示す。コードワード４は、リードオプション３、４又は５において、訂正限界以下のエラービット数を示す。
【００７２】
テーブル４１５は、リードオプションそれぞれにおける、各コードワードのエラー訂正成否を示す。正しいコードワードを得ることができた場合、当該コードワードのエラー訂正は成功であり、訂正できないエラーが存在する場合、エラー訂正は失敗（不可能）である。
【００７３】
表４１５から理解されるように、全てのコードワードを訂正できる単一のリードオプションは存在しない。しかし、全てのコードワードが、いずれかのリードオプションにおいてエラー訂正可能である。したがって、異なるリードオプションにおいてエラー訂正されたコードワードのユーザデータをマージすることで、全コードワードがエラー訂正されたページデータを形成することができる。
【００７４】
図１２は、異なるリードオプションにおいて訂正されたコードワードのユーザデータのマージを模式的に示している。リードパターン４２１に従って、異なるリードオプションでリードが繰り返される。テーブル４２２は、各リードオプションにおける各コードワードの訂正結果を示す。いずれのリードオプションのリードによっても、いずれかのコードワードが訂正不能である。しかし、各コードワードは、いずれかのリードオプションで訂正可能である。
【００７５】
テーブル４２３は、異なるリードオプションにおいて訂正されたコードワードのユーザデータをマージした場合の、ページデータにおける各コードワードの訂正成否を示す。異なるリードオプションで訂正されたコードワードのユーザデータをマージすることで、エラーを含まない正しいページデータが形成される。
【００７６】
図１３は、異なるリードオプションにおいて訂正されたコードワードのユーザデータをマージする処理を模式的に示す。図１３において、フラッシュメモリコントローラ１５５が、異なるリードオプションにおいて訂正されたコードワードのユーザデータをマージして、全エラーが訂正されたページデータを生成する。
【００７７】
ホスト計算機１０からリード要求を受信したストレージコントローラ１２０は、対応するリード要求をＳＳＤ１３４に送信する。ＳＳＤ１３４のプロセッサ１５３は、リード要求を解析し、対応するリードコマンドをフラッシュメモリコントローラ１５５に発行する。
【００７８】
フラッシュメモリコントローラ１５５の制御部１５６は、リードコマンドに応じて、リードオプションを指定して、フラッシュメモリチップ１６１からデータをリードする。リードされたデータはＥＣＣ演算回路１５９に転送され、ＥＣＣ演算回路１５９は、コードワード毎にエラー訂正処理を実行する。
【００７９】
ＥＣＣ演算回路１５９は、エラー訂正処理を実行したリードデータ（ページデータ）５０１を、データバッファ１５８に格納する。ＥＣＣ演算回路１５９は、ページデータのＥＣＣ訂正成否情報５０５を、制御部１５６に送信する。ＥＣＣ訂正成否情報５０５は、リードデータ５０１内の各コードワードのエラー訂正が成功したか失敗したかを示す。
【００８０】
制御部１５６は、ＥＣＣ訂正管理情報５０７を保持している。データバッファ１５８は、マージデータ５０３を格納する。マージデータ５０３は、リードパターンのリードオプションでの順次リードにおいてエラー訂正されたコードワードのユーザデータをマージして構成されている。訂正されたコードワードのユーザデータは、リード毎にマージデータ５０３にマージされる。これにより、データのマージに必要な記憶領域を低減できる。
【００８１】
ＥＣＣ訂正管理情報５０７は、これまでのリードにおいて、各コードワードが訂正できたか否かを示す。いずれかのリードオプションでコードワードが訂正されている場合、ＥＣＣ訂正管理情報５０７は、当該コードワードの訂正されたデータがマージデータ５０３に含まれていることを示す。いずれのリードオプションでもコードワードが訂正できていない場合、ＥＣＣ訂正管理情報５０７は、当該コードワードの訂正されたデータがマージデータ５０３に含まれていないことを示す。
【００８２】
制御部１５６は、ＥＣＣ演算回路１５９から取得したＥＣＣ訂正成否情報５０５とＥＣＣ訂正管理情報５０７とを参照して、リードデータ５０１内の訂正されたコードワードのユーザデータとマージデータ５０３とをマージする。
【００８３】
つまり、制御部１５６は、ＥＣＣ訂正成否情報５０５とＥＣＣ訂正管理情報５０７とを比較して、今回のリードでエラー訂正されたコードワードであって、マージデータ５０３に含まれないコードワードを特定する。制御部１５６は、特定した訂正されたコードワードのユーザデータをマージデータ５０３に追加する。制御部１５６は、新たに追加したコードワードの情報を、ＥＣＣ訂正管理情報５０７において更新する。または、制御部１５６は、今回のリードでエラー訂正された全てのコードワードのユーザデータを、マージデータ５０３に追加する。制御部１５６は、エラー訂正されたコードワードの情報を、ＥＣＣ訂正管理情報５０７において更新する。
【００８４】
１回のリードによるページデータの全エラーが訂正される、又は、ページデータの全ての訂正されたコードワードのユーザデータがマージデータ５０３に追加されるまで、異なるリードオプションでのリードが順次実行される。制御部１５６は、いずれかのリードオプションにおける１回のリードで、エラーを含まないリードデータ５０１を得ると、当該データをメモリ１５４に転送する。または、マージデータ５０３に全てのコードワードのユーザデータが含まれると、制御部１５６は、マージデータ５０３をメモリ１５４に転送する。
【００８５】
図１４は、図１３を参照して説明した処理のフローチャートを示す。つまり、プロセッサ１５３からのリードコマンドに応じた、フラッシュメモリコントローラ１５５の処理のフローチャートを示す。本フローにおいて、制御部１５６は、異なるリードオプションでエラー訂正されたコードワードのユーザデータをマージすることによって、エラーを含まない正しいページデータを形成する。
【００８６】
ステップＳ１４０〜Ｓ１４５は、図９におけるステップＳ１２０〜１２５と同様である。本フローにおいても、一回のリードによって全てのコードワードを訂正できた場合、当該訂正されたページデータがメモリ１５４に転送される。
【００８７】
ステップＳ１４４において、ＥＣＣ演算回路１５９からのＥＣＣ訂正成否情報５０５が、フラッシュメモリチップ１６１からリードしたページデータがエラー訂正不能なコードワードを含むことを示す場合（Ｓ１４４：ＮＯ）、制御部１５６は、リードデータ５０１内のエラー訂正されたコードワードのユーザデータとマージデータ５０３とをマージする（Ｓ１４６）。
【００８８】
つまり、制御部１５６は、エラー訂正されたコードワードであって、マージデータ５０３に格納されていないコードワードのユーザデータを、マージデータ５０３に追加する。または、制御部１５６は、エラー訂正された全てのコードワードのユーザデータを、マージデータ５０３に追加する。１回目のリードにおいては、エラー訂正が成功した全コードワードのユーザデータから、マージデータ５０３が生成される。
【００８９】
制御部１５６は、ＥＣＣ訂正管理情報５０７において、マージデータ５０３に追加したコードワードの情報を更新する（Ｓ１４７）。１回目のリードにおいて、制御部１５６は、ＥＣＣ訂正管理情報５０７を生成した後に更新する。
【００９０】
制御部１５６は、ＥＣＣ訂正管理情報５０７を参照し、ページデータの全コードワードが訂正され、マージデータ５０３に含まれているか判定する（Ｓ１４８）。全てのコードワードのユーザデータがマージデータ５０３に含まれている場合（Ｓ１４８：ＹＥＳ）、制御部１５６は、リードの正常終了通知とマージデータ５０３を送信する。
【００９１】
いずれかのコードワードのユーザデータがマージデータ５０３に含まれていない場合（Ｓ１４８：ＮＯ）、制御部１５６はステップＳ１４９に進む。ステップＳ１４９、Ｓ１５０、Ｓ１５１は、ステップＳ１２６、Ｓ１２７、Ｓ１２８と同様である。
【００９２】
上述のように、異なるリードオプションでエラー訂正されたコードワードのユーザデータをマージしてページデータを生成することで、リードエラーの蓋然性を低減することができる。フラッシュメモリコントローラ１５５がマージ処理を実行することで、プロセッサ１５３が関わる処理と比較してオーバーヘッドを低減できる。
【００９３】
上記例と異なり、フラッシュメモリコントローラ１５５に代わり、プロセッサ１５３が、訂正されたコードワードのユーザデータをマージしてもよい。フラッシュメモリコントローラ１５５にマージ機能を実装するよりも容易に、ＳＳＤ１３４において、マージ機能を設計、実装することができる。
【００９４】
図１５は、プロセッサ１５３がコードワードのユーザデータをマージする例を示す。プロセッサ１５３は、ストレージコントローラ１２０からのリード要求に対応するリードコマンドを生成し、フラッシュメモリコントローラ１５５に発行する。リードコマンドは、リードパターンを指定する。
【００９５】
フラッシュメモリコントローラ１５５は、選択したリードオプションにおいて、フラッシュメモリチップ１６１からデータを読み出し、エラー訂正を実行した後、メモリ１５４に転送する。転送されたデータは、リードデータ領域５２１に格納される。フラッシュメモリコントローラ１５５は、ＥＣＣ訂正成否情報５０５によって、ＥＣＣ訂正管理情報５０７を更新する。ＥＣＣ訂正成否情報５０５の生成及びＥＣＣ訂正管理情報５０７の更新は、図１３及び１４を参照して説明した構成と同様である。
【００９６】
フラッシュメモリコントローラ１５５は、ＥＣＣ訂正成否情報５０５をプロセッサ１５３に送信する。プロセッサ１５３は、ＥＣＣ訂正成否情報５０５を、ＥＣＣ訂正成否管理情報５２３に追加する。
【００９７】
フラッシュメモリコントローラ１５５は、リードパターンに従って、異なるリードオプションにおけるフラッシュメモリチップ１６１からのリードを繰り返す。上述のように、ＥＣＣ訂正管理情報５０７が更新され、訂正されたリードデータがリードデータ領域５２１に格納され、ＥＣＣ訂正成否情報５０５がＥＣＣ訂正成否管理情報５２３に追加される。
【００９８】
ＥＣＣ訂正管理情報５０７が、全てのコードワードがエラー訂正されたことを示すと、フラッシュメモリコントローラ１５５は、リードの正常終了をプロセッサ１５３に通知する。全てのコードワードは、１回のリード又は複数回のリードによってエラー訂正され得る。
【００９９】
プロセッサ１５３は、ＥＣＣ訂正成否管理情報５２３を参照し、リードデータ領域５２１に格納されているエラー訂正されたコードワードのユーザデータをマージし、マージデータ５２５を生成する。マージデータ５２５は、エラーを含まない正しいページデータである。プロセッサ１５３は、マージデータ５２５をストレージコントローラ１２０に転送する。なお、１回のリードで全てのコードワードがエラー訂正されている場合、マージは不要である。
【０１００】
図１６は、プロセッサ１５３がコードワードのユーザデータをマージする他の例を示す。図１５の例において、フラッシュメモリコントローラ１５５は、リードパターンに従ってリトライリードを繰り返し、全コードワードがエラー訂正されたか否か判定する。
【０１０１】
本例において、プロセッサ１５３は、リードコマンドにおいて、リードパターンに代えて、リードオプションを指定する。フラッシュメモリコントローラ１５５は、指定されたリードオプションにおいて、フラッシュメモリチップ１６１からデータを読み出し、エラー訂正を実行した後、メモリ１５４に転送する。転送されたデータは、リードデータ領域５２１に格納される。本例において、フラッシュメモリコントローラ１５５は、リードパターンを保持せず、参照しない。
【０１０２】
フラッシュメモリコントローラ１５５は、ＥＣＣ訂正成否情報５０５をプロセッサ１５３に送信する。プロセッサ１５３は、ＥＣＣ訂正成否情報５０５を、ＥＣＣ訂正成否管理情報５２３に追加する。プロセッサ１５３は、ＥＣＣ訂正成否管理情報５２３をマージして、ＥＣＣ訂正成否情報５２７を生成する。
【０１０３】
ＥＣＣ訂正成否情報５２７が、全てのコードワードが訂正されていることを示す場合、プロセッサ１５３は、ＥＣＣ訂正成否管理情報５２３を参照し、リードデータ領域５２１に格納されているエラー訂正されたコードワードのユーザデータをマージし、マージデータ５２５を生成する。マージデータ５２５は、エラーを含まない正しいページデータである。プロセッサ１５３は、マージデータ５２５をストレージコントローラ１２０に転送する。なお、１回のリードで全てのコードワードがエラー訂正されている場合、マージは不要である。
【０１０４】
上述のように、プロセッサ１５３が訂正されたコードワードのユーザデータをマージすることで、当該機能をフラッシュメモリコントローラ１５５に実装する必要がなく、容易に設計変更を行うことができる。
【０１０５】
図１７は、リード要求に応じたリードパターンの選択を模式的に示す。プロセッサ１５３により実行されるマイクロプログラム６１１は、劣化度管理テーブル２３０を参照し、リード要求によって指定されたブロックで使用するリードパターンのリードパターン番号を取得する。マイクロプログラム６１１は、リードパターン管理テーブル２９０を参照し、取得したリードパターン番号に対応するリードパターンレジスタ番号を取得する。
【０１０６】
マイクロプログラム６１１は、取得したリードパターンレジスタ番号を指定して、リードコマンドをフラッシュメモリコントローラ１５５に発行する。制御部１５６は、指定されたリードパターンレジスタ番号のリードパターンレジスタから、格納されているリードパターンを取得し、当該リードパターンに従って、リードリトライにおけるリードオプションを制御する。
【０１０７】
図１７の例において、制御部１５６は、７つのリードパターンレジスタを有している。一方、リードパターン構成テーブル２５０は、２０のリードパターンを格納している。効率的なリードを行うためには、多くのリードパターンを用意しておくことが好ましい。一方で、ハードウェアリソース削減の点から、リードパターンレジスタの数は少ないことが好ましい。プロセッサ１５３は、リードパターンレジスタに格納されるリードパターンを変更することで、上記要求を満たす。
【０１０８】
図１８は、リードパターンレジスタに格納されるリードパターンの書き換えを模式的に示す。例えば、リードにおいて参照されたリードパターン管理テーブル２９０が、劣化度管理テーブル２３０から取得されたリードパターン番号を含まない場合、マイクロプログラム６１１は、リードパターンレジスタのリードパターンを書き換える。または、後述するように、マイクロプログラム６１１は、フラッシュメモリチップ１６１の状態検査の結果に応じて、リードパターンレジスタのリードパターンを書き換える。
【０１０９】
マイクロプログラム６１１は、リードパターン構成テーブル２５０から、特定のリードパターン番号のリードパターンを取得する。マイクロプログラム６１１は、リードパターンレジスタ番号を指定して、リードパターンの変更をフラッシュメモリコントローラ１５５に指示し、リードパターンを送信する。制御部１５６は、指定されたリードパターンレジスタに、受信した新たなリードパターンを格納する。
【０１１０】
図１８の例において、リードパターンレジスタ２のリードパターンが書き換えられる。リードパターンレジスタ２は、変更前にリードパターン３を格納しており、リードパターン３が、リードパターン１３に書き換えられる。マイクロプログラム６１１は、リードパターン管理テーブル２９０において、リードパターンを入れ替えたリードパターンレジスタの情報を更新する。
【０１１１】
図１９は、フラッシュメモリチップ１６１の状態検査及び検査結果に応じた劣化度管理テーブル２３０の更新のフローチャートを示す。フラッシュメモリチップ１６１の状態検査は、フラッシュメモリチップ１６１のリード／ライトとは独立して実行され、例えば、定期的に実行される。
【０１１２】
プロセッサ１５３は、リードコマンドを作成し（Ｓ１６１）、フラッシュメモリコントローラ１５５に発行する（Ｓ１６２）。リードコマンドは、リードオプションと領域とを指定する。リードコマンドの指定領域は、例えば、１ブロックである。指定領域は、劣化度管理テーブル２３０の管理単位に応じて決められる。指定領域は複数ブロックでもよい。
【０１１３】
プロセッサ１５３は、フラッシュメモリコントローラ１５５からのリードコマンドに対する処理完終了通知を待つ（Ｓ１６３）。プロセッサ１５３は、エラー通知を受信した場合、異なるリードオプションを指定して、同一領域へのリードコマンドを発行する。プロセッサ１５３は、処理終了通知を受信すると（Ｓ１６４）、当該処理終了通知を解析し、ＥＣＣ演算回路１５９によるエラー訂正数を取得する。
【０１１４】
プロセッサ１５３は、当該ブロックの劣化度を計算する（Ｓ１６５）。プロセッサは、例えば、現在のチップ温度、リードにおけるＥＣＣ訂正ビット数、及び最新ライトからの経過時間に基づいて、劣化度を計算する。チップ温度は、不図示のセンサから取得される温度情報により決定される。最新ライトからの経過時間は、劣化度管理テーブル２３０が示すライト日時から現在時刻までの時間である。なお、フラッシュメモリチップの劣化度は、ブロックの値の平均値を使用して計算できる。
【０１１５】
劣化度は、チップ温度、ＥＣＣ訂正ビット数の増加及び最新ライトからの経過時間それぞれの増加と共に、増加する関数で表わされる。劣化度の関数は、設計に従い予め設定されている。劣化度は、上記値の一部のみ又は他の値を使用して計算されてもよい。劣化度は、ＥＣＣ訂正ビット数、最新ライトからの経過時間、累積消去回数等のＩ／Ｏ情報（Ｉ／Ｏ履歴）やチップ温度のような物理状態情報等を使用して計算できる。これらにより、劣化度をより適切に計算できる。
【０１１６】
プロセッサ１５３は、劣化度−リードパターン対応テーブル２７０を参照し、計算した劣化度に対応するリードパターンを決定する（Ｓ１６６）。プロセッサ１５３は、今回の検査結果により、劣化度管理テーブル２３０を更新する（Ｓ１６７）。具体的には、プロセッサ１５３は、検査したブロックの、ＥＣＣ訂正ビット数欄、リードオプション欄、ＦＭ温度欄、及び使用リードパターン欄を更新する。本フローにより、劣化度管理テーブル２３０を更新し、適切なリードパターンを選択できる。
【０１１７】
図２０は、フラッシュメモリコントローラ１５５が格納するリードパターンの更新のフローチャートを示す。本フローは、図１９を参照して説明した劣化度管理テーブル２３０の更新後に実行される。
【０１１８】
プロセッサ１５３は、劣化度管理テーブル２３０を参照し、使用リードパターンそれぞれのブロックの数（領域の数）を算出する（Ｓ１８１）。具体的には、プロセッサ１５３は、劣化度管理テーブル２３０において、リードパターンそれぞれのエントリ数をカウントする。プロセッサ１５３は、ブロックの数が最も多い未選択のリードパターン番号を、選択する（Ｓ１８２）。プロセッサ１５３は、リードパターン構成テーブル２５０から、上記リードパターン番号のリードパターンを取得する（Ｓ１８３）。
【０１１９】
プロセッサ１５３は、フラッシュメモリコントローラ１５５のリードパターンレジスタに対して、新たなリードパターンを格納する（Ｓ１８４）。プロセッサ１５３は、リードパターン管理テーブル２９０において、新たにリードパターンを格納したリードパターンレジスタの情報を更新する。プロセッサ１５３は、ステップＳ１８２〜Ｓ１８５を、リードパターンレジスタの数だけ繰り返す（Ｓ１８６）。本フローにより、使用される確率が高いリードパターンを予めフラッシュメモリコントローラ１５５に格納することができる。
【０１２０】
なお、本発明は上記実施形態に限定されるものではなく、様々な変形例が含まれる。上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある例の構成の一部を他の例の構成に置き換えることが可能であり、また、ある例の構成に他の例の構成を加えることも可能である。また、各例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１２１】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実効することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１】
2016203631.tif 000003
【図２Ａ】
2016203631.tif 000004
【図２Ｂ】
2016203631.tif 000005
【図３】
2016203631.tif 000006
【図４】
2016203631.tif 000007
【図５】
2016203631.tif 000008
【図６】
2016203631.tif 000009
【図７】
2016203631.tif 000010
【図８】
2016203631.tif 000011
【図９】
2016203631.tif 000012
【図１０】
2016203631.tif 000013
【図１１】
2016203631.tif 000014
【図１２】
2016203631.tif 000015
【図１３】
2016203631.tif 000016
【図１４】
2016203631.tif 000017
【図１５】
2016203631.tif 000018
【図１６】
2016203631.tif 000019
【図１７】
2016203631.tif 000020
【図１８】
2016203631.tif 000021
【図１９】
2016203631.tif 000022
【図２０】
2016203631.tif 000023
【国際調査報告】
2016203631.tif 000024
2016203631.tif 000025
2016203631.tif 000026