(57)【特許請求の範囲】
【請求項１】
再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御装置であって、
前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、
前記不揮発性半導体メモリに対するリード回数をブロック単位でカウントするリードカウンタと、
前記リードカウンタを参照し、リード回数がリード回数閾値を上回る検査対象ブロックが存在するか否かを判定する検査対象判定部と、
前記検査対象ブロックが検出された場合、前記検査対象ブロックに含まれる各ページに対してエラー検出処理を行い、データの再書き込み処理を実行するべきか否かを判定するためのエラー閾値を超えるエラーが検出されたエラーページが存在するか否かを検査する検査部と、
前記検査部によって前記エラーページが検出された場合、前記検査対象ブロックに対してデータの再書き込み処理を実行する再書き込み制御部と、
前記再書き込み処理終了後、前記検査対象ブロックのリード回数を初期化する初期化部と、
を備え、
前記検査部は、前記検査対象ブロックの各ページをエラー検出回路の検出処理単位で区分し、各区分のエラー検出値の最大値をページ最大エラー値として設定し、前記ページ最大エラー値が前記エラー閾値を超える場合、当該ページを前記エラーページとして判定するメモリアクセス制御装置。
【請求項２】
請求項１に記載のメモリアクセス制御装置であって、
前記検査部は、
前記検査対象ブロック内に前記エラーページが検出されない場合、前記検査対象ブロックに含まれる各ページの前記ページ最大エラー値を比較し、前記ページ最大エラー値の最大値をブロック最大エラー値として設定する最大値設定部、
を含み、
前記初期化部は、
前記ブロック最大エラー値の設定処理の終了後、前記ブロック最大エラー値に基づいて第１補正値を算出し、前記第１補正値に基づいて、前記検査対象ブロックのリード回数の初期化値を補正する第１補正部、
を含むメモリアクセス制御装置。
【請求項３】
請求項２に記載のメモリアクセス制御装置であって、
前記第１補正部は、前記エラー閾値に対する前記ブロック最大エラー値の割合をエラー進行割合とすると、前記リード回数閾値に前記エラー進行割合を乗算した値を当該ブロックのリード回数の初期化値に加算するメモリアクセス制御装置。
【請求項４】
請求項２または請求項３に記載のメモリアクセス制御装置であって、
前記初期化部は、
前記検査対象ブロックに含まれるページ数を当該ブロックのリード回数の初期化値に加算する第２補正部、
を含むメモリアクセス制御装置。
【請求項５】
請求項１ないし請求項４のいずれかに記載のメモリアクセス制御装置であって、さらに、
前記不揮発性半導体メモリに対する消去回数をブロック単位でカウントする消去カウンタと、
前記再書き込み処理終了後、前記消去カウンタに記録されている前記検査対象ブロックの消去回数を１だけインクリメントする消去回数加算部と、
を備え、
前記初期化部は、
前記再書き込み処理終了後、前記検査対象ブロックの消去回数に基づいて第３補正値を算出し、前記第３補正値に基づいて、前記検査対象ブロックのリード回数の前記初期化値を補正する第３補正部、
を含むメモリアクセス制御装置。
【請求項６】
請求項５に記載のメモリアクセス制御装置であって、
前記第３補正部は、前記検査対象ブロックの消去回数を所定ビットだけ左シフトした値を、当該ブロックのリード回数の初期化値に加算するメモリアクセス制御装置。
【請求項７】
再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御装置であって、
前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、
前記不揮発性半導体メモリに対するリード回数をブロック単位でカウントするリードカウンタと、
前記リードカウンタを参照し、リード回数がリード回数閾値を上回る検査対象ブロックが存在するか否かを判定する検査対象判定部と、
前記検査対象ブロックが検出された場合、前記検査対象ブロックに含まれる各ページに対してエラー検出処理を行い、エラー閾値を超えるエラーが検出されたエラーページが存在するか否かを検査する検査部と、
前記検査部によって前記エラーページが検出された場合、前記検査対象ブロックに対してデータの再書き込み処理を実行する再書き込み制御部と、
前記再書き込み処理終了後、前記検査対象ブロックのリード回数を初期化する初期化部と、
前記不揮発性半導体メモリに対する消去回数をブロック単位でカウントする消去カウンタと、
前記再書き込み処理終了後、前記消去カウンタに記録されている前記検査対象ブロックの消去回数を１だけインクリメントする消去回数加算部と、
を備え、
前記初期化部は、
前記再書き込み処理終了後、前記検査対象ブロックの消去回数に基づいて第３補正値を算出し、前記第３補正値に基づいて、前記検査対象ブロックのリード回数の前記初期化値を補正する第３補正部、
を含むメモリアクセス制御装置。
【請求項８】
再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御装置であって、
前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、
前記不揮発性半導体メモリに対するリード回数を複数のブロックを含むバンク単位でカウントするリードカウンタと、
前記リードカウンタを参照し、リード回数がリード回数閾値を上回る検査対象バンクが存在するか否かを判定する検査対象判定部と、
前記検査対象バンクが検出された場合、前記検査対象バンクに含まれる各ページに対してエラー検出処理を行い、データの再書き込み処理を実行するべきか否かを判定するためのエラー閾値を超えるエラーが検出されたエラーページが存在するか否かを検査する検査部と、
前記検査部によって前記エラーページが検出された場合、前記検査対象バンクに対してデータの再書き込み処理を実行する再書き込み制御部と、
前記再書き込み処理終了後、前記検査対象バンクの読み出し回数を初期化する初期化部と、
を備え、
前記検査部は、前記検査対象バンクの各ページをエラー検出回路の検出処理単位で区分し、各区分のエラー検出値の最大値をページ最大エラー値として設定し、前記ページ最大エラー値が前記エラー閾値を超える場合、当該ページを前記エラーページとして判定するメモリアクセス制御装置。
【請求項９】
請求項８に記載のメモリアクセス制御装置であって、
前記検査部は、
前記検査対象バンク内に前記エラーページが検出されない場合、前記検査対象バンクに含まれる各ページの前記ページ最大エラー値を比較し、前記ページ最大エラー値の最大値をバンク最大エラー値として設定する最大値設定部、
を含み、
前記初期化部は、
前記バンク最大エラー値の設定処理の終了後、前記バンク最大エラー値に基づいて第１補正値を算出し、前記第１補正値に基づいて、前記検査対象バンクのリード回数の初期化値を補正する第１補正部、
を含むメモリアクセス制御装置。
【請求項１０】
請求項９に記載のメモリアクセス制御装置であって、
前記第１補正部は、前記エラー閾値に対する前記バンク最大エラー値の割合をエラー進行割合とすると、前記リード回数閾値に前記エラー進行割合を乗算した値を当該バンクのリード回数の初期化値に加算するメモリアクセス制御装置。
【請求項１１】
請求項９または請求項１０に記載のメモリアクセス制御装置であって、
前記初期化部は、
前記検査対象バンクに含まれるページ数を、当該バンクのリード回数の初期化値に加算する第２補正部、
を含むメモリアクセス制御装置。
【請求項１２】
請求項８ないし請求項１１のいずれかに記載のメモリアクセス制御装置であって、さらに、
前記不揮発性半導体メモリに対する消去回数をバンク単位でカウントする消去カウンタと、
前記再書き込み処理終了後、前記消去カウンタに記録されている前記検査対象バンクの消去回数を１だけインクリメントする消去回数加算部と、
を備え、
前記初期化部は、
前記再書き込み処理終了後、前記検査対象バンクの消去回数に基づいて第３補正値を算出し、前記第３補正値に基づいて、前記検査対象バンクのリード回数の初期化値を補正する第３補正部、
を含むメモリアクセス制御装置。
【請求項１３】
請求項１２に記載のメモリアクセス制御装置であって、
前記第３補正部は、前記検査対象バンクの消去回数を所定ビットだけ左シフトした値を、当該バンクのリード回数の初期化値に加算するメモリアクセス制御装置。
【請求項１４】
再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御装置であって、
前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、
前記不揮発性半導体メモリに対するリード回数を複数のブロックを含むバンク単位でカウントするリードカウンタと、
前記リードカウンタを参照し、リード回数がリード回数閾値を上回る検査対象バンクが存在するか否かを判定する検査対象判定部と、
前記検査対象バンクが検出された場合、前記検査対象バンクに含まれる各ページに対してエラー検出処理を行い、エラー閾値を超えるエラーが検出されたエラーページが存在するか否かを検査する検査部と、
前記検査部によって前記エラーページが検出された場合、前記検査対象バンクに対してデータの再書き込み処理を実行する再書き込み制御部と、
前記再書き込み処理終了後、前記検査対象バンクの読み出し回数を初期化する初期化部と、
前記不揮発性半導体メモリに対する消去回数をバンク単位でカウントする消去カウンタと、
前記再書き込み処理終了後、前記消去カウンタに記録されている前記検査対象バンクの消去回数を１だけインクリメントする消去回数加算部と、
を備え、
前記初期化部は、
前記再書き込み処理終了後、前記検査対象バンクの消去回数に基づいて第３補正値を算出し、前記第３補正値に基づいて、前記検査対象バンクのリード回数の初期化値を補正する第３補正部、
を含むメモリアクセス制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリからデータが繰り返し読み出されることにより、データが意図せず書き換えられるリードディスターブ現象に対処する技術に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリは、再書き込み可能な不揮発性半導体メモリである。ＮＡＮＤフラッシュメモリは、高集積化を実現しながら、低コスト化が図られているため、ＳＤメモリカードなどの形態で広く普及している。
【０００３】
ＮＡＮＤフラッシュメモリにおいては、特定のセルが繰り返し読み出されることにより、記憶データが意図せず書き換えられる現象が生じることが分かっている。この現象は、リードディスターブ（Ｒｅａｄ  Ｄｉｓｔｕｒｂ）現象と呼ばれている現象であり、ＮＡＮＤフラッシュメモリを利用する上での課題となっている。
【０００４】
特定のセルに対する読み出し処理が繰り返し行われた場合であっても、一旦、そのセルを含む領域に対してデータの更新が行われれば、セルの状態が修復されるため、リードディスターブの発生が情報処理に影響を与えることを回避できる。しかし、特定のセルに対して書き込み処理が行われず、読み出し処理だけが繰り返し行われる場合、リードディスターブの発生する可能性が高くなり、情報処理に影響を与える可能性もある。
【０００５】
最近では、ＮＡＮＤフラッシュメモリは、情報処理装置のプログラムメモリとしてＲＯＭのような役割で利用されるケースが多くなっている。ＮＡＮＤフラッシュメモリがそのように利用された場合、連続的な読み出し処理のみが行われるため、リードディスターブの発生可能性が高くなる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−１９２２６６号公報
【特許文献２】特開２００８−１９２２６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
リードディスターブの発生を回避あるいはリードディスターブにより発生したエラーを修復するために、いくつかの方策がとられている。たとえば、所定のアルゴリズムでＮＡＮＤフラッシュメモリの各ページのデータを読み込み、エラー検出訂正回路を利用してエラー検出を行う方法がある。エラー検出訂正回路によって、エラーが発生しているデータが検出された場合、データを訂正した上で、メモリにデータを再書き込みする。これにより、リードディスターブの発生していたセルが修復される。
【０００８】
エラーを検出するアルゴリズムとしては、様々なアルゴリズムが考えられる。しかし、いずれのアルゴリズムを用いた場合にも、エラー検出のための読み出し処理自体が、ＮＡＮＤフラッシュメモリに負荷を掛けることになる。ＮＡＮＤフラッシュメモリの全ページを順番に検査する方法を採用した場合、エラー検出のための読み出し処理自体が、リードディスターブの発生要因となることも考えられる。
【０００９】
上記特許文献１においては、ページごとに読み出し回数をカウントし、読み出し回数の多い領域に対してリフレッシュ処理を行うようにしている。この方法により、全ての記憶領域に対してエラー検出用の読み出し処理を行う必要がなくなる。しかし、読み出し回数が多い領域に対しては、実際に、リードディスターブが発生していない場合にも、再書き込み処理が行われるため、必要以上にＮＡＮＤフラッシュメモリに負荷を掛ける可能性がある。
【００１０】
上記特許文献２においても、読み出し回数が閾値を超えた場合には、データの書き戻し処理を行うため、ＮＡＮＤフラッシュメモリに負荷を掛ける可能性がある。
【００１１】
そこで、本発明は前記問題点に鑑み、再書き込み可能な不揮発性半導体メモリに対する負荷を抑えつつ、リードディスターブ現象により生じるエラーに対処する技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するため、請求項１記載の発明は、再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御装置であって、前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、前記不揮発性半導体メモリに対するリード回数をブロック単位でカウントするリードカウンタと、前記リードカウンタを参照し、リード回数がリード回数閾値を上回る検査対象ブロックが存在するか否かを判定する検査対象判定部と、前記検査対象ブロックが検出された場合、前記検査対象ブロックに含まれる各ページに対してエラー検出処理を行い、データの再書き込み処理を実行するべきか否かを判定するためのエラー閾値を超えるエラーが検出されたエラーページが存在するか否かを検査する検査部と、前記検査部によって前記エラーページが検出された場合、前記検査対象ブロックに対してデータの再書き込み処理を実行する再書き込み制御部と、前記再書き込み処理終了後、前記検査対象ブロックのリード回数を初期化する初期化部と、
を備え、前記検査部は、前記検査対象ブロックの各ページをエラー検出回路の検出処理単位で区分し、各区分のエラー検出値の最大値をページ最大エラー値として設定し、前記ページ最大エラー値が前記エラー閾値を超える場合、当該ページを前記エラーページとして判定する。
【００１３】
請求項２記載の発明は、請求項１に記載のメモリアクセス制御装置であって、前記検査部は、前記検査対象ブロック内に前記エラーページが検出されない場合、前記検査対象ブロックに含まれる各ページの前記ページ最大エラー値を比較し、前記ページ最大エラー値の最大値をブロック最大エラー値として設定する最大値設定部、を含み、前記初期化部は、前記ブロック最大エラー値の設定処理の終了後、前記ブロック最大エラー値に基づいて第１補正値を算出し、前記第１補正値に基づいて、前記検査対象ブロックのリード回数の初期化値を補正する第１補正部、を含む。
【００１４】
請求項３記載の発明は、請求項２に記載のメモリアクセス制御装置であって、前記第１補正部は、前記エラー閾値に対する前記ブロック最大エラー値の割合をエラー進行割合とすると、前記リード回数閾値に前記エラー進行割合を乗算した値を当該ブロックのリード回数の初期化値に加算する。
【００１５】
請求項４記載の発明は、請求項２または請求項３に記載のメモリアクセス制御装置であって、前記初期化部は、前記検査対象ブロックに含まれるページ数を当該ブロックのリード回数の初期化値に加算する第２補正部、を含む。
【００１６】
請求項５記載の発明は、請求項１ないし請求項４のいずれかに記載のメモリアクセス制御装置であって、さらに、前記不揮発性半導体メモリに対する消去回数をブロック単位でカウントする消去カウンタと、前記再書き込み処理終了後、前記消去カウンタに記録されている前記検査対象ブロックの消去回数を１だけインクリメントする消去回数加算部と、を備え、前記初期化部は、前記再書き込み処理終了後、前記検査対象ブロックの消去回数に基づいて第３補正値を算出し、前記第３補正値に基づいて、前記検査対象ブロックのリード回数の前記初期化値を補正する第３補正部、を含む。
【００１７】
請求項６記載の発明は、請求項５に記載のメモリアクセス制御装置であって、前記第３補正部は、前記検査対象ブロックの消去回数を所定ビットだけ左シフトした値を、当該ブロックのリード回数の初期化値に加算する。
【００１８】
請求項７記載の発明は、再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御装置であって、前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、前記不揮発性半導体メモリに対するリード回数をブロック単位でカウントするリードカウンタと、前記リードカウンタを参照し、リード回数がリード回数閾値を上回る検査対象ブロックが存在するか否かを判定する検査対象判定部と、前記検査対象ブロックが検出された場合、前記検査対象ブロックに含まれる各ページに対してエラー検出処理を行い、エラー閾値を超えるエラーが検出されたエラーページが存在するか否かを検査する検査部と、前記検査部によって前記エラーページが検出された場合、前記検査対象ブロックに対してデータの再書き込み処理を実行する再書き込み制御部と、前記再書き込み処理終了後、前記検査対象ブロックのリード回数を初期化する初期化部と、前記不揮発性半導体メモリに対する消去回数をブロック単位でカウントする消去カウンタと、前記再書き込み処理終了後、前記消去カウンタに記録されている前記検査対象ブロックの消去回数を１だけインクリメントする消去回数加算部と、を備え、前記初期化部は、前記再書き込み処理終了後、前記検査対象ブロックの消去回数に基づいて第３補正値を算出し、前記第３補正値に基づいて、前記検査対象ブロックのリード回数の前記初期化値を補正する第３補正部、を含む。
【００１９】
請求項８記載の発明は、再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御装置であって、前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、前記不揮発性半導体メモリに対するリード回数を複数のブロックを含むバンク単位でカウントするリードカウンタと、前記リードカウンタを参照し、リード回数がリード回数閾値を上回る検査対象バンクが存在するか否かを判定する検査対象判定部と、前記検査対象バンクが検出された場合、前記検査対象バンクに含まれる各ページに対してエラー検出処理を行い、データの再書き込み処理を実行するべきか否かを判定するためのエラー閾値を超えるエラーが検出されたエラーページが存在するか否かを検査する検査部と、前記検査部によって前記エラーページが検出された場合、前記検査対象バンクに対してデータの再書き込み処理を実行する再書き込み制御部と、前記再書き込み処理終了後、前記検査対象バンクの読み出し回数を初期化する初期化部と、を備え、前記検査部は、前記検査対象バンクの各ページをエラー検出回路の検出処理単位で区分し、各区分のエラー検出値の最大値をページ最大エラー値として設定し、前記ページ最大エラー値が前記エラー閾値を超える場合、当該ページを前記エラーページとして判定する。
【００２０】
請求項９記載の発明は、請求項８に記載のメモリアクセス制御装置であって、前記検査部は、前記検査対象バンク内に前記エラーページが検出されない場合、前記検査対象バンクに含まれる各ページの前記ページ最大エラー値を比較し、前記ページ最大エラー値の最大値をバンク最大エラー値として設定する最大値設定部、を含み、前記初期化部は、前記バンク最大エラー値の設定処理の終了後、前記バンク最大エラー値に基づいて第１補正値を算出し、前記第１補正値に基づいて、前記検査対象バンクのリード回数の初期化値を補正する第１補正部、を含む。
【００２１】
請求項１０記載の発明は、請求項９に記載のメモリアクセス制御装置であって、前記第１補正部は、前記エラー閾値に対する前記バンク最大エラー値の割合をエラー進行割合とすると、前記リード回数閾値に前記エラー進行割合を乗算した値を当該バンクのリード回数の初期化値に加算する。
【００２２】
請求項１１記載の発明は、請求項９または請求項１０に記載のメモリアクセス制御装置であって、前記初期化部は、前記検査対象バンクに含まれるページ数を、当該バンクのリード回数の初期化値に加算する第２補正部、を含む。
【００２３】
請求項１２記載の発明は、請求項８ないし請求項１１のいずれかに記載のメモリアクセス制御装置であって、さらに、前記不揮発性半導体メモリに対する消去回数をバンク単位でカウントする消去カウンタと、前記再書き込み処理終了後、前記消去カウンタに記録されている前記検査対象バンクの消去回数を１だけインクリメントする消去回数加算部と、を備え、前記初期化部は、前記再書き込み処理終了後、前記検査対象バンクの消去回数に基づいて第３補正値を算出し、前記第３補正値に基づいて、前記検査対象バンクのリード回数の初期化値を補正する第３補正部、を含む。
【００２４】
請求項１３記載の発明は、請求項１２に記載のメモリアクセス制御装置であって、前記第３補正部は、前記検査対象バンクの消去回数を所定ビットだけ左シフトした値を、当該バンクのリード回数の初期化値に加算する。
【００２５】
請求項１４記載の発明は、再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御装置であって、前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、前記不揮発性半導体メモリに対するリード回数を複数のブロックを含むバンク単位でカウントするリードカウンタと、前記リードカウンタを参照し、リード回数がリード回数閾値を上回る検査対象バンクが存在するか否かを判定する検査対象判定部と、前記検査対象バンクが検出された場合、前記検査対象バンクに含まれる各ページに対してエラー検出処理を行い、エラー閾値を超えるエラーが検出されたエラーページが存在するか否かを検査する検査部と、前記検査部によって前記エラーページが検出された場合、前記検査対象バンクに対してデータの再書き込み処理を実行する再書き込み制御部と、前記再書き込み処理終了後、前記検査対象バンクの読み出し回数を初期化する初期化部と、前記不揮発性半導体メモリに対する消去回数をバンク単位でカウントする消去カウンタと、前記再書き込み処理終了後、前記消去カウンタに記録されている前記検査対象バンクの消去回数を１だけインクリメントする消去回数加算部と、を備え、前記初期化部は、前記再書き込み処理終了後、前記検査対象バンクの消去回数に基づいて第３補正値を算出し、前記第３補正値に基づいて、前記検査対象バンクのリード回数の初期化値を補正する第３補正部、を含む。
【発明の効果】
【００２６】
本発明のメモリアクセス制御装置によれば、再書き込み可能な半導体メモリに対する負荷を低減させながら、リードディスターブの発生を抑制し、あるいは、リードディスターブの発生が情報処理に影響を与えることを未然に防ぐことができる。
【図面の簡単な説明】
【００２７】
【図１】本実施の形態に係る情報処理システムのブロック図である。
【図２】ＮＡＮＤフラッシュメモリのメモリ構成図である。
【図３】ＮＡＮＤフラッシュメモリとＥＣＣのエラー検出単位との関係を示す図である。
【図４】本実施の形態に係る制御処理のフローチャートである。
【図５】本実施の形態に係る制御処理のフローチャートである。
【発明を実施するための形態】
【００２８】
｛第１の実施の形態｝
以下、図面を参照しつつ本発明の実施の形態について説明する。図１は、本実施の形態に係る情報処理システム１０の機能ブロック図である。この情報処理システム１０は、ホストシステム１およびメモリモジュール２を備えて構成される。メモリモジュール２は、メモリコントローラ３、メモリ４、リードカウンタ５、消去カウンタ６およびエラー検出訂正回路（ＥＣＣ回路：Ｅｒｒｏｒ  Ｃｈｅｃｋｉｎｇ  ａｎｄ  Ｃｏｒｒｅｃｔｉｏｎ回路）７を備えている。
【００２９】
メモリ４は、再書き込み可能な不揮発性半導体メモリである。本実施の形態において、メモリ４は、ＮＡＮＤフラッシュメモリである。メモリコントローラ３は、メモリ４に対するデータの読み出しや書き込みを制御する。例えば、この情報処理システムは、携帯電話装置として機能する。この場合、ホストシステム１は、携帯電話装置本体を構成し、メモリモジュール２がメモリカードを構成する。メモリモジュール２は、ホストシステム１に対して着脱自在なタイプであってもよいし、ホストシステム１を構成する装置に内蔵されるタイプであってもよい。
【００３０】
なお、本実施の形態においては、メモリコントローラ３が、メモリモジュール２に搭載される構成となっているが、ホストシステム１がメモリコントローラ３を備える構成であってもよい。また、エラー検出回路７は、メモリ４内に設けられてもよいし、メモリコントローラ３内に設けられてもよい。
【００３１】
図２は、メモリ４の構成を示す図である。メモリ４は、１枚のダイ（Ｄｉｅ）で構成されている。ダイは、複数のバンク（Ｂａｎｋ）を含んでいる。図２の例では、ダイは、Ｊ個のバンクを含んでいる。バンクは、複数のブロック（Ｂｌｏｃｋ）を含んでいる。図２の例では、バンクは、Ｍ個のブロックを含んでいる。さらに、ブロックは、複数のページ（Ｐａｇｅ）を含んでいる。図２の例では、ブロックは、Ｚ個のページを含んでいる。
【００３２】
ページは、メモリ４の読み出し単位である。メモリコントローラ３は、メモリ４に格納されているデータをページ単位で読み出すことが可能である。ブロックは、メモリ４の消去単位である。メモリコントローラ３は、メモリ４に格納されているデータをブロック単位で消去することが可能である。
【００３３】
メモリ４のブロックは、物理的に隣り合って配置された複数のページで構成されている。たとえば、ブロックは、メモリアドレスの順番で隣り合って配列された複数のページで構成される。したがって、あるブロック内の特定のページに対して繰り返し読み出し処理が行われた場合、当該ブロック内の周辺のページに対して負荷が掛かり、周辺のページについてリードディスターブが発生する可能性がある。メモリ４のバンクは、物理的に隣り合って配置された複数のブロックで構成されている。たとえば、バンクは、ブロック番号順で隣り合って配列された複数のブロックで構成される。
【００３４】
再び、図１を参照する。リードカウンタ５は、メモリ４に対する読み出しアクセスの回数をカウントする。上述したように、メモリコントローラ３は、メモリ４に対してページ単位での読み出し処理を実行する。メモリコントローラ３は、メモリ４に対して読み出し処理を実行したとき、リードカウンタ５に対して、読み出し処理を実行したページを特定する情報を通知する。具体的には、メモリコントローラ３は、リードカウンタ５に対して、読み出し処理を実行したページのバンク番号、ブロック番号およびページアドレスを通知する。
【００３５】
リードカウンタ５は、メモリコントローラ３から、読み出し対象のページのバンク番号、ブロック番号およびページアドレスを取得するが、ページ単位で読み出しアクセスの回数をカウントするのではなく、ブロック単位で読み出しアクセスの回数をカウントする。つまり、リードカウンタ５は、ブロック内に含まれるいずれのページに読み出しアクセスが行われたかを区別することなく、各ブロックに対する読み出しアクセスをカウントする。リードカウンタ５は、ブロック数に対応した複数のリード回数ＲＣを保持している。
【００３６】
消去カウンタ６は、メモリ４に対する消去回数をカウントする。上述したように、メモリコントローラ３は、メモリ４に対してブロック単位での消去処理を実行する。メモリコントローラ３は、メモリ４に対して消去処理を実行したとき、消去カウンタ６に対して、消去処理を実行したブロックを特定する情報を通知する。具体的には、メモリコントローラ３は、消去カウンタ６に対して、消去処理を実行したブロックのバンク番号およびブロック番号を通知する。消去カウンタ６は、ブロック単位で消去処理の回数をカウントする。消去カウンタ６は、ブロック数に対応した複数の消去回数ＥＣを保持している。
【００３７】
メモリコントローラ３は、情報処理システム１０の電源がＯＦＦされるとき、リードカウンタ５あるいは消去カウンタ６に格納されているカウント値を、メモリ４に書き込む。メモリコントローラ３は、情報処理システム１０の電源がＯＮされたとき、メモリ４から、カウント値を読み込んでリードカウンタ５あるいは消去カウンタ６にセットする。これにより、情報処理システム１０の電源がＯＦＦされる場合にも、カウント値を保持することができる。また、メモリコントローラ３は、電源がＯＮされている状態においても、所定の周期で、リードカウンタ５あるいは消去カウント６に記録されているカウンタ値をメモリ４に書き戻すようにしてもよい。
【００３８】
エラー検出訂正回路７（以下、ＥＣＣ回路７と呼ぶ。）は、メモリ４に誤ったデータが記録されていることを検出するとともに、誤ったデータを訂正する回路である。本実施の形態のＥＣＣ回路７は、図３に示すように、１０２４Ｂｙｔｅ（１ＫＢｙｔｅ）単位で、エラー検出および訂正を行う。たとえば、１０２４Ｂｙｔｅに対して、ＥＣＣ回路７は、１０ｂｉｔのエラーを検出および訂正可能である。
【００３９】
図３の例では、４ＫＢｙｔｅのＮＡＮＤフラッシュメモリの記憶領域は、ＥＣＣ回路７によって、４分割されてエラー検出されている。つまり、ＥＣＣ回路７のエラー検出単位が１０２４Ｂｙｔｅである。図では、それぞれ１０２４Ｂｙｔｅのエラー検出単位に対して、５ｂｉｔ、７ｂｉｔ、３ｂｉｔ、０ｂｉｔのエラーが検出されたことを示している。ＥＣＣ回路７が１０ｂｉｔのエラー訂正能力を持っている場合には、図３の例では、全ての記憶領域についてエラーを訂正することが可能である。
【００４０】
次に、本実施の形態に係る制御内容について説明する。図４および図５は、メモリコントローラ３、リードカウンタ５、消去カウンタ６あるいはＥＣＣ回路７において実行される制御内容を示すフローチャートである。メモリコントローラ３は、所定のトリガによって図４のフローを開始する。トリガとしては、たとえば、メモリ４に対する読み出しアクセスが行われた直後のタイミングが例として挙げられる。あるいは、メモリ４に対するアクセスが行われていない場合であって、タイマーで計測した所定のタイミングが到来した場合が例として挙げられる。あるいは、情報処理システム１０が起動しているときには、常時、図４および図５の制御を実行するようにしてもよい。
【００４１】
メモリコントローラ４は、まず、リードカウンタ５にアクセスし、リード回数ＲＣを取得する。メモリコントローラ４は、リード回数ＲＣにオフセット値ＲＣｏｆｆｓｅｔを加算した値がリード回数閾値ＲＣｔｈを超えるブロックが存在する否かをチェックする（ステップＳ１）。上述したように、リードカウンタ５には、ブロック数に対応したリード回数ＲＣが保持されている。メモリコントローラ４は、全てのブロックについてステップＳ１の判定を行う。
【００４２】
リード回数閾値ＲＣｔｈは、たとえば、１０，０００などの数字が設定される。オフセット値ＲＣｏｆｆｓｅｔは、過去のエラー発生状況に応じて設定されるオフセット値である。ステップＳ１において、純粋なリード回数ＲＣだけで評価するのではなく、オフセット値ＲＣｏｆｆｓｅｔを加味した値を評価することで、過去にエラーが発生したブロックに対しては、厳しくチェックするようにしている。オフセット値ＲＣｏｆｆｓｅｔの算出方法については後述する。
【００４３】
リード回数ＲＣにオフセット値ＲＣｏｆｆｓｅｔを加算した値がリード回数閾値ＲＣｔｈを超えるブロックを検査対象ブロックとする。ステップＳ１において、検査対象ブロックが検出された場合、検査対象ブロックに対してステップＳ２〜ステップＳ１２の検査処理が行われる。
【００４４】
ステップＳ２において、ページカウント値ｉに“１”がセットされる。これにより、検査対象ブロックの先頭ページが設定される。また、ブロック最大エラー値ＥＢｍａｘＢｌｏｃｋを０に初期化する。ブロック最大エラー値ＥＢｍａｘＢｌｏｃｋは、検査対象ブロックに含まれる全ページのエラー検出値の中で、最大のエラー検出値を示す。
【００４５】
ステップＳ３において、メモリコントローラ３は、メモリ４にアクセスし、検査対象ブロックの検査対象ページの読み出し処理を行う。検査対象ページとは、ページカウント値ｉで特定されているページである。
【００４６】
ステップＳ４において、ページ最大エラー値ＥＢｍａｘＰａｇｅとエラー閾値ＥＢｔｈとの比較が行われる。具体的には、ＥＣＣ回路７は、検査対象ページに対してエラー検出処理を行う。ＥＣＣ回路７のエラー検出単位のＢｙｔｅ長は、必ずしも、ページサイズと一致しない。ＥＣＣ回路７のエラー検出単位のＢｙｔｅ長が、ページサイズよりも小さい場合、検査対象ページに対して複数個のエラー検出値が得られることになる。メモリコントローラ３は、複数個のエラー検出値の中で最大値をページ最大エラー値ＥＢｍａｘＰａｇｅとして設定する。つまり、メモリコントローラ３は、ページ内の総エラーＢｉｔ数を評価するのではなく、ＥＣＣ検出単位における最大エラーＢｉｔ数を評価する。ブロック全体でエラーＢｉｔ数が大きくなる前に、特定のページにおいてエラーＢｉｔ数が増大した時点で、リードディスターブの発生を修復することができる。
【００４７】
エラー閾値ＥＢｔｈは、リフレッシュを行うべきか否かを判定するための閾値である。ページ最大エラー値ＥＢｍａｘＰａｇｅがエラー閾値ＥＢｔｈ以上となっているとき（ステップＳ４でＹＥＳ）、リフレッシュが必要と判断され、ステップＳ５に移行する。ページ最大エラー値ＥＢｍａｘＰａｇｅがエラー閾値ＥＢｔｈよりも小さいとき、まだリフレッシュを行う必要はないと判断され、ステップＳ８に移行する。
【００４８】
たとえば、図３に示した例であれば、ＮＡＮＤフラッシュメモリの１ページは、４つのＥＣＣ検出単位に区分される。それぞれのＥＣＣ検出単位について、５Ｂｉｔ、７Ｂｉｔ、３Ｂｉｔ、０Ｂｉｔのエラーが検出されている。この例であれば、ページ最大エラー値ＥＢｍａｘＰａｇｅは７Ｂｉｔである。エラー閾値ＥＢｔｈが、たとえば８Ｂｉｔであれば、この例では、リフレッシュを行う必要はないと判定される。エラー閾値ＥＢｔｈが、たとえば、７Ｂｉｔであれば、検査対象ページを含む検査対象ブロックのリフレッシュが行われることになる。
【００４９】
ステップＳ５において、メモリコントローラ３は、検査対象ブロックに対してリフレッシュを行う。具体的には、メモリコントローラ３は検査対象ブロックの全ページのデータを読み出し、バッファに格納する。次に、メモリコントローラ３は、検査対象ブロックの全ページのデータを消去する。そして、メモリコントローラ３は、ＥＣＣ回路７を利用してバッファに格納しているデータに対してエラー訂正を行った後、訂正後のデータを検査対象ブロックに書き戻す。これによりリフレッシュが完了する。
【００５０】
ステップＳ５のリフレッシュ処理が完了すると、メモリコントローラ３は、消去カウンタ６に格納されている検査対象ブロックの消去回数ＥＣを１インクリメントする（ステップＳ６）。
【００５１】
続いて、メモリコントローラ３は、リードカウンタ５に格納されている検査対象ブロックのリード回数ＲＣを０に初期化する（ステップＳ７）。つまり、検査対象ブロックに対してリフレッシュ処理を行ったので、検査対象ブロックに対して発生しているリードディスターブに基づくエラーは修復されている。そこで、検査対象ブロックについては、しばらくの期間、リフレッシュが不要となるので、リード回数ＲＣを０で初期化する。
【００５２】
ステップＳ７の処理が完了すると、ステップＳ１に戻り、再び、検査対象ブロックの存在の有無をチェックする。つまり、リード回数ＲＣにオフセット値ＲＣｏｆｆｓｅｔを加算した値がリード回数閾値ＲＣｔｈを超えるブロックが存在する否かをチェックする。ここで、ステップＳ７の処理の後、即座にステップＳ１に戻ってもよいが、所定のタイミングが到来した時点で、ステップＳ１を再開するようにしてもよい。
【００５３】
再び、ステップＳ４を参照する。ページ最大エラー値ＥＢｍａｘＰａｇｅがエラー閾値ＥＢｔｈより小さいとき（ステップＳ４でＮＯ）、ステップＳ８に移行する。ステップＳ８において、メモリコントローラ３は、ページ最大エラー値ＥＢｍａｘＰａｇｅとブロック最大エラー値ＥＢｍａｘＢｌｏｃｋとを比較する。
【００５４】
ページ最大エラー値ＥＢｍａｘＰａｇｅがブロック最大エラー値ＥＢｍａｘＢｌｏｃｋを超える場合（ステップＳ８でＹＥＳ）、メモリコントローラ３は、最大エラー値ＥＢｍａｘＢｌｏｃｋにページ最大エラー値ＥＢｍａｘＰａｇｅの値をセットする（ステップＳ９）。つまり、検査対象ページで検出されたエラー検出値が、現時点で、エラー検出値の最大値となったので、ブロック最大エラー値ＥＢｍａｘＢｌｏｃｋを更新する。
【００５５】
ステップＳ１０において、ページカウント値ｉが、検査対象ブロック内の最終ページを示す値かどうかを判定する。つまり、検査対象ページが検査対象ブロック内の最終ページであるか否かを判定する。検査対象ページが検査対象ブロック内の最終ページでない場合（ステップＳ１０でＮＯ）、ステップＳ１１において、ページカウント値ｉを１だけインクリメントする。これにより、ステップＳ３に戻り、次の検査対象ページについて、ステップＳ３〜Ｓ１２に処理が行われる。
【００５６】
検査対象ページが検査対象ブロック内の最終ページである場合（ステップＳ１０でＹＥＳ）、リード回数ＲＣを初期化する（ステップＳ１２）。ステップＳ７においては、リード回数ＲＣを０に初期化した。しかし、ステップＳ１２においては、リード回数ＲＣは０に初期化されない。ステップＳ１２において、リード回数ＲＣの初期化値は、２つの補正値に基づいて補正される。
【００５７】
メモリコントローラ３は、エラー閾値ＥＢｔｈに対するブロック最大エラー値ＥＢｍａｘＢｌｏｃｋの割合を、エラー進行割合として設定する。メモリコントローラ３は、エラー進行割合（ＥＢｍａｘＢｌｏｃｋ／ＥＢｔｈ）に、リード回数閾値ＲＣｔｈを乗算した値を第１補正値として設定する。そして、メモリコントローラ３は、初期化値に、第１補正値を加算する。
【００５８】
また、メモリコントローラ３は、検査対象ブロックに含まれるページの数ＰａｇｅＮｕｍを、第２補正値として設定する。そして、メモリコントローラ３は、初期化値に、第２補正値を加算する。これにより、検査処理において読み出した回数も考慮して、初期化値が補正される。
【００５９】
このように、メモリコントローラ３は、第１補正値（ＲＣｔｈ＊（ＥＢｍａｘＢｌｏｃｋ／ＥＢｔｈ））および第２補正値（ＰａｇｅＮｕｍ）をリード回数ＲＣの初期化値に加算する。したがって、この検査対象ブロックについては、再び、ステップＳ１においてリード回数閾値ＲＣｔｈとの比較が行われるとき、既に、補正値分だけリード回数が加算された状態となっている。ある程度、リードディスターブによるエラー発生が進行していると考えられるので、リード回数ＲＣを０に初期化せず、早い時期に再び検査対象となるように厳しくチェックするのである。これにより、リードディスターブによるエラー発生が情報処理に影響を与えることを、未然に回避することができる。
【００６０】
また、ステップＳ１においては、初期化されたリード回数ＲＣには、オフセット値ＲＣｏｆｆｓｅｔが加算される。オフセット値ＲＣｏｆｆｓｅｔは、消去回数ＲＣに応じて設定される第３補正値である。この実施の形態においては、消去カウンタ６に格納されている各ブロックの消去回数ＥＣを１Ｂｉｔ左シフトすることにより、オフセット値ＲＣｏｆｆｓｅｔを求めるようにしている。たとえば、消去回数ＥＣが１回であれば、オフセット値ＲＣｏｆｆｓｅｔは２である。消去回数ＥＣが１０００回であれば、オフセット値ＲＣｏｆｆｓｅｔは、２０００である。このように、検査処理の中で行われた消去回数も加味して、検査対象ブロックを選択するようにし、リードディスターブによるエラー発生が情報処理に影響を与える前に、未然に修復することができる。もちろん、左シフトするときのシフト量は自由に設定することができる。また、左シフトは一例であり、消去回数ＥＣが反映されるような補正値を適宜選択することができる。
【００６１】
なお、消去カウンタ６に格納されている消去回数ＥＣは、原則的には、初期化されない。したがって、累積的にリフレッシュ回数が多くなっているブロックについては、より厳しくチェックされることになる。
【００６２】
｛第２の実施の形態｝
次に、本発明の第２の実施の形態について説明する。第２の実施の形態については、リード回数ＲＣおよび消去回数ＥＣの集計単位が異なる。第１の実施の形態においては、リード回数ＲＣおよび消去回数ＥＣは、ブロック単位で集計した。第２の実施の形態においては、リード回数ＲＣおよび消去回数ＥＣは、バンク単位で集計する。
【００６３】
図４のステップＳ１において、第１の実施の形態においては、検査対象ブロックの存在の有無を検出した。第２の実施の形態においては、ステップＳ１において、検査対象バンクの存在を検出する。
【００６４】
ステップＳ５において、第１の実施の形態においては、検査対象ブロックをリフレッシュした。第２の実施の形態においては、ステップＳ５において、検査対象バンクをリフレッシュする。
【００６５】
ステップＳ８において、第１の実施の形態においては、ページ最大エラー値ＥＢｍａｘＰａｇｅとブロック最大エラー値ＥＢｍａｘＢｌｏｃｋとを比較した。第２の実施の形態においては、ステップＳ８において、ページ最大エラー値ＥＢｍａｘＰａｇｅとバンク最大エラー値ＥＢｍａｘＢａｎｋを比較する。つまり、第１の実施の形態においては、ページ最大エラー値ＥＢｍａｘＰａｇｅのブロック内での最大値を求めたが、第２の実施の形態においては、ページ最大エラー値ＥＢｍａｘＰａｇｅのバンク内での最大値を求める。
【００６６】
ステップＳ１０においては、第１の実施の形態においては、検査対象ブロック内の最終ページであるかどうかを判定した。第２の実施の形態においては、ステップＳ１０において、検査対象バンク内の最終ページであるかどうかを判定する。
【００６７】
ステップＳ１２において、第１の実施の形態においては、エラー閾値ＥＢｔｈに対するブロック最大エラー値ＥＢｍａｘＢｌｏｃｋの割合をエラー進行割合とした。第２の実施の形態においては、ステップＳ１２において、エラー閾値ＥＢｔｈに対するバンク最大エラー値ＥＢｍａｘＢａｎｋの割合をエラー進行割合とする。
【００６８】
第２の実施の形態においても、第１の実施の形態と同様、リードディスターブの発生しているページを検出し、情報処理にエラーが発生することを未然に防止できる。
【００６９】
第１の実施の形態と第２の実施の形態は、それぞれ異なる長所を備えているので、それらを使い分けるようにすればよい。第１の実施の形態においては、リフレッシュされる単位がブロック単位であるので、メモリ４に対する負荷を小さくすることができる。第２の実施の形態においては、バンク単位でカウント値を保持するので、カウント値を保持するために必要な記憶領域を小さくすることができる。
【００７０】
｛変形例｝
この実施の形態では、第１、第２、あるいは第３補正値を利用して、リード回数ＲＣの初期化値を補正したが、リード回数閾値ＲＣｔｈを補正するようにしてもよい。
【００７１】
リード回数閾値ＲＣｔｈは、メモリ４がＳＬＣ（Ｓｉｎｇｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）であるか、ＭＬＣ（Ｍｕｌｔｉ  Ｌｅｖｅｌ  Ｃｅｌｌ）であるかに応じて、最適な値に調整すればよい。また、リード回数閾値ＲＣｔｈは、Ｂａｎｋサイズ、ベンダーに応じて最適な値に調整すればよい。同様に、エラー閾値ＥＢｔｈについても、ＳＬＣ、ＭＬＣの種別、Ｂａｎｋサイズ、ベンダーに応じて最適な値に調整すればよい。
【００７２】
この実施の形態において、ブロック単位で、あるいは、バンク単位で、ページに対する読み出しアクセス回数をカウントした。ブロック内の先頭アドレスのページ、あるいは、ブロック内の最終アドレスのページについては、リードディスターブ現象が発生しやすいことが判明している。そこで、ブロック内の先頭アドレスのページ、あるいは、ブロック内の最終アドレスのページについては、読み出し回数のカウントに重みをつけてもよい。たとえば、ブロック内の先頭アドレスのページ、あるいは、ブロック内の最終アドレスのページについては、１回の読み出しに対して、リード回数ＲＣを２だけインクリメントするようにしてもよい。
【符号の説明】
【００７３】
１    ホストシステム
２    メモリモジュール
３    メモリコントローラ
４    メモリ
５    リードカウンタ
６    消去カウンタ
７    ＥＣＣ回路
【図１】
0005604313.tif 000002
【図２】
0005604313.tif 000003
【図３】
0005604313.tif 000004
【図４】
0005604313.tif 000005
【図５】
0005604313.tif 000006