(57)【特許請求の範囲】
【請求項１】
ホストシステムからメモリアクセスを要求されて、メモリセルアレイにアクセスを行なうメモリコントローラであって、
前記メモリセルアレイにアクセスが行なわれているかどうかを判断するアクセス判断手段と、
前記メモリセルアレイにアクセスが行なわれていないタイミングにおいて、所定のアルゴリズムを用いて選択された選択アドレスについてエラー検出を行なう選択アドレスエラー検出手段と、
を備え、
前記選択アドレスエラー検出手段は、
ある読み出しアクセスが終了したときにあるエラー検出タイミングにおいて前記選択アドレスをエラー検出開始アドレスとして選択するとともに、前記ある読み出しアクセスが終了したときおよびその後のエラー検出タイミングにおいて、前記エラー検出開始アドレスに関連するアドレスについてエラー検出を行なう手段、
を含み、
前記エラー検出開始アドレスは、
前記ある読み出しアクセスの際に指定された読み出しアドレスに対応する読み出しページを含むブロックに対応するアドレスとされることを特徴とするメモリコントローラ。
【請求項２】
請求項１に記載のメモリコントローラにおいて、
前記エラー検出開始アドレスは、読み出しページを含むブロックにおいて前記読み出しページを除くページに対応するアドレスとされることを特徴とするメモリコントローラ。
【請求項３】
請求項１または請求項２に記載のメモリコントローラにおいて、さらに、
前記ホストシステムにより指定された読み出しアドレスについてエラー検出を行なう読み出しアドレスエラー検出手段、
を備えることを特徴とするメモリコントローラ。
【請求項４】
請求項１ないし請求項３に記載のメモリコントローラにおいて、
前記選択アドレスエラー検出手段は、
エラー検出タイミングが到来するごとにエラー検出開始アドレスを選択するとともに、前記エラー検出タイミングにおいて、前記エラー検出開始アドレスに関連するアドレスについてエラー検出を行なう手段、
を含むことを特徴とするメモリコントローラ。
【請求項５】
請求項１ないし請求項３に記載のメモリコントローラにおいて、
前記選択アドレスエラー検出手段は、
エラー検出タイミングが到来するごとにエラー検出開始アドレスを選択し、前記エラー検出開始アドレスについてエラー検出を行なう手段、
を含むことを特徴とするメモリコントローラ。
【請求項６】
請求項１ないし請求項５のいずれかに記載のメモリコントローラにおいて、
前記アクセス判断手段は、
前記メモリセルアレイに書き込みデータが出力されているかどうかを判断する手段、
を含むことを特徴とするメモリコントローラ。
【請求項７】
請求項１ないし請求項５のいずれかに記載のメモリコントローラにおいて、
前記アクセス判断手段は、  
前記ホストシステムからアクセスを要求されているかどうかを判断する手段、
を含むことを特徴とするメモリコントローラ。
【請求項８】
請求項１ないし請求項５のいずれかに記載のメモリコントローラにおいて、
前記アクセス判断手段は、
前記ホストシステムの電源状態が切り替えられたかどうかを判断する手段、
を含むことを特徴とするメモリコントローラ。
【請求項９】
請求項１ないし請求項８のいずれかに記載のメモリコントローラにおいて、さらに、
前記ホストシステムからエラー検出情報を要求されて、前記ホストシステムにエラー検出情報を通知するエラー通知手段、
を備えることを特徴とするメモリコントローラ。
【請求項１０】
請求項９に記載のメモリコントローラにおいて、
前記エラー通知手段は、
エラー検出情報を保存する情報保存手段と、
前記ホストシステムからエラー検出情報を要求されて、前記情報保存手段により保存されたエラー検出情報を前記ホストシステムに通知する手段と、
を含むことを特徴とするメモリコントローラ。
【請求項１１】
請求項９に記載のメモリコントローラにおいて、
前記エラー通知手段は、
前記メモリセルアレイについてエラーが発生したことを検出したときに、前記ホストシステムがエラー検出情報を要求するための割り込みを発生させる手段、
を含むことを特徴とするメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリからデータが繰り返し読み出されることにより、データが意図せず書き換えられる可能性を回避または低減する技術に関する。
【背景技術】
【０００２】
不揮発性メモリの中でも、ＮＡＮＤフラッシュメモリは、単純な回路構成による高集積化および製造コスト減、ユーザによる書き込みの容易化を図ることができるため、ＳＤメモリカードなどに大量に採用されている。
【０００３】
最近では、ＮＡＮＤフラッシュメモリは、ゲーム機などにも採用されている。ＮＡＮＤフラッシュメモリがゲーム機などで使用される際には、書き込みは発生せず連続的な読み出しが発生する。すなわち、ＮＡＮＤフラッシュメモリがＲＯＭのように採用されることが多くなりつつある。
【０００４】
しかし、ゲーム機などでは、特定のプログラムが繰り返し読み出されることが多いため、プログラムが意図せず書き換えられる可能性が指摘され始めている。このような現象は“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象と呼ばれており、本現象が発生するメカニズムについて以下に簡単に説明する。
【０００５】
図１１は、ＮＡＮＤフラッシュメモリの模式図である。ＮＡＮＤフラッシュメモリは、格子状に配線されたビット線４１とワード線４２、４３、４４、メモリセル５２、５３、選択トランジスタ５４などから構成されている。
【０００６】
メモリセル５２が格納する二値データ（“０”または“１”）を読み出す場合を考える。この場合、メモリセル５２は選択セル５２、メモリセル５３は非選択セル５３と呼ばれている。まず、選択トランジスタ５４により、選択セル５２が属するビット線４１が指定される。次に、選択セル５２が属するワード線４２に対して、低ゲート電圧Ｖ（Ｌｏｗ）＝０Ｖが印加される。そして、非選択セル５３が属するワード線４３に対して、高ゲート電圧Ｖ（Ｈｉｇｈ）〜５Ｖが印加される。
【０００７】
このとき、非選択セル５３は微弱な書き込み状態にあるため、非選択セル５３のフローティングゲートに電子がトラップされ蓄積される。すなわち、選択セル５２が格納する二値データが繰り返し読み出されることにより、非選択セル５３の閾値電圧がシフトして、非選択セル５３が格納する二値データが“１”から“０”に意図せず書き換えられる可能性がある。
【０００８】
もっとも、非選択セル５３が格納する二値データが意図せず書き換えられたとしても、データが新たに書き込まれる前に一括して消去される際に、非選択セル５３の機能を回復させることができる。しかし、書き込みは発生せず連続的な読み出しが発生する場合には、非選択セル５３の機能を回復させることができない。
【０００９】
【特許文献１】米国特許出願公開第２００５／０２１０１８４号明細書
【特許文献２】特開平８−１２９５１０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
特許文献１は、メモリセル内部の制御方法により、“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象を回避する手段を提供する。しかし、ここで開示されている方法は、特定のセル構造を有するメモリに対して適用可能な方法であり、他のセル構造に適用可能な方法ではない。つまり、メモリのセル構造に依存することなく、“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象を回避できる方策ではない。
【００１１】
特許文献２は、エラー検出を行なう手段を提供する。しかし、ここで開示されている方法は、読み出しアドレスについてのみエラー検出を行なう方法であり、読み出しアドレス以外の非読み出しアドレスについてもエラー検出を行なう方法ではない。つまり、エラーが発生したアドレスについて読み出しアクセスが行なわれるまで、そのアドレスにおいてエラーが発生したことが検出されないため、“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象を回避できる方策ではない。
【００１２】
そこで、本発明は前記問題点に鑑み、不揮発性メモリからデータが繰り返し読み出されることにより、データが意図せず書き換えられる可能性を回避または低減する技術を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するため、請求項１記載の発明は、ホストシステムからメモリアクセスを要求されて、メモリセルアレイにアクセスを行なうメモリコントローラであって、前記メモリセルアレイにアクセスが行なわれているかどうかを判断するアクセス判断手段と、前記メモリセルアレイにアクセスが行なわれていないタイミングにおいて、所定のアルゴリズムを用いて選択された選択アドレスについてエラー検出を行なう選択アドレスエラー検出手段と、を備え、前記選択アドレスエラー検出手段は、ある読み出しアクセスが終了したときにあるエラー検出タイミングにおいて前記選択アドレスをエラー検出開始アドレスとして選択するとともに、前記ある読み出しアクセスが終了したときおよびその後のエラー検出タイミングにおいて、前記エラー検出開始アドレスに関連するアドレスについてエラー検出を行なう手段、を含み、前記エラー検出開始アドレスは、前記ある読み出しアクセスの際に指定された読み出しアドレスに対応する読み出しページを含むブロックに対応するアドレスとされることを特徴とする。
【００１４】
請求項２記載の発明は、請求項１に記載のメモリコントローラにおいて、前記エラー検出開始アドレスは、読み出しページを含むブロックにおいて前記読み出しページを除くページに対応するアドレスとされることを特徴とする。
【００１６】
請求項３記載の発明は、請求項１または請求項２に記載のメモリコントローラにおいて、さらに、前記ホストシステムにより指定された読み出しアドレスについてエラー検出を行なう読み出しアドレスエラー検出手段、を備えることを特徴とする。
【００１８】
請求項４記載の発明は、請求項１ないし請求項３に記載のメモリコントローラにおいて、前記選択アドレスエラー検出手段は、エラー検出タイミングが到来するごとにエラー検出開始アドレスを選択するとともに、前記エラー検出タイミングにおいて、前記エラー検出開始アドレスに関連するアドレスについてエラー検出を行なう手段、を含むことを特徴とする。
【００１９】
請求項５記載の発明は、請求項１ないし請求項３に記載のメモリコントローラにおいて、前記選択アドレスエラー検出手段は、エラー検出タイミングが到来するごとにエラー検出開始アドレスを選択し、前記エラー検出開始アドレスについてエラー検出を行なう手段、を含むことを特徴とする。
【００２３】
請求項６記載の発明は、請求項１ないし請求項５のいずれかに記載のメモリコントローラにおいて、前記アクセス判断手段は、前記メモリセルアレイに書き込みデータが出力されているかどうかを判断する手段、を含むことを特徴とする。
【００２４】
請求項７記載の発明は、請求項１ないし請求項５のいずれかに記載のメモリコントローラにおいて、前記アクセス判断手段は、前記ホストシステムからアクセスを要求されているかどうかを判断する手段、を含むことを特徴とする。
【００２５】
請求項８記載の発明は、請求項１ないし請求項５のいずれかに記載のメモリコントローラにおいて、前記アクセス判断手段は、前記ホストシステムの電源状態が切り替えられたかどうかを判断する手段、を含むことを特徴とする。
【００２６】
請求項９記載の発明は、請求項１ないし請求項８のいずれかに記載のメモリコントローラにおいて、さらに、前記ホストシステムからエラー検出情報を要求されて、前記ホストシステムにエラー検出情報を通知するエラー通知手段、を備えることを特徴とする。
【００２７】
請求項１０記載の発明は、請求項９に記載のメモリコントローラにおいて、前記エラー通知手段は、エラー検出情報を保存する情報保存手段と、前記ホストシステムからエラー検出情報を要求されて、前記情報保存手段により保存されたエラー検出情報を前記ホストシステムに通知する手段と、を含むことを特徴とする。
【００２８】
請求項１１記載の発明は、請求項９に記載のメモリコントローラにおいて、前記エラー通知手段は、前記メモリセルアレイについてエラーが発生したことを検出したときに、前記ホストシステムがエラー検出情報を要求するための割り込みを発生させる手段、を含むことを特徴とする。
【発明の効果】
【００２９】
本発明に係るメモリコントローラは、読み出しアドレスについてのみエラー検出を行なうのではなく、読み出しアドレス以外の非読み出しアドレスについてもエラー検出を行なう。そのため、あるアドレスにおいてエラーが発生したとしても、そのアドレスについて読み出しアクセスが行なわれるまでもなくエラー検出が行なわれることにより、そのアドレスにおいてエラーが発生したことが検出される。
【００３０】
本発明に係るメモリコントローラは、読み出しアドレスおよび非読みだしアドレスを含む全メモリセルアレイ領域についてエラー検出を行なうため、その後のエラー訂正により“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象が進行することを未然に防止できる。
【発明を実施するための最良の形態】
【００３１】
｛第１の実施の形態｝
＜メモリシステムの構成要素＞
以下、図面を参照しつつ、第１の実施の形態について説明する。“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象においては、読み出しアドレスが格納するデータが繰り返し読み出されるときに、読み出しアドレス以外の非読み出しアドレスが格納するデータが意図せず書き換えられる可能性がある。しかし、本実施の形態に係るメモリコントローラは、読み出しアドレスおよび非読み出しアドレスを含む全メモリセルアレイ領域についてエラー検出を行なうため、その後のエラー訂正により“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象が進行することを未然に防止できる。
【００３２】
もっとも、メモリコントローラは、メモリセルアレイに対して読み出しアクセス、書き込みアクセスなどが行なわれているときには、メモリセルアレイに対してエラー検出を行なうことができない。そこで、メモリコントローラは、メモリセルアレイに対して読み出しアクセス、書き込みアクセスなどが行なわれていないことを判断したときに、メモリセルアレイに対してエラー検出を行なう。
【００３３】
しかし、メモリコントローラが全メモリセルアレイ領域について一度にエラー検出を行なうための時間は、読み出しアクセス、書き込みアクセスなどが終了してから次に開始するまでの時間より長いことが通常である。そこで、メモリコントローラは、メモリセルアレイに対して読み出しアクセス、書き込みアクセスなどが行なわれていないことを判断したときに、全メモリセルアレイ領域のうち選択したアドレスについてエラー検出を行なう。
【００３４】
図１は、本実施の形態に係るメモリシステムの構成要素を示すブロック図である。メモリシステムはたとえば情報処理装置などであり、ホストシステム１、メモリコントローラ２、メモリ３などから構成されている。図１においては、メモリセルアレイに対して読み出しアクセスが行なわれる場合を示している。
【００３５】
ホストシステム１は、メモリ３の構成要素であるメモリセルアレイ３１への読み出しアクセス、書き込みアクセスなどをメモリコントローラ２に要求するために、読み出しコマンド、書き込みコマンドなどをメモリコントローラ２に出力する。また、ホストシステム１は、メモリセルアレイ３１でのエラー情報をメモリコントローラ２から取得するために、Ｓｔａｔｕｓ  Ｒｅａｄコマンドをメモリコントローラ２に出力する。
【００３６】
メモリコントローラ２は、ホストシステム１からの要求を受けて、メモリセルアレイ３１への読み出しアクセス、書き込みアクセスなどを行なう。また、メモリコントローラ２は、メモリセルアレイ３１への読み出しアクセス、書き込みアクセスなどが行なわれていないことを判断したときに、メモリセルアレイ３１に対するエラー検出処理を行ない、メモリセルアレイ３１でのエラー情報を保存する。そして、メモリコントローラ２は、ホストシステム１からの要求を受けて、メモリセルアレイ３１でのエラー情報をホストシステム１に通知する。
【００３７】
メモリ３は、メモリセルアレイ３１において、ホストシステム１が処理するデータを格納する。本実施の形態に係るメモリ３として、ＳＬＣ（Ｓｉｎｇｌｅ−Ｌｅｖｅｌ  Ｃｅｌｌ）方式、または、ＭＬＣ（Ｍｕｌｔｉ−Ｌｅｖｅｌ  Ｃｅｌｌ）方式のＮＡＮＤフラッシュメモリを使用することが可能である。もっとも、読み出しアドレスにおいて格納されるデータが繰り返し読み出されるときに、非読み出しアドレスにおいて格納されるデータが意図せず書き換えられる可能性がある不揮発性メモリにおいて、本実施の形態を実施することが可能である。
【００３８】
ホストシステム１は、ＣＰＵ１１、アクセスコントローラ１２などから構成されている。ＣＰＵ１１は、読み出しコマンド、書き込みコマンドおよびＳｔａｔｕｓ  Ｒｅａｄコマンドなどを、アクセスコントローラ１２にセットする。アクセスコントローラ１２は、ＣＰＵ１１からのコマンド発行命令を受けて、読み出しコマンド、書き込みコマンドおよびＳｔａｔｕｓ  Ｒｅａｄコマンドなどを、メモリコントローラ２に出力する。
【００３９】
メモリコントローラ２は、ホストインターフェース２１、コマンド解析部２２、メモリアクセス制御部２３、出力バッファ部２４、スキャン制御部２５、エラー検出部２６、エラー情報保存部２７、メモリインターフェース２８などから構成されている。
【００４０】
ホストインターフェース２１は、ホストシステム１とメモリコントローラ２の間で、コマンドおよびデータをやりとりするためのインターフェースである。
【００４１】
コマンド解析部２２は、コマンドをホストシステム１から入力して、そのコマンドが読み出しコマンド、書き込みコマンドまたはＳｔａｔｕｓ  Ｒｅａｄコマンドなどのうちいずれかを判別する。
【００４２】
メモリアクセス制御部２３は、読み出しコマンド、書き込みコマンドなどをコマンド解析部２２から入力して、メモリセルアレイ３１への読み出しアクセス、書き込みアクセスなどを行なう。また、メモリアクセス制御部２３は、メモリセルアレイ３１への読み出しアクセス、書き込みアクセスなどが行なわれていないことを判断したときに、メモリセルアレイ３１に対するエラー検出処理を後述するスキャン制御部２５に要求する。
【００４３】
メモリアクセス制御部２３は、後述する出力バッファ部２４が読み出しデータをホストシステム１に出力していることを確認することにより、メモリセルアレイ３１への読み出しアクセスが行なわれていないことを判断する。また、メモリアクセス制御部２３は、出力バッファ部２４が書き込みデータをメモリ３に出力していないことを確認することにより、メモリセルアレイ３１への書き込みアクセスが行なわれていないことを判断する。
【００４４】
出力バッファ部２４は、読み出しデータをメモリ３から入力して一時的に格納する。そして、出力バッファ部２４は、読み出しデータをホストシステム１に出力する。また、出力バッファ部２４は、書き込みデータをホストシステム１から入力して一時的に格納する。そして、出力バッファ部２４は、書き込みデータをメモリ３に出力する。
【００４５】
スキャン制御部２５は、メモリアクセス制御部２３からの要求を受けて、エラー検出対象であるスキャンアドレスをメモリ３に対して指定する。また、スキャン制御部２５は、Ｓｔａｔｕｓ  Ｒｅａｄコマンドをコマンド解析部２２から入力して、メモリセルアレイ３１でのエラー情報をホストシステム１に通知する。
【００４６】
スキャン制御部２５は、エラー検出対象であるスキャンアドレスを指定するときに、全メモリセルアレイ領域のうち、エラー検出を行なうアドレスを選択する。スキャン制御部２５がエラー検出を行なうアドレスを選択する方法については、図２から図６までを用いて後述する。
【００４７】
エラー検出部２６は、エラー検出対象であるスキャンデータをメモリ３から入力する。そして、エラー検出部２６は、スキャンデータについてエラー検出を行なう。エラー情報保存部２７は、スキャンデータについてエラー情報を保存する。
【００４８】
メモリインターフェース２８は、メモリコントローラ２とメモリ３の間で、アドレスおよびデータをやりとりするためのインターフェースである。
【００４９】
メモリアクセス制御部２３は、ホストシステム１から要求された読み出しアドレス、書き込みアドレスなどを出力する。スキャン制御部２５は、メモリセルアレイ領域のうち選択したスキャンアドレスを出力する。
【００５０】
メモリコントローラ２は、メモリアクセス制御部２３によるメモリセルアレイ３１への読み出しアクセス、書き込みアクセスなど、および、スキャン制御部２５によるスキャンデータの取得を異なる期間に独立して行なう。これにより、メモリコントローラ２は、メモリセルアレイ３１へのアクセスおよびスキャンデータの取得を同時に行なうことなく、“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象が進行することを未然に防止できる。
【００５１】
＜エラー検出におけるスキャン方法＞
次に、スキャン制御部２５がエラー検出を行なうアドレスを選択する方法について、図２から図６までを用いて説明する。まず、スキャン制御部２５がスキャン開始アドレスからスキャンを行なう方法について説明する。次に、スキャン制御部２５がスキャン開始アドレスを選択する方法について説明する。
【００５２】
図２から図４までは、メモリセルアレイ３１におけるエラー検出スキャンを示す図である。図２から図４までにおいて、スキャン開始アドレス３１１ないし３１６は、網掛を用いて示されている。また、図２および図３において、スキャン開始アドレス以外のスキャンアドレス３１１Ｓないし３１３Ｓは、斜線を用いて示されている。すなわち、図２から図４までに示したエラー検出におけるスキャン方法は互いに異なる。スキャン開始アドレスおよびスキャンアドレスは、メモリセルアレイ３１のページ単位、ブロック単位、１ブロックの所定等分単位など、どのような単位で選択されてもよい。
【００５３】
図２においては、スキャン制御部２５は、メモリアクセス制御部２３から動作要求を受けたときに、スキャン開始アドレス３１１を選択する。そして、スキャン制御部２５は、メモリアクセス制御部２３から停止要求を受けるまで、スキャン開始アドレス３１１からのアドレスインクリメントを実行する。
【００５４】
スキャン制御部２５は、メモリアクセス制御部２３から停止要求を受けたときに、アドレスインクリメントを中断する。そして、スキャン制御部２５は、次回にメモリアクセス制御部２３から動作要求を受けたときに、アドレスインクリメントが中断されたスキャンアドレスから、アドレスインクリメントを再開する。さらに、スキャン制御部２５は、次回にメモリアクセス制御部２３から停止要求を受けたときに、アドレスインクリメントを中断する。
【００５５】
スキャン制御部２５は、以上に説明した方法により、以後もスキャンアドレスを選択する。すなわち、スキャン制御部２５がメモリアクセス制御部２３から動作要求を受けたときに、各回のアドレススキャンが行なわれる。そして、複数回のアドレススキャンを通して、スキャン開始アドレス３１１から連続するスキャンアドレス３１１Ｓが選択される。
【００５６】
スキャン制御部２５は、メモリアクセス制御部２３から動作要求を受けたときに最初にスキャンアドレスを選択するにあたり、前回にメモリアクセス制御部２３から動作要求を受けたときに最後に選択したスキャンアドレスを認識する必要がある。そのため、前回にメモリアクセス制御部２３から動作要求を受けたときに最後に選択されたスキャンアドレスを記憶する手段を、スキャン制御部２５またはメモリコントローラ２の他の構成要素などが備えるようにすればよい。
【００５７】
図３においては、スキャン制御部２５は、メモリアクセス制御部２３から動作要求を受けたときに、スキャン開始アドレス３１２を選択する。そして、スキャン制御部２５は、メモリアクセス制御部２３から停止要求を受けるまで、スキャン開始アドレス３１２からのアドレスインクリメントを実行して、スキャンアドレス３１２Ｓを選択する。
【００５８】
スキャン制御部２５は、メモリアクセス制御部２３から停止要求を受けたときに、アドレスインクリメントを中止する。そして、スキャン制御部２５は、次回にメモリアクセス制御部２３から動作要求を受けたときに、スキャン開始アドレス３１３を選択する。そして、スキャン制御部２５は、次回にメモリアクセス制御部２３から停止要求を受けるまで、スキャン開始アドレス３１３からのアドレスインクリメントを実行して、スキャンアドレス３１３Ｓを選択する。
【００５９】
スキャン制御部２５は、以上に説明した方法により、以後もスキャンアドレスを選択する。すなわち、スキャン制御部２５がメモリアクセス制御部２３から動作要求を受けたときに、各回のアドレススキャンが行なわれる。そして、各回のアドレススキャンにおいて、各スキャン開始アドレスから連続するスキャンアドレスが選択される。図３の場合には図２の場合とは異なり、複数回のアドレススキャンを通して、単一のスキャン開始アドレスから連続するスキャンアドレスが選択されるわけではない。
【００６０】
図４においては、スキャン制御部２５は、メモリアクセス制御部２３から動作要求を受けたときに、スキャン開始アドレス３１４を選択する。そして、スキャン制御部２５は、次回および次々回にメモリアクセス制御部２３から動作要求を受けたときに、それぞれ、スキャン開始アドレス３１５、３１６を選択する。
【００６１】
スキャン制御部２５は、以上に説明した方法により、以後もスキャンアドレスを選択する。すなわち、スキャン制御部２５がメモリアクセス制御部２３から動作要求を受けたときに、各回のアドレススキャンが行なわれる。そして、各回のアドレススキャンにおいて、各スキャン開始アドレスのみが選択される。もっとも、各回のアドレススキャンにおいて、複数のスキャン開始アドレスが選択されてもよい。図４の場合には図２および図３の場合とは異なり、各回のアドレススキャンにおいて、各スキャン開始アドレスから連続するスキャンアドレスが選択されるわけではない。
【００６２】
図２から図４までにおいて、複数回のアドレススキャンにより、全メモリセルアレイ領域のうち、読み出しアドレスに限定されない広範囲の領域について、エラー検出を行なうことができる。また、スキャン開始アドレスから連続するスキャンアドレスを選択する方法として、アドレスインクリメントによる方法のみならず、アドレスデクリメントによる方法などがあげられる。
【００６３】
さらに、スキャン開始アドレスから連続するスキャンアドレスを選択する方法を一般化した方法として、スキャン開始アドレスに関連するスキャンアドレスを選択する方法も利用できる。すなわち、スキャン開始アドレスを選択した後に、そのスキャン開始アドレスと所定の規則に基づいて、スキャンアドレスを選択する。たとえば、メモリセルアレイ３１のページ単位でスキャン開始アドレスおよびスキャンアドレスが選択されるときに、スキャン開始ページから数ページごとにスキャンページを選択する方法がある。また、スキャン開始ページとして１ブロック目の１ページ目を選択したときに、スキャンページとして２ブロック目の１ページ目、３ブロック目の１ページ目、を選択する方法がある。
【００６４】
図２から図４までに示したエラー検出におけるスキャン方法を併用することもできる。たとえば、メモリシステムの電源がオンにされてからオフにされるまで、最初は図２の方法を使用して、次に図３の方法を使用して、最後に図４の方法を使用することもできる。
【００６５】
次に、スキャン制御部２５がスキャン開始アドレスを選択する方法について説明する。本実施の形態においては、スキャン開始アドレスとして、以下のアドレスがあげられる：（１）乱数発生により選択されるアドレス、（２）エラーが発生する可能性が高いアドレス、（３）エラーが過去に発生したアドレス、（４）重要データが格納されるアドレス。
【００６６】
スキャン制御部２５が乱数発生によりスキャン開始アドレスを選択する方法について説明する。スキャン制御部２５は、スキャン開始アドレスとして、何番目のブロックのうち何番目のページなどを選択するかを、乱数発生により決定する。そのため、複数回のアドレススキャンにより、メモリセルアレイ３１の広範囲の領域について、エラー検出を行なうことができる。
【００６７】
ここで、ホストシステム１が発生させた乱数を用いて、スキャン制御部２５がスキャン開始アドレスを選択してもよい。この場合には、ホストシステム１は、メモリコントローラ２に、コマンドおよび乱数を出力すればよい。ホストシステム１は、重要データが格納されるアドレスなどを認識しているならば、その重要データが格納されるアドレスなどから乱数発生によりスキャン開始アドレスを選択してもよい。また、ホストシステム１が出力したコマンドを用いて、スキャン制御部２５がスキャン開始アドレスを選択してもよい。この場合には、スキャン制御部２５は、コマンドのビット列を用いて、乱数を発生させればよい。
【００６８】
スキャン制御部２５がスキャン開始アドレスとして、エラーが発生する可能性が高いアドレスを選択する方法について説明する。このエラーには、“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象によるエラーが含まれる。図５は、ＳＬＣ方式のＮＡＮＤフラッシュメモリにおける“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象を示す図である。図６は、ＭＬＣ方式のＮＡＮＤフラッシュメモリにおける“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象を示す図である。
【００６９】
図５においては、ＳＬＣ方式のメモリセルアレイ３２は、ブロック３２１、３２２、３２３などの複数のブロックから構成されている。また、ブロック３２１、３２２、３２３は、それぞれ、斜線を施したページ３２１Ｐ、３２２Ｐ、３２３Ｐなどの複数のページから構成されている。
【００７０】
メモリコントローラ２がページ３２１Ｐに対して読み出しアクセスするときには、ブロック３２１のうちページ３２１Ｐ以外のページを構成する非選択セルが微弱な書き込み状態にある。すなわち、ブロック３２１のうちページ３２１Ｐ以外のページにおいて、“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象が発生する可能性がある。“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象が発生する様子を、ブロック３２１において四角印を用いて仮想的に示している。
【００７１】
メモリコントローラ２がページ３２２Ｐ、３２３Ｐに対して読み出しアクセスするときには、それぞれ、ブロック３２２、３２３のうちページ３２２Ｐ、３２３Ｐ以外のページにおいて、“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象が発生する可能性がある。“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象が発生する様子を、ブロック３２２、３２３において、それぞれ、丸印、三角印を用いて仮想的に示している。
【００７２】
ページ３２１Ｐへの読み出しアクセスが終了したときに、読み出しアドレスであるページ３２１Ｐのみならず、読み出しアドレス以外のブロック３２１をも、スキャン制御部２５はスキャン開始アドレスとして選択できる。スキャン制御部２５がこのようにスキャン開始アドレスを選択するにあたり、スキャン制御部２５はメモリアクセス制御部２３から読み出しアドレスを通知されるようにすればよい。
【００７３】
図６においては、ＭＬＣ方式のメモリセルアレイ３３は、ブロック３３１、３３２、３３３などの複数のブロックから構成されている。また、ブロック３３２は、斜線を施したページ３３２Ｐなどの複数のページから構成されている。
【００７４】
メモリコントローラ２がページ３３２Ｐに対して読み出しアクセスするときには、ブロック３３２のうちページ３３２Ｐ以外のページ、および、ブロック３３２以外の関連ブロックにおいて、“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象が発生する可能性がある。図６においては、ブロック３３２以外の関連ブロックとして、ブロック３３１、３３３が記載されている。“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象が発生する様子を、ブロック３３１、３３２、３３３において、それぞれ、四角印、丸印、三角印を用いて仮想的に示している。
【００７５】
ページ３３２Ｐへの読み出しアクセスが終了したときに、読み出しアドレスであるページ３３２Ｐのみならず、読み出しアドレス以外のブロック３３１、３３２、３３３をも、スキャン制御部２５はスキャン開始アドレスとして選択できる。図６の場合も図５の場合と同様に、スキャン制御部２５はメモリアクセス制御部２３から読み出しアドレスを通知されるようにすればよい。また、“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象が読み出しブロック以外の関連ブロックに拡散する可能性があることを示す拡散テーブルを、スキャン制御部２５またはメモリコントローラ２の他の構成要素などが備えるようにすればよい。
【００７６】
スキャン制御部２５がスキャン開始アドレスとして、エラーが過去に発生したアドレスを選択する方法について説明する。このエラーには、“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象によるエラーが含まれる。エラーが過去に発生したアドレスについての情報を、スキャン制御部２５はエラー情報保存部２７などから取得すればよい。そして、エラーが過去に最も頻繁に発生したアドレスなどを、スキャン制御部２５はスキャン開始アドレスとして選択すればよい。
【００７７】
スキャン制御部２５がスキャン開始アドレスとして、重要データが格納されるアドレスを選択する方法について説明する。重要データが格納されるアドレスについての情報を、スキャン制御部２５またはメモリコントローラ２の他の構成要素などが備えるようにすればよい。そして、最も重要であると想定されるデータが格納されるアドレスなどを、スキャン制御部２５はスキャン開始アドレスとして選択すればよい。
【００７８】
以上に説明したように、スキャン制御部２５がスキャン開始アドレスからスキャンを行なう方法として、図２から図４までに説明した３種類の方法などがあげられる。また、スキャン制御部２５がスキャン開始アドレスを選択する方法として、直前に説明した４種類の方法などがあげられる。そのため、スキャン制御部２５がエラー検出を行なうアドレスを選択する方法として、１２種類の方法などがあげられる。これらの１２種類の方法などは、目的に応じて使い分けることができる。
【００７９】
たとえば、スキャン制御部２５が乱数発生によりスキャン開始アドレスを選択して、図２の方法によりアドレススキャンを行なうときには、読み出しアドレスに限定されない広範囲の領域について、簡易にエラー検出を行なうことができる。また、スキャン制御部２５がスキャン開始アドレスとして、重要データが格納されるアドレスを選択して、図４の方法によりアドレススキャンを行なうときには、重要データが格納されるアドレスについて、集中的にエラー検出を行なうことができる。
【００８０】
＜処理の流れ＞
次に、処理の流れについて以下に示す順序で説明する：（１）コマンド発行、（２）データ取得、（３）エラー検出、（４）エラー通知。図７は、ホストシステム１がデータを取得する処理の流れを示す図である。図８は、メモリコントローラ２がエラーを検出する処理の流れを示す図である。以下に示す処理の流れは、メモリセルアレイ３１に対して読み出しアクセスが行なわれる場合についての処理の流れである。しかし、ほぼ同様な処理の流れは、メモリセルアレイ３１に対して書き込みアクセスなどが行なわれる場合においても実行できる。
【００８１】
ＣＰＵ１１は、読み出しコマンドまたはＳｔａｔｕｓ  Ｒｅａｄコマンドを、アクセスコントローラ１２にセットする（ステップＳ１１）。そして、ＣＰＵ１１は、読み出しコマンドまたはＳｔａｔｕｓ  Ｒｅａｄコマンドの発行命令を、アクセスコントローラ１２に出力する（ステップＳ１２）。コマンド解析部２２は、ホストシステム１からホストインターフェース２１を介して、読み出しコマンドまたはＳｔａｔｕｓ  Ｒｅａｄコマンドを入力する（ステップＳ１３）。
【００８２】
コマンド解析部２２は、読み出しコマンドを入力したと判断すれば、読み出しコマンドをメモリアクセス制御部２３に出力する（ステップＳ１４における「読み出しコマンド」）。また、コマンド解析部２２は、Ｓｔａｔｕｓ  Ｒｅａｄコマンドを入力したと判断すれば、Ｓｔａｔｕｓ  Ｒｅａｄコマンドをスキャン制御部２５に出力する（ステップＳ１４における「Ｓｔａｔｕｓ  Ｒｅａｄコマンド」）。
【００８３】
まず、コマンド解析部２２が読み出しコマンドを入力した場合について説明する（ステップＳ１４における「読み出しコマンド」）。メモリアクセス制御部２３は、読み出しコマンドをデコードして、読み出しアドレスを抽出する（ステップＳ２１）。そして、メモリアクセス制御部２３は、メモリインターフェース２８を介してメモリ３に、読み出しアドレスを出力する（ステップＳ２２）。
【００８４】
出力バッファ部２４は、メモリ３からメモリインターフェース２８を介して、読み出しデータを入力する（ステップＳ２３）。そして、出力バッファ部２４は、ホストインターフェース２１を介してホストシステム１に、読み出しデータを出力する（ステップＳ２４）。ＣＰＵ１１は、アクセスコントローラ１２から読み出しデータを入力して（ステップＳ２５）、読み出しデータを処理する。
【００８５】
メモリアクセス制御部２３は、出力バッファ部２４がホストシステム１に読み出しデータを出力しているかどうかを、出力監視線により監視している。出力バッファ部２４がホストシステム１に読み出しデータを出力しているときには、メモリセルアレイ３１への読み出しアクセスは行なわれていない。メモリアクセス制御部２３は、出力バッファ部２４がホストシステム１に読み出しデータを出力していることを確認したときに、スキャン制御部２５に動作要求を行なう。スキャン制御部２５は、メモリアクセス制御部２３からの動作要求を受けて、スキャン制御を開始する（ステップＳ４１）。
【００８６】
もっとも、出力バッファ部２４がホストシステム１に読み出しデータを出力しているときであっても、スキャン制御部２５がエラー検出スキャンを行なうための時間を確保できないことがある。たとえば、ホストシステム１が一連の流れとして連続して出力する読み出しコマンドを、メモリアクセス制御部２３が入力する場合である。この場合には、メモリアクセス制御部２３は読み出しコマンドが連続して出力されるものであると判断することにより、スキャン制御部２５に動作要求を行なわないようにすればよい。
【００８７】
ここで、スキャン制御部２５がスキャン制御を行なう場合として、出力バッファ部２４がホストシステム１に読み出しデータを出力している場合のほかに、以下に掲げる場合などがある。まず、出力バッファ部２４がメモリ３に書き込みデータを出力していない場合がある。この場合には、メモリアクセス制御部２３は、出力バッファ部２４がメモリ３に書き込みデータを出力していないことを確認したときに、スキャン制御部２５に動作要求を行なう。
【００８８】
次に、ホストシステム１がメモリコントローラ２に、メモリセルアレイ３１への読み出しアクセス、書き込みアクセスなどを要求していない場合がある。また、ホストシステム１の電源がオンまたはオフにされる場合がある。さらに、ホストシステム１がメモリコントローラ２に、メモリセルアレイ３１以外のバックアップデバイスなどへのアクセスを要求している場合がある。これらの場合であっても、メモリコントローラ２がＣＰＵ１１を監視するＣＰＵ監視部を備えることにより、ＣＰＵ監視部はスキャン制御部２５に動作要求を行なう。
【００８９】
スキャン制御部２５は、図２から図６を用いて説明した、エラー検出を行なうアドレスを選択する方法により、スキャンアドレスを生成する（ステップＳ４２）。また、スキャン制御部２５は、スキャンアドレスを一時的に格納する。そして、スキャン制御部２５は、メモリインターフェース２８を介してメモリ３に、スキャンアドレスを出力する（ステップＳ４３）。
【００９０】
エラー検出部２６は、メモリ３からメモリインターフェース２８を介して、エラー検出対象であるスキャンデータを入力する（ステップＳ４４）。そして、エラー検出部２６は、スキャンデータについてエラー検出を行なう（ステップＳ４５）。ここで、エラー検出部２６は、スキャン制御部２５にエラー情報を通知する。
【００９１】
スキャン制御部２５は、スキャンデータについてエラーが検出されなければ、一時的に格納したスキャンアドレスを消去する。
【００９２】
スキャン制御部２５は、スキャンデータについてエラーが検出されたならば、一時的に格納したスキャンアドレスについてエラーが検出された旨を、エラー情報保存部２７に通知する（ステップＳ４６）。そして、スキャン制御部２５は、一時的に格納したスキャンアドレスを消去する。
【００９３】
次に、コマンド解析部２２がＳｔａｔｕｓ  Ｒｅａｄコマンドを入力した場合について説明する（ステップＳ１４における「Ｓｔａｔｕｓ  Ｒｅａｄコマンド」）。スキャン制御部２５は、エラー情報保存部２７からエラー情報を取得する。そして、スキャン制御部２５は、ホストインターフェース２１を介してホストシステム１に、エラー情報としてのＳｔａｔｕｓデータを出力する（ステップＳ３１）。ＣＰＵ１１は、アクセスコントローラ１２からＳｔａｔｕｓデータを入力して（ステップＳ３２）、その後のエラー訂正に備える。
【００９４】
ここで、ホストシステム１がメモリコントローラ２にＳｔａｔｕｓ  Ｒｅａｄコマンドを出力する場合として、以下に掲げる場合などがある。まず、ホストシステム１において周期的なトリガが発生する場合がある。次に、ホストシステム１の電源がオンまたはオフにされる場合がある。さらに、ホストシステム１が読み出しコマンドを出力した回数が所定回数を超えた場合がある。
【００９５】
また、スキャン制御部２５は、エラー検出部２６からエラー情報を通知されたことを、ホストシステム１に割り込みを発生させて通知してもよい。ホストシステム１は、Ｓｔａｔｕｓ  Ｒｅａｄコマンドをスキャン制御部２５に出力することにより、エラー情報としてのＳｔａｔｕｓデータを入力できる。また、ホストシステム１がＳｔａｔｕｓデータを入力するときに、スキャン制御部２５を介する入力ではなく、エラー情報保存部２７からの直接的な入力であってもよい。
【００９６】
さらに、スキャン制御部２５、エラー検出部２６、エラー情報保存部２７は、ホストシステム１に配置されていてもよい。この場合には、ホストシステム１は、読み出しコマンド、書き込みコマンドをメモリコントローラ２に出力していないときなどに、スキャン制御部２５においてスキャンアドレスをメモリコントローラ２に出力する。そして、ホストシステム１は、エラー検出部２６においてスキャンデータについてエラー検出を行ない、エラー情報保存部２７においてエラー情報を保存する。
【００９７】
｛第２の実施の形態｝
第１の実施の形態においては、エラー検出部２６は、スキャンアドレスにおいて格納されるデータについて、エラー検出を行なう。そして、ホストシステム１は、スキャンアドレスにおいて格納されるデータについて、エラー情報を取得する。第２の実施の形態においては、エラー検出部２６は、スキャンアドレスおよび読み出しアドレスにおいて格納されるデータについて、エラー検出を行なう。ホストシステム１は、スキャンアドレスおよび読み出しアドレスにおいて格納されるデータについて、エラー情報を取得する。
【００９８】
まず、図９を用いて、第２の実施の形態に係るメモリシステムについて説明する。特に、図１で示した第１の実施の形態に係るメモリシステム、および、図９で示した第２の実施の形態に係るメモリシステムの相違点について説明する。
【００９９】
メモリアクセス制御部２３は、読み出しアドレスをメモリ３のみならず、スキャン制御部２５にも出力する。スキャン制御部２５は、読み出しアドレスをメモリアクセス制御部２３から入力して、一時的に格納する。第２の実施の形態においても、第１の実施の形態と同様に、スキャン制御部２５は、スキャンアドレスを自身において選択して、一時的に格納する。
【０１００】
エラー検出部２６は、スキャンデータのみならず、読み出しデータをもメモリ３から入力する。エラー検出部２６は、スキャンデータおよび読み出しデータについて、エラー検出を行なう。エラー検出部２６は、スキャンデータおよび読み出しデータについてのエラー情報をスキャン制御部２５に通知する。スキャン制御部２５は、スキャンデータおよび読み出しデータについてのエラー情報をエラー情報保存部２７に保存する。
【０１０１】
次に、図１０を用いて、メモリコントローラ２が読み出しデータについてエラーを検出する処理の流れについて説明する。ＣＰＵ１１が読み出しコマンドをアクセスコントローラ１２にセットしてから（ステップＳ１１）、メモリアクセス制御部２３が読み出しアドレスを抽出するまで（ステップＳ２１）の処理の流れは、第１の実施の形態と同様である。
【０１０２】
第１の実施の形態においては、メモリアクセス制御部２３は、読み出しアドレスをメモリ３のみに出力する（ステップＳ２２）。しかし、第２の実施の形態においては、メモリアクセス制御部２３は、読み出しアドレスをメモリ３のみならず（ステップＳ２２）、スキャン制御部２５にも出力する。スキャン制御部２５は、読み出しアドレスをメモリアクセス制御部２３から入力して、一時的に格納する。
【０１０３】
出力バッファ部２４が読み出しデータを入力してから（ステップＳ２３）、ＣＰＵ１１が読み出しデータをアクセスコントローラ１２から入力するまで（ステップＳ２５）の処理の流れは、第１の実施の形態と同様である。
【０１０４】
エラー検出部２６は、読み出しデータをメモリ３から入力する（ステップＳ５１）。エラー検出部２６は、読み出しデータについてエラー検出を行なう（ステップＳ５２）。エラー検出部２６は、読み出しデータについてのエラー情報をスキャン制御部２５に通知する。
【０１０５】
スキャン制御部２５は、読み出しデータについてエラーが検出されなければ、一時的に格納した読み出しアドレスを消去する。
【０１０６】
スキャン制御部２５は、読み出しデータについてエラーが検出されたならば、一時的に格納した読み出しアドレスについてエラーが検出された旨を、エラー情報保存部２７に通知する（ステップＳ５３）。そして、スキャン制御部２５は、一時的に格納した読み出しアドレスを消去する。
【０１０７】
スキャン制御部２５がスキャン制御を開始してから（ステップＳ４１）、スキャン制御部２５がスキャンアドレスについてエラーが検出された旨をエラー情報保存部２７に通知するまで（ステップＳ４６）の処理の流れは、第１の実施の形態と同様である。ＣＰＵ１１がＳｔａｔｕｓ  Ｒｅａｄコマンドをアクセスコントローラ１２にセットしてから（ステップＳ１１）、ＣＰＵ１１がＳｔａｔｕｓデータをアクセスコントローラ１２から入力するまで（ステップＳ３２）の処理の流れは、第１の実施の形態と同様である。
【０１０８】
ホストシステム１は、スキャンアドレスおよび読み出しアドレスにおいて格納されるデータについてのエラー情報を、単一のエラー情報保存部２７から取得できる。ホストシステム１は、このエラー情報に基づいて、その後のエラー訂正に備えることができる。
【図面の簡単な説明】
【０１０９】
【図１】メモリシステムの構成要素を示すブロック図である。
【図２】メモリセルアレイにおけるエラー検出スキャンを示す図である。
【図３】メモリセルアレイにおけるエラー検出スキャンを示す図である。
【図４】メモリセルアレイにおけるエラー検出スキャンを示す図である。
【図５】ＳＬＣ方式のＮＡＮＤフラッシュメモリにおける“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象を示す図である。
【図６】ＭＬＣ方式のＮＡＮＤフラッシュメモリにおける“Ｒｅａｄ  Ｄｉｓｔｕｒｂ”現象を示す図である。
【図７】ホストシステムがデータを取得する処理の流れを示す図である。
【図８】メモリコントローラがエラーを検出する処理の流れを示す図である。
【図９】メモリシステムの構成要素を示すブロック図である。
【図１０】メモリコントローラがエラーを検出する処理の流れを示す図である。
【図１１】ＮＡＮＤフラッシュメモリの模式図である。
【符号の説明】
【０１１０】
１  ホストシステム
２  メモリコントローラ
３  メモリ
１１  ＣＰＵ
１２  アクセスコントローラ
２１  ホストインターフェース
２２  コマンド解析部
２３  メモリアクセス制御部
２４  出力バッファ部
２５  スキャン制御部
２６  エラー検出部
２７  エラー情報保存部
２８  メモリインターフェース
３１  メモリセルアレイ
【図１】
0005602984.tif 000002
【図２】
0005602984.tif 000003
【図３】
0005602984.tif 000004
【図４】
0005602984.tif 000005
【図５】
0005602984.tif 000006
【図６】
0005602984.tif 000007
【図７】
0005602984.tif 000008
【図８】
0005602984.tif 000009
【図９】
0005602984.tif 000010
【図１０】
0005602984.tif 000011
【図１１】
0005602984.tif 000012