(57)【要約】【課題】フラッシュメモリに格納されるデータの信頼性を確保するとともに、構成を簡略化することができるメモリコントローラを提供することを課題とする。【解決手段】メモリコントローラ３は、読み出しコマンドを受け付けた場合、通常アクセス領域４１から格納データ５０を読み出し、格納データ５０のエラーを訂正する。格納データ５０のエラーがＥＣＣ回路３４のエラー訂正能力の範囲内である場合、メモリコントローラ３は、エラー訂正された格納データ５０に含まれる実体データを出力する。格納データ５０のエラーがエラー訂正能力を超えている場合、メモリコントローラ３は、格納データ５０のバックアップデータである格納データ７０を、バックアップ領域４２から読み出し、格納データ７０に含まれる実体データを出力する。ホストコントローラ３は、格納データ７０を用いて、通常アクセス領域４１に格納された格納データ５０を修復する。【選択図】図１
2012252557.tif 000002
【特許請求の範囲】
【請求項１】
再書き込み可能な不揮発性の半導体メモリに対するアクセスを制御するメモリコントローラであって、
ホスト装置からの要求に応じて、前記ホスト装置が前記メモリコントローラを介してアクセス可能な前記半導体メモリに設定された通常アクセス領域から第１データを読み出すメモリインタフェースと、
前記メモリインタフェースにより読み出された第１データのエラーを訂正するエラー訂正部と、
前記読み出された第１データのエラーが前記エラー訂正部のエラー訂正能力を超えているか否かを判定する判定部と、
前記読み出された第１データのエラーが前記エラー訂正能力を超えていない場合、エラー訂正された第１データに基づいて第１出力データを作成して前記ホスト装置に出力する第１出力制御部と、
前記読み出された第１データのエラーが前記エラー訂正能力を超えている場合、前記通常アクセス領域のバックアップとして用いられる前記半導体メモリに設定されるバックアップ領域から、前記第１データのバックアップデータである第２データを読み出し、読み出した第２データに基づいて第２出力データを作成して前記ホスト装置に出力する第２出力制御部と、
を備えるメモリコントローラ。
【請求項２】
請求項１に記載のメモリコントローラであって、
前記エラー訂正部は、前記読み出した第２データのエラーを訂正し、
前記第２出力制御部は、エラー訂正された第２データに基づいて前記第２出力データを作成するメモリコントローラ。
【請求項３】
請求項１または請求項２に記載のメモリコントローラであって、さらに、
前記読み出された第１データのエラーが前記エラー訂正能力を超えている場合、前記第２データを前記バックアップ領域から読み出し、読み出した第２データを用いて、前記通常アクセス領域に格納されている第１データを修復するデータ修復部、
を備えるメモリコントローラ。
【請求項４】
請求項１ないし請求項３のいずれかに記載のメモリコントローラであって、
前記第１データは、
前記ホスト装置により処理される実体データと、
前記実体データから計算され、前記実体データに付加される付加ハッシュ値と、
を含み、
前記判定部は、エラー訂正された実体データからハッシュ値を計算し、計算したハッシュ値と、エラー訂正された第１データに含まれる付加ハッシュ値とが異なる場合、前記読み出された第１データのエラーが全て訂正されていないと判定するメモリコントローラ。
【請求項５】
請求項１ないし請求項４のいずれかに記載のメモリコントローラであって、
前記第２出力制御部は、前記第２出力データとともに、前記通常アクセス領域に格納されているデータの修復が必要であることを前記ホスト装置に通知し、
前記データ修復部は、前記ホスト装置からデータの修復を指示された場合、前記通常アクセス領域に格納されている第１データを修復するメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリからデータが繰り返し読み出されることにより、データが意図せず書き換えられるリードディスターブ現象に対処する技術に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリは、再書き込み可能な不揮発性半導体メモリである。ＮＡＮＤフラッシュメモリは、高集積化を実現しながら、低コスト化が図られているため、ＳＤメモリカードなどの形態で広く普及している。
【０００３】
ＮＡＮＤフラッシュメモリにおいては、特定のセルが繰り返し読み出されることにより、記憶データが意図せず書き換えられる現象が生じることが分かっている。この現象は、リードディスターブ（Ｒｅａｄ  Ｄｉｓｔｕｒｂ）現象と呼ばれており、ＮＡＮＤフラッシュメモリを利用する上での課題となっている。
【０００４】
特定のセルに対する読み出し処理が繰り返し行われた場合であっても、一旦、そのセルを含む領域に対してデータの更新が行われれば、セルの状態が修復されるため、リードディスターブの発生が情報処理に影響を与えることを回避できる。しかし、特定のセルに対して書き込み処理が行われず、読み出し処理だけが繰り返し行われる場合、リードディスターブの発生する可能性が高くなり、情報処理に影響を与える可能性もある。
【０００５】
最近では、ＮＡＮＤフラッシュメモリは、情報処理装置のプログラムメモリとしてＲＯＭのような役割で利用されるケースが多くなっている。ＮＡＮＤフラッシュメモリがそのように利用された場合、連続的な読み出し処理のみが行われるため、リードディスターブ現象の発生可能性が高くなる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２２３８７６号公報
【特許文献２】特開２００８−１８１３８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＮＡＮＤフラッシュメモリに記録されたデータを再書き込み（リフレッシュ）することにより、リードディスターブ現象の発生を防ぐことができる。特許文献１，２には、リフレッシュ対象の領域を決定する技術が記載されている。特許文献１に記載されているメモリ管理方法では、ブロックごとの読み出し回数が、テーブルに記録される。読み出し回数が閾値を超えたブロックが、リフレッシュ対象として決定される。特許文献２には、特許文献１と同様の方法を用いて、リフレッシュ対象のブロックを決定する。
【０００８】
リフレッシュにより、リードディスターブ現象の発生を防ぐ場合、以下のような問題もある。リフレッシュでは、リフレッシュ対象のブロックからデータを予め読み出した上で、リフレッシュ対象のブロックに記録されたデータを消去する必要がある。ブロックのデータが消去されたタイミングで、電源が遮断された場合、予め読み出したデータが失われ、リフレッシュ対象のブロックのデータを復元できないおそれがある。
【０００９】
特許文献１において、ブロックごとの読み出し回数を記録したテーブルは、メモリコントローラなどに設けられた不揮発性メモリなどに格納される。リフレッシュ中に電源が遮断された場合と同様に、テーブルの更新中に電源が遮断された場合、テーブルに記録された各ブロックの読み出し回数を保持できなくなるおそれがある。
【００１０】
このため、リフレッシュによりリードディスターブ現象の発生を防ぐ場合、リフレッシュ中に電源が遮断された場合に備えた対策をメモリコントローラに施さなければならない。つまり、リフレッシュによりリードディスターブ現象を防ぐ場合、リフレッシュの対象の決定や、電源の遮断に対応するために、メモリコントローラの構成が複雑になるという問題があった。
【００１１】
上記問題点に鑑み、本発明は、フラッシュメモリに格納するデータの信頼性を確保するとともに、構成を簡略化することができるメモリコントローラを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するため、請求項１記載の発明は、再書き込み可能な不揮発性の半導体メモリに対するアクセスを制御するメモリコントローラであって、ホスト装置からの要求に応じて、前記ホスト装置が前記メモリコントローラを介してアクセス可能な前記半導体メモリに設定された通常アクセス領域から第１データを読み出すメモリインタフェースと、前記メモリインタフェースにより読み出された第１データのエラーを訂正するエラー訂正部と、前記読み出された第１データのエラーが前記エラー訂正部のエラー訂正能力を超えているか否かを判定する判定部と、前記読み出された第１データのエラーが前記エラー訂正能力を超えていない場合、エラー訂正された第１データに基づいて第１出力データを作成して前記ホスト装置に出力する第１出力制御部と、前記読み出された第１データのエラーが前記エラー訂正能力を超えている場合、前記通常アクセス領域のバックアップとして用いられる前記半導体メモリに設定されるバックアップ領域から、前記第１データのバックアップデータである第２データを読み出し、読み出した第２データに基づいて第２出力データを作成して前記ホスト装置に出力する第２出力制御部と、を備える。
【００１３】
請求項２記載の発明は、請求項１に記載のメモリコントローラであって、前記エラー訂正部は、前記読み出した第２データのエラーを訂正し、前記第２出力制御部は、エラー訂正された第２データに基づいて前記第２出力データを作成する。
【００１４】
請求項３記載の発明は、請求項１または請求項２に記載のメモリコントローラであって、さらに、前記読み出された第１データのエラーが前記エラー訂正能力を超えている場合、前記第２データを前記バックアップ領域から読み出し、読み出した第２データを用いて、前記通常アクセス領域に格納されている第１データを修復するデータ修復部、を備える。
【００１５】
請求項４記載の発明は、請求項１ないし請求項３のいずれかに記載のメモリコントローラであって、前記第１データは、前記ホスト装置により処理される実体データと、前記実体データから計算され、前記実体データに付加される付加ハッシュ値と、を含み、前記判定部は、エラー訂正された実体データからハッシュ値を計算し、計算したハッシュ値と、エラー訂正された第１データに含まれる付加ハッシュ値とが異なる場合、前記読み出された第１データのエラーが全て訂正されていないと判定する。
【００１６】
請求項５記載の発明は、請求項１ないし請求項４のいずれかに記載のメモリコントローラであって、前記第２出力制御部は、前記第２出力データとともに、前記通常アクセス領域に格納されているデータの修復が必要であることを前記ホスト装置に通知し、前記データ修復部は、前記ホスト装置からデータの修復を指示された場合、前記通常アクセス領域に格納されている第１データを修復する。
【発明の効果】
【００１７】
本発明のメモリコントローラは、ホスト装置の要求に応じて通常アクセス領域から第１データを読み出した場合、読み出した第１データのエラーがエラー訂正部のエラー訂正能力を超えているか否かを判定する。メモリコントローラは、第１データのエラーがエラー訂正能力を超えている場合、第１データのバックアップデータである第２データをバックアップ領域から読み出し、第２データをホスト装置へ出力する。これにより、通常アクセス領域をリフレッシュすることなく、半導体メモリに格納されるデータの信頼性を確保することができる。
【００１８】
また、本発明のメモリコントローラは、第１データのエラーがエラー訂正能力を超えている場合、第２データを用いて、通常アクセス領域に格納された第１データを修復する。通常アクセス領域に格納されている第１データの消去中に電源が遮断され、第１データの内容が変化したとしても、バックアップ領域に格納された第２データは、電源の遮断の影響を受けない。したがって、本発明のメモリコントローラは、電源が再び投入された後に、第２データを用いて第１データを修復することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施の形態による情報処理システムの構成を示す機能ブロック図である。
【図２】図１に示すメモリの構成を示す図である。
【図３】図１に示すメモリコントローラの動作を示すフローチャートである。
【図４】図１に示す通常アクセス領域のページとバックアップ領域のページの対応を示す図である。
【図５】図１に示すメモリの各ページに格納されるデータの構造を示す図である。
【図６】図１に示すメモリコントローラの動作を示すフローチャートである。
【発明を実施するための形態】
【００２０】
以下、図面を参照しつつ、本発明の実施の形態について説明する。
【００２１】
｛１．全体構成｝
図１は、本実施の形態に係る情報処理システム１００の機能ブロック図である。情報処理システム１００は、ホスト装置１と、メモリシステム２とを備える。
【００２２】
ホスト装置１は、たとえば、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）又は携帯型の端末などである。メモリシステム２は、ホスト装置１に着脱可能なＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリや、メモリカードなどである。
【００２３】
メモリシステム２は、メモリコントローラ３と、メモリ４とを備える。メモリコントローラ３は、ホスト装置１の要求に応じて、メモリ４に対するデータの書き込み、メモリ４からのデータの読み出しを行う。つまり、メモリコントローラ３は、メモリ４に対するアクセスを制御する。
【００２４】
メモリ４は、再書き込み可能な不揮発性の半導体メモリである。本実施の形態において、メモリ４は、ＮＡＮＤフラッシュメモリである。メモリ４は、通常アクセス領域４１と、バックアップ領域４２とを有する。通常アクセス領域４１は、メモリコントローラ３がホスト装置１から各種コマンドを受け付けたときにアクセスする領域である。バックアップ領域４２は、通常アクセス領域４１から読み出したデータのエラーを訂正できないときなどにメモリコントローラ３がアクセスする領域である。通常アクセス領域４１及びバックアップ領域４２の詳細は後述する。
【００２５】
｛２．メモリコントローラ３の構成｝
以下、メモリコントローラ３の構成について説明する。メモリコントローラ３は、制御部３０と、ホストインタフェース３１と、メモリインタフェース３２と、アドレス変換部３３と、ＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔ）回路３４と、バッファ３５と、判定部３６とを備える。
【００２６】
制御部３０は、メモリコントローラ３の各機能部を制御する。制御部３０は、修復アドレス保持部３７と、対応テーブル３８と、出力制御部３９とを保持する。修復アドレス保持部３７は、通常アクセス領域４１のブロックのうち、修復が必要なページのアドレスを保持する。対応テーブル３８は、通常アクセス領域４１のページのアドレスと、バックアップ領域４２のページのアドレスとの対応関係を記録したテーブルである。出力制御部３９は、メモリ４から読み出したデータの出力を制御する。
【００２７】
ホストインタフェース３１は、ホスト装置１とメモリコントローラ３との間で、コマンドまたはデータの入出力を行うインタフェースである。つまり、ホストインタフェース３１は、ホスト装置１から、読み出しコマンドや書き込みコマンドなどを入力する。ホストインタフェース３１は、ホスト装置１に対して、メモリ４から読み出されたデータなどを出力する。
【００２８】
メモリインタフェース３２は、メモリコントローラ３とメモリ４との間で、コマンドまたはデータの入出力を行うインタフェースである。つまり、メモリインタフェース３２は、メモリ４に対して、コマンド及び書き込み用のデータなどを出力する。メモリインタフェース３２は、メモリコントローラ３に対して、メモリ４から読み出したデータなどを出力する。
【００２９】
アドレス変換部３３は、ホスト装置１からコマンドとともに入力された論理アドレスを、メモリ４の物理アドレスに変換する。アドレス変換部３３は、論理アドレスと物理アドレスとの対応を示す変換テーブルを保持し、変換テーブルを用いてアドレスを変換する。
【００３０】
ＥＣＣ回路３４は、メモリ４から読み出されたデータからエラーを検出するとともに、検出したエラーを訂正する回路である。たとえば、ＥＣＣ回路３４は、１０２４Ｂｙｔｅのデータに対して、１０ｂｉｔのエラーを検出および訂正可能である。
【００３１】
バッファ３５は、ＥＣＣ回路３４によりエラー訂正されたデータを格納する。判定部３６は、ハッシュ関数を用いて、ＥＣＣ回路３４のエラー訂正能力を超えるエラーがメモリ４から読み出されたデータに発生しているか否かを判定する。
【００３２】
｛３．メモリ４の構成｝
図２は、メモリ４の構成を示す図である。具体的には、メモリ４は、１枚のダイで構成される。ダイは、複数のブロックを含む。図２に示す例では、ダイは、Ｋ個のブロックを含む。ブロックは、複数のページを含む。図２に示す例では、ブロックは、Ｚ個のページを含む。
【００３３】
ページは、メモリ４におけるデータの読み出し単位及び書き込み単位である。メモリコントローラ３は、メモリ４に記録されているデータをページ単位で読み出し、書き込みを指示されたデータをページ単位でメモリ４に書き込むことができる。
【００３４】
ブロックは、メモリ４におけるデータの消去単位である。本実施の形態において、メモリ４に書き込まれたデータの修復は、ブロック単位で行われる。データを修復する場合、メモリ４に書き込まれたデータを一度消去する必要があるためである。メモリコントローラ３が実行するデータ修復処理の詳細は、後述する。
【００３５】
メモリ４において、ブロック＃０〜＃Ｊ−１が通常アクセス領域４１を構成する。ブロック＃Ｊ〜ブロック＃Ｋ−１がバックアップ領域４２を構成する。本実施の形態では、通常アクセス領域４１のブロックと、バックアップ領域のブロックとが１対１で対応する。
【００３６】
バックアップ領域４２は、通常アクセス領域４１のブロックの一部に対応していてもよい。たとえば、バックアップ領域４２は、通常アクセス領域４１のうち、読み出し頻度が高と想定される領域、重量な情報が格納される領域、メモリ４の構造上エラーが発生しやすい領域などに対応させることが考えられる。また、メモリ４は、複数のダイを有し、ダイごとに通常アクセス領域４１とバックアップ領域４２とを割り当ててもよい。
【００３７】
｛４．動作概要｝
以下、メモリコントローラ３の動作の概略を説明する。メモリコントローラ３は、ホスト装置１から読み出しコマンドを入力した場合、通常アクセス領域４１からデータを読み出す読み出し処理を実行する。メモリコントローラ３は、読み出しコマンドで指定されたアドレス（指定アドレス）に基づいて、読み出し対象のページを特定する。指定アドレスは、通常アクセス領域４１のページのアドレスである。つまり、ホスト装置１が、メモリコントローラ３を介してメモリ４にアクセスすることができる領域は、通常アクセス領域に限定される。
【００３８】
メモリコントローラ３は、通常アクセス領域４１からデータを読み出す。判定部３６は、通常アクセス領域４１から読み出されたデータに、ＥＣＣ回路３４のエラー訂正能力を超えるエラーが発生しているか否かを判定する。エラー訂正能力を超えるエラーが発生していない場合、出力制御部３９は、通常アクセス領域４１から読み出されたデータをホスト装置１へ出力する。
【００３９】
一方、エラー訂正能力を超えるエラーが発生した場合、メモリコントローラ３は、対応テーブル３８を用いて、指定アドレスに対応するバックアップ領域４２のページを特定する。出力制御部３９は、特定したバックアップ領域４２のページからデータを読み出し、読み出したデータをホスト装置１へ出力する。修復アドレス保持部３７は、指定アドレスを修復対象アドレスとして保持する。
【００４０】
メモリコントローラ３は、指定アドレスのページを含むブロックのデータを修復する修復処理を実行する。メモリコントローラ３は、修復対象アドレスと対応テーブル３８とを用いて、修復対象のブロックに対応するバックアップ領域４２のブロックを特定する。メモリコントローラ３は、特定したバックアップ領域４２のブロックからデータを読み出す。メモリコントローラ３は、読み出したデータを、修復対象のブロックに再書き込みする。
【００４１】
このように、メモリコントローラ３は、バックアップ領域４２に記録されたデータを用いて、通常アクセス領域４１に記録されたデータを修復する。このため、メモリコントローラ３は、リードディスターブ現象の発生を防ぐために、通常アクセス領域４１のブロックに記録されたデータをリフレッシュしなくてもよい。したがって、リフレッシュの際に必要な、電源の遮断に対応するための機能をメモリコントローラ３に実装しなくてもよい。
【００４２】
｛５．メモリコントローラ３の動作｝
以下、メモリコントローラ３が実行する読み出し処理及び修復処理について詳しく説明する。
【００４３】
｛５．１．読み出し処理｝
図３は、読み出し処理を実行するメモリコントローラ３の動作を示すフローチャートである。図４は、通常アクセス領域４１のページ、ブロックと、バックアップ領域４２のページ、ブロックとの対応を示す図である。対応テーブル３８（図１参照）は、通常アクセス領域４１として設定されたページ４１Ｐの論理アドレスと、バックアップ領域４２として設定されたページ４２Ｐの論理アドレスとを対応付けている。したがって、ページ４１Ｐを含むブロック４１Ｂに対応するバックアップ領域４２のブロックは、ページ４２Ｐを含むブロック４２Ｂとなる。
【００４４】
図３及び図４を参照しながら、ホスト装置１が通常アクセス領域４１のページ４１Ｐの読み出しを要求する場合を例にして、メモリコントローラ３の動作を説明する。メモリコントローラ３は、ホスト装置１から、ページ４１Ｐのデータの読み出しを要求する読み出しコマンドを入力する。これにより、図３に示す処理が開始される。読み出しコマンドは、ページ４１Ｐの論理アドレスを含む。
【００４５】
ホスト装置１は、読み出しを要求する際に、バックアップ領域４２の論理アドレスを指定することができない。つまり、ホスト装置１は、通常アクセス領域４１に対するアクセスのみが可能である。バックアップ領域４２からの読み出し回数を削減することにより、バックアップ領域４２におけるリードディスターブ現象の発生を防いでいる。
【００４６】
メモリコントローラ３は、読み出しコマンドを受け付けた場合、通常アクセス領域４１のページ４１Ｐからデータを読み出す。具体的には、アドレス変換部３３は、ページ４１Ｐの論理アドレスを物理アドレスに変換する（ステップＳ１０）。メモリインタフェース３２は、ページ４１Ｐの物理アドレスに対する読み出しコマンドをメモリ４に入力する。これにより、格納データ５０が、ページ４１Ｐから読み出される（ステップＳ１１）。
【００４７】
メモリインタフェース３２は、読み出した格納データ５０をＥＣＣ回路３４へ出力する。ＥＣＣ回路３４は、格納データ５０で発生したエラーを検出し、検出したエラーを訂正するエラー訂正処理を実行する（ステップＳ１２）。
【００４８】
図５は、格納データ５０のフォーマットを示す図である。実体データ５１は、ホスト装置１により処理されるデータの実体である。ハッシュ値５２は、実体データ５１のハッシュ値であり、実体データ５１に付加される冗長データである。ハッシュ値５２は、メモリ４に書き込まれる前に、エラーのない実体データ５１から算出される。シンドローム５３は、格納データ５０のビットエラーの検出及び訂正のために用いられる冗長データである。メモリ４は、図５に示すフォーマットのデータを各ページに格納する。
【００４９】
格納データ５０のビットエラーは、ページ４１Ｐに格納データ５０を書き込む時、または、リードディスターブ現象により発生する。ＥＣＣ回路３４は、格納データ５０が有するシンドローム５３を用いて、格納データ５０のビットエラーの検出及び訂正を行う。エラー訂正された格納データ５０は、格納データ６０としてバッファ３５に格納される。判定部３６は、ＥＣＣ回路３４から格納データ６０を入力する。
【００５０】
判定部３６は、格納データ６０を用いて、ＥＣＣ回路３４のエラー訂正能力を超えるエラーが格納データ５０に発生していたか否かを判定する（ステップＳ１３，Ｓ１４）。具体的には、判定部３６は、予め設定されたハッシュ関数を用いて、格納データ６０が有する実体データ６１のハッシュ値を計算する（ステップＳ１３）。図５において、格納データ６０が有するハッシュ値６２は、実体データ６１から生成されたデータでなく、ハッシュ値５２がエラー訂正されることにより生成されたデータである。
【００５１】
判定部３６は、ハッシュ値６２と、実体データ６１から算出したハッシュ値とが一致するか否かを確認することにより（ステップＳ１４）、ＥＣＣ回路３４のエラー訂正能力を超えるビットエラーが格納データ５０に発生しているか否かを判定する。
【００５２】
格納データ５０のビットエラーがＥＣＣ回路３４のエラー訂正能力の範囲内である場合、ＥＣＣ回路３４は、格納データ５０のビットエラーを訂正することができる。この場合、ハッシュ値６２と、実体データ６１から算出されたハッシュ値とが一致するため（ステップＳ１４においてＹｅｓ）、判定部３６は、実体データ６１をホスト装置１に出力することができると判断する。出力制御部３９は、バッファ３５から実体データ６１を取得し、実体データ６１を含む出力データを作成する（ステップＳ２１）。出力制御部３９は、ホストインタフェース３１を介して、出力データをホスト装置１に出力する（ステップＳ２２）。
【００５３】
格納データ５０のビットエラーがＥＣＣ回路３４のエラー訂正能力を超えている場合、ＥＣＣ回路３４は、格納データ５０のビットエラーを訂正することができない。これは、リードディスターブ現象により、ＥＣＣ回路３４のエラー訂正能力を超えるビットエラーが格納データ５０に発生したためである。
【００５４】
この場合、実体データ６１及びハッシュ値６２の少なくとも一方が、ビットエラーを有するため、ハッシュ値６２と、実体データ６１から算出されたハッシュ値とは一致しない（ステップＳ１４においてＮｏ）。判定部３６は、実体データ６１のエラーが訂正されたことが保証されていないため、実体データ６１をホスト装置１に出力することができないと判断する。メモリコントローラ３は、ステップＳ１５〜Ｓ１９の処理を実行して、バックアップ領域４２から読み出したデータを、読み出しコマンドの応答としてホスト装置１に出力する。
【００５５】
具体的には、判定部３６は、リカバリフラグ５５を制御部３０に出力する。制御部３０は、リカバリフラグ５５が入力されることにより、読み出しコマンドで指定されたページ４１Ｐの修復が必要であると判断する。修復アドレス保持部３７は、ページ４１Ｐの論理アドレスを修復対象アドレスとして保持する（ステップＳ１５）。
【００５６】
図４に示すように、通常アクセス領域４１のページ４１Ｐと、バックアップ領域４２のページ４２Ｐとが対応付けられている。制御部３０は、修復対象アドレスと対応テーブル３８を参照して、修復対象アドレスに対応するページ４２Ｐの論理アドレスを特定する（ステップＳ１６）。
【００５７】
メモリコントローラ３は、特定したページ４２Ｐのアドレスを用いて、バックアップ領域４２のページ４２Ｐから格納データ７０を読み出す（ステップＳ１７）。ＥＣＣ回路３４は、バックアップ領域４２から読み出された格納データ７０に対するエラー検出処理及びエラー訂正処理を実行する（ステップＳ１８）。ステップＳ１７，Ｓ１８の処理は、それぞれ、ステップＳ１１，Ｓ１２の処理と同様である。バックアップ領域４２からのデータの読み出し頻度は、通常アクセス領域４１からのデータの読み出しに比べて非常に少ない。このため、バックアップ領域４２ではリードディスターブ現象が発生する可能性は非常に低いため、ＥＣＣ回路３４は、格納データ７０のエラーを訂正できると考えられる。
【００５８】
エラー訂正された格納データ７０は、バッファ３５に格納される。このとき、バッファ３５に格納されていた格納データ６０は、格納データ７０によって上書きされる。出力制御部３９は、バッファ３５に格納された格納データ７０から、エラー訂正された実体データ（図５に示す実体データ６１に相当）を抽出する。出力制御部３９は、リカバリフラグ５５と、抽出した実体データとを含む出力データを作成する（ステップＳ１９）。出力制御部３９は、ホストインタフェース３１を介して、作成した出力データをホスト装置１に出力する（ステップＳ２０）。
【００５９】
このように、リードディスターブ現象により、訂正不可能なエラーが通常アクセス領域４１に発生したとしても、メモリコントローラ３は、バックアップ領域４２のデータをホスト装置１に出力する。したがって、メモリ４に対するリフレッシュを行わなくてもよいため、メモリコントローラ３の構成を簡略化することができる。
【００６０】
ステップＳ１３，Ｓ１４の処理において、ハッシュ値に代えて、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）を用いてもよい。ただし、リードディスターブ現象に伴うデータの変化などを考慮した場合、ＣＲＣではなく、ハッシュ値を用いる方が望ましい。この理由については、後述する。
【００６１】
｛５．２．修復処理｝
図６は、修復処理を実行するときにおけるメモリコントローラ３の動作を示すフローチャートである。修復処理は、通常アクセス領域４１における修復対象の領域に対して、バックアップ領域から読み出したデータを書き込む処理である。
【００６２】
ホスト装置１は、読み出しコマンドの応答として、実体データ６１とともにリカバリフラグ５５を入力した場合（ステップＳ１９，図３参照）、格納データ５０の修復が必要であると判断する。ホスト装置１は、データの修復を指示する修復コマンドをメモリコントローラ３へ出力する。メモリコントローラ３は、修復コマンドを受け付けた場合、図６に示す処理を開始する。
【００６３】
ホスト装置１は、メモリ４におけるデータの修復がユーザの操作に影響を与えることが少ないと考えられるタイミングで、修復コマンドを出力する。これは、データの修復中に、メモリコントローラ３がホスト装置１の要求に応答することができないためである。たとえば、修復コマンドは、ホスト装置１の電源のオンまたはオフが指示されたタイミングで出力される。
【００６４】
制御部３０は、修復コマンドを受け付けた場合、修復アドレス保持部３７が修復対象アドレスを保持しているか否かを確認する（ステップＳ５１）。修復対象アドレスを保持していない場合（ステップＳ５１においてＮｏ）、メモリコントローラ３は、図６に示す処理を終了する。
【００６５】
一方、修復対象アドレス（ページ４１Ｐの論理アドレス）を保持している場合（ステップＳ５１においてＹｅｓ）、メモリコントローラ３は、修復の対象として、ページ４１Ｐが属するブロック４１Ｂ（図４参照）を決定する。図４では、ページ４１Ｐは、ブロック４１Ｂの先頭ページであるが、ブロック４１Ｂに属するページのアドレスが、修復対象アドレスとして設定されていればよい。メモリ４に格納されているデータを修復する場合、データを消去する必要があるため、修復処理は、ブロック単位で行われる。
【００６６】
メモリコントローラ３は、ブロック４１Ｂに格納されたデータを消去する（ステップＳ５２）。具体的には、アドレス変換部３３が、ブロック４１Ｂの論理アドレスを物理アドレスに変換する。メモリインタフェース３２は、ブロック４１Ｂの物理アドレスに対する消去コマンドをメモリ４に出力する。これにより、ブロック４１Ｂに格納されたデータが消去される。
【００６７】
制御部３０は、書き込み対象のページを決定する（ステップＳ５３）。書き込み対象のページは、たとえば、各ページの論理アドレスの順に決定される。ページ４１Ｐが、書き込み対象のページとして決定された場合、メモリコントローラ３は、対応テーブル３８を用いて、ページ４１Ｐに対応するバックアップ領域４２のページ４２Ｐを特定する。メモリコントローラ３は、バックアップ領域４２のページ４２Ｐから、格納データ７０を読み出す（ステップＳ５４）。ステップＳ５４の処理は、図３に示すステップＳ１７の処理と同様である。
【００６８】
ＥＣＣ回路３４は、読み出した格納データ７０に対して、エラー検出処理及びエラー訂正処理を行う（ステップＳ５５）。エラー訂正された格納データ７０が、バッファ３５に格納される。メモリコントローラ３は、エラー訂正された格納データ７０をページ４１Ｐに書き込む（ステップＳ５６）。具体的には、アドレス変換部３３が、ページ４１Ｐの論理アドレスを物理アドレスに変換する。メモリインタフェース３２は、ページ４１Ｐの物理アドレスに対する格納データ７０の書き込みを指示するコマンドを、メモリ４に出力する。これにより、エラー訂正された格納データ７０が、ページ４１Ｐに書き込まれる（ステップＳ５６）。
【００６９】
制御部３０は、ブロック４１Ｂに属する全てのページの書き込みが完了したか否かを確認する（ステップＳ５７）。全てのページの書き込みが完了した場合（ステップＳ５７においてＹｅｓ）、メモリコントローラ３は、図６に示す処理を終了する。一方、全てのページの書き込みが完了していない場合（ステップＳ５７においてＮｏ）、メモリコントローラ３は、ステップＳ５３に戻る。
【００７０】
ブロック４１Ｂの全てのページの書き込みが完了するまで（ステップＳ５７においてＹｅｓ）、メモリコントローラ３は、ステップＳ５３〜Ｓ５７の処理を繰り返す。このようにして、ブロック４１Ｂの各ページに格納されたデータが修復される。
【００７１】
以上説明したように、メモリコントローラ３は、メモリ４の一部の領域をバックアップ領域４２として使用する。近年、メモリ４（ＮＡＮＤフラッシュメモリ）の記憶容量が大きくなっているため、メモリ４にバックアップ領域４２を設けたとしても、ユーザは、必要なデータをメモリ４に格納することが可能である。メモリコントローラ３は、通常アクセス領域４１のページ４１Ｐから読み出した格納データ５０のエラーを訂正できない場合、バックアップ領域４２から、格納データ５０のバックアップである格納データ７０を読み出す。格納データ７０に含まれる実体データが、ホスト装置１に出力される。また、メモリコントローラ３は、ページ４１Ｐに格納されている格納データ５０を、格納データ７０を用いて修復する。
【００７２】
したがって、メモリコントローラ３は、通常アクセス領域４１におけるリードディスターブ現象の発生を防ぐために、通常アクセス領域４１をリフレッシュしなくてもよい。リフレッシュ対象の領域を決定するための回路をメモリコントローラ３に実装しなくてもよいため、メモリコントローラ３の構成を簡略化できる。
【００７３】
また、通常の読み出しに用いられるデータと、バックアップ用のデータが、一つの記憶媒体内に格納されるため、通常のミラーリングのように、バックアップ用のデータが他の記憶装置に格納されない。したがって、メモリコントローラ３は、他の記憶装置にアクセスすることなく、通常アクセス領域４１に記録されているデータを容易に修復することができる。
【００７４】
また、リードディスターブ現象により、たとえば、ページ４１Ｐの各セルの値が全てゼロとなる場合が発生することが考えられる。この場合であっても、メモリコントローラ３は、格納データ５０の修復が必要であると判定するとともに、格納データ５０を復元することができる。以下、図６を参照しながら、この理由を説明する。
【００７５】
メモリコントローラ３は、ページ４１Ｐの読み出しコマンドを受け付けた場合、リードディスターブ現象により全ての値がゼロとなった格納データ５０を読み出す。エラー訂正された格納データ５０（格納データ６０）において、実体データ６１及びハッシュ値６２（図５参照）は、いずれもゼロとなる。
【００７６】
判定部３６は、値が全てゼロの実体データ６１からハッシュ値を計算する（ステップＳ１３）。しかし、値が全てゼロの実体データ６１から計算されたハッシュ値は、ゼロとならない。このため、ハッシュ値６２と、実体データ６１から計算されたハッシュ値とは一致しない（ステップＳ１４においてＮｏ）。この場合、メモリコントローラ３は、ページ４１Ｐの修復が必要であると判断し、ページ４２Ｐの格納データ７０を用いて、ページ４１Ｐを修復することができる。
【００７７】
また、修復処理を実行する場合、ブロック４１Ｂからのデータの消去中に電源が遮断されることがある。この場合、メモリ４が異常な動作をする可能性があるため、ブロック４１Ｂに書き込まれていたデータの内容を保証することができない。しかし、本実施の形態では、ページの各セルの値が全てゼロとなったときと同様に、消去対象のブロックの各ページのデータを復元することが可能である。したがって、メモリコントローラ３及びメモリ４に、電源遮断に対応する機能を設けなくてもよい。
【００７８】
また、ＥＣＣ部３４のエラー訂正能力以上のエラーが格納データ５０に発生したか否かを判定する場合（ステップＳ１３，Ｓ１４）、ハッシュ値を用いる方が望ましい。ＣＲＣは、全てがゼロのデータに対して、エラーが発生したか否かを判定することができないためである。また、ＣＲＣは、ハッシュ値に比べて耐衝突性が極めて弱い。このため、ブロック単位でのデータの消去中に電源の遮断が発生し、ブロックに格納されていたデータが変化した場合であっても、ＥＣＣ回路３４のエラー訂正能力以上のエラーが発生したことを検出できないおそれがある。これらのことから、ＥＣＣ回路３４のエラー訂正能力を超えるエラーが格納データに発生したか否かを判定するための冗長データとして、ハッシュ値を用いることが望ましい。
【００７９】
上記実施の形態では、ホスト装置１が、リカバリフラグ５５の入力に応じて、修復コマンドを出力する例を説明した。しかし、ホスト装置１は、リカバリフラグ５５の入力の有無に関係なく、定期的に修復コマンドを出力してもよい。または、メモリコントローラ３が、定期的に修復処理を実行してもよい。
【符号の説明】
【００８０】
１  ホスト装置
２  メモリシステム
３  メモリコントローラ
４  メモリ
３０  制御部
３１  ホストインタフェース
３２  メモリインタフェース
３３  アドレス変換部
３４  ＥＣＣ回路
３５  バッファ
３６  判定部
３７  修復アドレス保持部
３８  対応テーブル
３９  出力制御部
【図１】
2012252557.tif 000003
【図２】
2012252557.tif 000004
【図３】
2012252557.tif 000005
【図４】
2012252557.tif 000006
【図５】
2012252557.tif 000007
【図６】
2012252557.tif 000008