(57)【要約】【課題】読み出しの処理時間を短縮することができるメモリシステムを得ること。【解決手段】データと、２段階以上の誤り訂正処理により段階毎に定義された所定のサイズの前記データである単位データ毎に生成された各段階の誤り訂正符号と、を記憶する半導体記憶部、を備える。そして、半導体記憶部から読み出されたデータと当該データに対応する前記各段階の誤り訂正符号とに基づいて誤り訂正処理を行う誤り訂正処理部と、誤り訂正処理部による誤り訂正処理により誤り訂正が不可であったか否かを示す段階毎の誤り訂正履歴情報を前記単位データ毎に記憶する誤り訂正履歴情報記憶部と、を備える。さらに、読み出し対象の単位データに対応する前記誤り訂正履歴情報が訂正不可である段階の誤り訂正処理を実施せずに次段階の誤り訂正処理を実施するよう誤り訂正処理部を制御する。【選択図】図１
2012137994.tif 000002
【特許請求の範囲】
【請求項１】
データと、２段階以上の誤り訂正処理により段階毎に定義された所定のサイズの前記データである単位データ毎に生成された各段階の誤り訂正符号と、を記憶する半導体記憶部と、
前記半導体記憶部から読み出されたデータと当該データに対応する前記各段階の誤り訂正符号とに基づいて誤り訂正処理を行う誤り訂正処理部と、
前記誤り訂正処理部による誤り訂正処理により誤り訂正が不可であったか否かを示す段階毎の誤り訂正履歴情報を前記単位データ毎に記憶する誤り訂正履歴情報記憶部と、
読み出し対象の前記単位データに対応する前記誤り訂正履歴情報が訂正不可である段階の誤り訂正処理を実施せずに次段階の誤り訂正処理を実施するよう前記誤り訂正処理部を制御する誤り訂正処理制御部と、
を備えることを特徴とするメモリシステム。
【請求項２】
前記誤り訂正履歴情報を前記半導体記憶部に保持する、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記誤り訂正履歴情報に、さらに各段階の誤り訂正処理における訂正ビット数を含める、
ことを特徴とする請求項１または２に記載のメモリシステム。
【請求項４】
前記誤り訂正処理制御部は、読み出し対象の前記単位データに対応する前記訂正ビット数が対応する所定のしきい値以上である場合に前記訂正ビット数に対応する段階の誤り訂正処理を実施するとともに次段階の誤り訂正処理を並行して開始するよう制御する、
ことを特徴とする請求項３に記載のメモリシステム。
【請求項５】
前記誤り訂正処理制御部は、読み出し対象の前記単位データに対応する前記訂正ビット数が対応する所定のしきい値以上であり、かつ当該単位データが属するブロックにおける読み出し回数が所定の上限回数を超える場合に前記訂正ビット数に対応する段階の誤り訂正処理を実施するとともに次段階の誤り訂正処理を並行して開始するよう制御する、
ことを特徴とする請求項４に記載のメモリシステム。
【請求項６】
前記データを一時的に格納するための一時記憶部、
をさらに備え、
前記誤り訂正履歴情報を前記一時記憶部に保持する、
ことを特徴とする請求項１乃至請求項５のいずれか１つに記載のメモリシステム。
【請求項７】
前記一時記憶部を不揮発性メモリで構成する、
ことを特徴とする請求項６に記載のメモリシステム。
【請求項８】
前記一時記憶部を揮発性メモリで構成し、
電源遮断時に前記一時記憶部に記憶されている前記誤り訂正履歴情報を前記半導体記憶部へ書き込み、電源投入時に前記半導体記憶部に記憶されている前記誤り訂正履歴情報を前記一時記憶部へ書き込む、
ことを特徴とする請求項６に記載のメモリシステム。
【請求項９】
前記半導体記憶部に記憶されるデータが更新された場合には、当該データに対応する前記誤り訂正履歴情報を初期化する、
ことを特徴とする請求項１乃至請求項８のいずれか１つに記載のメモリシステム。
【請求項１０】
２段階の誤り訂正処理を行うこととし、１段階目の誤り訂正符号をハミング符号または少数ビット訂正可能なＢＣＨ符号とし、２段階目の誤り訂正符号を多数ビット訂正可能なＢＣＨ符号またはＬＤＰＣ符号とする、
ことを特徴とする請求項１乃至請求項９のいずれか１つに記載のメモリシステム。
【請求項１１】
データと、２段階以上の誤り訂正処理により段階毎に定義された所定のサイズの前記データである単位データ毎に生成された各段階の誤り訂正符号と、を半導体記憶部へ記憶する第１のステップと、
前記半導体記憶部から読み出されたデータと当該データに対応する前記各段階の誤り訂正符号とに基づいて誤り訂正処理を行う第２のステップと、
前記誤り訂正処理部による誤り訂正処理により誤り訂正が不可であったか否かを示す段階毎の誤り訂正履歴情報を前記単位データ毎に記憶する第３のステップと、
読み出し対象の前記単位データに対応する前記誤り訂正履歴情報が訂正不可である段階の誤り訂正処理を実施せずに次段階の誤り訂正処理を実施するよう制御する第４のステップと、
を含むことを特徴とするメモリシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムおよびその制御方法に関する。
【背景技術】
【０００２】
現在、半導体メモリは大型コンピュータの主記憶から、パーソナルコンピュータ、家電製品、携帯電話等、至る所で利用されている。特に注目を浴びているのはフラッシュメモリである。フラッシュメモリ（フラッシュＥＥＰＲＯＭ（Electrically  Erasable  and  Programmable  Read  Only  Memory）型の不揮発性メモリ）は電源を切ってもデータが消えないこと、高集積化に適した構造になっていること、などの特徴により、携帯電話やデジタルカメラ等、多くの情報機器に利用されている。
【０００３】
フラッシュメモリは主にＮＯＲ型とＮＡＮＤ型が有る。ＮＯＲ型フラッシュメモリは、高速Readが可能であり、Read可能回数が１０13回程度有り携帯機器の命令コード記憶として使われているが、Writeの実効バンド幅が小さく、File記録には適していない。
【０００４】
一方、ＮＡＮＤ型フラッシュメモリは、ＮＯＲ型フラッシュメモリに比べて高集積化が可能で、Readについてはアクセス時間が２５μｓ程度と遅いがBurst  Readが可能で実効バンド幅が高い。WriteについてはProgram（書き込み）時間が２００μｓ程度、Erase（消去）時間が１ｍｓ程度と遅いが一度にProgram，Eraseできるビット数が多いため、一度に多数のビットをPage単位でProgramすることができる。このように、ＮＡＮＤ型フラッシュメモリは、高集積化が可能で実効バンド幅が高いメモリであり、メモリカード、ＵＳＢ（Universal  Serial  Bus）メモリ、携帯電話、携帯音楽プレーヤーのメモリ等で用いられており、最近ではハードディスクの置き換えとしてSSD（Solid  State  Drive）も販売されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−２１１２０９号公報
【特許文献２】特開２００８−３０００２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
読み出しの処理時間を短縮することが可能なメモリシステムおよびその制御方法を提供する。
【課題を解決するための手段】
【０００７】
本願発明の一態様によれば、データと、２段階以上の誤り訂正処理により段階毎に定義された所定のサイズの前記データである単位データ毎に生成された各段階の誤り訂正符号と、を記憶する半導体記憶部、を備える。そして、半導体記憶部から読み出されたデータと当該データに対応する前記各段階の誤り訂正符号とに基づいて誤り訂正処理を行う誤り訂正処理部と、誤り訂正処理部による誤り訂正処理により誤り訂正が不可であったか否かを示す段階毎の誤り訂正履歴情報を前記単位データ毎に記憶する誤り訂正履歴情報記憶部と、を備える。さらに、読み出し対象の単位データに対応する前記誤り訂正履歴情報が訂正不可である段階の誤り訂正処理を実施せずに次段階の誤り訂正処理を実施するよう誤り訂正処理部を制御する。
【図面の簡単な説明】
【０００８】
【図１】図１は、第１の実施の形態にかかるメモリシステムの機能構成例を示す図である。
【図２】図２は、２段階のＥＣＣ処理を行う場合のデータ構成例を示す図である。
【図３】図３は、第１の実施の形態の誤り訂正履歴管理テーブルの構成例を示す図である。
【図４】図４は、第１の実施の形態の読み出し処理手順の一例を示すフローチャートである。
【図５】図５は、Ｎが２以上の場合の読み出し処理手順の一例を示すフローチャートである。
【図６】図６は、５段階ＥＣＣ処理を実施する場合の誤り訂正履歴管理テーブルの構成例を示す図である。
【図７】図７は、第２の実施の形態の誤り訂正履歴管理テーブルの構成例を示す図である。
【図８】図８は、第２の実施の形態の読み出し処理手順の一例を示すフローチャートである。
【図９】図９は、第２の実施の形態の誤り訂正履歴管理テーブルの構成例を示す図である。
【発明を実施するための形態】
【０００９】
ＮＡＮＤ型フラッシュメモリでハードディスクの置き換えを考える際の問題の１つとして信頼性（Program／Erase，Read回数制限）の問題がある。
【００１０】
まず、Program／Erase回数について説明する。フラッシュメモリのWrite（Program／Erase）は基板−ゲート間に高電圧をかけることにより、フローティングゲートに電子を注入／放出させる。なお、２値ＮＡＮＤの場合は、Programではデータ“１”→“０”とし、Eraseではデータを“０”→“１”とすることになる。これを何回も行うとフローティングゲート周りの酸化膜が劣化し、劣化したまま長時間放置しているとフローティングゲートに注入した電子が抜けていき、書き込まれたデータが破壊されてしまう。２値ＮＡＮＤの場合には、データが“０”→“１”と変化する。すなわち、Write回数が増えると、リテンション特性が劣化する。
【００１１】
現在のＮＡＮＤ型フラッシュメモリの書き込み回数は１０5回程度と他の不揮発メモリと比べて非常に少なく、ハードディスクとして用いた場合、Program／Erase回数の制限を越えることによりデータが破壊されシステムに支障をきたす可能性がある。Program／Erase回数制限への対策としては、Block毎にErase回数をカウントし、あるしきい値を超えたErase回数の多いBlockと少ないBlockとの物理アドレス変換を行うことで、Program／Erase回数の平均化をはかるウェアレベリングが実施されている。
【００１２】
次に、ＮＡＮＤ型フラッシュメモリのReadについて説明する。ＮＡＮＤ型フラッシュメモリでは、各々のビット線に対して、選択セルのゲートには０Ｖ、非選択セルのゲートと選択ゲートには高電圧（Vread）をかけ、選択セルが導通しているかどうかで、“１”／“０”を判断する。この読み出し操作が繰り返されると、非選択セル（Block単位で見ると、Read対象以外の全Page）に高電圧が繰り返しかかることとなり、電子が酸化膜を通過してフローティングゲートに入り込み、セルのしきい値を変化させ、データを破壊してしまう。２値ＮＡＮＤの場合、データが“１”→“０”に変化する。これをリードディスターブという。
【００１３】
さらに、使用していくにつれてProgram／Eraseによる酸化膜の劣化も加わり、リードディスターブが起こる頻度は高くなってくる。現在、ＮＡＮＤ型フラッシュメモリのRead回数は１０4回程度であるが、ＮＡＮＤ型フラッシュメモリは１セルで２ビット以上の情報を記憶する多値化が進んでおり、しきい値の制御が厳しくなっていく方向にあるため、今後リードディスターブの影響がさらに深刻な問題になってくると考えられる。このリードディスターブを防ぐためには、Read回数の多いBlockを適宜再書き込みし、しきい値を元の状態に戻す（リフレッシュする）必要がある。
【００１４】
以上で述べたWrite／Readが繰り返されることに伴う影響からデータを守るためにＮＡＮＤ型フラッシュメモリを用いたメモリシステムでは誤り訂正（ＥＣＣ：Error  Check  and  Correct）技術を用いている。データの誤り数はメモリセルの疲労度に応じて多くなる。そのため最近では、書き込み／読み出しの初期には訂正能力の低いＥＣＣを実行し、次第に訂正能力の高いＥＣＣを実行していく段階的ＥＣＣを実装したシステムが提案されている。
【００１５】
一例として、２段階ＥＣＣ処理を実施する例を説明する。１段階目のＥＣＣ処理（Ｌ１ＥＣＣ処理）では、ＮＡＮＤ型フラッシュメモリへのデータの書き込み時に、書き込む最小データ単位ごとに誤り検知符号であるＣＲＣ（Cyclic  Redundancy  Check）符号と１段目（Ｌ１）のＥＣＣ符号とを付加する。Ｌ１ＥＣＣ符号としては、高速に訂正処理が実施できる符号を用い、例えばハミング符号や少数ビット訂正可能なＢＣＨ符号等を用いる。そして、２段階目のＥＣＣ処理（Ｌ２ＥＣＣ処理）では、１組以上の最小データ単位とＣＲＣ符号とに対して、Ｌ１ＥＣＣ符号より訂正能力が高いＬ２ＥＣＣ符号を付加する。Ｌ２ＥＣＣ符号としては、例えば、多ビット訂正可能なＢＣＨ符号やＬＤＰＣ（Low  Density  Parity  Check）符号等を用いる。
【００１６】
そして、読み出し時に、誤りの少ない場合（Ｌ１ＥＣＣ符号の訂正能力範囲内の場合）には高速に訂正処理が可能なＬ１ＥＣＣ符号を用いて訂正を行ない、Ｌ２ＥＣＣ符号を用いた訂正処理は実施しない。そして、Ｌ１ＥＣＣ符号により訂正が不可であった場合にＬ２ＥＣＣ符号を用いた訂正処理を行う。このような段階的ＥＣＣを実施することにより、誤りの少ない場合には高速な処理を実施し、誤りが多い場合には訂正能力の高い処理を行うことができる。
【００１７】
段階的ＥＣＣ処理では、読み出し時に、まずデータバッファにデータを読み出すと同時にＬ１ＥＣＣシンドロームを生成する。その後Ｌ１ＥＣＣ符号を用いた訂正処理を行い、Ｌ１訂正処理により正しく訂正されている（Ｌ１訂正が可であった）か否かを、ＣＲＣ符号を用いてチェックする。訂正可であった場合には、訂正後のデータを転送し、訂正不可の場合には、訂正処理前のデータを、Ｌ２ＥＣＣ処理を行う処理部へ転送し、Ｌ２ＥＣＣ処理へ移る。過去にＬ１訂正不可であったデータを再度読み出す場合にも、毎回上述のようなＬ１訂正処理を実施するため、処理時間が長いという問題があった。
【００１８】
以下に添付図面を参照して、実施形態にかかるメモリシステムおよびその制御方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１９】
（第１の実施の形態）
図１は、第１の実施の形態にかかるメモリシステムの機能構成例を示す図である。図１に示すように、本実施の形態のメモリシステム１は、メモリコントローラ２と、ＮＡＮＤフラッシュメモリ（半導体記憶部）３と、ＲＡＭ（Random  Access  Memory：一時記憶部）４と、で構成される。また、ＲＡＭ４には、誤り訂正履歴管理テーブル４１が格納されている。
【００２０】
メモリコントローラ２は、外部インターフェイス（Ｉ／Ｆ）２１と、ＲＡＭコントローラ（ＲＡＭＣ）２２と、ＣＰＵ（Central  Processing  Unit）２３と、Ｌ２ＥＣＣデコーダ２４と、ＮＡＮＤコントローラ（ＮＡＮＤＣ）２５と、で構成される。
【００２１】
ＮＡＮＤコントローラ２５は、ＤＭＡＣ（Direct  Memory  Access  Controller）５１と、制御レジスタ部５２と、ＮＡＮＤフラッシュメモリインターフェイス（ＮＡＮＤ  Ｉ／Ｆ）５３と、Ｌ１ＥＣＣシンドローム生成器５４と、データバッファ５５と、Ｌ１ＥＣＣデコーダ５６と、ＣＲＣチェッカー５７と、データバッファ５８と、セレクタ５９と、Ｌ１／Ｌ２ＥＣＣエンコーダ６０と、で構成される。
【００２２】
本実施の形態のメモリシステム１は、ＰＣ（Personal  Computer）等のホスト（図示せず）からの書き込み要求に基づいてホストから転送されるデータをＮＡＮＤフラッシュメモリ３へ書き込み、ホストから読出し要求のあった場合に、ＮＡＮＤフラッシュメモリ３に書き込まれたデータを読み出して、ホストへ転送する。
【００２３】
また、本実施の形態のメモリシステム１は、２段階のＥＣＣ処理を実施する。図２は、２段階のＥＣＣ処理を行う場合のデータ構成例を示す図である。図２の例では、書き込み最小単位データ（ここでは５１２バイトとする）に対し、Ｌ１ＥＣＣ処理でＣＲＣ符号およびＬ１ＥＣＣ符号を生成して付加する。５１２バイトの書き込みデータと対応するＣＲＣ符号およびＬ１ＥＣＣ符号でＬ１ＥＣＣ単位データを構成する。そして、Ｌ２ＥＣＣ処理では、Ｌ１ＥＣＣ単位データのうちＬ１ＥＣＣ符号を除いたデータ（書き込み最小単位データと対応するＣＲＣ符号をＬ１ＣＲＣデータとするとき、Ｎ（Ｎは１以上の整数）個のＬ１ＣＲＣデータに対してＬ２ＥＣＣ処理を行いＬ２ＥＣＣ符号を生成する。そして、Ｎ個のＬ１ＥＣＣ単位データと対応するＬ２ＥＣＣ符号とがＮＡＮＤフラッシュメモリ３へ格納される。
【００２４】
なお、図２は一例であり、書き込み最小単位データは、５１２バイトに限らず何バイトとしてもよい。また、図２では一例としてＮ＝８としているがＮは１以上であればいくつとしてもよい。
【００２５】
まず、本実施の形態の書き込み動作について説明する。ＣＰＵ２３は、Ｉ／Ｆ２１経由でホストから書き込み要求を受け取ると、ＲＡＭＣ２２に対してＩ／Ｆ２１経由でホストから転送される書き込み対象のデータをＲＡＭ４へ一時的に格納するよう指示する。これにより、書き込み対象のデータはＲＡＭ４へ一時的に格納される。
【００２６】
ＣＰＵ２３は、ＤＭＡＣ５１に対して書き込み用にＲＡＭ４からデータを読み出すよう指示し、ＤＭＡＣ５１は、ＲＡＭ４から読み出したデータをＬ１／Ｌ２ＥＣＣエンコーダ６０へ出力する。本実施の形態では、上述のとおり２段階のＥＣＣ処理を実施する。Ｌ１／Ｌ２ＥＣＣエンコーダ６０は、Ｌ１ＥＣＣ処理として、まず、書き込み最小単位データごとにＣＲＣ符号を生成し、Ｎ個のＬ１ＣＲＣデータに対してＬ２ＥＣＣ処理を実施し、Ｌ２ＥＣＣ符号を生成する。そして、Ｎ個のＬ１ＥＣＣ単位データと対応するＬ２ＥＣＣ符号とがＮＡＮＤ  Ｉ／Ｆ５３を経由してＮＡＮＤフラッシュメモリ３へ書き込まれる。
【００２７】
Ｌ１ＥＣＣ符号としては、例えばハミング符号や少数ビット訂正可能なＢＣＨ符号等の高速に訂正処理が可能な符号を用いることが望ましい。また、Ｌ２ＥＣＣ符号としては、例えば、多ヒット訂正可能なＢＣＨ符号やＬＤＰＣ符号等のようにＬ１ＥＣＣ符号より訂正能力が高い符号を用いることが望ましい。
【００２８】
次に、本実施の形態の読み出し動作について説明する。ＣＰＵ２３は、Ｉ／Ｆ２１経由でホストから読み出し要求を受け取ると、読み出し対象のデータに対応するデータのＮＡＮＤフラッシュメモリ３上のアドレスを制御レジスタ部５２へ設定する。この際、ＣＰＵ２３は、ＲＡＭ４内の誤り訂正履歴管理テーブル４１を参照し、読み出し対象のデータに対応する誤り訂正履歴情報についても同時に設定する。これにより、ＮＡＮＤＣ２５では、ＮＡＮＤフラッシュメモリ３からのデータの読み出し処理が開始される。
【００２９】
なお、本実施の形態では、Ｌ１ＥＣＣ処理を実施するためのＬ１ＥＣＣシンドローム生成器５４、データバッファ５５、Ｌ１ＥＣＣデコーダ５６、ＣＲＣチェッカー５７、データバッファ５８およびセレクタ５９が全体としてＬ１ＥＣＣ処理を実施するＬ１ＥＣＣ処理部として機能する。このＬ１ＥＣＣ処理部と、Ｌ２ＥＣＣ処理を実施するＬ２ＥＣＣデコーダ２４と、は２段階のＥＣＣ処理を行う誤り訂正処理部を構成する。２段階のＥＣＣ処理を行う誤り訂正処理部の構成は図１の例に限らず、同等の機能を有する構成であればどのような構成としてもよい。
【００３０】
図３は、本実施の形態の誤り訂正履歴管理テーブル４１の構成例を示す図である。図３の例では、誤り訂正履歴管理テーブル４１は、Ｌ１ＥＣＣ単位データを１単位とするアドレスと、当該Ｌ１ＥＣＣ単位データに対して過去にＬ１ＥＣＣ処理でＬ１ＥＣＣ訂正不可であったか否かを示すフラグであるＬ１ＥＣＣ結果（誤り訂正履歴情報）と、で構成される。ここでは、誤り訂正履歴情報として、Ｌ１ＥＣＣ結果を示すフラグを用いる例を示している。Ｌ１ＥＣＣ結果のフラグは１ビットの値とし、過去にＬ１ＥＣＣ処理でＬ１ＥＣＣ訂正不可であった場合に“１”が設定され、それ以外の場合（過去にＬ１ＥＣＣ処理でＬ１ＥＣＣ訂正可またはエラー無しでであった場合、または過去に読み出し処理がされていない場合）は“０”が設定される。なお、Ｌ１ＥＣＣ結果のフラグの初期値は“０”とし、書き戻しが行なわれた場合にはフラグを初期値の“０”に戻す。但し、後天性のカラム不良などデータリフレッシュによらず誤りが生じる場合もあるので、そのような場合は“０”にリセットしなくてもよい。
【００３１】
図４は、本実施の形態の読み出し処理手順の一例を示すフローチャートである。図４は、Ｌ２単位データが１つのＬ１単位データで構成される場合（Ｎ＝１の場合）の、Ｌ１単位データごとの読み出し処理手順を示している。
【００３２】
制御レジスタ部５２は、読み出し対象として設定されたアドレスに対応するＬ１単位データについての誤り訂正履歴情報を参照し、過去にＬ１ＥＣＣ訂正不可であった（すなわちＬ１ＥＣＣ結果のフラグが“１”）か否かを判断する（ステップＳ１）。過去にＬ１ＥＣＣ訂正不可でなかった場合は、制御レジスタ部５２は、ＮＡＮＤ  Ｉ／Ｆ５３に対して、ＮＡＮＤフラッシュメモリ３から当該Ｌ１単位データをデータバッファ５５へ読み出すよう指示し、同時に読み出したデータをＬ１ＥＣＣシンドローム生成器５４へ入力するよう指示する（ステップＳ２）。Ｌ１ＥＣＣシンドローム生成器５４は、読み出されたＬ１単位データが入力されるとシンドローム計算を実施する。
【００３３】
次に、Ｌ１ＥＣＣシンドローム生成器５４は、シンドローム計算により入力されたＬ１単位データに誤りがない（シンドローム＝０）か否かを判断する（ステップＳ３）。誤りがある場合（ステップＳ３  Ｎｏ）、Ｌ１ＥＣＣシンドローム生成部５４は、Ｌ１ＥＣＣデコーダ５６へデータを渡し、Ｌ１ＥＣＣデコーダ５６はデータに対して誤り訂正処理を実施せずにＣＲＣチェッカー５７へ出力し、ＣＲＣチェッカー５７が、入力されたデータに対してＣＲＣ符号を用いてＣＲＣ検知を実施するとともに入力されたデータ（誤り訂正処理がされていないＬ１単位データ）をデータバッファ５８へ転送する（ステップＳ４）。
【００３４】
そして、ＣＲＣチェッカー５７はＣＲＣ検知結果がエラー無しであったか否かを判断する（ステップＳ５）。エラー無し（ステップＳ５  Ｙｅｓ）の場合、ＳＲＣチェッカー５７は、データバッファ５８のデータを読み出すようセレクタ５９へ指示し、セレクタ５９は指示に基づいてデータバッファ５８から誤り訂正後のデータを読み出してＤＡＭＣ５１へ渡し、ＤＭＡＣ５１がセレクタ５９から出力されたデータをＲＡＭＣ２２経由でＲＡＭ４へ転送する（ステップＳ６）。ＲＡＭに転送されたデータは、ＣＰＵ２３の指示により、外部のホスト等でＩ／Ｆ２１経由で転送される（ステップＳ７）。
【００３５】
また、ステップＳ３でシンドローム計算によりＬ１単位データに誤りがないと判断した（ステップＳ３  Ｙｅｓ）場合、Ｌ１ＥＣＣデコーダ５６へ当該Ｌ１単位データを入力し、Ｌ１ＥＣＣデコーダ５６は入力されたＬ１単位データに対してＬ１ＥＣＣ符号を用いた誤り訂正処理を行い、ＣＲＣチェッカー５７が、誤り訂正処理後のデータに対してＣＲＣ符号を用いてＣＲＣ検知を実施するとともに誤り訂正処理後のデータをデータバッファ５８へ格納し（ステップＳ８）、ステップＳ５へ進む。
【００３６】
また、ステップＳ５でＣＲＣ検知結果がエラー有りであった（ステップＳ５  Ｎｏ）場合、ＣＲＣチェッカー５７は、データバッファ５５のデータを読み出すようセレクタ５９へ指示し、セレクタ５９は指示に基づいてデータバッファ５５から誤り訂正前のデータを読み出してＤＡＭＣ５１へ渡し、ＤＭＡＣ５１がセレクタ５９から出力されたデータをＲＡＭＣ２２経由でＲＡＭ４へ転送する（ステップＳ９）。そして、ＣＲＣチェッカー５７のＬ１ＥＣＣ処理による誤り訂正が不可であった結果を受けて、ＮＡＮＤＣ２５がＣＰＵ２３へその旨を通知し、ＣＰＵ２３は、誤り訂正履歴管理テーブル４１の当該Ｌ２単位データに対応するＬ１ＥＣＣ結果のフラグを“１”に設定する（ステップＳ１０）。そして、ＣＰＵ２３は、Ｌ２ＥＣＣデコーダ２４へ当該Ｌ１単位データを含むＬ２単位データに対するＬ２ＥＣＣ処理の開始を指示する（ステップＳ１１）。
【００３７】
Ｌ２ＥＣＣデコーダ２４は、当該Ｌ１単位データを含むＬ２単位データをＲＡＭ４から読み出してＬ２ＥＣＣ処理を実施し、実施後にＬ１ＣＲＣ符号を用いてＣＲＣ検知を行い、ＣＲＣ検知結果がエラー無しであったか否かを判断する（ステップＳ１２）。ＣＲＣ検知結果がエラー無しであった（ステップＳ１２  Ｙｅｓ）場合は、Ｌ２ＥＣＣ処理後のデータをＲＡＭ４へ一旦格納した後に、外部へ転送し（ステップＳ１３）、処理を終了する。ＣＲＣ検知結果がエラー有りであった（ステップＳ１２  Ｎｏ）場合は、読み出しエラーとする（ステップＳ１４）。
【００３８】
一方、ステップＳ１で読み出し対象として設定されたアドレスに対応するＬ１単位データについての誤り訂正履歴情報を参照し、過去にＬ１ＥＣＣ訂正不可であった（すなわちＬ１ＥＣＣ結果のフラグが“１”）と判断した（ステップＳ１  Ｙｅｓ）場合、制御レジスタ部５２は、ＮＡＮＤ  Ｉ／Ｆ５３に対して、ＮＡＮＤフラッシュメモリ３から当該Ｌ１単位データを読み出しＤＭＡＣ５１へ入力するよう指示するとともにＬ２ＥＣＣデコーダ２４へ当該Ｌ１単位データを含むＬ２単位データのＬ２ＥＣＣ処理の開始を指示し、ＤＭＡＣ５１はＮＡＮＤ  Ｉ／Ｆ５３から入力されたデータをＲＡＭ４へ転送し（ステップＳ１５）、ステップＳ１１へ進む。
【００３９】
以上のように、本実施の形態では、過去にＬ１ＥＣＣ訂正不可であったＬ１単位データに対しては、Ｌ１ＥＣＣデコード（Ｌ１ＥＣＣ処理）を実施せずに、直ちにＬ２ＥＣＣ処理へ移行する。これにより、読み出し処理の高速化を実現することができる。なお、上記の例では、誤りの無いデータおよびＬ１ＥＣＣにより誤りを訂正したデータを外部へ転送する際に、一旦ＲＡＭ４へ格納しているが、ＲＡＭ４へ格納せず、直接外部へ転送してもよい。また、ステップＳ９、ステップＳ１５で、ＤＭＡＣ５１は直接Ｌ２ＥＣＣデコーダ２４へデータを出力してもよい。
【００４０】
次に、Ｌ２単位データが２つ以上のＬ１単位データで構成される場合（Ｎが２以上の場合）の処理を説明する。ＣＰＵ２３は、Ｎ＝１と同様に、Ｉ／Ｆ２１経由でホストから読み出し要求を受け取ると、読み出し対象のデータに対応するデータのＮＡＮＤフラッシュメモリ３上のアドレスを制御レジスタ部５２へ設定し、誤り訂正履歴管理テーブル４１を参照して読み出し対象のデータに対応する誤り訂正履歴情報についても制御レジスタ部５２へ設定する。この際、ＣＰＵ２３は、読み出し対象のＬ１単位データを含むＬ２単位データを構成する他のＬ１単位データについてもそのＮＡＮＤフラッシュメモリ３上のアドレスと誤り訂正履歴情報を制御レジスタ部５２へ設定しておく。
【００４１】
例えば、Ｎ＝２とし、アドレス“００００”と“０００１”のＬ１単位データでＬ２単位データ＃１が構成され、アドレス“０００２”と“０００３”のＬ１単位データでＬ２単位データ＃２が構成されているとする。この場合に、アドレス“００００”〜“０００２”の３つのＬ１単位データを読み出すとすると、ＣＰＵ２３は、アドレス“００００”〜“０００２”のＬ１単位データだけでなく、読み出し対象でないアドレス“０００３”のＬ１単位データについても制御レジスタ部５２へアドレスと誤り訂正履歴情報を設定しておく。ただし、アドレス“０００３”のＬ１単位データについてはＬ２処理を行う場合に読み出すデータであるため、読み出し対象のアドレス“００００”〜“０００２”の３つのＬ１単位データとは区別して設定しておく。例えば、読み出し対象のＬ１単位データとＬ２処理用のＬ１単位データとは、別のテーブルとして制御レジスタ部５２へ設定しておき、また、読み出し対象のＬ１単位データとＬ２処理用のＬ１単位データとを対応づけて設定しておく。
【００４２】
図５は、Ｎが２以上の場合の読み出し処理手順の一例を示すフローチャートである。図５に例示した処理を読み出し対象のＬ１単位データごとに実施する。制御レジスタ部５２は、まず、読み出し対象として設定されたアドレスに対応するＬ１単位データ（または後述のＬ２用読み出し対象のＬ１単位データ）についての誤り訂正履歴情報を参照し、過去にＬ１ＥＣＣ訂正不可であった（すなわちＬ１ＥＣＣ結果のフラグが“１”）か否かを判断する（ステップＳ２１）。
【００４３】
過去にＬ１ＥＣＣ訂正不可でなかった（ステップＳ２１  Ｎｏ）場合は、図４と同様のステップＳ２〜ステップＳ１０を実施する。ただし、図５の場合は、ステップＳ６の後、ＣＰＵ２３（または制御レジスタ部５２）が、Ｌ２ＥＣＣ処理が開始済みであるか（処理対象のＬ１単位データを含むＬ２単位データ内にＬ２処理対象となったＬ１単位データが無い）否かを判断する（ステップＳ２２）。そして、Ｌ２ＥＣＣ処理が開始済みで無い（ステップＳ２２  Ｙｅｓ）場合は、ステップＳ７へ進む。
【００４４】
一方、過去にＬ１ＥＣＣ訂正不可であった（ステップＳ２１  Ｙｅｓ）場合は、制御レジスタ部５２は、ＮＡＮＤフラッシュメモリ３から当該Ｌ１単位データを読み出しＤＭＡＣ５１へ入力するよう指示するとともにＬ２ＥＣＣデコーダ２４へ当該Ｌ１単位データを含むＬ２単位データのＬ２ＥＣＣ処理の開始を指示し、ＤＭＡＣ５１はＮＡＮＤ  Ｉ／Ｆ５３から入力されたデータをＲＡＭ４へ転送する（ステップＳ２３）。または、制御レジスタ部５２がＣＰＵ２３経由でＬ２ＥＣＣデコーダ２４へ当該Ｌ１単位データ（読み出し対象のＬ１単位データ）を含むＬ２単位データのＬ２ＥＣＣ処理の開始を指示するようにしてもよい。
【００４５】
次に、Ｌ２ＥＣＣデコーダ２４は、Ｌ２ＥＣＣ処理対象のＬ２単位データがそろっているか（ＲＡＭ４上に存在するか）否かを判断する（ステップＳ２４）。Ｌ２ＥＣＣ処理対象のＬ２単位データがそろっている（ステップＳ２４  Ｙｅｓ）場合は、図４と同様にステップＳ１１〜ステップＳ１４を実施する。
【００４６】
Ｌ２ＥＣＣ処理対象のＬ２単位データがそろっていない（ステップＳ２４  Ｎｏ）場合は、当該Ｌ１単位データ（読み出し処理中のＬ１単位データ）を含むＬ２単位データは全て読み出し対象であるか否かを判断する（ステップＳ２５）。読み出し処理中のＬ１単位データを含むＬ２単位データは全て読み出し対象である（ステップＳ２５  Ｙｅｓ）場合、他のＬ１単位データが読み出し処理を実施され、Ｌ２ＥＣＣ処理へ送られるまで待機する（ステップＳ２６）。
【００４７】
ステップＳ２５で読み出し処理中のＬ１単位データを含むＬ２単位データの一部が読み出し対象でない（ステップＳ２５  Ｎｏ）場合、処理対象のＬ２単位データ内の読み出し対象のＬ１単位データ以外の読み出し済みでないＬ１単位データをＬ２用読み出しデータとしてステップＳ２１へ戻る。
【００４８】
また、ステップＳ２２で、Ｌ２ＥＣＣ処理が開始済みで有ると判断した場合（ステップＳ２２  Ｎｏ）は、ステップＳ２４へ進む。
【００４９】
その後、ステップＳ２６で待機している場合には、次のＬ１単位データについて同様に図５に示した処理が実施され、ステップＳ２２を経由してステップＳ２４が実施され、Ｌ２単位データがそろった時点でＬ２ＥＣＣ処理が実施される。
【００５０】
なお、図５の例でも図４の例で説明したように、誤りの無いデータおよびＬ１ＥＣＣにより誤りを訂正したデータを外部へ転送する際に、一旦ＲＡＭ４へ格納しているが、ＲＡＭ４へ格納せず、直接外部へ転送してもよい。また、Ｌ２ＥＣＣデコーダ２４がバッファを保持し、ステップＳ９，ステップＳ２３で、ＤＭＡＣ５１は直接Ｌ２ＥＣＣデコーダ２４へデータを出力してもよい。
【００５１】
以上２段階のＥＣＣ処理を実施する場合について説明したが、３段階以上のＥＣＣ処理を実施する場合にも同様に、誤り訂正履歴情報を用いて処理の高速化を実現することができる。図６は、５段階ＥＣＣ処理を実施する場合の誤り訂正履歴管理テーブルの構成例を示す図である。図６の例では、誤り訂正履歴情報としてＬ１単位データごとの４ビットのフラグを用いている。
【００５２】
例えば、この４ビットのフラグの下位ビットから順にＬ１ＥＣＣ処理、Ｌ２ＥＣＣ処理、Ｌ３ＥＣＣ処理、Ｌ４ＥＣＣ処理で、それぞれ訂正不可であったか否かを示すとする。そして、例えば、初期値としては全ビットを“０”に設定しておき、各段階の処理において訂正不可であった場合には対応するビットを“１”に設定する。なお、図６では、Ｌ１単位データごとに４ビットのフラグを用いる例を説明したが、Ｌ１単位データとＬ２以上の単位データのサイズが異なる場合には、各段階のデータ単位ごとにフラグを保持するようにしてもよい。例えば、Ｌ２単位データが８つのＬ１単位データで構成される場合、Ｌ２単位データごとにフラグを保持する場合には、Ｌ２ＥＣＣ処理のフフラグは８つのＬ１単位データに対して１ビットの情報を保持すればよく、保持する情報量を減らすことができる。
【００５３】
３段階以上のＥＣＣ処理を行う場合もＬ１ＥＣＣ，Ｌ２ＥＣＣ、…と段階順に処理を行っていく。従って、各段階のＥＣＣ処理で、図６に例示した誤り訂正履歴管理テーブルを用いて当該段階のＥＣＣ処理で過去に訂正不可であったデータについては、当該段階のＥＣＣ処理を実施せずに次の段階のＥＣＣ処理を実施するようにすればよい。
【００５４】
なお、本実施の形態では、誤り訂正履歴管理テーブル４１をＲＡＭ４内に保持するようにしたが、これに限らず、ＮＡＮＤフラッシュメモリ３内やＮＡＮＤＣ５２内等の他の場所に保持するようにしてもよい。例えば、ＲＡＭ４が不揮発性ＲＡＭの場合には電源ＯＦＦしても管理情報は残るが、揮発性ＲＡＭの場合には電源ＯＦＦすると誤り訂正履歴管理テーブル４１が消えてしまうことになる。したがって、電源ＯＮの間に誤り訂正履歴管理テーブル４１をＲＡＭ４に格納しておき、電源ＯＦＦ時に誤り訂正履歴管理テーブル４１をＮＡＮＤフラッシュメモリ３の空き領域に保存するようにしてもよい。この場合、電源ＯＮとなった場合には、毎回誤り訂正履歴管理テーブル４１をＲＡＭ４上に読み出しておく。ただし、この誤り訂正履歴管理テーブル４１は消えてしまっても動作保証に影響ないので、ＲＡＭ４が揮発性ＲＡＭの場合でも、ＮＡＮＤフラッシュメモリ３への書き込み負担を減らすためにＮＡＮＤフラッシュメモリ３への保存を行わなくてもよい。
【００５５】
また、本実施の形態では、Ｌ２用読み出しＬ１単位データ（自身は読み出し対象ではなく、読み出し対象のＬ１単位データのＬ２ＥＣＣ処理を行うために読み出されるデータ）についても、読み出し対象の（外部へ転送する）Ｌ１単位データと同様に過去のＬ１ＥＣＣ処理で訂正不可でなかった場合には、Ｌ１ＥＣＣデコードを行うようにしているが、Ｌ２用読み出しＬ１単位データについてはＬ１ＥＣＣデコードを行わず、ＮＡＮＤフラッシュメモリ３から読み出したデータをそのままＬ２ＥＣＣ処理へ渡すようにしてもよい。この場合、Ｌ２用読み出しＬ１単位データについてはＬ１ＥＣＣ処理で訂正できる誤りを訂正しないままＬ２ＥＣＣ処理へ入力されることになるが、読み出し処理時間をさらに短縮をすることができる。また、Ｌ１ＥＣＣ処理において誤り訂正が行われたか否か（Ｌ１ＥＣＣ処理の前に誤りがあったか否か）を示す情報を、Ｌ１単位データごとに誤り訂正履歴管理テーブル４１に保持しておき、過去のＬ１ＥＣＣ処理において誤り訂正が行われなかったＬ２用読み出しデータをそのままＬ２ＥＣＣ処理へ渡し、過去にＬ１ＥＣＣ処理において誤り訂正が行われたＬ２用読み出しデータはＬ１ＥＣＣ処理を実施するようにしてもよい。
【００５６】
なお、本実施の形態では、制御レジスタ部５２が誤り訂正履歴情報に基づいて、Ｌ１ＥＣＣ処理を実施するか否かの判断することにより誤り訂正処理を制御する誤り訂正処理制御部としての機能を有することとしたが、制御レジスタ部５２とは別に誤り訂正処理制御部を備えるようにしてもよい。
【００５７】
以上のように、本実施の形態では、過去に訂正不可であったか否かの情報を誤り訂正履歴情報として保持し、各段階のＥＣＣ処理では、当該段階のＥＣＣ処理で過去に訂正不可であったデータについては、当該段階のＥＣＣ処理を実施せずに次の段階のＥＣＣ処理を実施するようにした。そのため、全てのデータについて、毎回Ｌ１ＥＣＣ処理を実施する場合に比べ、読み出しの処理時間を短縮することができる。
【００５８】
（第２の実施の形態）
図７は、第２の実施の形態にかかるメモリシステム１が保持する誤り訂正履歴管理テーブル４１の構成例を示す図である。本実施の形態のメモリシステム１の構成は第１の実施の形態のメモリシステム１の構成と同様である。第１の実施の形態と同様の機能を有する構成要素は、第１の実施の形態と同一の符号を付して説明を省略する。
【００５９】
図７に示すように、本実施の形態の誤り訂正履歴管理テーブル４１は、Ｌ１単位データ毎の、第１の実施の形態と同様のＬ１ＥＣＣ結果のフラグと、Ｌ１ＥＣＣ訂正ビットと、で構成される。本実施の形態では、誤り訂正履歴情報として、過去のＬ１ＥＣＣ結果で誤り訂正不可であったか否かの情報に加えて、過去のＬ１ＥＣＣ処理において訂正されたビット数をＬ１ＥＣＣ訂正ビットとして保持する。
【００６０】
図８は、本実施の形態の読み出し処理手順の一例を示すフローチャートである。図８は、Ｌ２単位データが１つのＬ１単位データで構成される場合（Ｎ＝１の場合）の、Ｌ１単位データごとの読み出し処理手順を示している。本実施の形態のデータの書き込み動作は、第１の実施の形態と同様である。また、本実施の形態のデータの読み出し時には、ＣＰＵ２３は、誤り訂正履歴管理テーブル４１を参照して、読み出し対象のデータのアドレスとこれらのデータに対応する誤り訂正履歴情報とを制御レジスタ部５２へ設定する。また、読み出し対象のデータを含むＬ２単位データ内のデータに対応する誤り訂正履歴情報についても制御レジスタ部５２へ設定する。
【００６１】
本実施の形態では、第１の実施の形態と同様にステップＳ１を実施し、過去にＬ１ＥＣＣ訂正不可でなかった場合（ステップＳ１  Ｎｏ）、制御レジスタ部５２は、誤り訂正情報のＬ１ＥＣＣ訂正ビットを参照し、読み出し処理中のＬ１単位データについて過去のＬ１ＥＣＣ処理で訂正されたビット数（Ｌ１ＥＣＣ訂正ビット）が、Ｌ１ＥＣＣ処理で訂正可能な最大のビット数（Ｍａｘビット）であるか否かを判断する（ステップＳ３１）。例えば、誤り訂正情報のＬ１ＥＣＣ訂正ビットが３ビットである場合には、誤り訂正情報のＬ１ＥＣＣ訂正ビットが３の場合に最大のビット数訂正済みであると判断し、誤り訂正情報のＬ１ＥＣＣ訂正ビットが２ビット以下の場合には、最大のビット数訂正済みでないと判断する。
【００６２】
Ｌ１ＥＣＣ処理で訂正可能な最大のビット数訂正済みであると判断した（ステップＳ３１  Ｙｅｓ）場合は、ステップＳ２へ進むと同時に、ステップＳ１１も実施する。すなわち、Ｌ１ＥＣＣ処理を実施しつつ、Ｌ２ＥＣＣ処理も開始する。Ｌ１ＥＣＣ処理で訂正可能な最大のビット数訂正済みでないと判断した（ステップＳ３１  Ｎｏ）場合は、ステップＳ２に進む。以上述べた以外の本実施の形態の読み出し処理手順は、図４で示した第１の実施の形態と同様である。ただし、ステップＳ１０ａでは、Ｌ２ＥＣＣ処理が既に開始済みでない場合にステップＳ１１へ進み、開始済みの場合には、そのまま処理を終了する。また、ステップＳ６ａでは、データバッファ５８のデータをＲＡＭ４へ転送するとともに、ＣＲＣチェッカー５７は、Ｌ１ＥＣＣ処理により訂正されたビット数をＣＰＵ２３へ通知し、ＣＰＵ２３が通知されたビット数に基づいて誤り訂正履歴管理テーブル４１を更新する。なお、ＣＲＣチェッカー５７は、Ｌ１ＥＣＣデコーダ５６からＬ１ＥＣＣ処理により訂正されたビット数を通知されているとする。
【００６３】
過去にＬ１ＥＣＣ処理で、訂正可能な最大のビット数が訂正された場合、その次のＬ１ＥＣＣ処理では、そのＬ１単位データは誤り箇所が増え訂正不可となる可能性が高い。本実施の形態では、過去にＬ１ＥＣＣ処理で訂正可能な最大のビット数が訂正された場合には、Ｌ１ＥＣＣ処理と並行してＬ２ＥＣＣ処理を実施することにより、Ｌ１ＥＣＣ処理で訂正不可となった場合の読み出し処理の時間を短縮することができる。
【００６４】
図８では、Ｌ２単位データが１つのＬ１単位データを含む場合（Ｎ＝１の場合）を示したが、図５で説明したステップＳ２１の次に、同様に、過去にＬ１ＥＣＣ処理で訂正可能な最大のビット数訂正済みであったか否かの判断を行い、最大のビット数訂正済みの場合にはステップＳ２３へ進むＬ２ＥＣＣ処理を開始することにより、Ｎが２以上の場合にも図８の例と同様に読み出し時間を短縮することができる。３段階以上のＥＣＣ処理を実施する場合にも、同様の処理を実施することにより読み出し時間を短縮することができる。以上述べた以外の本実施の形態の動作は、第１の実施の形態と同様である。
【００６５】
なお、本実施の形態では、過去にＬ１ＥＣＣ処理において訂正可能な最大なビット数が訂正されている場合にＬ２ＥＣＣ処理を並行して実施するようにしたが、Ｌ２ＥＣＣ処理を並行して実施するか否かの判断基準に用いるしきい値は、訂正可能な最大なビット数に限らず、訂正可能な最大なビット数より１ビット少ないビット数とする等、他のしきい値を設定してもよい。
【００６６】
以上のように、本実施の形態では、過去にＬ１ＥＣＣ処理で訂正不可であったか否かの情報に加えて、過去にＬ１ＥＣＣ処理で訂正されたビット数を保持するようにした。そして、過去にＬ１ＥＣＣ処理において訂正可能な最大なビット数が訂正されているデータについては、次の段階のＥＣＣ処理を同時に開始するようにした。そのため、第１の実施の形態に比べさらに読み出し処理時間を短縮することができる。
【００６７】
（第３の実施の形態）
図９は、第３の実施の形態にかかるメモリシステム１が保持する誤り訂正履歴管理テーブル４１の構成例を示す図である。本実施の形態のメモリシステム１の構成は第１の実施の形態のメモリシステム１の構成と同様である。第１の実施の形態と同様の機能を有する構成要素は、第１の実施の形態と同一の符号を付して説明を省略する。
【００６８】
図７に示すように、本実施の形態の誤り訂正履歴管理テーブル４１は、Ｌ１単位データ毎の、第１の実施の形態と同様のＬ１ＥＣＣ結果のフラグと、Ｌ１ＥＣＣ訂正ビットと、Ｒｅａｄ回数／Block（１Blockあたりの読み出しが行われた回数）と、で構成される。Ｌ１ＥＣＣ訂正ビットについては、第２の実施の形態と同様である。
【００６９】
第２の実施の形態では、過去にＬ１ＥＣＣ処理において訂正可能な最大なビット数に加え、さらに、Ｒｅａｄ回数／Blockを考慮して、Ｌ１訂正不可となる可能性が高いＬ１単位データであるか否かを判断する。リードディスターブは、非選択セル（Block単位では、読み出し対象以外の全ページのセル）に高電圧が繰り返しかかることにより生じる。従って、リードディスターブが生じる可能性は、非選択セルとなった回数が多いほど高くなるが、ここでは非選択セルとなった回数の代わりに１Blockあたりの読み出し回数を近似的に用いる。これにより、複雑な処理を必要とせずにリードディスターブの生じる可能性の高さを予想することができる。なお、Ｒｅａｄ回数／Blockは、Block単位で管理しており、図９に示したアドレス００００〜０００３は、同一Block内のアドレスである。また、Ｒｅａｄ回数／Blockの代わりに、Ｌ１単位データごとの非選択セルとなった回数を用いてもよい。
【００７０】
本実施の形態では、第２の実施の形態のステップＳ３１の判断において、過去にＬ１ＥＣＣ処理で、訂正可能な最大のビット数が訂正されたか否かだけでなく、Ｒｅａｄ回数／Blockが所定のしきい値を超えたか否かについても判断する。そして、過去に訂正可能な最大のビット数が訂正され、かつＲｅａｄ回数／Blockが所定のしきい値を超えた場合にＬ２ＥＣＣ処理を並行して実施するようにする。これにより、第２の実施の形態に比べ、Ｌ１ＥＣＣ処理で訂正不可となるか否かの予測精度が向上し、Ｌ２ＥＣＣ処理を並行して実施する回数を第２の実施の形態に比べ低減することができる。
【００７１】
また、Ｒｅａｄ回数／Blockの代わりに、Ｗｒｉｔｅ回数／Blockを用いてもよいし、Ｒｅａｄ回数／BlockとＷｒｉｔｅ回数／Blockの両方を用いてもよい。Ｒｅａｄ回数／BlockとＷｒｉｔｅ回数／Blockの両方を用いる場合には、過去に訂正可能な最大のビット数が訂正されたか否かの判断に加え、Ｒｅａｄ回数／BlockとＷｒｉｔｅ回数／Blockの合計が所定のしきい値を超えるか否かを判断基準としてもよいし、どちらか一方が所定のしきい値を超えたか否かを判断基準としてもよい。
【００７２】
以上のように、本実施の形態では、第２の実施の形態のステップＳ３１の判断において、過去にＬ１ＥＣＣ処理で、訂正可能な最大のビット数が訂正されたか否かだけでなく、Ｒｅａｄ回数／Blockが所定のしきい値を超えたか否かについても判断するようにした。そのため、Ｌ１ＥＣＣ処理で訂正不可となるか否かの予測精度が向上し、Ｌ２ＥＣＣ処理を並行して実施する回数を第２の実施の形態に比べ低減することができる。
【００７３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７４】
１  メモリシステム、２  メモリコントローラ、３  ＮＡＮＤフラッシュメモリ、４  ＲＡＭ、２４  Ｌ２ＥＣＣデコーダ、５２  制御レジスタ部５２、５６  Ｌ１ＥＣＣデコーダ、５７  ＣＲＣチェッカー、４１  誤り訂正履歴管理テーブル。
【図１】
2012137994.tif 000003
【図２】
2012137994.tif 000004
【図３】
2012137994.tif 000005
【図４】
2012137994.tif 000006
【図５】
2012137994.tif 000007
【図６】
2012137994.tif 000008
【図７】
2012137994.tif 000009
【図８】
2012137994.tif 000010
【図９】
2012137994.tif 000011