(57)【要約】【課題】実施形態は、例えば、装置を低コストで構成できる装置及び方法を提供することを目的とする。【解決手段】実施形態によれば、不揮発性メモリとコントローラとを有する装置が提供される。不揮発性メモリは、メモリセルアレイ及び内部バッファを有する。コントローラは、メモリセルアレイから読み出された第１のデータの誤り訂正処理に失敗した後に、第１のデータから作成された第２のデータを内部バッファに格納する。コントローラは、格納された第２のデータを内部バッファから読み出して誤り訂正処理を行う。【選択図】図５
2016143085.tif 000002
【特許請求の範囲】
【請求項１】
メモリセルアレイ及び内部バッファを有する不揮発性メモリと、
前記メモリセルアレイから読み出された第１のデータの誤り訂正処理に失敗した後に、前記第１のデータから作成された第２のデータを前記内部バッファに格納し、前記格納された第２のデータを前記内部バッファから読み出して誤り訂正処理を行うコントローラと、
を備えた装置。
【請求項２】
前記コントローラは、前記第１のデータにおける一部のビットの正解値、又は前記一部のビットより正解らしさが高い値に基づいて、前記一部のビットを書き換えて前記第２のデータを作成する
請求項１に記載の装置。
【請求項３】
前記コントローラは、前記第１のデータから前記第２のデータを作成して前記内部バッファに書き込む
請求項１又は２に記載の装置。
【請求項４】
前記コントローラは、前記第１のデータを前記内部バッファ上で書き換えて前記第２のデータを作成する
請求項１又は２に記載の装置。
【請求項５】
前記コントローラは、前記内部バッファを用いて前記第１のデータから複数の前記第２のデータを作成し、前記複数の第２のデータを前記内部バッファから読み出して誤り訂正処理を行う
請求項１から３のいずれか１項に記載の装置。
【請求項６】
内部バッファを有する不揮発性メモリのメモリセルアレイから読み出された第１のデータの誤り訂正処理を行うことと、
前記第１のデータの誤り訂正デコード処理に失敗した後に、前記第１のデータから作成された第２のデータを前記内部バッファに格納することと、
前記格納された第２のデータを前記内部バッファから読み出して誤り訂正処理を行うことと、
を備えた方法。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、装置及び方法に関する。
【背景技術】
【０００２】
不揮発性メモリを有する装置では、不揮発性メモリのメモリセルアレイから読み出されたデータの誤りを訂正するために誤り訂正符号を用いて誤り訂正処理を行う。このとき、装置を低コストで構成することが望まれる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−４８７７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
実施形態は、例えば、装置を低コストで構成できる装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
実施形態によれば、不揮発性メモリとコントローラとを有する装置が提供される。不揮発性メモリは、メモリセルアレイ及び内部バッファを有する。コントローラは、メモリセルアレイから読み出された第１のデータの誤り訂正処理に失敗した後に、第１のデータから作成された第２のデータを内部バッファに格納する。コントローラは、格納された第２のデータを内部バッファから読み出して誤り訂正処理を行う。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態にかかる装置の構成を示すブロック図である。
【図２】図２は、第１の実施形態における訂正候補データの例を示す模式図である。
【図３】図３は、第１の実施形態における訂正候補データの他の例を示す模式図である。
【図４】図４は、第１の実施形態にかかる装置の動作を示すフローチャートである。
【図５】図５は、第１の実施形態にかかる装置の動作を示す模式図である。
【図６】図６は、第２の実施形態にかかる装置の動作を示すフローチャートである。
【図７】図７は、第２の実施形態にかかる装置の動作を示す模式図である。
【図８】図８は、第３の実施形態にかかる装置の動作を示すフローチャートである。
【図９】図９は、第３の実施形態にかかる装置の動作を示す模式図である。
【図１０】図１０は、第４の実施形態にかかる装置の動作を示すフローチャートである。
【図１１】図１１は、第４の実施形態にかかる装置の動作を示す模式図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかる装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
第１の実施形態にかかる装置１について図１を用いて説明する。図１は、装置１の構成を示すブロック図である。装置１は、通信媒体を介してホスト装置ＨＡの外部に接続され、ホスト装置ＨＡに対する外部記憶媒体として機能する。ホスト装置ＨＡは、例えば、パーソナルコンピュータ又はＣＰＵコアを含む。装置１は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）又はＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）を含む。
【０００９】
装置１は、図１に示すように、コントローラ１０、不揮発性メモリ２０、及びバッファメモリ３０を有する。
【００１０】
コントローラ１０は、装置１の各構成要素を統括的に制御する。コントローラ１０は、ＣＰＵ１１、バッファコントローラ１２、不揮発性メモリコントローラ１３、不揮発性メモリ用ＥＣＣエンコーダ（以下、ＥＣＣエンコーダとする）１４、及び不揮発性メモリ用ＥＣＣデコーダ（以下、ＥＣＣデコーダとする）１５を有する。
【００１１】
不揮発性メモリ２０は、メモリセルアレイ２１及び内部バッファ２２を有する。メモリセルアレイ２１では、複数のメモリセルが行に沿った方向及び列に沿った方向に配列されている。個々のメモリセルは、例えば、上位ページ及び下位ページを使用して多値記憶が可能であってもよい。メモリセルアレイ２１では、データの消去がブロック単位で行われるのに対して、データの書き込み及び読み出しがページ単位で行われる。ブロックは、複数のページをひとまとめにした単位である。また、メモリセルアレイ２１に対して、ＣＰＵ１１による内部的なデータ管理がクラスタ単位で行われ、データの更新がセクタ単位で行われる。この実施形態では、ページは、複数のクラスタをひとまとめにした単位であるとし、クラスタは、複数のセクタをひとまとめにした単位であるとする。不揮発性メモリ２０は、例えばＮＡＮＤ型フラッシュメモリが用いられる。
【００１２】
なお、不揮発性メモリ２０は、フラッシュメモリに代えて、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの不揮発性メモリが用いられてもよい。
【００１３】
内部バッファ２２は、不揮発性メモリコントローラ１３との間で転送データを送受信する際のバッファである。例えば、不揮発性メモリ２０がＮＡＮＤ型フラッシュメモリである場合、不揮発性メモリコントローラ１３との間で送受信する転送データのサイズがページサイズであり、内部バッファ２２は、ページバッファである。内部バッファ２２は、例えばＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）により構成される。
【００１４】
バッファメモリ３０は、ホスト装置ＨＡとバッファコントローラ１２との間でのデータ転送用のキャッシュ領域３１、並びに、ＣＰＵ１１及びバッファコントローラ１２が使用する作業領域３２を含む。バッファメモリ３０としては、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又はＦｅＲＡＭ、ＭＲＡＭ、ＰＲＡＭなどを含む。また、バッファメモリ３０は、不揮発性メモリ２０から読み出した各種管理テーブルを作業領域３２に一時的に記憶（格納）する。
【００１５】
ホストＩ／Ｆ４０は、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）  Ｅｘｐｒｅｓｓ規格、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）規格、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）規格などに従ったインタフェースである。ホストＩ／Ｆ４０は、ホスト装置ＨＡから受信した命令、データなどをバッファコントローラ１２に出力し、バッファコントローラ１２経由で入力されたデータ、ＣＰＵ１１からの応答通知（命令の実行完了を示す通知など）などをホスト装置ＨＡへ送信する。
【００１６】
コントローラ１０において、ＣＰＵ１１は、コントローラ１０内の各構成要素を統括的に制御する。ＣＰＵ１１は、ファームウェアＦＷを実行することによって、コントローラ１０の機能を制御する。コントローラ１０の機能とは、例えば、パケットの送受信、コマンドの実行、ＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）処理、ウェアレベリング、およびコンパクションを含む。また、ＣＰＵ１１は、ホスト装置ＨＡからホストＩ／Ｆ４０及びバッファコントローラ１２経由での命令を受けた場合に、その命令に従った制御を行う。
【００１７】
バッファコントローラ１２は、ＣＰＵ１１による制御のもと、バッファメモリ３０とホスト装置ＨＡとの間のデータ転送を制御する。バッファコントローラ１２は、書き込み命令及びデータをＣＰＵ１１から受けた場合、書き込むべきデータをデータ部とし、データ部にフラグ部を付加したライトデータを生成する。例えば、バッファコントローラ１２は、書き込むべきデータが管理情報とユーザーデータとのいずれであるのかを識別する管理情報識別フラグをフラグ部に含めることができる。管理情報識別フラグは、例えば書き込むべきデータが管理情報である場合に００ｈ（００００００００ｂ）となり、書き込むべきデータがユーザーデータである場合にＦＦｈ（１１１１１１１１ｂ）となるものと定義できる。バッファコントローラ１２は、ライトデータ（＝データ部＋フラグ部）をＥＣＣエンコーダ１４へ転送する。
【００１８】
ＥＣＣエンコーダ１４は、ＣＰＵ１１による制御のもと、転送されたライトデータに対してＥＣＣ処理におけるエンコード処理を行ってＥＣＣパリティを生成する。ＥＣＣパリティとしては、例えば、ハミング符号、ＢＣＨ（Ｂｏｓｅ  Ｃｈａｕｄｈｕｒｉ  Ｈｏｃｑｅｎｇｈｅｍ）符号、ＲＳ（Ｒｅｅｄ  Ｓｏｌｏｍｏｎ）符号、或いはＬＤＰＣ（Ｌｏｗ  Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ）符号等が用いられる。ＥＣＣパリティの誤り訂正能力は、誤り訂正可能ビット数で表すことができる。ＥＣＣパリティの誤り訂正能力がＮビット（例えば、１００ビット）である場合、ライトデータ（＝データ部＋フラグ部）とＥＣＣパリティ部に含まれるビットエラー数が最大ＮビットまでＥＣＣパリティにより誤り訂正可能である。ＥＣＣエンコーダ１４は、生成されたＥＣＣパリティをＥＣＣパリティ部としてライトデータに付加しライトデータ（＝データ部＋フラグ部＋ＥＣＣパリティ部）として不揮発性メモリコントローラ１３へ転送する（図２（ａ）参照）。
【００１９】
不揮発性メモリコントローラ１３は、ＣＰＵ１１による制御のもと、不揮発性メモリ２０とバッファメモリ３０との間のデータ転送を制御する。不揮発性メモリコントローラ１３は、ＣＰＵ１１から受けた命令に従って、不揮発性メモリ２０用のコマンドを発行して不揮発性メモリ２０へ転送する。
【００２０】
例えば、不揮発性メモリコントローラ１３は、書き込み命令をＣＰＵ１１から受けた場合、ライトコマンドを発行して不揮発性メモリ２０へ供給する。ライトコマンドのコマンドシーケンスは、例えば、次の表記１である。
［ＣＭＤ：８０ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＷＤＡＴＡ］−［ＣＭＤ：１０ｈ］・・・表記１
【００２１】
表記１において、［ＣＭＤ：８０ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］は、不揮発性メモリコントローラ１３から内部バッファ２２にデータを書き込むコマンドである。［ＷＤＡＴＡ］は、ライトデータである。［ＣＭＤ：１０ｈ］は、内部バッファ２２からメモリセルアレイ２１にプログラム（ライト）するコマンドである。
【００２２】
不揮発性メモリ２０は、不揮発性メモリコントローラ１３から供給されたライトコマンドに従って、内部バッファ２２をクリアし、データを内部バッファ２２に格納する。不揮発性メモリ２０は、内部バッファ２２に格納されたデータをメモリセルアレイ２１に一般的にページ単位で書き込む。
【００２３】
あるいは、例えば、不揮発性メモリコントローラ１３は、読み出し命令をＣＰＵ１１から受けた場合、リードコマンドを発行して不揮発性メモリ２０へ供給する。リードコマンドのコマンドシーケンスは、例えば、次の表記２〜４のいずれかである。
［ＣＭＤ：００ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＣＭＤ：３０ｈ］−［ＣＭＤ：００ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＣＭＤ：０５ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＣＭＤ：Ｅ０ｈ］−［ＲＤＡＴＡ］・・・表記２
［ＣＭＤ：００ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＣＭＤ：３０ｈ］−［ＣＭＤ：０５ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＣＭＤ：Ｅ０ｈ］−［ＲＤＡＴＡ］・・・表記３
［ＣＭＤ：００ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＣＭＤ：３０ｈ］−［ＲＤＡＴＡ］
・・・表記４
【００２４】
表記２〜４において、［ＣＭＤ：００ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＣＭＤ：３０ｈ］は、メモリセルアレイ２１から内部バッファ２２へデータを読み出すコマンドである。表記２，３において、［ＣＭＤ：０５ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＣＭＤ：Ｅ０ｈ］は、内部バッファ２２から不揮発性メモリコントローラ１３へデータを転送するコマンドである。［ＲＤＡＴＡ］は、リードデータである。表記４のリードコマンドが供給された場合、不揮発性メモリ２０は、［ＣＭＤ：０５ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＣＭＤ：Ｅ０ｈ］を補って表記３のリードコマンドを生成してもよい。
【００２５】
不揮発性メモリ２０は、リードコマンドが供給されたら、リードコマンドに従って、読み出し要求されたデータをメモリセルアレイ２１からページ単位で内部バッファ２２に読み出す。不揮発性メモリ２０は、読み出し完了後に、内部バッファ２２から不揮発性メモリコントローラ１３にデータを転送する。不揮発性メモリコントローラ１３は、ＣＰＵ１１による制御に従って、不揮発性メモリ２０からのデータをＥＣＣデコーダ１５へ転送する。
【００２６】
ＥＣＣデコーダ１５は、ＣＰＵ１１による制御のもと、不揮発性メモリコントローラ１３から転送されたデータ（訂正候補データ）に対して、ＥＣＣ処理におけるデコード処理を行う。訂正候補データのデータ長は、ＥＣＣ訂正データ長（ＣＷ  ：  Ｃｏｄｅ  ｗｏｒｄ）である。ＥＣＣデコーダ１５は、訂正候補データに含まれたＥＣＣパリティ（ＥＣＣパリティ部）を用いて、データ部及びフラグ部の誤り訂正処理を行う。誤り訂正処理は、例えば、シンドローム計算、誤り位置多項式演算等を含む。シンドローム計算によりビットエラーの有無を検出でき、誤り位置多項式演算によりビットエラーの個数及び位置を求めることができる。
【００２７】
例えば、ＥＣＣデコーダ１５は、ビットエラーの個数がＥＣＣパリティの訂正可能ビット数Ｎ以下であれば、データ部及びフラグ部の誤り訂正を行うことができる。このとき、ＥＣＣデコーダ１５は、誤り訂正可能である旨（ＣＯＲＲ）をＣＰＵ１１に通知するとともに、誤り訂正されたデータをリードデータとしてバッファコントローラ１２へ供給する。バッファコントローラ１２は、リードデータをバッファメモリ３０のキャッシュ領域３１に格納する。ＣＰＵ１１は、キャッシュ領域３１に格納されたリードデータを使用可能である。
【００２８】
一方、ＥＣＣデコーダ１５は、ビットエラーの個数がＥＣＣパリティの訂正可能ビット数Ｎを超えていれば、データ部及びフラグ部の誤り訂正を行うことができない。すなわち、不揮発性メモリ２０からデータをリードする際に、ＥＣＣの訂正可能ビット数を超えるビットエラーが発生した場合には訂正不能エラーである旨（ＵＮＣＯＲＲ）がＥＣＣデコーダ１５からＣＰＵ１１に通知される。ＣＰＵ１１はそのデータ（訂正候補データ）を無効なデータとして取り扱う必要がある。
【００２９】
しかし、例えばその訂正候補データ内に既に正解値が分かっているもしくは高い確率で予測できるビット領域があれば、そのビット領域のビット値を正解値で置き換えることで別の訂正候補データが作られる。そして、作られた別の訂正候補データのＥＣＣ再デコード処理を行うことで、別の訂正候補データが訂正可能（ＣＯＲＲ）となる可能性がある。その例を図２，３に示す。図２，３は、訂正候補データの例を示す図である。
【００３０】
図２（ａ）は、１回目の誤り訂正処理が行われた訂正候補データＣＷ−１を示す。訂正候補データＣＷ−１は、データ部Ｄ１１、フラグ部Ｄ１２、及びＥＣＣパリティ部Ｄ１３を有する。データ部Ｄ１１は、ＣＰＵ１１からバッファコントローラ１２へ供給された書き込むべきデータに対応している。フラグ部Ｄ１２は、データ部に付加されたフラグ部に対応している。フラグ部Ｄ１２は、例えば、書き込むべきデータが管理情報とユーザーデータとのいずれであるのかを識別する管理情報識別フラグを含む。管理情報識別フラグは、書き込むべきデータが管理情報である場合に００ｈ（００００００００ｂ）となり、書き込むべきデータがユーザーデータである場合にＦＦｈ（１１１１１１１１ｂ）となるものと定義できる。
【００３１】
例えば、訂正候補データＣＷ−１におけるビットエラーの個数がＥＣＣパリティの訂正可能ビット数Ｎよりｎ個多いＮ＋ｎ個である場合を考える。この場合、訂正候補データＣＷ−１においてｎ個以上のビットを正解値で置き換えれば、訂正可能（ＣＯＲＲ）となる可能性がある。
【００３２】
このとき、ＣＰＵ１１は、ファームウェアＦＷに従った制御情報に基づいて、データ部Ｄ１１が管理情報とユーザーデータとのいずれであるのかを把握している。フラグ部Ｄ１２がビット値０とビット値１との混在したものである場合、フラグ部Ｄ１２がリードエラー又は誤訂正となった可能性がある。例えば、ＣＰＵ１１は、制御情報に基づいてデータ部Ｄ１１がユーザーデータであると把握できる場合、訂正候補データＣＷ−１におけるフラグ部Ｄ１２のビット値をすべて１（正解値）に置き換えさせることができる。あるいは、例えば、ＣＰＵ１１は、制御情報に基づいてデータ部Ｄ１１が管理情報であると把握できる場合、訂正候補データＣＷ−１におけるフラグ部Ｄ１２のビット値をすべて０（正解値）に置き換えさせることができる。
【００３３】
図２（ｂ）は、データ部Ｄ１１が管理情報である場合に、訂正候補データＣＷ−１から生成された訂正候補データＣＷ−２を示す。訂正候補データＣＷ−２は、データ部Ｄ２１、フラグ部Ｄ２２、及びＥＣＣパリティ部Ｄ２３を有する。データ部Ｄ２１は、訂正候補データＣＷ−１のデータ部Ｄ１１と同じである。ＥＣＣパリティ部Ｄ２３は、訂正候補データＣＷ−１のＥＣＣパリティ部Ｄ１３と同じである。一方、フラグ部Ｄ２２は、フラグ部Ｄ１２の各ビット値がすべて０（正解値）となるように置き換えられたものとなっている。図２（ｂ）の場合、フラグ部Ｄ１２が８ビット長であり、８ビットのうち４ビットの値が１から０に置き換えられてフラグ部Ｄ２２となっている。
【００３４】
このため、ｎ≦４であれば、訂正候補データＣＷ−２におけるビットエラーの個数がＥＣＣパリティの訂正可能ビット数Ｎ（例えば、Ｎ＝１００）以下になるので、ＥＣＣデコーダ１５は、データ部Ｄ２１及びフラグ部Ｄ２２の誤り訂正を行うことができる。すなわち、ＥＣＣデコーダ１５は、訂正候補データＣＷ−２に対してＥＣＣ再デコード処理（再度の誤り訂正処理）を行う。ＥＣＣデコーダ１５は、誤り訂正可能である旨（ＣＯＲＲ）をＣＰＵ１１に通知するとともに、誤り訂正されたデータをリードデータとしてバッファコントローラ１２へ供給する。
【００３５】
図３（ａ）は、１回目の誤り訂正処理が行われた訂正候補データＣＷ−１’を示す。訂正候補データＣＷ−１’は、データ部Ｄ１１’、フラグ部Ｄ１２’、及びＥＣＣパリティ部Ｄ１３’を有する。データ部Ｄ１１’は、データの書き込み時に、ＣＰＵ１１からバッファコントローラ１２へ供給された書き込むべきデータに対応している。データ部Ｄ１１’は、管理情報、例えば、バッドクラスタテーブルにおけるセクタビットマップのデータである。バッドクラスタテーブルは、メモリセルアレイ２１から読み出せなくなったクラスタアドレスを記録しておくためのテーブルであり、クラスタアドレスおよびセクタビットマップの２つのフィールドが設けられている。セクタビットマップには、各クラスタアドレスに対応する複数個のセクタの状態（有効：“０”／無効：“１”）を示す複数ビットのビットマップが記録される。
【００３６】
例えば、訂正候補データＣＷ−１’におけるビットエラーの個数がＥＣＣパリティの訂正可能ビット数Ｎよりｎ個多いＮ＋ｎ個である場合を考える。この場合、訂正候補データＣＷ−１’においてｎ個以上のビットを正解値で置き換えれば、訂正可能（ＣＯＲＲ）となる可能性がある。
【００３７】
このとき、ＣＰＵ１１は、ファームウェアＦＷに従った制御情報に基づいて、所定のクラスタにおける無効なセクタが有効なセクタに比べて大幅に少ないことを把握している。例えば、ＣＰＵ１１は、制御情報に基づいて、データ部Ｄ１１’に含まれたセクタビットマップのほとんどのビットの正解値が０（有効）であると把握している。従って、ＣＰＵ１１は、訂正候補データＣＷ−１’におけるデータ部Ｄ１１’のビット値をすべて０（正解らしさがより高い値）に置き換えることができる。
【００３８】
図３（ｂ）は、所定のクラスタにおける無効なセクタが有効なセクタに比べて大幅に少ない場合に、訂正候補データＣＷ−１’から生成された訂正候補データＣＷ−２’を示す。訂正候補データＣＷ−２’は、データ部Ｄ２１’、フラグ部Ｄ２２’、及びＥＣＣパリティ部Ｄ２３’を有する。フラグ部Ｄ２２’は、フラグ部Ｄ１２’と同じである。ＥＣＣパリティ部Ｄ２３’は、ＥＣＣパリティ部Ｄ１３’と同じである。一方、データ部Ｄ２１’は、データ部Ｄ１１’の各ビット値がすべて０（正解らしさがより高い値）に置き換えられたものとなっている。図３（ｂ）の場合、データ部Ｄ１１’の複数ビットのうち少なくとも６ビットの値が１から０に置き換えられてデータ部Ｄ２１’となっている。
【００３９】
このため、ｎ≦「実質的に正解値に置き換えられたビット数（例えば、６）」であれば、訂正候補データＣＷ−２’におけるビットエラーの個数がＥＣＣパリティの訂正可能ビット数Ｎ以下になるので、ＥＣＣデコーダ１５は、データ部Ｄ２１’及びフラグ部Ｄ２２’の誤り訂正を行うことができる。「実質的に正解値に置き換えられたビット数」は、例えば、正解値に置き換えられたビット数から不正解値に置き換えられたビット数を減算したものである。すなわち、ＥＣＣデコーダ１５は、訂正候補データＣＷ−２’に対してＥＣＣ再デコード（再度の誤り訂正処理）を行う。ＥＣＣデコーダ１５は、誤り訂正可能である旨（ＣＯＲＲ）をＣＰＵ１１に通知するとともに、誤り訂正されたデータをリードデータとしてバッファコントローラ１２へ供給する。
【００４０】
ＥＣＣ再デコード処理を行うためには、ＥＣＣデコーダ１５の入力データが供給できる位置にＥＣＣ訂正データ長（ＣＷ：Ｃｏｄｅ  ｗｏｒｄ）以上のバッファを実装し、そのバッファに訂正候補データ内のビット値を置き換えた別の訂正候補データを一時的に保持させる必要がある。
【００４１】
仮に、ＥＣＣ再デコード処理用のバッファを不揮発性メモリコントローラ１３内に設ける場合、メモリセルアレイ２１へのデータのプログラム又はメモリセルアレイ２１からデータのリードには実質不要であるバッファが追加されることになる。例えば、不揮発性メモリコントローラ１３は、メモリセルアレイ２１へプログラムされるべきデータを一時的に保存するライトバッファと、メモリセルアレイ２１からリードされたＥＣＣ訂正処理中のデータを一時的に保存するリードバッファとを有する。ＥＣＣ再デコードのためにはＥＣＣデコーダ１５に入力される前の経路にバッファが必要であるため、ＥＣＣ訂正処理中のデータを保存するリードバッファでは兼用できない。このため、ＥＣＣ再デコード処理用のバッファは、追加で実装する必要がある。これにより、不揮発性メモリコントローラ１３内にＥＣＣ再デコード処理用のバッファを追加で実装すると、不揮発性メモリコントローラ１３の製造コストが増大し、延いては装置１の製造コストが増大する可能性がある。
【００４２】
そこで、本実施形態では、装置１において、訂正候補データから作成された新たな訂正候補データが不揮発性メモリ２０の内部バッファ２２に格納されるようにする。これにより、不揮発性メモリコントローラ１３内にバッファを追加で実装することなくＥＣＣ再デコード処理を行えるようにする。
【００４３】
不揮発性メモリ２０において、内部バッファ２２は、メモリセルアレイ２１に対するデータのプログラム及びリードのために、メモリセルアレイ２１へのアクセス単位長分以上のデータ容量を有している。例えば、不揮発性メモリ２０がＮＡＮＤ型フラッシュメモリである場合、不揮発性メモリコントローラ１３との間で送受信する転送データのサイズがページサイズ（又は、ＥＣＣ訂正単位）であり、内部バッファ２２は、ページバッファである。内部バッファ２２は、ＥＣＣ訂正データ長（例えば、４ＫＢ）より大幅に大きなデータ容量（例えば３２〜６４ＫＢ）を有する。
【００４４】
コントローラ１０は、ファームウェアＦＷに従い、メモリセルアレイ２１に直接的にアクセスせずに内部バッファ２２にアクセスする。具体的には、不揮発性メモリコントローラ１３は、次の（１），（２）の不揮発性メモリ用のコマンドを発行できる。
【００４５】
（１）のコマンドは、不揮発性メモリ２０のメモリセルアレイ２１にプログラムせず、内部バッファ２２にライトするコマンド（以下、バッファライトコマンドとする）である。例えば、不揮発性メモリコントローラ１３は、ＥＣＣ再デコード処理に従ったバッファ格納命令をＣＰＵ１１から受けた場合、不揮発性メモリ２０へバッファライトコマンドを発行する。バッファライトコマンドのコマンドシーケンスは、例えば、次の表記５である。これにより、不揮発性メモリコントローラ１３内にバッファを追加で実装することなく、不揮発性メモリ２０の内部バッファ２２（ページバッファ）を利用してＥＣＣ再デコード処理を行うことができる。
［ＣＭＤ：８０ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＷＤＡＴＡ］
・・・表記５
【００４６】
表記５に示すバッファライトコマンドは、表記１に示すライトコマンドにおいて［ＣＭＤ：１０ｈ］（内部バッファ２２からメモリセルアレイ２１にプログラムするコマンド）が省略されたものとなっている。
【００４７】
不揮発性メモリ２０は、供給されたバッファライトコマンドに従って、内部バッファ２２をクリアし、不揮発性メモリコントローラ１３から送信されてきたデータを内部バッファ２２に格納する。このとき、不揮発性メモリ２０は、内部バッファ２２に格納されたデータをメモリセルアレイ２１に書き込まない。すなわち、コントローラ１０は、バッファライトコマンドを用いて、メモリセルアレイ２１にアクセスせずに、ＥＣＣ再デコード用に生成された訂正候補データを内部バッファ２２に書き込むことができる。
【００４８】
（２）のコマンドは、不揮発性メモリ２０のメモリセルアレイ２１からリードせず、内部バッファ２２に格納されたデータをリードするコマンド（以下、バッファリードコマンドとする）である。例えば、不揮発性メモリコントローラ１３は、ＥＣＣ再デコード処理に従ったバッファ出力命令をＣＰＵ１１から受けた場合、不揮発性メモリ２０へバッファリードコマンドを発行する。バッファリードコマンドのコマンドシーケンスは、例えば、次の表記６又は表記７である。
［ＣＭＤ：００ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＣＭＤ：０５ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＣＭＤ：Ｅ０ｈ］−［ＲＤＡＴＡ］
・・・表記６
［ＣＭＤ：０５ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＣＭＤ：Ｅ０ｈ］−［ＲＤＡＴＡ］・・・表記７
【００４９】
表記６に示すバッファリードコマンドは、表記２に示すリードコマンドにおいて、［ＣＭＤ：００ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＣＭＤ：３０ｈ］（メモリセルアレイ２１から内部バッファ２２へデータを読み出すコマンド）が省略されたものとなっている。表記７に示すバッファリードコマンドは、表記３に示すリードコマンドにおいて、［ＣＭＤ：００ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＣＭＤ：３０ｈ］（メモリセルアレイ２１から内部バッファ２２へデータを読み出すコマンド）が省略されたものとなっている。
【００５０】
不揮発性メモリ２０は、供給されたバッファリードコマンドに従って、読み出し要求されたデータを内部バッファ２２から不揮発性メモリコントローラ１３に転送する。このとき、不揮発性メモリ２０は、メモリセルアレイ２１から内部バッファ２２へのデータの読み出しを行わない。すなわち、コントローラ１０は、バッファリードコマンドを用いて、メモリセルアレイ２１にアクセスせずに、内部バッファ２２に書き込まれた訂正候補データを内部バッファ２２から読み出すことができる。
【００５１】
次に、装置１の動作について図４及び図５を用いて説明する。図４は、装置１の動作を示すフローチャートである。図５は、装置１の動作を示す模式図である。
【００５２】
コントローラ１０は、ファームウェアＦＷに従った制御情報に基づいて、ＥＣＣ再デコード処理を施すべき複数の訂正候補データを予め決めておく（図２，３参照）。
【００５３】
コントローラ１０は、ホスト装置ＨＡからの読み出し要求又はファームウェアＦＷからの要求などに応じて、リードコマンドを発行する。コントローラ１０は、発行されたリードコマンドを用いて、不揮発性メモリ２０のメモリセルアレイ２１から内部バッファ２２経由でデータ（訂正候補データＣＷ−１）をリードする（Ｓ１、図５の実線の矢印参照）。コントローラ１０は、リードされた訂正候補データＣＷ−１を不揮発性メモリコントローラ１３経由でＥＣＣデコーダ１５へ転送させる（図５の実線の矢印参照）。コントローラ１０は、ＥＣＣデコーダ１５で、訂正候補データＣＷ−１に対して、ＥＣＣデコード処理を行う（Ｓ２）。
【００５４】
コントローラ１０は、ＥＣＣデコード処理の結果、誤り訂正不能（ＵＮＣＯＲＲ）であるか否かを判断する（Ｓ３）。コントローラ１０は、訂正候補データＣＷ−１中に検出されたビットエラーの個数がＥＣＣパリティの訂正可能ビット数Ｎ以下であれば、ＥＣＣデコード処理に成功した、すなわち誤り訂正可能である（Ｓ３で「Ｎｏ」）と判断する。コントローラ１０は、訂正候補データＣＷ−１をバッファコントローラ１２経由でバッファメモリ３０へ転送させて（図５の実線の矢印参照）、処理を終了する。
【００５５】
一方、コントローラ１０は、訂正候補データＣＷ−１中に検出されたビットエラーの個数がＥＣＣパリティの訂正可能ビット数Ｎを超えていれば、ＥＣＣデコード処理に失敗した、すなわち誤り訂正不能である（Ｓ３で「Ｙｅｓ」）と判断する。コントローラ１０は、訂正候補データＣＷ−１をバッファコントローラ１２経由でバッファメモリ３０へ転送させる（図５の実線の矢印参照）。
【００５６】
そして、コントローラ１０は、予め決められた複数の訂正候補データのうちの１つを選択し、選択された訂正候補データに基づく新たな訂正候補データを作成する。すなわち、コントローラ１０は、ファームウェアＦＷに従った制御情報に基づいて、バッファメモリ３０上で訂正候補データＣＷ−１の一部のビット領域のビット値を正解値又は正解らしさがより高い値で書き換えて（図２，３参照）、訂正候補データＣＷ−１から新たな訂正候補データＣＷ−２を作成する（Ｓ４）。
【００５７】
コントローラ１０は、作成された訂正候補データＣＷ−２をバッファメモリ３０からバッファコントローラ１２、ＥＣＣエンコーダ１４、及び不揮発性メモリコントローラ１３経由で不揮発性メモリ２０へ転送させる。このとき、コントローラ１０は、ＥＣＣエンコーダ１４によるＥＣＣエンコード処理が行われないように制御し、実質的にＥＣＣエンコーダ１４をバイパスさせて訂正候補データＣＷ−２を不揮発性メモリ２０へ転送させる（図５の一点鎖線の矢印参照）（Ｓ５）。コントローラ１０は、バッファライトコマンドを用いて、訂正候補データＣＷ−２を不揮発性メモリ２０の内部バッファ２２へライトする（Ｓ６、図５の一点鎖線の矢印参照）。
【００５８】
その後、コントローラ１０は、バッファリードコマンドを用いて、訂正候補データＣＷ−２を不揮発性メモリ２０の内部バッファ２２からリードする（Ｓ７）。コントローラ１０は、リードされた訂正候補データＣＷ−２を不揮発性メモリコントローラ１３経由でＥＣＣデコーダ１５へ転送させる（図５の破線の矢印参照）。コントローラ１０は、ＥＣＣデコーダ１５で、訂正候補データＣＷ−２に対して、ＥＣＣ再デコード処理を行う（Ｓ８）。
【００５９】
コントローラ１０は、ＥＣＣデコード処理の結果、誤り訂正不能（ＵＮＣＯＲＲ）であるか否かを判断する（Ｓ９）。コントローラ１０は、訂正候補データＣＷ−２中に検出されたビットエラーの個数がＥＣＣパリティの訂正可能ビット数Ｎ以下であれば、誤り訂正可能である（Ｓ９で「Ｎｏ」）として、訂正候補データＣＷ−２をバッファコントローラ１２経由でバッファメモリ３０へ転送させて（図５の破線の矢印参照）、処理を終了する。
【００６０】
コントローラ１０は、訂正候補データＣＷ−２中に検出されたビットエラーの個数がＥＣＣパリティの訂正可能ビット数Ｎを超えていれば、誤り訂正不能である（Ｓ９で「Ｙｅｓ」）として、訂正候補データＣＷ−２をバッファコントローラ１２経由でバッファメモリ３０へ転送させる（図５の破線の矢印参照）。そして、コントローラ１０は、予め決められた複数の訂正候補データのうち未選択の訂正候補データが無いか否かを判断する（Ｓ１０）。コントローラ１０は、未選択の訂正候補データがある（Ｓ１０で「Ｎｏ」）場合、処理をＳ４へ戻し、未選択の訂正候補データがない（Ｓ１０で「Ｙｅｓ」）場合、誤り訂正不能のエラー処理（ＵＮＣＯＲＲ処理）を行い（Ｓ１１）、処理を終了する。
【００６１】
以上のように、第１の実施形態の装置１において、コントローラ１０は、訂正候補データＣＷ−１のＥＣＣデコード処理（誤り訂正処理）に失敗した場合に、訂正候補データＣＷ−１から作成された他の訂正候補データＣＷ−２が内部バッファ２２に格納されるようにする。例えば、コントローラ１０は、訂正候補データＣＷ−１をバッファメモリ３０上で書き換えて他の訂正候補データＣＷ−２を作成し、訂正候補データＣＷ−２をバッファメモリ３０から内部バッファ２２に転送して書き込む。そして、コントローラ１０は、訂正候補データＣＷ−２を内部バッファ２２から読み出して誤り訂正処理（ＥＣＣ再デコード処理）を行う。これにより、コントローラ１０内（不揮発性メモリコントローラ１３内）にＥＣＣ再デコード処理用のバッファを追加で実装することなくＥＣＣ再デコード処理を行うことができるので、ＥＣＣ再デコード処理を行う装置１を低コストで構成できる。
【００６２】
ここで、仮に、コントローラ１０が訂正候補データＣＷ−２を内部バッファ２２経由でメモリセルアレイ２１に書き込む場合について考える。この場合、コントローラ１０が訂正候補データＣＷ−２を不揮発性メモリ２０のメモリセルアレイ２１へ転送してから不揮発性メモリ２０のメモリセルアレイ２１から読み出すまでの時間を要するので、ＥＣＣ再デコード処理の処理時間が長時間化する可能性がある。
【００６３】
それに対して、第１の実施形態では、装置１において、コントローラ１０が、バッファライトコマンドを用いて、メモリセルアレイ２１にアクセスせずに、訂正候補データＣＷ−２を内部バッファ２２に書き込む。また、コントローラ１０は、バッファリードコマンドを用いて、メモリセルアレイ２１にアクセスせずに、訂正候補データＣＷ−２を内部バッファ２２から読み出す。これにより、コントローラ１０が訂正候補データＣＷ−２を不揮発性メモリ２０へ転送してから不揮発性メモリ２０から読み出すまでの時間を容易に短時間化でき、ＥＣＣ再デコード処理の処理時間を容易に短縮できる。
【００６４】
（第２の実施形態）
次に、第２の実施形態にかかる装置１について説明する。以下では、第１の実施形態と異なる部分を中心に説明する。
【００６５】
第１の実施形態では、訂正候補データＣＷ−１をバッファメモリ３０上で書き換えて他の訂正候補データＣＷ−２を作成した。しかし、第２の実施形態では、訂正候補データＣＷ−１を内部バッファ２２上で書き換えて他の訂正候補データＣＷ−２を作成する。
【００６６】
具体的には、装置１のコントローラ１０において、不揮発性メモリコントローラ１３は、次の（３）の不揮発性メモリ用のコマンドを発行できる。
【００６７】
（３）のコマンドは、不揮発性メモリ２０のメモリセルアレイ２１にプログラムせず、内部バッファ２２に格納されたデータの一部をオーバーライトするコマンド（以下、バッファオーバーライトコマンドとする）である。例えば、不揮発性メモリコントローラ１３は、ＥＣＣ再デコード処理に従ったバッファ書き換え命令を受けた場合、バッファオーバーライトコマンドを発行して不揮発性メモリ２０へ供給する。バッファライトコマンドのコマンドシーケンスは、例えば、次の表記８又は表記９である。これにより、不揮発性メモリ２０の内部バッファ２２上で訂正候補データＣＷ−１を書き換えて新たな訂正候補データＣＷ−２を作成できるので、バッファメモリ３０から不揮発性メモリ２０への訂正候補データＣＷ−２の転送時間を削減できる。
［ＣＭＤ：８５ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＡＤＲ：ｒｏｗ１］−［ＡＤＲ：ｒｏｗ２］−［ＡＤＲ：ｒｏｗ３］−［ＷＤＡＴＡ］
・・・表記８
［ＣＭＤ：８５ｈ］−［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］−［ＷＤＡＴＡ］・・・表記９
【００６８】
不揮発性メモリ２０は、供給されたバッファオーバーライトコマンドに従って、内部バッファ２２をクリアせずに、不揮発性メモリコントローラ１３から送信されてきたデータを内部バッファ２２におけるアドレス指定された位置に上書きで格納する。内部バッファ２２は、ロウ方向に１ビット長であり、カラム方向に所定のビット長（例えば、ページサイズ）の構成とすることができる。上書きで格納される位置は、例えば、コマンドにおけるカラムアドレスの記述［ＡＤＲ：ｃｏｌ１］−［ＡＤＲ：ｃｏｌ２］で指定することができる。このとき、不揮発性メモリ２０は、内部バッファ２２に格納されたデータをメモリセルアレイ２１に書き込まない。すなわち、コントローラ１０は、バッファオーバーライトコマンドを用いて、メモリセルアレイ２１にアクセスせずに、訂正候補データＣＷ−１を内部バッファ２２上で書き換えて他の訂正候補データＣＷ−２を作成できる。
【００６９】
より具体的には、装置１は、図４，５に示す動作に代えて、図６，７に示す動作を行う。図６は、装置１の他の動作を示すフローチャートである。図７は、装置１の他の動作を示す模式図である。
【００７０】
図６に示す動作では、Ｓ４〜Ｓ６（図４参照）に示すステップに代えて、Ｓ２１に示すステップが行われる。
【００７１】
Ｓ２１に示すステップでは、予め決められた複数の訂正候補データのうちの１つを選択し、選択された訂正候補データを作成する。すなわち、Ｓ１〜Ｓ２１の期間において、ライトコマンド又はバッファライトコマンドが不揮発性メモリ２０に供給されていなければ、Ｓ１でリードされた訂正候補データＣＷ−１は、内部バッファ２２に依然として格納されている（図７参照）。
【００７２】
そのため、コントローラ１０は、ファームウェアＦＷに従った制御情報に基づいて、内部バッファ２２上で訂正候補データＣＷ−１の一部のビット値を正解値又は正解らしさがより高い値で書き換えることができる（図２，３参照）。このとき、コントローラ１０は、バッファオーバーライトコマンドを用いて、内部バッファ２２における訂正候補データＣＷ−１の変更箇所にアクセスし、その変更箇所を上書きで選択的に書き換える（図７の一点鎖線の矢印参照）。これにより、コントローラ１０は、訂正候補データＣＷ−１から新たな訂正候補データＣＷ−２を内部バッファ２２上で作成する。
【００７３】
以上のように、第２の実施形態にかかる装置１において、コントローラ１０が、訂正候補データＣＷ−１のＥＣＣデコード処理（誤り訂正デコード処理）に失敗した場合に、訂正候補データＣＷ−１を内部バッファ２２上で書き換えて他の訂正候補データＣＷ−２を作成する。これにより、バッファメモリ３０から不揮発性メモリ２０側へのデータ転送を行う時間を削減でき（図７の一点鎖線の矢印参照）、ＥＣＣ再デコード処理の処理時間をさらに短縮できる。
【００７４】
また、第２の実施形態では、装置１において、コントローラ１０が、バッファオーバーライトコマンドを用いて、メモリセルアレイ２１にアクセスせずに、訂正候補データＣＷ−２を内部バッファ２２に書き込む。また、コントローラ１０は、バッファリードコマンドを用いて、メモリセルアレイ２１にアクセスせずに、訂正候補データＣＷ−１を内部バッファ２２上で書き換えて訂正候補データＣＷ−２を作成する。これにより、コントローラ１０が書き換えを要求してから不揮発性メモリ２０から訂正候補データＣＷ−２が読み出されるまでの時間を容易に短時間化できるので、ＥＣＣ再デコード処理の処理時間を容易に短縮できる。
【００７５】
（第３の実施形態）
次に、第３の実施形態にかかる装置１について説明する。以下では、第１の実施形態と異なる部分を中心に説明する。
【００７６】
第１の実施形態では、予め決められた複数の訂正候補データを順次にＥＣＣ再デコード処理を行っているが、第３の実施形態では、予め決められた複数の訂正候補データに対してＥＣＣ再デコード処理をまとめて行う。
【００７７】
具体的には、装置１の不揮発性メモリ２０において、内部バッファ２２は、ＥＣＣ訂正データ長より大きなデータ容量を有する。すなわち、内部バッファ２２は、複数の訂正候補データを格納可能なデータ容量を有する。そのため、コントローラ１０は、訂正候補データＣＷ−１をバッファメモリ３０上で書き換えて複数の訂正候補データＣＷ−２〜ＣＷ−ｋを作成し、複数の訂正候補データＣＷ−２〜ＣＷ−ｋをバッファメモリ３０から内部バッファ２２に転送して格納できる（図９参照）。
【００７８】
より具体的には、装置１は、図４，５に示す動作に代えて、図８，９に示す動作を行う。図８は、装置１の動作を示すフローチャートである。図９は、装置１の動作を示す模式図である。
【００７９】
図８に示す動作では、Ｓ７，Ｓ８，Ｓ１０（図４参照）に示すステップに代えて、Ｓ３１〜Ｓ３５に示すステップが行われる。
【００８０】
Ｓ３１に示すステップでは、コントローラ１０は、予め決められた複数の訂正候補データのうち未選択の訂正候補データが無いか否かを判断する。コントローラ１０は、未選択の訂正候補データがある（Ｓ３１で「Ｎｏ」）場合、内部バッファ２２に空きがあるか確認し（Ｓ３２）、空きがあれば（Ｓ３２で「Ｙｅｓ」）、処理をＳ４へ戻す。これにより、Ｓ４〜Ｓ３２のループが繰り返され、複数の訂正候補データＣＷ−２〜ＣＷ−ｋが内部バッファ２２に格納される（図９参照）。
【００８１】
コントローラ１０は、未選択の訂正候補データがなくなる（Ｓ３１で「Ｙｅｓ」）か内部バッファ２２に空きがなくなると（Ｓ３２で「Ｎｏ」）、バッファリードコマンドを用いて、複数の訂正候補データＣＷ−２〜ＣＷ−ｋを不揮発性メモリ２０の内部バッファ２２からまとめてリードする（Ｓ３３）。コントローラ１０は、リードされた複数の訂正候補データＣＷ−２〜ＣＷ−ｋを不揮発性メモリコントローラ１３経由でＥＣＣデコーダ１５へまとめて転送させる（図９の破線の矢印参照）。これにより、コントローラ１０は、ＥＣＣデコーダ１５で、複数の訂正候補データＣＷ−２〜ＣＷ−ｋに対して、まとめてＥＣＣ再デコード処理を行う（Ｓ３４）。
【００８２】
そして、コントローラ１０は、予め決められた複数の訂正候補データのうち未選択の訂正候補データが無いか否かを判断する（Ｓ３５）。コントローラ１０は、未選択の訂正候補データがある（Ｓ３５で「Ｎｏ」）場合、処理をＳ４へ戻し、未選択の訂正候補データがない（Ｓ３５で「Ｙｅｓ」）場合、処理をＳ９へ進める。
【００８３】
以上のように、第３の実施形態では、装置１において、コントローラ１０は、バッファメモリ３０上で作成しバッファメモリ３０から内部バッファ２２に転送して格納する処理を複数の訂正候補データＣＷ−２〜ＣＷ−ｋについて順次に行う。そして、コントローラ１０は、複数の訂正候補データＣＷ−２〜ＣＷ−ｋをまとめて内部バッファ２２から読み出して誤り訂正処理を行う。これにより、訂正候補データの転送処理及び誤り訂正処理におけるオーバーヘッドを低減できるので、複数の訂正候補データＣＷ−２〜ＣＷ−ｋに対する誤り訂正処理の処理時間を容易に短縮できる。
【００８４】
（第４の実施形態）
次に、第４の実施形態にかかる装置１について説明する。以下では、第２の実施形態と異なる部分を中心に説明する。
【００８５】
第２の実施形態では、予め決められた複数の訂正候補データを順次にＥＣＣ再デコード処理を行っているが、第４の実施形態では、予め決められた複数の訂正候補データに対してＥＣＣ再デコード処理をまとめて行う。
【００８６】
具体的には、装置１の不揮発性メモリ２０において、内部バッファ２２は、ＥＣＣ訂正データ長より大きなデータ容量を有する。すなわち、内部バッファ２２は、複数の訂正候補データを格納可能なデータ容量を有する。そのため、コントローラ１０は、訂正候補データＣＷ−１を内部バッファ２２上で書き換えて複数の訂正候補データＣＷ−２〜ＣＷ−ｋを作成できる（図１１参照）。
【００８７】
より具体的には、装置１は、図６，７に示す動作に代えて、図１０，１１に示す動作を行う。図１０は、装置１の動作を示すフローチャートである。図１１は、装置１の動作を示す模式図である。
【００８８】
図１０に示す動作では、Ｓ７，Ｓ８，Ｓ１０（図６参照）に示すステップに代えて、Ｓ４１〜Ｓ４５に示すステップが行われる。
【００８９】
Ｓ４１に示すステップでは、コントローラ１０は、予め決められた複数の訂正候補データのうち未選択の訂正候補データが無いか否かを判断する。コントローラ１０は、未選択の訂正候補データがある（Ｓ４１で「Ｎｏ」）場合、内部バッファ２２に空きがあるか確認し（Ｓ４２）、空きがあれば（Ｓ４２で「Ｙｅｓ」）、処理をＳ２１へ戻す。Ｓ２１では、既に作成された訂正候補データと別に新たに訂正候補データを作成するために、コントローラ１０は、バッファオーバーライトコマンドを用いて、既に作成された訂正候補データのいずれかのコピーを作成する。コントローラ１０は、コピーの訂正候補データを内部バッファ２２の空き領域にライトして、コピーの訂正候補データにおける変更箇所を上書きで選択的に書き換える。これにより、Ｓ２１〜Ｓ４２のループが繰り返され、複数の訂正候補データＣＷ−２〜ＣＷ−ｋが内部バッファ２２上で作成される（図１１参照）。
【００９０】
コントローラ１０は、未選択の訂正候補データがなくなる（Ｓ４１で「Ｙｅｓ」）か内部バッファ２２に空きがなくなると（Ｓ４２で「Ｎｏ」）、バッファリードコマンドを用いて、複数の訂正候補データＣＷ−２〜ＣＷ−ｋを不揮発性メモリ２０の内部バッファ２２からまとめてリードする（Ｓ４３）。コントローラ１０は、リードされた複数の訂正候補データＣＷ−２〜ＣＷ−ｋを不揮発性メモリコントローラ１３経由でＥＣＣデコーダ１５へまとめて転送させる（図１１の破線の矢印参照）。これにより、コントローラ１０は、ＥＣＣデコーダ１５で、複数の訂正候補データＣＷ−２〜ＣＷ−ｋに対して、まとめてＥＣＣ再デコード処理を行う（Ｓ４４）。
【００９１】
そして、コントローラ１０は、予め決められた複数の訂正候補データのうち未選択の訂正候補データが無いか否かを判断する（Ｓ４５）。コントローラ１０は、未選択の訂正候補データがある（Ｓ４５で「Ｎｏ」）場合、処理をＳ２１へ戻し、未選択の訂正候補データがない（Ｓ４５で「Ｙｅｓ」）場合、処理をＳ９へ進める。
【００９２】
以上のように、第４の実施形態では、装置１において、コントローラ１０は、内部バッファ２２上で作成する処理を複数の訂正候補データＣＷ−２〜ＣＷ−ｋについて順次に行う。そして、コントローラ１０は、複数の訂正候補データＣＷ−２〜ＣＷ−ｋをまとめて内部バッファ２２から読み出して誤り訂正処理を行う。これにより、訂正候補データの転送処理及び誤り訂正処理におけるオーバーヘッドを低減できるので、複数の訂正候補データＣＷ−２〜ＣＷ−ｋに対する誤り訂正処理の処理時間を容易に短縮できる。
【００９３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９４】
１  装置、１０  コントローラ、２０  不揮発性メモリ、２１  メモリセルアレイ、２２  内部バッファ、３０  バッファメモリ、４０  ホストＩ／Ｆ。
【図１】
2016143085.tif 000003
【図２】
2016143085.tif 000004
【図３】
2016143085.tif 000005
【図４】
2016143085.tif 000006
【図５】
2016143085.tif 000007
【図６】
2016143085.tif 000008
【図７】
2016143085.tif 000009
【図８】
2016143085.tif 000010
【図９】
2016143085.tif 000011
【図１０】
2016143085.tif 000012
【図１１】
2016143085.tif 000013