(57)【特許請求の範囲】
【請求項１】
再書き込み可能な不揮発性メモリであり、ホストから読み出し要求を受け付けた場合の読み出し対象として設定された第１メモリと、
再書き込み可能な不揮発性メモリであり、前記第１メモリのバックアップ用のメモリとして設定された第２メモリと、
前記第１メモリと前記第２メモリとにアクセスするメモリコントローラと、
を備え、
前記メモリコントローラは、
前記ホストから書き込み要求を受け付けた場合、前記第１メモリ及び前記第２メモリに対して同一のデータを書き込み、前記ホストから読み出し要求を受け付けた場合、前記第１メモリからデータを読み出すアクセス制御部と、
前記第１メモリが読み出し対象に設定されている状態で前記アクセス制御部が動作しているときに、前記読み出し要求で指定されたアドレスに依存しない予め定められた順序に基づいて、前記第２メモリが有するデータ領域のうちいずれかの領域を検査領域として決定する検査領域決定部と、
前記検査領域から読み出された検査対象データに対してエラー検出を行い、前記検査対象データからエラーが検出された場合、前記検査対象データのエラーを訂正するエラー訂正部と、
を備え、
前記アクセス制御部は、訂正された検査対象データを前記検査領域に再書き込みするメモリシステム。
【請求項２】
請求項１に記載のメモリシステムであって、
前記検査領域決定部は、前記第１メモリに含まれる第１領域が優先検査条件を満たした場合、前記第２メモリに含まれ、かつ、前記第１領域に格納されたデータと同一のデータを格納する第２領域を、優先的に前記検査領域として決定するメモリシステム。
【請求項３】
請求項２に記載のメモリシステムであって、
前記エラー訂正部は、前記検査対象データからエラーを検出した場合、前記検査対象データのエラーを訂正するか否かを判定し、
前記アクセス制御部は、エラーを訂正すると判定された場合、前記訂正された検査対象データを前記検査領域に再書き込みするメモリシステム。
【請求項４】
請求項２または請求項３に記載のメモリシステムであって、
前記メモリコントローラは、さらに、
前記第１メモリから読み出されたデータのエラーを検出するエラー検出部、
を備え、
前記優先検査条件は、前記第１メモリから読み出されたデータのエラービット数が予め設定された第１優先検査基準値を超えることであるメモリシステム。
【請求項５】
請求項２または請求項３に記載のメモリシステムであって、
前記メモリコントローラは、
前記第１メモリが有するデータ領域ごとに、データが読み出される回数をカウントするカウンタ、
を備え、
前記優先検査条件は、前記読み出し回数が予め設定された第２優先検査基準値を超えることであるメモリシステム。
【請求項６】
請求項２ないし請求項５のいずれかに記載のメモリシステムであって、
前記検査領域決定部は、前記第１領域が前記優先検査条件を満たし、かつ、前記第２領域が検査されていない場合、前記第２領域を優先的に前記検査領域として決定するメモリシステム。
【請求項７】
請求項１ないし請求項６のいずれかに記載のメモリシステムであって、
前記アクセス制御部は、前記エラー訂正部が前記検査対象データのエラーを訂正できない場合、前記第１メモリに含まれ、かつ、前記検査領域に格納されたデータと同一のデータを格納するデータ領域から復旧データを読み出し、前記復旧データを前記検査領域に再書き込みするメモリシステム。
【請求項８】
請求項１または請求項２に記載のメモリシステムであって、
前記アクセス制御部は、所定の切り替え条件が満たされた場合、前記読み出し要求を受け付けたときにデータを読み出すメモリを、前記第１メモリから前記第２メモリに切り替えるとともに、前記第２メモリのバックアップ用のメモリとして前記第１メモリを設定するメモリシステム。
【請求項９】
請求項８に記載のメモリシステムであって、
前記切り替え条件は、前記第２メモリの全データ領域に対するエラー検出処理を終了し、かつ、前記読み出し要求に応じて前記第１メモリから読み出されたデータのエラービット数が予め設定された第１切替基準値を超えることであるメモリシステム。
【請求項１０】
請求項８に記載のメモリシステムであって、
前記メモリコントローラは、さらに、
前記第１メモリからのデータの読み出し回数をカウントするカウンタ、
を備え、
前記切り替え条件は、前記第２メモリの全データ領域に対するエラー検出処理を終了し、かつ、前記第１メモリからのデータの読み出し回数が予め設定された第２切替基準値を超えることであるメモリシステム。
【請求項１１】
請求項８ないし請求項１０のいずれかに記載のメモリシステムであって、
前記メモリコントローラは、さらに、
前記第１メモリから読み出されたデータのエラーを検出するエラー検出部、
を備え、
前記切り替え条件は、前記第１メモリから読み出されたデータのエラーを訂正できないことであるメモリシステム。
【請求項１２】
請求項１ないし請求項１１のいずれかに記載のメモリシステムであって、
前記メモリコントローラは、さらに、
前記第１メモリ及び前記第２メモリのうち、前記読み出し要求に基づいてデータが読み出されるメモリに対するアクセスを制御する第１メモリコントローラと、
前記第１メモリ及び前記第２メモリのうち、バックアップ用のメモリに対するアクセスを制御する第２メモリコントローラと、
を備えるメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリからデータが繰り返し読み出されることにより、データが意図せず書き換えられるリードディスターブ現象に対処する技術に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリは、再書き込み可能な不揮発性半導体メモリである。ＮＡＮＤフラッシュメモリは、高集積化を実現しながら、低コスト化が図られているため、ＳＤメモリカードなどの形態で広く普及している。
【０００３】
ＮＡＮＤフラッシュメモリにおいては、特定のセルが繰り返し読み出されることにより、記憶データが意図せず書き換えられる現象が生じることが分かっている。この現象は、リードディスターブ（Ｒｅａｄ  Ｄｉｓｔｕｒｂ）現象と呼ばれている現象であり、ＮＡＮＤフラッシュメモリを利用する上での課題となっている。
【０００４】
特定のセルに対する読み出し処理が繰り返し行われた場合であっても、一旦、そのセルを含む領域に対してデータの更新が行われれば、セルの状態が修復されるため、リードディスターブの発生が情報処理に影響を与えることを回避できる。しかし、特定のセルに対して書き込み処理が行われず、読み出し処理だけが繰り返し行われる場合、リードディスターブの発生する可能性が高くなり、情報処理に影響を与える可能性もある。
【０００５】
最近では、ＮＡＮＤフラッシュメモリは、情報処理装置のプログラムメモリとしてＲＯＭのような役割で利用されるケースが多くなっている。ＮＡＮＤフラッシュメモリがそのように利用された場合、連続的な読み出し処理のみが行われるため、リードディスターブの発生可能性が高くなる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−１３９５０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記特許文献１には、第１の記録媒体及び第２の記録媒体に同一のデータを書き込む記憶装置が記載されている。第１の記録媒体及び第２の記録媒体は、不揮発性メモリである。第２の記録媒体は、ミラー書き込み用として用いられる。上記特許文献１の記憶装置は、データ読み出し指令が記憶装置に入力された場合、第１の記録媒体及び第２の記録媒体の両者からデータを読み出す。第１の記録媒体から読み出されたデータからエラーを検出した場合、記憶装置は、第２の記録媒体から読み出したデータを出力する。
【０００８】
上記特許文献１では、第２の記録媒体からの読み出しが第１の記録媒体からの読み出しと同じ頻度で行われる。このため、リードディスターブが、第１記録媒体だけでなく、第２記録媒体で発生する可能性が高い。第２の記録媒体がミラー書き込み用として用いられるにも関わらず、第２の記録媒体に書き込まれたデータの信頼性を確保することができない。
【０００９】
そこで、本発明は前記問題点に鑑み、フラッシュメモリに記録されたデータの信頼性を向上させることができる技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、請求項１記載の発明は、メモリシステムであって、再書き込み可能な不揮発性メモリであり、ホストから読み出し要求を受け付けた場合の読み出し対象として設定された第１メモリと、再書き込み可能な不揮発性メモリであり、前記第１メモリのバックアップ用のメモリとして設定された第２メモリと、前記第１メモリと前記第２メモリとにアクセスするメモリコントローラと、を備え、前記メモリコントローラは、前記ホストから書き込み要求を受け付けた場合、前記第１メモリ及び前記第２メモリに対して同一のデータを書き込み、前記ホストから読み出し要求を受け付けた場合、前記第１メモリからデータを読み出すアクセス制御部と、前記第１メモリが読み出し対象に設定されている状態で前記アクセス制御部が動作しているときに、前記読み出し要求で指定されたアドレスに依存しない予め定められた順序に基づいて、前記第２メモリが有するデータ領域のうちいずれかの領域を検査領域として決定する検査領域決定部と、前記検査領域から読み出された検査対象データに対してエラー検出を行い、前記検査対象データからエラーが検出された場合、前記検査対象データのエラーを訂正するエラー訂正部と、を備え、前記アクセス制御部は、訂正された検査対象データを前記検査領域に再書き込みする。
【００１１】
請求項２記載の発明は、請求項１に記載のメモリシステムであって、前記検査領域決定部は、前記第１メモリに含まれる第１領域が優先検査条件を満たした場合、前記第２メモリに含まれ、かつ、前記第１領域に格納されたデータと同一のデータを格納する第２領域を、優先的に前記検査領域として決定する。
【００１２】
請求項３記載の発明は、請求項２に記載のメモリシステムであって、前記エラー訂正部は、前記検査対象データからエラーを検出した場合、前記検査対象データのエラーを訂正するか否かを判定し、前記アクセス制御部は、エラーを訂正すると判定された場合、前記訂正された検査対象データを前記検査領域に再書き込みする。
【００１３】
請求項４記載の発明は、請求項２または請求項３に記載のメモリシステムであって、前記メモリコントローラは、さらに、前記第１メモリから読み出されたデータのエラーを検出するエラー検出部、を備え、前記優先検査条件は、前記第１メモリから読み出されたデータのエラービット数が予め設定された第１優先検査基準値を超えることである。
【００１４】
請求項５記載の発明は、請求項２または請求項３に記載のメモリシステムであって、前記メモリコントローラは、前記第１メモリが有するデータ領域ごとに、データが読み出される回数をカウントするカウンタ、を備え、前記優先検査条件は、前記読み出し回数が予め設定された第２優先検査基準値を超えることである。
【００１５】
請求項６記載の発明は、請求項２ないし請求項５のいずれかに記載のメモリシステムであって、前記検査領域決定部は、前記第１領域が前記優先検査条件を満たし、かつ、前記第２領域が検査されていない場合、前記第２領域を優先的に前記検査領域として決定する。
【００１６】
請求項７記載の発明は、請求項１ないし請求項６のいずれかに記載のメモリシステムであって、前記アクセス制御部は、前記エラー訂正部が前記検査対象データのエラーを訂正できない場合、前記第１メモリに含まれ、かつ、前記検査領域に格納されたデータと同一のデータを格納するデータ領域から復旧データを読み出し、前記復旧データを前記検査領域に再書き込みする。
【００１７】
請求項８記載の発明は、請求項１または請求項２に記載のメモリシステムであって、前記アクセス制御部は、所定の切り替え条件が満たされた場合、前記読み出し要求を受け付けたときにデータを読み出すメモリを、前記第１メモリから前記第２メモリに切り替えるとともに、前記第２メモリのバックアップ用のメモリとして前記第１メモリを設定する。
【００１８】
請求項９記載の発明は、請求項８に記載のメモリシステムであって、前記切り替え条件は、前記第２メモリの全データ領域に対するエラー検出処理を終了し、かつ、前記読み出し要求に応じて前記第１メモリから読み出されたデータのエラービット数が予め設定された第１切替基準値を超えることである。
【００１９】
請求項１０記載の発明は、請求項８に記載のメモリシステムであって、前記メモリコントローラは、さらに、前記第１メモリからのデータの読み出し回数をカウントするカウンタ、を備え、前記切り替え条件は、前記第２メモリの全データ領域に対するエラー検出処理を終了し、かつ、前記第１メモリからのデータの読み出し回数が予め設定された第２切替基準値を超えることである。
【００２０】
請求項１１記載の発明は、請求項８ないし請求項１０のいずれかに記載のメモリシステムであって、前記メモリコントローラは、さらに、前記第１メモリから読み出されたデータのエラーを検出するエラー検出部、を備え、前記切り替え条件は、前記第１メモリから読み出されたデータのエラーを訂正できないことである。
【００２１】
請求項１２記載の発明は、請求項１ないし請求項１１のいずれかに記載のメモリシステムであって、前記メモリコントローラは、さらに、前記第１メモリ及び前記第２メモリのうち、前記読み出し要求に基づいてデータが読み出されるメモリに対するアクセスを制御する第１メモリコントローラと、前記第１メモリ及び前記第２メモリのうち、バックアップ用のメモリに対するアクセスを制御する第２メモリコントローラと、を備える。
【発明の効果】
【００２２】
本発明のメモリシステムは、バックアップ用の第２メモリのデータ領域のいずれかを検査領域として決定し、検査領域からデータを読み出す。読み出したデータにエラーがある場合、エラー訂正されたデータが、検査領域に書き戻される。検査領域に格納されたデータと同一のデータを格納する第１メモリのデータ領域でリードディスターブが発生した場合であっても、検査領域に格納されたデータのエラーが訂正されているため、フラッシュメモリに格納されるデータの信頼性を向上させることができる。
【００２３】
また、本発明のメモリシステムは、切り替え条件が満たされた場合、第１メモリを読み出し用のメモリからバックアップ用のメモリに変更し、第２メモリをバックアップ用のメモリから読み出し用のメモリに変更する。第１メモリ及び第２メモリが交互に読み出し用のメモリとして使用されるため、第１メモリ及び第２メモリの読み出し負荷を軽減でき、リードディスターブの発生を抑制することができる。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施の形態による情報処理システムの構成を示す機能ブロック図である。
【図２】図１に示すメモリの構成を示す図である。
【図３】図１に示すメモリシステムの動作の概略を示す図である。
【図４】図１に示すメインメモリにアクセスするメモリコントローラの動作を示すフローチャートである。
【図５】図１に示すエラー記録データの一例を示す図である。
【図６】図４に示す代替データ取得処理のフローチャートである。
【図７】図１に示すサブメモリにアクセスするメモリコントローラの動作を示すフローチャートである。
【図８】図１に示す検査管理テーブルを示す図である。
【図９】図１に示すサブメモリにアクセスするメモリコントローラの動作を示すフローチャートである。
【図１０】図９に示すデータ復旧処理のフローチャートである。
【図１１】図４に示すアクセス対象のメモリを切り替える処理のフローチャートである。
【図１２】図１に示すメモリコントローラの変形例を示す図である。
【発明を実施するための形態】
【００２５】
以下、図面を参照しつつ本発明の実施の形態について説明する。
【００２６】
｛１．全体構成｝
図１は、本実施の形態に係る情報処理システム１００の機能ブロック図である。情報処理システム１００は、ホストシステム１と、メモリシステム２とを備える。メモリシステム２は、メモリコントローラ３，５と、メモリ４，６と、ＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋｉｎｇ  ａｎｄ  Ｃｏｒｒｅｃｔｉｏｎ）回路３１，５１とを備える。
【００２７】
情報処理システム１００は、たとえば、ゲームシステムを構成する。この場合、ホストシステム１は、ゲーム装置本体を構成し、メモリシステム２は、ゲーム装置本体に対して着脱可能なゲームカートリッジを構成する。なお、メモリシステム２は、ゲーム装置本体に内蔵されてもよい。
【００２８】
メモリ４，６は、再書き込み可能な不揮発性半導体メモリである。本実施の形態において、メモリ４，６は、ＮＡＮＤフラッシュメモリである。ここで、メモリ４は、読み出し用のメモリ（メインメモリ）である。メインメモリは、読み出し要求がホストシステム１から入力された際に、データの読み出し対象となるメモリである。メモリ６は、バックアップ用のメモリ（サブメモリ）である。メモリ４，６は、後述する切り替え条件が満たされた場合、機能が切り替わる。すなわち、メモリ４は、メインメモリからサブメモリへ切り替わり、メモリ６は、サブメモリからメインメモリへ切り替わる。
【００２９】
メモリコントローラ３は、メモリ４，６のうち、メインメモリに設定されたメモリに対するデータの読み出し及び書き込みを制御する。メモリコントローラ５は、メモリ４，６のうち、サブメモリに設定されたメモリに対するデータの読み出し及び書き込みを制御する。すなわち、メモリコントローラ３、５は、切り替え条件に基づいて、アクセス対象のメモリを切り替える。
【００３０】
ＥＣＣ回路３１は、メモリコントローラ３がメインメモリから読み出したデータに対するエラー検出処理と、エラー訂正処理とを実行する。ＥＣＣ回路５１は、メモリコントローラ５がサブメモリから読み出したデータに対するエラー検出処理と、エラー訂正処理とを実行する。
【００３１】
以下、メモリ４がメインメモリに設定され、メモリ６がサブメモリに設定されていると仮定して、本実施の形態を説明する。メモリ４を、「メインメモリ４」と呼び、メモリ６を、「サブメモリ６」と呼ぶ。
【００３２】
メモリコントローラ３は、ホストシステム１からの各種要求を受け付けるとともに、メインメモリ４に対するアクセスを制御する。メモリコントローラ３は、ホストシステム１からデータの書き込み要求を受け付けた場合、メモリコントローラ５に対して、データの書き込みを指示する。メモリコントローラ３は、アクセス制御部３２と、動作指示部３４とを備える。
【００３３】
アクセス制御部３２は、ホストシステム１の要求に応じて、メインメモリ４からデータを読み出し、メインメモリ４にデータを書き込む。メインメモリ４から読み出されたデータを、データ４５Ｍと呼ぶ。データ４５Ｍは、１ページ分のデータである。
【００３４】
動作指示部３４は、メモリコントローラ５に対して各種動作の実行を指示する。たとえば、動作指示部３４は、ホストシステム１からデータの書き込み要求を受け付けた場合、データの書き込みをメモリコントローラ５に指示する。動作指示部３４は、切り替え条件が満たされた場合、アクセス対象の変更をメモリコントローラ５に指示する。
【００３５】
メモリコントローラ３は、エラー記録データ３３を保持する。エラー記録データ３３は、読み出し対象のページを有するブロックの論理アドレスと、読み出されたデータ４５Ｍのエラービット数とが記録されたデータである。具体的には、ＥＣＣ回路３１が、メインメモリ４から読み出されたデータ４５Ｍに対してエラー検出処理を行う。メモリコントローラ３は、エラー記録データ３３として、データ４５Ｍが格納されたページを含むブロックの論理アドレスと、検出されたエラービット数とを対応付けて記録する。エラー記録データ３３の詳細は、後述する。
【００３６】
メモリコントローラ５は、サブメモリ６に格納されたデータにエラーが発生しているか否かを、ブロックごとに検査する。メモリコントローラ５は、動作指示部３４から指示を受け付けた場合を除き、メモリコントローラ３とは独立に動作する。メモリコントローラ５は、アクセス制御部５２と、検査領域決定部５３とを備える。
【００３７】
アクセス制御部５２は、サブメモリ６からデータを読み出し、サブメモリ６にデータを書き込む。検査領域決定部５３は、サブメモリ６が有するブロックの中から検査対象のブロックを決定する。通常であれば、検査領域決定部５３は、予め設定された順序に基づいて、サブメモリ６の各ブロックを検査対象として決定する。しかし、サブメモリ６の中で優先検査ブロックに設定されたブロックが存在する場合、検査領域決定部５３は、設定された順序に関係なく、検査対象として優先検査ブロックを決定する。
【００３８】
メモリコントローラ５は、検査管理テーブル５４を保持する。検査管理テーブル５４は、サブメモリ６の各ブロックの検査状況を記録したテーブルである。サブメモリ６の各ブロックの検査の詳細については、後述する。
【００３９】
｛２．メインメモリ４及びサブメモリ６の構成｝
図２は、メインメモリ４及びサブメモリ６の構成を示す図である。具体的には、メインメモリ４及びサブメモリ６は、同一の構成を有し、それぞれ１枚のダイで構成される。ダイは、複数のバンクを含む。図２に示す例では、ダイは、Ｊ個のバンクを含む。バンクは、複数のブロックを含む。図２に示す例では、バンクは、Ｍ個のブロックを含む。ブロックは、複数のページを含む。図２に示す例では、ブロックは、Ｚ個のページを含む。
【００４０】
ページは、メインメモリ４及びサブメモリ６におけるデータの読み出し単位及び書き込み単位である。メモリコントローラ３は、メインメモリ４に記録されているデータをページ単位で読み出し、書き込みが指示されたデータをページ単位でメインメモリ４に書き込むことができる。同様に、メモリコントローラ５は、サブメモリ６に記録されているデータをページ単位で読み出し、書き込みが指示されたデータをページ単位でサブメモリ６に書き込むことができる。
【００４１】
メインメモリ４及びサブメモリ６は、同一の論理アドレス空間を有する。メモリコントローラ３，５は、メインメモリ４及びサブメモリ６にそれぞれデータを書き込む場合、同一の論理アドレスを有するページにデータを書き込む。たとえば、メモリコントローラ３がメインメモリ４のページ７Ｐにデータを書き込む場合、メモリコントローラ５は、同様に、サブメモリ６のページ７Ｐに同一のデータを書き込む。図２に示すように、メインメモリ４のページ７Ｐと、サブメモリ６のページ７Ｐとは、両者ともに、ブロック７Ｂ（ＢＡＮＫ＃０）に含まれる先頭ページ（Ｐａｇｅ＃０）であることがわかる。
【００４２】
ブロックは、メインメモリ４及びサブメモリ６におけるデータの消去単位である。メモリコントローラ３，５は、メインメモリ４及びサブメモリ６に格納されたデータをブロック単位で消去することができる。
【００４３】
｛３．動作概略｝
以下、図３を用いて、メモリシステム２の動作の概略を説明する。図３は、メモリシステム２の動作の概略を示す図である。図３において、ホストシステム１、メモリコントローラ３，５、メインメモリ４及びサブメモリ６以外の構成の表示を省略している。
【００４４】
｛３．１．データ書き込み｝
ホストシステム１が、データの書き込み要求をメモリシステム２へ出力する（ステップＳ１）。メモリコントローラ３が、書き込み要求に基づいて、データを書き込む対象となるページ（書き込みページ）を決定する。メモリコントローラ３は、メインメモリ４の書き込みページにデータを書き込む（ステップＳ２）。また、メモリコントローラ３は、書き込み指示として、データと、書き込みページの論理アドレスとをメモリコントローラ５に通知する（ステップＳ３）。メモリコントローラ５は、書き込み指示に基づいて、サブメモリ６の書き込みページにデータを書き込む（ステップＳ４）。これにより、メインメモリ４及びサブメモリ６の同一アドレスには、同一のデータが書き込まれる。
【００４５】
｛３．２．データ読み出し｝
ホストシステム１が、データの読み出し要求をメモリシステム２へ出力する（ステップＳ５）。メモリコントローラ３は、読み出し要求に基づいて、メインメモリ４からデータ４５Ｍを読み出し、データ４５Ｍをホストシステム１へ出力する（ステップＳ６）。ＥＣＣ回路３１は、メインメモリ４から読み出されたデータ４５Ｍに対してエラー検出処理を行う。エラーが検出された場合、エラー訂正されたデータ４５Ｍが、ホストシステム１に出力される。
【００４６】
メモリコントローラ５は、原則として、ホストシステム１の読み出し要求に応じて、サブメモリ６からデータを読み出さない。しかし、ＥＣＣ回路３１がデータ４５Ｍのエラーを訂正できない場合、メモリコントローラ５は、メモリコントローラ３の指示に応じて、サブメモリ６からデータ４５Ｓを読み出す。メモリコントローラ３は、データ４５Ｍに代えて、データ４５Ｓをホストシステム１へ出力する。この結果、サブメモリ６に対するデータの読み出し回数が減少するため、サブメモリ６におけるリードディスターブの発生が抑制される。
【００４７】
｛３．３．サブメモリ６の検査｝
メモリコントローラ５は、サブメモリ６に格納されたデータの信頼性を向上させるために、サブメモリ６に格納されたデータを検査する。サブメモリ６の検査は、メインメモリ４が読み出し用のメモリとして用いられている間に実行される。
【００４８】
具体的には、メモリコントローラ５は、サブメモリ６の検査対象のブロックからデータ４５Ｃを読み出す（ステップＳ７）。データ４５Ｃは、検査用に読み出されたデータであり、１ブロック分のデータである。データ４５Ｃからエラーが検出された場合、メモリコントローラ５は、エラー訂正されたデータ４５Ｃを、検査対象のブロックに書き戻す。
【００４９】
メモリコントローラ５は、通常であれば、予め設定された順序で、サブメモリ６の各ブロックを検査する。しかし、リードディスターブなどにより、メインメモリ４においてビットエラーを有するページ（エラーページ）が発生することがある。この場合、メモリコントローラ３は、エラーページを有するブロック（エラーブロック）を特定する。メモリコントローラ５は、エラーブロックに格納されたデータと同一のデータを格納するサブメモリ６のブロックを優先的に検査する。たとえば、メインメモリ４のブロック７Ｂと、サブメモリ６のブロック７Ｂとには、同一のデータが書き込まれている。メインメモリ４のページ７Ｐから読み出されたデータにエラーが検出された場合、メモリコントローラ５は、サブメモリ６のブロックのうち、ページ７Ｐを有するブロック７Ｂを優先的に検査する。これにより、サブメモリ６に格納されるデータのうち、エラーブロックに書き込まれたデータと同一のデータの信頼性を向上させることができる。
【００５０】
｛３．４．メモリの切り替え｝
メモリコントローラ３は、切り替え条件が満たされた場合、アクセス対象のメモリを切り替える（ステップＳ８）。切り替え条件は、サブメモリ６の全てのブロックの検査が終了し、かつ、ホストシステム１の読み出し要求に基づいて、メインメモリ４から読み出されたデータ４５Ｍのエラービット数が所定のしきい値を超えた場合である。以後、メモリコントローラ３は、ホストシステム１から読み出し要求を受け付けた場合、メモリ６からデータを読み出す。メモリコントローラ５は、メモリ４の各ページの検査を開始する。
【００５１】
このように、メモリ４，６が、交互にメインメモリとして使用されるため、メモリ４，６の読み出し負荷を分散させることができる。したがって、メモリ４，６におけるリードディスターブの発生を抑制することができる。また、メモリ４，６の各ページは、メモリ４，６がサブメモリとして用いられる間に、メモリコントローラ５により検査される。このため、メモリ４，６に格納されるデータの信頼性を維持することができる。
【００５２】
｛４．メモリコントローラ３の動作｝
以下、メモリコントローラ３の動作について、図１及び図４を参照しながら説明する。
【００５３】
｛４．１．読み出し処理｝
図４は、読み出し要求（ステップＳ５、図３参照）を受け付けたときのメモリコントローラ３の動作を示すフローチャートである。メモリコントローラ３は、ホストシステム１の読み出し要求に応じてメインメモリ４からデータ４５Ｍを読み出す。データ４５Ｍのエラーを訂正できない場合、メモリコントローラ３は、データ４５Ｍに代えて、サブメモリ６から読み出されたデータ４５Ｓをホストシステム１へ出力する。
【００５４】
メモリコントローラ３は、ホストシステム１から読み出し要求（ステップＳ５）を受け付けた場合、図４の処理を開始する。アクセス制御部３２が、読み出し要求に基づいて読み出し対象ページを決定し、メインメモリ４の読み出し対象ページからデータ４５Ｍを読み出す（ステップＳ４０１）。ＥＣＣ回路３１は、読み出したデータ４５Ｍに対してエラー検出処理を行う（ステップＳ４０２）。データ４５Ｍからエラーが検出されなかった場合（ステップＳ４０２においてＮｏ）、メモリコントローラ３は、データ４５Ｍをホストシステム１へ出力する（ステップＳ４０７）。読み出し対象ページが複数である場合、ＥＣＣ回路３１は、各ページから読み出されたデータ４５Ｍに対してエラー検出処理を行う。
【００５５】
データ４５Ｍからエラーが検出された場合（ステップＳ４０２においてＹｅｓ）、ＥＣＣ回路３１は、検出されたエラーの訂正が可能であるか否かを確認する（ステップＳ４０３）。具体的には、ＥＣＣ回路３１のエラー訂正能力に基づいて、データ４５Ｍのエラーの訂正が可能であるか否かが判断される。
【００５６】
データ４５Ｍのエラーを訂正できない場合（ステップＳ４０３においてＮｏ）、メモリコントローラ３は、データ４５Ｍをホストシステム１に出力することができない。このため、メモリコントローラ３は、メモリコントローラ５を介して、サブメモリからデータ４５Ｓを取得する代替データ取得処理を実行する（ステップＳ４１１）。データ４５Ｍ、４５Ｓは、メインメモリ４及びサブメモリ６にそれぞれ書き込まれるときには、同一のデータである。すなわち、代替データ取得処理は、メモリ４５Ｍに代わるデータとして、データ４５Ｍと同一のデータを格納するページからデータ４５Ｓを取得する処理である。代替データ取得処理の後に、メモリコントローラ３は、アクセス対象のメモリを切り替える（ステップＳ４１０）。ステップＳ４１０，Ｓ４１１の詳細は後述する。
【００５７】
データ４５Ｍのエラーの訂正が可能な場合（ステップＳ４０３においてＹｅｓ）、ＥＣＣ回路３１は、データ４５Ｍのエラーを訂正する（ステップＳ４０４）。訂正されたデータ４５Ｍは、後述するように、ホストシステム１へ出力されるが（ステップＳ４０７）、メインメモリ４へ書き戻されることはない。これは、訂正されたデータ４５Ｍをメインメモリ４に書き戻すことにより、メモリコントローラ３の負荷が大きくなることを防止するためである。データ４５Ｍのエラーは、メインメモリ４がサブメモリに切り替えられた後に、メモリコントローラ５により訂正される。
【００５８】
メモリコントローラ３は、エラーページを有するエラーブロックに関する情報を、エラー記録データ３３として作成する（ステップＳ４０５）。エラーページは、データ４５Ｍからエラーが検出されたページである。エラー記録データ３３は、たとえば、メモリコントローラ３が備えるレジスタまたはメインメモリ４に格納される。
【００５９】
図５は、エラー記録データ３３の一例を示す図である。図５に示すように、エラー記録データ３３は、データ４５Ｍを格納するエラーブロックの論理アドレスと、データ４５Ｍのエラービット数とを有する。メモリコントローラ３は、ホストシステム１からの読み出し要求に応じて、複数のページからデータ４５Ｍを読み出すことがある。この場合、メモリコントローラ３は、複数のページの中から、エラービット数が最大のエラーページを特定する。メモリコントローラ３は、特定されたエラーページを有するブロックの論理アドレスと、特定されたエラーページのエラービット数とを対応付けて、エラー記録データ３３に記録する。メモリコントローラ３は、エラー記録データ３３をメモリコントローラ５へ出力することにより、エラーブロックの発生を通知する（ステップＳ４０６）。詳細は後述するが、メモリコントローラ５は、サブメモリ６のブロックのうち、エラーブロックに格納されたデータと同一のデータを格納するブロックを優先的に検査する。
【００６０】
エラー記録データ３３は、複数のエラーブロックを記録したデータであってもよい。たとえば、メモリコントローラ３は、１０ブロック分のエラーブロックに関する情報を、エラー記録データ３３として保持してもよい。この場合、メモリコントローラ３は、１０ブロック分のエラーブロックがエラー記録データ３３に記録された場合、エラー記録データ３３をメモリコントローラ５に出力すればよい。また、エラー記録データ３３は、エラーページの論理アドレスと、エラービット数とを対応付けたデータであってもよい。この場合、メモリコントローラ５が、エラーページの論理アドレスに基づいて、エラーブロックのアドレスを特定すればよい。
【００６１】
再び、図１及び図４を参照する。ステップＳ４０６の後、または、データ４５Ｍからエラーが検出されなかった場合（ステップＳ４０２においてＮｏ）、メモリコントローラ３は、データ４５Ｍをホストシステム１に出力する（ステップＳ４０７）。
【００６２】
次に、メモリコントローラ３は、アクセス対象のメモリの切り替え条件が満たされているか否かを確認する。これは、メインメモリ４に格納されているデータのエラー訂正が不可能となる前にアクセス対象のメモリを切り替えることにより、データの信頼性を確保するためである。
【００６３】
具体的には、メモリコントローラ３は、読み出し要求に基づいて読み出されたデータ４５Ｍのエラービット数が切替基準値を超えているか否かを確認する（ステップＳ４０８）。複数のページからデータ４５Ｍがそれぞれ読み出された場合、メモリコントローラ３は、エラービットが最も多いデータ４５Ｍのエラービット数が、切替基準値を超えているか否かを確認する。切替基準値は、１ページあたりのビット数として設定される。データ４５Ｍのエラービット数が切替基準値以上である場合（ステップＳ４０８においてＹｅｓ）、メモリコントローラ３は、サブメモリ６の全ブロックの検査が終了したか否かを確認する（ステップＳ４０９）。動作指示部３４は、メモリコントローラ５に対して、サブメモリ６の検査状況を問い合わせる。メモリコントローラ３は、サブメモリ６の全ブロックの検査終了を示す応答が入力された場合、サブメモリ６の検査が終了したと判定する。なお、メモリコントローラ５が、サブメモリ６の全ブロックの検査を終了していた場合、検査終了を通知するようにしてもよい。
【００６４】
サブメモリ６の検査が終了していた場合（ステップＳ４０９においてＹｅｓ）、メモリコントローラ３は、切り替え条件が満たされたと判断し、アクセス対象のメモリを切り替える（ステップＳ４１０）。具体的には、メモリコントローラ３は、アクセス対象のメモリを、メモリ６に変更する。ステップＳ４１０は、図３に示すステップＳ８に対応する。ステップＳ４１０の詳細は、後述する。
【００６５】
ステップＳ４０８の説明に戻る。データ４５Ｍのエラービット数が切替基準値よりも小さい場合（ステップＳ４０８においてＮｏ）、メモリコントローラ３は、読み出し対象のメモリを切り替えることなく、図４に示す処理を終了する。同様に、サブメモリ６の検査が終了していない場合（ステップＳ４０９においてＮｏ）、メモリコントローラ３は、読み出し対象のメモリを切り替えることなく、図４に示す処理を終了する。
【００６６】
｛４．２．代替データ取得処理（ステップＳ４１１）｝
図６は、代替データ取得処理（ステップＳ４１１、図４参照）の流れを示すフローチャートである。上述したように、メモリコントローラ３は、メインメモリ４から読み出したデータ４５Ｍのエラーを訂正できない場合（ステップＳ４０３においてＮｏ）、サブメモリ６からデータ４５Ｓを取得する。データ４５Ｍ，４５Ｓは、メインメモリ４、サブメモリ６において、同一の論理アドレスを有するページに格納されたデータである。
【００６７】
メモリコントローラ３は、メモリコントローラ５に対して、サブメモリ６からのデータの読み出しを要求する（ステップＳ４５１）。具体的には、メモリコントローラ３は、エラー訂正できないデータ４５Ｍが格納されたエラーページの論理アドレスを出力する。
【００６８】
メモリコントローラ５は、メモリコントローラ３から入力した論理アドレスに基づいて、サブメモリ６からデータ４５Ｓを読み出し、読み出したデータ４５Ｓを出力する。データの読み出し要求を受け付けたときのメモリコントローラ５の動作の詳細は、後述する。メモリコントローラ３は、データ４５Ｓがメモリコントローラ５から入力された場合（ステップＳ４５２においてＹｅｓ）、データ４５Ｍに代わる代替データとして、データ４５Ｓをホストシステム１へ出力する（ステップＳ４５３）。このとき、アクセス制御部３２は、データ４５Ｓをメインメモリ４に書き戻さない。メインメモリ４のエラーは、メインメモリ４がサブメモリに切り替わった後に訂正される。
【００６９】
図７は、ステップＳ４５１（図６参照）の読み出し要求を受け付けたときのメモリコントローラ５の動作を示すフローチャートである。
【００７０】
メモリコントローラ５は、サブメモリ６から、データの読み出し要求をメモリコントローラ３から受け付けた場合（ステップＳ５５１においてＹｅｓ）、エラーページの論理アドレスに基づいて、サブメモリ６からデータ４５Ｓを読み出す（ステップＳ５５２）。すなわち、メモリコントローラ５は、メモリコントローラ３の要求に応じて、書き込み時にエラーページに格納されたデータと同一のデータを、サブメモリ６から読み出す。
【００７１】
ＥＣＣ回路５１が、読み出したデータ４５Ｓに対してエラー検出処理を行う（ステップＳ５５３）。データ４５Ｓからエラーが検出されなかった場合（ステップＳ５５３においてＮｏ）、メモリコントローラ５は、データ４５Ｓをメモリコントローラ３へ出力する（ステップＳ５５６）。
【００７２】
データ４５Ｓからエラーが検出された場合（ステップＳ５５３においてＹｅｓ）、ＥＣＣ回路５１は、検出されたエラーの訂正が可能であるか否かを確認する（ステップＳ５５４）。具体的には、ＥＣＣ回路５１のエラー訂正能力に基づいて、データ４５Ｓのエラーの訂正が可能であるか否かが判断される。
【００７３】
エラーの訂正が可能である場合（ステップＳ５５４においてＹｅｓ）、ＥＣＣ回路５１は、読み出したデータ４５Ｓのエラーを訂正する（ステップＳ５５５）。メモリコントローラ５は、訂正されたデータ４５をメモリコントローラ３へ出力する（ステップＳ５５６。）
【００７４】
データ４５Ｓのエラーを訂正できない場合（ステップＳ５５４においてＮｏ）、メモリコントローラ５は、メモリシステム２が故障したと判定する（ステップＳ５５７）。メインメモリ４から読み出されたデータ４５Ｍ、及びサブメモリ６から読み出されたデータ４５Ｓのエラーを訂正できないため、メモリシステム２は、ホストシステム１のデータ読み出し要求に応答することができない。メモリコントローラ５は、データ４５Ｓのエラーを訂正できない旨をメモリコントローラ３に通知する。メモリコントローラ３は、データを出力することができないエラーメッセージをホストシステム１へ出力する。
【００７５】
このように、サブメモリ６からのデータの読み出しは、ホストシステム１が読み出し要求を入力するたびに実行されない。サブメモリ６の読み出し負荷を軽減することができるため、サブメモリ６におけるリードディスターブの発生を抑制し、サブメモリ６に格納されたデータの信頼性を確保することができる。
【００７６】
｛５．サブメモリ６の検査｝
以下、サブメモリ６を検査するときのメモリコントローラ５の動作について説明する。メモリコントローラ５は、メモリコントローラ３がホストシステム１からの読み出し要求に応答するのと並行して、サブメモリ６の各ブロックを検査する。これにより、バックアップ用のサブメモリ６に格納されたデータの信頼性を向上させる。
【００７７】
図８は、検査管理テーブル５４を示す図である。メモリコントローラ５は、検査管理テーブル５４を参照しながら、サブメモリ６の各ページを検査する。
【００７８】
図８に示すように、検査管理テーブル５４は、サブメモリ６の各ブロックの論理アドレスと、検査状況と、エラービット数とを対応付けて記録する。検査状況には、「０」、「１」、「２」のいずれかの数値が設定される。「０」は、未検査のブロックであることを示す。「１」は、未検査のブロックであり、かつ、優先的に検査する必要がある優先検査ブロックであることを示す。「２」は、検査が既に終了したブロックであることを示す。
【００７９】
エラービット数は、サブメモリ６の各ブロックで検出されたエラービット数ではない。検査管理テーブル５４のエラービット数は、メインメモリ４の各ブロックにおいて、最も多くのエラービットを有するエラーページのエラービット数である。たとえば、メインメモリ４のブロック７Ｂに含まれるページのうち、ページ７Ｐのエラービット数「６」が最大である場合を考える。この場合、検査管理テーブル５４において、ブロック７Ｂに対応するエラービット数として、「６」が記録される。
【００８０】
図９は、サブメモリ６を検査するメモリコントローラ５の動作を示すフローチャートである。以下、図８及び図９を参照しながら、サブメモリ６の各ブロックの検査について詳しく説明する。
【００８１】
メモリコントローラ５は、エラー記録データ３３がメモリコントローラ３から入力された場合（ステップＳ５０１においてＹｅｓ）、検査管理テーブル５４を更新し、優先検査ブロックを設定する（ステップＳ５０２）。たとえば、メモリコントローラ３が、ブロック８Ｂ（図２参照）の論理アドレス「０ｘ０５１４」と、エラービット数「９」とが記録されたエラー記録データ３３をメモリコントローラ５へ出力した場合を考える。この場合、図８に示すように、検査管理テーブル５４において、ブロック８Ｂのエラービット数が、「９」に更新される。ブロック８Ｂのエラービット数が既に記録されている場合、ブロック８Ｂのエラービット数は、エラー記録データ３３に基づいて上書きされる。
【００８２】
メモリコントローラ５は、検査管理テーブル５４に記録されたブロック８Ｂのエラービット数と、優先検査基準値とに基づいて、ブロック８Ｂを優先検査ブロックに設定するか否かを判定する。優先検査基準値は、サブメモリ６の未検査のブロックの中で、優先検査ブロックとして設定するか否かを判定するためのしきい値であり、１ページあたりのエラービット数として設定される。これは、検査管理テーブル５４のエラービット数が、ブロックの中でエラービットが最も多く発生しているページのエラービット数を示しているためである。
【００８３】
検査管理テーブル５４のブロック８Ｂにおいて、検査状況が「０」（未検査）に設定され、かつ、エラービット数が優先検査基準値を超えている場合、メモリコントローラ５は、ブロック８Ｂの検査状況を「１」に変更する。つまり、サブメモリ６のブロック８Ｂが、優先検査ブロックページに設定される。
【００８４】
検査管理テーブル５４のブロック８Ｂにおいて、検査状況が「０」（未検査）に設定され、かつ、エラービット数が優先検査基準値を超えていない場合、メモリコントローラ５は、ブロック８Ｂの検査状況を「０」のまま変更しない。これは、メインメモリ４のブロック８Ｂにおいて、リードディスターブが発生していないため、サブメモリ６のブロック８Ｂを優先的に検査する必要性が低いと考えられるためである。
【００８５】
検査管理テーブル５４のブロック８Ｂの検査状況が「２」（検査済み）に設定されている場合、メモリコントローラ５は、検査状況を「２」のまま変更しない。各ブロックの検査状況が「２」に設定された場合、検査状況が「０」または「１」に変更されることはない。これは、サブメモリ６のブロック８Ｂが既に検査されているため、サブメモリ６のブロック８Ｂに格納されたデータの信頼性が確保されているためである。この結果、検査済みのブロックのデータが繰り返し読み出されることを防止できる。
【００８６】
再び、図９を参照する。検査領域決定部５３は、検査管理テーブル５４を参照して、検査対象のブロックを決定する（ステップＳ５０３〜Ｓ５０５）。優先検査ブロックが検査管理テーブル５４に設定されている場合（ステップＳ５０３においてＹｅｓ）、検査領域決定部５３は、優先検査ブロックを検査対象として決定する（ステップＳ５０４）。複数の優先検査ブロックが検査管理テーブル５４に設定されている場合、検査対象は、エラービット数の大きい順に決定されればよい。
【００８７】
優先検査ブロックが検査管理テーブル５４に設定されていない場合（ステップＳ５０３においてＮｏ）、検査領域決定部５３は、未検査のブロックの中から検査対象を決定する（ステップＳ５０５）。検査対象は、たとえば、論理アドレスの順に設定される。
【００８８】
アクセス制御部５２は、サブメモリ６の検査対象のブロックから、データ４５Ｃを読み出す（ステップＳ５０６）。データ４５Ｃは、検査用に読み出された、１ブロック分のデータである。データ４５Ｃが検査対象のブロックにエラーなく記録されているか否かを確認するために、ＥＣＣ回路５１は、データ４５Ｃに対するエラー検出処理を行う（ステップＳ５０７）。
【００８９】
データ４５Ｃからエラーが検出されなかった場合（ステップＳ５０７においてＮｏ）、メモリコントローラ５は、検査対象のブロックの検査状況を、検査済みを示す「２」に変更する（ステップＳ５１１）。
【００９０】
一方、データ４５Ｃからエラーが検出された場合（ステップＳ５０７においてＹｅｓ）、ＥＣＣ回路５１は、ステップＳ４０３（図４参照）と同様に、検出されたエラーの訂正が可能であるか否かを確認する（ステップＳ５０８）。
【００９１】
検出されたエラーの訂正が不可能な場合（ステップＳ５０８においてＮｏ）、メモリコントローラ３は、データ復旧処理を実行する（ステップＳ５１３）。データ復旧処理は、メインメモリ４に格納されたデータを、検査対象のブロックに書き戻す処理である。データ復旧処理の詳細は後述する。
【００９２】
検出されたエラーの訂正が可能な場合（ステップＳ５０８においてＹｅｓ）、ＥＣＣ回路５１は、データ４５Ｃのエラーを訂正する（ステップＳ５０９）。アクセス制御部５２は、訂正されたデータ４５Ｃを検査対象のブロックに書き戻す（ステップＳ５１０）。
【００９３】
なお、検査領域決定部５３は、ページ単位でサブメモリ６を検査してもよい。この場合、検査対象のデータ４５Ｃは、1ページ分のデータとなる。サブメモリ６がページ単位で検査される場合、訂正されたデータ４５Ｃが書き戻されるタイミングは、エラー訂正直後でなくてもよい。これは、サブメモリ６に対するデータの書き戻しが、ブロック単位で行われるためである。たとえば、検査対象がページ８Ｐであり、かつ、ページ８Ｐのデータ４５Ｃにエラーが検出された場合、アクセス制御部５２は、ブロック７Ｂ（図２参照）に属する全てのページの検査が終了した後に、訂正されたデータ４５Ｃをページ８Ｐに書き戻せばよい。この場合、訂正されたデータ４５Ｃは、メモリコントローラ３により保持される。これにより、ページ８Ｐだけでなく、ブロック７Ｂに属する他のページで発生したエラーもリフレッシュすることができる。
【００９４】
また、ＮＡＮＤフラッシュメモリの場合、データの書き込み時にエラービットが発生する可能性がある。このため、データ４５Ｃのエラービット数が所定のしきい値よりも小さい場合、メモリコントローラ５は、サブメモリ６に対する負荷を軽減するために、データ４５Ｃのエラー訂正及び再書き込みを実行しなくてもよい。
【００９５】
訂正されたデータ４５Ｃがサブメモリ６に書き戻された後に（ステップＳ５１０）、検査管理テーブル５４が更新される（ステップＳ５１１）。具体的には、検査管理テーブル５４において、検査対象のブロックの検査状況が、「２」に変更される。
【００９６】
メモリコントローラ５は、サブメモリ６の全ブロックの検査が終了したか否かを確認する（ステップＳ５１２）。サブメモリ６の全ブロックの検査が終了した場合（ステップＳ５１２においてＹｅｓ）、メモリコントローラ５は、図９の処理を終了する。サブメモリ６の全ブロックの検査が終了していない場合（ステップＳ５１２においてＮｏ）、メモリコントローラ５は、未検査のブロックを検査するために、ステップＳ５０１に戻る。
【００９７】
｛６．データ復旧処理（ステップＳ５１３）｝
図１０は、データ復旧処理（ステップＳ５１３、図９参照）の流れを示すフローチャートである。上述したように、メモリコントローラ５は、検査対象のブロックから読み出したデータ４５Ｃのエラーを訂正できない場合、メインメモリ４から書き戻し用のデータを取得する。
【００９８】
メモリコントローラ５は、メモリコントローラ３に対して、データの読み出しを要求する（ステップＳ５６１）。具体的には、メモリコントローラ５は、検査対象のブロックの論理アドレスを出力する。メモリコントローラ３は、入力された論理アドレスに基づいて、検査対象のブロックに書き込まれたデータと同一のデータを、メインメモリ４から読み出し、読み出したデータをメモリコントローラ５へ出力する。このとき、メモリコントローラ３は、１ブロック分のデータを読み出す点を除き、図７に示す処理と同様の処理を実行する。
【００９９】
メモリコントローラ３は、図７に示す処理を実行する際に、読み出したデータのエラー検出を行い（ステップＳ５５３）、エラー訂正が可能であるか否かを判定する（ステップＳ５５４）。読み出したデータから検出されたエラーの訂正ができない場合（ステップＳ５５４においてＮｏ）、メモリコントローラ３は、メモリシステム２が故障したと判定する（ステップＳ５５７）。この場合、メモリコントローラ３は、検査対象のブロックに含まれるページの読み出し要求をホストシステム１から受け付けた際に、エラーメッセージをホストシステム１へ出力する。
【０１００】
再び、図１０を参照する。メモリコントローラ５は、読み出しデータがメモリコントローラ３から入力された場合（ステップＳ５６２においてＹｅｓ）、入力されたデータを検査対象のブロックに書き戻す（ステップＳ５６３）。これにより、サブメモリ６においてエラー訂正できないデータ４５Ｃが存在しても、サブメモリ６に記録されたデータ４５Ｃを復旧することができる。
【０１０１】
｛７．メモリ切替処理（ステップＳ４１０）｝
以下、メモリコントローラ３が、アクセス対象をメモリ４からメモリ６へ切り替える処理（ステップＳ４１０、図４参照）について説明する。メモリコントローラ３は、読み出したデータ４５Ｍのエラービット数が切替基準値よりも大きく（ステップＳ４０８においてＹｅｓ）、かつ、サブメモリ６の検査が終了した場合（ステップＳ４０９においてＹｅｓ）、アクセス対象のメモリを切り替える（ステップＳ４１０）。
【０１０２】
図１１は、読み出し対象のメモリを切り替えるときのメモリコントローラ３の動作を示すフローチャートである。動作指示部３４が、メモリコントローラ５に対して、アクセス対象のメモリをメモリ４からメモリ６へ切り替えることを指示する（ステップＳ４６１）。
【０１０３】
メモリコントローラ５は、アクセス対象の切り替え指示が入力された場合、検査管理テーブル５４を初期化する。すなわち、検査管理テーブル５４において、全ブロックの検査状況が「０」に設定され、エラービット数が消去される。メモリコントローラ５は、アクセス対象のメモリを、メモリ６からメモリ４へ切り替える。その後、メモリコントローラ５は、アクセス対象の切り替えが完了したことをメモリコントローラ３へ通知する。
【０１０４】
メモリコントローラ３は、切替完了の通知を受け付けた場合（ステップＳ４６２においてＹｅｓ）、エラー記録データ３３を消去する（ステップＳ４６３）。エラー記録データ３３には、メインメモリ４におけるエラーページの情報が記録されているためである。メモリコントローラ３は、アクセス対象をメモリ４からメモリ６に切り替える（ステップＳ４６４）。これにより、アクセス対象の切り替え処理（ステップＳ４１０）が完了する。
【０１０５】
以後、メモリ６がメインメモリとして使用され、メモリ４がサブメモリとして使用される。そして、メモリの切り替え条件が満たされた場合、メモリコントローラ３は、再び、アクセス対象のメモリを切り替える。本実施の形態において、読み出し用のメインメモリと、バックアップ用のサブメモリとが切り替わることによって、メインメモリとして使用されるメモリの読み出し負荷が軽減される。また、メモリ４でリードディスターブが発生した場合であっても、メモリ４がサブメモリに切り替えられた後に、メモリ４のエラーを復旧することができる。したがって、メモリ４，６に格納されるデータの信頼性を確保することができる。
【０１０６】
｛８．変形例｝
上記実施の形態において、メモリコントローラ３は、アクセス対象のメモリの切り替え条件の一つとして、読み出したデータ４５Ｍのエラービット数が切替基準値よりも大きいか否かを判定した（ステップＳ４０８）。しかし、メモリの切り替え条件は、これに限られない。
【０１０７】
図１２は、メモリコントローラ３の変形例に係る機能ブロック図である。図１２において、メモリコントローラ３は、リードカウンタ３５を備える。リードカウンタ３５は、メインメモリ４からのデータの読み出し回数をカウントする。読み出し回数は、メモリコントローラ３が各ページからデータを読み出すたびにカウントされる。メモリコントローラ３は、ステップＳ４０８の処理に代えて、リードカウンタ３５のカウント数が読み出し上限値を超えているか否かを判定する。この場合、読み出し上限値は、リードディスターブが発生すると想定される読み出し回数よりも小さく設定されることが望ましい。これにより、メモリコントローラ３は、リードディスターブが実際に発生する前に、アクセス対象のメモリを切り替えることができるため、データの信頼性を確保することができる。
【０１０８】
また、リードカウンタ３５は、メインメモリ４のページごとの読み出し回数をカウントしてもよい。この場合、メモリコントローラ３は、エラー記録データ３３をメモリコントローラ５に出力しなくてもよい（ステップＳ４０６、図４参照）。メモリコントローラ３は、ステップＳ４０６に代えて、読み出し回数が所定の読み出し基準値を超えたページが発生した場合、そのページを有するブロックの論理アドレスをメモリコントローラ５へ通知する。たとえば、ページ７Ｐ（図２参照）の読み出し回数が所定の読み出し基準値を超えた場合、動作指示部３４は、ブロック７Ｂの論理アドレスをメモリコントローラ５に出力する。メモリコントローラ５は、検査管理テーブル５４において、ブロック７Ｂの検査状況を、優先検査を示す「１」に設定すればよい。
【０１０９】
上記実施の形態において、メモリコントローラ３，５が、メモリシステム２に搭載される構成を説明した。しかし、ホストシステム１が、メモリコントローラ３，５を備える構成であってもよい。また、ＥＣＣ回路３１，５１は、メモリ４，６の内部にそれぞれ設けられてもよい。あるいは、ＥＣＣ回路３１，５１は、メモリコントローラ３及びメモリコントローラ５の内部に設けられてもよい。
【０１１０】
上記実施の形態において、メモリシステム２が、メモリコントローラ３，５を備える構成を説明した。しかし、メモリシステム２において、メモリコントローラ３が、メモリ４，６の両者に対するアクセスを制御してもよい。この場合、メモリコントローラ３は、ホストシステム１の読み出し要求及び書き込み要求を優先的に処理する。メモリコントローラ３は、ホストシステム１からの要求がないときに、サブメモリ６の検査を行えばよい。
【０１１１】
本実施の形態において、メモリ４，６が同一の論理アドレス空間を有する例について説明した。しかし、メモリ４，６は、互いに異なる論理アドレス空間を有していてもよい。この場合、メモリコントローラ３，５のいずれかが、メモリ４の論理アドレスと、メモリ６の論理アドレスとの対応関係を示すアドレステーブルを保持すればよい。
【符号の説明】
【０１１２】
１  ホストシステム
２  メモリシステム
３，５  メモリコントローラ
４  メモリ（メインメモリ）
６  メモリ（サブメモリ）
３１，５１  ＥＣＣ回路
３２，５２  アクセス制御部
３３  エラー記録データ
３４  動作指示部
３５  リードカウンタ
５３  検査領域決定部
５４  検査管理テーブル
【図１】
0005535113.tif 000002
【図２】
0005535113.tif 000003
【図３】
0005535113.tif 000004
【図４】
0005535113.tif 000005
【図５】
0005535113.tif 000006
【図６】
0005535113.tif 000007
【図７】
0005535113.tif 000008
【図８】
0005535113.tif 000009
【図９】
0005535113.tif 000010
【図１０】
0005535113.tif 000011
【図１１】
0005535113.tif 000012
【図１２】
0005535113.tif 000013