"再書き込み可能な不揮発性の半導体メモリに対するアクセスを制御するメモリコントローラであって、ホスト装置からの要求に応じて、前記ホスト装置が前記メモリコントローラを介してアクセス可能な前記半導体メモリに設定された通常アクセス領域から第1データを読み出すメモリインタフェースと、前記メモリインタフェースにより読み出された第1データのエラーを訂正するエラー訂正部と、前記読み出された第1データのエラーが前記エラー訂正部のエラー訂正能力を超えているか否かを判定する判定部と、前記読み出された第1データのエラーが前記エラー訂正能力を超えていない場合、エラー訂正された第1データに基づいて第1出力データを作成して前記ホスト装置に出力する第1出力制御部と、前記読み出された第1データのエラーが前記エラー訂正能力を超えている場合、前記通常アクセス領域のバックアップとして用いられる前記半導体メモリに設定されるバックアップ領域から、前記第1データのバックアップデータである第2データを読み出し、読み出した第2データに基づいて第2出力データを作成して前記ホスト装置に出力する第2出力制御部と、を備えるメモリコントローラ。請求項1に記載のメモリコントローラであって、前記エラー訂正部は、前記読み出した第2データのエラーを訂正し、前記第2出力制御部は、エラー訂正された第2データに基づいて前記第2出力データを作成するメモリコントローラ。請求項1または請求項2に記載のメモリコントローラであって、さらに、前記読み出された第1データのエラーが前記エラー訂正能力を超えている場合、前記第2データを前記バックアップ領域から読み出し、読み出した第2データを用いて、前記通常アクセス領域に格納されている第1データを修復するデータ修復部、を備えるメモリコントローラ。請求項1ないし請求項3のいずれかに記載のメモリコントローラであって、前記第1データは、前記ホスト装置により処理される実体データと、前記実体データから計算され、前記実体データに付加される付加ハッシュ値と、を含み、前記判定部は、エラー訂正された実体データからハッシュ値を計算し、計算したハッシュ値と、エラー訂正された第1データに含まれる付加ハッシュ値とが異なる場合、前記読み出された第1データのエラーが全て訂正されていないと判定するメモリコントローラ。請求項1ないし請求項4のいずれかに記載のメモリコントローラであって、前記第2出力制御部は、前記第2出力データとともに、前記通常アクセス領域に格納されているデータの修復が必要であることを前記ホスト装置に通知し、前記データ修復部は、前記ホスト装置からデータの修復を指示された場合、前記通常アクセス領域に格納されている第1データを修復するメモリコントローラ。NANDフラッシュメモリに記録されたデータを再書き込みリフレッシュすることにより、リードディスターブ現象の発生を防ぐことができる。特許文献1,2には、リフレッシュ対象の領域を決定する技術が記載されている。特許文献1に記載されているメモリ管理方法では、ブロックごとの読み出し回数が、テーブルに記録される。読み出し回数が閾値を超えたブロックが、リフレッシュ対象として決定される。特許文献2には、特許文献1と同様の方法を用いて、リフレッシュ対象のブロックを決定する。リフレッシュにより、リードディスターブ現象の発生を防ぐ場合、以下のような問題もある。リフレッシュでは、リフレッシュ対象のブロックからデータを予め読み出した上で、リフレッシュ対象のブロックに記録されたデータを消去する必要がある。ブロックのデータが消去されたタイミングで、電源が遮断された場合、予め読み出したデータが失われ、リフレッシュ対象のブロックのデータを復元できないおそれがある。特許文献1において、ブロックごとの読み出し回数を記録したテーブルは、メモリコントローラなどに設けられた不揮発性メモリなどに格納される。リフレッシュ中に電源が遮断された場合と同様に、テーブルの更新中に電源が遮断された場合、テーブルに記録された各ブロックの読み出し回数を保持できなくなるおそれがある。このため、リフレッシュによりリードディスターブ現象の発生を防ぐ場合、リフレッシュ中に電源が遮断された場合に備えた対策をメモリコントローラに施さなければならない。つまり、リフレッシュによりリードディスターブ現象を防ぐ場合、リフレッシュの対象の決定や、電源の遮断に対応するために、メモリコントローラの構成が複雑になるという問題があった。上記問題点に鑑み、本発明は、フラッシュメモリに格納するデータの信頼性を確保するとともに、構成を簡略化することができるメモリコントローラを提供することを目的とする。上記課題を解決するため、請求項1記載の発明は、再書き込み可能な不揮発性の半導体メモリに対するアクセスを制御するメモリコントローラであって、ホスト装置からの要求に応じて、前記ホスト装置が前記メモリコントローラを介してアクセス可能な前記半導体メモリに設定された通常アクセス領域から第1データを読み出すメモリインタフェースと、前記メモリインタフェースにより読み出された第1データのエラーを訂正するエラー訂正部と、前記読み出された第1データのエラーが前記エラー訂正部のエラー訂正能力を超えているか否かを判定する判定部と、前記読み出された第1データのエラーが前記エラー訂正能力を超えていない場合、エラー訂正された第1データに基づいて第1出力データを作成して前記ホスト装置に出力する第1出力制御部と、前記読み出された第1データのエラーが前記エラー訂正能力を超えている場合、前記通常アクセス領域のバックアップとして用いられる前記半導体メモリに設定されるバックアップ領域から、前記第1データのバックアップデータである第2データを読み出し、読み出した第2データに基づいて第2出力データを作成して前記ホスト装置に出力する第2出力制御部と、を備える。請求項2記載の発明は、請求項1に記載のメモリコントローラであって、前記エラー訂正部は、前記読み出した第2データのエラーを訂正し、前記第2出力制御部は、エラー訂正された第2データに基づいて前記第2出力データを作成する。請求項3記載の発明は、請求項1または請求項2に記載のメモリコントローラであって、さらに、前記読み出された第1データのエラーが前記エラー訂正能力を超えている場合、前記第2データを前記バックアップ領域から読み出し、読み出した第2データを用いて、前記通常アクセス領域に格納されている第1データを修復するデータ修復部、を備える。請求項4記載の発明は、請求項1ないし請求項3のいずれかに記載のメモリコントローラであって、前記第1データは、前記ホスト装置により処理される実体データと、前記実体データから計算され、前記実体データに付加される付加ハッシュ値と、を含み、前記判定部は、エラー訂正された実体データからハッシュ値を計算し、計算したハッシュ値と、エラー訂正された第1データに含まれる付加ハッシュ値とが異なる場合、前記読み出された第1データのエラーが全て訂正されていないと判定する。請求項5記載の発明は、請求項1ないし請求項4のいずれかに記載のメモリコントローラであって、前記第2出力制御部は、前記第2出力データとともに、前記通常アクセス領域に格納されているデータの修復が必要であることを前記ホスト装置に通知し、前記データ修復部は、前記ホスト装置からデータの修復を指示された場合、前記通常アクセス領域に格納されている第1データを修復する。本発明のメモリコントローラは、ホスト装置の要求に応じて通常アクセス領域から第1データを読み出した場合、読み出した第1データのエラーがエラー訂正部のエラー訂正能力を超えているか否かを判定する。メモリコントローラは、第1データのエラーがエラー訂正能力を超えている場合、第1データのバックアップデータである第2データをバックアップ領域から読み出し、第2データをホスト装置へ出力する。これにより、通常アクセス領域をリフレッシュすることなく、半導体メモリに格納されるデータの信頼性を確保することができる。また、本発明のメモリコントローラは、第1データのエラーがエラー訂正能力を超えている場合、第2データを用いて、通常アクセス領域に格納された第1データを修復する。通常アクセス領域に格納されている第1データの消去中に電源が遮断され、第1データの内容が変化したとしても、バックアップ領域に格納された第2データは、電源の遮断の影響を受けない。したがって、本発明のメモリコントローラは、電源が再び投入された後に、第2データを用いて第1データを修復することができる。以下、図面を参照しつつ、本発明の実施の形態について説明する。{1.全体構成}図1は、本実施の形態に係る情報処理システム100の機能ブロック図である。情報処理システム100は、ホスト装置1と、メモリシステム2とを備える。ホスト装置1は、たとえば、PCPersonalComputer又は携帯型の端末などである。メモリシステム2は、ホスト装置1に着脱可能なUSBUniversalSerialBusメモリや、メモリカードなどである。メモリシステム2は、メモリコントローラ3と、メモリ4とを備える。メモリコントローラ3は、ホスト装置1の要求に応じて、メモリ4に対するデータの書き込み、メモリ4からのデータの読み出しを行う。つまり、メモリコントローラ3は、メモリ4に対するアクセスを制御する。メモリ4は、再書き込み可能な不揮発性の半導体メモリである。本実施の形態において、メモリ4は、NANDフラッシュメモリである。メモリ4は、通常アクセス領域41と、バックアップ領域42とを有する。通常アクセス領域41は、メモリコントローラ3がホスト装置1から各種コマンドを受け付けたときにアクセスする領域である。バックアップ領域42は、通常アクセス領域41から読み出したデータのエラーを訂正できないときなどにメモリコントローラ3がアクセスする領域である。通常アクセス領域41及びバックアップ領域42の詳細は後述する。{2.メモリコントローラ3の構成}以下、メモリコントローラ3の構成について説明する。メモリコントローラ3は、制御部30と、ホストインタフェース31と、メモリインタフェース32と、アドレス変換部33と、ECCErrorCheckandCorrect回路34と、バッファ35と、判定部36とを備える。制御部30は、メモリコントローラ3の各機能部を制御する。制御部30は、修復アドレス保持部37と、対応テーブル38と、出力制御部39とを保持する。修復アドレス保持部37は、通常アクセス領域41のブロックのうち、修復が必要なページのアドレスを保持する。対応テーブル38は、通常アクセス領域41のページのアドレスと、バックアップ領域42のページのアドレスとの対応関係を記録したテーブルである。出力制御部39は、メモリ4から読み出したデータの出力を制御する。ホストインタフェース31は、ホスト装置1とメモリコントローラ3との間で、コマンドまたはデータの入出力を行うインタフェースである。つまり、ホストインタフェース31は、ホスト装置1から、読み出しコマンドや書き込みコマンドなどを入力する。ホストインタフェース31は、ホスト装置1に対して、メモリ4から読み出されたデータなどを出力する。メモリインタフェース32は、メモリコントローラ3とメモリ4との間で、コマンドまたはデータの入出力を行うインタフェースである。つまり、メモリインタフェース32は、メモリ4に対して、コマンド及び書き込み用のデータなどを出力する。メモリインタフェース32は、メモリコントローラ3に対して、メモリ4から読み出したデータなどを出力する。アドレス変換部33は、ホスト装置1からコマンドとともに入力された論理アドレスを、メモリ4の物理アドレスに変換する。アドレス変換部33は、論理アドレスと物理アドレスとの対応を示す変換テーブルを保持し、変換テーブルを用いてアドレスを変換する。ECC回路34は、メモリ4から読み出されたデータからエラーを検出するとともに、検出したエラーを訂正する回路である。たとえば、ECC回路34は、1024Byteのデータに対して、10bitのエラーを検出および訂正可能である。バッファ35は、ECC回路34によりエラー訂正されたデータを格納する。判定部36は、ハッシュ関数を用いて、ECC回路34のエラー訂正能力を超えるエラーがメモリ4から読み出されたデータに発生しているか否かを判定する。{3.メモリ4の構成}図2は、メモリ4の構成を示す図である。具体的には、メモリ4は、1枚のダイで構成される。ダイは、複数のブロックを含む。図2に示す例では、ダイは、K個のブロックを含む。ブロックは、複数のページを含む。図2に示す例では、ブロックは、Z個のページを含む。ページは、メモリ4におけるデータの読み出し単位及び書き込み単位である。メモリコントローラ3は、メモリ4に記録されているデータをページ単位で読み出し、書き込みを指示されたデータをページ単位でメモリ4に書き込むことができる。ブロックは、メモリ4におけるデータの消去単位である。本実施の形態において、メモリ4に書き込まれたデータの修復は、ブロック単位で行われる。データを修復する場合、メモリ4に書き込まれたデータを一度消去する必要があるためである。メモリコントローラ3が実行するデータ修復処理の詳細は、後述する。メモリ4において、ブロック0~J-1が通常アクセス領域41を構成する。ブロックJ~ブロックK-1がバックアップ領域42を構成する。本実施の形態では、通常アクセス領域41のブロックと、バックアップ領域のブロックとが1対1で対応する。バックアップ領域42は、通常アクセス領域41のブロックの一部に対応していてもよい。たとえば、バックアップ領域42は、通常アクセス領域41のうち、読み出し頻度が高と想定される領域、重量な情報が格納される領域、メモリ4の構造上エラーが発生しやすい領域などに対応させることが考えられる。また、メモリ4は、複数のダイを有し、ダイごとに通常アクセス領域41とバックアップ領域42とを割り当ててもよい。{4.動作概要}以下、メモリコントローラ3の動作の概略を説明する。メモリコントローラ3は、ホスト装置1から読み出しコマンドを入力した場合、通常アクセス領域41からデータを読み出す読み出し処理を実行する。メモリコントローラ3は、読み出しコマンドで指定されたアドレス指定アドレスに基づいて、読み出し対象のページを特定する。指定アドレスは、通常アクセス領域41のページのアドレスである。つまり、ホスト装置1が、メモリコントローラ3を介してメモリ4にアクセスすることができる領域は、通常アクセス領域に限定される。メモリコントローラ3は、通常アクセス領域41からデータを読み出す。判定部36は、通常アクセス領域41から読み出されたデータに、ECC回路34のエラー訂正能力を超えるエラーが発生しているか否かを判定する。エラー訂正能力を超えるエラーが発生していない場合、出力制御部39は、通常アクセス領域41から読み出されたデータをホスト装置1へ出力する。一方、エラー訂正能力を超えるエラーが発生した場合、メモリコントローラ3は、対応テーブル38を用いて、指定アドレスに対応するバックアップ領域42のページを特定する。出力制御部39は、特定したバックアップ領域42のページからデータを読み出し、読み出したデータをホスト装置1へ出力する。修復アドレス保持部37は、指定アドレスを修復対象アドレスとして保持する。メモリコントローラ3は、指定アドレスのページを含むブロックのデータを修復する修復処理を実行する。メモリコントローラ3は、修復対象アドレスと対応テーブル38とを用いて、修復対象のブロックに対応するバックアップ領域42のブロックを特定する。メモリコントローラ3は、特定したバックアップ領域42のブロックからデータを読み出す。メモリコントローラ3は、読み出したデータを、修復対象のブロックに再書き込みする。このように、メモリコントローラ3は、バックアップ領域42に記録されたデータを用いて、通常アクセス領域41に記録されたデータを修復する。このため、メモリコントローラ3は、リードディスターブ現象の発生を防ぐために、通常アクセス領域41のブロックに記録されたデータをリフレッシュしなくてもよい。したがって、リフレッシュの際に必要な、電源の遮断に対応するための機能をメモリコントローラ3に実装しなくてもよい。{5.メモリコントローラ3の動作}以下、メモリコントローラ3が実行する読み出し処理及び修復処理について詳しく説明する。{5.1.読み出し処理}図3は、読み出し処理を実行するメモリコントローラ3の動作を示すフローチャートである。図4は、通常アクセス領域41のページ、ブロックと、バックアップ領域42のページ、ブロックとの対応を示す図である。対応テーブル38図1参照は、通常アクセス領域41として設定されたページ41Pの論理アドレスと、バックアップ領域42として設定されたページ42Pの論理アドレスとを対応付けている。したがって、ページ41Pを含むブロック41Bに対応するバックアップ領域42のブロックは、ページ42Pを含むブロック42Bとなる。図3及び図4を参照しながら、ホスト装置1が通常アクセス領域41のページ41Pの読み出しを要求する場合を例にして、メモリコントローラ3の動作を説明する。メモリコントローラ3は、ホスト装置1から、ページ41Pのデータの読み出しを要求する読み出しコマンドを入力する。これにより、図3に示す処理が開始される。読み出しコマンドは、ページ41Pの論理アドレスを含む。ホスト装置1は、読み出しを要求する際に、バックアップ領域42の論理アドレスを指定することができない。つまり、ホスト装置1は、通常アクセス領域41に対するアクセスのみが可能である。バックアップ領域42からの読み出し回数を削減することにより、バックアップ領域42におけるリードディスターブ現象の発生を防いでいる。メモリコントローラ3は、読み出しコマンドを受け付けた場合、通常アクセス領域41のページ41Pからデータを読み出す。具体的には、アドレス変換部33は、ページ41Pの論理アドレスを物理アドレスに変換するステップS10。メモリインタフェース32は、ページ41Pの物理アドレスに対する読み出しコマンドをメモリ4に入力する。これにより、格納データ50が、ページ41Pから読み出されるステップS11。メモリインタフェース32は、読み出した格納データ50をECC回路34へ出力する。ECC回路34は、格納データ50で発生したエラーを検出し、検出したエラーを訂正するエラー訂正処理を実行するステップS12。図5は、格納データ50のフォーマットを示す図である。実体データ51は、ホスト装置1により処理されるデータの実体である。ハッシュ値52は、実体データ51のハッシュ値であり、実体データ51に付加される冗長データである。ハッシュ値52は、メモリ4に書き込まれる前に、エラーのない実体データ51から算出される。シンドローム53は、格納データ50のビットエラーの検出及び訂正のために用いられる冗長データである。メモリ4は、図5に示すフォーマットのデータを各ページに格納する。格納データ50のビットエラーは、ページ41Pに格納データ50を書き込む時、または、リードディスターブ現象により発生する。ECC回路34は、格納データ50が有するシンドローム53を用いて、格納データ50のビットエラーの検出及び訂正を行う。エラー訂正された格納データ50は、格納データ60としてバッファ35に格納される。判定部36は、ECC回路34から格納データ60を入力する。判定部36は、格納データ60を用いて、ECC回路34のエラー訂正能力を超えるエラーが格納データ50に発生していたか否かを判定するステップS13,S14。具体的には、判定部36は、予め設定されたハッシュ関数を用いて、格納データ60が有する実体データ61のハッシュ値を計算するステップS13。図5において、格納データ60が有するハッシュ値62は、実体データ61から生成されたデータでなく、ハッシュ値52がエラー訂正されることにより生成されたデータである。判定部36は、ハッシュ値62と、実体データ61から算出したハッシュ値とが一致するか否かを確認することによりステップS14、ECC回路34のエラー訂正能力を超えるビットエラーが格納データ50に発生しているか否かを判定する。格納データ50のビットエラーがECC回路34のエラー訂正能力の範囲内である場合、ECC回路34は、格納データ50のビットエラーを訂正することができる。この場合、ハッシュ値62と、実体データ61から算出されたハッシュ値とが一致するためステップS14においてYes、判定部36は、実体データ61をホスト装置1に出力することができると判断する。出力制御部39は、バッファ35から実体データ61を取得し、実体データ61を含む出力データを作成するステップS21。出力制御部39は、ホストインタフェース31を介して、出力データをホスト装置1に出力するステップS22。格納データ50のビットエラーがECC回路34のエラー訂正能力を超えている場合、ECC回路34は、格納データ50のビットエラーを訂正することができない。これは、リードディスターブ現象により、ECC回路34のエラー訂正能力を超えるビットエラーが格納データ50に発生したためである。この場合、実体データ61及びハッシュ値62の少なくとも一方が、ビットエラーを有するため、ハッシュ値62と、実体データ61から算出されたハッシュ値とは一致しないステップS14においてNo。判定部36は、実体データ61のエラーが訂正されたことが保証されていないため、実体データ61をホスト装置1に出力することができないと判断する。メモリコントローラ3は、ステップS15~S19の処理を実行して、バックアップ領域42から読み出したデータを、読み出しコマンドの応答としてホスト装置1に出力する。具体的には、判定部36は、リカバリフラグ55を制御部30に出力する。制御部30は、リカバリフラグ55が入力されることにより、読み出しコマンドで指定されたページ41Pの修復が必要であると判断する。修復アドレス保持部37は、ページ41Pの論理アドレスを修復対象アドレスとして保持するステップS15。図4に示すように、通常アクセス領域41のページ41Pと、バックアップ領域42のページ42Pとが対応付けられている。制御部30は、修復対象アドレスと対応テーブル38を参照して、修復対象アドレスに対応するページ42Pの論理アドレスを特定するステップS16。メモリコントローラ3は、特定したページ42Pのアドレスを用いて、バックアップ領域42のページ42Pから格納データ70を読み出すステップS17。ECC回路34は、バックアップ領域42から読み出された格納データ70に対するエラー検出処理及びエラー訂正処理を実行するステップS18。ステップS17,S18の処理は、それぞれ、ステップS11,S12の処理と同様である。バックアップ領域42からのデータの読み出し頻度は、通常アクセス領域41からのデータの読み出しに比べて非常に少ない。このため、バックアップ領域42ではリードディスターブ現象が発生する可能性は非常に低いため、ECC回路34は、格納データ70のエラーを訂正できると考えられる。エラー訂正された格納データ70は、バッファ35に格納される。このとき、バッファ35に格納されていた格納データ60は、格納データ70によって上書きされる。出力制御部39は、バッファ35に格納された格納データ70から、エラー訂正された実体データ図5に示す実体データ61に相当を抽出する。出力制御部39は、リカバリフラグ55と、抽出した実体データとを含む出力データを作成するステップS19。出力制御部39は、ホストインタフェース31を介して、作成した出力データをホスト装置1に出力するステップS20。このように、リードディスターブ現象により、訂正不可能なエラーが通常アクセス領域41に発生したとしても、メモリコントローラ3は、バックアップ領域42のデータをホスト装置1に出力する。したがって、メモリ4に対するリフレッシュを行わなくてもよいため、メモリコントローラ3の構成を簡略化することができる。ステップS13,S14の処理において、ハッシュ値に代えて、CRCCyclicRedundancyCheckを用いてもよい。ただし、リードディスターブ現象に伴うデータの変化などを考慮した場合、CRCではなく、ハッシュ値を用いる方が望ましい。この理由については、後述する。{5.2.修復処理}図6は、修復処理を実行するときにおけるメモリコントローラ3の動作を示すフローチャートである。修復処理は、通常アクセス領域41における修復対象の領域に対して、バックアップ領域から読み出したデータを書き込む処理である。ホスト装置1は、読み出しコマンドの応答として、実体データ61とともにリカバリフラグ55を入力した場合ステップS19,図3参照、格納データ50の修復が必要であると判断する。ホスト装置1は、データの修復を指示する修復コマンドをメモリコントローラ3へ出力する。メモリコントローラ3は、修復コマンドを受け付けた場合、図6に示す処理を開始する。ホスト装置1は、メモリ4におけるデータの修復がユーザの操作に影響を与えることが少ないと考えられるタイミングで、修復コマンドを出力する。これは、データの修復中に、メモリコントローラ3がホスト装置1の要求に応答することができないためである。たとえば、修復コマンドは、ホスト装置1の電源のオンまたはオフが指示されたタイミングで出力される。制御部30は、修復コマンドを受け付けた場合、修復アドレス保持部37が修復対象アドレスを保持しているか否かを確認するステップS51。修復対象アドレスを保持していない場合ステップS51においてNo、メモリコントローラ3は、図6に示す処理を終了する。一方、修復対象アドレスページ41Pの論理アドレスを保持している場合ステップS51においてYes、メモリコントローラ3は、修復の対象として、ページ41Pが属するブロック41B図4参照を決定する。図4では、ページ41Pは、ブロック41Bの先頭ページであるが、ブロック41Bに属するページのアドレスが、修復対象アドレスとして設定されていればよい。メモリ4に格納されているデータを修復する場合、データを消去する必要があるため、修復処理は、ブロック単位で行われる。メモリコントローラ3は、ブロック41Bに格納されたデータを消去するステップS52。具体的には、アドレス変換部33が、ブロック41Bの論理アドレスを物理アドレスに変換する。メモリインタフェース32は、ブロック41Bの物理アドレスに対する消去コマンドをメモリ4に出力する。これにより、ブロック41Bに格納されたデータが消去される。制御部30は、書き込み対象のページを決定するステップS53。書き込み対象のページは、たとえば、各ページの論理アドレスの順に決定される。ページ41Pが、書き込み対象のページとして決定された場合、メモリコントローラ3は、対応テーブル38を用いて、ページ41Pに対応するバックアップ領域42のページ42Pを特定する。メモリコントローラ3は、バックアップ領域42のページ42Pから、格納データ70を読み出すステップS54。ステップS54の処理は、図3に示すステップS17の処理と同様である。ECC回路34は、読み出した格納データ70に対して、エラー検出処理及びエラー訂正処理を行うステップS55。エラー訂正された格納データ70が、バッファ35に格納される。メモリコントローラ3は、エラー訂正された格納データ70をページ41Pに書き込むステップS56。具体的には、アドレス変換部33が、ページ41Pの論理アドレスを物理アドレスに変換する。メモリインタフェース32は、ページ41Pの物理アドレスに対する格納データ70の書き込みを指示するコマンドを、メモリ4に出力する。これにより、エラー訂正された格納データ70が、ページ41Pに書き込まれるステップS56。制御部30は、ブロック41Bに属する全てのページの書き込みが完了したか否かを確認するステップS57。全てのページの書き込みが完了した場合ステップS57においてYes、メモリコントローラ3は、図6に示す処理を終了する。一方、全てのページの書き込みが完了していない場合ステップS57においてNo、メモリコントローラ3は、ステップS53に戻る。ブロック41Bの全てのページの書き込みが完了するまでステップS57においてYes、メモリコントローラ3は、ステップS53~S57の処理を繰り返す。このようにして、ブロック41Bの各ページに格納されたデータが修復される。以上説明したように、メモリコントローラ3は、メモリ4の一部の領域をバックアップ領域42として使用する。近年、メモリ4NANDフラッシュメモリの記憶容量が大きくなっているため、メモリ4にバックアップ領域42を設けたとしても、ユーザは、必要なデータをメモリ4に格納することが可能である。メモリコントローラ3は、通常アクセス領域41のページ41Pから読み出した格納データ50のエラーを訂正できない場合、バックアップ領域42から、格納データ50のバックアップである格納データ70を読み出す。格納データ70に含まれる実体データが、ホスト装置1に出力される。また、メモリコントローラ3は、ページ41Pに格納されている格納データ50を、格納データ70を用いて修復する。したがって、メモリコントローラ3は、通常アクセス領域41におけるリードディスターブ現象の発生を防ぐために、通常アクセス領域41をリフレッシュしなくてもよい。リフレッシュ対象の領域を決定するための回路をメモリコントローラ3に実装しなくてもよいため、メモリコントローラ3の構成を簡略化できる。また、通常の読み出しに用いられるデータと、バックアップ用のデータが、一つの記憶媒体内に格納されるため、通常のミラーリングのように、バックアップ用のデータが他の記憶装置に格納されない。したがって、メモリコントローラ3は、他の記憶装置にアクセスすることなく、通常アクセス領域41に記録されているデータを容易に修復することができる。また、リードディスターブ現象により、たとえば、ページ41Pの各セルの値が全てゼロとなる場合が発生することが考えられる。この場合であっても、メモリコントローラ3は、格納データ50の修復が必要であると判定するとともに、格納データ50を復元することができる。以下、図6を参照しながら、この理由を説明する。メモリコントローラ3は、ページ41Pの読み出しコマンドを受け付けた場合、リードディスターブ現象により全ての値がゼロとなった格納データ50を読み出す。エラー訂正された格納データ50格納データ60において、実体データ61及びハッシュ値62図5参照は、いずれもゼロとなる。判定部36は、値が全てゼロの実体データ61からハッシュ値を計算するステップS13。しかし、値が全てゼロの実体データ61から計算されたハッシュ値は、ゼロとならない。このため、ハッシュ値62と、実体データ61から計算されたハッシュ値とは一致しないステップS14においてNo。この場合、メモリコントローラ3は、ページ41Pの修復が必要であると判断し、ページ42Pの格納データ70を用いて、ページ41Pを修復することができる。また、修復処理を実行する場合、ブロック41Bからのデータの消去中に電源が遮断されることがある。この場合、メモリ4が異常な動作をする可能性があるため、ブロック41Bに書き込まれていたデータの内容を保証することができない。しかし、本実施の形態では、ページの各セルの値が全てゼロとなったときと同様に、消去対象のブロックの各ページのデータを復元することが可能である。したがって、メモリコントローラ3及びメモリ4に、電源遮断に対応する機能を設けなくてもよい。また、ECC部34のエラー訂正能力以上のエラーが格納データ50に発生したか否かを判定する場合ステップS13,S14、ハッシュ値を用いる方が望ましい。CRCは、全てがゼロのデータに対して、エラーが発生したか否かを判定することができないためである。また、CRCは、ハッシュ値に比べて耐衝突性が極めて弱い。このため、ブロック単位でのデータの消去中に電源の遮断が発生し、ブロックに格納されていたデータが変化した場合であっても、ECC回路34のエラー訂正能力以上のエラーが発生したことを検出できないおそれがある。これらのことから、ECC回路34のエラー訂正能力を超えるエラーが格納データに発生したか否かを判定するための冗長データとして、ハッシュ値を用いることが望ましい。上記実施の形態では、ホスト装置1が、リカバリフラグ55の入力に応じて、修復コマンドを出力する例を説明した。しかし、ホスト装置1は、リカバリフラグ55の入力の有無に関係なく、定期的に修復コマンドを出力してもよい。または、メモリコントローラ3が、定期的に修復処理を実行してもよい。"