(57)【特許請求の範囲】
【請求項１】
メモリと、
複数のアクセスコマンドに従って前記メモリに並行してアクセスするメモリインタフェースと、
前記メモリにブロック単位でアクセスするための所定のアクセス処理において、前記メモリインタフェースに複数のアクセスコマンドを投機的に投入するコマンド生成手段と、
前記メモリインタフェースによる複数のアクセスコマンドに従うメモリアクセスのいずれかでエラーが発生した場合、前記メモリインタフェースに既に投入されている前記エラーの発生時点で未実行のアクセスコマンド群を、それぞれ対応するパージレスポンスにより返却するアクセスコマンド返却手段と、
前記所定の処理におけるアクセスコマンドの進捗を自身が保持するコマンド進捗管理情報により管理するコマンド進捗管理手段であって、前記未実行のアクセスコマンド群が返却された場合、前記返却された未実行のアクセスコマンド群のうちの最も古い未実行のアクセスコマンドを指し示すように、前記コマンド進捗管理情報を更新するコマンド進捗管理手段とを具備し、
前記コマンド生成手段は、前記更新されたコマンド進捗管理情報に基づいて、前記返却された未実行のアクセスコマンド群を前記メモリインタフェースに再投入する
メモリ装置。
【請求項２】
前記コマンド生成手段は、次に投入されるべきアクセスコマンド群が前記所定のアクセス処理における最終アクセスコマンド群以外である場合、前記次に投入されるべきアクセスコマンド群のそれぞれに、当該アクセスコマンドの実行に失敗したときのみ対応するコマンドレスポンスを返却することを指定する第１の指定情報を設定して、前記第１の指定情報が設定されたアクセスコマンド群を前記メモリインタフェースに投入する請求項１記載のメモリ装置。
【請求項３】
前記コマンド生成手段は、前記次に投入されるべきアクセスコマンド群が前記最終アクセスコマンド群である場合、前記最終アクセスコマンド群のそれぞれに、当該最終アクセスコマンドの実行の失敗の有無に無関係に対応するコマンドレスポンスを返却することを指定する第２の指定情報を設定して、前記第２の指定情報が設定された最終アクセスコマンド群を前記メモリインタフェースに投入する請求項２記載のメモリ装置。
【請求項４】
前記メモリインタフェースから返された前記第２の指定情報が設定された最終アクセスコマンド群に対応するコマンドレスポンスの数が、前記メモリインタフェースに投入された前記第２の指定情報が設定された最終アクセスコマンド群の数に等しいかを判定することにより、前記アクセス処理の終了を判定する最終投入コマンド判定手段を更に具備する請求項３記載のメモリ装置。
【請求項５】
メモリと、複数のアクセスコマンドに従って前記メモリに並行してアクセスするメモリインタフェースとを備えたメモリ装置において、前記メモリにブロック単位でアクセスするための所定のアクセス処理を実行するメモリアクセス方法であって、
前記メモリインタフェースに複数のアクセスコマンドを投機的に投入し、
前記メモリインタフェースによる複数のアクセスコマンドに従うメモリアクセスのいずれかでエラーが発生した場合、前記メモリインタフェースに既に投入されている前記エラーの発生時点で未実行のアクセスコマンド群を、それぞれ対応するパージレスポンスにより返却し、
前記返却された未実行のアクセスコマンド群のうちの最も古い未実行のアクセスコマンドを指し示すように、前記所定の処理におけるアクセスコマンドの進捗を管理するためのコマンド進捗管理情報を更新し、
前記更新されたコマンド進捗管理情報に基づいて、前記返却された未実行のアクセスコマンド群を前記メモリインタフェースに再投入する
メモリアクセス方法。
【請求項６】
次に投入されるべきアクセスコマンド群が前記所定のアクセス処理における最終アクセスコマンド群であるかを判定し、
前記次に投入されるべきアクセスコマンド群が前記最終アクセスコマンド群以外である場合、前記次に投入されるべきアクセスコマンド群のそれぞれに、当該アクセスコマンドの実行に失敗したときのみ対応するコマンドレスポンスを返却することを指定する第１の指定情報を設定して、前記第１の指定情報が設定されたアクセスコマンド群を前記メモリインタフェースに投入する
請求項５記載のメモリアクセス方法。
【請求項７】
前記次に投入されるべきアクセスコマンド群が前記最終アクセスコマンド群である場合、前記最終アクセスコマンド群のそれぞれに、当該最終アクセスコマンドの実行の失敗の有無に無関係に対応するコマンドレスポンスを返却することを指定する第２の指定情報を設定して、前記第２の指定情報が設定された最終アクセスコマンド群を前記メモリインタフェースに投入する請求項６記載のメモリアクセス方法。
【請求項８】
前記メモリインタフェースから返された前記第２の指定情報が設定された最終アクセスコマンド群に対応するコマンドレスポンスの数が、前記メモリインタフェースに投入された前記第２の指定情報が設定された最終アクセスコマンド群の数に等しいかを判定することにより、前記アクセス処理の終了を判定する請求項７記載のメモリアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、複数のアクセスコマンドを並行して実行するメモリ装置及び同装置におけるメモリアクセス方法に関する。
【背景技術】
【０００２】
従来から、ＮＡＮＤフラッシュメモリに代表されるメモリを備え、複数のアクセスコマンドを並行して実行するメモリ装置が知られている。一方、ＮＡＮＤフラッシュメモリのようなフラッシュメモリのデータ保持力（data retention）は比較的弱いことが知られている。そのため、フラッシュメモリに格納されたデータの品質は、例えば時間の経過に応じて低下する可能性がある。
【０００３】
そこで、フラッシュメモリを備えた従来のメモリ装置では、当該フラッシュメモリに格納されたデータの品質の低下が適宜検査される。この検査は、リードアクセスを伴い、メモリコントローラによって例えばブロック単位に行われる。品質の低下が検出された場合、対応するブロックのデータはフラッシュメモリ内の別のブロックに書き換えられる。これにより、品質の低下が検出されたブロックのデータがリフレッシュされる。この一連の処理は、パトロールリフレッシュ処理と呼ばれる。
【０００４】
パトロールリフレッシュ処理では、検査（パトロール）されるべきブロックの全領域に効率的にリードアクセスするために、複数のアクセスコマンド（リードコマンド）が投機的に発行される。つまり、先行するアクセスコマンド群の実行完了を待たずに、後続のアクセスコマンド群が発行される。そこでメモリコントローラは、アクセスコマンド群に従うリードアクセスでエラーが発生した場合に対処するために、発行された全アクセスコマンドを記録するように構成されている。このことは、パトロールリフレッシュ処理に限らない。つまりメモリコントローラは、ブロックの全領域を対象とするリード／ライト処理において、高速化のために投機的に発行される全てのアクセスコマンドを記録するように構成されている。
【０００５】
ところで、フラッシュメモリ内のブロックのデータを書き換えている最中に、当該フラッシュメモリを備えたメモリ装置の電源が遮断する可能性がある。この場合、データ書き換えは正常に終了しなかった可能性がある。そこで、フラッシュメモリ内のブロックのデータ書き換えが発生した場合に、当該データ書き換えの進捗状態を示す情報（データ書き換え進捗情報）を記録するように構成されたメモリ装置も知られている。このメモリ装置は、電源が再度投入された際に、電源遮断時におけるデータ書き換え進捗状態を示す情報に基づいて、データ書き換えが正常に終了しなかったブロックのデータを復旧する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−５６１４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記したように、フラッシュメモリを備えた従来のメモリ装置は、ブロックの全領域を対象とするリード／ライト処理（つまりメモリアクセス処理）において、投機的に発行される全てのアクセスコマンドを記録するように構成されている。このため従来のメモリ装置は、全アクセスコマンドを記録するためのメモリ領域（つまり管理領域）を必要とする。このことは、フラッシュメモリ以外のメモリを備えたメモリ装置でも、投機的に発行される複数のアクセスコマンドを並行して実行するメモリ装置であれば同様である。
【０００８】
本発明の目的は、ブロック単位のメモリアクセス処理を、小容量のメモリ領域を用いた管理で高速に実行できるメモリ装置及び同装置におけるメモリアクセス方法を提供することである。
【課題を解決するための手段】
【０００９】
実施形態によれば、メモリ装置は、メモリと、メモリインタフェースと、コマンド生成手段と、アクセスコマンド返却手段と、コマンド進捗管理手段とを具備する。前記メモリインタフェースは、複数のアクセスコマンドに従って前記メモリに並行してアクセスする。前記コマンド生成手段は、前記メモリにブロック単位でアクセスするための所定のアクセス処理において、前記メモリインタフェースに複数のアクセスコマンドを投機的に投入する。前記アクセスコマンド返却手段は、前記メモリインタフェースによる複数のアクセスコマンドに従うメモリアクセスのいずれかでエラーが発生した場合、前記メモリインタフェースに既に投入されている前記エラーの発生時点で未実行のアクセスコマンド群を、それぞれ対応するパージレスポンスにより返却する。前記コマンド進捗管理手段は、前記所定の処理におけるアクセスコマンドの進捗を自身が保持するコマンド進捗管理情報により管理する。前記コマンド進捗管理手段は、前記未実行のアクセスコマンド群が返却された場合、前記返却された未実行のアクセスコマンド群のうちの最も古い未実行のアクセスコマンドを指し示すように、前記コマンド進捗管理情報を更新する。前記コマンド生成手段は、前記更新されたコマンド進捗管理情報に基づいて、前記返却された未実行のアクセスコマンド群を前記メモリインタフェースに再投入する。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係るメモリ装置の主要な構成を示すブロック図。
【図２】同実施形態において、論理ブロックを対象にパトロールリフレッシュ処理が実行される場合に生成される４，０９６のアクセスコマンドを、ページ、チャネル、プレーン及び各クラスタと対応付けて示す図。
【図３】同実施形態で適用されるパトロールリフレッシュ処理の手順を説明するためのフローチャート。
【図４】同実施形態で適用される論理アドレス及び物理アドレスのフォーマットの例を示す図。
【発明を実施するための形態】
【００１１】
以下、実施の形態につき図面を参照して説明する。  
図１は一つの実施形態に係るメモリ装置の主要な構成を示すブロック図である。本実施形態において、図１に示すメモリ装置１０は、例えばホスト（図示せず）と接続されている。ホストは、メモリ装置１０を自身の記憶装置として利用する。
【００１２】
メモリ装置１０は、ＮＡＮＤフラッシュメモリ１１とＮＡＮＤコントローラ１２とを備えている。ＮＡＮＤフラッシュメモリ１１は、ユーザデータを記憶するための記憶媒体である。ＮＡＮＤフラッシュメモリ１１は、複数のＮＡＮＤフラッシュメモリチップを備えており、複数のアクセスコマンドに応じてＮＡＮＤコントローラ１２によって並行してアクセス可能なように構成されている。なお、複数のアクセスコマンドに応じて並行してアクセス可能であれば、ＮＡＮＤフラッシュメモリ１１に代えて、ＮＡＮＤフラッシュメモリ以外のメモリを用いても構わない。
【００１３】
ＮＡＮＤコントローラ１２は、ホストからの要求に応じてＮＡＮＤフラッシュメモリ１１にアクセスする。ＮＡＮＤコントローラ１２はまた、例えばパトロールリフレッシュ処理のような、ホストから独立して行われるメモリアクセス処理のために、ＮＡＮＤフラッシュメモリ１１にアクセスする。
【００１４】
ＮＡＮＤコントローラー１２は、ＮＡＮＤインタフェース１２０１と、制御部１２０２と、最終投入コマンド判定部１２０３と、コマンド進捗管理部１２０４と、コマンド進捗判定部１２０５と、コマンド生成部１２０６と、テーブル管理部１２０７と、レスポンス蓄積部１２０８と、レスポンス解析部１２０９と、コンパクション部１２１０とを備えている。制御部１２０２、最終投入コマンド判定部１２０３、コマンド進捗管理部１２０４、コマンド進捗判定部１２０５、コマンド生成部１２０６、テーブル管理部１２０７、レスポンス蓄積部１２０８、レスポンス解析部１２０９及びコンパクション部１２１０の各部（モジュール）は、内部バス１２１１によって相互接続されている。
【００１５】
ＮＡＮＤインタフェース１２０１は、ＮＡＮＤフラッシュメモリ１１とコマンド生成部１２０６及びレスポンス蓄積部１２０８との間で情報を授受する。ＮＡＮＤインタフェース１２０１は、後述するように、コマンド生成部１２０６によって発行される複数のアクセスコマンドに従って、ＮＡＮＤインタフェース１２０１にアクセスする。
【００１６】
ＮＡＮＤインタフェース１２０１は、パージ機構１２０１ａを備えている。パージ機構１２０１ａは、アクセスコマンドの実行でエラーが発生した場合に、未実行の全てのアクセスコマンドを、コマンドレスポンスの一種である特別のレスポンス（以下、パージレスポンスと称する）によってレスポンス蓄積部１２０８に戻す。
【００１７】
制御部１２０２は内部バス１２１１を介して接続された、上記各モジュールの動作を制御する。最終投入コマンド判定部１２０３は、レスポンス蓄積部１２０８に蓄積された、アクセスコマンドの実行の結果を通知するためのコマンドレスポンスの数が、ＮＡＮＤコントローラ１２に投入された後述する最終コマンド群（最終アクセスコマンド群）の数に等しいかを判定する。
【００１８】
コマンド進捗管理部１２０４は、論理ブロック単位で実行されるアクセス処理において、１論理ブロックを処理するためにＮＡＮＤインタフェース１２０１に投機的に発行されるアクセスコマンドの進捗（つまりアクセスコマンド投入の進捗）を管理する。コマンド進捗管理部１２０４は、このアクセスコマンド投入の進捗を管理するための情報（以下、コマンド投入進捗情報と称する）を保持する。本実施形態において、論理ブロック単位で実行されるアクセス処理は、パトロールリフレッシュ処理である。
【００１９】
コマンド進捗判定部１２０５は、アクセスコマンド投入の進捗状態を、ＮＡＮＤインタフェース１２０１内のパージ機構１２０１ａによってパージされたアクセスコマンドに戻すか否かを判定する。コマンド生成部１２０６は、ＮＡＮＤフラッシュメモリ１１にアクセスするための複数のアクセスコマンドを、ＮＡＮＤインタフェース１２０１に対して投機的に発行する。
【００２０】
テーブル管理部１２０７は、論理アドレスを物理アドレスに変換するための論理−物理アドレス変換テーブル（以下、論物変換テーブルと称する）１２０７ａを備えている。本実施形態において、論物変換テーブル１２０７ａは、ＤＲＡＭのようなメモリの領域に構築されている。テーブル管理部１２０７は、例えばパトロールリフレッシュ処理を行う際に、論物変換テーブル１２０７ａに基づいて、対象となる論理ブロックアドレスを物理ブロックアドレスに変換する。
【００２１】
レスポンス蓄積部１２０８は、コマンド生成部１２０６によってＮＡＮＤインタフェース１２０１に投入されたアクセスコマンドに対する当該ＮＡＮＤインタフェース１２０１からのレスポンス（以下、コマンドレスポンスと称する）を蓄積する。コマンドレスポンスのうち、エラーを通知するコマンドレスポンスを、エラーレスポンスと呼ぶこともある。レスポンス蓄積部１２０８はまた、上述のパージレスポンスもコマンドレスポンスとして蓄積する。
【００２２】
レスポンス蓄積部１２０８は、例えば先入れ先出しバッファを用いて構成されるＦＩＦＯ構造を有する。レスポンス蓄積部１２０８はライトポインタ及びリードポインタによって管理される。ライトポインタは、次にＮＡＮＤインタフェース１２０１から返却されるコマンドレスポンスが蓄積されるべきレスポンス蓄積部１２０８内の位置を示す。リードポインタは、後述するレスポンス解析部１２０９によって次に解析されるべきコマンドレスポンスが蓄積されているレスポンス蓄積部１２０８内の位置を示す。
【００２３】
レスポンス解析部１２０９は、ＮＡＮＤインタフェース１２０１によって返却されて、レスポンス蓄積部１２０８に蓄積されたコマンドレスポンスのうち、リードポインタの指し示すコマンドレスポンスを解析する。レスポンス解析部１２０９は、リードポインタの指し示すコマンドレスポンスを解析し終えると、当該リードポインタをレスポンス蓄積部１２０８内の次の位置を指し示すように進める。
【００２４】
レスポンス解析部１２０９は、パトロールリフレッシュ処理で、ＮＡＮＤインタフェース１２０１によって返却されたエラーレスポンスを解析した場合、当該パトロールリフレッシュ処理の対象の論理ブロックを示す論理ブロックＩＤ（識別子）をコンパクション部１２１０に登録する。コンパクション部１２１０は、レスポンス解析部１２０９によって登録された論理ブロックＩＤに基づいてコンパクション処理を実行する。このコンパクション処理により、論理ブロックＩＤによって示される論理ブロックに現在割り当てられているＮＡＮＤフラッシュメモリ１１内の第１の物理ブロックのデータが当該ＮＡＮＤフラッシュメモリ１１内の第２の物理ブロックに書き換えられる。このデータの書き換えの後、論理ブロックＩＤによって示される論理ブロックに割り当てられる物理ブロックが、第１の物理ブロックから第２の物理ブロックに変更される。
【００２５】
次に、本実施形態におけるメモリ装置１０の動作について、パトロールリフレッシュ処理を例に説明する。  
まず本実施形態では、以下の前提条件（１）乃至（４）のもとで、メモリ装置１０が稼動しているものとする。  
（１）コマンド生成部１２０６は、ＮＡＮＤインタフェース１２０１に同時に複数のアクセスコマンドを投入できる。
【００２６】
（２）コマンド生成部１２０６からＮＡＮＤインタフェース１２０１に同時に投入可能な最大アクセスコマンド数は、メモリ装置１０の起動時に設定される。本実施形態では、ＮＡＮＤインタフェース１２０１は１６のチャネルＣＨ０，ＣＨ１，…，ＣＨ１５を有しており、コマンド生成部１２０６は最大１６チャネル分のアクセスコマンドを同時に発行できる。
【００２７】
（３）１論理ブロックは６４ページＰＧ０，ＰＧ１，…，ＰＧ６３で構成され、アクセスは１ページの半分のクラスタ単位で行われるものとする。２つのクラスタをＣＬ０，ＣＬ１と表記する。  
（４）各チャネルは２つのプレーンＰＬ０，ＰＬ１に接続されている。各チャネルを介してのリード処理（アクセス処理）は、１ページあたり２（プレーン）×２（クラスタ）の４回に分けて実行される。
【００２８】
図２は、上記の前提条件の下で、ある論理ブロックを対象にパトロールリフレッシュ処理が実行される場合に生成される４，０９６（６４×１６×４）のアクセスコマンドＣ000，Ｃ001，Ｃ002，Ｃ003，Ｃ010，Ｃ011，Ｃ012，Ｃ013，…，Ｃ3FF0，Ｃ3FF1，Ｃ3FF2，Ｃ3FF3を、ページＰＧ０，ＰＧ１，…，ＰＧ６３、チャネルＣＨ０，ＣＨ１，…，ＣＨ１５、プレーンＰＬ０，ＰＬ２及びクラスタＣＬ０，ＣＬ１と対応付けて示す。アクセスコマンドＣxyzの添え字ｘｙｚのうち、ｘ（０，１，…，３Ｆ）は、アクセスされるページＰＧｘを示す１桁または２桁の１６進数である。
【００２９】
アクセスコマンドＣxyzの添え字ｙ（０，１，…，Ｆ）は、当該アクセスコマンドＣxyzが発行（投入）されるチャネルＣＨｙを示す１６進数である。コマンドＣxyzの添え字ｚ（０，１，２，３）は、当該アクセスコマンドＣxyzが発行されるチャネルＣＨｙ内のプレーンとクラスタとの組み合わせを示す１６進数である。ｚ＝０はプレーンＰＬ０とクラスタＣＬ０との組み合わせを、ｚ＝１はプレーンＰＬ０とクラスタＣＬ１との組み合わせを、それぞれ示す。ｚ＝２はプレーンＰＬ１とクラスタＣＬ０との組み合わせを、ｚ＝３はプレーンＰＬ１とクラスタＣＬ１との組み合わせを、それぞれ示す。
【００３０】
本実施形態において、論理ブロック内のページは、ページＰＧ０，ＰＧ１，…，ＰＧ６３の順にアクセスされる。また、ＮＡＮＤフラッシュメモリ１１のチャネルＣＨｙを介してページＰＧｘにアクセスすることを指示する４つのアクセスコマンドＣxy0，Ｃxy1，Ｃxy2，Ｃxy3は、この並びの順に実行される。
【００３１】
以下、本実施形態で適用されるパトロールリフレッシュ処理の手順について、図３のフローチャートを参照して説明する。このパトロールリフレッシュ処理は、ホストによって要求されたアクセス処理に対するバックグラウンド処理として行われるものとする。つまりパトロールリフレッシュ処理は、ホストによって要求されたアクセス処理の隙間（空き時間）で行われる。なお、図３のフローチャートで示されるパトロールリフレッシュ処理は、１論理ブロックを対象としている。このため、複数の論理ブロックをパトロールする場合、図３のフローチャートで示されるパトロールリフレッシュ処理は、パトロールされるべき論理ブロックの数だけ繰り返される。
【００３２】
制御部１２０２は、パトロールリフレッシュ処理の対象（つまりリード対象）とすべき論理ブロックをテーブル管理部１２０７に対して指定する。  
テーブル管理部１２０７は、指定されたリード対象論理ブロックの位置情報に基づいて論物変換テーブル１２０７ａを参照する。これによりテーブル管理部１２０７は、リード対象論理ブロックに割り当てられているリード対象物理ブロックの位置情報を取得する（ステップ３０１）。テーブル管理部１２０７は、取得された物理ブロックの位置情報を保持する。このときテーブル管理部１２０７は、リード対象論理ブロックの位置情報（論理アドレス）をリード対象物理ブロックの位置情報（物理アドレス）に変換するための論物変換テーブル１２０７ａのエントリを指すポインタも取得する。
【００３３】
図４は、論理アドレス及び物理アドレスのフォーマットの例を示す。論理アドレスは、対応する論理ブロックの論理ブロックＩＤと、ページＰＧ、プレーンＰＬ、チャネルＣＨ及びクラスタＣＬの各情報とから構成される。論理アドレスは、メモリ装置１０にＮＡＮＤフラッシュメモリ１１が用いられている本実施形態では、論理ＮＡＮＤクラスタアドレスとも呼ばれる。物理アドレスは、対応する物理ブロックを識別するための物理ブロックＩＤと、プレーンＰＬ、ページＰＧ、クラスタＣＬ及びセクタＳＥＣの各情報とから構成される。この物理アドレスは、物理ＮＡＮＤクラスタアドレスとも呼ばれる。
【００３４】
ステップ３０１が終了すると、コマンド進捗管理部１２０４は、自身が保持するコマンド投入進捗情報を初期化する（ステップ３０２）。本実施形態においてコマンド投入進捗情報は、次に投入されるべきアクセスコマンド群の先頭アクセスコマンドによって指定されるＮＡＮＤフラッシュメモリ１１内の物理位置を示す情報であり、（ページＰＧ、プレーンＰＬ、クラスタＣＬ）を示す情報を含む。本実施形態において初期化されたコマンド投入進捗情報は、物理位置（ＰＧ０、ＰＬ０、ＣＬ０）を示す。
【００３５】
ステップ３０２が終了すると、制御部１２０２は、レスポンス蓄積部１２０８に蓄積されている全てのコマンドレスポンスを破棄する（ステップ３０３）。つまり制御部１２０２は、レスポンス蓄積部１２０８の内容をクリアする。これによりレスポンス蓄積部１２０８、当該レスポンス蓄積部１２０８にコマンドレスポンスが蓄積されていない状態となる。
【００３６】
ステップ３０３が終了すると、コマンド進捗管理部１２０４は自身が保持するコマンド投入進捗情報に基づいて、これからコマンド生成部１２０６によって投入されるべきアクセスコマンド群が最終コマンド群であるかを判定する（ステップ３０４）。つまりコマンド進捗管理部１２０４は、最終コマンド群の投入であるかを判定する。この例のように、最終コマンド群の投入でなければ（ステップ３０４のＮｏ）、パトロールリフレッシュ処理はステップ３０５に進む。
【００３７】
ステップ３０５においてコマンド生成部１２０６は、コマンド進捗管理部１２０４に保持されているコマンド投入進捗情報の示す物理位置（ページＰＧ、プレーンＰＬ、クラスタＣＬ）に基づいて、これから投入すべきアクセスコマンド群を生成する。ステップ３０５においてコマンド生成部１２０６は更に、生成されたアクセスコマンド群の各々に、当該アクセスコマンドの実行に成功した場合にコマンドレスポンスを返却しないことを示す第１の指定情報を設定する。
【００３８】
次にコマンド生成部１２０６は、第１の指定情報が設定されたアクセスコマンド群をＮＡＮＤインタフェース１２０１に投入する（ステップ３０６）。パトロールリフレッシュ処理において、ＮＡＮＤインタフェース１２０１に投入されるアクセスコマンド群は、データリードを指定するリードコマンド群である。以下の説明では、このアクセスコマンド群を物理リードコマンド群と称することもある。ここでは、コマンド投入進捗情報の示す物理位置が（ＰＧ０、ＰＬ０、ＣＬ０）であることから、図２に示される物理リードコマンド群のうちの先頭の１６チャネル分の物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0が同時に投入される。物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0は、それぞれ図４に示される形式の物理アドレスを含む。
【００３９】
コマンド生成部１２０６によってＮＡＮＤインタフェース１２０１に同時に投入された物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0は、当該ＮＡＮＤインタフェース１２０１内のコマンドキュー（図示せず）に蓄えられる。
【００４０】
もし、コマンドキューが満杯でなければ、コマンド生成部１２０６は、後続の１６チャネル分の物理リードコマンドＣ001，Ｃ011，…，Ｃ0F1をＮＡＮＤインタフェース１２０１に投入することができる。つまりコマンド生成部１２０６は、コマンドキューが満杯になるまで、後続の物理リードコマンド群を投機的に投入することができる。このとき、物理リードコマンド群のＣ000，Ｃ010，…，Ｃ0F0は、後続コマンド群Ｃ001，Ｃ011，…，Ｃ0F1よりも古いコマンドとして扱われることになる。
【００４１】
ＮＡＮＤインタフェース１２０１は、パトロールリフレッシュ処理の開始時には、コマンドキューに最初に蓄えられた１６の物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0を取り出す。そしてＮＡＮＤインタフェース１２０１は、取り出された物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0に基づき、対応するチャネルＣＨ０，ＣＨ１，…，ＣＨ１５にそれぞれ接続されたプレーンＰＬ０を介してＮＡＮＤフラッシュメモリ１１に並行してアクセスする。
【００４２】
ここで、物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0に基づくリードアクセスのいずれかでエラーが発生したものとする。本実施形態において、このエラーは、例えばリードされたデータに付加されているエラー訂正符号（以下、ＥＣＣと称する）に基づいて検出されるため、ＥＣＣエラーと呼ばれる。ＥＣＣエラーが発生した場合、ＮＡＮＤインタフェース１２０１は、当該ＥＣＣエラーが発生したリードアクセスを指定した物理リードコマンドに対するコマンドレスポンスとして、ＥＣＣエラーレスポンスをレスポンス蓄積部１２０８に返却する。レスポンス蓄積部１２０８に返却されたＥＣＣエラーレスポンス（コマンドレスポンス）は、当該レスポンス蓄積部１２０８に蓄積される。
【００４３】
また、ＮＡＮＤインタフェース１２０１のパージ機構１２０１ａは、上述のように、１６のチャネルＣＨ０〜ＣＨ１５を介して並行して実行されているアクセスのいずれかでエラーが発生した場合、コマンドキューに蓄積されている全ての未実行のコマンドを、特別のコマンドレスポンス（以下、パージレスポンスと称する）によりレスポンス蓄積部１２０８に返却する。本実施形態において、このパージレスポンスは、エラーが発生したアクセスコマンドと並行して実行されている他の全ての物理リードコマンドの実行が終了した後に返却される。つまり本実施形態においては、パージレスポンスによって返却されなかった投入済みの物理リードコマンド群は、エラー発生の有無に無関係に全て実行が終了していることが保証される。
【００４４】
前述したように、パトロールリフレッシュ処理はシステムのバックグラウンドで実行される。このため、パトロールリフレッシュのための物理リードコマンドの実行と並行して、ホストによって要求されたアクセスのためのアクセスコマンドが実行されることもある。本実施形態においてＮＡＮＤインタフェース１２０１のパージ機構１２０１ａは、ホストによって要求されたアクセスでエラーが発生しても、全ての未実行のコマンドを、パージレスポンスによりレスポンス蓄積部１２０８に返却する。
【００４５】
一方、物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0に基づくリードアクセスの全てでリードエラーが発生しなかったならば、ＮＡＮＤインタフェース１２０１は、コマンドレスポンス自体をレスポンス蓄積部１２０８に返却しない。その理由は、物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0に設定された上述の第１の指定情報により、当該物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0の実行に成功した場合にコマンドレスポンスを返却しないことが指定されているためである。
【００４６】
このように本実施形態では、物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0の実行に成功した場合、ＮＡＮＤインタフェース１２０１は、対応するコマンドレスポンスをレスポンス蓄積部１２０８に返却しない。これにより、ＮＡＮＤインタフェース１２０１は、コマンドキューに蓄積されている後続の物理リードコマンドＣ001，Ｃ011，…，Ｃ0F1を速やかに実行することができる。但し、物理リードコマンドＣ000，Ｃ010，…，Ｃ0F0の実行に要する時間は、対応するチャネルＣＨ０，ＣＨ１，…，ＣＨ１５の対応するプレーン毎に異なるのが一般的である。ここで、物理リードコマンドＣ000の実行が最も早く正常に終了したものとする。この場合、ＮＡＮＤインタフェース１２０１は、コマンドキューに蓄積されている後続の物理リードコマンドＣ001，Ｃ011，…，Ｃ0F1のうちの物理リードコマンドＣ001を取り出す。そしてＮＡＮＤインタフェース１２０１は、取り出された物理リードコマンドＣ001に基づき、対応するチャネルＣＨ０に接続されたプレーンＰＬ０を介してＮＡＮＤフラッシュメモリ１１にアクセスする。
【００４７】
やがて、ＮＡＮＤインタフェース１２０１によって例えば複数のコマンドレスポンスが返却されて、当該返却された複数のコマンドレスポンスがレスポンス蓄積部１２０８に蓄積されたものとする。するとレスポンス解析部１２０９は、リードポインタによって指し示されるレスポンス蓄積部１２０８内の位置から始まる領域に蓄積された全てのコマンドレスポンスを解析する（ステップ３０７）。なお、ＮＡＮＤインタフェース１２０１によって１つのコマンドレスポンスが返却された時点で、レスポンス解析部１２０９が、当該返却されたコマンドレスポンスの解析を開始しても構わない。
【００４８】
さて、コマンド進捗判定部１２０５は、レスポンス解析部１２０９によるコマンドレスポンスの解析結果に基づき、当該解析結果にＥＣＣエラーを通知する１つ以上のＥＣＣエラーレスポンスが含まれているかを判定する（ステップ３０８）。もし、１つ以上のＥＣＣエラーレスポンスが含まれていた場合（ステップ３０８のＹｅｓ）、レスポンス解析部１２０９は、現在処理中の論理ブロックの論理ブロックＩＤを、コンパクション処理の対象となる論理ブロックとしてコンパクション部１２１０に登録する（ステップ３０９）。
【００４９】
これに対し、コマンドレスポンスの解析結果に１つのＥＣＣエラーレスポンスも含まれていない場合（ステップ３０８のＮｏ）、レスポンス解析部１２０９は、コマンドレスポンスの解析結果にパージされたアクセスコマンドが含まれているかを判定する（ステップ３１０）。つまりレスポンス解析部１２０９は、パージレスポンスが返されているかを判定する。
【００５０】
もし、コマンドレスポンスの解析結果にパージされたアクセスコマンドが含まれていない場合（ステップ３１０のＮｏ）、コマンド進捗管理部１２０４は、自身が保持するコマンド投入進捗情報に基づき、最終コマンド群が投入済みであるかを判定する（ステップ３１１）。もし、最終コマンド群が投入済みでないならば（ステップ３１１のＮｏ）、コマンド進捗管理部１２０４は、コマンド投入進捗情報が次の物理位置を示すように、当該コマンド投入進捗情報を更新する（ステップ３１２）。即ちコマンド進捗管理部１２０４は、コマンド投入進捗情報が、次に投入されるべきアクセスコマンド群（ここでは物理リードコマンド群）の先頭アクセスコマンドによって指定されるＮＡＮＤフラッシュメモリ１１内の物理位置を示すように、当該コマンド投入進捗情報を更新する。（ステップ３１２）。
【００５１】
ステップ３１２が終了すると、パトロールリフレッシュ処理は、ステップ３０３に戻る。以降、上述と同様の処理が続けられる。やがて、ホストによって要求されたアクセスでエラーが発生したものとする。この場合、ＮＡＮＤインタフェース１２０１のパージ機構１２０１ａは、コマンドキューに蓄積されている全ての未実行のコマンドを、それぞれパージレスポンスによりレスポンス蓄積部１２０８に返却する。つまりパージ機構１２０１ａは、全ての未実行のコマンドをパージする。このパージされた未実行のコマンドが、例えば１６チャネル分の物理リードコマンドＣ100，Ｃ110，…，Ｃ1F0のうちのＣ110及びＣ1F0、及びその前に投入されたＣ013であったものとする。
【００５２】
このように、パージレスポンスにより未実行の（パージされた）物理リードコマンドＣ110，Ｃ1F0及びＣ013が返された場合、レスポンス解析部１２０９のレスポンス解析結果に当該物理リードコマンドＣ110，Ｃ1F0及びＣ013が含まれる。この結果、レスポンス解析部１２０９による上記ステップ３１０の判定結果はＹｅｓとなる。するとレスポンス解析部１２０９は、パージされた物理リードコマンドＣ110，Ｃ1F0及びＣ013のうち最も古いコマンドを特定する（ステップ３１３）。
【００５３】
ステップ３１３において、コマンド進捗管理部１２０４は、自身が保持するコマンド投入進捗情報を、特定された最も古いコマンドの指定する物理位置を示すように更新する。本実施形態において、パージされた物理リードコマンドＣ110，Ｃ1F0及びＣ013のうち最も古いコマンドは、テーブル管理部１２０７の論物変換テーブル１２０７ａと、当該物理リードコマンドＣ110，Ｃ1F0及びＣ013の指定する物理アドレスとに基づいて特定される。ここでは、物理リードコマンドＣ013が最も古いコマンドとして特定される。この場合、コマンド投入進捗情報は、物理リードコマンドＣ110の指定する物理位置（ＰＧ０，ＰＬ１，ＣＬ１）を示すように更新される。つまり、ステップ３１３では、コマンド投入進捗情報の示す物理位置を指定するコマンドが、パージされた最も古いコマンドに戻される。
【００５４】
ステップ３１３が終了すると、パトロールリフレッシュ処理は、ステップ３０３に戻る。これにより、レスポンス蓄積部１２０８の内容がクリアされる。するとコマンド進捗管理部１２０４は、現在のコマンド投入進捗情報に基づいて、次に投入されるべきアクセスコマンド群（アクセスコマンド）が最終コマンド群（最終コマンド）であるかを判定する（ステップ３０４）。本実施形態において、次に投入されるべきアクセスコマンドは、以下に述べるようにパージされた物理リードコマンドＣ013であり、最終コマンド群でない（ステップ３０４のＮｏ）。この場合、パトロールリフレッシュ処理はステップ３０５に進む。
【００５５】
ステップ３０５においてコマンド生成部１２０６は、次に投入されるべきアクセスコマンド群（アクセスコマンド）を生成する。ここでは、通常と異なり、パージされた物理リードコマンドのうちの最も古い物理リードコマンド（未実行コマンド）Ｃ013のみが生成される。ステップ３０５においてコマンド生成部１２０６は、生成された物理リードコマンドＣ013に第１の指定情報を設定する。そしてコマンド生成部１２０６は、第１の指定情報が設定された物理リードコマンドＣ013をＮＡＮＤインタフェース１２０１に投入する（ステップ３０６）。
【００５６】
ＮＡＮＤインタフェース１２０１によってコマンドレスポンスが返却されない間も、ＮＡＮＤインタフェース１２０１のコマンドキューが満杯でない限り、コマンド生成部１２０６は、後続の物理リードコマンド群をＮＡＮＤインタフェース１２０１に投入することができる。そこで、コマンド生成部１２０６は、未実行の物理リードコマンドＣ110及びＣ1F0を再投入した後、当該物理リードコマンドＣ013を含む１６の物理リードコマンドＣ003，Ｃ103，…，Ｃ0F3に後続する１６の物理リードコマンドＣ100，Ｃ110，…，Ｃ1F0をＮＡＮＤインタフェース１２０１に投入する（ステップ３０５，３０６）。投入された１６の物理リードコマンドＣ100，Ｃ110，…，Ｃ1F0の各々は、第１の指定情報を含む。また、ＮＡＮＤインタフェース１２０１からエラーレスポンス及びパージレスポンスのいずれも返されないために、レスポンス蓄積部１２０８にコマンドレスポンスが蓄積されていない状態でも、ステップ３０７，３０８，３１０〜３１２，３１３を介して、ステップ３０５，３０６が実行される。
【００５７】
その後、上述と同様の処理が続けられた結果、コマンド投入進捗情報の示す物理位置が（ＰＧ６３、ＰＬ１、ＣＬ１）となったものとする（ステップ３１２）。この場合、次に投入されるべきアクセスコマンド群は１６の物理リードコマンドＣ3F03，Ｃ3F13，…，Ｃ3FF3である。この例のように、次に投入されるべきアクセスコマンド群が最終コマンド群の場合（ステップ３０４のＹｅｓ）、パトロールリフレッシュ処理はステップ３１４に進む。
【００５８】
ステップ３１４において最終投入コマンド判定部１２０３は、最終投入されるべきアクセスコマンド（つまり最終コマンド）の数（最終投入コマンド数）をコマンド生成部１２０６より取得して、当該取得された最終投入コマンド数を保持する。するとコマンド生成部１２０６は、コマンド進捗判定部１２０５によって保持されているコマンド投入進捗情報の示す物理位置（ＰＧ６３、ＰＬ１、ＣＬ１）に基づいて、１６の物理リードコマンドＣ3F03，Ｃ3F13，…，Ｃ3FF3を生成する（ステップ３１５）。ステップ３１５においてコマンド生成部１２０６は更に、生成された１６の物理リードコマンドＣ3F03，Ｃ3F13，…，Ｃ3FF3の各々に、当該コマンドの実行に成功した場合にもコマンドレスポンスを返却することを示す第２の指定情報を設定する。
【００５９】
次にコマンド生成部１２０６は、第２の指定情報が設定された１６の物理リードコマンドＣ3F03，Ｃ3F13，…，Ｃ3FF3をＮＡＮＤインタフェース１２０１に投入する（ステップ３０６）。するとレスポンス解析部１２０９は、ＮＡＮＤインタフェース１２０１からレスポンス蓄積部１２０８にコマンドレスポンスが返却されるのを待つ。やがてＮＡＮＤインタフェース１２０１からコマンドレスポンスが返却されて、当該返却されたコマンドレスポンスがレスポンス蓄積部１２０８に蓄積されたものとする。
【００６０】
レスポンス解析部１２０９は、レスポンス蓄積部１２０８に蓄積されたコマンドレスポンスの中に、ＥＣＣエラーレスポンスが含まれているかを判定する（ステップ３０８）。もし、ＥＣＣエラーレスポンスが含まれていないならば（ステップ３０８のＮｏ）、レスポンス解析部１２０９は、蓄積されたコマンドレスポンスの中に、パージレスポンスが含まれているかを判定する（ステップ３１０）。もし、パージレスポンスが含まれていないならば（ステップ３１０のＮｏ）、コマンド進捗判定部１２０５は、自身が保持するコマンド投入進捗情報に基づいて、最終コマンド群が既に投入されているかを判定する（ステップ３１１）なお、ステップ３０８，３１０の実行順が逆であっても構わない。
【００６１】
この例のように、最終コマンド群が既に投入されているならば（ステップ３１１のＹｅｓ）、パトロールリフレッシュ処理はステップ３１６に進む。ステップ３１６において最終投入コマンド判定部１２０３は、自身が保持している最終投入コマンド数（つまり投入された最終コマンドの数）と、最終コマンド群の投入に対してＮＡＮＤインタフェース１２０１から現時点までに返却された成功（つまり正常終了）を通知するためのコマンドレスポンス（以下、最終コマンドレスポンスと称する）の数とが等しいかを判定する（ステップ３１６）。本実施形態においてレスポンス解析部１２０９は、この最終投入コマンド判定部１２０３による判定（ステップ３１６）のために、現在レスポンス蓄積部１２０８に蓄積されている、最終コマンドレスポンスの数をカウントする。そしてレスポンス解析部１２０９は、カウントされた最終コマンドレスポンスの数を最終投入コマンド判定部１２０３に通知する。
【００６２】
最終投入コマンド判定部１２０３は、今回通知された最終コマンドレスポンス数と、既に通知されている最終コマンドレスポンスの数（つまり、既に返却されている最終コマンドレスポンスの数）との和を、現時点までに返却された最終コマンドレスポンスの数として算出する。上記ステップ３１６において最終投入コマンド判定部１２０３は、投入された最終コマンドの数（最終投入コマンド数）と、上記算出された和（つまり、現時点までに返却された最終コマンドレスポンスの数）とが等しいかを判定する。
【００６３】
もし、投入された最終コマンドの数と、現時点までに返却された最終コマンドレスポンスの数とが等しくないならば（ステップ３１６のＮｏ）、最終投入コマンド判定部１２０３は、コマンドレスポンスが未返却の最終コマンドが存在すると判定する。つまり最終投入コマンド判定部１２０３は、パトロールリフレッシュ処理が未完了であると判定する。この場合、パトロールリフレッシュ処理はステップ３０７に戻る。これによりレスポンス解析部１２０９は、次のコマンドレスポンス（最終コマンドに対応する最終コマンドレスポンス）がレスポンス蓄積部１２０８に返却されるのを待つ。
【００６４】
これに対し、投入された最終コマンドの数と、現時点までに返却された最終コマンドレスポンスの数とが等しくなったならば（ステップ３１６のＹｅｓ）、最終投入コマンド判定部１２０３は、パトロールリフレッシュ処理が正常に完了したと判定する。この場合、最終投入コマンド判定部１２０３は、パトロールリフレッシュ処理を終了する。
【００６５】
上述した実施形態によれば、パージ機構１２０１ａを備えたメモリ装置１０において、論理ブロックに割り当てられている物理ブロックの全領域へのリードアクセスを伴うアクセス処理（ここでは、パトロールリフレッシュ処理）を、最終投入コマンド数、コマンド進捗情報及びコマンドレスポンスに基づいて管理することができる、本実施形態では、高速化のために投機的に発行される全てのアクセスコマンドを記録する必要はない。コマンドレスポンスについても同様である。このため本実施形態によれば、最終投入コマンド数、コマンド進捗情報及びコマンドレスポンスを記憶するための記憶領域の実現に必要なメモリ容量を、従来に比べて少なくしながら、ブロック単位に実行されるメモリアクセス処理を高速化することができる。
【００６６】
また本実施形態によれば、ＮＡＮＤインタフェース１２０１からレスポンス蓄積部１２０８への正常終了レスポンスの返却を、最終コマンド群を除くコマンド群に対しては不要としている。このため、ブロック単位に実行されるメモリアクセス処理を、小容量のメモリ領域を用いた管理でありながら、より一層高速化できる。
【００６７】
本実施形態において、ブロック単位に実行されるメモリアクセス処理は、パトロールリフレッシュ処理である。しかし、ブロック単位に実行されるメモリアクセス処理は、パトロールリフレッシュ処理に限らない。例えば自己診断処理のような、ブロック単位に実行されるメモリアクセス処理であっても構わない。
【００６８】
以上説明した少なくとも１つの実施形態によれば、ブロック単位のメモリアクセス処理を、小容量のメモリ領域を用いた管理で高速に実行できるメモリ装置及び同装置におけるメモリアクセス方法を提供することができる。
【００６９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７０】
１１…ＮＡＮＤフラッシュメモリ（メモリ）、１２…ＮＡＮＤコントローラ、１２０１…ＮＡＮＤインタフェース（メモリインタフェース）、１２０２…制御部、１２０３…最終投入コマンド判定部、１２０４…コマンド進捗管理部、１２０５…コマンド進捗判定部、１２０６…コマンド生成部、１２０７…テーブル管理部、１２０８…レスポンス蓄積部、１２０９…レスポンス解析部、１２１０…コンパクション部。
【図１】
0005318076.tif 000002
【図２】
0005318076.tif 000003
【図３】
0005318076.tif 000004
【図４】
0005318076.tif 000005