(57)【要約】【課題】エラーが真に発生した物理ブロックを特定することができるストレージデバイスを提供する。【解決手段】不揮発性メモリは、消去単位としてのブロックを複数備え、各ブロックは書き込み単位としてのページを複数有する。コントローラは、論理アドレスにて指定された前記不揮発性メモリのブロックから読み出したデータに対して、エラーの検出及び訂正を行い、エラーが訂正できないときにエラー発生を通知するエラー訂正回路と、エラー訂正回路及び不揮発性メモリの動作を制御する処理回路とを備える。処理回路は、エラー訂正回路からエラー発生の通知を受け取ったとき、エラーが発生した論理アドレスと前記論理アドレスに対応する物理アドレスを登録したエラーブロックテーブルを生成する。【選択図】図４
2013171343.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと前記不揮発性メモリを制御するコントローラとを備えたストレージデバイスにおいて、
前記不揮発性メモリは、消去単位としてのブロックを複数備え、各ブロックは書き込み単位としてのページを複数有し、
前記コントローラは、論理アドレスにて指定された前記不揮発性メモリのブロックから読み出したデータに対して、エラーの検出及び訂正を行い、エラーが訂正できないときにエラー発生を通知するエラー訂正回路と、前記エラー訂正回路及び前記不揮発性メモリの動作を制御する処理回路とを備え、
前記処理回路は、前記エラー訂正回路からエラー発生の通知を受け取ったとき、エラーが発生した前記論理アドレスと前記論理アドレスに対応する物理アドレスを登録したエラーブロックテーブルを生成することを特徴とするストレージデバイス。
【請求項２】
前記エラーブロックテーブルは前記物理アドレスが指定するブロックが書き換えられたか否かを示すフラグを有し、
前記処理回路は、前記エラーブロックテーブルに登録されている前記物理アドレスが指定するブロックが書き換えられたとき、前記フラグを書き換えることを特徴とする請求項１に記載のストレージデバイス。
【請求項３】
前記処理回路は、前記エラー訂正回路からエラー発生の通知を受け取ったとき、そのエラーが真のエラーであるか否かの判定を行わず、エラーが発生した全ての論理アドレスと前記論理アドレスに対応する物理アドレスを前記エラーブロックテーブルに記録することを特徴とする請求項１または２に記載のストレージデバイス。
【請求項４】
書き込み単位としてのページを複数含む物理ブロックを複数備えた不揮発性メモリと、
論理アドレスにて指定された前記不揮発性メモリのブロックから読み出したデータに対して、エラーの検出及び訂正を行い、エラーが訂正できないときにエラー発生を通知するエラー訂正回路と、
前記エラー訂正回路及び前記不揮発性メモリの動作を制御する処理回路と、
を具備し、
前記処理回路は、第１のブロックのページから読み出したデータに対して前記エラー訂正回路からエラー発生の通知を受け取ったとき、前記読み出したデータを書き込む第２のブロックのページの冗長部に、前記第１のブロックの物理アドレスを登録することを特徴とするストレージデバイス。
【請求項５】
前記処理回路は、前記エラー訂正回路からエラー発生の通知を受け取ったとき、前記第１のブロックのページの冗長部に登録されていた物理アドレスを、前記第２のブロックのページの冗長部に登録することを特徴とする請求項４に記載のストレージデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを搭載したストレージデバイスに関するものである。
【背景技術】
【０００２】
不揮発性メモリ（例えば、ＮＡＮＤ型フラッシュメモリ）を搭載したストレージデバイス、例えば、ＳＤ（Secure Digital）カードなどのメモリカードでは、一般的にビットエラーが発生することを前提に使用される。
【０００３】
例えば、ＮＡＮＤ型フラッシュメモリでは、フローティングゲートに保存した電子が自然と抜けてしまうことで発生するデータ破壊（データリテンション）や、同じブロックに対するリードの繰り返しなどによるストレスでデータが破壊（リードディスターブ）することによりエラーが発生する。このため、ＥＣＣ（Error Checking and Correction）回路によるエラー訂正技術を用いてビットエラーを訂正しながら使用するのが一般的である。
【０００４】
ＥＣＣ回路の訂正能力は使用するＥＣＣのアルゴリズムによって異なるが、そのアルゴリズムで訂正できる範囲内であれば、ビットエラーを全て訂正でき、正しいデータを読み出すことができる。
【０００５】
一方で、ＥＣＣ回路の訂正範囲を超えるビットエラーが発生した場合、ＥＣＣ回路はビットエラーを全て訂正できないため、エラーが発生していることを通知する。この場合、メモリカードは正しいデータを出力することができず、メモリカードはホスト機器へエラーが発生したことを通知する。以下、ＥＣＣ回路にて訂正不可能なエラーが発生してＥＣＣ回路から通知されたエラーを、ＥＣＣエラーと記す。
【０００６】
ＥＣＣエラーが発生するほどのビットエラーが発生するケースは、上述したデータリテンションやリードディスターブが特に悪化したケース（製造時のプロセスに起因するＮＡＮＤメモリセルの問題）や、ＮＡＮＤ型フラッシュメモリを制御するファームウェアの問題や、ホスト機器のアクセスパターンによる問題、またはＮＡＮＤ型フラッシュメモリの寿命と様々考えられる。
【０００７】
場合によっては、ＥＣＣエラーが発生した原因を調査する必要があり、ＥＣＣエラーが発生したＮＡＮＤ型フラッシュメモリにおける物理ブロックを特定する必要がある。ＥＣＣエラーが発生した物理ブロックを特定する場合、その物理ブロックが最初にＥＣＣエラーが発生した物理ブロックのままであれば、その物理ブロックを特定することは容易である。
【０００８】
しかし、コントローラが実行するファームウェアのアルゴリズムによっては、ＥＣＣエラーが発生した物理ブロックがバックグラウンド処理で別の物理ブロックにコピーされてしまうことも考えられる。
【０００９】
例えば、ある物理ブロックに書かれているアドレスのデータでＥＣＣエラーが発生したとする。次に、この物理ブロック内でＥＣＣエラーが発生した物理アドレス以外の箇所にデータライトが発生した場合、ＮＡＮＤ型フラッシュメモリの特性上、特定の箇所のみ上書きすることはできないため、別の物理ブロックを取得し、新しくライトされるデータ以外のデータは元の物理ブロックからコピーされる。そして、物理ブロックが確定したタイミングで、論理アドレスと物理アドレスの繋がりを示すテーブルが更新される。
【００１０】
このような場合は、論理アドレスとＥＣＣエラーが真に発生した物理ブロックとの繋がりが無くなってしまうため、ＥＣＣエラーが真に発生した物理ブロックを特定することが困難となる。
【００１１】
一方で、ＥＣＣエラーが発生した場合に、その物理ブロックをテーブルに登録／管理する技術提案がされているが、あくまでＮＡＮＤ型フラッシュメモリの特定ブロックへのリードでＥＣＣエラーが発生した時に、そのブロックを登録／管理するのみである。このため、バックグラウンド処理で別の物理ブロックにコピーが行われ、物理ブロックが変わってしまった場合、コピー前とコピー後の物理ブロックの繋がりがないため、ＥＣＣエラーが真に発生した物理ブロックを特定することは困難である。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】国際公開番号ＷＯ２００７／０１０８２９号
【発明の概要】
【発明が解決しようとする課題】
【００１３】
エラーが真に発生した物理ブロックを特定することができるストレージデバイスを提供する。
【課題を解決するための手段】
【００１４】
一実施態様のストレージデバイスは、不揮発性メモリと前記不揮発性メモリを制御するコントローラとを備えたストレージデバイスにおいて、前記不揮発性メモリは、消去単位としてのブロックを複数備え、各ブロックは書き込み単位としてのページを複数有し、前記コントローラは、論理アドレスにて指定された前記不揮発性メモリのブロックから読み出したデータに対して、エラーの検出及び訂正を行い、エラーが訂正できないときにエラー発生を通知するエラー訂正回路と、前記エラー訂正回路及び前記不揮発性メモリの動作を制御する処理回路とを備え、前記処理回路は、前記エラー訂正回路からエラー発生の通知を受け取ったとき、エラーが発生した前記論理アドレスと前記論理アドレスに対応する物理アドレスを登録したエラーブロックテーブルを生成することを特徴とする。
【図面の簡単な説明】
【００１５】
【図１】第１実施形態のメモリカードの全体構成を示すブロック図である。
【図２】第１実施形態におけるＮＡＮＤ型フラッシュメモリ内の記憶領域を示す図である。
【図３】第１実施形態におけるＮＡＮＤ型フラッシュメモリで行われるバックグラウンド処理を示す図である。
【図４】第１実施形態におけるエラーブロックテーブルの構成を示す図である。
【図５】第１実施形態におけるエラーブロックテーブルにアドレスを登録する際のフローチャートである。
【図６】第１実施形態におけるエラーブロックテーブルにアドレスを登録する際の他のフローチャートである。
【図７】第１実施形態におけるエラーブロックテーブルの他の構成を示す図である。
【図８】第２実施形態のメモリカードが備えるページの構成を示す図である。
【図９】第２実施形態におけるページにアドレスを登録する際のフローチャートである。
【図１０】第２実施形態におけるページにアドレスを登録する際の他のフローチャートである。
【発明を実施するための形態】
【００１６】
以下、図面を参照して実施形態のストレージデバイスについて説明する。ここでは、ストレージデバイスとして、不揮発性メモリ、例えばＮＡＮＤ型フラッシュメモリを搭載したＳＤカードなどのメモリカードを例に取る。なお、ここで説明する実施形態は、ＳＤカードに限るわけではなく、その他の不揮発性メモリを備えたストレージデバイス、例えばマルチメディアカード、ＵＳＢフラッシュメモリ、ＳＳＤ(solid state drive)等に適用することも可能である。以下の説明において、同一の機能及び構成を有する構成要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
【００１７】
［第１実施形態］
第１実施形態では、メモリカードを制御するファームウェアで用いるシステムデータ上で、ＥＣＣエラーが発生した論理ブロックとこの論理ブロックに対応する物理ブロックとを含むエラーブロックテーブルを管理することにより、エラーが発生した物理ブロックの特定を可能にする。
【００１８】
図１は、第１実施形態のメモリカードの全体構成を示すブロック図である。
【００１９】
図示するように、メモリカード１は、データを保存するデバイスである不揮発性メモリ、例えばＮＡＮＤ型フラッシュメモリ１０と、それを制御するメモリコントローラ２０により構成される。メモリコントローラ２０は、ＭＰＵ（Micro Processing Unit）２１などの処理回路、ＲＯＭ（Read-Only Memory）２２、ＲＡＭ（Random Access Memory）２３、データバッファ２４、ＥＣＣ（Error Checking and Correction）回路２５などのエラー訂正回路、ホストインターフェイス（ホスト Ｉ／Ｆ）２６、及びＮＡＮＤインターフェイス（ＮＡＮＤ Ｉ／Ｆ）２７を備える。メモリカード１は、ホスト機器２に装着され、ホスト機器２からのアクセスに応じた処理を実行する。
【００２０】
メモリコントローラ２０の制御プログラムであるファームウェアは、コントローラ２０内部のＲＯＭ２２あるいはＮＡＮＤ型フラッシュメモリ１０に記録されており、読み出されて利用される。
【００２１】
ＭＰＵ２１は、ファームウェアに基づいてメモリコントローラ２０に対する書き込み、読み出し、及び消去の動作を制御する。ＲＯＭ２２は、ＭＰＵ２１により使用される制御プログラムなどを格納するメモリである。ＲＡＭ２３は、ＭＰＵ２１の作業エリアとして使用され、制御プログラムや各種のテーブルを記憶する揮発性メモリである。データバッファ２４は、書き込み時及び読み出し時に一時的にデータを記憶する記憶領域である。
【００２２】
ＥＣＣ回路２５は、書き込みデータにＥＣＣコードを付与する機能を有する。さらに、ＥＣＣ回路２５は、ＮＡＮＤ型フラッシュメモリ１０から読み出したデータに対して、エラーの検出、エラーの訂正、及びエラーの通知を行う機能を有する。すなわち、ＥＣＣ回路２５は、読み出したデータに対してエラーを検出し、エラーがある場合、そのエラーを訂正する。さらに、検出したエラーが訂正可能な範囲を超えている場合は、エラーが発生していることをメモリコントローラ２０に通知する。
【００２３】
ホストインターフェイス２６は、メモリコントローラ２０とホスト機器２との間のインターフェイス処理を実行する。ＮＡＮＤインターフェイス２７は、メモリコントローラ２０とＮＡＮＤ型フラッシュメモリとの間のインターフェイス処理を実行する。
【００２４】
図２は、ＮＡＮＤ型フラッシュメモリ内の記憶領域を概略的に示している。
【００２５】
メモリカード１におけるＮＡＮＤ型フラッシュメモリ１０の記憶領域は、ユーザー領域１１、セキュア領域１２、各種レジスタ１３、及びシステム領域１４から成る。ユーザー領域１１は、通常データを格納する。セキュア領域１２は、機密性の高いデータを格納する。各種レジスタ１３は、各種の動作情報などを格納する。システム領域１４は、ＮＡＮＤ型フラッシュメモリ１０を制御するためにメモリコントローラ２０で実行されるファームウェアやその他のシステムデータを格納する。
【００２６】
一般的に、ホスト機器２とメモリカード１間でのデータ転送は、メモリコントローラ２０が定義する論理ブロックアドレスが使用される。この論理ブロックアドレスは、ＮＡＮＤ型フラッシュメモリ１０における真のアドレスである物理ブロックアドレスと１対１でマッピングされている。論理ブロックアドレスと物理ブロックアドレスをマッピングするマッピングテーブル（論物変換テーブル）はＮＡＮＤ型フラッシュメモリ１０内のシステム領域１４にて管理されている。また、この論理ブロックアドレスに対する物理ブロックアドレスは必ずしも１から順番に並んでおらず、状況に応じて様々な物理ブロックアドレスが割り当たる可能性がある。
【００２７】
図３は、ＮＡＮＤ型フラッシュメモリ１０で行われるバックグラウンド処理において、ある物理ブロックから別の物理ブロックにマッピングが変化する様子を示している。
【００２８】
例えば、ある論理ブロックＡのページアドレスＬＡにデータが存在し、これが物理ブロックＡのページアドレスＰＡにマッピングされているとする。
【００２９】
ここで、（１）論理ブロックＡの別のページアドレスＬＢに書き込みが実行される場合、ＮＡＮＤ型フラッシュメモリ１０はその特性上、特定のデータのみの上書きはできないため、新規の物理ブロックＢを用意し、新規の書き込みデータとその他のデータをマージする必要がある。
【００３０】
物理ブロックＢには、まず、（２）書き込みデータより前の部分を物理ブロックＡよりコピーしてくる。この際には、既に存在しているページＰＡのデータも含む。また、物理ブロックＡから読み出されたデータに対して、ＥＣＣ回路２５がエラーを検出する。検出したエラーが訂正可能な範囲を超えていない場合、ＥＣＣ回路２５は、そのエラーを訂正し、訂正後のデータに基づいて新たなＥＣＣコードを生成する。この新たなＥＣＣコードと訂正後のデータが物理ブロックＢに書き込まれる。検出したエラーが訂正可能な範囲を超えている場合、ＥＣＣ回路２５は、ＥＣＣエラーを通知し、ビットエラーを含むデータに基づいて新たなＥＣＣコードを生成する。この新たなＥＣＣコードとビットエラーを含むデータが物理ブロックＢに書き込まれる。このとき、コントローラ２０は、過去にＥＣＣエラーが起きたことを示すフラグを用いて、過去にＥＣＣエラーが生じたことを管理する。
【００３１】
続いて、（３）書き込みデータを物理ブロックＢのページＰＤに書き込む。次に、（４）書き込みデータよりも後ろの部分を物理ブロックＡよりコピーする。この際のＥＣＣ回路２５の動作は、（２）で説明したものと同様である。
【００３２】
最後に、（５）論理ブロックアドレスと物理ブロックアドレスのマッピングを更新して完了となる。図３の例では、論理ブロックＡのページＬＡとのマッピングを、物理ブロックＡのページＰＡから物理ブロックＢのページＰＣへ更新する。このように、ある論理ブロックアドレスに対応する物理ブロックアドレスが変更されることになる。
【００３３】
もし、上記ケースにおいて、ＥＣＣエラーを含んだ物理ブロックが、論理ブロックＡのページＬＡ及び物理ブロックＡのページＰＡに含まれていた場合、実際にＥＣＣエラーが発生した物理ブロックが変わってしまうため、ＥＣＣエラーを含んだ真の物理ブロックを特定することは困難となる。具体的には、物理ブロックＡのページＰＡから物理ブロックＢのページＰＣにデータをコピーする際、ＥＣＣ回路２５は、ＥＣＣエラーが生じたデータから新たにＥＣＣコードを生成する。このため、ページＰＣからＥＣＣコードを読み出しても、新たなビットエラーが生じない限り、ＥＣＣ回路２５は、ＥＣＣコードに基づいてエラーを検出することができない。このとき、コントローラ２０は、上述のフラグから、ページＰＣに格納されたデータで過去にＥＣＣエラーが生じたことを検知することができる。しかし、フラグはＥＣＣエラーの有無を示すだけのものであるため、どの物理ブロックで生じたエラーによりＥＣＣエラーが発生したのか、特定することができない。
【００３４】
そこで、本実施形態では、ＮＡＮＤ型フラッシュメモリ１０のシステム領域１４上にエラーブロックテーブルを用意し、ＥＣＣエラーを含んだ論理ブロックとこの論理ブロックに対応した物理ブロックとを管理していくことにより、ＥＣＣエラーが真に発生した物理ブロックを特定できる仕組みを構築する。
【００３５】
図４は、ＥＣＣエラーが発生したブロックを記録するエラーブロックテーブルの構成を示す。エラーブロックテーブルには、ＥＣＣエラーが発生した論理ブロックアドレスとそれにマッピングされた物理ブロックアドレスが記録され、管理される。すなわち、ＥＣＣエラーが発生した論理ブロックアドレスとこの論理ブロックアドレスに対応する物理ブロックアドレスが登録され、管理される。
【００３６】
図５に、図４に示したエラーブロックテーブルにアドレスを登録する際のフローチャートを示す。
【００３７】
まず、コントローラ２０は、ＮＡＮＤ型フラッシュメモリ１０へデータの読み出し要求を出す（ステップＳ１１）。続いて、読み出したデータにＥＣＣエラーが発生しているか否かを判定する（ステップＳ１２）。詳述すると、コントローラ２０は、選択された物理ブロックから読み出したデータに訂正不可能なエラーが含まれているか否か、さらにコントローラ２０を制御するファームウェアが管理するフラグにおいて、過去にＥＣＣエラーが起きたことを示すフラグが立っているか否かを判定する。そして、訂正不可能なエラーが含まれている場合、あるいはフラグが立っている場合の少なくともいずれかの場合、ＥＣＣエラーが発生していると判定する。
【００３８】
ＮＡＮＤ型フラッシュメモリ１０から読み出したデータにＥＣＣエラーが発生している場合、コントローラ２０はエラーブロックテーブルにＥＣＣエラーが発生した論理ブロックアドレスが登録されているか否かを判定する（ステップＳ１３）。
【００３９】
エラーブロックテーブルに同じ論理ブロックアドレスが登録されていなければ、ＥＣＣエラーが発生した論理ブロックアドレスとそれに対応する物理ブロックアドレスをエラーブロックテーブルに登録する（ステップＳ１４）。
【００４０】
ステップ１３において、エラーブロックテーブルに同じ論理ブロックアドレスが登録されている場合、コントローラ２０は、発生したＥＣＣエラーがビットエラー過多により訂正不可能なエラーを含む真のＥＣＣエラーであるか否かを判定する。言い換えると、ここでは、読み出したデータがＥＣＣエラーを含む物理ブロックからコピーされたデータであり、この読み出したデータに対して再度ＥＣＣコードが計算されてエラーの検出が行われたとき、そのデータが訂正不可能なエラーを含んでいるか否かを判定する。さらに、ファームウェアが管理するフラグにおいて、過去にＥＣＣエラーが起きたことを示すフラグが立っているか否かを判定する。そして、前述した訂正不可能なエラーを含んでいる場合だけ真のＥＣＣエラーであると判定する。（ステップＳ１５）。
【００４１】
発生したＥＣＣエラーが真のＥＣＣエラーである場合、エラーブロックテーブルに論理ブロックアドレスの登録が無いケースと同様に、その論理ブロックアドレスとそれに対応する物理ブロックアドレスをエラーブロックテーブルに登録する（ステップＳ１４）。
【００４２】
一方、発生したＥＣＣエラーが真のＥＣＣエラーでない場合、前述したように、例えば、読み出したデータがＥＣＣエラーを含む物理ブロックからコピーされて来ただけのデータであり、新たなビットエラーに因るものではない場合であって、ファームウェアが単に過去にＥＣＣエラーが起きたことを示すフラグによってその選択された物理ブロックがＥＣＣエラーを含むと判断しているに過ぎない場合等は、それらアドレスを登録しない。
【００４３】
以上がエラーブロックテーブルにアドレスを登録する際の処理フローである。
【００４４】
第１実施形態では、エラーが発生した論理ブロックアドレスとこの論理ブロックアドレスに対応する物理ブロックアドレスを記録したエラーブロックテーブルを備えることにより、不揮発性メモリへのアクセス時にエラーが発生した際、真にエラーが発生した物理ブロックへ遡ることができ、その物理ブロックを特定することが可能となる。
【００４５】
また、エラーブロックテーブルにアドレスを登録する際の別の処理として、エラーが発生した場合の論理ブロックアドレスと物理ブロックアドレスを全てエラーブロックテーブルに登録するようにしてもよい。
【００４６】
図６に、エラーが発生した全てのアドレスをエラーブロックテーブルに登録する際のフローチャートを示す。
【００４７】
前述した図５では、ＥＣＣエラーが真のＥＣＣエラーでない場合、エラーブロックテーブルにアドレスを登録せずに終了していた。しかし、図６に示す処理では、読み出したデータにＥＣＣエラーが発生しているか否かを判定し（ステップＳ１２）、ＥＣＣエラーが発生した全ての論理ブロックアドレスとそれに対応する物理ブロックアドレスをエラーブロックテーブルに登録する。
【００４８】
このように、ＥＣＣエラーが発生した全ての論理ブロックアドレスと物理ブロックアドレスを登録することは、ＥＣＣエラーが発生したアドレスの遷移を記録することになる。つまり、ＥＣＣエラーが発生した論理ブロックアドレスに対して、その大元の真にエラーを含む物理ブロックアドレスだけでなく、その論理ブロックアドレスが使用してきた物理ブロックアドレスの履歴を記録することになる。この履歴を解析すれば、不具合の発生シーケンスの確認に役立てることができる。
【００４９】
さらに、図４に示したエラーブロックテーブルに、図７に示すように、その物理ブロックがＥＣＣエラー発生時の状態を保っているかどうかを示すフラグを登録するようにしても良い。
【００５０】
コントローラ２０のファームウェアによるが、消去や上書きの書き込みが発生した場合、その物理ブロックの状態が変わってしまうことがありえる。このため、例えば物理ブロックの状態を示す状態保持フラグを１バイト分持っておく。ＥＣＣエラー発生時の状態を保っているときフラグを“０ｘ００”とし、ＥＣＣエラー発生時の状態を保っていないときフラグを“０ｘＦＦ”とする。
【００５１】
最初のデータを保持しているとき保持状態フラグを“０ｘ００”とし、メモリカードへ書き込み処理が発生した場合に、このエラーブロックテーブルの物理ブロックアドレスを検索する。もし、同じ物理ブロックアドレスがエラーブロックテーブルに既に登録されている場合、検索対象の論理ブロックアドレス、その物理ブロックアドレス、及びその状態保持フラグ“０ｘＦＦ”をエラーブロックテーブルに新規に登録する。このように新規に登録するのは、ＮＡＮＤ型フラッシュメモリの特性上、上書きの書き込みができないためである。
【００５２】
消去及び書き込みを行う毎に、上述したように、エラーブロックテーブルに論理ブロックアドレス、物理ブロックアドレス及び状態保持フラグを登録しておけば、常に登録されているエントリの最下位エントリが最新となる。このため、重複した論理ブロックアドレス及び物理ブロックアドレスが存在していても、最新の登録情報を判断することが可能となる。状態保持フラグをエラーブロックテーブルに持つことにより、該当する物理ブロックのデータが保存されているかどうかが分かり、エラーが発生した物理ブロックの解析に役立てることができる。
【００５３】
第１実施形態によれば、エラーブロックテーブルを持ち、論理アドレスとこの論理アドレスに対応する物理アドレスをエラーブロックテーブルで管理することにより、ＥＣＣエラーが真に発生した物理ブロックを特定することが可能となる。加えて、ＥＣＣエラーが真に発生した物理アドレスのみを登録しておくだけでなく、その過程の物理アドレスも同様に登録しておけば、アクセスシーケンスを確認することもできる。
【００５４】
さらに、エラーブロックテーブルに状態保持フラグを記録しておくことにより、エラーが発生した物理ブロックにそのデータがそのまま残っているかどうかも確認でき、エラー発生の解析に役立てることができる。本実施形態では、ＥＣＣエラーが真に発生した物理ブロックを、現行使われている物理ブロックから遡り特定することが可能となる。
【００５５】
［第２実施形態］
第２実施形態では、ＮＡＮＤ型フラッシュメモリが備えるページの冗長部にＥＣＣエラーのアドレス情報を登録しておくことにより、ＥＣＣエラーが発生した物理ブロックの特定を可能にする。
【００５６】
図８は、第２実施形態のメモリカードが備えるページの構成を示す図である。
【００５７】
ＮＡＮＤ型フラッシュメモリ１０は、消去単位としてのブロックを複数有し、各ブロックは書き込み単位としてのページを複数有している。ＮＡＮＤ型フラッシュメモリ１０が有するページは、図８に示すように、通常データが記憶されるデータ部１５と、冗長部１６とを有する。冗長部１６は、ＥＣＣコードが記憶される領域１６Ａと、空き領域１６Ｂを含んでいる。第２実施形態では、ページの冗長部１６が持つ空き領域１６Ｂに、ＥＣＣエラーが発生した物理ブロックアドレスを記憶する。このように、ページ冗長部１６が含む空き領域１６Ｂに、ＥＣＣエラーが発生した物理ブロックアドレスを登録しておくことにより、コントローラ２０はＥＣＣエラーが発生した物理ブロックアドレスを管理する。
【００５８】
メモリコントローラ２０からＮＡＮＤ型フラッシュメモリ１０へ読み出し要求が発生し、ＮＡＮＤ型フラッシュメモリ１０から読み出したデータにＥＣＣエラーが発生した場合、ＥＣＣエラーが発生した物理ブロックアドレスをページ冗長部１６に登録する。
【００５９】
一方、例えば、ホスト機器からの直接の読み出し要求でＥＣＣエラーが発生した場合は、特にその論理ブロックアドレスに対応する物理ブロックアドレスを登録しない。これは、次にまた同じ論理ブロックアドレスを読み出せばＥＣＣエラーが発生し、論理ブロックアドレスと物理ブロックアドレスを繋ぐテーブル（論物変換テーブル）を確認すれば、ＥＣＣエラーが発生した物理ブロックアドレスを特定することが可能だからである。
【００６０】
しかし、例えば、ホスト機器からの要求ではなく、メモリコントローラ２０からのバックグラウンド処理等によるデータコピーで読み出しが実行され、ＥＣＣエラーが検出された場合は、図９に示すフローチャートに従って物理ブロックアドレスの登録処理を実行する。
【００６１】
まず、コントローラ２０は、ＮＡＮＤ型フラッシュメモリ１０におけるコピー元のページへデータの読み出し要求を出す（ステップＳ２１）。続いて、コピー元のページから読み出したデータにＥＣＣエラーが発生しているか否かを判定する（ステップＳ２２）。詳述すると、コントローラ２０は、読み出したデータに訂正不可能なエラーが含まれているか否か、さらにコントローラ２０を制御するファームウェアが管理するフラグにおいて、過去にＥＣＣエラーが起きたことを示すフラグが立っているか否かを判定する。そして、訂正不可能なエラーが含まれている場合、あるいはフラグが立っている場合の少なくともいずれかの場合、ＥＣＣエラーが発生していると判定する。
【００６２】
コピー元のページから読み出したデータにＥＣＣエラーが発生していない場合、登録処理を終了する。一方、コピー元のページから読み出したデータにＥＣＣエラーが発生している場合、コントローラ２０はコピー元のページ冗長部１６に、以前にＥＣＣエラーが発生した物理ブロックアドレスが登録されているか否かを判定する（ステップＳ２３）。
【００６３】
ページ冗長部１６に物理ブロックアドレスが登録されていない場合、コピー先のページ冗長部１６の空き領域１６Ｂに、コピー元の物理ブロックアドレスを登録し（ステップＳ２４）、処理を終了する。
【００６４】
一方、ステップＳ２３において、ページ冗長部１６に物理ブロックアドレスが既に登録されている場合、コントローラ２０は、読み出したデータに発生したＥＣＣエラーがビットエラー過多により訂正不可能なエラーを含む真のＥＣＣエラーであるか否かを判定する。言い換えると、ここでは、読み出したデータがＥＣＣエラーを含む物理ブロックからコピーされたデータであり、この読み出したデータに対して再度ＥＣＣコードが計算されてエラーの検出が行われたとき、そのデータが訂正不可能なエラーを含んでいるか否かを判定する。さらに、ファームウェアが管理するフラグにおいて、過去にＥＣＣエラーが起きたことを示すフラグが立っているか否かを判定する。そして、前述した訂正不可能なエラーを含んでいる場合だけ真のＥＣＣエラーであると判定する。（ステップＳ２５）。
【００６５】
発生したＥＣＣエラーが真のＥＣＣエラーである場合、コピー元のページ冗長部１６に登録されている物理ブロックアドレス及びコピー元の物理ブロックアドレスを、コピー先のページ冗長部１６の空き領域１６Ｂに登録する。すなわち、コピー元のページ冗長部１６に既に登録済みの物理ブロックアドレスをコピー先のページ冗長部１６の空き領域１６Ｂに引き継ぎ、登録すると共に、今回エラーが発生した物理ブロックアドレスを登録し（ステップＳ２６）、処理を終了する。
【００６６】
一方、ステップＳ２５において、発生したＥＣＣエラーが真のＥＣＣエラーでない場合、コピー元のページ冗長部１６に登録されている物理ブロックアドレスを、コピー先のページ冗長部１６の空き領域１６Ｂに登録し（ステップＳ２７）、処理を終了する。
【００６７】
以上により、ＥＣＣエラーが発生した場合の物理ブロックアドレスをページ冗長部に登録する処理を終了する。
【００６８】
前述したように、既に、物理ブロックアドレスが冗長部に登録されたページを含む物理ブロックが、別の物理ブロックにコピーされる場合においても、このコピー先の物理ブロックにおいてビットエラーによる真のＥＣＣエラーが発生する可能性がある。この場合、先にＥＣＣエラーが発生した１つ目の物理ブロックアドレスに加えて、今回ＥＣＣエラーが発生した物理ブロックアドレスも２つ目として登録する必要がある。
【００６９】
このようにすることで、例えばＥＣＣエラーが発生した物理ブロックが何度も別の物理ブロックにコピーされたとしても、ＥＣＣエラーが真に発生した物理ブロックを特定することが可能となる。
【００７０】
また、ＮＡＮＤ型フラッシュメモリ１０のページ冗長部に物理ブロックアドレスを登録する際の別の処理として、エラーが発生した場合の物理ブロックアドレスをすべてページ冗長部に引き継ぎ、登録するようにしてもよい。
【００７１】
図１０に、エラーが発生した全ての物理ブロックアドレスをページ冗長部に登録する際のフローチャートを示す。
【００７２】
前述した図９では、ＥＣＣエラーが真のＥＣＣエラーでない場合、その物理ブロックアドレスはページ冗長部１６に登録せずに終了していた。しかし、図１０に示す処理では、読み出したデータにＥＣＣエラーが発生しているか否かを判定し（ステップＳ２２）、ＥＣＣエラーが発生している場合、ＥＣＣエラーが発生したコピー元のページ冗長部に登録されている物理ブロックアドレスと、コピー元の物理ブロックアドレスとを、真のＥＣＣエラーか否かにかかわらず、コピー先のページ冗長部に登録する（ステップＳ２６）。
【００７３】
このように、ＥＣＣエラーが真に発生した物理ブロックアドレスだけでなく、その過程の物理ブロックアドレスも同様に登録しておく。これにより、ＥＣＣエラーデータが繰り返しコピーされてしまったケースにおいても、エラーが発生した物理ブロックアドレスのアクセス履歴を知ることができ、不具合を解析する際の手がかりとすることが可能となる。すなわち、この場合、ＥＣＣエラーが発生してからの全てのアドレス履歴を追うことが可能となり、不具合の解析に役立てることができる。
【００７４】
第２実施形態によれば、ＮＡＮＤ型フラッシュメモリのブロック内のページ冗長部にエラーが発生した物理アドレスを登録しておくことにより、ＥＣＣエラーが真に発生した物理ブロックを特定することが可能となる。加えて、ＥＣＣエラーが真に発生した物理アドレスのみを登録しておくだけでなく、その過程の物理アドレスも同様に登録しておけば、アクセスシーケンスを確認することもできる。本実施形態では、ＥＣＣエラーが真に発生した物理ブロックを、現行使われている物理ブロックから遡り特定することが可能となる。
【００７５】
以上説明したように前記実施形態では、ＥＣＣエラーが発生した物理アドレスをエラーブロックテーブルとして、ＮＡＮＤ型フラッシュメモリ内部のシステムテーブルで管理すること、またはＥＣＣエラーが発生した物理アドレスをＮＡＮＤ型フラッシュメモリのページ冗長部で管理することにより、ホスト機器からの要求時だけでなく、コントローラによるバックグラウンド処理におけるデータコピー等でＥＣＣエラーが発生しても、ＥＣＣエラーが真に発生した物理アドレスを特定することが可能である。
【００７６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７７】
１…メモリカード、２…ホスト機器、１０…ＮＡＮＤ型フラッシュメモリ、１１…ユーザー領域、１２…セキュア領域、１３…各種レジスタ、１４…システム領域、２０…メモリコントローラ、２１…ＭＰＵ、２２…ＲＯＭ、２３…ＲＡＭ、２４…データバッファ、２５…ＥＣＣ回路、２６…ホストインターフェイス（ホスト Ｉ／Ｆ）、２７…ＮＡＮＤインターフェイス（ＮＡＮＤ Ｉ／Ｆ）。
【図１】
2013171343.tif 000003
【図２】
2013171343.tif 000004
【図３】
2013171343.tif 000005
【図４】
2013171343.tif 000006
【図５】
2013171343.tif 000007
【図６】
2013171343.tif 000008
【図７】
2013171343.tif 000009
【図８】
2013171343.tif 000010
【図９】
2013171343.tif 000011
【図１０】
2013171343.tif 000012