"ホストからのコマンドに従って2値または多値での書き込み、読み出し、および消去可能な複数のメモリセルを有するメモリを制御するメモリコントローラであって、前記ホストとの間でコマンドおよびデータをアクセスするホストインターフェイスと、前記メモリとの間でコマンドおよびデータをアクセスするメモリインターフェイスと、前記ホストインターフェイスを介して前記ホストからのコマンドに従って前記メモリインターフェイスを制御する制御部と、を具備し、前記メモリインターフェイスは、前記ホストからのデータを前記メモリに書きこむ際、前記メモリへの書き込みが2値書き込みの場合、前記ホストからのデータに対してiビットの第1エラー訂正ビット数を設定し、前記メモリへの書き込みが多値書き込みの場合、前記ホストからのデータに対してjビットi<jの第2エラー訂正ビット数を設定するエラー訂正ビット数設定部《161》と、前記エラー訂正ビット数設定部により、前記第1エラー訂正ビット数が設定された場合、kバイトの第1エラー訂正コードを生成して前記ホストからのデータに付加し、前記第2エラー訂正ビット数が設定された場合、lk<lバイトの第2エラー訂正コードを生成して前記ホストからのデータに付加するエラー訂正コード生成付加部と、を備えることを特徴とするメモリコントローラ。前記ホストからのデータを前記メモリに2値で書き込むか多値で書き込むかの判断は、前記ホストから入力される論理アドレスに応じて行われることを特徴とする請求項1に記載のメモリコントローラ。ホストからのコマンドに従って書き込み、読み出し、および消去可能な複数のメモリセルを有するメモリを制御するメモリコントローラであって、ホストとの間でコマンドおよびデータをアクセスするホストインターフェイスと、前記メモリとの間でコマンドおよびデータをアクセスするメモリインターフェイスと、前記ホストインターフェイスを介して前記ホストからのコマンドに従って前記メモリインターフェイスを制御する制御部と、を具備し、前記メモリインターフェイスは、前記ホストからのデータを前記メモリに書きこむ際、前記ホストからのデータが前記ホストからのコマンドによって通知されたデータである場合、前記ホストからのデータに対してmビットの第1エラー訂正ビット数を設定し、前記ホストからのデータが前記ホストからのコマンドによって通知されていないデータである場合、前記ホストからのデータに対してnビットm<nの第2エラー訂正ビット数を設定するエラー訂正ビット数設定部と、前記エラー訂正ビット数設定部により、前記第1エラー訂正ビット数が設定された場合、kバイトの第1エラー訂正コードを生成して前記ホストからのデータに付加し、前記第2エラー訂正ビット数が設定された場合、lk<lバイトの第2エラー訂正コードを生成して前記ホストからのデータに付加するエラー訂正コード生成付加部と、を備えることを特徴とするメモリコントローラ。ホストからのコマンドに従って書き込み、読み出し、および消去可能な複数のメモリセルを有するメモリを制御するメモリコントローラであって、ホストとの間でコマンドおよびデータをアクセスするホストインターフェイスと、前記メモリとの間でコマンドおよびデータをアクセスするメモリインターフェイスと、前記ホストインターフェイスを介して前記ホストからのコマンドに従って前記メモリインターフェイスを制御する制御部と、を具備し、前記メモリインターフェイスは、前記ホストからのデータを前記メモリに書きこむ際、前記メモリの消去回数が閾値より少ない場合、前記ホストからのデータに対してmビットの第1エラー訂正ビット数を設定し、前記メモリの消去回数が閾値以上である場合、前記ホストからのデータに対してnビットm<nの第2エラー訂正ビット数を設定するエラー訂正ビット数設定部と、前記エラー訂正ビット数設定部により、前記第1エラー訂正ビット数が設定された場合、kバイトの第1エラー訂正コードを生成して前記ホストからのデータに付加し、前記第2エラー訂正ビット数が設定された場合、lk<lバイトの第2エラー訂正コードを生成して前記ホストからのデータに付加するエラー訂正コード生成付加部と、を備えることを特徴とするメモリコントローラ。前記メモリは前記複数のメモリセルのうちの所定個のメモリセルで構成される複数のブロックを有し、前記メモリの消去回数は前記メモリ内の前記ブロック毎に異なることを特徴とする請求項4に記載のメモリコントローラ。エラー訂正処理時間の短縮、消費電力の削減、およびエラー訂正用データの削減を図るメモリコントローラを提供する。本実施形態によるメモリコントローラは、ホストからのコマンドに従って2値または多値での書き込み、読み出し、および消去可能な複数のメモリセルを有するメモリを制御するメモリコントローラであって、前記ホストとの間でコマンドおよびデータをアクセスするホストインターフェイスと、前記メモリとの間でコマンドおよびデータをアクセスするメモリインターフェイスと、前記ホストインターフェイスを介して前記ホストからのコマンドに従って前記メモリインターフェイスを制御する制御部と、を具備し、前記メモリインターフェイスは、前記ホストからのデータを前記メモリに書きこむ際、前記メモリへの書き込みが2値書き込みの場合、前記ホストからのデータに対してiビットの第1エラー訂正ビット数を設定し、前記メモリへの書き込みが多値書き込みの場合、前記ホストからのデータに対してjビットi<jの第2エラー訂正ビット数を設定するエラー訂正ビット数設定部と、前記エラー訂正ビット数設定部により、前記第1エラー訂正ビット数が設定された場合、kバイトの第1エラー訂正コードを生成して前記ホストからのデータに付加し、前記第2エラー訂正ビット数が設定された場合、lk<lバイトの第2エラー訂正コードを生成して前記ホストからのデータに付加するエラー訂正コード生成付加部と、を備える。本実施形態を以下に図面を参照して説明する。図面において、同一部分には同一の参照符号を付す。<構成例>以下に、図1乃至図5を用いて、本実施形態におけるメモリコントローラ100の構成について説明する。図1は、本実施形態におけるメモリコントローラ100の構成例を示すブロック図である。図1に示すように、メモリコントローラ100は、ホスト200およびNAND型フラッシュメモリ以下、単にフラッシュメモリと称す300に接続可能である。このメモリコントローラ100は、ホスト200に接続されたとき、電源が供給されて動作し、ホスト200からのアクセスに応じた処理を行う。例えば、メモリコントローラ100は、フラッシュメモリ300に対するデータの書き込み、データの読み出し、およびデータの消去等のアクセスにおいて、フラッシュメモリ300を管理し、制御する。ホスト200は、接続されるフラッシュメモリ300にアクセスするためのハードウェアおよびソフトウェアシステムを備えている。このホスト200は、メモリコントローラ100を介してフラッシュメモリ300に対して、データの書き込み、データの読み出し、およびデータの消去等のアクセスを行う。メモリコントローラ100は、ホストインターフェイス110、MPUMicroProcessingUnit120、データバッファ130、およびフラッシュメモリインターフェイス140を有している。ホストインターフェイス110は、メモリコントローラ100とホスト200との間のコマンドやデータ等のアクセスを行うために設けられ、これらの間のインターフェイス処理を行う。データバッファ130は、ホスト200から送られてくるデータをフラッシュメモリ300へ書き込む際に、MPUからのコマンドに従い、一定量例えば、1ページ分のデータを一時的に記憶する。また、データバッファ130は、フラッシュメモリ300から読み出されるデータをホスト200へ送り出す際に、MPUからのコマンドに従い、一定量のデータを一時的に記憶したりする。MPU120は、メモリコントローラ100全体の動作を制御する。このMPU120は、例えばメモリコントローラ100に電源が供給された場合、MPU120に格納されているファームウェア制御プログラムに従って処理を開始する。すなわち、MPU120は、処理に必要な各種テーブル管理データを作成したり、ホスト200からの書き込みコマンド、読み出しコマンド、および消去コマンド等を受信してフラッシュメモリ300上の該当領域をアクセスしたりする。また、MPU120は、フラッシュメモリ300をアクセスするにあたってホスト200からの論理アドレスと物理アドレスとを変換したり、データバッファ130を介してデータ転送処理を制御したりする。なお、以下において、ホスト200から与えられるメモリコントローラ100のアドレスを論理アドレスと称し、フラッシュメモリ300内における実際のアドレスを物理アドレスと称す。フラッシュメモリインターフェイス140は、メモリコントローラ100とフラッシュメモリ300との間でコマンドやデータ等の送受信を行うために設けられ、これらの間のインターフェイス処理を行う。また、フラッシュメモリインターフェイス140は、ECCを行うECC回路150を有している。ECC回路150の詳細については後述する。図2は、図1におけるフラッシュメモリ300の構成例を示すブロック図である。図2に示すように、フラッシュメモリ300は、メモリセルアレイ310、ページバッファ320を有している。メモリセルアレイ310は、複数のメモリブロックBLK0~BLKnnは自然数を含んでいる。また、各メモリブロックBLKは、複数のメモリセルトランジスタを備えている。本例のメモリセルアレイ310は、1つのメモリセルトランジスタに多ビットのデータを記録することが可能な多値NAND型フラッシュメモリである場合を一例として説明する。なお、以下の説明において、メモリブロックBLK0~BLKnを単にメモリブロックBLKと称することがある。ここで、メモリセルトランジスタに多ビットのデータを書き込むモードを多値モード、メモリセルトランジスタに1ビットのデータを書き込むモードを2値モードと称する。この際、2値モードでデータが書き込まれたメモリセルトランジスタを多値モードで再度書きこむことが可能である。データの消去は、メモリブロックBLK単位で行われる。すなわち、同一メモリブロックBLK内のデータは一括して消去される。各メモリブロックBLKは、複数のメモリセルトランジスタを備えている。また、メモリブロックBLK内には、複数のワード線WL0、WL1、...以下、ワード線WLと称すると、ワード線WLに直交するビット線BL0、BL1、...以下、ビット線BLと称するとが設けられている。そして、同一行にあるメモリセルトランジスタは、同一のワード線に共通接続されている。また、同一列にあるメモリセルトランジスタは、複数のメモリセルトランジスタ単位でビット線BLに共通接続されている。データの書き込みおよび読み出しは、複数のメモリセルトランジスタの集合毎に行われ、このメモリセルトランジスタの集合を1ページと呼ぶ。なお、読み出し時および書き込み時において、ロウアドレスによっていずれかのワード線WLが選択され、カラムアドレスによっていずれかのビット線BLが選択される。ページバッファ320は、メモリセルアレイ310へのデータ入出力を行い、データを一時的に保持する。ページバッファ320が保持可能なデータサイズは、各メモリブロックBLKのページサイズと同じである。データ書き込みなどの際、ページバッファ320は、メモリセルアレイ310に対するデータ入出力処理を、自身の記憶容量に相当する1ページ分の単位で実行する。ここで、本実施形態におけるフラッシュメモリ300へのデータの書き込みにおいて、ブロック単位のデータ書き込みを行う場合、全てが空いているブロックBLKを確保してそのブロックBLKの先端ページから書き込みを行う。一方、ページ単位のデータ書き込みを行う場合、全てが空いているブロックBLKを確保してそのブロックBLKの先端ページから書き込みを行う、または、一部の領域が空いているブロックBLKを確保してそのブロックBLKの空いている領域の先端ページから書き込みを行う。また、メモリコントローラ100は、フラッシュメモリ300のブロックBLKそれぞれの消去回数を記憶して管理し、ホスト200からのデータをブロックBLKに書き込む時において、その書き込みブロックBLKの消去回数データをフラッシュメモリ300に記憶する。さらに、メモリコントローラ100は、一部の領域が空いているブロックBLKそれぞれの読み出し回数を記憶して管理し、ホスト200からのデータの書き込み時において、その書き込みブロックBLKの読み出し回数データをフラッシュメモリ300に記憶する。この際、フラッシュメモリ300は、ブロックBLKの空いている領域の先端ページのアドレス情報も記憶する。図3は、フラッシュメモリ300の2値SLC:SingleLevelCellモードおよび多値MLC:MultiLevelCellモードについて説明するための図である。なお、本例では、多値モードのうち、4値モードを一例に挙げて説明する。また、図3において、横軸が閾値電圧Vthを示し、縦軸がメモリセルの存在確率を示している。まず、4値モードについて説明する。図3に示すように、メモリセルトランジスタは、閾値電圧Vthの低い順に11、01、10、00の4つのデータを保持できる。11データを保持するメモリセルトランジスタの閾値電圧Vthは、Vth<0Vである。01データを保持するメモリセルトランジスタの閾値電圧Vthは、0V<Vth<Vth1である。10データを保持するメモリセルトランジスタの閾値電圧Vthは、Vth1<Vth<Vth2である。00データを保持するメモリセルトランジスタの閾値電圧Vthは、Vth2<Vth<Vth3である。次に、2値モードについて説明する。図示するようにメモリセルトランジスタは、閾値電圧Vthの低い順に1、0の2つのデータを保持できる。1データを保持するメモリセルトランジスタの閾値電圧Vthは、Vth<0Vである。0データを保持するメモリセルトランジスタの閾値電圧Vthは、Vth1<Vth<Vth2である。すなわち、1データは4値モードにおける11データに等しく、0データは4値モードにおける10データに等しい閾値電圧を有する。すなわち、言い換えると、2値モードとは、4値モードにおける2ビットデータのうち、下位ページのみを用いた動作モードと言うことができる。より具体的には、2ビットデータの下位ビットには下位ページアドレスが割り当てられ、上位ビットには上位ページアドレスが割り当てられる。メモリセルトランジスタに対して2値モードでデータを書き込む場合、メモリコントローラ100は、これらのページアドレスのうち下位ページアドレスのみを使用してフラッシュメモリ300にデータを書き込む。メモリセルトランジスタに対して多値モードでデータを書き込む場合、メモリコントローラ100は、上位ページアドレスと下位ページアドレスの両方を使用してフラッシュメモリ300にデータを書き込む。データの書き込みは、まず下位ページから行われる。消去状態を11--、-は不定の意味とすると、まず下位ページが書き込まれることにより、メモリセルトランジスタは11-1、または10-0を保持する。2値モードの場合には、以上で書き込みは終了である。4値モードで書き込む場合には、次に上位ページが書き込まれる。その結果、11-1を保持するメモリセルトランジスタは、11または01を保持し、10-0を保持するメモリセルトランジスタは10または00を保持する。その他の8値モード、16値モード等についても同様である。以下、フラッシュメモリ300のメモリ領域のうち、メモリコントローラ100が2値モードでデータを書き込む領域をSLC領域と称し、メモリコントローラ100が多値モードでデータを書き込む領域をMLC領域と称する。メモリセルトランジスタに対して2値モードでデータを書き込むか、または4値モードでデータを書き込むかについては、メモリコントローラ100が制御する。例えば、ホスト200から与えられるメモリコントローラ100の論理アドレスに応じて、メモリコントローラ100はその論理アドレスに対応するフラッシュメモリ300の物理アドレスに2値モードで書き込むか4値モードで書き込むかを判断する。図4は、図1におけるECC回路150の構成例を示すブロック図である。図4に示すように、ECC回路150は、書き込み回路160および読み出し回路170を有している。書き込み回路160は、ホスト200からフラッシュメモリ300にデータの書き込みを行う際に動作し、エラー訂正ビット数設定部161およびエラー訂正コード生成付加部162を有している。読み出し回路170は、フラッシュメモリ300からホスト200にデータの読み出しを行う際に動作し、エラー訂正部171を有している。エラー訂正ビット数設定部161は、ホスト200からフラッシュメモリ300にデータの書き込みを行う際、そのデータに対するエラー訂正ビット数を必要に応じて変更して設定する。より具体的には、エラー訂正ビット数設定部161は、MPU120からのコマンドに従い、書き込まれるフラッシュメモリ300の信頼性や書き込まれるデータの重要性に応じて、エラー訂正ビット数を設定する。ここで、エラー訂正ビット数とは、データに付加されるエラー訂正コードを用いて訂正可能なデータ中のエラービット数である。すなわち、本実施形態において、エラー訂正ビット数は、可変であり、種々の条件によって設定される。例えば、エラー訂正ビット数は、書き込まれるフラッシュメモリ300の領域がSLC領域かMLC領域か、書き込まれるフラッシュメモリ300のブロックBLKの消去回数が閾値以上か否か、または書き込まれるデータが重要なデータであるか否か等、によって設定される。エラー訂正コード生成付加部162は、ホスト200からフラッシュメモリ300にデータの書き込みを行う際、エラー訂正ビット数設定部161で設定されたエラー訂正ビット数に応じたエラー訂正コードエラー訂正用データを作成し、フラッシュメモリ300に書き込まれるデータに付加する。このエラー訂正コードのデータ量は、エラー訂正ビット数に応じて変更する。より具体的には、エラー訂正コードのデータ量は、エラー訂正ビット数が減少すれば減少し、エラー訂正ビット数が増加すれば増加する。エラー訂正部171は、フラッシュメモリ300からホスト200にデータを読み出す際、エラー訂正コード生成付加部162で生成付加されたエラー訂正コードに基づいて、データのエラー訂正を行う。図5aは、本実施形態におけるフラッシュメモリ300に書き込まれるデータ構成の比較例を示すブロック図であり、図5bは、本実施形態におけるフラッシュメモリ300に書き込まれるデータ構成を示すブロック図である。図5aおよびbに示すように、フラッシュメモリ300に書き込まれるデータは、データ400,500、データ以外に必要な情報例えば、管理データ410,510、およびエラー訂正用データ420,520で構成されている。比較例において、データ400はxバイト例えば、512バイト、データ以外に必要な情報410はyバイト例えば、8バイト、エラー訂正用データ420はzバイト例えば、22バイトである。これに対し、本実施形態において、データ500はxバイト、データ以外に必要な情報510はynバイト、エラー訂正用データ520はz-nバイトである。すなわち、比較例に対して、エラー訂正用データ520がnバイト削減され、データ以外に必要な情報510がnバイト増加することができる。これは、上述したように、エラー訂正ビット数を減少させることにより、エラー訂正用データ520が減少するためである。<書き込み動作>以下に、図6および図7を用いて、本実施形態における書き込み動作について説明する。図6は、本実施形態における書き込み動作のフローチャートである。図6に示すように、まず、ステップS11において、メモリコントローラ100は、ホスト200から入力されたデータをホストインターフェイス110を介して受信し、データバッファ130に記憶する。次に、ステップS12において、メモリコントローラ100は、ホスト200から入力されたパラメータ設定コマンドをホストインターフェイス110を介して受信し、MPU120に記憶する。このパラメータ設定コマンドは、データバッファ130に記憶されたデータが重要であるか否かを通知するものである。パラメータ設定コマンドは、例えば、ホスト200から入力されたデータの有効ビット数、データの数、およびデータの圧縮方法等のパラメータが設定されたコマンドである。MPU120は、パラメータ設定コマンドを受信することにより、データが重要であるか否かを判断する。次に、ステップS13において、メモリコントローラ100は、ホスト200から入力されたメモリコントローラ100の書き込み論理アドレスをホストインターフェイス110を介して受信し、MPU120に記憶する。MPU120は、この論理アドレスに基づいて、データバッファ130に記憶されたデータをSLCとして書き込むか、MLCとして書き込むかを判断する。その後、MPU120は、論理アドレスを書き込まれるフラッシュメモリ300の物理アドレスに変換する。次に、ステップS14において、メモリコントローラ100は、ホスト200から入力された書き込みコマンドをホストインターフェイス110を介して受信する。その後、MPU120は、データバッファ130に記憶されたデータをフラッシュメモリインターフェイス140へと転送していく。次に、ステップS15において、エラー訂正ビット数設定部161は、データバッファ130から転送されたデータのエラー訂正ビット数を設定する。ステップS15の詳細については、図7を用いて後述する。次に、ステップS16において、エラー訂正コード生成付加部162は、エラー訂正ビット数設定部161により設定されたエラー訂正ビット数に基づいて、エラー訂正コードを生成する。このエラー訂正コードのデータ量は、エラー訂正ビット数が大きければ大きくなり、エラー訂正ビット数が小さければ小さくなる。その後、エラー訂正コード生成付加部162は、エラー訂正コードをデータバッファ130から転送されたデータに付加する。次に、ステップS17において、エラー訂正コードが付加されたデータが指定されたフラッシュメモリ300の物理アドレスに書き込まれる。このようにして、ホスト200からフラッシュメモリ300への書き込み動作が行われる。図7は、図6におけるステップS15における動作の詳細を示すフローチャートである。図7に示すように、エラー訂正ビット数を設定する際、まず、ステップS21において、最大エラー訂正ビット数を設定する。この最大エラー訂正ビット数は、書き込まれるデータに対してエラー訂正され得る最大のビット数である。ここでは、一例として、最大エラー訂正ビット数を16ビットとする。次に、ステップS22において、アクセスするメモリ領域がMLC領域であるかSLC領域であるかを判断する。MLC領域であるかSLC領域であるかの判断は、図6におけるステップS13において受信された論理アドレスに基づいて行われる。ステップS22においてアクセスするメモリ領域がSLC領域であると判断された場合ステップS22のNo、次に、ステップS23において設定されたエラー訂正ビット数を減少する。これは、フラッシュメモリ300においてSLC領域は、MLC領域よりも信頼性が高い領域であり、エラービット数が少なく済むためである。なお、図2および図3において説明したように、フラッシュメモリ300においてメモリセルアレイ310内でSLC領域とMLC領域とは分かれておらず、各メモリセルをSLCまたはMLCとして機能させることができる。次に、ステップS24において、書き込まれるデータが重要なデータであるか否かを判断する。重要なデータであるか否かの判断は、図6におけるステップS12において受信されたパラメータ設定コマンドに基づいて行われる。なお、重要なデータとは、メモリコントローラ100がホスト200からパラメータ設定コマンドによって重要であると通知されたデータに限らず、メモリコントローラ100が内部で管理するデータ等も含まれる。ステップS24において書き込まれるデータが重要なデータではないと判断された場合ステップS24のNo、次に、ステップS25において設定されたエラー訂正ビット数を減少する。次に、ステップS26において、書き込まれるフラッシュメモリ300の消去回数が閾値を越えているか否かを判断する。フラッシュメモリ300において消去動作はブロックBLK毎に行われるため、消去回数はブロックBLK毎に異なっている。このブロックBLK毎の消去回数は、フラッシュメモリ300内に記憶されている。すなわち、フラッシュメモリ300の消去回数が閾値を越えているか否かの判断は、メモリコントローラ100が、ホスト200から受信した論理アドレスを物理アドレスに変換して、その物理アドレスのブロックBLKの消去回数データをフラッシュメモリ300から受信し、閾値と比較することにより行われる。なお、予めMPU120内に、消去回数の閾値として適当な値が記憶されている。ステップS27において消去回数が閾値を越えていないと判断された場合ステップS26のNo、次に、ステップS27において設定されたエラー訂正ビット数を減少する。これは、消去回数の少ないブロックBLKのほうが高い信頼性を有するためである。言い換えると、フラッシュメモリ300において消去回数が多くなると信頼性が低くなり、エラービット数が増加する。すなわち、消去回数に応じてブロックBLK毎にエラー訂正ビット数を可変にする。以上の工程により、フラッシュメモリ300に書き込まれるエラー訂正ビット数が設定される。例えば、ステップS23、ステップS25、およびステップS27のいずれか1つの工程が行われた場合、エラー訂正ビット数はステップS21で設定された16ビットから12ビットに減少される。また、例えば、いずれか2つの工程が行われた場合、エラー訂正ビット数は16ビットから8ビットに減少される。さらに、例えば、全ての工程が行われた場合、エラー訂正ビット数は16ビットから4ビットに減少される。このように、種々の条件に応じて、エラー訂正ビット数設定部161によりエラー訂正ビット数を可変にすることができる。なお、上記エラー訂正ビット数は、一例であり、フラッシュメモリ300の規格等によって種々の値が設定され得る。また、ステップS22、ステップS24、およびステップS26の工程の順番はそれぞれ、入れ替えることも可能である。また、エラー訂正ビット数を可変にする条件は、ステップS22、ステップS24、およびステップS26の工程による判断に限らない。例えば、書き込まれるフラッシュメモリ300の読み出し回数が閾値を越えているか否かによってもエラー訂正ビット数を可変にしてよい。ページ単位のデータをフラッシュメモリ300に書き込む際、一部の領域が空いているブロックBLKにページ単位のデータが書き込まれる。この一部の領域が空いているブロックBLKの信頼性は、そのブロックBLKに記憶されているデータの読み出し回数に応じて変更する。このブロックBLKの読み出し回数は、フラッシュメモリ300内に記憶されている。すなわち、フラッシュメモリ300の読み出し回数が閾値を越えているか否かの判断は、メモリコントローラ100がホスト200から受信した論理アドレスを物理アドレスに変換して、その物理アドレスのブロックBLKの読み出し回数データをフラッシュメモリ300から受信し、閾値と比較することにより行われる。その後、読み出し回数が閾値を越えていると判断された場合、ブロックBLKに既に書き込まれているデータに付加されたエラー訂正コードのエラー訂正ビット数に対して、エラー訂正ビット数の多いエラー訂正コードが付加されたデータをブロックBLKの空いている領域に書き込む。これは、フラッシュメモリ300において読み出し回数が多くなると信頼性が低くなり、エラービット数が増加するためである。すなわち、ブロックBLK毎にエラー訂正ビット数を可変にする。なお、ページ単位のデータを書き込む際、ブロックBLK内のページ毎のエラー訂正ビット数をフラッシュメモリ300内に記憶することにより、ブロックBLK毎ではなくブロックBLK内のページ毎にエラー訂正ビット数を可変にすることも可能である。<読み出し動作>以下に、本実施形態における読み出し動作について説明する。読み出し動作では、まず、メモリコントローラ100は、ホスト200から入力されたメモリコントローラ100の読み出し論理アドレスをホストインターフェイス110を介して受信し、MPU120に記憶する。その後、MPU120は、論理アドレスを読み出されるフラッシュメモリ300の物理アドレスに変換する。次に、メモリコントローラ100は、ホスト200から入力された読み出しコマンドをホストインターフェイス110を介して受信する。その後、MPU120は、フラッシュメモリ300の指定された物理アドレスに記憶されたデータをフラッシュメモリインターフェイス140へと読み出していく。次に、エラー訂正部171は、データバッファ130から読み出されたデータのエラー訂正を行う。このエラー訂正は、データバッファ130から読み出されたデータに付加されたエラー訂正コードに基づいて行われ、エラー訂正ビット数設定部161により設定されたビット数分行われる。すなわち、このエラー訂正において、エラー訂正ビット数およびエラー訂正コードのデータ量が少ないほど、エラー訂正処理時間の短縮および消費電力の削減を図ることできる。なお、データのエラー訂正の詳細については公知であるため省略する。エラー訂正が終了するとデータからエラー訂正コードが除去される。その後、エラー訂正されたデータは、データバッファ130に一時的に記憶され、ホストインターフェイス110を介してホスト200に読み出される。<効果>上記実施形態によれば、ホスト200およびフラッシュメモリ300に接続可能なメモリコントローラ100は、ホスト200からフラッシュメモリ300にデータを書き込む際、種々の条件に応じてエラー訂正ビット数を変更させる。そして、その設定されたエラー訂正ビット数に基づいてエラー訂正コードを作成し、データに付加させてフラッシュメモリ300に書き込む。すなわち、信頼性が高い領域に書き込む場合やデータの重要度が低い場合に、エラー訂正ビット数を減少させることができる。これにより、余分なエラー訂正コードのデータ量を削減することができ、その分管理用データの容量を大きくすることができる。また、フラッシュメモリ300からホスト200へのデータ読み出しの際、エラー訂正の処理時間を短縮でき、これに伴い消費電力の削減を図ることができる。その他、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で、種々に変形することが可能である。さらに、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。"