(57)【要約】【課題】不揮発性メモリの記憶領域を消費することなく、読み出し不能なデータを管理できる半導体記憶装置、制御装置、及び半導体記憶装置の制御方法を提供する。【解決手段】半導体記憶装置は、データを記憶する不揮発性メモリと、前記不揮発性メモリへのデータの書き込みと前記不揮発性メモリからのデータの読み出しとを制御する制御部とを備え、前記制御部は、データが有効であるのか無効であるのかを示す第１のフラグをデータに付加して誤り訂正処理を行うことにより生成された誤り訂正符号を前記データに付加して前記不揮発性メモリへ書き込む書き込み制御部と、前記データと前記誤り訂正符号とを前記不揮発性メモリから読み出し、有効及び無効の何れか一方に固定された第２のフラグを前記読み出されたデータに付加し、前記読み出された誤り訂正符号を用いた誤り訂正処理を前記第２のフラグが付加されたデータに対して行う読み出し制御部とを有する。【選択図】図１
2012022508.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する不揮発性メモリと、
前記不揮発性メモリへのデータの書き込みと前記不揮発性メモリからのデータの読み出しとを制御する制御部と、
を備え、
前記制御部は、
データが有効であるのか無効であるのかを示す第１のフラグをデータに付加して誤り訂正処理を行うことにより生成された誤り訂正符号を前記データに付加して前記不揮発性メモリへ書き込む書き込み制御部と、
前記データと前記誤り訂正符号とを前記不揮発性メモリから読み出し、有効及び無効の何れか一方に固定された第２のフラグを前記読み出されたデータに付加し、前記読み出された誤り訂正符号を用いた誤り訂正処理を前記第２のフラグが付加されたデータに対して行う読み出し制御部と、
を有する
ことを特徴とする半導体記憶装置。
【請求項２】
前記読み出し制御部は、誤り訂正処理により有効に固定された前記第２のフラグが誤りであることを検出した場合、又は誤り訂正処理により無効に固定された前記第２のフラグが正しいことを検出した場合、前記第２のフラグが付加されたデータが無効であると判定し、誤り訂正処理により有効に固定された前記第２のフラグが正しいことを検出した場合、又は誤り訂正処理により無効に固定された前記第２のフラグが誤りであることを検出した場合、前記第２のフラグが付加されたデータが有効であると判定し、
前記書き込み制御部は、前記読み出し制御部により無効であると判定されたデータに、無効であることを示す前記第１のフラグを付加し、前記読み出し制御部により有効であると判定されたデータに、有効であることを示す前記第１のフラグを付加する
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
前記書き込み制御部は、ホスト装置から入力されたデータを前記不揮発性メモリへ書き込む場合は、書き込むデータに有効であることを示す前記第１のフラグを付加する
ことを特徴とする請求項２に記載の半導体記憶装置。
【請求項４】
不揮発性メモリへのデータの書き込み及び前記不揮発性メモリからのデータの読み出しを制御する制御装置であって、
データが有効であるのか無効であるのかを示す第１のフラグをデータに付加して誤り訂正処理を行うことにより生成された誤り訂正符号を前記データに付加して前記不揮発性メモリへ書き込む書き込み制御部と、
前記データと前記誤り訂正符号とを前記不揮発性メモリから読み出し、有効及び無効の何れか一方に固定された第２のフラグを前記読み出されたデータに付加し、前記読み出された誤り訂正符号を用いた誤り訂正処理を前記第２のフラグが付加されたデータに対して行う読み出し制御部と、
を有する
ことを特徴とする制御装置。
【請求項５】
前記読み出し制御部は、誤り訂正処理により有効に固定された前記第２のフラグが誤りであることを検出した場合、又は誤り訂正処理により無効に固定された前記第２のフラグが正しいことを検出した場合、前記第２のフラグが付加されたデータが無効であると判定し、誤り訂正処理により有効に固定された前記第２のフラグが正しいことを検出した場合、又は誤り訂正処理により無効に固定された前記第２のフラグが誤りであることを検出した場合、前記第２のフラグが付加されたデータが有効であると判定し、
前記書き込み制御部は、前記読み出し制御部により無効であると判定されたデータに、無効であることを示す前記第１のフラグを付加し、前記読み出し制御部により有効であると判定されたデータに、有効であることを示す前記第１のフラグを付加する
ことを特徴とする請求項４に記載の制御装置。
【請求項６】
前記書き込み制御部は、ホスト装置から入力されたデータを前記不揮発性メモリへ書き込む場合は、書き込むデータに有効であることを示す前記第１のフラグを付加する
ことを特徴とする請求項５に記載の制御装置。
【請求項７】
データを記憶する不揮発性メモリを有する半導体記憶装置の制御方法であって、
前記不揮発性メモリへ書き込むべきデータが有効であるのか無効であるのかを示す第１のフラグを前記書き込むべきデータに付加して誤り訂正処理を行うことにより誤り訂正符号を生成する第１のステップと、
前記書き込むべきデータに前記第１のステップで生成された誤り訂正符号を付加して前記不揮発性メモリへ書き込む第２のステップと、
前記データと前記誤り訂正符号とを前記不揮発性メモリから読み出す第３のステップと、
有効及び無効の何れか一方に固定された第２のフラグを前記第３のステップで読み出されたデータに付加して、前記第３のステップで読み出された誤り訂正符号を用いた誤り訂正処理を前記第２のフラグが付加されたデータに対して行う第４のステップと、
有効に固定された前記第２のフラグが誤りであることを検出した場合、又は無効に固定された前記第２のフラグが正しいことを検出した場合、前記第２のフラグが付加されたデータが無効であると判定し、有効に固定された前記第２のフラグが正しいことを検出した場合、又は無効に固定された前記第２のフラグが誤りであることを検出した場合、前記第２のフラグが付加されたデータが有効であると判定する第５のステップと、
を備えたことを特徴とする半導体記憶装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体記憶装置、制御装置、及び半導体記憶装置の制御方法に関する。
【背景技術】
【０００２】
ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）に内蔵されるＮＡＮＤ型フラッシュメモリのコントローラでは、内部的なデータ管理のために使用する管理テーブルのサイズの都合やＥＣＣ符号長などの関係で、基本データ転送サイズ（セクタ）よりも大きなサイズでデータ管理を行うことが多い。
【０００３】
ＮＡＮＤ型フラッシュメモリの経年劣化などにより、ＮＡＮＤ型フラッシュメモリから読み出したデータのうちＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋｉｎｇ  ａｎｄ  Ｃｏｒｒｅｃｔｉｏｎ）処理により訂正不能なデータが生じた場合、その訂正不能なデータは、読み出し不能なデータとして管理することが必要である。
【０００４】
特許文献１には、ＳＳＤにおいて、ＮＡＮＤメモリ内でＥＣＣエラーの発生した読み出し不能なデータをセクタ単位に管理テーブルに登録して管理することが記載されている。また、このような管理データは、不揮発化する必要があるため、特許文献１では、管理テーブルをＮＡＮＤメモリに保存している。
【０００５】
このように、従来技術では、読み出し不能なデータを管理するための管理テーブルを用意し、この管理テーブルをＮＡＮＤメモリに保存しているので、ＮＡＮＤメモリ（不揮発性メモリ）の記憶領域が管理テーブルのために消費されるという問題がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２１１２３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は、不揮発性メモリの記憶領域を消費することなく、訂正不能なデータを管理できる半導体記憶装置、制御装置、及び半導体記憶装置の制御方法を提供する。
【課題を解決するための手段】
【０００８】
本願発明の一態様によれば、データを記憶する不揮発性メモリと、前記不揮発性メモリへのデータの書き込みと前記不揮発性メモリからのデータの読み出しとを制御する制御部とを備え、前記制御部は、データが有効であるのか無効であるのかを示す第１のフラグをデータに付加して誤り訂正処理を行うことにより生成された誤り訂正符号を前記データに付加して前記不揮発性メモリへ書き込む書き込み制御部と、前記データと前記誤り訂正符号とを前記不揮発性メモリから読み出し、有効及び無効の何れか一方に固定された第２のフラグを前記読み出されたデータに付加し、前記読み出された誤り訂正符号を用いた誤り訂正処理を前記第２のフラグが付加されたデータに対して行う読み出し制御部とを有することを特徴とする半導体記憶装置が提供される。
【０００９】
また、本願発明の一態様によれば、不揮発性メモリへのデータの書き込み及び前記不揮発性メモリからのデータの読み出しを制御する制御装置であって、データが有効であるのか無効であるのかを示す第１のフラグをデータに付加して誤り訂正処理を行うことにより生成された誤り訂正符号を前記データに付加して前記不揮発性メモリへ書き込む書き込み制御部と、前記データと前記誤り訂正符号とを前記不揮発性メモリから読み出し、有効及び無効の何れか一方に固定された第２のフラグを前記読み出されたデータに付加し、前記読み出された誤り訂正符号を用いた誤り訂正処理を前記第２のフラグが付加されたデータに対して行う読み出し制御部とを有することを特徴とする制御装置が提供される。
【００１０】
また、本願発明の一態様によれば、データを記憶する不揮発性メモリを有する半導体記憶装置の制御方法であって、前記不揮発性メモリへ書き込むべきデータが有効であるのか無効であるのかを示す第１のフラグを前記書き込むべきデータに付加して誤り訂正処理を行うことにより誤り訂正符号を生成する第１のステップと、前記書き込むべきデータに前記第１のステップで生成された誤り訂正符号を付加して前記不揮発性メモリへ書き込む第２のステップと、前記データと前記誤り訂正符号とを前記不揮発性メモリから読み出す第３のステップと、有効及び無効の何れか一方に固定された第２のフラグを前記第３のステップで読み出されたデータに付加して、前記第３のステップで読み出された誤り訂正符号を用いた誤り訂正処理を前記第２のフラグが付加されたデータに対して行う第４のステップと、有効に固定された前記第２のフラグが誤りであることを検出した場合、又は無効に固定された前記第２のフラグが正しいことを検出した場合、前記第２のフラグが付加されたデータが無効であると判定し、有効に固定された前記第２のフラグが正しいことを検出した場合、又は無効に固定された前記第２のフラグが誤りであることを検出した場合、前記第２のフラグが付加されたデータが有効であると判定する第５のステップとを備えたことを特徴とする半導体記憶装置の制御方法が提供される。
【発明の効果】
【００１１】
本発明によれば、不揮発性メモリの記憶領域を消費することなく、訂正不能なデータを管理できる。
【図面の簡単な説明】
【００１２】
【図１】図１は、第１の実施の形態にかかる半導体記憶装置１の構成を示す図である。
【図２】図２は、第１の実施の形態にかかる半導体記憶装置１の構成を示す図である。
【図３】図３は、第１の実施の形態におけるメモリ４０内に形成された機能ブロックを示す図である。
【図４】図４は、誤り訂正不能なデータをセクタ単位に管理する必要性について説明するための図である。
【図５】図５は、第１の実施の形態におけるＬ１／Ｌ２エンコーダ１５、Ｌ１デコーダ１６の内部機能構成例を示す図である。
【図６】図６は、第１の実施の形態におけるデータの構成を示す図である。
【図７】図７は、第１の実施の形態における書き込み処理の動作手順を示すフローチャートである。
【図８】図８は、第１の実施の形態における読み出し処理の動作手順を示すフローチャートである。
【図９】図９は、第１の実施の形態におけるリードモディファイライト処理の動作手順を示すフローチャートである。
【図１０】図１０は、有効／無効フラグＦ１が付加されていないデータに対して行われる第１のＥＣＣ処理及び第２のＥＣＣ処理におけるエンコード処理を示す図である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明の実施の形態にかかる半導体記憶装置を詳細に説明する。なお、この実施の形態により本発明が限定されるものではない。
（第１の実施の形態）
【００１４】
図１は、第１の実施の形態にかかる半導体記憶装置の構成をハードウェア的な側面から示すブロック図である。半導体記憶装置１は、通信媒体を介してホスト装置ＨＡの外部に接続され、ホスト装置ＨＡに対する外部記憶媒体として機能する。ホスト装置ＨＡは、例えば、パーソナルコンピュータ又はＣＰＵコアを含む。半導体記憶装置１は、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）を含む。
【００１５】
半導体記憶装置１は、図１に示すように、ＭＰＵ（プロセッサ）２、不揮発性半導体メモリとしてのＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤメモリと略す）３０、ＮＡＮＤメモリ３０よりも高速動作が可能なメモリ４０、通信Ｉ／Ｆ６０、ＮＡＮＤコントローラ１０、Ｌ２デコーダ２０及び内部バス５０を備える。ＮＡＮＤメモリ３０、メモリ４０、通信Ｉ／Ｆ６０、Ｌ２デコーダ２０及びＭＰＵ２は、内部バス５０を介して互いに接続されている。
【００１６】
ＮＡＮＤメモリ３０は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。ＮＡＮＤメモリ３０では、データの消去がブロック単位で行われるのに対して、データの書き込み及び読み出しがページ単位で行われる。ブロックは、複数のページをひとまとめにした単位である。また、ＮＡＮＤメモリ３０では、ＭＰＵ２による内部的なデータ管理がクラスタ単位で行われ、データの更新がセクタ単位で行われる。この実施の形態では、ページは、複数のクラスタをひとまとめにした単位であるとし、クラスタは、複数のセクタをひとまとめにした単位であるとする。セクタは、ホスト装置ＨＡからのデータの最小アクセス単位であり、例えば、５１２Ｂのサイズを有する。ホスト装置ＨＡは、セクタ単位のＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）によってアクセスするデータを指定する。
【００１７】
メモリ４０は、図３に示すように、ホスト装置ＨＡとＮＡＮＤメモリ３０との間でのデータ転送用のキャッシュ領域４１として、並びに、ＭＰＵ２が使用する作業領域４２として機能する。メモリ４０としては、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又はＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭなど（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を含む。また、メモリ４０は、ＮＡＮＤメモリ３０から読み出した各種管理テーブルを作業領域４２に一時的に記憶する。
【００１８】
通信Ｉ／Ｆ６０は、ＡＴＡインタフェース（ＡＴＡ  Ｉ／Ｆ）などのメモリ接続インタフェースであり、ホスト装置ＨＡから受信した命令、データなどを内部バス５０に出力し、内部バス５０経由で入力されたデータ、ＭＰＵ２からの応答通知（命令の実行完了を示す通知など）などをホスト装置ＨＡへ送信する。
【００１９】
ＭＰＵ２は、半導体記憶装置１の各構成要素を統括的に制御するもので、ホスト装置ＨＡから通信Ｉ／Ｆ６０及び内部バス５０経由での命令を受けた場合に、その命令に従った制御を行う。例えば、ＭＰＵ２は、ＮＡＮＤコントローラ１０と協働して、ホスト装置ＨＡからの命令に従って、ＮＡＮＤメモリ３０へのデータの書き込み、ＮＡＮＤメモリ３０からのデータの読み出しなどを制御する。すなわち、機能的な側面から見ると、ＭＰＵ２及びＮＡＮＤコントローラ１０を含む１つの制御部７０（図２参照）が実現されている。      
【００２０】
ＮＡＮＤコントローラ１０は、ＮＡＮＤメモリ３０とメモリ４０との間のデータ転送を制御するもので、命令制御部１１、コマンド制御部１２、ＤＭＡコントローラ１３、バッファメモリ１４、Ｌ１／Ｌ２エンコーダ１５、Ｌ１デコーダ１６、及びメモリＩ／Ｆ１７を有する。
【００２１】
命令制御部１１は、ＭＰＵ２から受けた命令をＮＡＮＤコントローラ１０用のコマンドに変換してコマンド制御部１２へ供給する。コマンド制御部１２は、供給されたコマンドに従って、ＤＭＡコントローラ１３、バッファメモリ１４、Ｌ１／Ｌ２エンコーダ、Ｌ１デコーダ１６、Ｌ２デコーダ２０、及びメモリＩ／Ｆ１７を制御する。
【００２２】
ＤＭＡコントローラ１３は、コマンド制御部１２による制御に従って、バッファメモリ１４、Ｌ２デコーダ２０及びメモリ４０の間のデータ転送制御をＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）方式に従って行う。バッファメモリ１４は、ＤＭＡコントローラ１３からＬ１／Ｌ２エンコーダ１５へのデータ転送と、Ｌ１デコーダ１６からＤＭＡコントローラ１３へのデータ転送とのそれぞれにおけるバッファ領域として機能する。
【００２３】
Ｌ１／Ｌ２エンコーダ１５は、コマンド制御部１２による制御に従って、ＤＭＡコントローラ１３からバッファメモリ１４を介して転送されたデータに対して、ＥＣＣ処理（誤り訂正処理）におけるエンコード処理を行い、エンコード結果をデータに付加して出力する。Ｌ１／Ｌ２エンコーダ１５では、第１のＥＣＣ符号（Ｌ１、誤り訂正符号）及び第２のＥＣＣ符号（Ｌ２、誤り訂正符号）を用いてエンコード処理を行う。第１のＥＣＣ符号（Ｌ１）、第２のＥＣＣ符号（Ｌ２）としては、例えば、ハミング符号、ＢＣＨ（Ｂｏｓｅ  Ｃｈａｕｄｈｕｒｉ  Ｈｏｃｑｅｎｇｈｅｍ）符号、ＲＳ（Ｒｅｅｄ  Ｓｏｌｏｍｏｎ）符号、或いはＬＤＰＣ（Ｌｏｗ  Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ）符号等を採用する。第２のＥＣＣ符号（Ｌ２）の訂正能力は、第１のＥＣＣ符号（Ｌ１）の訂正能力よりも高い。
【００２４】
Ｌ１デコーダ１６は、コマンド制御部１２による制御に従って、メモリＩ／Ｆ１７から転送されたデータに対して、第１のＥＣＣ符号（Ｌ１）を用いたＥＣＣ処理におけるデコード処理（誤り訂正符号を用いた誤り訂正処理）を行い、誤り訂正されたデータをバッファメモリ１４に出力する。メモリＩ／Ｆ１７は、Ｌ１／Ｌ２エンコーダ１５から出力されるＥＣＣ符号が付加されたデータをＮＡＮＤメモリ３０に出力するとともに、ＮＡＮＤメモリ３０から入力されたＥＣＣ符号が付加されたデータをＬ１デコーダ１６に出力する。
【００２５】
Ｌ２デコーダ２０は、ＮＡＮＤコントローラ１０の外部に設けられ、Ｌ１デコーダ１６の第１のＥＣＣ符号（Ｌ１）を用いたＥＣＣ処理におけるデコード処理で、訂正不可能な誤りが生じた場合（ＥＣＣエラーが発生した場合）にのみ活性化される。Ｌ２デコーダ２０は、ＤＭＡコントローラ１３から転送された、Ｌ１デコーダ１６で訂正不可能なデータに対して、第２のＥＣＣ符号（Ｌ２）を用いたＥＣＣ処理におけるデコード処理を行う。
【００２６】
ＮＡＮＤメモリ３０にデータを書き込む場合、Ｌ１／Ｌ２エンコーダ１５は、書き込み対象のデータに対して、セクタデータ毎に、例えば、誤り検出符号（例えば、ＣＲＣ符号）及びＭビットの訂正能力がある第１のＥＣＣ符号（例えば、ハミング符号）を生成して付加する。また、Ｌ１／Ｌ２エンコーダ１５は、複数のセクタデータから構成されるクラスタに、Ｎ（Ｎ＞Ｍ）ビットの訂正能力がある第２のＥＣＣ符号（例えば、ＢＣＨ符号）を生成して付加する。誤り検出符号、第１のＥＣＣ符号、及び第２のＥＣＣ符号が付加されたデータが、メモリＩ／Ｆ１７を介してＮＡＮＤメモリ３０に書き込まれる。
【００２７】
また、ＮＡＮＤメモリ３０からデータを読み出す場合は、Ｌ１デコーダ１６は、ＮＡＮＤメモリ３０から読み出されたデータに対して、まず、第１のＥＣＣ符号による誤り訂正を行った後、誤り検出符号を用いて誤訂正が発生しているか否かを検出する。Ｌ２デコーダ２０は、Ｌ１デコーダ１６によって誤訂正が発生していると判定された場合（Ｌ１−ＥＣＣエラー）に、すなわち、第１のＥＣＣ符号の訂正能力以上の誤りが生じて誤訂正が発生した場合に、第２のＥＣＣ符号による誤り訂正を行う。第２のＥＣＣ符号による誤り訂正が失敗した場合（Ｌ２−ＥＣＣエラー）、半導体記憶装置１は、ホスト装置ＨＡに対して読み出しエラーを示す応答を返す。
【００２８】
図２は、第１の実施の形態にかかる半導体記憶装置の構成を機能的な側面から示すブロック図である。半導体記憶装置１は、図２に示すように、データを記憶するＮＡＮＤメモリ３０と、ＮＡＮＤメモリ３０へのデータの書き込みとＮＡＮＤメモリ３０からのデータの読み出しとを制御する制御部７０とを備える。制御部７０は、ＮＡＮＤメモリ３０へのデータの書き込みを制御する書き込み制御部７１と、ＮＡＮＤメモリ３０からのデータの読み出しとを制御する読み出し制御部７２とを有する。ここで、書き込み制御部７１は、ＭＰＵ２、命令制御部１１、コマンド制御部１２、ＤＭＡコントローラ１３、バッファメモリ１４、メモリＩ／Ｆ１７のそれぞれにおける書き込み処理に関連した部分と、Ｌ１／Ｌ２エンコーダ１５とに対応している。読み出し制御部７２は、ＭＰＵ２、命令制御部１１、コマンド制御部１２、ＤＭＡコントローラ１３、バッファメモリ１４、メモリＩ／Ｆ１７のそれぞれにおける読み出し処理に関連した部分と、Ｌ１デコーダ１６と、Ｌ２デコーダ２０とに対応している。
【００２９】
つぎに、ＥＣＣエラーが発生した誤り訂正不能なデータを、ホスト装置ＨＡからのデータの最小アクセス単位であるセクタ単位に管理する必要性について図４を用いて説明する。例えば、第２のＥＣＣ符号による誤り訂正が失敗した結果として、図４（ａ）に示す複数のセクタ（ＬＢＡ＝Ｎ〜Ｎ＋７のセクタ）が誤り訂正不能（ｉｎｖａｌｉｄ）であるとする。このような誤り訂正不能な複数のセクタの一部が、図４（ｂ）に示すように、新たな書き込み要求によって更新される場合、訂正不能なデータと更新された有効データ（ｖａｌｉｄ）とを組み合わせ、組み合わせたデータから新たなＥＣＣ符号を作成し、作成したＥＣＣ符号が付加された組み合わせデータを新たなページに書き込むといった処理が行われる。したがって、この後は、新たなページから読み出した有効セクタ、訂正不能セクタを含む組み合わせデータを、組み合わせデータに付加されたＥＣＣ符号によって誤り訂正することが可能になる。しかし、更新された有効セクタ以外は依然として誤りを含んでいる可能性があり信頼できるデータとは言えないため、更新セクタ以外は、元々が不正なデータであったことを管理する必要がある。
【００３０】
従来は、訂正不能なクラスタ／セクタを管理するための管理テーブルを用意し、この管理テーブルをＮＡＮＤメモリ３０に保存しており、ＮＡＮＤメモリ３０の記憶領域が管理テーブルのために消費されている。そこで、本半導体記憶装置１においては、データの有効／無効を示す無効フラグを利用してＥＣＣ処理を行うことで、管理テーブルを使用することなく、誤り訂正不能なセクタの管理を可能とする。なお、この種の半導体記憶装置においては、無効なデータとは、同一論理アドレスのデータが他の場所に書きこまれ、参照されることがなくなったデータのことを言う場合が多いが、本明細書では、無効なデータとは、特に明記しないかぎり、誤り訂正不能なデータと同じ意味であるとする。
【００３１】
図５は、Ｌ１／Ｌ２エンコーダ１５、Ｌ１デコーダ１６の内部機能構成例を示すものである。Ｌ１／Ｌ２エンコーダ１５は、フラグ付加部１５ａ、ＥＣＣモジュール１５ｂ及びＥＣＣ合成部１５ｃを有する。
【００３２】
フラグ付加部１５ａは、ＮＡＮＤメモリ３０へ書き込むべきデータが有効であるのか無効であるのかを示す１〜複数ビットで構成される有効／無効フラグ（第１のフラグ）Ｆ１を、セクタ毎に、書き込むべきセクタデータＤに付加し、有効／無効フラグＦ１が付加されたセクタデータＤをＥＣＣモジュール１５ｂに出力する。すなわち、フラグ付加部１５ａは、命令制御部１１、コマンド制御部１２を介して入力されるＭＰＵ２からのセレクト信号ＳＬに従って、無効／有効を示す有効／無効フラグＦ１を選択するセレクタ１５ａａと、セレクタ１５ａａから出力される有効／無効フラグＦ１をセクタデータＤの例えば先頭（あるいは最後尾）に付加する付加部１５ａｂとを有する。
【００３３】
ＥＣＣモジュール１５ｂは、有効／無効フラグＦ１が付加されたセクタデータＤ毎に、すなわち有効／無効フラグＦ１＋セクタデータＤから構成されるフラグ付きデータ毎に、第１のＥＣＣ処理（誤り訂正処理）におけるエンコード処理を行い第１のＥＣＣ符号（Ｌ１）Ｅを生成する。すなわち、ＥＣＣモジュール１５ｂは、図６（ａ）に示すように、有効／無効フラグＦ１１〜Ｆ１ｋが付加された複数セクタのデータＤ１〜Ｄｋのそれぞれに第１のＥＣＣ処理（誤り訂正処理）におけるエンコード処理を行う。これにより、ＥＣＣモジュール１５ｂは、有効／無効フラグ付きセクタデータ（Ｆ１１＋Ｄ１）、（Ｆ１２＋Ｄ２）、…、（Ｆ１ｋ＋Ｄｋ）ごとに、第１のＥＣＣ符号（Ｌ１）Ｅ１〜Ｅｋを生成する。なお、ＥＣＣモジュール１５ｂは、図６（ａ）に示すように、有効／無効フラグＦ１１〜Ｆ１ｋが付加されたデータＤ１〜ＤｋのそれぞれにさらにＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）符号が追加された形のデータ（有効／無効フラグＦ１＋データＤ＋ＣＲＣ）にエンコード処理を行うことにより、第１のＥＣＣ符号（Ｌ１）を生成してもよい。
【００３４】
また、ＥＣＣモジュール１５ｂは、有効／無効フラグＦ１１〜Ｆ１ｋがそれぞれ付加された複数のセクタデータＤ１〜Ｄｋから構成されるクラスタに第２のＥＣＣ処理（誤り訂正処理）におけるエンコード処理を行う。これにより、ＥＣＣモジュール１５ｂは、有効／無効フラグ付きセクタデータの全体（Ｆ１１＋Ｄ１、Ｆ１２＋Ｄ２、…、Ｆ１ｋ＋Ｄｋ）に対して、第２のＥＣＣ符号（Ｌ２）Ｇ１ｋを生成する（図６（ａ）参照）。なお、ＥＣＣモジュール１５ｂは、図６（ａ）に示すように、有効／無効フラグＦ１１〜Ｆ１ｋが付加された複数セクタのデータＤ１〜ＤｋのそれぞれにさらにＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）符号が追加された形のデータ（Ｆ１１＋Ｄ１＋ＣＲＣ、Ｆ１２＋Ｄ２＋ＣＲＣ、…、Ｆ１ｋ＋Ｄｋ＋ＣＲＣ）にエンコード処理を行うことにより、第２のＥＣＣ符号（Ｌ２）を生成してもよい。
【００３５】
すなわち、Ｌ１／Ｌ２エンコーダ１５は、有効／無効フラグ付きセクタごとに第１のＥＣＣ符号（Ｌ１）を生成するとともに、複数の有効／無効フラグ付きセクタをひとまとめにした有効／無効フラグ付きクラスタごとに第２のＥＣＣ符号（Ｌ２）を生成する。
【００３６】
ＥＣＣ合成部１５ｃは、ＤＭＡコントローラ１３からバッファメモリ１４を介して転送されたデータに、Ｌ１／Ｌ２エンコーダ１５から供給された第１のＥＣＣ符号（Ｌ１）及び第２のＥＣＣ符号（Ｌ２）を付加して、図６（ｂ）に示すような、ＥＣＣ符号付きデータを形成し、形成したデータをメモリＩ／Ｆ１７に出力することで、ＮＡＮＤメモリ３０に書き込む。例えば、ＥＣＣ合成部１５ｃは、各セクタのデータＤ１〜Ｄｋの後に対応する第１のＥＣＣ符号（Ｌ１）Ｅ１〜Ｅｋを追加するとともに、複数セクタのデータＤ１〜Ｄｋの全体の後に第２のＥＣＣ符号（Ｌ２）Ｇ１ｋを追加する。ただし、有効／無効フラグＦ１は、ＥＣＣモジュール１５ｂのエンコードの際にのみ使用され、図６（ｂ）に示されているように、ＮＡＮＤメモリ３０に書き込まれるデータには、有効／無効フラグフィールドは存在しない。
【００３７】
Ｌ１デコーダ１６は、図５に示すように、フラグ付加部１６ａ、ＥＣＣモジュール１６ｂを有する。Ｌ１デコーダ１６には、ＮＡＮＤメモリ３０から読み出された第１のＥＣＣ符号（Ｌ１）及びＣＲＣ符号付きのデータが、メモリＩ／Ｆ１７を介して入力される。データは、バッファメモリ１４に一時記憶され、ＣＲＣは、Ｌ１デコーダ１６内のＣＲＣバッファ（図示せず）に一時記憶される。
【００３８】
フラグ付加部１６ａは、有効であることを示す１〜複数ビットの有効フラグ（有効に固定された第２のフラグ）Ｆ２を、メモリＩ／Ｆ１７から転送された各セクタのデータＤの例えば先頭（あるいは最後尾）に付加する。この有効フラグＦ２の挿入位置は、有効／無効フラグＦ１の挿入位置に対応し、有効／無効フラグＦ１をデータの先頭に付加した場合は、有効フラグＦ２をデータの先頭に付加するようにし、有効／無効フラグＦ１をデータの最後尾に付加した場合は、有効フラグＦ２をデータの最後尾に付加する。すなわち、フラグ付加部１６ａは、有効フラグＦ２を発生する有効フラグ発生部１６ａａと、発生した有効フラグＦ２を、データＤの先頭に付加し、有効フラグＦ２、データＤ、第１のＥＣＣ符号（Ｌ１）及びＣＲＣをＥＣＣモジュール１６ｂに入力する付加部１６ａｂとを有する。
【００３９】
ＥＣＣモジュール１６ｂは、有効フラグＦ２が付加された複数セクタのデータＤ１〜Ｄｋのそれぞれに、第１のＥＣＣ符号（Ｌ１）を用いた第１のＥＣＣ処理（誤り訂正処理）におけるデコード処理を行う。ＥＣＣモジュール１６ｂは、デコード処理の結果に応じて、第１のＥＣＣ処理におけるエラー有無及び訂正位置情報をＭＰＵ２に通知する。
【００４０】
より具体的には、ＥＣＣモジュール１６ｂは、有効フラグＦ２が付加された各セクタのデータに対して、その対応する第１のＥＣＣ符号（Ｌ１）を用いて誤り訂正および復号化を行い、さらに対応する誤り検出符号（ＣＲＣ）を用いて第１のＥＣＣ符号（Ｌ１）の訂正能力以上の誤りが生じているか否かを判断する。すなわち、ＥＣＣモジュール１６ｂは、各セクタデータについて、第１のＥＣＣ処理が成功したか、あるいは失敗したかを判断する。
【００４１】
ＥＣＣモジュール１６ｂは、第１のＥＣＣ処理が成功である（エラー無し）と判断した場合に、この判断結果及び誤りビット発生位置（訂正位置情報）をＭＰＵ２に通知する。ＭＰＵ２は、誤りビット発生位置が有効フラグＦ２のビット部分であるか否かを判定し、有効フラグＦ２のビット部分が正しいことを検出した場合、その有効フラグＦ２が付加されたセクタデータＤが有効であると判定し、一方、有効フラグＦ２のビット部分が誤りであることを検出した場合、その有効フラグＦ２が付加されたセクタデータＤが無効であると判定する。ＭＰＵ２は、読出し命令に応答する際において、有効フラグＦ２が付加されたセクタデータＤが無効であると判定した場合は、読み出しエラーをホストＨＡに通知する。また、ＥＣＣモジュール１６ｂは、第１のＥＣＣ処理が失敗である（エラー有り）と判断した場合は、この判断結果をＭＰＵ２に通知し、Ｌ２デコーダ２０を活性化させるよう要求する。
【００４２】
第１のＥＣＣ処理により訂正不能な誤りが生じている場合（Ｌ１−ＥＣＣエラー）、ＭＰＵ２の制御によって、ＮＡＮＤコントローラ１０の外部に配置されるＬ２デコーダ２０には、クラスタを構成する複数のセクタデータＤ１〜Ｄｋ、第２のＥＣＣ符号（Ｌ２）及びＣＲＣが、バッファメモリ１４、ＤＭＡコントローラ１３、及び内部バス５０を経由して転送される。
【００４３】
Ｌ２デコーダ２０は、図５に示すように、フラグ付加部２０ａ及びＥＣＣモジュール２０ｂを有する。フラグ付加部２０ａは、“有効”に固定された有効フラグＦ２を、メモリＩ／Ｆ１７から転送されたクラスタを構成する全てのセクタデータＤ１〜Ｄｋに付加する。ＥＣＣモジュール２０ｂは、有効フラグＦ２がそれぞれ付加された複数のセクタデータＤ１〜Ｄｋ、各ＣＲＣの全体に対して、第２のＥＣＣ符号（Ｌ２）を用いた第２のＥＣＣ処理（誤り訂正処理）におけるデコード処理を行う。
【００４４】
より具体的には、ＥＣＣモジュール２０ｂは、第２のＥＣＣ符号（Ｌ２）を用いて有効フラグ（有効を示す第２のフラグ）Ｆ２がそれぞれ付加された複数のセクタデータＤ１〜Ｄｋ、各ＣＲＣを含むクラスタ全体に対して誤り訂正および復号化を行い、さらに誤り検出符号（ＣＲＣ）を用いて第２のＥＣＣ符号（Ｌ２）の訂正能力以上の誤りが生じているか否かを判断する。すなわち、ＥＣＣモジュール２０ｂは、第１のＥＣＣ処理に失敗したセクタを含むクラスタについて、第２のＥＣＣ処理が成功したか、あるいは失敗したかを判断する。
【００４５】
ＥＣＣモジュール２０ｂは、第２のＥＣＣ処理が成功である（エラー無し）と判断した場合に、この判断結果及び誤りビット発生位置（訂正位置情報）をＭＰＵ２に通知する。ＭＰＵ２は、誤りビット発生位置が有効フラグＦ２のビット部分であるか否かを判定し、有効フラグＦ２のビット部分が正しいことを検出した場合、その有効フラグＦ２が付加されたセクタデータＤが有効であると判定し、一方、有効フラグＦ２のビット部分が誤りであることを検出した場合、その有効フラグＦ２が付加されたセクタデータＤが無効であると判定する。ＭＰＵ２は、読出し命令に応答する際において、有効フラグＦ２が付加されたセクタデータＤが無効であると判定した場合は、読み出しエラーをホストＨＡに通知する。
【００４６】
また、ＥＣＣモジュール２０ｂは、第２のＥＣＣ処理が失敗である（エラー有り）と判断した場合は、この判断結果をＭＰＵ２に通知する。ＭＰＵ２は、読出し命令に応答する際において、第２のＥＣＣ処理が失敗である（Ｌ２−ＥＣＣエラー）との判断結果を受信した場合、読み出しエラーをホストＨＡに通知する。更に、ＭＰＵ２は、第２のＥＣＣ処理に失敗したクラスタを構成する全てのセクタデータＤ１〜Ｄｋについて、セレクト信号ＳＬとして無効を選択した上で、Ｌ１／Ｌ２エンコーダ１５によって有効／無効フラグＦ１を付加し、メモリＩ／Ｆ１７を介してＮＡＮＤメモリ３０に書き込む。
【００４７】
ＭＰＵ２は、ＮＡＮＤメモリ３０に対してデータの書き込みを行う際、セクタ毎にセレクト信号ＳＬを有効にするか無効にするかを決定し、その決定結果を命令制御部１１、コマンド制御部１２を介してＬ１／Ｌ２エンコーダ１５に出力する。セレクト信号ＳＬは、ホストＨＡからの書き込み要求にしたがって、ホストＨＡから入力されたデータをＮＡＮＤメモリ１０に書き込む際、ホストＨＡから入力されたデータに関しては、有効が選択される。すなわち、ＮＡＮＤメモリ１０で未使用（データが記憶されていない）の論理アドレス（ＬＢＡ）に対してホストＨＡから書き込みが発生したときや、クラスタ内の一部セクタの更新ではなくクラスタ全体の更新のためのＮＡＮＤメモリ１０に対する書き込みのときには、セレクト信号ＳＬとして、有効が選択される。
【００４８】
また、クラスタ内の一部セクタの更新を行うときなど、ＮＡＮＤメモリ３０の記憶データを読み取って、変更を加えて、書き戻すリード・モディファイ・ライト（ＲＭＷ）の場合のＮＡＮＤメモリ３０への書き込みの際は、Ｌ１デコーダ１６及びＬ２デコーダ２０でのデコード結果に基づいて、ＮＡＮＤメモリ３０から読み出したデータの各セクタが有効であるか無効であるかを判定し、その判定結果と、加えられる変更内容に基づいて有効を選択させるか無効を選択させるかを決定する。デコード結果に基づき有効と判定されたセクタは有効／無効フラグＦ１で有効を選択させ、無効と判定されたセクタは、このセクタにホストＨＡからの更新が発生していない限り、有効／無効フラグＦ１で無効を選択させる。したがって、リード・モディファイ・ライト時においては、Ｌ１デコーダ１６及びＬ２デコーダ２０でのデコード結果に基づいて得られた各セクタの有効／無効の判定結果は、ＮＡＮＤメモリ３０から読み出されたデータが、有効／無効フラグＦ１が付加されて再度ＮＡＮＤメモリ３０に再記憶されるまでは、例えばメモリ４０などの記憶部に一時記憶させておく。
【００４９】
次に、半導体記憶装置１のＥＣＣ処理に関連した動作を、図７〜図９を用いて説明する。図７は、書き込み処理の動作を示すフローチャートであり、図８は、読み出し処理の動作を示すフローチャートであり、図９は、ＲＭＷ（リード・モディファイ・ライト）処理の動作を示すフローチャートである。
【００５０】
まず、図７を用いて書き込み処理の動作を説明する。まず、ＭＰＵ２は、ホストＨＡから入力されたコマンドが書き込み命令であるか否かを判定し（ステップＳ１）、入力コマンドが書き込み命令である場合は、この書込み命令に含まれるＬＢＡと、管理情報として例えばメモリ４０に登録されているＮＡＮＤメモリ１０に既に記憶されているデータのＬＢＡとを照合することにより、今回の書き込みが前述したリード・モディファイ・ライト（ＲＭＷ）処理を必要とするか否かを判定し（ステップＳ２）、リード・モディファイ・ライト（ＲＭＷ）処理を必要とすると判断した場合は、図９で説明するＲＭＷ処理を実行する（ステップＳ３）。
【００５１】
ＭＰＵ２は、今回の書き込みがリード・モディファイ・ライト（ＲＭＷ）処理を必要とせず、例えば未使用のＬＢＡに対する書き込みであると判断すると、ホストＨＡから通信Ｉ／Ｆ６０を介して入力された書き込みデータを、メモリ４０、ＤＭＡコントローラ１３、バッファメモリ１４を経由してＬ１／Ｌ２エンコーダ１５に入力して、セレクト信号ＳＬを有効側にする。この結果、Ｌ１／Ｌ２エンコーダ１５のフラグ付加部１５ａにおいて、有効“００００ｈ”を示す有効／無効フラグＦ１が書き込みデータのセクタデータＤ毎に付加される（ステップＳ４）。つぎに、Ｌ１／Ｌ２エンコーダ１５のＥＣＣモジュール１５ｂは、有効“００００ｈ”を示す有効／無効フラグＦ１が付加されたセクタデータＤ毎にＣＲＣおよび第１のＥＣＣ符号（Ｌ１）を生成し、さらにクラスタ毎に第２のＥＣＣ符号を生成する（ステップＳ５）。つぎに、ＥＣＣ合成部１５ｃは、ＤＭＡコントローラ１３からバッファメモリ１４を介して転送されたデータと、Ｌ１／Ｌ２エンコーダ１５から供給されたＣＲＣ、第１および第２のＥＣＣ符号（Ｌ１、Ｌ２）とをマージして（図６（ｂ）参照）、メモリＩ／Ｆ１７を介してＮＡＮＤメモリ３０に書き込む（ステップＳ６）。
【００５２】
つぎに、図８を用いて読み出し処理の動作を説明する。ＭＰＵ２は、ホストＨＡから入力されたコマンドが読み出し命令であるか否かを判定し（ステップＳ１０）、入力コマンドが読み出し命令であると判定した場合は、ＮＡＮＤコントローラ１０を制御して、読み出し命令によってアドレスが指定されたデータをＮＡＮＤメモリ３０から読み出させる（ステップＳ１１）。ＮＡＮＤメモリ３０からＬ１デコーダ１６に読み出されたデータには、第１および第２のＥＣＣ符号（Ｌ１、Ｌ２）が付加されている。
【００５３】
Ｌ１デコーダ１６のフラグ付加部１６ａは、第１および第２のＥＣＣ符号（Ｌ１、Ｌ２）が付加された読み出しデータに、有効“００００ｈ”を示す有効フラグＦ２をセクタ毎に付加する（ステップＳ１２）。Ｌ１デコーダ１６のＥＣＣモジュール１６ｂは、有効フラグＦ２が付加された各セクタデータＤに、第１のＥＣＣ符号（Ｌ１）を用いて誤り訂正復号処理を行う（ステップＳ１３）。具体的には、ＥＣＣモジュール１６ｂは、第１のＥＣＣ符号（Ｌ１）を用いてセクタ毎に誤り訂正および復号化を行い、さらに誤り検出符号（ＣＲＣ）を用いて第１のＥＣＣ符号（Ｌ１）の訂正能力以上の誤りが生じているか否かをセクタ毎に判断する（ステップＳ１４）。
【００５４】
Ｌ１デコーダ１６のＥＣＣモジュール１６ｂは、第１のＥＣＣ符号（Ｌ１）を用いた誤り訂正に成功したと判断した場合に、この判断結果及び誤りビットの発生位置をＭＰＵ２に通知する。ＭＰＵ２は、誤りビット発生位置が有効フラグＦ２のビット部分であるか否かを判定する（ステップＳ１６）。ＭＰＵ２は、有効フラグＦ２のビット部分が誤りであることを検出した場合は、その有効フラグＦ２が付加されたセクタデータＤが無効であると判定し（ステップＳ１７）、読み出しエラーをホストＨＡに通知する（ステップＳ１８）。
【００５５】
一方、ＭＰＵ２は、有効フラグＦ２のビット部分が正しいことを検出した場合（ステップＳ１６  ＮＯ）、その有効フラグＦ２が付加されたセクタデータＤが有効であると判定し（ステップＳ１９）、第１のＥＣＣ符号（Ｌ１）による誤り訂正後のセクタデータＤをメモリ４０（キャッシュ領域４１）、通信Ｉ／Ｆ６０を介してホストＨＡに出力する（ステップＳ２０）。
【００５６】
一方、ＥＣＣモジュール１６ｂは、第１のＥＣＣ符号（Ｌ１）を用いた誤り訂正に失敗したと判断した場合は（ステップＳ１４  ＮＯ）、ＭＰＵ２に対してＬ２デコーダ２０を活性化させるよう要求する。ＭＰＵ２によって活性化されたＬ２デコーダ２０のＥＣＣモジュール２０ｂは、第２のＥＣＣ符号（Ｌ２）を用いて有効フラグ（有効を示す第２のフラグ）Ｆ２がそれぞれ付加された複数のセクタデータＤ１〜Ｄｋ、各ＣＲＣを含むクラスタ全体に対して誤り訂正および復号化を行い、さらに誤り検出符号（ＣＲＣ）を用いて第２のＥＣＣ符号（Ｌ２）の訂正能力以上の誤りが生じているか否かを判断する（ステップＳ１５）。
【００５７】
ＥＣＣモジュール２０ｂは、第２のＥＣＣ符号（Ｌ２）を用いた誤り訂正に成功したと判断した場合は、この判断結果及び誤りビット発生位置をＭＰＵ２に通知する。ＭＰＵ２は、誤りビット発生位置が有効フラグＦ２のビット部分であるか否かを判定する（ステップＳ１６）。ＭＰＵ２は、有効フラグＦ２のビット部分が誤りであることを検出した場合は、その有効フラグＦ２が付加されたセクタデータＤが無効であると判定し（ステップＳ１７）、読み出しエラーをホストＨＡに通知する（ステップＳ１８）。
【００５８】
一方、ＭＰＵ２は、有効フラグＦ２のビット部分が正しいことを検出した場合（ステップＳ１６  ＮＯ）、その有効フラグＦ２が付加されたセクタデータＤが有効であると判定し（ステップＳ１９）、第２のＥＣＣ符号（Ｌ１）による誤り訂正後のセクタデータＤをメモリ４０（キャッシュ領域４１）、通信Ｉ／Ｆ６０を介してホストＨＡに出力する（ステップＳ２０）。
【００５９】
しかし、Ｌ２デコーダ２０のＥＣＣモジュール２０ｂは、第２のＥＣＣ符号（Ｌ２）の訂正能力以上の誤りが生じていることを検出した場合（Ｌ２ＥＣＣエラー）は、その旨をＭＰＵ２に報告する。ＭＰＵ２は、Ｌ２−ＥＣＣエラーを受信した場合、読み出しエラーをホストＨＡに通知する。更に、ＭＰＵ２は、第２のＥＣＣ処理に失敗したクラスタを構成する全てのセクタデータＤ１〜Ｄｋについて、セレクト信号ＳＬとして無効を選択した上で、Ｌ１／Ｌ２エンコーダ１５によって有効／無効フラグＦ１を付加し、メモリＩ／Ｆ１７を介してＮＡＮＤメモリ３０に書き込む（ステップＳ２１）。
【００６０】
つぎに、図９を用いてリード・モディファイ・ライト（ＲＭＷ）処理の動作を説明する。ＭＰＵ２は、今回の処理がＲＭＷ処理であるか否かを判定し（ステップＳ４０）、ＲＭＷ処理であると判断した場合は、ＮＡＮＤコントローラ１０を制御して、該当するクラスタデータをＮＡＮＤメモリ３０から読み出させる（ステップＳ４１）。Ｌ１デコーダ１６のフラグ付加部１６ａは、第１および第２のＥＣＣ符号（Ｌ１、Ｌ２）が付加された読み出しデータに、有効“００００ｈ”を示す有効フラグＦ２をセクタ毎に付加する（ステップＳ４２）。Ｌ１デコーダ１６のＥＣＣモジュール１６ｂは、有効フラグＦ２が付加された各セクタデータＤに、前記同様、第１のＥＣＣ符号（Ｌ１）を用いて誤り訂正復号処理を行い（ステップＳ４３）、誤り検出符号（ＣＲＣ）を用いて第１のＥＣＣ符号（Ｌ１）の訂正能力以上の誤りが生じているか否かをセクタ毎に判断する（ステップＳ４４）。
【００６１】
Ｌ１デコーダ１６のＥＣＣモジュール１６ｂは、第１のＥＣＣ符号（Ｌ１）を用いて誤り訂正が不可能と判断した場合は（ステップＳ４４  ＮＯ）、ＭＰＵ２に対してＬ２デコーダ２０を活性化させるよう要求する。ＭＰＵ２によって活性化されたＬ２デコーダ２０のＥＣＣモジュール２０ｂは、第２のＥＣＣ符号（Ｌ２）を用いて有効フラグ（有効を示す第２のフラグ）Ｆ２がそれぞれ付加された複数のセクタデータＤ１〜Ｄｋ、各ＣＲＣを含むクラスタ全体に対して誤り訂正および復号化を行い、さらに誤り検出符号（ＣＲＣ）を用いて第２のＥＣＣ符号（Ｌ２）の訂正能力以上の誤りが生じているか否かを判断する（ステップＳ４５）。Ｌ２デコーダ２０のＥＣＣモジュール２０ｂは、第２のＥＣＣ符号（Ｌ２）の訂正能力以上の誤りが生じていることを検出した場合（Ｌ２ＥＣＣエラー）は、その旨をＭＰＵ２に報告する。ＭＰＵ２は、Ｌ２−ＥＣＣエラーを受信した場合、そのクラスタを無効にするべく、当該クラスタを構成する全てのセクタデータＤ１〜Ｄｋにそれぞれ対応するフラグＦ２部分での判定結果を無効に設定する（ステップＳ５３）。
【００６２】
Ｌ１デコーダ１６またはＬ２デコーダ２０の何れかによって誤り訂正が可能である場合は、Ｌ１デコーダ１６（またはＬ２デコーダ２０）は、エラーの有無およびエラービット位置情報をＭＰＵ２に通知する。ＭＰＵ２は、エラービット位置情報によって有効フラグＦ２のビット部分が誤りであるか否かを判定し（ステップＳ４６）、有効フラグＦ２のビット部分が誤りであることを検出した場合は、その有効フラグＦ２が付加されたセクタデータＤが無効であると判定し（ステップＳ４７）、有効フラグＦ２のビット部分が正しいことを検出した場合、その有効フラグＦ２が付加されたセクタデータＤが有効であると判定する（ステップＳ４８）。クラスタ内の各セクタについてのフラグ判定結果は、前述したように一時記憶しておく。
【００６３】
Ｌ１デコーダ１６（またはＬ２デコーダ２０）で処理された各セクタデータは、バッファメモリ１４、ＤＭＡコントローラ１３を介してメモリ４０の作業領域４２に書き込まれ、メモリ４０の作業領域４２で、ホストＨＡから受信した更新データ（書き込みデータ）との置換処理が実行され、図４（ｂ）に示したような、組み合わせデータが形成される（ステップＳ４９）。ＭＰＵ２は、一時記憶していたフラグ判定結果のうちのホストＨＡから受信した更新データに対応するセクタに対応するフラグ判定結果を有効に変更し（ステップＳ５０）、変更したフラグを有効／無効フラグＦ１として各セクタに付加してＬ１／Ｌ２符号化を行わせる（ステップＳ５１）。すなわち、メモリ４０の作業領域４２で作成した組み合わせデータを、ＤＭＡコントローラ１３，バッファメモリ１４を経由してＬ１／Ｌ２エンコーダ１５に入力して、各セクタの無効／有効に応じてセレクト信号ＳＬを切り替えることでＬ１／Ｌ２エンコーダ１５において、有効“００００ｈ”または無効“０００１ｈ”を示す有効／無効フラグＦ１を書き込みデータのセクタデータＤ毎に付加し、さらに有効／無効フラグＦ１が付加された各セクタデータＤ毎にＣＲＣおよび第１のＥＣＣ符号（Ｌ１）を生成し、さらにクラスタ毎に第２のＥＣＣ符号を生成する。そして、生成したＣＲＣ、第１および第２のＥＣＣ符号（Ｌ１、Ｌ２）を、バッファメモリ１４を介して転送されたデータとマージして、メモリＩ／Ｆ１７を介してＮＡＮＤメモリ３０に書き込む（ステップＳ５２）。
【００６４】
図４に示したような、無効なセクタ部分に対する一部更新処理が発生した場合の本実施の形態でＲＭＷ動作は次のようになる。図４（ａ）に示した無効セクタは、Ｌ１デコーダ１６またはＬ２デコーダ２０でのデコード処理によって検出される。すなわち、Ｌ１デコーダ１６またはＬ２デコーダ２０でのデコード処理の際に誤り訂正不可能になり、Ｌ２ＥＣＣエラーが発生することにより、ＭＰＵ２で無効セクタ化（ｉｎｖａｌｉｄ化）される。この結果、これらの無効セクタには、Ｌ１／Ｌ２エンコーダ１５で無効を示す有効／無効フラグＦ１が付加されてエンコード処理が行われ、それらのエンコード結果が各セクタに付加されてＮＡＮＤメモリ３０に書き込まれる。
【００６５】
このような状態で、複数の連続した無効セクタの一部に図４（ｂ）に示すような更新が発生したとする。このような場合、ＭＰＵ２では、リード・モディファイ・ライト動作を実行する。すなわち、まず、更新セクタを含むクラスタを含むページまたはブロックをＮＡＮＤメモリ３０からリードする。リードされたデータは、Ｌ１デコーダ１６及びＬ２デコーダ２０で、リードされた各セクタに有効フラグＦ２が付加される前述のデコード処理が行われ、この結果有効フラグＦ２部分に誤りがあるとして検出され、これによりＭＰＵ２は、これらリードされたセクタは誤り訂正不可能な無効セクタであると判定する。
【００６６】
無効と判定されたセクタは、バッファメモリ１４、ＤＭＡコントローラ１３を介してメモリ４０の作業領域４２に書き込まれ、メモリ４０の作業領域４２で、ホストＨＡから受信した更新データと組み合わされて、図４（ｂ）に示すような、組み合わせデータが形成される。この組み合わせデータは、メモリ４０の作業領域４２からＤＭＡコントローラ１３、バッファメモリ１４に転送される。
【００６７】
ＭＰＵ２は、組み合わせデータ中の無効セクタ部分については、有効／無効フラグＦ１の無効フラグを選択し、更新セクタ部分については、有効／無効フラグＦ１の有効フラグを選択するよう、ＮＡＮＤコントローラ１０の命令制御部１１に指令を与える。この結果、Ｌ１／Ｌ２エンコーダ１５では、無効セクタには、無効の有効／無効フラグＦ１を付加してＥＣＣ符号を作成し、更新セクタには有効の有効／無効フラグＦ１を付加してＥＣＣ符号を作成し、作成した各ＥＣＣ符号を該当セクタにそれぞれ付加してＮＡＮＤメモリ３０の新たなページまたはブロックに書き込む。したがって、このような有効セクタ及び無効セクタが組み合わされたデータをリードした際には、Ｌ１デコーダ１６及びＬ２デコーダ２０で前述のデコード処理が行われることにより、各セクタが有効であるか無効であるかを適正に判別することが可能となる。
【００６８】
図１０は、有効／無効フラグＦ１が、ＥＣＣ処理単位における未使用領域を効率的に利用して付加され得ることを示すものである。図１０では、Ｌ１／Ｌ２エンコーダ１５は、データ部分及びＣＲＣ部分に、更に未使用領域「ＤＲ」を加えたデータを処理単位として、第１のＥＣＣ処理を行う。ここで未使用領域とは、エンコード処理及びデコード処理において使用されるが、実際にはＮＡＮＤメモリ３０に書き込まれないデータのことである。なお、未使用領域の一部データについては、実際にＮＡＮＤメモリ３０に書き込んでも良い。このような未使用領域は、ＥＣＣ処理単位にデータ部分以外のＣＲＣ部分等を含める場合に端数として発生し得る。本実施形態では、例えば、この様なＥＣＣ処理単位における未使用領域の少なくとも一部のビットを、有効／無効フラグＦ１として利用することができる。この場合、元々活用されていなかったＥＣＣ処理単位内の未使用領域を効率的に利用することができる。
【００６９】
未使用領域内の各ビットには、例えば、仮想的に“０”データを割り当てることでデコード処理がなされる。この場合、本実施形態では、有効フラグ表すビットについても同様に“０”データ（“００００ｈ”）に設定する。これにより、エンコード処理時に有効フラグをセットしてＥＣＣ処理を行った有効データについては通常通りデコード処理が実行され、エンコード処理時に無効フラグをセットしてＥＣＣ処理を行った無効データについては、未使用領域内のフラグ位置に誤りが検出されることで、有効データ／無効データを判別することが可能になる。従って、ＥＣＣ処理単位における未使用領域の少なくとも一部のビットを仮想的な有効／無効フラグとして効率的に利用することが可能になる。
【００７０】
以上のように、本実施の形態においては、ＥＣＣ符号生成時に、データに加え、データの有効／無効を識別する仮想的なフラグについても処理単位に含める。ＮＡＮＤメモリ３０への書き込み時にはＥＣＣ演算で使用したフラグは対象としない。ＮＡＮＤメモリ３０からの読み出し時には、上記フラグ情報は書き込んでいないため存在しないので、仮に有効フラグが付与されているものとしてＥＣＣ演算を行う。ＥＣＣ演算結果として、当該フラグに誤りがあるとして検出された場合は無効データとして扱い、当該フラグに誤りがなければ有効データとして扱うことができる。
【００７１】
セクタデータの有効／無効を示す有効／無効フラグＦ１をセクタデータに付加してＥＣＣ処理を行うことにより、ＥＣＣ符号（Ｌ１、Ｌ２）を生成するので、ＥＣＣ処理単位における未使用領域にフラグＦ１の値を示す情報（セクタデータの有効／無効を示す情報）を含ませることができる。そして、そのように生成されたＥＣＣ符号（Ｌ１、Ｌ２）をセクタデータに付加してＮＡＮＤメモリ３０へ書き込むので、セクタデータの有効／無効を管理するための情報により、ＮＡＮＤメモリ３０の記憶領域が消費されないようにすることができる。ここで、データ＋付加情報の組でＥＣＣ符号化処理を行うが、ＮＡＮＤメモリ３０に対してはデータのみ、もしくはデータ＋付加情報の一部のみを書き込み対象として取り扱い、読み出し時は削除した付加情報を予め準備した値で補完してＥＣＣ復号処理を行う。
【００７２】
また、セクタデータとＥＣＣ符号との組を複数含むデータをＮＡＮＤメモリから読み出し、有効に固定された有効フラグＦ２を読み出されたセクタデータ毎に付加し、読み出された（フラグＦ１の値を示す情報が含まれた）ＥＣＣ符号を用いたＥＣＣ処理を有効フラグＦ２が付加されたセクタデータに対して行う。これにより、有効フラグＦ２が誤りであるか否かを検出して、エンコード処理時に付加した有効／無効フラグＦ１の値を推定することができる。すなわち、ＥＣＣ処理により有効フラグＦ２が誤りであることを検出した場合、有効フラグＦ２が付加されたセクタデータが無効であると判定することができる。また、ＥＣＣ処理により有効フラグＦ２が正しいことを検出した場合、有効フラグＦ２が付加されたセクタデータが有効であると判定することができる。
【００７３】
したがって、第１の実施の形態によれば、ＮＡＮＤメモリ３０の記憶領域を消費することなく、セクタデータの有効／無効を管理することができる。例えば、バッドクラスタテーブル、及びバッドクラスタテーブルに登録されたクラスタを構成する各セクタの有効／無効を示すセクタビットマップ等を作成する必要が無くなる。
【００７４】
なお、本実施の形態では、２段階のＥＣＣ処理（Ｌ１、Ｌ２）を行うようにしたが、第１のＥＣＣ処理（Ｌ１）及び第２のＥＣＣ処理（Ｌ２）のいずれか一方のみを行うようにしてもよい。あるいは、第１のＥＣＣ処理および第２のＥＣＣ処理とは異なるフォーマットで誤り訂正符号を生成し、３段階以上のＥＣＣ処理を行うようにしてもよい。
【００７５】
また、上記実施の形態では、Ｌ１デコーダ１６、Ｌ２デコーダ２０で使用するフラグＦ２として、有効フラグを採用したが、無効フラグを採用してもよい。この場合、ＭＰＵ２は、ＥＣＣ処理により無効フラグ（無効に固定された第２のフラグ）Ｆ２のビット部分が誤りであることを検出した場合、無効フラグＦ２が付加されたセクタデータＤが有効であると判定する。ＭＰＵ２は、ＥＣＣ処理により無効フラグＦ２のビット部分が正しいことを検出した場合、無効フラグＦ２が付加されたセクタデータＤが無効であると判定する。
【符号の説明】
【００７６】
１  半導体記憶装置、  ２  ＭＰＵ、  １０  ＮＡＮＤコントローラ、  １１  命令制御部、  １２  コマンド制御部、  １３  ＤＭＡコントローラ、  １４  バッファメモリ、  １５  Ｌ１／Ｌ２エンコーダ、  １５ａ  フラグ付加部、  １５ａａ  セレクタ、  １５ａｂ  付加部、  １５ｂ  ＥＣＣモジュール、  １５ｃ  ＥＣＣ合成部、  １６  Ｌ１デコーダ、  １６ａ  フラグ付加部、  １６ａａ  有効フラグ発生部、  １６ａｂ  付加部、  １６ｂ  ＥＣＣモジュール、  １７  メモリＩ／Ｆ、    ２０  Ｌ２デコーダ、  ２０ａ  フラグ付加部、  ２０ｂ  ＥＣＣモジュール、  ３０  ＮＡＮＤメモリ、  ４０  メモリ、  ４１  キャッシュ領域、  ４２  作業領域、  ５０  内部バス、  ６０  通信Ｉ／Ｆ、  ７０  制御部、  ７１  書き込み制御部、  ７２  読み出し制御部、  Ｆ１、Ｆ１１〜Ｆ１ｋ  有効／無効フラグ、  Ｆ２  有効フラグ
【図１】
2012022508.tif 000003
【図２】
2012022508.tif 000004
【図３】
2012022508.tif 000005
【図４】
2012022508.tif 000006
【図５】
2012022508.tif 000007
【図６】
2012022508.tif 000008
【図７】
2012022508.tif 000009
【図８】
2012022508.tif 000010
【図９】
2012022508.tif 000011
【図１０】
2012022508.tif 000012