"不揮発性メモリを制御するメモリコントローラであって、前記不揮発性メモリへの書き込み、前記不揮発性メモリからの読み出しを行うメモリインタフェースと、受信した書込みデータ及び前記不揮発性メモリから読み出した読出しデータを格納するデータバッファと、前記書込みデータに基づいて、第1誤り訂正符号化処理を実施し第1冗長データを生成する第1符号エンコード部と、前記書込みデータを前記データバッファから読出して前記メモリインタフェースへ転送し、書き込みデータと該書き込みデータを基に生成された冗長データとを前記不揮発性メモリに書込むよう制御し、前記書き込みデータを前記メモリインタフェースへの転送後、前記書き込みデータの前記不揮発性メモリへの書込みが完了する前に前記データバッファの前記書き込みデータが格納された領域を解放する書込み制御部と、前記不揮発性メモリから読出したデータに対してエラーを検出するエラー検出部と、読出しを要求された読出し対象データを前記不揮発性メモリから読出すよう制御し、前記リードエラー検出部により前記読出し対象データのエラーが検出された場合に、当該読出し対象データに対応する前記第1冗長データと該第1冗長データに対応するデータとを前記不揮発性メモリから読出すよう制御する読出し制御部と、前記不揮発性半導体メモリから読み出された第1冗長データと該第1冗長データに対応する読み出しデータとに基づいて第1誤り訂正処理を行う第1符号デコード部と、を備えることを特徴とするメモリコントローラ。前記書込み制御部は、前記冗長データと該冗長データに対応する前記書込みデータとを前記不揮発性メモリの複数の書込み単位領域に分散させて書込むよう制御することを特徴とする請求項1に記載のメモリコントローラ。前記書込みデータに基づいて、第2誤り訂正符号化処理により第2冗長データを生成する第2符号エンコード部と、前記不揮発性メモリから読出された第2冗長データと該第2冗長データに対応する読出しデータとに基づいて第2誤り訂正処理を行う第2符号デコード部と、をさらに備え、前記書込み制御部は、前記第2冗長データと該第2冗長データに対応するデータとを前記不揮発性メモリの同一書込み単位領域に書き込むよう制御し、前記リードエラー検出部は、前記第2符号デコード部による誤り訂正処理で訂正不可であったデータを読出しエラーが検出されたデータと判定することを特徴とする請求項2に記載のメモリコントローラ。同一の書込み単位領域に書き込まれる前記冗長データと該冗長データに対応する前記書込みデータのシンボル数を、前記冗長データにより訂正可能なシンボル数以下とすることを特徴とする請求項2に記載のメモリコントローラ。前記書込み制御部は、前記冗長データと該冗長データに対応する前記書込みデータとを前記不揮発性メモリに含まれる複数のブロックに分散させて書込むよう制御することを特徴とする請求項1ないし4のいずれか一項に記載のメモリコントローラ。同一のブロックに書き込まれる前記冗長データと該冗長データに対応する前記書込みデータのシンボル数を、前記冗長データにより訂正可能なシンボル数以下とすることを特徴とする請求項5に記載のメモリコントローラ。前記書込み制御部は、前記冗長データと該冗長データに対応する前記書込みデータとを前記不揮発性メモリに含まれる複数のメモリチップに分散させて書込むよう制御することを特徴とする請求項1ないし6のいずれか一項に記載のメモリコントローラ。同一のメモリチップに書き込まれる前記書込みデータのシンボル数を、前記冗長データにより訂正可能なシンボル数以下とすることを特徴とする請求項7に記載のメモリコントローラ。前記書き込み制御部は、前記書き込みデータが前記不揮発性半導体メモリへの書き込み時に書き込みエラーが生じても再書き込みを実施しないことを特徴とする請求項1に記載のメモリコントローラ。不揮発性メモリと、前記不揮発性メモリへの書き込み、前記不揮発性メモリからの読み出しを行うメモリインタフェースと、受信した書込みデータ及び前記不揮発性メモリから読み出した読出しデータを格納するデータバッファと、前記書込みデータに基づいて、第1誤り訂正符号化処理を実施し第1冗長データを生成する第1符号エンコード部と、前記書込みデータを前記データバッファから読出して前記メモリインタフェースへ転送し、書き込みデータと該書き込みデータを基に生成された冗長データとを前記不揮発性メモリに書込むよう制御し、前記書き込みデータを前記メモリインタフェースへの転送後、前記書き込みデータの前記不揮発性メモリへの書込みが完了する前に前記データバッファの前記書き込みデータが格納された領域を解放する書込み制御部と、前記不揮発性メモリから読出したデータに対してエラーを検出するエラー検出部と、読出しを要求された読出し対象データを前記不揮発性メモリから読出すよう制御し、前記リードエラー検出部により前記読出し対象データのエラーが検出された場合に、当該読出し対象データに対応する前記第1冗長データと該第1冗長データに対応するデータとを前記不揮発性メモリから読出すよう制御する読出し制御部と、前記不揮発性半導体メモリから読み出された第1冗長データと該第1冗長データに対応する読み出しデータとに基づいて第1誤り訂正処理を行う第1符号デコード部と、を備えることを特徴とする記憶装置。不揮発性メモリを制御するメモリ制御方法であって、受信した書込みデータに基づいて、誤り訂正符号化処理を実施し冗長データを生成する第1のステップと、前記書込みデータをデータバッファから読出し、読み出した前記書込みデータを、前記不揮発性への書込みを行うメモリインタフェースへ転送する第2のステップと、書き込みデータと該書き込みデータを基に生成された冗長データとを前記不揮発性メモリに書込むよう制御し、前記書き込みデータを転送後、前記書き込みデータの前記不揮発性メモリへの書込みが完了する前に前記データバッファの前記書き込みデータが格納された領域を解放する第3のステップと、前記不揮発性メモリから読出したデータに対してエラーを検出する第4のステップと、読出しを要求された読出し対象データを前記不揮発性メモリから読出す第5のステップと、前記不揮発性メモリから読出したデータに対してエラーを検出する第6のステップと、前記第5のステップで前記読出し対象データのエラーが検出された場合に、エラーの検出された前記読出し対象データに対応する前記冗長データと該冗長データに対応するデータとを前記不揮発性メモリから読出す第7のステップと、前記不揮発性メモリから読出された前記冗長データと該冗長データに対応するデータとに基づいて誤り訂正処理を行う第8のステップと、を含むことを特徴とするメモリ制御方法。本実施形態は、書込み速度を向上させることができるメモリコントローラ、記憶装置およびメモリ制御方法を提供することを目的とする。本実施形態によれば、メモリコントローラは、データバッファと、不揮発性メモリの読み書きを行うメモリインタフェースと、書込みデータに基づいて誤り訂正符号化処理を実施し冗長データを生成する符号エンコード部と、書込みデータをデータバッファから読出してメモリインタフェースへ転送し、冗長データと対応する書込みデータとを不揮発性メモリに書込むよう制御し、メモリインタフェースへ転送した書込みデータのデータバッファ上の領域を解放し、書込みエラーが生じても再書込みを実施しない書込み制御部と、不揮発性メモリからの読出しエラーを検出するリードエラー検出部と、読出しを要求された読出し対象データを不揮発性メモリから読出すよう制御し、読出し対象データの読み出しエラーが検出された場合に、冗長データと対応するデータとを不揮発性メモリから読出すよう制御する読出し制御部と、を備える。以下に添付図面を参照して、実施形態にかかるメモリコントローラ、記憶装置およびメモリ制御方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。第1の実施の形態図1は、第1の実施の形態にかかる記憶装置1の構成例を示すブロック図である。記憶装置1は、メモリコントローラ2とNANDメモリ不揮発性メモリ3を備える。記憶装置1は、ホスト4と接続可能であり、図1ではホスト4と接続された状態を示している。ホスト4は、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。NANDメモリ3は、データを不揮発に記憶する不揮発性メモリであり、nnは0以上の整数1個のメモリチップメモリ31-0~31-nで構成されている。メモリ31-kは、k番目のメモリチップを表す。なお、ここでは、不揮発性メモリとしてNANDメモリ3を用いる例を説明するが、NANDメモリ以外の記憶手段を用いてもよい。NANDメモリでは、一般にページと言われる書込み単位最小書込みが存在し、ページ単位で書込みが行われる。メモリコントローラ2は、ホスト4からの書込みコマンド要求に従ってNANDメモリ3への書込みを制御し、またホスト4からの読出しコマンド要求に従ってNANDメモリ3からの読出しを制御する。メモリコントローラ2は、インターフェース部21、データバッファ22、符号エンコード部23、書込み制御部24、読出し制御部25、符号デコード部26、メモリインタフェースI/F27およびリードエラー検出部28を備える。インターフェース部21は、ホスト4のインターフェース部41と通信線により接続し、通信線の種別や規格に応じて、ホスト4と記憶装置1の間の転送処理等を実施する。通信線としては、例えば、SATASerialAdvancedTechnologyAttachmentのようなシリアルバスの場合や、アドレスバスとデータバスの場合などがある。インターフェース部21は、ホスト4からの読出しコマンドや書込みコマンド等を受信するとともに当該コマンドにより転送するデータのアドレスやサイズを受信する。その後、必要なバッファ領域をデータバッファ22上に確保して、各コマンドの処理を書込み制御部24や読出し制御部25に通知する。また、インターフェース部21は、ホスト4からNANDメモリ3への書込みデータを受信してデータバッファ22へ格納し、NANDメモリ3から読出されてデータバッファ22へ格納された読出しデータをホスト4へ転送する。データバッファ22は、メモリコントローラ2がホスト4から受信したデータをNANDメモリ3へ記憶するまでに一時格納したり、NANDメモリ3から読出したデータをホスト4へ送信するまでに一時格納したりするために使用されるメモリであり、例えば、SRAMStaticRandomAccessMemoryやDRAMDynamicRandomAccessMemoryなどの汎用メモリで構成される。書込み制御部24は、データバッファ22に格納された書込みデータをNANDメモリ3へ書込む処理を制御する。具体的には、書込み制御部24は、データバッファ22上のデータ書き込みデータを書込むNANDメモリ3上の領域を決定し、データをデータバッファ22から読出して符号エンコード部23に転送し、また符号エンコード部23により生成された符号の各シンボルを書込むNANDメモリ3上の領域を決定し、データおよび符号をメモリI/F27に転送する。また、書込み制御部24は、メモリI/F27への書込みデータの転送が終了すると、転送が終了した書込みデータが格納されていたデータバッファ22の領域を解放する。本実施の形態では、書込み制御部24はメモリI/F27経由でNANDメモリ3から書込みエラープログラムエラーを受け取っても、再書込み等の処理を行わない。なお、メモリコントローラ2は、書込みエラーを受信してエラーの有無を検出する処理は実施し、エラーを検出しても再書込みを行わないようにしてもよいし、エラーの有無を検出する処理自体を実施しなくてもよい。また、リードベリファイの結果エラーとなっても再書込みは実施しない、またはリードベリファイ自体実施しないようにしてもよい。符号エンコード部23は、書込み制御部24から転送されたデータに基づいて、誤り訂正符号化処理を実施し冗長シンボルを生成する誤り訂正符号を生成する。誤り訂正符号としてはどのような符号を用いてもよいが、例えば、RSReed-Solomon符号やXORパリティ符号等を用いることができる。誤り訂正符号の種類は限定するものではないが、符号化後に情報シンボルと冗長シンボルとに明確に分離できる組織符号に属する符号が好ましい。すなわち、1個の誤り訂正符号は情報シンボルと冗長シンボルから構成され、情報シンボルは誤り訂正符号の元となったデータであり、冗長シンボルは誤り訂正符号化で生成付加された部分である。本実施の形態では、1つの誤り訂正符号を構成する各シンボルは、NANDメモリ3において異なる書込み単位に記録されるように配置される。一般に誤り訂正符号の1シンボル辺りのビット数よりメモリの書込み単位サイズの方がはるかに大きいため、書込み単位サイズのデータは複数のシンボルを含むシンボル群になる。メモリI/F27は、NANDメモリ3への書込みや読出しを直接制御するコントローラである。メモリI/F27は、書込み制御部24から転送された書込みデータをNANDメモリ3へ転送して、当該書込みデータを書込み制御部24が決定した書込み領域に書き込むよう指示する。また、メモリI/F27は、読出し制御部25から読出しを指示されたデータをNANDメモリ3から読出し、読出し制御部25へ転送する。また、NANDメモリ3からのステータス信号等を受信する。なお、NANDメモリ3では、一般にステータス信号としてメモリセルへの書込みエラープログラムエラーを通知するが、本実施の形態では、メモリI/F27はプログラムエラーが通知されても、当該プログラムエラーを書込み制御部24へ通知しなくてもよい。リードエラー検出部28は、メモリI/F27がNANDメモリ3からデータを読出した際に、読出しに失敗したか成功したか、すなわち読出しエラーリードエラーの有無を検出し、その検出結果をメモリI/F27へ通知する。読出しに失敗したか成功したかの判断はどのような方法で行ってもよいが、例えば、NANDメモリ3から出力されるステータス信号等により判断してもよいし、書込み時に誤り検出符号を付加してNANDメモリ3へ格納し、誤り検出符号を用いた誤り検出処理で誤りが検出された場合に読出に失敗したと判断してもよい。読出し制御部25は、インターフェース部21経由で通知されたホスト4からの読出しコマンドに従って、読出しを要求されたデータ読み出し対象データをNANDメモリ3からデータを読出す処理を制御する。具体的には、読出し制御部25は、読出しを要求されたデータをNANDメモリ3からデータを読出すようメモリI/F27へ指示するとともに、データバッファ22上の領域に読出したデータを格納する領域を割当てる。読出し制御部25は、リードエラー検出部28によりエラーが検出されなかった場合は、読出しデータをデータバッファ22上の割当てた領域に格納する。また、読出し制御部25は、リードエラー検出部28がエラーを検出した場合、エラーの検出されたデータに対応する誤り訂正符号を構成するシンボル全てについて、NANDメモリ3への記憶位置を特定して読出すようメモリI/F27へ指示する。そして、読出し制御部25は、読出したそれらのシンボルを符号デコード部26に転送して誤り訂正処理を実施するよう指示する。その後、当該読出しデータに割当てられていたデータバッファ22上の領域に誤り訂正処理後のデータを転送する。符号デコード部26は、読出し制御部25から転送されたデータシンボルに基づいて復号処理を実施し、誤り訂正後の修復された読出しデータを読出し制御部25へ転送する。ここで、従来の記憶装置の書込みおよび読出し処理について説明する。図2は、従来の記憶装置におけるNANDメモリへの書込み処理手順の一例を示すフローチャートであり、図3は、従来の記憶装置におけるNANDメモリからの読出し処理手順の一例を示すフローチャートである。従来、メモリコントローラは、図2に示すように、書込みコマンドをホストから受信するステップ101と、データバッファ上にデータdを格納する領域を割当てるステップS102。そして、データdをホストから受信しステップS103、データバッファ上のNANDメモリ3への未書込みデータ量が所定の閾値A以上であるか否かを判断するステップS104。なお、閾値Aは、NANDメモリ3への書込み処理を開始するデータ量の単位であり、NANDメモリ3の書込み単位である1ページ以上の値である。一般には、転送や処理の効率化のため、データバッファにある程度のデータが蓄積してから書込み処理を実施する。例えば、NANDメモリが16メモリチップ、2プレーンで構成される場合、32ページを閾値Aとすることができる。データバッファ上の未書込みデータ量が所定の閾値A以上である場合ステップS104Yes、NANDメモリ上の書込み領域の決定を行いステップS105、データバッファに格納されている書込みデータをNANDメモリの書込み領域へ転送するステップS106。そして、NANDメモリにおいてセルへの書込みプログラムが実施されステップS107、セルへのプログラム完了を待機するステップS108。そして、NANDメモリの書込みエラープログラムエラー、リードベリファイによるエラーの少なくとも一方の有無を検出しステップS109、書込みエラーがあった場合ステップS110Yes、ステップS105へ戻り、再書込みを実施する。書込みエラーがなかった場合ステップS110No、書込んだデータに対応するデータバッファの領域を解放しステップS111、書込み処理を完了するステップS112。また、ステップS104で、未書込みデータ量が所定の閾値A未満の場合ステップS104No、書込み処理を完了するステップS112。従来のNANDメモリの読出し処理では、図3に示すように、メモリコントローラは、読出しコマンドをホストから受信するステップ201と、読出すデータdのNANDメモリ上の記録位置を特定するステップS202。そして、NANDメモリからデータdを読出しステップS203、読出しエラーの検出を行いステップS204、エラーが検出された場合ステップS204Yes、ステップS203へ戻り再読出しを実施する。読出しエラーが検出されなかった場合ステップS204No、読出したデータdをホストに送信しステップS205、読出し処理を完了するステップS206。このように、従来のNANDメモリへ書込み処理では、プログラムエラー、リードベリファイによるエラーなどの書込みエラーが検出された場合に、再書込みを実施していた。このため、書込み時の転送速度が低下するという問題があった。また、NANDメモリのセルに正常に書き込んだことを確認してからデータバッファを解放しているため、書込み中にホストから受信したデータを格納するために、データバッファを余分に必要とするという問題があった。これに対し、本実施の形態の記憶装置1では、書込み時に誤り訂正符号化処理を行って冗長シンボルを生成しかつ書込み時に再書込みを実施しないことにより、書込み時の転送速度の低下を防ぎ、またデータバッファの利用効率を向上させる。以下、本実施の形態の記憶装置1における書込みおよび読出し処理について説明する。図4は、本実施の形態の記憶装置1におけるNANDメモリ3への書込み処理手順の一例を示すフローチャートであり、図5は、本実施の形態の記憶装置1におけるNANDメモリ3からの読出し処理手順の一例を示すフローチャートである。図4に示すように、本実施の形態のメモリコントローラ2は、従来のステップS101~ステップS104と同様に、書込みコマンド受信からデータバッファ上の未書込みデータが閾値A以上であるか否かの判断までを実施するステップS1~ステップS4。データバッファ上の未書込みデータ量が所定の閾値A以上である場合ステップS4Yes、メモリコントローラ2は、書込みデータであるシンボル群情報シンボル群についてNANDメモリ3上の書込み領域の決定を行うステップS5。そして、データバッファに格納されている書込みデータを、符号エンコード部23へ転送し、符号エンコード部23が情報シンボル群に基づいて誤り訂正符号Eを生成するステップS6。メモリコントローラ2は、符号エンコード部23により生成された冗長シンボル群に対するNANDメモリ3の書込み領域を決定し、情報シンボル群および冗長シンボル群を、NANDメモリ3の対応する書込み領域へ転送するステップS7。そして、転送が完了したシンボル群に対応するデータバッファ22上の領域を解放しステップS8、書込み処理を完了するステップS10。また、ステップS8のNANDメモリ3の対応する書込み領域へ転送後、データバッファ22の解放と並行して、転送されたシンボル群のNANDメモリ3のセルへの書込みプログラムが実施されるステップS9。すなわち、メモリコントローラ2より詳細には、メモリコントローラ2の書込み制御部24は、データバッファ22から情報シンボル群をNANDメモリ3へ転送後、この情報シンボル群のNANDメモリ3のセルへの書込み完了を待たずに、データバッファ22のこの情報シンボル群が格納されていた領域を解放する。また、ステップS4で、未書込みデータ量が所定の閾値A未満の場合ステップS4No、書込み処理を完了するステップS10。図5に示すように、本実施の形態のメモリコントローラ2は、従来のステップS201~ステップS204と同様に、読出しコマンド受信から読出しエラーの検出までを実施するステップS21~ステップS24。読出しエラーが検出された場合ステップS24Yes、読出し対象のデータdに対応する誤り訂正符号を構成する全シンボル群についてNANDメモリ3上の記録位置を特定するステップS27。そして、誤り訂正符号を構成する全シンボル群をNANDメモリ3から読出しステップS28、符号デコード部26がこれらのシンボル群を用いて復号処理を行い、データdを修復するステップS29。そして、データdをホストに送信しステップS25、読出し処理を終了するステップS26。読出しエラーが検出されなかった場合ステップS24No、読出したデータdをホストに送信しステップS25、読出し処理を完了するステップS26。なお、図5では、読出しエラーを検出した場合ステップS24Yesに、再読出しを行わない例を示しているが、再読出しを行うようにしてもよい。そして、再読出しを行った後に読出しエラーを検出した場合に、ステップS27以降の処理を実施するようにしてもよい。このように、本実施の形態では、データの書込み時に冗長シンボル冗長データを生成して情報シンボル書込みデータとともに冗長シンボルをNANDメモリ3へ格納しておくことで、書込みエラーの有無に関わらず、再書込みを実施しない。そして、書込みエラーがあった場合には、誤り訂正符号を用いた復号を行うことにより、エラーによりデータが失われることを防ぐ。従って、本実施の形態の誤り訂正符号は、できるだけ多くの書込みエラーを修復可能なように生成することが望ましい。書込みエラーとしては、ビット単位のランダム誤りもあるが、WLWordLine単位で周辺回路が故障することによるページ単位でのバースト誤りもある。ページ単位での誤りが発生した場合、1つの誤り訂正符号を同一ページ内の情報シンボル群に基づいて生成すると、NANDメモリ3から冗長シンボルが読出せたとしても、当該符号の元になった情報シンボル群を1つも読出せないことになり、復号ができなくなる。このため、1つの誤り訂正符号を生成するシンボル群は、NANDメモリ3の異なるページに分散させて格納することが望ましい。特に、符号エンコード部23で生成する誤り訂正符号の訂正能力がtシンボルの場合に、1つの誤り訂正符号に含まれる各シンボルのうち同一ページ上に記録するシンボルの数はtシンボル以下とすると、ページ単位のエラーを修復することができる。なお、シンボル群は、NANDメモリ3の異なるページに分散させることが望ましいが、各シンボル群のNANDメモリ3への格納位置に特に限定はない。図6、7は、本実施の形態の誤り訂正符号の構成例を示す図である。図6は、RS符号N=32、K=30を用いる例を示し、図7は、XORパリティN=32、K=31を用いる例を示している。ここでは、1シンボルは8ビットとする。各シンボル群は1ページ分のデータサイズ8Kバイトである。なお、ここでは1シンボルを8ビットとし、1ページを8Kバイトとしているが、1シンボルのビット数、1ページのデータサイズは、これらに限定されない。図6の例では、シンボル群0~シンボル群29の30個のシンボル群を情報シンボル群0~29とし、シンボル群30、シンボル群31を冗長シンボル群0~1としている。図6のRS符号101として示した、シンボル群0~シンボル群31の32シンボルは、1つのRS符号に対応するシンボルである。RS符号101内の情報シンボル群0~29のそれぞれ1シンボルずつ合計30シンボルに基づいて、RS符号101内の冗長シンボル群30、31の1シンボルずつ計2シンボルの冗長シンボルが生成される。そして、各シンボル群0~31をそれぞれ異なるページに書き込むことにより、1つのRS符号に対応する32個のシンボルは異なるページに格納されることになる。図7の例では、シンボル群0~シンボル群30の31個のシンボル群を情報シンボル群0~30とし、シンボル群31を冗長シンボル群0としている。情報シンボル群0~30のそれぞれ1シンボルずつ合計31シンボルに基づいて冗長シンボル群0の1つの冗長シンボルを生成する。そして、各シンボル群0~31をそれぞれ異なるページに書き込むことにより、1つのパリティ符号に対応するシンボル群0~シンボル群31は異なるページに格納されることになる。なお、以上述べた誤り訂正符号の構成は例であり、誤り訂正符号の種類、情報シンボルと冗長シンボルの比率等は、図6、7の例に限定されない。以降では、1つの誤り訂正符号を構成する情報シンボルと冗長シンボルの合計の数をn、情報シンボルの数をkとする。n個のシンボル群情報シンボル群と対応する冗長シンボル群を符号データ単位と呼ぶこととする。図6の例ではn=32、k=30であり、32シンボル群32ページで1つの符号データ単位を構成し、そのうち30シンボル群が情報シンボル群である。また、図7の例ではn=32、k=31である。次に、本実施の形態のNANDメモリ3への書込み処理について詳細に説明する。図8は、インターフェース部21の書込み処理手順の一例を示すフローチャートである。インターフェース部21は、ホスト4からL個のデータデータdi,i=0~L-1の書込みを要求する書込みコマンドを受信するステップS31と、まず、データバッファ22上に空き領域が有るか否かを判断するステップS32。データバッファ22上に空き領域が有る場合ステップS32Yes、データバッファ22上にデータdiを格納する領域を割当てるステップS33。なお、iの初期値は0とする。データdiをホストから受信するステップS34と、データバッファ22上の未書込みデータ量が閾値A以上であるか否かを判断するステップS35。データバッファ22上の未書込みデータ量が閾値A未満の場合ステップS35No、L個のデータを受信したか否かを判断しステップS36、L個のデータを受信していない場合ステップS36No、iを1インクリメントしてステップS32へ戻る。L個のデータを受信した場合ステップS36Yes、書込み処理を完了するステップS37。データバッファ22上に空き領域が無い場合ステップS32No、書込み制御部24によりデータバッファ22が解放されるまで待ちステップS38、ステップS33へ進む。また、ステップS35でデータバッファ22上の未書込みデータ量が閾値A以上であると判断した場合ステップS35Yes、書込み制御部24にNANDメモリ3への書込み処理の開始を指示しステップS39、ステップS36へ進む。図9は、書込み制御部24における書込み処理手順の一例を示すフローチャートである。書込み制御部24は、インターフェース部21からNANDメモリ3への書込み処理の開始指示を受けると、データバッファ22上のデータをk個のシンボル群情報シンボル群Sjj=p~pk-1に振り分け、シンボル群Sjj=p~pk-1についての書込み処理を開始するステップS41。なお、ここでは、図8の閾値Aを1符号データ単位内のk個の情報シンボル群に対応するデータ量とする。データバッファ22のバッファサイズをkページ分以上のサイズとし、シンボル群Sp-1までは、前回の処理までにNANDメモリ3への書込み処理済みであるとする。書込み制御部24は、シンボル群SjのNANDメモリ3上の書込み領域を決定しステップS42、シンボル群Sjの書込み先のチップメモリチップが動作中であるか否かを判断するステップS43。シンボル群Sjの書込み先のチップが動作中の場合ステップS43Yes、当該チップの動作完了が終わるのを待ってからステップS44、シンボル群Sjをデータバッファ22から読出して符号エンコード部23へ転送しステップS45、符号エンコード部23に対し、誤り訂正符号生成処理の中間結果に転送したシンボル群Sjを反映するよう指示するステップS46。符号エンコード部23は、指示に基づいてシンボル群Sjに基づいて誤り訂正符号生成処理の中間結果を更新する。なお、ここでは、誤り訂正符号の生成処理符号エンコード処理では、演算の入力となるシンボルが増えるごとに、シンボルが増える前までの演算結果を用いて誤り訂正符号を更新することが可能であるとする。すなわち、x0,x1,...,xq-1を用いて求めた誤り訂正符号をEqとするとき、x0,x1,...,xqのシンボルを用いた誤り訂正符号は、Eqとxqを用いて生成することができるとする。ここでは、nd個のシンボルを用いて生成した誤り訂正符号をNANDメモリ3へ格納する最終的な誤り訂正符号として生成する場合に、符号エンコード部23がnd個未満のシンボルを用いて生成した誤り訂正符号例えば、前述のEqを中間結果と呼ぶこととする。また、書込み制御部24は、シンボル群SjをメモリI/F27へ転送しステップS47、ステップS42で決定したNANDメモリ3上の書込み領域へシンボル群Sjを書込むよう指示する。書込み制御部24は、シンボル群SjのメモリI/F27への転送が完了するまで待ちステップS48、転送完了後にシンボル群Sjに対応するデータバッファ22上の領域を解放するステップS49。その後、書込み制御部24は、符号を構成するk個の情報シンボル群をメモリI/F27へ転送したか否かを判断しステップS50、k個のシンボル群をメモリI/F27へ転送していない場合ステップS50No、jをj1に更新してステップS51ステップS42へ戻る。k個の情報シンボル群をメモリI/F27へ転送した場合ステップS50Yes、書込み制御部24は、冗長シンボル群の書込み領域を決定するステップS52。そして、書込み先のチップが動作中であるか否かを判断しステップS53、動作中でない場合ステップS53No、冗長シンボル群を符号エンコード部23からメモリI/F27へ転送しステップS55、当該冗長シンボル群の転送完了を待つステップS56。転送完了後、書込み制御部24は、符号データ単位を構成するn個のシンボルをメモリI/F27へ転送したか否かを判断するステップS57。ステップS52で、書込み先のチップが動作中であった場合ステップS53Yes、当該チップの動作が完了するまで待ちステップS54、ステップS55へ進む。符号データ単位を構成するn個のシンボル群をメモリI/F27へ転送した場合ステップS57Yes、符号化エンコード部を初期化しステップS58、書込み処理を終了する。また、符号データ単位を構成するn個のシンボル群をメモリI/F27へ転送していない場合ステップS57No、ステップS52へ戻り転送していない冗長シンボル群についてステップS52以降の処理を実施する。ステップS48およびステップS56の後、並行して、NANDメモリ3において、メモリI/F27から転送されたシンボル群のセルへの書込みプログラムが実施されるステップS59。なお、中間結果を用いた演算のできないアルゴリズムにより誤り訂正符号を生成する場合には、情報シンボル群ごとに符号エンコード部23およびメモリI/F27へ順次入力するのではなく、最終的な誤り訂正符号が生成されるまで情報シンボルをメモリI/F27へ転送せずに、最終的な誤り訂正符号が生成された後に全情報シンボル群および冗長シンボル群をメモリI/F27へ転送して、転送後にデータバッファ22を解放するようにすればよい。図10は、1符号データ単位内のk個の情報シンボル群に相当するデータ量がデータバッファに溜まる前に書込み処理を開始する場合の書込み制御部24における書込み処理手順の一例を示すフローチャートである。ステップS61~ステップS69は、処理対象のシンボル群を1つのSjのみとする以外は、図9のステップS61~ステップS49と同様である。ステップS69の後、書込み制御部24は、符号を構成するk個のシンボル群をメモリI/F27へ転送したか否かを判断しステップS70、k個のシンボル群をメモリI/F27へ転送していない場合ステップS70No、処理を終了するその後、次のシンボル群の処理へ移行する。符号を構成するk個のシンボル群をメモリI/F27へ転送した場合ステップS70Yes、図9のステップS52~S58と同様にステップS71~ステップS77を実施する。図10のフローチャートによれば、データバッファ22に情報シンボル群1個分に相当するデータが溜まればメモリIFへの転送が可能なので、図8における閾値Aおよびデータバッファ22のサイズを情報シンボル群k個分より小さくすることが可能である。また、ここでは、シンボル群単位でメモリI/F27へ転送してデータバッファ22をシンボル群単位で解放するようにしたが、複数シンボル単位でメモリI/F27へ転送してデータバッファ22を複数シンボル群単位で解放するようにしてもよい。図11は、本実施の形態のデータバッファ22の使用例を示す図である。図11の上の2段は、従来の記憶装置におけるデータバッファの使用例を示しており、1段目がダブルバッファバッファWB0、WB1の2つのバッファを用いる例を示し、2段目がシングルバッファバッファWBを示している。3段目は、本実施の形態のデータバッファ22の使用例を示しており、データバッファ22がシングルバッファバッファWBの例を示している。図11は、横軸は模式的に示した時間を示しており、横線のハッチングはホスト受信の操作を示し、斜め線のハッチングはData-inデータバッファ22からNANDメモリ3への転送を示し、格子状のハッチングはプログラムtProg;セルへの書込みを示している。また、各バッファWB0、WB1、WBの矩形中にDataiiはデータの番号、i=0,1,...と記載されている部分は、当該バッファがDataiにより使用されていることを示している。また、図11の斜め上向きの黒矢印は、従来上2段ではプログラム完了、本実施形態下段では転送完了を示しており、各例においてはこのタイミングでデータバッファを解放する。なお、図11では、データバッファ22がmページmシンボル群格納可能である場合に、1シンボル群ずつデータバッファ22上の領域を開放するのではなく、mページ分まとめて解放する例を示している。Dataii=0,1,...は、それぞれmページ分のデータであるとする。2段目に示すように、従来のシングルバッファの場合は、プログラムが終了してから、バッファを解放するため、Data0のプログラムが終了再書込みも含むするまで次のデータであるData1をバッファに格納することができない。このため、Data0のプログラム終了より前にホストからデータが送信されても書込み準備ができないため、ホストからの送信を待機させる必要があった。一方、1段目に示すように、従来のダブルバッファを用いる場合は、Data0のプログラム終了より前にホストからデータを受信すると、WB0は使用することができないが、WB1を使用することができる。このため、書込みの速度は、2段目のシングルバッファの場合に比べ向上する。しかし、シングルバッファに比べ倍のバッファが必要となる。これに対し、3段目に示す本実施の形態では、Data-in後にすぐにデータバッファ22を解放する。このため、従来のシングルバッファの場合に比べ書込み速度を向上させることができ、また従来のダブルバッファの場合に比べバッファの量を削減することができる。なお、ここでは、mページ分のデータをまとめて転送してデータバファ22を解放する例を示したが、mページ未満の1つ以上のシンボル群ページ単位で転送を実施してデータバファ22を解放する場合も、転送および解放がデータバッファ22の一部を単位として転送および解放が実施される以外は、上述の例と同様である。ホスト4からの送信されたデータは、データバッファ22の空いている領域に格納することができる。次に、本実施の形態のシンボル群のNANDメモリ3上の書込み位置について説明する。上述したように、本実施の形態では、1つの誤り訂正符号を構成するシンボル群をそれぞれ異なるページに格納することが望ましい。図12は、NANDメモリ3内の同一ブロックの異なるページに1つの誤り訂正符号を構成するシンボル群を格納する例を示す図である。図12に示すように、同一ブロックの異なるページに分散させて格納するようにしてもよい。図13は、NANDメモリ3内の異なるブロックに1つの誤り訂正符号を構成するシンボル群を格納する例を示す図である。図13に示すように、異なるブロックに分散させて格納すると、ページ単位のエラーだけでなくブロック単位のエラーにも対応できる。特に、符号エンコード部23で生成する誤り訂正符号の訂正能力がtシンボルの場合に、1つの誤り訂正符号に含まれる各シンボルのうち同一ブロック上に記録するシンボルの数はtシンボル以下とすると、ブロック単位の故障を修復することができる。図14は、NANDメモリ3内の異なるチップメモリチップの異なるプレーンに1つの誤り訂正符号を構成するシンボル群を格納する例を示す図である。図14に示すように、異なるチップおよびプレーンに分散させて格納すると、ページ単位のエラーだけでなくチップ単位のエラーにも対応できる。なお、図14では、プレーンを分散させているがプレーンは同一で異なるチップに分散させるようにしてもよい。特に、符号エンコード部23で生成する誤り訂正符号の訂正能力がtシンボルの場合に、1つの誤り訂正符号に含まれる各シンボルのうち同一チップ上に記録するシンボルの数はtシンボル以下とすると、チップ単位の故障を修復することができる。以上のように、本実施の形態では、データの書込み時に誤り訂正符号化処理により冗長データを生成して情報データとともに冗長データをNANDメモリ3へ格納しておき、書込みエラーの有無に関わらず、再書込みを実施しないようにした。そして、書込みエラーがあった場合には、読出し時に誤り訂正符号を用いた復号を行うようにした。このため、書込み速度の低下を防ぐことができる。さらに、メモリI/F27へのデータ転送が完了したデータに対応するデータバッファ22の領域を解放するようにした。このため、従来に比べ、バッファの容量を削減することができ、また同一のバッファ容量の場合は従来に比べ書込み速度を向上させることができる。第2の実施の形態図15は、第2の実施の形態にかかる記憶装置1aの構成例を示すブロック図である。記憶装置1aは、メモリコントローラ2aとNANDメモリ不揮発性メモリ3を備える。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。なお、本実施の形態の第1符号エンコード部23は、第1の実施の形態の符号エンコード部23と同様であり、本実施の形態の第1符号デコード部26は、第1の実施の形態の符号デコード部26と同様である。本実施の形態では、第1の実施の形態で述べた書込みエラーに対する誤りを訂正するための誤り訂正処理第1誤り訂正処理に加え、同一ページ内にデータと当該データに対応する冗長シンボル冗長データとを含む誤り訂正処理第2誤り訂正処理を実施する。第1の実施の形態で述べたように、ページ間にまたがって1つの誤り訂正符号第1誤り訂正符号に対応するデータを格納する場合、誤り訂正を行う際には、対応するデータを含むページを全て読出すことになる。これに対し、同一ページ内にデータと当該データに対応する冗長データとを含む場合、ページ単位の読出しを行えば誤り訂正処理が実施することができる。本実施の形態では、リードエラー検出部28aは、NANDメモリ3からの読出し時に第2誤り訂正処理を行って、第2誤り訂正処理で訂正能力を超えて訂正不可と判定された場合に、リードエラーが検出されたと判断する。そして、読出し制御部25は、リードエラーが検出された場合、エラーが検出されたデータに対応する第1誤り訂正符号第1符号エンコード部23により生成された誤り訂正符号を構成するデータを全て読出し、第2符号デコード部42へ入力する。第2符号デコード部42は、ページごとにページ内の第2誤り訂正符号を用いた誤り訂正処理を行う。読出し制御部25は、第2符号デコード部42による誤り訂正処理後のデータおよび第1誤り訂正符号の冗長シンボル群を第1符号デコード部26へ入力する。第1符号デコード部26は、入力されたデータおよび冗長シンボル群に基づいて誤り訂正処理を実施する。図16は、本実施の形態の誤り訂正符号の構成例を示す図である。図16では、図6の例と同様に、RS符号N=32、K=30を第1誤り訂正符号として用いた例を示している。本実施の形態の書込み処理では、第1の実施の形態と同様に第1誤り訂正符号を生成した後、書込み制御部24は第2符号エンコード部41へ各シンボル群を入力し、第2符号エンコード部41は、シンボル群ごとにシンボル群内のデータ情報データに基づいて冗長データを生成する。書込み制御部24は、情報データと対応する冗長データとをNANDメモリ3の同一ページに格納するよう制御する。図16の例では、512byteごとに第2誤り訂正符号を生成しているが、第2誤り訂正符号を構成する情報データのサイズは、これに限定されない。また、図16では、情報データごとに、情報データの後に当該情報データに対応する冗長データを配置しているが、第2誤り訂正符号のページ内の配置位置はこれに限定されない。以上のように、本実施の形態では、書込み時に、再書込みを実施せず第1の実施の形態と同様の誤り訂正符号である第1誤り訂正符号を生成するとともに、同一ページ内のデータに基づいて第2誤り訂正符号を生成するようにした。そして、NANDメモリ3からの読出し時に、第2誤り訂正符号を用いた誤り訂正処理により訂正不可であった場合に、第1誤り訂正符号を用いた誤り訂正処理を実施するようにした。このため、ランダム誤り等については第2誤り訂正符号を用いて訂正することが可能となり、読出し対象のページ以外のページを読出して第1誤り訂正符号を用いた誤り訂正処理を行う頻度が低下する。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"