"不揮発性のメモリセルを複数有するメモリコアと、前記メモリコアに接続されたコントローラと、与えられたコマンドに従って、前記コントローラを制御して前記メモリコアにアクセスするデータ修復システムとを備え、前記データ修復システムは、前記複数のメモリセルのうち、与えられたアドレス範囲に含まれるメモリセルのしきい値を変化させるしきい値変更機能と、前記アドレス範囲に含まれるメモリセルにゲート電圧を印加して、当該メモリセルのデータを読み出すデータ読出機能と、前記データ読出機能によって読み出したデータと前記ゲート電圧とに基づいて、前記アドレス範囲に含まれるメモリセルのしきい値を算出するしきい値算出機能と、前記しきい値変更機能の動作結果と、前記しきい値算出機能によって算出したしきい値とに基づいて、前記アドレス範囲に含まれるメモリセルの真のデータを判別する判別機能と、前記判別機能による判別結果に基づいて、ビットエラーを修復する修復機能とを有しており、前記しきい値変更機能、前記データ読出機能、前記しきい値算出機能、前記判別機能、および前記修復機能のうち、前記コマンドを実行するために必要な機能を動作させて、前記コマンドの実行結果を出力することを特徴とする不揮発性半導体メモリシステム。請求項1の不揮発性半導体メモリシステムにおいて、前記データ修復システムは、前記コマンドを受け、通知された、前記コマンドの実行に必要な機能に基づいて前記コントローラを制御するコマンド処理部と、前記メモリコアに接続され、前記メモリセルに対するデータの入出力を行う入出力回路と、前記しきい値を記録するメモリと、前記コマンドの実行に必要な機能を特定し、当該特定した機能を、前記コマンド処理部に通知するデータ判別部とを備え、前記データ判別部は、前記特定した機能を動作させ、当該動作させた結果として得られた、前記コマンドの実行結果を、前記コマンド処理部に通知するものであり、前記コマンド処理部は、前記データ判別部から通知された、前記コマンドの実行結果を、前記データ修復システムの外部に出力することを特徴とする不揮発性半導体メモリシステム。請求項1の不揮発性半導体メモリシステムにおいて、前記データ修復システムは、前記データ読出機能によって読み出したデータを論理演算する機能を有することを特徴とする不揮発性半導体メモリシステム。請求項1の不揮発性半導体メモリシステムにおいて、前記データ修復システムは、前記データ読出機能によって読み出したデータのうち、論理値が0、あるいは1であるビットの個数を算出する機能を有することを特徴とする不揮発性半導体メモリシステム。請求項1の不揮発性半導体メモリシステムにおいて、前記データ修復システムは、前記しきい値算出機能において、前記データ読出機能を複数の異なるゲート電圧で動作させ、当該複数のゲート電圧と、当該複数のゲート電圧で読み出されたそれぞれのデータとに基づいて、前記しきい値を算出することを特徴とする不揮発性半導体メモリシステム。請求項1の不揮発性半導体メモリシステムにおいて、前記データ修復システムは、第1および第2のゲート電圧のそれぞれで、前記データ読出機能を動作させ、当該動作により読み出した各データを比較する機能を有することを特徴とする不揮発性半導体メモリシステム。請求項1の不揮発性半導体メモリシステムにおいて、前記データ修復システムは、前記しきい値変更機能の動作前後のそれぞれについて、前記しきい値算出機能によってしきい値を算出し、これらしきい値の差と、所定の値とを比較する機能を有することを特徴とする不揮発性半導体メモリシステム。請求項2の不揮発性半導体メモリシステムにおいて、前記データ修復システムは、前記データ読出機能によって読み出したデータを前記メモリに記録し、前記メモリに記録されたデータのビットエラーを修復してから、前記メモリ内のデータを、前記アドレス範囲に含まれるメモリセルに書き戻す機能を有することを特徴とする不揮発性半導体メモリシステム。請求項2の不揮発性半導体メモリシステムにおいて、前記データ修復システムは、前記アドレス範囲に含まれるメモリセルに、前記ゲート電圧を供給するアナログ電源回路と、前記アドレス範囲に含まれるメモリセルに流れる電流を検知する電流検知回路とを備えていることを特徴とする不揮発性半導体メモリシステム。請求項1の不揮発性半導体メモリシステムにおいて、前記データ修復システムは、電源投入時に、前記アドレス範囲について、前記しきい値変更機能、前記データ読出機能、前記しきい値算出機能、前記判別機能、および前記修復機能を動作可能に構成されていることを特徴とする不揮発性半導体メモリシステム。請求項1の不揮発性半導体メモリシステムを備えていることを特徴とするストレージデバイス。特許文献1の技術では、一旦、記録媒体をホストコンピュータに装着し、ホストコンピュータに、ファイルシステムを修復するための識別情報を記録しておく必要がある。つまり、識別情報が記録されていない別のホストコンピュータに記録媒体を装着しても、その記録媒体に構築されているファイルシステムの故障を修復することができない。特許文献2,3の技術によると、上述した問題は生じないが、別の問題がある。具体的に、特許文献2の技術では、ECC機能によるエラー訂正のために、エラー訂正用のメモリセルが必要である。ECC機能によるエラー訂正可能なデータのビット数は、エラー訂正用のメモリセルの数に応じて決まる。例えば、8ビットのデータに対して、4ビットの訂正用のメモリセルを用いると、1ビットのエラー訂正ができる。エラー訂正用のメモリセルの数を増やすことで、訂正可能なエラービットの数が増加するが、その分、ECC機能を備えた回路の規模が増大してしまう。また、特許文献3の技術では、パリティチェックによってデータのエラーを検出している。例えば、8ビットのデータに対して、1ビットのパリティビットを付加しており、1ビットのみのエラー検出が可能である。そして、エラーが検出できた場合に、エラーを訂正するようにしている。つまり、8ビットのデータ中に、2ビット以上のエラーが存在する場合には、そのエラーを検出できないため、訂正することができない。また、エラーの検出ができたとしても、上述した第1および第2のデータが同一である場合には、エラーを訂正することができない。以上のように、特許文献2,3の技術では、例えば、フラッシュメモリを長期間放置することで、複数のメモリセル中の電子が抜けて、大量のビットエラーが発生すると、そのエラーの訂正ができなくなってしまう。かかる点に鑑みて、本発明は、大量のビットエラーの修復が可能で、かつデータの長期保証が可能な不揮発性半導体メモリシステムを提供することを課題とする。上記課題を解決するため本発明によって次のような解決手段を講じた。例えば、不揮発性半導体メモリシステムは、不揮発性のメモリセルを複数有するメモリコアと、メモリコアに接続されたコントローラと、与えられたコマンドに従って、コントローラを制御してメモリコアにアクセスするデータ修復システムとを備え、データ修復システムは、複数のメモリセルのうち、与えられたアドレス範囲に含まれるメモリセルのしきい値を変化させるしきい値変更機能と、アドレス範囲に含まれるメモリセルにゲート電圧を印加して、当該メモリセルのデータを読み出すデータ読出機能と、データ読出機能によって読み出したデータとゲート電圧とに基づいて、アドレス範囲に含まれるメモリセルのしきい値を算出するしきい値算出機能と、しきい値変更機能の動作結果と、しきい値算出機能によって算出したしきい値とに基づいて、アドレス範囲に含まれるメモリセルの真のデータを判別する判別機能と、判別機能による判別結果に基づいて、ビットエラーを修復する修復機能とを有しており、しきい値変更機能、データ読出機能、しきい値算出機能、判別機能、および修復機能のうち、コマンドを実行するために必要な機能を動作させて、コマンドの実行結果を出力する。これによると、データ修復システムは、外部から入力されたコマンドに従って、メモリコアに対するアクセス制御を行うことができる。また、コマンドの実行結果が出力されるため、例えば、コマンドを入力したユーザは、その実行結果を知ることができる。具体的に、しきい値算出機能によると、メモリセルから読み出したデータと、そのデータの読み出しに用いたゲート電圧とに基づいて、しきい値の算出が行われる。したがって、例えば、不揮発性半導体メモリを長期間放置したり、データの書き換え回数が増加することにより、多くのメモセルのしきい値が劣化していても、そのしきい値が正確にわかる。つまり、算出したしきい値が劣化しているか否かがわかるため、メモリセルのデータを修復すべき否かを判断することができる。また、しきい値変更機能によって、しきい値が変化した場合に、しきい値算出機能を動作させることで、しきい値の実際の変化量がわかる。したがって、しきい値変更機能によるしきい値の変化量と、しきい値算出機能による、しきい値の実際の変化量とに基づいて、判別機能によって、所定のアドレス範囲に含まれるメモリセルの真のデータを判別することができる。そして、修復機能を動作させることで、メモリセルのデータを真のデータに修復することができる。以上のことから、発生するビットエラーの数にかかわらず、真のデータを判別でき、エラービットを修復することができる。すなわち、メモリセルに記録されているデータの長期保証が可能となる。具体的に、データ修復システムは、コマンドを受け、通知された、コマンドの実行に必要な機能に基づいてコントローラを制御するコマンド処理部と、メモリコアに接続され、メモリセルに対するデータの入出力を行う入出力回路と、しきい値を記録するメモリと、コマンドの実行に必要な機能を特定し、当該特定した機能を、コマンド処理部に通知するデータ判別部とを備えている。そして、データ判別部は、特定した機能を動作させ、当該動作させた結果として得られた、コマンドの実行結果を、コマンド処理部に通知するものであり、コマンド処理部は、データ判別部から通知された、コマンドの実行結果をデータ修復システムの外部に出力する。あるいは、データ修復システムは、電源投入時に、与えられたアドレス範囲について、しきい値変更機能、データ読出機能、しきい値算出機能、判別機能、および修復機能を動作可能に構成されていてもよい。これにより、コマンドを入力せずに、電源投入時に各機能を動作させることができるため、真のデータの判別やビットエラーの修復の自動化を図ることができる。本発明によると、不揮発性半導体メモリシステムによって、大量のビットエラーを修復することができ、データの長期保証が可能となる。図1は、本発明の一実施形態に係る不揮発性半導体メモリシステムの構成を示すブロック図である。不揮発性半導体メモリシステムでは、外部装置18から発行されるコマンドによって、メモリコア10に対するデータの書き込み、消去、読み出し等が行われる。不揮発性半導体メモリシステムは、不揮発性のメモリセルを複数有するメモリコア10と、コントローラ20と、コントローラ20を制御してメモリコア10にアクセスするデータ修復システム30とを備えている。コントローラ20は、コマンドバス11を介して外部装置18に接続されている。また、コントローラ20は、コントロールバス12を介してメモリコア10に接続されている。コントローラ20は、例えば、外部装置18から書込コマンドを受けると、メモリコア10を制御して、メモリセルにデータを書き込む。メモリセルに書き込まれるデータ、およびデータが書き込まれるメモリセルのアドレスは、外部装置18からアドレスデータバス16を介してメモリコア10に入力される。また、コントローラ20は、データ修復システム30から、信号線15を介して入力される内部コマンドに従って、メモリコア10を制御する。コントローラ20による制御結果は、メモリコア10からアドレスデータバス16に出力される。データ修復システム30は、外部装置18と信号線13,14で接続されており、外部装置18から信号線14を介して入力される外部コマンドを解釈して、外部コマンドを実行するために必要な内部コマンドをコントローラ20に出力する。これにより、データ修復システム30は、コントローラ20を制御してメモリコア10にアクセスすることができる。また、データ修復システム30は、信号線13を介して、外部コマンドの実行結果を外部装置18に出力する。外部コマンドは、例えばユーザが外部装置18から入力するコマンドであり、メモリセルの状態を解析するための解析コマンドや、メモリセルのデータを修復するための修復コマンドである。したがって、外部コマンドの実行結果とは、解析結果や修復結果を示す。修復コマンドによって、メモリセルのデータを修復する場合には、外部装置18から信号線14を介して、修復に必要な情報がデータ修復システム30に入力される。そして、データ修復システム30からアドレスデータバス16を介して、修復に必要な情報がメモリコア10に入力される。図2は、本実施形態に係るデータ修復システムの構成例を示すブロック図である。データ修復システム30は、コマンド処理部301と、例えばSRAMStaticRandomAccessMemoryで構成されたワークメモリ302と、データ判別部303と、入出力回路304,305とを備えている。コマンド処理部301は、外部装置18から入力された外部コマンドを解釈し、外部コマンドが例えば解析コマンドであるということをデータ判別部303に通知する。また、コマンド処理部301は、データ判別部303から通知された内部コマンドをコントローラ20に出力する一方、データ判別部303から通知された外部コマンドの実行結果を外部装置18に出力する。データ判別部303は、外部コマンドを実行するために必要な機能を複数有しており、外部コマンドを実行するために必要な機能を動作させる。例えば、外部コマンドが解析コマンドである場合、データ判別部303は、解析コマンドを実行するために必要な各機能を特定して、その特定した各機能のそれぞれを示す内部コマンド例えば、後述する、フェイルビットカウント算出機能に対応するフェイルビットカウント算出コマンドをコマンド処理部301に通知する。そして、その特定した各機能を動作させる。これにより、データ判別部303は、メモリコア10から出力された、メモリセルのアドレスおよびデータ等のメモリセルの情報を取得することができ、取得した情報に基づいて、メモリセルの状態を解析することができる。メモリセルの情報は、入出力回路304,305を介してデータ判別部303に入力される。データ判別部303において、各機能が動作した結果、つまり外部コマンドの実行結果は、コマンド処理部301に通知される。なお、データ判別部303は、内部コマンドの実行結果をコマンド処理部301に通知してもよい。この場合、コマンド処理部301は、内部コマンドの実行結果を外部装置18に出力してもよい。このようなデータ判別部303は、論理回路あるいはプログラム実行可能なコンピュータで構成することができる。ワークメモリ302には、データ判別部303の各機能が動作した結果得られた情報等が格納される。ワークメモリ302は、例えば、フェイルビットカウントテーブルと、アドレス/しきい値テーブルとを有する。フェイルビットカウントテーブルには、後述するフェイルビットカウント算出機能の動作結果が格納される。また、アドレス/しきい値テーブルには、後述する、メモリセルのしきい値算出機能の動作結果が格納される。入出力回路304,305は、メモリセルのアドレスが入出力されるアドレスI/OInputOutput305と、メモリセルのデータが入出力されるデータI/O304とで構成される。以上のように構成されたデータ修復システム30において、データ判別部303が有する複数の機能について説明する。-フェイルビットカウント算出機能-図3は、データ判別部におけるフェイルビットカウント算出機能の処理の例を示すフローチャートである。フェイルビットカウント算出機能は、与えられた所定のアドレス範囲において、任意のゲート電圧でメモリセルのデータを読み出し、その読み出したデータの論理値が0あるいは1であるビットフェイルビットの個数を算出する機能である。以下では、論理値が1であるビットの個数を算出する場合について説明する。まず、初期化処理として、所定のアドレス範囲のうち、開始アドレスを示すStart_Addressが、変数Addressに格納される。また、変数BitCountに、0が格納されるS301。そして、メモリセルのデータを読み出すための、ゲート電圧Vgが任意に設定されるS302。変数Addressの値によって示されるメモリセルに、S302で設定されたゲート電圧Vgを印加してデータが読み出されデータ読出機能、そのデータが変数Dataに格納されるS303。読み出されたデータは、例えば8ビットとする。S303で読み出されたデータについて、論理演算が行われ、ビットが1である個数が、変数Bitsumに格納されるS304。具体的に、変数Dataに格納されたデータの各ビットがそれぞれ、最下位のビットまでシフトされて、最下位のビットと0x0116進数との論理積が求められる。そして、それぞれの論理積の結果が加算され、加算結果が変数Bitsumに格納される。S304で得られた、変数Bitsumの値が、変数BitCountの値に加算されるS305。その後、変数Addressの値が、所定のアドレス範囲のうち、終了アドレスを示すEnd_Addressであるかどうかが判断されるS306。変数Addressの値が、End_Addressと一致しない場合S306のNo肢、変数Adderssの値がインクリメントされてS303に戻る。一方、変数Addressの値が、End_Addressと一致する場合S306のYes肢、変数BitCountの値が出力されて処理が終了するS308。以上のような処理を、複数の異なるゲート電圧を用いて実行することで、ゲート電圧値毎のフェイルビットの個数を得ることができる。したがって、フェイルビットの個数が変化した前後におけるゲート電圧値の範囲と、変化したフェイルビットの個数とに基づいて、そのゲート電圧値の範囲にしきい値を有するメモリセルのビット数がわかる。すなわち、所定のアドレス範囲に含まれるメモリセルのしきい値の分布を知ることができる。なお、ゲート電圧値とフェイルビットの個数との関係は、図2に示すワークメモリ302内のフェイルビットカウントテーブルに格納すればよい。また、当該機能を、任意のアドレス範囲として、全アドレス範囲や1セクタ分のアドレス範囲に対して動作させてもよい。-不安定ビットのアドレス算出機能-図4は、データ判別部における不安定ビットのアドレス算出機能の処理の例を示すフローチャートである。不安定ビットのアドレス算出機能は、不安定な状態になっているメモリセルのアドレスを算出する機能である。ここで、不安定な状態のメモリセルとは、例えば温度条件により、データの論理値が、0あるいは1のいずれかに変化しうる状態にあるメモリセルのことである。まず、処理対象となるアドレス範囲として、変数Start_Addressの値および変数End_Addressの値が設定されるとともに、変数Vgに第1のゲート電圧値Vg1が格納されるS401。なお、アドレス範囲は任意に設定してもよい。そして、変数Vgの値のゲート電圧で、設定されたアドレス範囲に含まれるメモリセルのデータが読み出され、そのデータが、図2に示すワークメモリ302内の変数RAM1に格納されるS402。その後、変数Vgに、第1のゲート電圧値Vg1とは異なる第2のゲート電圧値Vg2が格納されるS403。変数Vgの値のゲート電圧で、設定されたアドレス範囲に含まれるメモリセルのデータが読み出され、そのデータが、図2に示すワークメモリ302内の変数RAM2に格納されるS404。そして、変数RAM1および変数RAM2に格納されたそれぞれのデータが比較され、各データのビットが不一致となる場合、そのビットメモリセルのアドレスが、変数unstable_Addressに格納される。以上の処理により、不安定な状態になっているメモリセルのアドレスを算出することができる。なお、第1および第2のゲート電圧値Vg1,Vg2は、上述したフェイルビットカウント算出機能の動作結果に基づいて決定すればよい。例えば、フェイルビットの個数が比較的多く変化した前後におけるゲート電圧値を用いればよい。このような異なる2つのゲート電圧で読み出されたそれぞれのデータには、互いに異なるビットが含まれるからである。また、変数Start_Addressの値および変数End_Addressの値を設定しなくてもよい。この場合、全アドレス範囲について、上述した処理を行えばよい。-メモリセルのしきい値算出機能-図5は、データ判別部におけるメモリセルのしきい値算出機能の処理の例を示すフローチャートである。メモリセルのしきい値算出機能は、与えられたアドレス範囲に含まれるメモリセルのしきい値を算出する機能である。まず、初期データとして、変数Pre_DATAに、例えば8ビットのデータである0xFF16進数が格納されるS501。また、配列変数Vtに、ゲート電圧値の初期値としてStart_Vgが格納されるS502。また、変数Vgに、Start_Vgが格納されるS503。そして、変数Vgの値のゲート電圧が印加されて、変数Addressの値によって示されるメモリセルのデータが読み出され、そのデータが変数CurrentDataに格納される。また、変数CurrentDataの値と変数Pre_DATAの値との排他的論理和の結果が、変数Data2に格納されるS504。変数Addressには、例えば8ビット分のアドレスが格納されている。その後、変数Data2に格納されたデータの各ビットが、1であるか否かが判断される。具体的に、変数Data2に格納されたデータの各ビットが、最下位のビットまでシフトされて、最下位のビットと0x0116進数との論理積が求められ、その結果が1であるか否かが判断される。ここで、論理積の結果が1である場合には、配列変数Vtに変数Vgの値が格納され、論理積の結果が1でない場合には、変数Vtの値が保持されるS505。そして、変数Pre_DATAに変数CurrentDataの値が格納されるS506。また、変数Vgの値が、Last_Vgと等しいか否かが判断されるS507。Last_Vgは、S504~S506に示されるループ処理の終了条件となるゲート電圧値である。変数Vgの値がLast_Vgと等しくない場合、変数Vgの値が所定の値Vstepだけ更新されてS504に戻る。つまり、複数の異なるゲート電圧で、メモリセルのデータが読み出されることになる。変数Vgの値がLast_Vgと等しい場合、処理を終了する。以上の処理により、所定のアドレス範囲に含まれるメモリセルのしきい値がわかる。得られたしきい値は、アドレスと関連付けられて、図2に示すワークメモリ内のアドレス/しきい値テーブルに格納される。なお、当該機能を、任意のアドレス範囲について動作させることで、8ビット分以上のアドレス範囲に含まれるメモリセルのしきい値を得ることができる。-修復データ判別機能-図6は、データ判別部における修復データ判別機能の処理の例を示すフローチャートである。修復データ判別機能は、所定のアドレス範囲に含まれるメモリセルの真のデータ、つまり、メモリセルにデータが書き込まれたときの論理値を判別する機能である。まず、不安定ビットのアドレス算出機能図4参照によって算出されたアドレスが、変数uAddressに格納されるS601。次に、変数uAddressの値を用いて、メモリセルのしきい値算出機能図5参照が実行される。これによって算出されたしきい値が、変数uVt1に格納されるS602。そして、プログラムに必要な電圧として、例えば、メモリセルの書き込み特性を知るために必要な1パルス分の電圧を、変数uAddressの値で示されるメモリセルに印加するS603。これにより、メモリセルのしきい値が微少に変化するしきい値変更機能。なお、S603において、消去電圧やワード線ストレスなど他の手段を用いて、しきい値を変化させてもよい。再度、メモリセルのしきい値算出機能が実行され、得られたしきい値が、変数uVt2に格納されるS604。つまり、S602~S604において、しきい値の変化の前後における、メモリセルのしきい値が得られる。そして、変数uVt1の値とuVt2の値との差分が、定数Aの値よりも大きいか否かが判断される。この差分が、定数Aよりも大きい場合には、変数true_Dataに1が格納され、小さい場合には、変数true_Dataに0が格納されるS605。なお、定数Aの値は、既知のメモリセルの特性に基づいて設定されるものであり、メモリセルの書き込み特性から経験的に得られる値である。例えば、定数Aは、書き込み状態のメモリセルが経時変動したときに、S603において、メモリセルに印加された電圧によって変化しうるしきい値に相当する。したがって、S603によって、メモリセルのしきい値が変化しうる量よりも、メモリセルのしきい値が実際に変化した量が大きい場合は、そのメモリセルは書き込みされすい状態となっていると言える。すなわち、そのメモリセルの真データは、1消去状態であったということになる。以上の処理により、メモリセルの真のデータを判別することができる。なお、S701を省略してもよい。この場合、S702およびS704において、全アドレス範囲について、メモリセルのしきい値を算出すればよい。また、当該機能の実行により判別できた真のデータによって、メモリセルのデータを修復することができる。データの修復については、外部装置18から修復コマンドと、修復対象のメモリセルのアドレスおよびそのメモリセルの真のデータとを入力してもよい。あるいは、修復コマンドを入力せずに、データ判別部303が、上記各機能の実行によって取得したアドレスおよび真のデータを用いて、メモリセルのデータを修復するようにしてもよい修復機能。-修復データ判別機能の別の例-図7は、データ判別部における修復データ判別機能の処理の例を示す別のフローチャートである。当該修復データ判別機能には、データを修復する機能も含まれている。まず、不安定ビットのアドレス算出機能図4参照によって算出されたアドレスが、変数uAddressに格納されるS701。変数select_areaには、データ修復の対象となるアドレス範囲が格納されており、そのアドレス範囲に含まれるメモリセルのデータが読み出され、図2に示すワークメモリに書き出されるS702。変数select_areaの値は、変数uAddressの値を含んだアドレス範囲でもよく、変数uAddressの値と同一でもよい。そして、変数select_areaの値で示されるメモリセルに対して、そのデータが0となるようにプログラムが行われるS703。これにより、しきい値が変化する。その後、変数select_areaの値で示されるメモリセルのデータが消去されS704、メモリセルのしきい値算出機能図5参照を動作させ、得られたしきい値が、変数uVt3に格納されるS705。その後、変数uVt3の値と定数Bの値との大小関係が判断される。変数uVt3の値が、定数Bの値よりも大きい場合には、変数true_Dataに1が格納され、小さい場合には、変数true_Dataに0が格納されるS706。これにより、データ判別部303は、S702において、ワークメモリ302に読み出したデータを、変数true_Dataの値に従って、真のデータに修復することができる。なお、定数Bの値は既知のメモリセルの特性から、メモリセルの真のデータを判別できるように指定する。ここでは、S704でデータが消去された後に、S705で取得されたしきい値が、正常なメモリセルのしきい値例えば定数Bの値と比べて高いか否かで真のデータを判別している。あるメモリセルのデータを消去した後のしきい値は、そのメモリセルのデータを消去する速さに関係し、しきい値が低いほど、データを速く消去できるという特性になる。この特性を利用して、消去のスピードが速いとき、すなわち、変数uVt3の値が定数Bの値よりも小さいときは、真のデータが0、逆に、消去のスピードが遅いとき、すなわち、変数uVt3の値が定数Bの値よりも大きいときは、真のデータが1と判別することができる。そして、ワークメモリ302に退避されたデータが、データ修復の対象となったアドレス範囲に含まれるメモリセルに書き戻されるS707。以上の処理により、不安定状態になっているメモリセルのデータを真のデータに修復することができる。以上、本実施形態によると、例えば解析コマンドにより、上述した4つの機能が動作することで、メモリセルのデータ、アドレスおよびしきい値を得ることができる。これにより、どのアドレスのメモリセルのしきい値が劣化しているか否かがわかる。また、解析コマンドの実行結果に基づいて、修復コマンドを実行することでメモリセルのデータを修復することができる。したがって、しきい値が劣化しているメモリセルの数にかかわらず、メモリセルのデータを修復することができる。つまり、大量のビットエラーを修復することができ、データの長期保証が可能となる。また、本実施形態では、ECC機能によるエラー訂正用のメモリセル、およびパリティセル等が不要であるため、メモリサイズの縮小化を図ることができる。なお、修復コマンドを入力することで、解析コマンドによる処理と、メモリセルのデータを修復する処理の両方を行うようにしてもよい。また、外部コマンドによって、上述した4つの機能全てが動作する必要はない。例えば、全アドレス範囲について、メモリセルの状態を解析して、データを修復する場合には、フェイルビットカウント算出機能および不安定ビットのアドレス算出機能の実行は不要である。外部コマンドに、引数やオプションを付加することで、所定の機能を動作させるようにしてもよい。また、上述した4つの機能において用いられる各変数を、ワークメモリ302に設定してもよい。この場合、データ判別部303は、各機能を動作させる上で、ワークメモリ302から必要な変数を参照すればよい。また、データ修復システム30は、電源投入時あるいはメモリチェック時に、修復データ判別機能図6,図7参照を動作させ、必要であればデータを修復するようにしてもよい。例えば、電源投入時に、フェイルビットカウント算出機能を動作させることで取得したメモリセルのしきい値の分布と、所望のしきい値の分布との相違が大きい場合、すなわち、メモリセルのしきい値が劣化している場合に、データを修復するようにすればよい。これにより、メモリセルの解析およびデータの修復を自動化することができる。<データ修復システムの変形例>図8は、図2のデータ修復システムの別の構成例を示すブロック図である。図2および図8における共通の符号は、同一の構成要素を示すため、その説明を省略する。データ修復システム30は、アナログ電源回路306と、電流検知回路307と、これら回路とデータ判別部303との間で送受信される信号の変換を行うAD/DAAnalogtoDigitalDigitaltoAnalogコンバータ308とを備えている。アナログ電源回路306は、メモリコア10に接続され、メモリセルに印加するゲート電圧を出力する。ゲート電圧は、データ判別部303の指示によって変更可能である。つまり、アナログ電源回路306は、データ判別部303によって実行される機能に応じたゲート電圧を出力する。これにより、メモリコア10に内蔵された電源による電圧制御よりも細かいレベルでの電圧制御が可能となる。例えば、図5に示すS508において、電圧の変化の幅Vstepを、より細かく設定することができるため、メモリコア10に内蔵された電源による電圧制御に依らない高い精度で、メモリセルのしきい値を算出することができる。電流検知回路307は、メモリコア10に接続され、データ判別部303の指示によりメモリセルに流れる電流を検知する。これにより、メモリコア10に内蔵されているデータ読み出し回路よりも細かいレベルでの、データの読み出しが可能となる。つまり、より高精度に、メモリセルのデータを判別することができる。なお、本実施形態において、図1に示すコントローラ20は、データ修復システム30内に設けてもよく、外部装置18内に設けてもよい。また、本実施形態に係る不揮発性半導体メモリシステムを、USBUniversalSerialBusメモリやSSDSolidStateDrive等のストレージデバイスに搭載してもよい。これにより、USBメモリおよびSSDの耐用年数を向上させることができる。"