"不揮発性メモリからアクセス対象のデータ及び当該データを特定する指定データを読み出すリード手段と、前記リード手段により読み出されたデータ及び前記指定データに対する誤り検出訂正処理を実行する誤り検出訂正手段と、前記誤り検出訂正手段による誤り訂正が不能である場合に、前記指定データの修正処理を実行し、修正処理後の指定データに基づいた再度の誤り検出処理を実行する制御手段とを具備するデータ記憶装置。前記誤り検出訂正手段は、前記データ及び前記指定データに対するシンドローム計算を実行し、当該シンドローム計算結果に基づいて最初の誤り検出処理を行なう手段を含み、前記制御手段は、前記指定データの修正処理として前記シンドローム計算結果を補正する手段と、前記シンドローム計算結果の補正値に基づいて前記再度の誤り検出処理を実行する手段とを含む請求項1に記載のデータ記憶装置。前記制御手段は、前記再度の誤り検出処理の結果を使用して、前記誤り検出訂正手段により再度の誤り訂正処理を実行させる手段を含む請求項1又は請求項2のいずれか1項に記載のデータ記憶装置。前記指定データは、論理アドレスとして前記不揮発性メモリに格納されている請求項1から請求項3のいずれか1項に記載のデータ記憶装置。前記制御手段は、前記指定データの修正処理として、前記リード手段により読み出される前記論理アドレスをリードコマンドにより指定される論理アドレスに変更する処理を含む請求項4に記載のデータ記憶装置。前記指定データは論理アドレスとして前記不揮発性メモリに格納されており、前記誤り検出訂正手段は、前記データ及び前記論理アドレスに対するシンドローム計算を実行し、当該シンドローム計算結果に基づいて最初の誤り検出処理を行なう手段を含み、前記制御手段は、前記リード手段により読み出される前記論理アドレスとリードコマンドにより指定される論理アドレスとの差分を算出する手段と、前記差分に基づいて前記シンドローム計算結果を補正し、前記補正値に基づいて前記再度の誤り検出処理を実行する手段とを含む請求項1に記載のデータ記憶装置。前記制御手段は、前記誤り検出訂正手段による誤り訂正が不能である場合で、前記指定データのエラーが検出されない場合には、前記誤り訂正が不能であることを確定する手段を含む請求項1に記載のデータ記憶装置。前記制御手段は、前記再度の誤り訂正処理での誤り訂正が不能である場合には、前記誤り訂正が不能であることを確定する手段を含む請求項3に記載のデータ記憶装置。前記誤り検出訂正手段は、前記データ及び前記指定データに対するシンドローム計算を実行し、当該シンドローム計算結果に基づいて最初の誤り検出処理を行なう手段を含み、前記制御手段は、前記修正処理後の指定データ及び前記データに対する前記シンドローム計算を再実行し、前記再実行後のシンドローム計算結果に基づいて前記再度の誤り検出処理を行なう手段を含む請求項1に記載のデータ記憶装置。不揮発性メモリからアクセス対象のデータ及び当該データを特定する指定データを読み出すリード手段を有するデータ記憶装置に適用する誤り検出訂正方法であって、前記リード手段により読み出されたデータ及び前記指定データに対する誤り検出訂正処理を実行し、前記誤り検出訂正処理による誤り訂正が不能である場合に、前記指定データの修正処理を実行し、前記修正処理後の指定データに基づいた再度の誤り検出処理を実行する誤り検出訂正方法。SSDでは、ECC処理によりエラーが検出された場合には、エラー訂正処理が実行される。エラー訂正処理では、予めエラー訂正能力が決定されており、その限界を超えた場合にはエラー訂正不能と判定される。具体的には、ユーザデータとLBAを含めて、例えば8ビットのエラーまで訂正可能である場合に、9ビットのエラーが検出されるとエラー訂正不能と判定される。SSDは、エラー訂正不能と判定された場合には、フラッシュメモリからデータを再度読み出し、ECC処理を再実行するような処理を行なう。このような再度の読み出し処理を伴うECC処理の再実行は、SSDのリード処理効率を低下させる要因となる。そこで、本発明の目的は、エラー訂正不能と判定された場合に、ECC処理の再実行を効率的に行なうことを実現し、リード処理効率を向上できるデータ記憶装置を提供することにある。実施形態によれば、データ記憶装置は、リード手段と、誤り検出訂正手段と、制御手段とを具備する。リード手段は、不揮発性メモリからアクセス対象のデータ及び当該データを特定する指定データを読み出す。誤り検出訂正手段は、前記リード手段により読み出されたデータ及び前記指定データに対する誤り検出訂正処理を実行する。制御手段は、前記誤り検出訂正手段による誤り訂正が不能である場合に、前記指定データの修正処理を実行し、修正処理後の指定データに基づいた再度の誤り検出処理を実行する。以下図面を参照して、実施形態を説明する。[データ記憶装置の構成]図1は、実施形態のデータ記憶装置の構成を示すブロック図である。図1に示すように、実施形態のデータ記憶装置はSSDsolidstatedriveであり、大別してSSDコントローラ10と、NAND型フラッシュメモリフラッシュメモリ19とを有する。フラッシュメモリ19はSSDのデータ記憶媒体であり、複数のチャネルに対応するフラッシュメモリ191~19nからなる。SSDコントローラ10は、ホストインターフェース11と、マイクロプロセッサMPU12と、コマンド処理モジュール13と、レジスタ群14と、フラッシュメモリコントローラ以下、メモリコントローラと表記する15とを有する。ホストインターフェース11は、SSDとホストシステム例えばパーソナルコンピュータ20とのインターフェースであり、ホストシステム20との間でコマンドやデータの転送を制御する。ホストインターフェース11は、ホストシステム20からのデータアクセス要求に応じて、後述するようなフォーマットからなるコマンド111を生成してMPU12に転送する。MPU12は図示しないシステムバスを介して、ホストインターフェース11、コマンド処理モジュール13、レジスタ群14及びメモリコントローラ15と接続し、各種の制御を実行する。MPU12は、レジスタ群14に対して各種の制御に必要なコマンド、データ、値などを設定する。コマンド処理モジュール13は、MPU12によりレジスタ群14のコマンドレジスタに設定されたコマンド111を解釈し、メモリコントローラ15に対してリードコマンド又はライトコマンド等のコマンドを発行する。メモリコントローラ15は、調停モジュール以下、アービタと表記する16と、NANDコントローラ17とを有する。NANDコントローラ17は、ライト動作、リード動作、イレース消去動作などに関して、フラッシュメモリ19を制御する。NANDコントローラ17は、フラッシュメモリ191~19nをそれぞれ個別に制御するチャネル毎のNANDコントローラ171~17nからなる。さらに、NANDコントローラ171~17nはそれぞれ、後述する誤り検出訂正モジュール以下、ECCモジュールと表記する181~18n及びリードモジュールを有する。図示しないリードモジュールは、フラッシュメモリ191~19nからデータを読み出すリード動作を実行する。なお、本実施形態のSSDでは、ライト動作は、各チャネルのフラッシュメモリ191~19nに対して、データを並列に書き込むマルチチャネル方式である。また、フラッシュメモリに対するライト動作はプログラム動作と呼ばれる場合がある。アービタ16は、NANDコントローラ171~17nに接続し、ライト動作、リード動作、イレース動作のタイミングを調整する。また、アービタ16は、NANDコントローラ171~17nに対して、コマンドやデータの転送を調整する。図2は、NANDコントローラ171~17nに設けられるECCモジュール181~18nの構成を示すブロック図である。各ECCモジュール181~18nは同一構成である。ここでは、便宜的にECCモジュール18をそれぞれの代表として説明する。図2に示すように、ECCモジュール18は、データバッファ181と、エラー訂正部182と、シンドローム計算部183と、エラー検出器184と、エラー特定部185と、LBA差分計算部186と、シンドローム補正計算部187と、補正切り換え部188とを有する。データバッファ181は、フラッシュメモリ19から読み出されたセクタ単位のデータ100を保持し、エラー訂正部182及びシンドローム計算部183に出力する。データ100は、後述するように、ユーザデータ110と論理ブロックアドレス以下、LBAと表記する120を有する。エラー訂正部182は、エラー訂正処理の準備が完了すると、データバッファ181から出力されるデータに対して、エラー特定部185からのエラー位置情報に基づいてデータのエラーエラービットを訂正する。シンドローム計算部183は、データバッファ181からのデータに対してシンドロームsyndromeを算出する。シンドロームは、エラー位置を特定するための情報である。エラー検出器184は、シンドローム計算部183で算出されたシンドロームを使用してエラーを検出する。即ち、エラー検出器184は、エラーの有無を判定し、エラー判定結果210を出力する。エラー判定結果210は、アービタ16を経由してMPU12に転送される。エラー検出器184は、エラー判定結果としてエラーを検出した場合には、エラー特定部185にシンドロームを引き渡す。エラー特定部185はエラー検出器184からのシンドロームに基づいて、エラー位置を特定し、当該エラー位置情報をエラー訂正部182に出力する。エラー訂正部182は、エラー訂正後のデータ200を出力する。LBA差分計算部186は、フラッシュメモリ19から読み出されたデータ100に含まれるLBA値M120と、リードコマンドの引数として与えられたLBA値C113とを入力とし、これらの差分を算出する。LBA差分計算部186は、計算結果をシンドローム補正計算部187に出力する。LBA値Cは、後述するように、ホストインターフェース11により生成されて、レジスタ群14に設定されているコマンドフォーマット111に含まれる論理ブロックアドレスである。シンドローム補正計算部187は、LBA差分計算部186からの情報差分結果に基づいて、シンドローム計算部183で算出されたシンドロームに対する補正値を算出する。補正切り換え部188は、補正オンの場合に補正値をシンドローム計算部183に出力する。補正切り換え部188は、エラー検出器184からの補正オン/オフの切り替え指示に応じて、補正オンの場合には補正値を出力し、補正オフの場合には補正値の出力を停止する。ここで、エラー検出器184は、エラー検出結果エラー判定に基づいて、エラー訂正部182でのエラー訂正能力を超えるエラー状態を検出した場合には、訂正不能であると判定し、補正切り換え部188に対して補正オンを指示する。逆に、エラー検出器184は、検出したエラー状態がエラー訂正部182でエラー訂正可能であれば、補正切り換え部188に対して補正オフを指示する。エラー訂正部182でのエラー訂正能力とは、データ100のビット数で、例えば8ビットまでのエラーに対してエラー訂正可能であると想定する。従って、エラー検出器184は、9ビット以上のエラーを検出した場合には、エラー訂正不能であると判定する。[ECC処理]以下、図6のフローチャートを参照して、本実施形態のECC処理を説明する。SSDでは、NANDコントローラ171~17nはそれぞれ、コマンド処理モジュール13により発行されるリードコマンドに応じて、フラッシュメモリ191~19nからLBA値Cにより指定されるLBA値Mのデータを読み出すブロック600。ECCモジュール181~18nはそれぞれ、読み出されたデータに対するECC処理を実行する。なお、本実施形態では、便宜的に1つのチャネルに対するデータ読み出し動作と、ECC処理を説明する。図3は、データフォーマットを示す図である。図3に示すように、1エントリとして例えばセクタ単位のデータフォーマット100は大別して、ユーザデータ110とLBA値M120からなる。ユーザデータ110は、ホストシステム20からのアクセス対象データである。LBAM120は、当該ユーザデータ110を指定するための指定データであり、フラッシュメモリ19内の格納位置を示すアドレスデータである。図4に示すように、フラッシュメモリ19には、図3に示すデータフォーマット100からなるデータ群が整列して記憶されている。図5は、コマンド処理モジュール13により発行されて、SSDコントローラ10内で取り扱われるコマンド111のフォーマットである。コマンドフォーマットは、フラッシュメモリ19に対してデータの読み出し又はライトを区別するためのフラグ112、アクセス対象データを指定するLBAC113、及びその他の属性を示すデータ114からなる。フラグ112がデータの読み出しを示すコマンド111は、便宜的にリードコマンドと呼ぶ。また、LBAC113は、フラッシュメモリ19内のデータフォーマット100のLBAM120に対応するものである。LBAC113により、値Cと同一の値MのLBAM120が付加されたデータ110がアクセス対象データとして指定される。図2に示すように、ECCモジュール18は、フラッシュメモリ19から読み出されたデータ100を入力し、データバッファ181に格納する。シンドローム計算部183は、データバッファ181からのデータに対してシンドロームsyndromeを算出し、エラー検出器184に出力する。エラー検出器184は、シンドロームを使用してエラー検出処理を実行し、エラー判定結果210を出力するブロック601。ここで、エラー検出器184からエラーが存在しないエラー判定結果210が出力されると、NANDコントローラ17は、読み出し完了として処理するブロック602のNO,603。なお、通常では、NANDコントローラ17は、読み出したデータを一時的に格納するバッファを有する。メモリコントローラ15は、NANDコントローラ17からクラスタ単位例えば8セクタのデータ読み出しが完了すると、ホストインターフェース11へのデータ転送を実行する。エラー検出器184は、エラー判定結果としてエラーを検出した場合には、前述のエラー訂正部182でのエラー訂正能力に基づいて、そのエラーが訂正可能または訂正不能であるかをチェックするブロック604。エラー検出器184により訂正可能と判定された場合には、エラー訂正部182は、エラー訂正処理を実行し、エラー訂正後のデータ200を出力するブロック605。ここで、エラー訂正部182は、前述したように、エラー特定部185からのエラー位置情報に基づいてエラー訂正処理を実行する。エラー訂正部182による訂正処理が完了すると、NANDコントローラ17は、読み出し完了として処理するブロック603。一方、エラー検出器184により訂正不能と判定された場合には、LBA差分計算部186は、フラッシュメモリ19から読み出されたデータ100に含まれるLBAM120と、リードコマンドのLBAC113とを入力とし、これらの差分を算出するブロック606。ここで、差分がなく、即ち読み出されたLBAMがリードコマンドのLBACと同一の場合には、LBAMにはエラーが存在しないことになるブロック607のNO。この場合、ECCモジュール18は、エラー訂正不能としてECC処理を終了するブロック608。即ち、本実施形態のECCモジュール18は、後述するように、LBAMのシンドロームの補正処理後に再度のエラー検出処理を実行する。LBAMにはエラーが存在しない場合には、再度のエラー検出処理の結果は同じであるため、エラー訂正不能としてECC処理を終了することになる。LBA差分計算部186により差分が有る場合には、LBAMにはエラービットが存在することになるブロック607のYES。そこで、シンドローム補正計算部187は、LBA差分計算部186からの差分結果に基づいて、シンドローム計算部183で算出されたシンドロームの修正処理を実行するブロック609。具体的には、シンドローム補正計算部187は、エラービットを含むLBAMのシンドロームを、LBACに基づいたシンドロームに補正する補正値を算出する。ここで、エラー検出器184は、エラー訂正不能であると判定した場合には、補正切り換え部188に対して補正オンを指示する。これにより、補正切り換え部188は、シンドローム補正計算部187により算出された補正値をシンドローム計算部183に出力する。シンドローム計算部183は、最初に計算したシンドロームを保持しており、当該シンドロームの中でLBAMに対応する部分を補正値に置き換えたシンドロームを、エラー検出器184に出力する。これにより、エラー検出器184は、補正値を含むシンドロームを使用して、再度のエラー検出処理を実行するブロック610。ここで、エラー検出器184からエラーが存在しないエラー判定結果210が出力されると、NANDコントローラ17は、読み出し完了として処理するブロック611のNO,603。一方、エラーを検出した場合には、エラー検出器184は、再度、そのエラーが訂正可能または訂正不能であるかをチェックするブロック612。エラー検出器184により訂正可能と判定された場合には、エラー訂正部182は、エラー訂正処理を実行し、エラー訂正後のデータ200を出力するブロック613。また、エラー検出器184により訂正不能と判定された場合には、ECCモジュール18は、エラー訂正不能としてECC処理を終了するブロック612のYES,608。以上のように本実施形態によれば、フラッシュメモリ19から読み出されたデータ100に対するECC処理において、エラー検出処理でエラー訂正不能であると判定される場合に、LBACに基づいたLBAMの修正処理により、再度のエラー検出処理を実行する。具体的には、LBAMに対するシンドロームを補正した補正値を使用して、再度のエラー検出処理を実行する。このような方法により、エラー訂正不能であると判定された場合に、データ100の再読み出しを行なうことなく、効率的に再度のエラー検出処理を実行することが可能となる。即ち、エラー訂正部182でのエラー訂正能力が例えば8ビットの場合に、ユーザデータ110に8ビットのエラーが存在し、さらに1ビットのエラーがLBAMに存在するとエラー訂正能力を超える。このため、最初のエラー検出処理により、エラー訂正不能であると判定される。このような場合に、本実施形態であれば、LBAMの修正処理後の再度のエラー検出処理により、訂正可能の判定を得る可能性が高くなる。従って、結果としてECCモジュール18の訂正能力以上のエラー発生に対しても訂正が行える可能性が高くなる。また、本実施形態の方法であれば、フラッシュメモリ19のエラー数の増加を示す統計情報を収集して記録する処理も、効率的に行なうことが可能となる。なお、本実施形態の変形例として、LBAMをLBACに基づいて補正し、この補正したLBAMとユーザデータとを使用して、再度のシンドローム計算を実行する方法でも良い。但し、この方法では、データバッファ181からユーザデータ110の再読み出しが必要となる。[ECCエンコーダ及びECCデコーダ]図7は、ECCエンコーダの一例を示す機能ブロック図である。本実施形態のECCモジュール18は、リード動作時に前述のECC処理を実行する場合に、ECCエンコーダにより生成されるエラー訂正符号を使用する。ECCエンコーダは、フラッシュメモリ19にデータを書き込むライト動作時に、LBAM及びユーザデータを有するデータを使用してエラー訂正符号を生成する。図7に示すように、ECCエンコーダは、データ保持要素701,702と、ガロワ体Galoisfieldの乗算器703,704と、ガロワ体の加算器705,706とを有する。データ保持要素701,702は例えばフリップフロップであり、ここでは符号値R1,R0を保持している状態を示す。乗算器703,704はそれぞれ、α25倍器とα1倍器である。ECCエンコーダは、下記式1の生成多項式generatorpolynomialで示される255シンボルのコード長に対して、1シンボルの訂正能力を持つGF28上のRS符号255,253,1を生成する。RS符号は、リードソロモン符号ReedSolomoncodeである。X2Xα25α...1なお、シンドローム生成項syndromegeneratorsは、X-1,X-αとなる。ECCエンコーダは、入力データを1クロックで1シンボルずつ入力し、入力が完了した時点でのデータ保持要素701,702で保持されている符号値R1,R0をエラー訂正符号として生成する。図8は、図7に示すECCエンコーダと対になるECCデコーダの一例を示す機能ブロック図である。図8に示すECCデコーダは、ECCモジュール18のシンドローム計算部183またはシンドローム補正計算部187の機能を実現する構成である。図8に示すように、ECCデコーダは、データ保持要素811,812と、ガロワ体Galoisfieldの乗算器813,814と、ガロワ体の加算器815,816とを有する。データ保持要素811,812は例えばフリップフロップであり、ここではシンドロームの値S0,S1を保持している状態を示す。乗算器813,814はそれぞれ、α0倍器、α1倍器である。ECCデコーダは、入力データを1クロックで1シンボルずつ入力し、入力が完了した時点でデータ保持要素811,812に保持されている値S0,S1をシンドロームとして導出する。ここで、図8に示すように、シンドロームS0,S1の計算は独立しており、相互の計算結果は影響しない。シンドローム計算後にデータ保持要素811,812に保持されている値が両方とも0の場合には、エラー無しの判定となる。ここで、デコードする入力データを、I0、I1、I2、...、Inとした場合に、データ保持要素811に保持される値S0は、下記式2により算出される。S0=I0α0nI1α0n-1I2α0n-2...In...2また、データ保持要素812に保持される値S1は、下記式3により算出される。S1=I0α1nI1α1n-1I2α1n-2...In...3ここで、シンドローム補正計算部187によるシンドローム補正計算は、入力データとしてLBAMとLBACとの違いが有る部分の項を入れ替えることで実現される。例えばI2が異なるのであれば、前記式2,3から、I2α0n-2及びI2α1n-2の項を減算し、それぞれ入れ替えたい値であるI2aから算出したI2aα0n-2及びI2aα1n-2を加算する。即ち、補正後のシンドロームをS0a及びS1aとした場合、ガロワ体の減算は加算という性質を利用すると、S0a及びS1aは、下記式4,5から算出される。S0a=S0-I2α0n-2I2aα0n-2=S0I2-I2aα0n-2...4S1a=S1-I2α1n-2I2aα1n-2=S1I2-I2aα1n-2...5以上のように、シンドロームS0,S1を補正する値は、入力データの差分にそれぞれα0及びα1の入力データ位置乗を乗じた値を加算すれば容易に算出できることがわかる。なお、図7及び図8に示すECCエンコーダ及びECCデコーダは、便宜的にRS符号に関する構成として説明したが、これに限ることはない。例えば、データフォーマット100におけるデータ長が4Kバイトであれば、GF213上のBCHBoseChaudhuriHocquenghem符号に関する構成でもよい。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"