不揮発性メモリを制御するメモリコントローラであって、ホストから受信したデータに対する第1の誤り検出符号を生成する第1の誤り検出符号生成部と、前記データと該データに対応する前記第1の誤り検出符号とを前記メモリへ書き込むよう制御し、前記ホストからデータの読み出し要求があった場合に前記メモリからデータと該データに対応する前記第1の誤り検出符号とを読み出す制御部と、前記メモリから読み出されたデータと該データに対応する前記第1の誤り検出符号とに基づいて誤り検出処理を行う誤り検出部と、前記メモリから読み出したデータに基づいて第2の誤り検出符号を生成する第2の誤り検出符号生成部と、前記メモリから読み出したデータに誤りがあることを示す不整合符号を生成する不整合符号生成部と、を備え、前記ホストへ送信する前記メモリから読み出したデータに対して、前記第2の誤り検出符号と前記不整合符号とのうちいずれか一方を前記誤り検出処理によるエラー検出結果に基づいて選択して付加することを特徴とするメモリコントローラ。前記ホストへ送信するデータに対応する前記誤り検出処理によるエラー検出結果が、誤りの無いことを示す結果であった場合に前記第2の誤り検出符号を選択して付加し、前記ホストへ送信するデータに対応する前記誤り検出処理によるエラー検出結果が、誤りの有ることを示す結果であった場合に前記不整合符号を選択して付加することを特徴とする請求項1に記載のメモリコントローラ。前記ホストへデータを送信した後に、該データに付加した前記第2の誤り検出符号または前記不整合符号を前記ホストへ送信することを特徴とする請求項1または2に記載のメモリコントローラ。前記ホストとの間でシリアルATA規格に準拠した転送を行い、前記第2の誤り検出符号または前記不整合符号をFISにおけるCRCとして前記ホストへ送信することを特徴とする請求項1、2または3に記載のメモリコントローラ。前記不整合符号生成部は、前記第2の誤り検出符号をビット反転させることにより前記不整合符号を生成することを特徴とする請求項1乃至4のいずれか一項に記載のメモリコントローラ。不揮発性メモリと、ホストから受信したデータに対する第1の誤り検出符号を生成する第1の誤り検出符号生成部と、前記データと該データに対応する前記第1の誤り検出符号とを前記メモリへ書き込むよう制御し、前記ホストからデータの読み出し要求があった場合に前記メモリからデータと該データに対応する前記第1の誤り検出符号とを読み出す制御部と、前記メモリから読み出されたデータと該データに対応する前記第1の誤り検出符号とに基づいて誤り検出処理を行う誤り検出部と、前記メモリから読み出したデータに基づいて第2の誤り検出符号を生成する第2の誤り検出符号生成部と、前記メモリから読み出したデータに誤りがあることを示す不整合符号を生成する不整合符号生成部と、を備え、前記ホストへ送信する前記メモリから読み出したデータに対して、前記第2の誤り検出符号と前記不整合符号とのうちいずれか一方を前記誤り検出処理によるエラー検出結果に基づいて選択して付加することを特徴とするデータ記憶装置。不揮発性メモリを制御するメモリ制御方法であって、ホストから受信したデータに対する第1の誤り検出符号を生成するステップと、前記データと該データに対応する前記第1の誤り検出符号とを前記メモリへ書き込むよう制御するステップと、前記ホストからデータの読み出し要求があった場合に前記メモリからデータと該データに対応する前記第1の誤り検出符号とを読み出すステップと、前記メモリから読み出されたデータと該データに対応する前記第1の誤り検出符号とに基づいて誤り検出処理を行うステップと、前記メモリから読み出したデータに基づいて第2の誤り検出符号を生成するステップと、前記メモリから読み出したデータに誤りがあることを示す不整合符号を生成するステップと、前記ホストへ送信する前記メモリから読み出したデータに対して、前記第2の誤り検出符号と前記不整合符号とのうちいずれか一方を前記誤り検出処理によるエラー検出結果に基づいて選択して付加するステップと、を含むことを特徴とするメモリ制御方法。本実施形態は、ホストからデータ記憶装置にデータが入力されてから、メディア部への書き込みおよび読み出しの後にホストに出力されるまでの全経路についてエラーを検出することが可能なメモリコントローラ、データ記憶装置およびメモリ制御方法を提供する。本願発明の一態様によれば、データを不揮発に記憶するメモリを制御するメモリコントローラであって、ホストから受信したデータに対する第1の誤り検出符号を生成する第1の誤り検出符号生成部と、データと第1の誤り検出符号とを前記メモリへ書き込むよう制御する。また、ホストからデータの読み出し要求があった場合にメモリからデータと第1の誤り検出符号とを読み出し、メモリから読み出されたデータと第1の誤り検出符号とに基づいて誤り検出処理を行う誤り検出部と、メモリから読み出したデータに基づいて第2の誤り検出符号を生成する第2の誤り検出符号生成部と、メモリから読み出したデータに誤りがあることを示す不整合符号を生成する不整合符号生成部と、を備え、ホストへ送信するデータに対して、第2の誤り検出符号と不整合符号とのうちいずれか一方を誤り検出処理によるエラー検出結果に基づいて選択して付加する。以下に添付図面を参照して、実施形態にかかるメモリコントローラ、データ記憶装置およびメモリ制御方法を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。図1は、実施の形態にかかるデータ記憶装置の構成例を示すブロック図である。図1に示すように、本実施の形態のデータ記憶装置1は、メモリコントローラ2とNANDメモリメモリ3を備える。データ記憶装置1は、ホスト4とホストバス5を介して接続されている。ホスト4は、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。図1において、太線と細線の組み合わせで示した接続線はデータバスを示し、細線だけで示した接続線は制御バスを示す。メモリコントローラ2は、MPUMicroProcessingUnit制御部21、ホスト制御部22、RAMRandomAccessMemory制御部RAMC23、NAND制御部NANDC24およびRAM25を備える。ホスト制御部22とRAMC23、RAMC23とNANDC24、RAMC23とRAM25は、それぞれデータバスである内部バス26で接続されている。ホスト制御部22は、ホスト4との間のインタフェース規格に従った処理を実施し、ホストバス5経由でホスト4から受信した命令、データなどを内部バス26に出力する。また、ホスト制御部22は、内部バス26経由で入力されたデータ、MPU21からの応答などをホストバス5経由でホスト4へ送信する。ホスト4とデータ記憶装置1との間のインタフェース規格としては、例えば、SATASerialAdvancedTechnologyAttachmentを用いることができる。SATAでは、FISFrameInformationStructureと呼ばれる転送単位でデータの転送を行う。FISには、転送対象のデータの後に当該データに対するCRCCyclicRedundancyCheckが格納される。このCRCにより、ホストバス5におけるエラーを検出することができる。なお、ここでは、ホスト4とデータ記憶装置1との間のインタフェース規格としてSATAを用いる例を説明するが、ホスト4とデータ記憶装置1との間のインタフェース規格は、これに限定されない。例えば、PCIPeripheralComponentInterconnectExpressを用いる場合には、TLPTransactionLayerPacketと呼ばれる転送単位でデータの転送を行う。TLP内には、転送対象のデータの後に当該データに対するECRCTransactionLayerend-to-end32bitCRCを格納する機能が用意されている。このECRCにより、ホストバス5におけるエラーを検出することができる。MPU21は、データ記憶装置1の各構成要素を統括的に制御する制御部である。ここでは、制御部としてMPUを用いる例を説明するが、制御部はMPUに限定されず演算機能を有するユニットであればよい。MPU21は、ホスト4からホスト制御部22経由で命令を受けた場合に、その命令に従った制御を行う。例えば、MPU21は、ホスト4からの命令に従って、NANDメモリ3へのデータの書き込み、NANDメモリ3からのデータの読み出しなどを、NANDC24へ指示する。RAM25は、メモリコントローラ2がホスト4から受信したデータをNANDメモリ3へ記憶するまでに一時格納したり、NANDメモリ3から読み出したデータをホスト4へ送信するまでに一時格納したりするために使用されるメモリである。データ記憶装置1において、データに対して誤り検出符号や誤り訂正符号が付加される場合に、これらの符号もRAM25に格納されることもある。RAMC23は、MPU21からの指示に従って、RAM25へのデータ格納およびデータ読み出しを制御する。なお、図1に示したデータ記憶装置1の構成は一例であり、図1の構成に限定されない。また、NANDメモリ3の代わりに磁気ディスク等の他の記憶手段を用いてもよい。次に、本実施の形態のNANDメモリ3への書き込み動作について説明する。図2は、書き込み動作に関するホスト制御部22の詳細構成例を示す図である。書き込み処理部221は、ホスト制御部22において、NANDメモリ3への書き込み時の処理を行うブロックである。書き込み処理部221は、FISCRCエラー検出部FISCRCChecker222とEECRC生成部EECRCgenerator223を備える。なお、図2では、データの流れをわかりやすくするために、図1に記載したブロックのうちの一部の図示を省略している。また、接続関係は簡略化して示している。ホスト4は、FIS内にデータと当該データに対応するCRC以下、FISCRCというとを格納してデータ記憶装置1へ送信する。なお、FIS内には、データとFISCRC以外に格納される情報もあり、これらの情報についても送受信されるが、これらの送受信動作は従来と同様であるため説明は省略する。本実施の形態では、データ記憶装置1がホスト4からデータを受信してから、メディア部への書き込みおよび読み出しの後にホストに送信されるまでの全経路について、エラーを検出可能とするためにEnd-to-Endでの誤り検出符号を生成する。この誤り検出符号を本実施の形態では、EECRC第1の誤り検出符号とよび、FISCRC第2の誤り検出符号と区別する。ホスト制御部22は、ホスト4からデータの書き込みを指示する書き込みコマンドを受信すると、書き込みコマンドをMPU21へ通知する。ホスト制御部22のFISCRCエラー検出部222は、ホスト4から書き込みデータを受信すると、書き込みデータと当該書き込みデータに対応するFISCRCとを用いてエラー検出を行う。エラーが検出されなかったデータは、RAM25に格納される。FISCRCエラー検出部222によりエラーが検出された場合は、ホスト4へエラーを通知するなどインタフェース規格に従ったエラー処理を実施する。また、ホスト制御部22のEECRC生成部223は、FISCRCエラー検出部222のチェックと並行して、ホスト4から受信した書き込みデータに基づいてEECRCを生成し、生成したEECRCをRAM25へ格納する。ここでは、EECRCとしてCRC32を用いる例を説明するが、EECRCとしては誤り検出符号であればどのような符号を用いてもよい。MPU21は、RAMC23に対して、RAM25に格納された書き込みデータと当該書き込みデータに対応するEECRCとをRAM25から読み出してNANDC24へ転送するよう指示する。また、MPU21は、NANDC24に対して転送されたデータのNANDメモリ3への書き込みを指示する。MPU21は、ホストから受け取った書き込みデータの論理アドレスとNANDメモリ3上のアドレス物理アドレスとの対応を管理する。図3は、NANDメモリ3へのデータ格納フォーマットの一例を示す図である。ここでは、EECRCを1データブロック512Byteのデータに対して生成することとし、図3に示すように、1データブロックごとにEECRCが付加される。なお、ここでは、1データブロックは512Byteとしているが、1データブロックは2048Byteや32Byteなどでもよく、512Byteに限定されない。また、EECRCを生成するデータは、1データブロックに限定されず、複数データブロックであってもよいし、1データブロックより少ないデータであってもよい。このように、EECRCはデータとともにNANDメモリ3へ書き込まれるため、EECRCの生成からNANDメモリ3までの経路がEECRCにより保護される。すなわち、EECRCの生成からNANDメモリ3までの経路上で生じたエラーを検出可能となる。また、通常と同様に、ホスト4からFISCRCエラー検出部222までは、FISCRCにより保護されている。このため、本実施の形態では、書き込み動作において、図2に示すように、ホスト4からNANDメモリ3までの全経路が保護されることになる。次に、本実施の形態のNANDメモリ3からの読み出し動作について説明する。図4は、読み出し動作に関するホスト制御部22の詳細構成例を示す図である。読み出し処理部224は、ホスト制御部22において、NANDメモリ3からの読み出し時の処理を行うブロックである。読み出し処理部224は、FISCRC生成部FISCRCgenerator225第2の誤り符号生成部とEECRC生成部EECRCgenerator226と比較器227とビット反転部不整合符号生成部228とセレクタSel229とを備える。EECRC生成部226としては、書き込み処理部221のEECRC生成部223を用いてもよい。なお、図4では、データの流れをわかりやすくするために、図1に記載したブロックのうちの一部の図示を省略している。また、接続関係は簡略化して示している。図5は、本実施の形態のメモリコントローラ2における読み出し動作の一例を示すフローチャートである。まず、メモリコントローラ2のホスト制御部22は、ホスト4からデータの読み出しを指示する読み出しコマンドを受信したか否かを判断するステップS1。なお、読み出しコマンドでは、読み出し対象のアドレスが指定されている。データの読み出しコマンドを受信した場合ステップS1Yes、ホスト制御部22は、読み出しコマンドをMPU21へ通知し、MPU21は、ホスト4から指示された読み出し対象データと対応するEECRCとをNANDメモリ3から読み出すようNANDC24へ指示するステップS2。NANDC24は、NANDメモリ3から読み出したデータとEECRCとをRAM25へ格納する。ホスト制御部22は、RAM25に格納されたデータNANDメモリ3から読み出されたデータに基づいてFISCRCを生成するとともに、RAM25に格納されたデータおよびEECRCNANDメモリ3から読み出されたデータおよびEECRCに基づいてエラー検出EECRCチェックを行うステップS3。具体的には、RAM25から読み出されたデータは、ホスト制御部22のFISCRC生成部225およびEECRC生成部226に入力されるとともにホスト4へ出力される。これと並行して、ホスト制御部22のFISCRC生成部225は、RAM25から読み出されたデータに対するFISCRCを生成してセレクタ229へ出力する。ホスト制御部22のEECRC生成部226は、RAM25に格納されたデータに基づいてEECRCを生成して比較器227へ入力する。RAM25から読み出されたEECRCは、比較器227に入力される。比較器227は、EECRC生成部226が生成したEECRCとRAM25から読み出されたEECRCとを比較し一致するか否かを判定して、判定結果をセレクタ229に出力する。EECRC生成部226に入力されたデータにエラーが無い場合は、比較器227の判定結果は、一致という結果になり、EECRC生成部226に入力されたデータにエラーがある場合には、比較器227の判定結果は、一致しないという結果になる。従って、比較器227の判定結果が、一致しないという結果であった場合、EECRC生成部226に入力されたデータ、すなわち、書き込み時にEECRC生成部223に入力されてから、読み出し時にEECRC生成部226に入力されるまでの経路のどこかでエラーが生じたことになる。このように、EECRC生成部226および比較器227が、EECRCによるエラー検出を行うEECRCChecker誤り検出部を構成する。比較器227による判定結果によりエラーの有無が判定されステップS4、エラー無し比較器227の比較結果が一致であった場合ステップS4No、FISCRCとデータをホストへ送信するステップS5。具体的には、セレクタ229は、比較器227の判定結果に応じて、FISCRC生成部225から入力されるFISCRCと、ビット反転部228から出力されるビット反転後のFISCRCと、のうちのいずれか一方を選択して出力する。比較器227の判定結果が一致の場合、セレクタ229は、FISCRC生成部225から入力されるFISCRCを選択して出力する。なお、データは、上述のとおり、FISのフォーマットに従ってホスト4へ送信されている。そして、ホスト制御部22は、ホスト4からの応答に基づいて転送したデータにエラーが有るか否かを判定するステップS6。エラーが無かった場合ステップS6No、MPU21またはホスト制御部22は、全読み出し対象のデータのホスト4への送信が終了したか否かを判定しステップS7、終了した場合ステップS7Yesは読み出し処理を終了する。全読み出し対象のデータのホスト4への送信が終了していない場合ステップS7No、ステップS2へ戻る。なお、ここでは、ステップS6では、ホスト4が、受信したデータおよびFISCRCに基づいて誤りがあるか否かを判定し、ホスト制御部22は、この判定結果を受信することにより誤りがあるか否かを判定しているが、ステップS6でのエラーの判定は、これに限定されない。例えば、ステップS4の判定結果や再度ホスト制御部22が再度転送したデータについて誤り検出をした結果等を用いてもよいし、これらの判定結果の組み合わせを用いてもよい。一方、ステップS4でエラー有り比較器227の比較結果が一致しないであった場合ステップS4Yes、ホスト制御部22は、FISCRC生成部225が生成したFISCRCの値を、対応するデータにエラーがあることを示す値に変更してステップS8、ステップS5へ進む。具体的には、ビット反転部228が、FISCRC生成部225が生成したFISCRCのビットを反転させてセレクタ229へ出力する。セレクタ229は、比較器227の判定結果が一致しないであった場合はビット反転部228から出力されるビット反転後のFISCRCを選択して出力する。また、ステップS6でエラー有りステップS6Yesの場合、ホスト制御部22は、エラーステータスと割り込みをホスト4へ送信しステップS9、処理を終了する。具体的には、SATAの場合、エラーステータスと割り込みをRegisterFISDevicetoHostRegD2HFISとよばれるFISにより送信する。ここでは、エラーが発生した場合、読み出し対象データが残っていてもその後のデータを送信しないようにしているが、エラー発生時にその後の読み出し対象データをホスト4へ送信するか否か等のエラー発生時の処理の内容はこれに限定されない。また、ステップS6でエラー無しステップS6Noであった場合にも、ステータスエラーの無いことを示すと割り込みをホストへ送信してもよい。なお、ホスト制御部22は、RAM25から読み出されたデータ、セレクタ229から出力されるFISCRCまたはビット反転後のFISCRCをFISのフォーマットに従ってホスト4へ転送するよう制御する。ビット反転させたFISCRCは、エラーが検出されたデータに対応するFISCRCとしてホスト4へ送信される。このように、本実施の形態では、比較器227の判定結果が一致しないであった場合、すなわちデータにエラーが生じている場合には、FISCRCを、ビット反転することによりデータと整合しない符号に変更してホスト4へ送信する。これにより、ホスト4は、データ記憶装置1から受信したデータにエラーがあることを認識することができる。NANDメモリ3からEECRC生成部226までの経路は、EECRCにより保護され、FISCRC生成部225からホスト4までは、FISCRCにより保護されている。このため、読み出し動作において、図4に示すように、NANDメモリ3からホスト4までの全経路が保護されることになる。また、上述のように、書き込み動作で説明したとおり、ホスト4からNANDメモリ3までの全経路も保護されており、NANDメモリ3にデータが格納されている間も含めて、ホスト4からデータを受信してNANDメモリ3に格納しNANDメモリ3から読み出してホスト4へ送信するまでの全経路を保護することができる。また、本実施の形態では、ホスト4へデータを送信しつつ、データに対応するEECRCをチェックして、エラーが検出された場合に、FISCRCを、ビット反転するようにしている。従って、EECRCを用いたチェックを行わない場合と同等のホスト4への転送速度を維持しつつ、ホスト4へ送信する間際までのエラーの検出を行うことができる。なお、本実施の形態では、FISCRCを反転することにより、ホスト4へエラーを通知したが、比較器227の判定結果によるエラー検出結果を、別の方法でホスト4へ通知するようにしてもよい。また、本実施の形態では、NANDメモリ3へのデータが格納されている間に生じるエラーを訂正する誤り訂正処理以下、NANDメモリ3に対する誤り訂正処理というについては述べていないが、NANDメモリ3に対する誤り訂正処理を追加してもよい。このNANDメモリ3に対する誤り訂正処理を行う場合には、EECRCを付加したデータに対して誤り訂正符号を生成し、EECRCを付加したデータと誤り訂正符号とをNANDメモリ3へ格納する。そして、読み出し時には、誤り訂正符号に基づく誤り訂正処理を行った後のEECRCおよびデータをホスト制御部22への入力とすればよい。図6、7は、本実施の形態の効果を説明するための図である。図6は、データパスのエラーに対する比較例の保護方法を示し、図7は、本実施の形態のデータパスのエラーに対する保護方法を示している。図6、7では、NANDメモリ3に対する誤り訂正処理を行う場合の例を示している。図6に示すように、比較例は、書き込み時に、ホストからFISCRCが付加されたデータを受信して、FISCRCを用いたエラー検出FISCRC-Checkを行い、その後、内部データパス保護機構により誤り訂正符号ECCが生成され、データとECCがNANDメモリに格納される。読み出し時には、NANDメモリからデータとECCが読み出され、ECCを用いた誤り訂正処理後に、データに対してFISCRCが生成されFISCRC-Gen、データとFISCRCがホストへ送信される。このため、内部データパス保護機構による誤り訂正処理を行ったとしても、図6に示すように、FISCRCを用いたエラー検出と内部データパス保護機構による誤り訂正符号の生成までの間と、内部データパス保護機構により誤り訂正処理がされてからFISCRCが生成されるまでの間と、が非保護区間となる。NANDメモリ3に対する誤り訂正処理を行わない場合は、さらに、内部データパス保護機構とNANDメモリ3の間も非保護区間となる。これに対し、本実施の形態では、図7に示すように、FISCRCを用いたエラー検出と並行してホストから入力されたデータに対してEECRCを生成しEECRC-Gen、EECRCはデータとともにNANDメモリに格納される。そして、読み出し時には、ECCを用いた誤り訂正処理後のEECRCとデータに基づいて、EECRCを用いたエラー検出EECRC-Checkが実施される。これにより、End-to-Endのデータ保護を実現することができる。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。