(57)【特許請求の範囲】
【請求項１】
複数のチャネルを介してアクセスされるメモリと、
複数のアクセスコマンドに従って前記メモリに前記複数のチャネルを介して並行してアクセスするメモリインタフェースと、
前記メモリにブロック単位でアクセスするための所定のアクセス処理において、チャネル別のアクセスコマンドの群を前記メモリインタフェースに逐次投機的に投入するコマンド生成手段と、
前記メモリインタフェースによる前記複数のチャネルを介してのメモリアクセスのいずれかでエラーが発生した場合、既に投入されている未実行のアクセスコマンドの系列を、パージレスポンスにより返却するパージ手段と、
前記所定の処理におけるアクセスコマンドのコマンド進捗をコマンド進捗情報によりチャネル別に管理するコマンド進捗管理手段であって、各チャネルにおけるコマンド進捗が、前記返却された未実行のアクセスコマンドの系列のうちの最も古い未実行のアクセスコマンドの指定する位置に戻されるように、前記コマンド進捗情報を更新するコマンド進捗管理手段とを具備し、
前記コマンド生成手段は、前記更新されたコマンド進捗情報に基づいて、前記返却された最も古い未実行のアクセスコマンドを含むチャネル別のアクセスコマンドの群を前記メモリインタフェースに投入する
メモリ装置。
【請求項２】
前記複数のチャネルにおけるアクセスコマンドの進捗を統括的に管理することにより、ブロックの区切りを検出する進捗統括管理手段を更に具備する請求項１記載のメモリ装置。
【請求項３】
前記コマンド生成手段は、次に投入されるべきアクセスコマンドが、対応するチャネルにおける最終アクセスコマンドであるならば、前記最終アクセスコマンドに、当該最終アクセスコマンドの実行に成功した場合に対応するコマンドレスポンスを返すことを指定する特定の指定情報を設定する請求項２記載のメモリ装置。
【請求項４】
前記進捗統括管理手段は、前記複数のチャネルにそれぞれ対応する最終アクセスコマンドの群が投入された状態で、前記最終アクセスコマンドの群に対応するコマンドレスポンスの群が返却されているかを判定することにより、前記ブロックの区切りを検出する請求項３記載のメモリ装置。
【請求項５】
前記複数のチャネルのうちの第１のチャネルを介してのメモリアクセスでエラー訂正符号に基づく訂正が不能なエラーが発生した場合、前記ブロックのエラーページ内のエラー箇所を、チャネル間誤り訂正によって訂正するチャネル間誤り訂正手段と、
前記チャネル間誤り訂正の結果に基づいて、前記ブロックのページ毎にチャネル間誤り訂正状態を管理するチャネル間誤り訂正状態管理手段とを更に具備し、
前記コマンド進捗管理手段は、少なくとも前記第１のチャネルにおけるコマンド進捗位置が、前記エラーページの次のページの先頭位置にスキップされるように、前記コマンド進捗情報を更新する請求項１記載のメモリ装置。
【請求項６】
前記コマンド進捗管理手段は、前記複数のチャネルのうち前記エラーページをコマンド進捗位置とする前記第１のチャネルとは異なる第２のチャネルにおける次のコマンド進捗位置も、前記エラーページの次のページの先頭位置にスキップされるように、前記コマンド進捗情報を更新する請求項５記載のメモリ装置。
【請求項７】
複数のチャネルを介してアクセスされるメモリと、複数のアクセスコマンドに従って前記メモリに前記複数のチャネルを介して並行してアクセスするメモリインタフェースとを備えたメモリ装置において、所定のアクセス処理により前記メモリにブロック単位でアクセスするためのメモリアクセス方法であって、
チャネル別のアクセスコマンドの群を前記メモリインタフェースに逐次投機的に投入し、
前記メモリインタフェースによる前記複数のチャネルを介してのメモリアクセスのいずれかでエラーが発生した場合、既に投入されている未実行のアクセスコマンドの系列を、パージレスポンスにより返却し、
各チャネルにおけるコマンド進捗が、前記返却された未実行のアクセスコマンドの系列のうちの最も古い未実行のアクセスコマンドの指定する位置に戻されるように、前記所定の処理におけるアクセスコマンドの進捗を管理するためのコマンド進捗情報を更新し、
前記更新されたコマンド進捗情報に基づいて、前記返却された最も古い未実行のアクセスコマンドを含むチャネル別のアクセスコマンドの群を前記メモリインタフェースに投入する
メモリアクセス方法。
【請求項８】
次に投入されるべきアクセスコマンドが、対応するチャネルにおける最終アクセスコマンドであるならば、前記最終アクセスコマンドに、当該最終アクセスコマンドの実行に成功した場合に対応するコマンドレスポンスを返すことを指定する特定の指定情報を設定する請求項７記載のメモリアクセス方法。
【請求項９】
前記複数のチャネルにそれぞれ対応する最終アクセスコマンドの群が投入された状態で、前記最終アクセスコマンドの群に対応するコマンドレスポンスの群が返却されているかを判定することにより、前記ブロックの区切りを検出する請求項８記載のメモリアクセス方法。
【請求項１０】
前記複数のチャネルのうちの第１のチャネルを介してのメモリアクセスでエラー訂正符号に基づく訂正が不能なエラーが発生した場合、前記ブロックのエラーページ内のエラー箇所を、チャネル間誤り訂正によって訂正し、
前記チャネル間誤り訂正の結果に基づいて、前記ブロックのページ毎にチャネル間誤り訂正状態を管理し、
少なくとも前記第１のチャネルにおけるコマンド進捗位置が、前記エラーページの次のページの先頭位置にスキップされるように、前記コマンド進捗情報を更新する
請求項７記載のメモリアクセス方法。
【請求項１１】
前記複数のチャネルのうち前記エラーページをコマンド進捗位置とする前記第１のチャネルとは異なる第２のチャネルにおける次のコマンド進捗位置も、前記エラーページの次のページの先頭位置にスキップされるように、前記コマンド進捗情報を更新する請求項１０記載のメモリアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、マルチチャネルを有するメモリ装置及び同装置におけるメモリアクセス方法に関する。
【背景技術】
【０００２】
従来から、ＮＡＮＤフラッシュメモリに代表されるメモリを備え、複数のアクセスコマンドを並行して実行するマルチチャネルを有するメモリ装置が知られている。一方、ＮＡＮＤフラッシュメモリのようなフラッシュメモリのデータ保持力（data retention）は比較的弱いことが知られている。そのため、フラッシュメモリに格納されたデータの品質は、例えば時間の経過に応じて低下する可能性がある。
【０００３】
そこで、フラッシュメモリを備えた従来のメモリ装置では、当該フラッシュメモリに格納されたデータが長時間放置されることに起因するデータ化けを適宜検査するためのパトロール処理が実行される。このパトロール処理は、リードアクセスを伴い、メモリコントローラによって例えばブロック単位に行われる。データ化け（品質の低下）が検出された場合、対応するブロックのデータはフラッシュメモリ内の別のブロックに書き換えられる。これにより、品質の低下が検出されたブロックのデータがリフレッシュされる。
【０００４】
パトロール処理では、検査（パトロール）されるべきブロックの全領域に効率的にリードアクセスするために、複数のアクセスコマンド（リードコマンド）が投機的に発行される。つまり、先行するアクセスコマンド群の実行完了を待たずに、後続のアクセスコマンド群が発行される。そこでメモリコントローラは、アクセスコマンド群に従うリードアクセスでエラーが発生した場合に対処するために、発行された全アクセスコマンドを記録するように構成されている。このことは、パトロール処理に限らない。例えば、ホストからの要求により、フラッシュメモリに格納されているデータ（ユーザデータ）をメモリ装置自身が診断する自己診断処理においても同様である。また、繰り返しリードに起因する周辺ページのデータ化けを検出して、当該周辺ページをリフレッシュするためのリフレッシュ処理においても同様である。
【０００５】
ところで、フラッシュメモリ内のブロックのデータを書き換えている最中に、当該フラッシュメモリを備えたメモリ装置の電源が遮断する可能性がある。この場合、データ書き換えは正常に終了しなかった可能性がある。そこで、フラッシュメモリ内のブロックのデータ書き換えが発生した場合に、当該データ書き換えの進捗状態を示す情報（データ書き換え進捗情報）を記録するように構成されたメモリ装置も知られている。このメモリ装置は、電源が再度投入された際に、電源遮断時におけるデータ書き換え進捗状態を示す情報に基づいて、データ書き換えが正常に終了しなかったブロックのデータを復旧する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−５６１４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記したように、フラッシュメモリを備えた従来のメモリ装置は、ブロックの全領域を対象とするリード／ライト処理（つまりメモリアクセス処理）において、投機的に発行される全てのアクセスコマンドを記録するように構成されている。このため従来のメモリ装置は、全アクセスコマンドを記録するためのメモリ領域（つまり管理領域）を必要とする。このことは、フラッシュメモリ以外のメモリを備えたメモリ装置でも、投機的に発行される複数のアクセスコマンドを並行して実行するメモリ装置であれば同様である。
【０００８】
本発明の目的は、ブロック単位のメモリアクセス処理を、小容量のメモリ領域を用いた管理で高速に実行できる、マルチチャネルを有するメモリ装置及び同装置におけるメモリアクセス方法を提供することである。
【課題を解決するための手段】
【０００９】
実施形態によれば、メモリ装置は、メモリと、メモリインタフェースと、コマンド生成手段と、パージ手段と、コマンド進捗管理手段とを具備する。前記メモリは、複数のチャネルを介してアクセスされる。前記メモリインタフェースは、複数のアクセスコマンドに従って前記メモリに前記複数のチャネルを介して並行してアクセスする。前記コマンド生成手段は、前記メモリにブロック単位でアクセスするための所定のアクセス処理において、チャネル別のアクセスコマンドの群を前記メモリインタフェースに逐次投機的に投入する。前記パージ手段は、前記メモリインタフェースによる前記複数のチャネルを介してのメモリアクセスのいずれかでエラーが発生した場合、既に投入されている未実行のアクセスコマンドの系列を、パージレスポンスにより返却する。前記コマンド進捗管理手段は、前記所定の処理におけるアクセスコマンドのコマンド進捗をコマンド進捗情報によりチャネル別に管理するコマンド進捗管理手段であって、各チャネルにおけるコマンド進捗が、前記返却された未実行のアクセスコマンドの系列のうちの最も古い未実行のアクセスコマンドの指定する位置に戻されるように、前記コマンド進捗情報を更新する。前記コマンド生成手段は、前記更新されたコマンド進捗情報に基づいて、前記返却された最も古い未実行のアクセスコマンドを含むチャネル別のアクセスコマンドの群を前記メモリインタフェースに投入する。
【図面の簡単な説明】
【００１０】
【図１】一つの実施形態に係るマルチチャネルを有するメモリ装置の典型的な構成を示すブロック図。
【図２】同実施形態において、１論理ブロックを対象に自己診断処理が実行される場合に生成される４，０９６のアクセスコマンドの例を、ページ、チャネル、プレーン及びクラスタと対応付けて示す図。
【図３】同実施形態で適用される自己診断処理の手順を説明するためのフローチャートの一部を示す図。
【図４】同実施形態で適用される自己診断処理の手順を説明するためのフローチャートの残りを示す図。
【図５】同実施形態で適用される論理アドレス及び物理アドレスのフォーマットの例を示す。
【図６】同実施形態においてコマンド生成部によって逐次投入されるリードコマンド群の時系列の一例を示す図。
【発明を実施するための形態】
【００１１】
以下、実施の形態につき図面を参照して説明する。  
図１は一つの実施形態に係るマルチチャネルを有するメモリ装置の典型的な構成を示すブロック図である。本実施形態において、図１に示すメモリ装置１０は、例えばホスト（図示せず）と接続されている。ホストは、メモリ装置１０を自身の記憶装置として利用する。
【００１２】
メモリ装置１０は、ＮＡＮＤフラッシュメモリ１１とＮＡＮＤコントローラ１２とを備えている。ＮＡＮＤフラッシュメモリ１１は、ユーザデータを記憶するための記憶媒体である。ＮＡＮＤフラッシュメモリ１１は、複数のＮＡＮＤフラッシュメモリチップを備えており、複数のアクセスコマンドに応じてＮＡＮＤコントローラ１２によって並行してアクセス可能なように構成されている。なお、複数のアクセスコマンドに応じて並行してアクセス可能であれば、ＮＡＮＤフラッシュメモリ１１に代えて、ＮＡＮＤフラッシュメモリ以外のメモリを用いても構わない。
【００１３】
ＮＡＮＤコントローラ１２は、ホストからの要求に応じてＮＡＮＤフラッシュメモリ１１にアクセスする。ＮＡＮＤコントローラ１２はまた、例えば自己診断処理、パトロール処理、或いはリフレッシュ処理のような、ブロック単位でのメモリアクセス処理のために、ＮＡＮＤフラッシュメモリ１１にアクセスする。ここでは、自己診断処理が行われることを前提とする。
【００１４】
ＮＡＮＤコントローラー１２は、ＮＡＮＤインタフェース１２０１と、制御部１２０２と、進捗統括管理部１２０３と、コマンド進捗管理部１２０４と、コマンド進捗判定部１２０５と、コマンド生成部１２０６と、テーブル管理部１２０７と、レスポンス蓄積部１２０８と、レスポンス解析部１２０９と、コンパクション部１２１０と、チャネル間誤り訂正状態管理部（以下、ＩＣＰＣＳ管理部と称する）１２１１とを備えている。制御部１２０２、進捗統括管理部１２０３、コマンド進捗管理部１２０４、コマンド進捗判定部１２０５、コマンド生成部１２０６、テーブル管理部１２０７、レスポンス蓄積部１２０８、レスポンス解析部１２０９、コンパクション部１２１０、及びＩＣＰＣＳ管理部１２１１の各部（モジュール）は、内部バス１２１２によって相互接続されている。
【００１５】
ＮＡＮＤインタフェース１２０１は、ＮＡＮＤフラッシュメモリ１１とコマンド生成部１２０６及びレスポンス蓄積部１２０８との間で情報を授受する。ＮＡＮＤインタフェース１２０１はパージ機構１２０１ａ及びチャネル間誤り訂正機構(以下、ＩＣＰ訂正機構と称する)１２０１ｂを備えている。
【００１６】
パージ機構１２０１ａは、投入されたアクセスコマンドの実行でエラーが発生した場合に、未実行の全てのアクセスコマンドを、特別のコマンドレスポンス（以下、パージレスポンスと称する）によってレスポンス蓄積部１２０８に戻す。ＩＣＰ訂正機構１２０１ｂは、エラー訂正符号（ＥＣＣ）で訂正不能なエラーが発生した場合に、エラー箇所をチャネル間のデータに基づいて訂正する。この訂正を、チャネル間誤り訂正（ＩＣＰ訂正）と呼ぶ。
【００１７】
制御部１２０２は内部バス１２１１を介して接続された、上記各モジュールの動作を制御する。進捗統括管理部１２０３は、処理単位（自己診断処理単位）のコマンド進捗を管理する。進捗統括管理部１２０３は、コマンド進捗管理部１２０４によって管理されるチャネル別のコマンド進捗状態を統括的に管理し、処理単位の区切り（例えば、１論理ブロックの完了）を判定する。
【００１８】
コマンド進捗管理部１２０４は、論理ブロック単位で且つチャネル別に実行されるアクセス処理（ここでは、自己診断処理のためのアクセス処理）において、１論理ブロックを処理するためにＮＡＮＤインタフェース１２０１にチャネル別に投機的に発行されるアクセスコマンドの進捗（つまりアクセスコマンド投入の進捗）を管理する。コマンド進捗管理部１２０４は、このチャネル別のアクセスコマンド投入の進捗（以下、コマンド進捗と称する）を管理するためのコマンド進捗情報を保持する。チャネル別のコマンド進捗情報は、ＤＲＡＭのようなメモリの領域に格納される。
【００１９】
チャネル別のコマンド進捗情報は、（ページ番号、プレーン番号、クラスタ番号）から構成される。より詳細には、チャネル別のコマンド進捗情報は、（ページ番号、プレーン−クラスタ番号）から構成される。チャネル別のコマンド進捗情報は、対応するチャネルに次に投入されるべき（または最も最近に投入された）アクセスコマンドによって指定される物理ブロック内の相対位置（ページ、プレーン、クラスタ）、つまりコマンド進捗位置を示す。このチャネル別のコマンド進捗情報は、上記指定される物理ブロックが割り当てられる論理ブロック内のチャネル別の相対位置（以下、単に位置と称する）をも示す。ページ番号、プレーン番号、クラスタ番号及びプレーン−クラスタ番号と、ページ、プレーン及びクラスタとについては後述する。
【００２０】
本実施形態では、ＮＡＮＤインタフェース１２０１は、詳細を後述するように１６のチャネル０，１，…，１４，１５を有している。そこで、コマンド進捗管理部１２０４は、１６のチャネル０，１，…，１４，１５に対応するチャネル別コマンド進捗管理部（以下、ＣＨ進捗管理部と称する）１２０４-0，１２０４-1，…，１２０４-14，１２０４-15から構成される。ＣＨ進捗管理部１２０４-i（ｉ＝０，１，…，１４，１５）は、チャネルｉに発行されるアクセスコマンドの進捗を管理し、当該チャネルｉに対応するコマンド進捗情報（ページ番号、プレーン−クラスタ番号）を保持する。
【００２１】
コマンド進捗判定部１２０５は、後述するコマンドレスポンスに基づいてチャネル別に最も古い位置（ページ、プレーン及びクラスタ）を特定し、特定された位置に基づいてコマンド進捗の更新が必要かを判定する。最も古い位置とは、対応するチャネルに投入された未実行のアクセスコマンドの系列のうち最も古いアクセスコマンドの指定する位置を指す。
【００２２】
コマンド生成部１２０６は、ＮＡＮＤフラッシュメモリ１１にアクセスするための複数のアクセスコマンドを、ＮＡＮＤインタフェース１２０１に対してチャネル別に投機的に発行する。コマンド生成部１２０６は、チャネル別のアクセスコマンドの発行を、コマンド進捗管理部１２０４によって管理されているチャネル別のコマンド進捗情報に基づいて実行する。
【００２３】
テーブル管理部１２０７は、論理アドレスを物理アドレスに変換するための論理−物理アドレス変換テーブル（以下、論物変換テーブルと称する）１２０７ａを備えている。本実施形態において、論物変換テーブル１２０７ａは、ＤＲＡＭのようなメモリの領域に構築されている。テーブル管理部１２０７は、例えば自己診断処理を行う際に、処理対象となる論理ブロックのアドレス（論理アドレス）を、論物変換テーブル１２０７ａに基づいて対応する物理ブロックのアドレス（物理アドレス）に変換する。処理対象となる論理ブロックの論理アドレスは、当該論理ブロックを識別するための論理ブロックＩＤとコマンド進捗情報（ページ番号、プレーン−クラスタ番号）とから特定できる。テーブル管理部１２０７はまた、論理ブロック（論理ブロックＩＤ）毎に、対応する論理ブロックの状態を示す情報（以下、論理ブロック情報と称する）を保持している。論理ブロック情報は、対応する論理ブロックが、使われている論理ブロック（つまりアクティブ論理ブロック）であるかを示す情報を含む。
【００２４】
レスポンス蓄積部１２０８は、コマンド生成部１２０６によってＮＡＮＤインタフェース１２０１に投入されたアクセスコマンドに対する当該ＮＡＮＤインタフェース１２０１からのレスポンス（以下、コマンドレスポンスと称する）を蓄積する。コマンドレスポンスのうち、エラーを通知するコマンドレスポンスを、エラーレスポンスと呼ぶこともある。レスポンス蓄積部１２０８はまた、上述のパージレスポンスもコマンドレスポンスとして蓄積する。
【００２５】
レスポンス蓄積部１２０８は、例えば先入れ先出しバッファを用いて構成されるＦＩＦＯ構造を有する。レスポンス蓄積部１２０８はライトポインタ及びリードポインタによって管理される。ライトポインタは、次にＮＡＮＤインタフェース１２０１から返却されるコマンドレスポンスが蓄積されるべきレスポンス蓄積部１２０８内の位置を示す。リードポインタは、レスポンス解析部１２０９によって次に解析されるべきコマンドレスポンスが蓄積されているレスポンス蓄積部１２０８内の位置を示す。
【００２６】
レスポンス解析部１２０９は、ＮＡＮＤインタフェース１２０１によって返却されて、レスポンス蓄積部１２０８に蓄積されたコマンドレスポンスのうち、リードポインタの指し示すコマンドレスポンスを解析する。レスポンス解析部１２０９は、リードポインタの指し示すコマンドレスポンスを解析し終えると、当該リードポインタをレスポンス蓄積部１２０８内の次の位置を指し示すように進める。
【００２７】
コンパクション部１２１０は、自己診断処理において論理ブロックのデータの別ブロックへの移動が必要と判定された場合、コンパクション処理を実行する。つまりコンパクション部１２１０は、コンパクション処理の対象となる論理ブロックの論理ブロックＩＤが登録された場合、コンパクション処理を実行する。このコンパクション処理により、論理ブロックＩＤによって示される論理ブロックに現在割り当てられているＮＡＮＤフラッシュメモリ１１内の第１の物理ブロック群のデータが当該ＮＡＮＤフラッシュメモリ１１内の別の第２の物理ブロック群に書き換えられる。このデータの書き換えの後、論理ブロックＩＤによって示される論理ブロックに割り当てられる物理ブロック群が、第１の物理ブロック群から第２の物理ブロック群に変更される。
【００２８】
ＩＣＰＣＳ管理部１２１１は、論理ブロックＩＤによって示される論理ブロック内のＩＣＰ訂正が実行された論理ページ（ここでは論理ページ０乃至６３のいずれか）を管理する。本実施形態において、ＩＣＰＣＳ管理部１２１１は、論理ページ０乃至６３のＩＣＰ訂正の完了の有無を、６４ビット長のビットマップ（以下、ＩＣＰ完了ページビットマップと称する）で管理する。ＩＣＰ完了ページビットマップは、ＤＲＡＭのようなメモリの領域に格納される。
【００２９】
次に、本実施形態におけるメモリ装置１０の動作について、自己診断処理を例に説明する。  
まず本実施形態では、以下の前提条件（１）乃至（６）の下で、メモリ装置１０が稼動しているものとする。  
（１）コマンド生成部１２０６は、ＮＡＮＤインタフェース１２０１に同時に複数のアクセスコマンドを投入できる。コマンド生成部１２０６からＮＡＮＤインタフェース１２０１に同時に投入可能な最大アクセスコマンド数は、メモリ装置１０の起動時に設定される。本実施形態では、ＮＡＮＤインタフェース１２０１は、１６のチャネル０，１，…，１５を有しており、コマンド生成部１２０６は最大１６チャネル分のアクセスコマンドを同時に発行できる。チャネル０，１，…，１５のチャネル番号は、それぞれ、０，１，…，１５（１０進数表現）である。
【００３０】
（２）１論理ブロックは６４のページ（論理ページ）０，１，…，６３で構成され、アクセス（ここではリードアクセス）は１ページの半分のクラスタ単位で行われるものとする。つまりアクセスはクラスタ０，１に分けて行われるものとする。ページ０，１，…，６３のページ番号は、それぞれ、０，１，…，６３（１０進数表現）である。クラスタ０，１のクラスタ番号は、それぞれ０，１（１０進数表現）である。
【００３１】
（３）チャネル０，１，…，１５の各々は、２つのプレーン０，１に接続されている。各チャネルを介してのアクセス処理（ここではリード処理）は、１ページあたり２（プレーン）×２（クラスタ）の４回に分けて実行される。
【００３２】
（４）アクセスコマンド（ここではリードコマンド）は、チャネル毎に投入された順番で実行オーダーが保証されている。  
（５）あるチャネルｉでエラーが発生した場合、未実行のコマンドは全てパージされる。  
（６）ＥＣＣで訂正不能なエラーが、ＩＣＰ訂正機構１２０１ｂを用いて訂正される。
【００３３】
図２は、上記の前提条件の下で、１論理ブロックを対象に自己診断処理が実行される場合に生成される４，０９６（６４×１６×４）のアクセスコマンドＣ００００，Ｃ０００１，Ｃ０００２，Ｃ０００３，Ｃ１０００，Ｃ１００１，Ｃ１００２，Ｃ１００３，…，ＣＦ３Ｆ０，ＣＦ３Ｆ１，ＣＦ３Ｆ２，ＣＦ３Ｆ３を、ページ０，１，…，６３、チャネル０，１，…，１５、プレーン０，１及びクラスタ０，１と対応付けて示す。図２の例では、１論理ブロックに３２の物理ブロックが割り当てられる。３２の物理ブロックは、１６のチャネル０，１，…，１５のそれぞれプレーン０，１に対応する。
【００３４】
アクセスコマンドＣｐｑｒｓのうち、Ｃはアクセスコマンドを示し、ｐ（０，１，…，Ｆ）はアクセスコマンドＣｐｑｒｓが投入されるチャネルのチャネル番号を示す１桁の１６進数である。アクセスコマンドＣｐｑｒｓのうちのｑｒ（００，０１，…，３Ｆ）は、アクセスされるページのページ番号を示す２桁の１６進数である。
【００３５】
アクセスコマンドＣｐｑｒｓのうちのｓ（０，１，２，３）は、当該アクセスコマンドＣｐｑｒｓが発行されるチャネル内のプレーン及びクラスタの組み合わせを特定するためのプレーン−クラスタ番号を示す１桁の１６進数である。ｓ＝０はプレーン０とクラスタ０との組み合わせを、ｓ＝１はプレーン０とクラスタ１との組み合わせを、それぞれ示す。ｓ＝２はプレーン１とクラスタ０との組み合わせを、ｓ＝３はプレーン１とクラスタ１との組み合わせを、それぞれ示す。このため、ｓ（０，１，２，３）、つまりプレーン−クラスタ番号は、プレーンのプレーン番号（０，１）及びクラスタのクラスタ番号（０，１）を示していることと等価である。
【００３６】
本実施形態において、論理ブロック内のページは、チャネル別に、ページ０，１，…，６３の順にアクセスされる。但し、アクセスされるページの進捗はチャネル毎に異なる。また、ＮＡＮＤフラッシュメモリ１１のチャネルｐ（ｐは１６進数表現）を介してページｑｒ（ｑｒは２桁の１６進数表現）にアクセスすることを指示する４つのアクセスコマンドＣｐｑｒ０，Ｃｐｑｒ１，Ｃｐｑｒ２，Ｃｐｑｒ３は、この並びの順に実行される。
【００３７】
具体的には、ＮＡＮＤフラッシュメモリ１１の例えばチャネル０（０は１０進数表現）を介してページ０（０は１０進数表現）にアクセスすることを指示する４つのアクセスコマンドＣ００００，Ｃ０００１，Ｃ０００２，Ｃ０００３は、この並びの順に実行される。また、ＮＡＮＤフラッシュメモリ１１の例えばチャネル１５（１６進表現でＦ）を介してページ０にアクセスすることを指示する４つのアクセスコマンドＣＦ０００，ＣＦ００１，ＣＦ００２，ＣＦ００３は、この並びの順に実行される。同様に、ＮＡＮＤフラッシュメモリ１１の例えばチャネル０を介してページ６３（１６進表現で３Ｆ）にアクセスすることを指示する４つのアクセスコマンドＣ０３Ｆ０，Ｃ０３Ｆ１，Ｃ０３Ｆ２，Ｃ０３Ｆ３は、この並びの順に実行される。同様に、ＮＡＮＤフラッシュメモリ１１の例えばチャネル１５（１６進表現でＦ）を介してページ６３（１６進表現で３Ｆ）にアクセスすることを指示する４つのアクセスコマンドＣＦ３Ｆ０，ＣＦ３Ｆ１，ＣＦ３Ｆ２，ＣＦ３Ｆ３は、この並びの順に実行される。
【００３８】
以下、本実施形態で適用される自己診断処理の手順の概略について、１つの論理ブロックを対象とする自己診断処理を例に説明する。自己診断処理の対象となる論理ブロックは、リードアクセスの対象となる。そこで以下の説明では、自己診断処理の対象となる論理ブロックをリード対象論理ブロックと称することもある。
【００３９】
１）ＮＡＮＤコントローラ１２は、リード対象論理ブロック内の全クラスタの読み出しをチャネル毎に実行し、対応するクラスタのデータが正常であるかを判定する。  
２）ＮＡＮＤコントローラ１２は、エラー訂正不能な有効クラスタを検出した場合、ＩＣＰ訂正可能か否かを判定する。訂正不可であれば、ＮＡＮＤコントローラ１２は、リード対象論理ブロックの自己診断処理を終了し、エラークラスタを自己診断処理の要求元に通知する。
【００４０】
３）上記２）でＩＣＰ訂正可能であれば、ＮＡＮＤコントローラ１２は、上記１）に戻って、後続のクラスタの読み出しを行う。  
４）リード対象論理ブロックの処理が終了した時点で、1つ以上のエラー訂正不能なクラスタが検出されていた場合、ＮＡＮＤコントローラ１２は、当該リード対象論理ブロックを、コンパクション処理の対象となる論理ブロックとして登録する。
【００４１】
次に上述の自己診断処理の手順の詳細について、図３及び図４のフローチャートを参照して説明する。  
今、ホストから、図１のメモリ装置１０のＮＡＮＤコントローラ１２に自己診断処理が要求されたものとする。本実施形態において自己診断処理は、ホストによって要求されたアクセス処理に対するバックグラウンド処理として行われる。つまり自己診断処理は、ホストによって要求されたアクセス処理の空き時間を利用して行われる。なお、図３及び図４のフローチャートで示される自己診断処理は、１論理ブロックを対象としている。このため、複数の論理ブロックを自己診断する場合、図３及び図４のフローチャートで示される自己診断処理は、診断されるべき論理ブロックの数だけ繰り返される。
【００４２】
ＮＡＮＤコントローラ１２の制御部１２０２は、自己診断処理の対象とすべき論理ブロック（つまりリード対象ブロック）をコマンド進捗管理部１２０４に対して指定する。この指定には、例えばリード対象論理ブロックの論理ブロックＩＤが用いられる。なお、図３及び図４のフローチャートでは省略されているが、自己診断処理の開始時には、コマンド進捗管理部１２０４に保持されるチャネル０，１，…，１４，１５のコマンド進捗情報は、それぞれ初期位置（ページ０，プレーン０、クラスタ０）を示すように「０００」に初期化される。
【００４３】
コマンド進捗管理部１２０４は、制御部１２０２によってリード対象論理ブロックが指定された場合、当該指定されたリード対象論理ブロックの論理ブロック情報をテーブル管理部１２０７から取得する（ステップ３０１）。もし、取得された論理ブロック情報によって、リード対象論理ブロックがアクティブ論理ブロックでないことが示されている場合、当該リード対象論理ブロックの読み出し（より詳細には自己診断処理）は不要である。この場合、図３及び図４のフローチャートでは省略されているが、制御部１２０２は、現在のリード対象論理ブロックのための自己診断処理を終了する。
【００４４】
これに対し、取得された論理ブロック情報によって、リード対象論理ブロックがアクティブ論理ブロックであることが示されている場合、コマンド進捗管理部１２０４は、当該リード対象論理ブロックの論理ブロックＩＤに基づいて論物変換テーブル１２０７ａを参照する。これによりコマンド進捗管理部１２０４は、リード対象論理ブロックに割り当てられているリード対象物理ブロック群の情報（物理ブロック情報と称する）を取得する（ステップ３０２）。物理ブロック情報は、対応する物理ブロック群（リード対象物理ブロック群）のそれぞれのＩＤ（物理ブロックＩＤ）を含む。
【００４５】
次にコマンド進捗管理部１２０４は、ステップ３０２で取得した物理ブロック情報中の物理ブロックＩＤと、自身が保持する現在のチャネル別のコマンド進捗情報（ページ番号、プレーン−クラスタ番号）とに基づいて、ＮＡＮＤフラッシュメモリ１１内のチャネル別にアクセスされるべき物理位置を示す物理アドレスを取得する（ステップ３０３）。なお、ステップ３０２で取得した物理ブロック情報により、対応する物理ブロックがＮＵＬＬブロックであることが示されている場合、コマンド進捗管理部１２０４は、対応するチャネルの現在のコマンド進捗情報を次の位置を示すように更新する。つまりコマンド進捗管理部１２０４は、対応するチャネルのコマンド進捗（ページ、プレーン、クラスタ）を次に進める。そしてコマンド進捗管理部１２０４は、上述と同様の手順で、対応するチャネルを介してアクセスされるべき物理ブロック（リード対象物理ブロック）における物理アドレスを取得する。
【００４６】
図５は、本実施形態で適用される論理アドレス及び物理アドレスのフォーマットの例を示す。論理アドレスは、対応する論理ブロックの論理ブロックＩＤ、ページ番号、プレーン番号、チャネル番号及びクラスタ番号から構成される。論理アドレスは、メモリ装置１０にＮＡＮＤフラッシュメモリ１１が用いられている本実施形態では、論理ＮＡＮＤクラスタアドレスとも呼ばれる。物理アドレスは、対応する物理ブロックを識別するための物理ブロックＩＤと、プレーン番号、ページ番号、クラスタ番号及びセクタ番号から構成される。この物理アドレスは、物理ＮＡＮＤクラスタアドレスとも呼ばれる。
【００４７】
一方、ステップ３０３において進捗統括管理部１２０３は、コマンド進捗管理部１２０４によって管理されるチャネル別のコマンド進捗状態に基づいて、コマンド進捗がリード対象論理ブロック内の最終クラスタ（より詳細には、最終ページの最終クラスタ）まで進んだかをチャネル別に判定する。進捗統括管理部１２０３は、上記チャネル別の判定結果を保持する。ステップ３０３においてコマンド生成部１２０６は、コマンド進捗管理部１２０４によって取得された物理アドレス（つまり物理ＮＡＮＤクラスタアドレス）に基づいて、チャネル別に、対応する物理位置（ページ、プレーン、クラスタ）へのリードアクセスを指定したアクセスコマンド（以下、リードコマンドと称する）を生成する。生成されたリードコマンドは、図５に示す形式のＮＡＮＤクラスタアドレス含む。
【００４８】
コマンド生成部１２０６は更に、チャネル別に生成されたリードコマンドのうち、所定の条件を満たしたリードコマンドに特定の指定情報を設定する。所定の条件を満たしたリードコマンドとは、進捗統括管理部１２０３によって最終クラスタ処理中であると判定された物理ＮＡＮＤクラスタアドレスに対応するリードコマンド（つまり最終リードコマンド）を指す。特定の指定情報は、対応する最終リードコマンドの実行に成功した場合にコマンドレスポンス（成功レスポンス）を返却することを指定する。つまり、特定の指定情報が設定されたリードコマンドは、当該リードコマンドの実行に成功した場合にコマンドレスポンスを返却することを指定する。一方、特定の指定情報が設定されていないリードコマンド（つまり、非最終リードコマンド）は、当該リードコマンドの実行に成功した場合にコマンドレスポンスを返却しないことを暗黙に指定する。またリードコマンドは、当該リードコマンドの実行に失敗した場合、特定の指定情報が設定されているかに無関係にコマンドレスポンス（エラーレスポンス）を返却することを暗黙に指定する。なお、所定の条件を満たさないリードコマンド（非最終リードコマンド）に、コマンド実行に成功した場合にコマンドレスポンスを返却しないことを明示的に指定する指定情報が設定されても構わない。
【００４９】
ステップ３０３において、コマンド生成部１２０６は、生成されたリードコマンドの群をＮＡＮＤインタフェース１２０１に対して最大１６個同時に発行する。この例のように、図３及び図４のフローチャートに従う最初のステップ３０３では、１６のチャネル０，１，…，１４，１５にそれぞれ対応する１６のリードコマンドＣ００００，Ｃ１０００，…，ＣＥ０００，ＣＦ０００が同時に発行される。図６はコマンド生成部１２０６によって逐次投入されるリードコマンド群の時系列の一例を示す。図６の例では、１６のリードコマンドＣ００００，Ｃ１０００，…，ＣＥ０００，ＣＦ０００が時刻ｔ１に発行されたことが示されている。
【００５０】
コマンド生成部１２０６によってＮＡＮＤインタフェース１２０１に同時に投入されたリードコマンドＣ００００，Ｃ１０００，…，ＣＥ０００，ＣＦ０００は当該ＮＡＮＤインタフェース１２０１内のコマンドキュー（図示せず）に蓄えられる。
【００５１】
もし、コマンドキューが満杯でなければ、コマンド生成部１２０６は、後続の物理リードコマンド群をＮＡＮＤインタフェース１２０１に投機的に投入することができる。本実施形態では、図６に示すように、時刻ｔ１より後の時刻ｔ２に、１６のリードコマンドＣ０００１，Ｃ１００１，…，ＣＥ００１，ＣＦ００１が投入され、その後の時刻ｔ３に、１６のリードコマンドＣ０００２，Ｃ１００２，…，ＣＥ００２，ＣＦ００２が投入されたものとする。このように、コマンド生成部１２０６は、コマンドキューが満杯になるまで、後続のリードコマンド群を投機的に投入することができる。
【００５２】
ＮＡＮＤインタフェース１２０１は、自己診断処理の開始時には、コマンドキューに最初に蓄えられた１６のリードコマンドＣ００００，Ｃ１０００，…，ＣＥ０００，ＣＦ０００を取り出す。そしてＮＡＮＤインタフェース１２０１は、取り出されたリードコマンリードコマンドＣ００００，Ｃ１０００，…，ＣＥ０００，ＣＦ０００に基づき、対応するチャネル０，１，…，１４，１５にそれぞれ接続されたプレーン０を介してＮＡＮＤフラッシュメモリ１１に並行してアクセスする。
【００５３】
ここで、投機的に投入されたリードコマンド群に基づくリードアクセスのいずれかでエラーが発生したものとする。本実施形態において、このエラーは、リードされたデータに付加されているＥＣＣに基づいて検出されるため、ＥＣＣエラーと呼ばれる。
【００５４】
ＥＣＣエラーが発生した場合、ＮＡＮＤインタフェース１２０１は、当該ＥＣＣエラーが発生したリードアクセスを指定したリードコマンドに対するコマンドレスポンスとして、エラーレスポンスをレスポンス蓄積部１２０８に返却する。レスポンス蓄積部１２０８に返却されたエラーレスポンス（コマンドレスポンス）は、当該レスポンス蓄積部１２０８に蓄積される。
【００５５】
またＥＣＣエラーが発生した場合、ＮＡＮＤインタフェース１２０１のパージ機構１２０１ａは、ＥＣＣエラーが発生したチャネルに対応するコマンドキューに蓄積されている全てのコマンド（つまり、ＥＣＣエラーが発生したチャネルに投入された未実行の全てのリードコマンド）を、パージレスポンスによってレスポンス蓄積部１２０８に返却する。レスポンス蓄積部１２０８に返却されたパージレスポンス（コマンドレスポンス）は、当該レスポンス蓄積部１２０８に蓄積される。
【００５６】
前述したように、自己診断処理はシステムのバックグラウンドで実行される。このため、チャネルによっては、ホストによって要求されたアクセスのためのアクセスコマンドが、自己診断のためのリードコマンドの実行に優先して実行されることもある。本実施形態においてＮＡＮＤインタフェース１２０１のパージ機構１２０１ａは、ホストによって要求されたアクセスでＥＣＣエラーが発生しても、全ての未実行のコマンドを、パージレスポンスによりレスポンス蓄積部１２０８に返却する。
【００５７】
さて、ＮＡＮＤインタフェース１２０１によってコマンドレスポンスが返却されて、当該返却されたコマンドレスポンスがレスポンス蓄積部１２０８に蓄積されたものとする。レスポンス解析部１２０９は、リードポインタによって指し示されるレスポンス蓄積部１２０８内の位置から始まる領域に蓄積された全てのコマンドレスポンスを解析する（ステップ３０４）。
【００５８】
レスポンス解析部１２０９は、コマンドレスポンスの解析結果に基づき、当該解析結果にＥＣＣエラーを通知する１つ以上のエラーレスポンス（ＥＣＣエラーレスポンス）が含まれているかを判定する（ステップ３０５）。もし、１つ以上のエラーレスポンスが含まれていた場合、つまりＥＣＣエラー数Ｎ１がゼロを超えている（Ｎ１＞０）場合（ステップ３０５のＹｅｓ）、レスポンス解析部１２０９はリフレッシュフラグをＯＮ状態に設定する（ステップ３０６）。リフレッシュフラグは、論理ブロックのための自己診断処理の終了時に、当該論理ブロックをコンパクション処理の対象として登録することを指示するのに用いられる。
【００５９】
次にレスポンス解析部１２０９は、ステップ３０５でＥＣＣエラーが判定されたクラスタが有効クラスタであるか否かをテーブル管理部１２０７に問い合わせる。有効クラスタとは、有効なデータが格納されているクラスタを指す。有効クラスタに格納されていたデータが別のクラスタに移動された場合、当該有効クラスタは無効クラスタとなる。クラスタの有効／無効はテーブル管理部１２０７によって管理される。
【００６０】
レスポンス解析部１２０９は、テーブル管理部１２０７に問い合わせた結果に基づいて、ＥＣＣエラーが判定された有効クラスタの数（つまり有効クラスタのＥＣＣエラー数）Ｎ２がゼロを超えているかを判定する（ステップ３０７）。もし、有効クラスタのＥＣＣエラー数Ｎ２がゼロを超えている（Ｎ２＞０）ならば（ステップ３０７のＹｅｓ）、自己診断処理はステップ３０８に進む。ステップ３０８において制御部１２０２は、ＥＣＣエラーが判定された有効クラスタ（つまりＥＣＣ訂正不能な有効クラスタ）を含むページ（論理ページ）について、ＩＣＰ訂正機構１２０１ｂによるＩＣＰ訂正を行わせる。
【００６１】
本実施形態では、論理ブロック内の論理ページ毎に、対応するページのＩＣＰ訂正を可能とするために、１６チャネルのうちの１チャネルを、ＩＣＰ訂正のための誤り訂正データの格納に割り当てている。この誤り訂正データの格納に割り当てられるチャネルは、論理ページ毎に変更されるものとするが、特定のチャネルであっても構わない。ＩＣＰ訂正のための誤り訂正データは、他の１５チャネルに格納される対応する論理ページのデータに基づいて生成される、例えばパリティデータ（チャネル間パリティデータ）である。ＩＣＰ訂正機構１２０１ｂは、このパリティデータを用いて、ＥＣＣ訂正不能な有効クラスタを含む論理ページｊ（ｊ＝ｑｒ）のエラー箇所を修復するためのＩＣＰ訂正を行う。つまりＩＣＰ訂正機構１２０１ｂは、パリティデータと、他の１５チャネルのうちＥＣＣ訂正不能な有効クラスタを持つチャネル（第１のチャネル）を除くチャネル群（第２のチャネル群）に対応する論理ページｊのデータとに基づいて、ＩＣＰ訂正を行う。
【００６２】
制御部１２０２は、ＩＣＰ訂正機構１２０１ｂによるＩＣＰ訂正の結果に基づき、論理ページｊのＩＣＰ訂正に成功したかを判定する（ステップ３０９）。もし、論理ページｊのＩＣＰ訂正に失敗したならば、つまりＩＣＰ訂正不能であったなら（ステップ３０９のＮｏ）、制御部１２０２は、リード対象論理ブロックの論理ブロックＩＤを、コンパクション処理の対象となる論理ブロックとしてコンパクション部１２１０に登録する（ステップ３１０）。このステップ３１０において、制御部１２０２は、リフレッシュフラグをＯＮ状態からＯＦＦ状態に切り替える。
【００６３】
次に制御部１２０２は、自己診断処理の要求元（ここではホスト）にＩＣＰ訂正不能クラスタを通知して、１論理ブロックのための自己診断処理を終了する。この場合、コンパクション部１２１０は、ステップ３１０で登録された論理ブロックＩＤによって示される論理ブロックのデータを別ブロックに移動するためのコンパクション処理を行う。
【００６４】
一方、レスポンス解析部１２０９による解析結果に１つのエラーレスポンスも含まれていない場合、つまりＥＣＣエラー数Ｎ１がゼロの場合（ステップ３０５のＮｏ）、自己診断処理はステップ４０１に進む。また、有効クラスタのＥＣＣエラー数Ｎ２がゼロの場合にも（ステップ３０７のＮｏ）、自己診断処理はステップ４０１に進む。
【００６５】
ステップ４０１において、コマンド進捗判定部１２０５は、レスポンス解析部１２０９によって解析されたコマンドレスポンス中にパージレスポンスが含まれている（存在する）かを判定する。つまりコマンド進捗判定部１２０５は、解析されたコマンドレスポンス中にパージレスポンスによって返されたコマンド（以下、パージコマンドと称する）が含まれているかを判定する。
【００６６】
ここで、チャネル１４，１５では、ホストから要求されたアクセス処理が優先して行われたために、時刻ｔ１でチャネル０，１，…，１４，１５に同時に投入されたリードコマンドＣ００００，Ｃ１０００，…，ＣＥ０００，ＣＦ０００のうちのリードコマンドＣＥ０００，ＣＦ０００が、時刻ｔ２の後も未実行であったものとする。また、ホストから要求されたチャネル１４，１５を介してのアクセス処理でエラーが発生したために、パージレスポンスが返却されたものとする。この返却されたパージレスポンスには、リードコマンドＣＥ０００，ＣＥ００１，ＣＥ００２，ＣＦ０００，ＣＦ００１，ＣＦ００２がパージコマンドとして含まれている（ステップ４０１のＹｅｓ）。
【００６７】
この場合、リードコマンドＣＥ０００，ＣＥ００１，ＣＥ００２が投入されたチャネル１４に対応するコマンド進捗管理部１２０４のＣＨ進捗管理部１２０４-14、及びリードコマンドＣＦ０００，ＣＦ００１，ＣＦ００２が投入されたチャネル１５に対応するコマンド進捗管理部１２０４のＣＨ進捗管理部１２０４-15は、それぞれ自身が保持するチャネル１４，１５のコマンド進捗情報を次のように更新する。即ちＣＨ進捗管理部１２０４-14，１２０４-15は、チャネル１４，１５のチャネルのコマンド進捗情報（ページ番号、プレーン−クラスタ番号）を、最も古い位置が示されるように更新する（ステップ４０２）。チャネル１４，１５に対応する最も古い位置は、最も古いパージコマンド（未実行のリードコマンド）ＣＥ０００，ＣＦ０００に対応する位置（ページ０、プレーン０、クラスタ０）である。この場合、チャネル１４，１５のコマンド進捗情報は、いずれも「０００」に更新される。
【００６８】
またステップ４０２において、コマンド進捗管理部１２０４内のＣＨ進捗管理部１２０４-14，１２０４-15以外のＣＨ進捗管理部（他のＣＨ進捗管理部）は、自身が保持するコマンド進捗情報を、次の位置が示されるように更新する。ここでは、上記他のＣＨ進捗管理部は、コマンド進捗情報を、図６から明らかなように、（ページ０、プレーン１、クラスタ１）が示されるように「００３」に更新する。またステップ４０２において、コマンド進捗管理部１２０４は、上記ステップ３０３と同様にして、ステップ３０２で取得した物理ブロックＩＤと現在のチャネル別のコマンド進捗情報とに基づいて、チャネル別に物理ＮＡＮＤクラスタアドレスを取得する。
【００６９】
ステップ４０２においてコマンド生成部１２０６は、上記ステップ３０３と同様にして、コマンド進捗管理部１２０４によってチャネル別に取得された物理ＮＡＮＤクラスタアドレスの示す位置（ページ、プレーン、クラスタ）へのリードアクセスを指定した最大１６個のリードコマンドを生成する。ステップ４０２においてコマンド生成部１２０６は、生成された最大１６個のリードコマンドをＮＡＮＤインタフェース１２０１に対して同時に発行する。図６の例では、１６のリードコマンドＣ０００３，Ｃ１００３，…，ＣＥ０００，ＣＦ０００が時刻ｔ４に発行されたことが示されている。ステップ４０２が終了すると、自己診断処理は上記ステップ３０４に戻る。
【００７０】
次に、解析されたコマンドレスポンス中にパージコマンドが含まれていないものとする（ステップ４０１のＮｏ）。この場合、コマンド進捗管理部１２０４は、自身が保持するチャネル０〜１５のコマンド進捗情報のプレーン−クラスタ番号ｓをインクリメントする（ステップ４０３）。つまりコマンド進捗管理部１２０４は、コマンド進捗を次の位置に進める。ステップＳ４０３において、更新前のプレーン−クラスタ番号ｓが３の場合、プレーン−クラスタ番号ｓは０に設定される。プレーン−クラスタ番号ｓは、０→１→２→３→０のように更新される。
【００７１】
次にコマンド進捗管理部１２０４は、更新されたチャネル０〜１５のコマンド進捗情報に基づいて、チャネル別に、１論理ページが完了したかを判定する（ステップ４０４）。ここでは、例えばチャネルｉのコマンド進捗情報のプレーン−クラスタ番号ｓが０の場合、チャネルｉについて１論理ページ（より詳細には、１論理ページ内のチャネルｉに対応する全クラスタ）が完了したと判定される。
【００７２】
もし、いずれのチャネルにおいても、１論理ページが完了していないならば（ステップ４０４のＮｏ）、自己診断処理はステップ３０３に戻る。このステップ３０３では、ステップ４０３の実行の結果、チャネル別のコマンド進捗情報の示す位置が、最終ページの最終クラスタを示しているかが進捗統括管理部１２０３によって判定される。進捗統括管理部１２０３は、チャネル別の判定結果を保持する。
【００７３】
これに対し、いずれかのチャネル、例えばチャネルｉにおいて１論理ページが完了したならば（ステップ４０４のＹｅｓ）、自己診断処理はステップ４０５に進む。ステップ４０５においてコマンド進捗管理部１２０４は、１論理ページが完了したチャネルｉのコマンド進捗情報のページ番号をインクリメントする。つまりコマンド進捗管理部１２０４は、チャネルｉのコマンド進捗を次の論理ページに進める。ここでは、直近のステップ４０３でプレーン−クラスタ番号ｓが０に設定されていることから、ステップ４０５で更新されたチャネルｉのコマンド進捗は、次の論理ページの先頭クラスタを示す。ステップ４０５が終了すると、自己診断処理はステップ４０８に進む。
【００７４】
次に、論理ページｊのＩＣＰ訂正に成功した場合（ステップ３０９のＹｅｓ）について説明する。このＩＣＰ訂正が、チャネルｉに投入されたリードコマンドに従うアクセスでＥＣＣエラーが発生したために行われたものとする。この場合、ＩＣＰＣＳ管理部１２１１は、ＩＣＰ完了ページビットマップを、論理ページｊのＩＣＰ訂正の完了が示されるように更新する（ステップ４０６）。ここでは、６４ビット長のＩＣＰ完了ページビットマップの論理ページｊに対応するビットｊが、“１”（ＯＮ状態）に設定される。論理ページｊのＩＣＰ訂正に成功したことは、論理ページｊの自己診断処理が全てのチャネル０〜１５について正常に終了したことと等価である。
【００７５】
そこで、コマンド進捗管理部１２０４は、ＩＣＰ完了ページビットマップが更新された場合（ステップ４０６）、少なくともチャネルｉのコマンド進捗を、ＩＣＰ訂正に成功した論理ページｊの次の論理ページｊ＋１の先頭クラスタに進める（ステップ４０７）。つまりコマンド進捗管理部１２０４は、少なくともチャネルｉのコマンド進捗に関し、論理ページｊをスキップする。ステップ４０７においてコマンド進捗管理部１２０４は、残りのチャネルのコマンド進捗のうち、論理ページｊの処理中を示すコマンド進捗についても、論理ページｊ＋１の先頭クラスタに進める。ステップ４０７が終了すると、ステップＳ４０５が終了した場合と同様に、自己診断処理はステップ４０８に進む。
【００７６】
ステップ４０８において進捗統括管理部１２０３は、自身がチャネル別に保持している情報に基づき、全てのチャネル０〜１５でコマンド進捗がリード対象論理ブロック内の最終クラスタまで進んでいるかを判定する。つまり進捗統括管理部１２０３は、全てのチャネル０〜１５でリード対象論理ブロック内の対応する最終クラスタがリード対象となっているかを判定する。もし、最終クラスタがリード対象となっていないチャネルがあるならば（ステップ４０８のＮｏ）、自己診断処理はステップ３０３に戻る。
【００７７】
これに対し、全てのチャネル０〜１５でリード対象論理ブロック内の対応する最終クラスタがリード対象となっているならば（ステップ４０８のＹｅｓ）、自己診断処理はステップ４０９に進む。ステップ４０９において進捗統括管理部１２０３は、リード対象論理ブロックの処理が完了したかを判定する（ステップ４０９）。この判定のために進捗統括管理部１２０３は、全てのチャネル０〜１５から、リード対象論理ブロック内の対応する最終クラスタへのアクセスに応じてコマンドレスポンス（以下、最終コマンドレスポンスと称する）が返却されているかをレスポンス解析部１２０９に問い合わせる。
【００７８】
もし、少なくとも１つのチャネルから最終コマンドレスポンス（成功レスポンスまたはエラーレスポンス）が返却されていないならば、進捗統括管理部１２０３はリード対象論理ブロックの処理の未完了を判定する（ステップ４０９のＮｏ）。この場合、進捗統括管理部１２０３は、例えば所定時間後に再びステップ４０９を実行する。
【００７９】
一方、全てのチャネル０〜１５から最終コマンドレスポンスが返却されているならば、進捗統括管理部１２０３はリード対象論理ブロックの処理の完了を判定する（ステップ４０９のＹｅｓ）。この場合、制御部１２０２は、リフレッシュフラグがＯＮ状態にあるかを判定する（ステップ４１０）。もし、リフレッシュフラグがＯＮ状態にあるならば（ステップ４１０のＹｅｓ）、制御部１２０２は、リード対象論理ブロックの論理ブロックＩＤを、コンパクション処理の対象となる論理ブロックとしてコンパクション部１２１０に登録する（ステップ４１１）。このステップ４１１において、制御部１２０２は、リフレッシュフラグをＯＮ状態からＯＦＦ状態に切り替える。これにより制御部１２０２は、１論理ブロックのための自己診断処理を終了する。これに対し、リフレッシュフラグがＯＦＦ状態にあるならば（ステップ４１０のＮｏ）、制御部１２０２はステップ４１１をスキップして、１論理ブロックのための自己診断処理を終了する。
【００８０】
以上、本実施形態で適用される自己診断処理の手順の詳細について説明した。なお、図１に示すメモリ装置１０のＮＡＮＤコントローラ２によって自律的に行われる、パトロール処理、或いはリフレッシュ処理も自己診断処理と同様に実施することが可能である。
【００８１】
上述したように、図１に示すメモリ装置１０のＮＡＮＤコントローラ２では、コマンド進捗管理部１２０４によってチャネル別のコマンド進捗状態が管理される。また、ＩＣＰＣＳ管理部１２１１によって、論理ブロックの論理ページ毎にＩＣＰ訂正完了状態が管理される。このようなコマンド進捗管理部１２０４及びＩＣＰＣＳ管理部１２１１を備えた、本実施形態のメモリ装置１０によれば、従来よりも、論理ブロック単位の大容量リード処理を無駄なく、高速に実行することが可能となる。
【００８２】
また本実施形態によれば、ＮＡＮＤフラッシュメモリ１１を備えたメモリ装置１０の信頼性確保に必要不可欠な、自己診断処理、パトロール処理、或いはリフレッシュ処理の性能向上を実現できる。また本実施形態によれば、チャネル毎の利用負荷にばらつきが生じている場合でも、パージ発生時、或いはＩＣＰ訂正発生時において再投入されるコマンドの冗長度を削減することができる。
【００８３】
以上説明した少なくとも１つの実施形態によれば、ブロック単位のメモリアクセス処理を、小容量のメモリ領域を用いた管理で高速に実行できる、マルチチャネルを有するメモリ装置及び同装置におけるメモリアクセス方法を提供することができる。
【００８４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８５】
１０…メモリ装置、１１…ＮＡＮＤフラッシュメモリ（メモリ）、１２…ＮＡＮＤコントローラ、１２０１…ＮＡＮＤインタフェース（メモリインタフェース）、１２０１ａ…パージ機構、１２０１ｂ…チャネル間誤り訂正機構(ＩＣＰ訂正機構)、１２０２…制御部、１２０３…進捗統括管理部、１２０４…コマンド進捗管理部、１２０４-0〜１２０４-15…チャネル別コマンド進捗管理部（ＣＨ進捗管理部）、１２０５…コマンド進捗判定部、１２０６…コマンド生成部、１２０７…テーブル管理部、１２０７ａ…論物変換テーブル、１２０８…レスポンス蓄積部、１２０９…レスポンス解析部、１２１０…コンパクション部、１２１１…チャネル間誤り訂正状態管理部（ＩＣＰＣＳ管理部）。
【図１】
0005259755.tif 000002
【図２】
0005259755.tif 000003
【図３】
0005259755.tif 000004
【図４】
0005259755.tif 000005
【図５】
0005259755.tif 000006
【図６】
0005259755.tif 000007