(57)【要約】【課題】書き込み時または読み出し時のいずれで不具合が発生しているかを特定する。【解決手段】実施形態によれば、検証装置の検証データ生成手段は、一意な識別子ＩＤｉを含む検証用のデータＤｉを論理アドレスＬＢｉ毎に生成する。書き込みデータ記憶手段は、論理アドレスＬＢｉ毎に生成されたデータＤｉを格納する。書き込みデータ判定手段は、データＤｉを含む書き込みデータＤ１ｉが論理アドレスＬＢｉの指定による書き込み要求に応じて半導体記憶装置の不揮発性メモリに書き込まれた後に、ＬＢｉが割り当てられるべき物理アドレスＰＡ２ｉの指定により不揮発性メモリから読み出されるデータＤ２ｉを、対応するデータＤｉと比較する。読み出しデータ判定手段は、ＬＢｉの指定により不揮発性メモリから読み出されるデータＤ３ｉを対応するデータＤｉと比較する。【選択図】      図１
2013196605.tif 000002
【特許請求の範囲】
【請求項１】
アドレス変換手段によって指定の論理アドレスから変換された物理アドレスまたは外部から与えられる物理アドレスの指定に応じてアクセスされる書き換え可能な不揮発性メモリを備えた半導体記憶装置を検証する検証装置において、
一意な識別子ＩＤｉを含む検証用の第１のデータＤｉを論理アドレスＬＢｉ毎に生成する検証データ生成手段と、
前記論理アドレスＬＢｉ毎に生成された前記第１のデータＤｉを格納する書き込みデータ記憶手段と、
前記論理アドレスＬＢｉに対応する前記第１のデータＤｉを含む書き込みデータＤ１ｉが前記論理アドレスＬＢｉの指定による書き込み要求に応じて前記不揮発性メモリに書き込まれた後に、前記論理アドレスＬＢｉが割り当てられるべき物理アドレスＰＡ２ｉの指定により前記不揮発性メモリから第２のデータＤ２ｉを読み出し、前記第２のデータＤ２ｉを、前記書き込みデータ記憶手段に格納されている前記論理アドレスＬＢｉに対応する前記第１のデータＤｉと比較することにより、前記半導体記憶装置の書き込み時の動作を判定する書き込みデータ判定手段と、
前記書き込み時の動作の検証の後、前記論理アドレスＬＢｉの指定による読み出し要求の発行により前記不揮発性メモリから第３のデータＤ３ｉを読み出して、前記第３のデータＤ３ｉを、前記書き込みデータ記憶手段に格納されている前記論理アドレスＬＢｉに対応する前記第１のデータＤｉと比較することにより、前記半導体記憶装置の読み出し時の動作を判定する読み出しデータ判定手段と
を具備する検証装置。
【請求項２】
前記第１のデータＤｉは、前記論理アドレスＬＢｉ、前記物理アドレスＰＡ２ｉ及び前記一意な識別子ＩＤｉから構成され、
前記書き込みデータ判定手段は、前記第２のデータＤ２ｉ及び前記第１のデータＤｉの互いに対応するデータ部分を比較し、
前記読み出しデータ判定手段は、前記第３のデータＤ３ｉ及び前記第１のデータＤｉの互いに対応するデータ部分を比較する
請求項１記載の検証装置。
【請求項３】
前記書き込みデータＤ１ｉはセクタデータであり、
前記一意な識別子ＩＤｉには、前記書き込みデータＤ１ｉの書き込みにおける総書き込みセクタ数が用いられる
請求項１記載の検証装置。
【請求項４】
前記総書き込みセクタ数をカウントするカウンタを更に具備する請求項３記載の検証装置。
【請求項５】
前記検証用データ生成手段は、前記書き込みデータＤ１ｉの書き込みの後で且つ前記第２のデータＤ２ｉの読み出しの前に、前記一意な識別子ＩＤｉが変更された第１のデータＤ１ｉを再生成し、前記再生成された第１のデータＤ１ｉを含む書き込みデータＤ１ｉの前記論理アドレスＬＢｉの指定による書き込みを前記半導体記憶装置に要求する請求項１記載の検証装置。
【請求項６】
前記書き込みデータＤ１ｉの書き込みの後で且つ前記第２のデータＤ２ｉの読み出しの前に、前記書き込みデータＤ１ｉの配置換えを前記半導体記憶装置に指示する検証コントローラを更に具備し、
前記物理アドレスＰ２Ａｉは、前記書き込みデータＤ１ｉの配置換えによって前記論理アドレスＬＢｉが再割り当てされるべき物理アドレスである
請求項１記載の検証装置。
【請求項７】
アドレス変換手段によって指定の論理アドレスから変換された物理アドレスまたは外部から与えられる物理アドレスの指定に応じてアクセスされる書き換え可能な不揮発性メモリを備えた半導体記憶装置を検証する検証方法において、
一意な識別子ＩＤｉを含む検証用の第１のデータＤｉを論理アドレスＬＢｉ毎に生成し、
前記論理アドレスＬＢｉ毎に生成された前記第１のデータＤｉを書き込みデータ記憶手段に格納し、
前記論理アドレスＬＢｉに対応する前記第１のデータＤｉを含む書き込みデータＤ１ｉを前記論理アドレスＬＢｉの指定による書き込み要求の発行により前記不揮発性メモリに書き込み、
書き込みデータＤ１ｉの書き込みの後に、前記論理アドレスＬＢｉが割り当てられるべき物理アドレスＰＡ２ｉの指定により前記不揮発性メモリから読み出される第２のデータを、前記書き込みデータ記憶手段に格納されている前記論理アドレスＬＢｉに対応する前記第１のデータＤｉと比較することにより、前記半導体記憶装置の書き込み時の動作を判定し、
前記書き込み時の動作の検証の後、前記論理アドレスＬＢｉの指定による読み出し要求の発行により前記不揮発性メモリから第３のデータＤ３ｉを読み出し、
前記第３のデータＤ３ｉを、前記書き込みデータ記憶手段に格納されている前記論理アドレスＬＢｉに対応する前記第１のデータＤｉと比較することにより、前記半導体記憶装置の読み出し時の動作を判定する
検証方法。
【請求項８】
前記第１のデータＤｉは、前記論理アドレスＬＢｉ、前記物理アドレスＰＡ２ｉ及び前記一意な識別子ＩＤｉから構成され、
前記第２のデータＤ２ｉを前記第１のデータＤｉと比較することは、前記第２のデータＤ２ｉ及び前記第１のデータＤｉの互いに対応するデータ部分を比較することを含み、
前記第３のデータＤ３ｉを前記第１のデータＤｉと比較することは、前記第３のデータＤ３ｉ及び前記第１のデータＤｉの互いに対応するデータ部分を比較することを含む
請求項７記載の検証方法。
【請求項９】
前記書き込みデータＤ１ｉはセクタデータであり、
前記一意な識別子ＩＤｉには、前記書き込みデータＤ１ｉの書き込みにおける総書き込みセクタ数が用いられる
請求項７記載の検証方法。
【請求項１０】
前記総書き込みセクタ数をカウントすることを更に具備する請求項９記載の検証方法。
【請求項１１】
前記書き込みデータＤ１ｉの書き込みの後で且つ前記第２のデータＤ２ｉの読み出しの前に、前記一意な識別子ＩＤｉが変更された第１のデータＤ１ｉを再生成することと、
前記再生成された第１のデータＤ１ｉを含む書き込みデータＤ１ｉの前記論理アドレスＬＢｉの指定による書き込みを前記半導体記憶装置に要求することと
を更に具備する請求項７記載の検証方法。
【請求項１２】
前記書き込みデータＤ１ｉの書き込みの後で且つ前記第２のデータＤ２ｉの読み出しの前に、前記書き込みデータＤ１ｉの配置換えを前記半導体記憶装置に指示することを更に具備し、
前記物理アドレスＰ２Ａｉは、前記書き込みデータＤ１ｉの配置換えによって前記論理アドレスＬＢｉが再割り当てされるべき物理アドレスである
請求項７記載の検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、半導体記憶装置を検証する装置及び方法に関する。
【背景技術】
【０００２】
従来から、ＮＡＮＤフラッシュメモリに代表される書き換え可能な不揮発性メモリを備えた半導体記憶装置が知られている。近年、このような半導体記憶装置は、特にソリッドステートドライブ（ＳＳＤ）の用途で注目されている。
【０００３】
半導体記憶装置を利用するホスト装置（ホスト）は、当該半導体記憶装置にアクセスする場合、論理アドレス（より詳細には論理ブロックアドレス）によりアクセス先を指定するのが一般的である。一方、半導体記憶装置内の不揮発性メモリは、物理アドレスの指定によりアクセスされる。このため半導体記憶装置は、ホスト（外部）により指定される論理アドレスを、不揮発性メモリの物理アドレスに変換するアドレス管理部を備えている。また、外部からの物理アドレスの指定により不揮発性メモリにアクセス可能な特別なモードを有する半導体記憶装置も知られている。
【０００４】
従来、半導体記憶装置は、例えば検証装置を用いて次のような手順で検証されるのが一般的である。  
検証装置は、論理アドレスＬＢＡｉを指定することにより、半導体記憶装置に検証用のデータＤａｉを書き込む。検証装置は、半導体記憶装置に書き込んだデータＤａｉを、対応する論理アドレスＬＢＡｉ毎にダイナミックＲＡＭ（ＤＲＡＭ）のようなメモリに格納する。その後、検証装置は、データＤａｉの書き込み時と同一の論理アドレスＬＢＡｉを指定することにより、半導体記憶装置からデータＤｂｉを読み出す。そして検証装置は、この読み出されたデータＤｂｉをメモリに格納されている論理アドレスＬＢＡｉに対応するデータＤａｉと比較する。これにより検証装置は、論理アドレスＬＢＡｉの指定によって半導体記憶装置に最後に書き込まれたデータが正しく読み出せるかを検証する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−１６３８５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の実施形態は、書き込み時または読み出し時のいずれで不具合が発生しているかを特定できる半導体記憶装置を検証する装置及び方法を提供する。
【課題を解決するための手段】
【０００７】
実施形態によれば、アドレス変換手段によって指定の論理アドレスから変換された物理アドレスまたは外部から与えられる物理アドレスの指定に応じてアクセスされる書き換え可能な不揮発性メモリを備えた半導体記憶装置を検証する検証装置は、検証データ生成手段と、書き込みデータ記憶手段と、書き込みデータ判定手段と、読み出しデータ判定手段とを具備する。前記検証データ生成手段は、一意な識別子ＩＤｉを含む検証用の第１のデータＤｉを論理アドレスＬＢｉ毎に生成する。前記書き込みデータ記憶手段は、前記論理アドレスＬＢｉ毎に生成された前記第１のデータＤｉを格納する。前記書き込みデータ判定手段は、前記論理アドレスＬＢｉに対応する前記第１のデータＤｉを含む書き込みデータＤ１ｉが前記論理アドレスＬＢｉの指定による書き込み要求に応じて前記不揮発性メモリに書き込まれた後に、前記論理アドレスＬＢｉが割り当てられるべき物理アドレスＰＡ２ｉの指定により前記不揮発性メモリから第２のデータＤ２ｉを読み出し、前記第２のデータＤ２ｉを、前記書き込みデータ記憶手段に格納されている前記論理アドレスＬＢｉに対応する前記第１のデータＤｉと比較することにより、前記半導体記憶装置の書き込み時の動作を判定する。前記読み出しデータ判定手段は、前記書き込み時の動作の検証の後、前記論理アドレスＬＢｉの指定による読み出し要求の発行により前記不揮発性メモリから第３のデータＤ３ｉを読み出して、前記第３のデータＤ３ｉを、前記書き込みデータ記憶手段に格納されている前記論理アドレスＬＢｉに対応する前記第１のデータＤｉと比較することにより、前記半導体記憶装置の読み出し時の動作を判定する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係る検証システムの典型的な構成を示すブロック図。
【図２】同実施形態で適用されるアドレス変換テーブルの典型的なデータ構造を示す図。
【図３】同実施形態で適用される検証データ及び書き込みデータの典型的なフォーマットを示す図。
【図４】同実施形態で適用される検証処理の典型的な手順を説明するためのフローチャートの一部を示す図。
【図５】前記フローチャートの残りを示す図。
【図６】同実施形態における先頭の検証データの生成の例を示す図。
【図７】同実施形態で適用される書き込みデータメモリにおける検証データ格納構造の例を示す図。
【発明を実施するための形態】
【０００９】
上述した先行技術によれば、論理アドレスＬＢＡｉの指定によって半導体記憶装置から読み出されたデータＤｂｉが以前に当該論理アドレスＬＢＡｉの指定による半導体記憶装置への書き込みに用いられたデータ（つまり検証用のデータ）Ｄａｉと一致しない場合、検証装置は、半導体記憶装置に不具合が発生したと判定することができる。しかし先行技術では、書き込み時または読み出し時のいずれで不具合が発生しているかを特定することは困難である。
【００１０】
以下、実施の形態につき図面を参照して説明する。  
図１は一つの実施形態に係る検証システムの典型的な構成を示すブロック図である。図１に示す検証システムは、半導体記憶装置１０と検証装置２０とから構成される。
【００１１】
半導体記憶装置１０は、書き換え可能な不揮発性メモリとしてＮＡＮＤフラッシュメモリ１１を備えている。本実施形態において半導体記憶装置１０はＳＳＤである。そこで以下の説明では、半導体記憶装置１０をＳＳＤ１０と称する。ＳＳＤ１０は、ＮＡＮＤフラッシュメモリ１１に加えて、ＮＡＮＤコントローラ１２、ドライバ１３ａ、ドライバ１３ｂ及びアドレス管理部１４を備えている。
【００１２】
ＮＡＮＤコントローラ１２は、ドライバ１３ａまたは１３ｂにより駆動されて、物理アドレスによりＮＡＮＤコントローラ１２にアクセスする。ドライバ１３ａは、アドレス管理部１４から与えられる物理アドレスに応じて、ＮＡＮＤコントローラ１２を駆動する。ドライバ１３ａは、ＮＡＮＤコントローラ１２を駆動することにより、要求されたアクセス動作（データ書き込み動作、データ読み出し動作等）を実行する。ドライバ１３ｂは、例えば後述する第１のファームウェアを検証（デバッグ）する際に用いられる。ドライバ１３ｂ自身は、正常であることが予め確認されているものとする。ドライバ１３ｂは、外部（本実施形態では検証装置２０）からＳＳＤ１０に与えられる物理アドレス指定によるアクセス要求（特別なアクセス要求）に応じて、ＮＡＮＤコントローラ１２を駆動する。ドライバ１３ｂは、ＮＡＮＤコントローラ１２を駆動することにより、要求されたアクセス動作（例えばデータ読み出し動作）を実行する。
【００１３】
アドレス管理部１４は、所定のアドレス管理アルゴリズムに従って、論理アドレス（より詳細には論理ブロックアドレス）ＬＢＡｉ毎に当該論理アドレスＬＢＡｉと物理アドレスＰＡｉ（より詳細には、ＮＡＮＤフラッシュメモリ１１の物理アドレスＰＡｉ）との対応付けを管理する。つまりアドレス管理部１４は、論理アドレスＬＢＡｉ毎に、当該論理アドレスＬＢＡｉの物理アドレスＰＡｉへの割り当てを管理する。
【００１４】
アドレス管理部１４は、アドレス変換テーブル１４０を備えている。アドレス変換テーブル１４０は、論理アドレスＬＢＡｉ毎に当該論理アドレスＬＢＡｉと物理アドレスＰＡｉとの対応を示す。アドレス管理部１４は、例えば外部（本実施形態では検証装置２０）からＳＳＤ１０に与えられる論理アドレスアドレス指定によるアクセス要求（通常のアクセス要求）に応じてアドレス変換手段として機能する。この場合、アドレス管理部１４は、アドレス変換テーブル１４０を参照することにより、指定された論理アドレス（より詳細には論理ブロックアドレス）ＬＢＡｉを当該論理アドレスＬＢＡｉに対応付けられた物理アドレスＰＡｉに変換する。
【００１５】
アドレス管理部１４は、前記アドレス管理アルゴリズムに従ってアドレス変換テーブル１４０を更新する。アドレス管理部１４はまた、ＮＡＮＤフラッシュメモリ１１におけるコンパクション、ウエアレベリング等による周知のデータ再配置（つまり、物理的なデータ記録位置の配置換え）を管理する。アドレス管理部１４は、このデータ再配置に応じてアドレス変換テーブル１４０を更新する。
【００１６】
本実施形態において、ドライバ１３ａ及びアドレス管理部１４は第１のファームウェアを用いて実現され、ドライバ１３ｂは第２のファームウェアを用いて実現されるものとする。つまり、ドライバ１３ａ及びアドレス管理部１４と、ドライバ１３ｂとは、それぞれ、前記第１のファームウェアと前記第２のファームウェアとを、例えばマイクロプロセッサが実行することにより実現されるものとする。一方、ＮＡＮＤフラッシュメモリ１１及びＮＡＮＤコントローラ１２はハードウェアにより実現される。
【００１７】
なお、本実施形態において第２のファームウェアの用途は限られており、その規模は第１のファームウェアに比べて極めて小さい。そのため、第２のファームウェア（つまりドライバ１３ｂ）自体を予め検証することは容易である。
【００１８】
図２は本実施形態で適用されるアドレス変換テーブル１４０の典型的なデータ構造を示す。アドレス変換テーブル１４０は、複数のエントリを有している。アドレス変換テーブル１４０の複数のエントリの各々は、論理アドレス（ＬＢＡ）フィールド１４１及び物理アドレス（ＰＡ）フィールド１４２から構成される。論理アドレスフィールド１４１は、論理アドレスを保持するのに用いられる。物理アドレスフィールド１４２は、対応する論理アドレスフィールド１４１に保持されている論理アドレスが割り当てられる物理アドレスを保持するのに用いられる。図２の例では、論理アドレス０ｘ０，０ｘ１及び０ｘ２に、それぞれ、物理アドレスＡ，Ｂ及びＣが割り当てられている。ここで、０ｘＹ（Ｙ＝０，１，２）における“０ｘ”は、後続のＹが１６進表現であることを示す。
【００１９】
検証装置２０は、広義にはＳＳＤ１０を検証し、狭義にはＳＳＤ１０内のドライバ１３ａ及びアドレス管理部１４（より詳細には、ドライバ１３ａ及びアドレス管理部１４を実現する第１のファームウェア）を検証するのに用いられる。本実施形態において、ＮＡＮＤフラッシュメモリ１１及びＮＡＮＤコントローラ１２の不具合、つまりハードウェア起因の不具合は、検証装置２０による検証の対象外である。このため本実施形態では、説明の簡略化のために、ハードウェア起因の不具合はないものとする。なお、ＮＡＮＤフラッシュメモリ１１及びＮＡＮＤコントローラ１２の不具合は、周知のように、ＳＳＤ１０内での自己診断テスト（例えばＮＡＮＤコントローラ１２による自己診断テスト）等で検証可能である。
【００２０】
本実施形態において、検証装置２０はＳＳＤ製造におけるテスト工程でＳＳＤ１０と接続して用いられる。検証装置２０は、検証データ生成部２１、書き込みデータメモリ２２、書き込みデータ判定部２３、読み出しデータ判定部２４及び検証コントローラ２５を備えている。
【００２１】
検証データ生成部２１は、検証コントローラ２５の提示する書き込み検証シナリオに従って、論理アドレスＬＢＡｉ毎に検証用のデータ（以下、検証データと称する）Ｄｉを生成する。検証データＤｉはＳＳＤ１０を検証するのに用いられる。本実施形態において、検証データＤｉのサイズは１２バイトであり、１セクタのサイズより十分小さい。１セクタのサイズは例えば５１２バイトである。セクタは、周知のように、ＳＳＤ１０にアクセスする際の最小単位である。検証データ生成部２１は、検証データＤｉを含む１セクタのサイズの書き込みデータＤｉを論理アドレスＬＢＡｉ毎に生成する。検証用データ生成部２１は、論理アドレスＬＢＡｉ毎に生成された書き込みデータＤ１ｉをＳＳＤ１０のＮＡＮＤフラッシュメモリ１１に書き込むための、論理アドレス指定による書き込み要求をＳＳＤ１０に発行する。
【００２２】
図３は、本実施形態で適用される検証データＤｉ及び書き込みデータＤ１ｉの典型的なフォーマットを示す。図３に示すように、検証データＤｉは、４バイトの論理アドレス（ＬＢＡ）フィールド３１、４バイトの物理アドレス（ＰＡ）フィールド３２及び４バイトの識別子（ＩＤ）フィールド３３から構成される。一方、書き込みデータＤ１ｉは、上述の論理アドレスフィールド３１、物理アドレスフィールド３２及び識別子フィールド３３と、５００バイトの無効データ（ＩＶＤ）フィールド３４とから構成される。
【００２３】
論理アドレスフィールド３１は、書き込みデータＤ１ｉの書き込み先の論理アドレスＬＢＡｉ（４バイト）を保持するのに用いられる。物理アドレスフィールド３２は、論理アドレスＬＢＡｉが割り当てられるべき物理アドレスＰＡｉ（４バイト）を保持するのに用いられる。
【００２４】
識別子フィールド３３は、４バイトの一意な識別子ＩＤｉを保持するのに用いられる。本実施形態において、識別子ＩＤｉには、書き込みセクタ数（総書き込みセクタ数）が用いられる。書き込みセクタ数は、例えば検証装置２０からの要求によりＳＳＤ１０（より詳細にはＳＳＤ１０のＮＡＮＤフラッシュメモリ１１）に書かれるデータの総セクタ数（つまり累積されたセクタ数）である。なお、書き込みセクタ数が、検証装置２０による一連の検証処理の期間において、当該検証装置２０からの要求によりＳＳＤ１０に書かれるデータの総セクタ数であっても構わない。無効データフィールド３４は、無効データＩＶＤｉを保持するのに用いられる。論理アドレスフィールド３１、物理アドレスフィールド３２及び識別子フィールド３３は、有効データフィールド（有効部）といえる。
【００２５】
以上の説明から明らかなように、検証データＤｉ（つまり１２ビットの検証データＤｉ）は、４バイトの論理アドレスＬＢＡｉ、４バイトの物理アドレスＰＡｉ（より詳細には、論理アドレスＬＢＡｉが割り当てられるべき物理アドレスＰＡｉ）及び４バイトの識別子ＩＤｉから構成される。一方、書き込みデータＤ１ｉは、１２バイトの検証データＤｉ及び５００バイトの無効データＩＶＤｉから構成される。ここで、論理アドレスＬＢＡｉ及び物理アドレスＰＡｉの対は、前記書き込み検証シナリオによって示されている。
【００２６】
検証データ生成部２１は、上述の書き込みセクタ数をカウントするカウンタ２１０を備えている。検証データ生成部２１は、カウンタ２１０によってカウントされる書き込みセクタ数（つまりカウンタ２１０の示すセクタカウントＳＣ）を、検証データＤｉ中の一意な識別子ＩＤｉとして用いる。つまりカウンタ２１０は、書き込み（例えば、一連の検証処理の期間におけるセクタ書き込み）に固有の識別子ＩＤｉを生成する。検証データ生成部２１は、生成された検証データＤｉ（つまり、書き込みデータＤ１ｉ中に設定される論理アドレスＬＢＡｉ、物理アドレスＰＡｉ及び識別子ＩＤｉ）を書き込みデータメモリ２２に格納する。
【００２７】
書き込みデータメモリ２２は、例えばＤＲＡＭのような揮発性メモリである。書き込みデータメモリ２２は、検証データ生成部２１によって生成された検証データＤｉを格納するのに用いられる。書き込みデータメモリ２２は更に、書き込みデータ判定部２３及び読み出しデータ判定部２４による判定結果を格納するのにも用いられる。
【００２８】
書き込みデータ判定部２３は、検証データ生成部２１によって発行された論理アドレス指定による書き込み要求に従ってＳＳＤ１０において書き込みが実行された後に検証コントローラ２５によって起動される。書き込みデータ判定部２３は、検証コントローラ２５の提示する前記書き込み検証シナリオに従い、論理アドレスＬＢＡｉに対応する物理アドレスＰＡ２ｉの指定による読み出し要求をＳＳＤ１０に発行する。本実施形態では、ＰＡ２ｉは後述するようにＰＡｉに一致するものとする。書き込みデータ判定部２３は、この読み出し要求に応じてＳＳＤ１０から読み出されるデータＤ２ｉ（より詳細にはデータＤ２ｉの有効部）を、書き込みデータメモリ２２に格納されている対応する検証データＤｉと比較することにより、ＳＳＤ１０の書き込み時の動作を判定（つまり検証）する。書き込みデータ判定部２３は、この判定結果を、検証データＤｉ（または検証データＤｉ中の論理アドレスＬＢＡｉ）と対応付けて書き込みデータメモリ２２に格納する。
【００２９】
読み出しデータ判定部２４は、書き込みデータ判定部２３による判定の後に検証コントローラ２５によって起動される。読み出しデータ判定部２４は、検証コントローラ２５の提示する読み出し検証シナリオに従い、論理アドレス指定による読み出し要求をＳＳＤ１０に発行する。読み出しデータ判定部２４は、この読み出し要求に応じてＳＳＤ１０から読み出されるデータＤ３ｉ（より詳細にはデータＤ３ｉの有効部）を、書き込みデータメモリ２２に格納されている対応する検証データＤｉと比較することにより、ＳＳＤ１０の読み出し時の動作を判定（つまり検証）する。読み出しデータ判定部２４は、この判定結果を、検証データＤｉと対応付けて書き込みデータメモリ２２に格納する。
【００３０】
検証コントローラ２５は、検証シナリオに従って、検証データ生成部２１、書き込みデータメモリ２２及び読み出しデータ判定部２４を制御する。検証シナリオは、前記書き込み検証シナリオ及び前記読み出し検証シナリオを含む。
【００３１】
次に、本実施形態で適用される検証装置２０がＳＳＤ１０を検証するための検証処理の典型的な手順について、図４及び図５のフローチャートを参照して説明する。  
まず検証コントローラ２５は検証データ生成部２１を起動して、当該検証データ生成部２１に書き込み検証シナリオを提示する。書き込み検証シナリオは、例えば論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５，ＬＢＡｉ＝０ｘ０，０ｘ１，０ｘ２，…０ｘＦＦ）及び当該論理アドレスＬＢＡｉが割り当てられるべきＮＡＮＤフラッシュメモリ１１の物理アドレスＰＡｉ（ＰＡｉ＝Ａ，Ｂ，Ｃ，…，Ｚ）を含む検証データＤｉの生成と当該検証データＤｉを含む書き込みデータＤ１ｉの論理アドレス指定による書き込み要求の発行を指定する。
【００３２】
検証データ生成部２１は、書き込み検証シナリオに従い、論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）毎に検証データＤｉを生成する（ステップ４０１）。この検証データＤｉは次のように生成される。
【００３３】
まず、検証データＤｉの生成に際し、カウンタ２１０はセクタカウントＳＣを１インクリメントする。なお、検証処理の開始時には、カウンタ２１０のセクタカウントＳＣは０にリセットされるものとする。
【００３４】
検証データ生成部２１は、論理アドレスフィールド３１、物理アドレスフィールド３２及び識別子フィールド３３に、それぞれ、論理アドレスＬＢＡｉ、物理アドレスＰＡｉ及び識別子ＩＤｉが設定された検証データＤｉを生成する。論理アドレスＬＢＡｉ及び物理アドレスＰＡｉの対は、書き込み検証シナリオによって示される。物理アドレスＰＡｉは、論理アドレスＬＢＡｉが割り当てられるべき物理アドレスである。また識別子ＩＤｉは、その時点のカウンタ２１０の示すセクタカウントＳＣが用いられる。
【００３５】
図６は、本実施形態における先頭の検証データＤｉ（ｉ＝０）の生成の例を示す。先頭の検証データＤｉ（ｉ＝０）が生成される前のカウンタ２１０のセクタカウントＳＣは“０”である。カウンタ２１０は、検証データＤｉ（ｉ＝０）の生成に際し、セクタカウントＳＣを図６において矢印６１で示すように０から１にインクリメントする。
【００３６】
検証データ生成部２１は、論理アドレスフィールド３１、物理アドレスフィールド３２及び識別子フィールド３３に、図６に示すように、それぞれ４バイトの論理アドレス“０ｘ０”（ＬＢＡｉ＝ＬＢＡ０＝０ｘ０）、物理アドレス“０ｘ１０００”（ＰＡｉ＝ＰＡ０＝０ｘ１０００）及び識別子“１”（ＩＤｉ＝ＩＤ０＝１）が設定された検証データＤｉ（ｉ＝０）を生成する。この例は、論理アドレスＬＢＡ０（つまり“０ｘ０”）が割り当てられるべき物理アドレスＰＡ０（つまり“Ａ”）が“０ｘ１０００”の場合である。識別子“１”には、図６において矢印６２で示されるように、その時点におけるカウンタ２１０のセクタカウントＳＣが用いられる。なお、最後の論理アドレスＬＢＡｉ（ｉ＝２５５）に対応する検証データＤｉが生成された時点では、カウンタ２１０のセクタカウントＳＣは２５６となる。
【００３７】
検証データ生成部２１は、書き込み検証シナリオの指定する論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）毎の検証データ（第１のデータ）Ｄｉを生成すると（ステップ４０１）、当該論理アドレスＬＢＡｉ毎の検証データＤｉを書き込みデータメモリ２２の検証用テーブルデータ領域に格納する。本実施形態では、検証データＤｉ（１２バイト）は、書き込みデータＤ１ｉ（５１２バイト）の一部を構成する。このため、検証データ自体が書き込みデータである従来技術と異なり、論理アドレス毎の検証データを格納するのに必要な書き込みデータメモリ２２の容量を低減することができる。
【００３８】
図７は、本実施形態で適用される書き込みデータメモリ２２における検証データ格納構造の例を示す。ここでは説明の簡略化のために、論理アドレスＬＢＡｉ毎の検証データＤｉが、テーブル形式で書き込みデータメモリ２２に格納されるものとする。
【００３９】
図７に示すように、書き込みデータメモリ２２の検証データ領域（つまり検証データテーブル領域）は、複数の検証データエントリを有している。これらの複数の検証データエントリの各々は、前述の論理アドレスフィールド３１、物理アドレスフィールド３２及び識別子フィールド３３にそれぞれ対応する、論理アドレスフィールド２２１、物理アドレスフィールド２２２及び識別子フィールド２２３を有している。
【００４０】
複数の検証データエントリの各々は更に、フラグＦ１１，Ｆ１２及びＦ１３がそれぞれ設定されるフラグフィールド２２４，２２５及び２２６と、フラグＦ２１，Ｆ２２及びＦ２３がそれぞれ設定されるフラグフィールド２２７，２２８及び２２９とを有している。フラグＦ１１〜Ｆ１３は、書き込みデータ判定部２３による互いに対応するフィールド毎の一致判定結果を示す。フラグＦ２１〜Ｆ２３は読み出しデータ判定部２４による互いに対応するフィールド毎の一致判定結果を示す。検証データＤｉが検証データエントリに格納された時点では、フラグＦ１１〜Ｆ１３及びＦ２１〜Ｆ２３は一致を示す所定の値、例えば“０”に初期設定される。
【００４１】
検証データ生成部２１は論理アドレスＬＢＡｉ毎の検証データＤｉの有効部を書き込みデータメモリ２２に格納すると（ステップ４０２）、論理アドレス指定による書き込み要求をＳＳＤ１０に発行する（ステップ４０３）。この書き込み要求は、例えば、書き込み開始論理アドレスＬＢＡ０と書き込みデータサイズ（セクタ数）Ｓ（Ｓ＝２５６）とを含み、書き込みデータＤ１ｉ（ｉ＝０，１，２，…，２５５）の書き込みを指定する。書き込みデータＤ１ｉは、図３に示されるように、ステップ４０２で生成された検証データＤｉを含む。
【００４２】
ＳＳＤ１０は、検証データ生成部２１によって発行された論理アドレス指定による書き込み要求を実行する（ステップ４０４）。即ちＳＳＤ１０は、検証データ生成部２１からの書き込み要求に従い、書き込み開始論理アドレスＬＢＡ０から始まるセクタ数Ｓの示す論理アドレスの範囲（ＬＢＡ０〜ＬＢＡ２５５の範囲）に対応する物理アドレスＰＡ１ｉ（ＰＡ０〜ＰＡ２５５）の各位置に、書き込み要求で指定された書き込みデータＤ１ｉを書き込む。この書き込みデータＤ１ｉの書き込みは次のように実行される。
【００４３】
まずアドレス管理部１４はアドレス変換テーブル１４０を参照することにより、論理アドレスＬＢＡｉ（ここでは、ＬＢＡｉ＝ＬＢＡ０＝０ｘ０、つまり書き込み開始論理アドレスＬＢＡ０）を、当該論理アドレスＬＢＡｉが割り当てられる物理アドレスＰＡ１ｉに変換する（ステップ４０４ａ）。本実施形態では説明の簡略化のために、論理アドレスＬＢＡｉに対応するデータのＮＡＮＤフラッシュメモリ１１内の記録位置は、少なくともステップ４０１から後述するステップ４０５までの期間、変更されないものとする。この場合、アドレス管理部１４によるアドレス変換に不具合がなければ、変換された物理アドレスＰＡ１ｉはＰＡｉに一致することが期待される。
【００４４】
アドレス管理部１４は論理アドレスＬＢＡｉから変換された物理アドレスＰＡ１ｉをドライバ１３ａに渡す。ドライバ１３ａは、アドレス管理部１４から物理アドレスＰＡ１ｉを受け取ると、当該物理アドレスＰＡ１ｉ及び書き込みデータＤ１ｉをＮＡＮＤコントローラ１２に渡す。これによりドライバ１３ａは、ＮＡＮＤフラッシュメモリ１１への書き込みデータＤ１ｉの書き込みを指定する。するとＮＡＮＤコントローラ１２は、ＮＡＮＤフラッシュメモリ１１の物理アドレスＰＡ１ｉの位置に書き込みデータＤ１ｉを書き込む（ステップ４０４ｂ）。このことは、論理アドレスＬＢｉの指定により、ＳＳＤ１０が、書き込みデータＤ１ｉをＮＡＮＤフラッシュメモリ１１の物理アドレスＰＡ１ｉの位置に書き込むことと等価である。ステップ４０４ａ及び４０４ｂは、検証データ生成部２１からの書き込み要求の示すセクタ数Ｓだけ繰り返される。
【００４５】
検証データ生成部２１は、ＳＳＤ１０が書き込み要求を実行し終えると、その旨を検証コントローラ２５に通知する。すると検証コントローラ２５は、前記ステップ４０１〜４０４が再度実行されるように、検証データ生成部２１を制御する（ステップ４０５）。これにより、論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）毎の検証データＤｉ（及び書き込みデータＤ１ｉ）が再び生成される。但し、再生成された検証データＤｉは、前回生成された検証データＤｉと識別子ＩＤｉが異なる。ここでは、再生成された検証データＤｉ中の識別子ＩＤｉは、前回生成された検証データＤｉの識別子ＩＤｉよりも２５６だけ大きい。また、ステップ４０１〜４０５が実行される期間、少なくとも論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）が割り当てられるべき物理アドレスＰＡｉは変更されないことが保証されているものとする。
【００４６】
ステップ４０５において、再生成された論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）毎の検証データＤｉは、書き込みデータメモリ２２の検証データテーブル領域に上書きされる。つまり再生成された検証データＤｉは、対応する論理アドレスＬＢＡｉが設定された論理アドレスフィールド２２１を有する書き込みデータメモリ２２内のエントリに上書きされる。これにより、論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）毎の検証データＤｉ中の識別子ＩＤｉだけが更新される。図７は、このときの書き込みデータメモリ２２の状態を示している。また、ステップ４０５において、再生成された論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）毎の書き込みデータＤｉは、ＮＡＮＤフラッシュメモリ１１内の論理アドレスＬＢＡｉに対応する物理アドレスＰＡｉに書き込まれる。
【００４７】
検証コントローラ２５はステップ４０５が終了すると、書き込みデータ判定部２３を起動して、当該書き込みデータ判定部２３に前記書き込み検証シナリオを提示する。書き込みデータ判定部２３は、検証コントローラ２５の提示する前記書き込み検証シナリオに従い、論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）毎に論理アドレスＬＢＡｉに対応する物理アドレスＰＡ２ｉの指定による特別な読み出し要求をＳＳＤ１０のドライバ１３ｂに発行する。前述したように本実施形態では、論理アドレスＬＢＡｉに対応するデータのＮＡＮＤフラッシュメモリ１１内の記録位置は、少なくともステップ４０１から後述するステップ４０５までの期間、変更されない。このため物理アドレスＰＡ２ｉにはＰＡｉ（ＰＡ２ｉ＝ＰＡｉ）が用いられる。
【００４８】
ドライバ１３ｂは、特別な読み出し要求に従い、指定された物理アドレスＰＡ２ｉ（＝ＰＡｉ）をＮＡＮＤコントローラ１２に渡すことにより、ＮＡＮＤフラッシュメモリ１１からの読み出しを指定する。するとＮＡＮＤコントローラ１２は、ＮＡＮＤフラッシュメモリ１１の物理アドレスＰＡ２ｉ（ここではｉ＝０）の位置からデータ（第２のデータ）Ｄ２ｉを読み出す（ステップ４０６）。読み出されたデータＤ２ｉは、ドライバ１３ｂにより書き込みデータ判定部２３に渡される。
【００４９】
上述したようにステップ４０６の読み出しは、物理アドレスＰＡ２ｉ（＝ＰＡｉ）の指定による特別な読み出し要求に応じて実行される。したがって、この読み出しがアドレス管理部１４の影響を受けるおそれはない。また本実施形態において、特別な読み出し要求を実行するドライバ１３ｂはデバッグ用であり、前述したように正常であることが予め確認されている。このため、ＮＡＮＤフラッシュメモリ１１及びＮＡＮＤコントローラ１２（つまりハードウェア）が正常であれば、データＤ２ｉは、ＮＡＮＤフラッシュメモリ１１の物理アドレスＰＡ２ｉ（ここではｉ＝０）の位置から正しく読み出される。このことは、もしデータＤ２ｉが期待されるデータでないならば、その要因が書き込み時にあることを示唆する。
【００５０】
そこで書き込みデータ判定部２３は、ドライバ１３ｂにより渡されたデータＤ２ｉ（つまり、指定の物理アドレスＰＡ２ｉの位置から読み出されたデータ）の有効部を、書き込みデータメモリ２２に格納されている、論理アドレスＬＢＡｉに対応する検証データＤｉと、対応するフィールド（つまりデータ部分）毎に比較する（ステップ４０７）。検証データＤｉは、ＳＳＤ１０が正常であるならば、ＮＡＮＤフラッシュメモリ１１の物理アドレスＰＡ２ｉ（＝ＰＡｉ）の位置から読み出されることが期待されるデータの有効部に対応する。
【００５１】
書き込みデータ判定部２３は、対応するフィールド毎の比較の結果に基づいて、一致の有無を判定する（ステップ４０８）。もし、論理アドレス、物理アドレス及び識別子のいずれかで不一致が検出された場合（ステップ４０８のＮｏ）、前述の説明から明らかなように、検証データＤｉを含む書き込みデータＤｉの書き込み時の不具合（より詳細には、アドレス管理部１４ののアドレス管理機能の不具合またはドライバ１３ａの書き込み動作の不具合）が疑われる。
【００５２】
ステップ４０８の判定がＮｏの場合、書き込みデータ判定部２３はステップ４０９に進む。即ち、データＤ２ｉの有効部が検証データＤｉに一致しないならば、書き込みデータ判定部２３はステップ４０９に進む。ステップ４０９において、書き込みデータ判定部２３は検証データＤｉが格納されている、書き込みデータメモリ２２内のエントリに不一致箇所を記録する。具体的には書き込みデータ判定部２３は、このエントリのフラグフィールド２２４，２２５及び２２６にそれぞれ設定されているフラグＦ１１，Ｆ１２及びＦ１３のうち、不一致が検出されたフィールドに対応するフラグを“１”に更新する。
【００５３】
書き込みデータ判定部２３は、ステップ４０９を実行するとステップ４１０に進む。また、論理アドレス、物理アドレス及び識別子の全てで一致が検出されたならば（ステップ４０８のＹｅｓ）、書き込みデータ判定部２３はステップ４０９をスキップしてステップ４１０に進む。
【００５４】
ステップ４１０において書き込みデータ判定部２３は、全ての論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）について、データＤ２ｉ及びＤｉを比較したかを判定する。もし、そうでないならば（ステップ４１０のＮｏ）、書き込みデータ判定部２３は、物理アドレスＰＡ２ｉを、次の論理アドレスＬＢＡｉ（ｉ＝ｉ＋１）に対応する物理アドレスに更新して（ステップ４１１）、ステップ４０６に戻る。
【００５５】
このようにして書き込みデータ判定部２３は、全ての論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）について、対応する物理アドレスＰＡ２ｉ（ＰＡ２ｉ＝ＰＡｉ）の指定によるデータＤ２ｉを読み出し、当該データＤ２ｉの有効部をデータＤｉと比較する動作を繰り返す。そして、この繰り返しを終了すると（ステップ４１０のＹｅｓ）、書き込みデータ判定部２３は、書き込みデータメモリ２２内の全エントリのフラグフィールド２２４〜２２６を参照することにより、全て一致が検出されたかを判定する（ステップ５０１）。
【００５６】
もし、少なくとも１箇所で不一致が検出されているならば（ステップ５０１のＮｏ）、書き込みデータ判定部２３は不一致検出を検証コントローラ２５に通知する。すると検証コントローラ２５は、書き込みデータメモリ２２に格納されている全エントリに基づき、検証結果を表示デバイスまたは通信デバイスのような入出力デバイスを通して出力して検証処理を終了する（ステップ５０９）。
【００５７】
ここで、フラグフィールド２２４，２２５及び２２７にそれぞれ設定されているフラグＦ１１，Ｆ１２及びＦ１３の状態とＳＳＤ１０における主要な不具合箇所との関係について説明する。まず、フラグＦ１１が不一致を示す場合、つまり論理アドレスの不一致が検出された場合、アドレス管理部１４によって論理アドレスＬＢＡｉから変換された、書き込み先を示す物理アドレスＰＡ１ｉの不具合が発生したことが疑われる。つまりアドレス管理部１４の不具合のために、アドレス変換テーブル１４０において論理アドレスＬＢＡｉに対応付けられている物理アドレスＰＡ１ｉが正しい物理アドレスＰＡ２ｉ（ＰＡ２ｉ＝ＰＡｉ）でないことが疑われる。同様に、フラグＦ１２が不一致を示す場合、つまり物理アドレスの不一致が検出された場合も、アドレス管理部１４の不具合のために、アドレス変換テーブル１４０において論理アドレスＬＢＡｉに対応付けられている物理アドレスＰＡ１ｉが正しい物理アドレスＰＡ２ｉ（ＰＡ２ｉ＝ＰＡｉ）でないことが疑われる。一方、フラグＦ１３が不一致を示す場合、つまり識別子の不一致が検出された場合、ドライバ１３ａによる書き込み動作の不具合が発生していることが疑われる。本実施形態では、再度の検証データＤｉの生成及び生成された検証データＤｉを含む書き込みデータＤ１ｉの書き込み（つまり検証データの再生成及び再書き込み）が行われる。このため、特にフラグＦ１１及びＦ１２が一致を示している状態でフラグＦ１３が不一致を示す場合、ドライバ１３ａによる書き込み動作の不具合が発生していることが疑われる。
【００５８】
このように本実施形態によれば、書き込みデータＤ１ｉ中に設定された検証データＤｉは、書き込みデータ判定部２３による判定に用いられ、この判定結果を書き込み時におけるＳＳＤ１０の不具合の原因を特定するためのヒントとして利用することができる。なお、Ｆ１１またはＦ１２が不一致を示す場合、検証コントローラ２５は、特別なコマンドを用いてアドレス変換テーブル１４０を参照することも可能である。これにより検証コントローラ２５は、アドレス変換テーブル１４０によって論理アドレスＬＢＡｉに対応付けられている物理アドレスＰＡ１ｉが、期待される物理アドレスＰＡ２ｉ（ＰＡ２ｉ＝ＰＡｉ）であるかを直接確認することができる。
【００５９】
一方、全て一致が検出されたならば（ステップ５０１のＹｅｓ）、一致検出を検証コントローラ２５に通知する。すると検証コントローラ２５は、ＳＳＤ１０のドライバ１３ａの書き込み動作、及びアドレス管理部１４のアドレス管理機能に不具合がないことが確認されたものと判断する。そこで検証コントローラ２５は、ドライバ１３ａの読み出し動作を検証するために読み出しデータ判定部２４を起動して、当該読み出しデータ判定部２４に読み出し検証シナリオを提示する。読み出し検証シナリオは、前記書き込み検証シナリオに対応しており、書き込みデータＤ１ｉ（ｉ＝０，１，２，…，２５５）の書き込み時と同一の論理アドレスＬＢＡｉの指定による読み出し要求の発行を指定する。
【００６０】
読み出しデータ判定部２４は、読み出し検証シナリオに従い、論理アドレス指定による読み出し要求をＳＳＤ１０に発行する（ステップ５０２）。この読み出し要求は、読み出し開始論理アドレスＬＢＡ０と読み出しデータサイズ（セクタ数）Ｓ（Ｓ＝２５６）とを含み、論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）からのデータの読み出しを指定する。
【００６１】
ＳＳＤ１０は、読み出しデータ判定部２４によって発行された論理アドレス指定による読み出し要求を実行する（ステップ５０３）。即ちＳＳＤ１０は、読み出しデータ判定部２４からの読み出し要求に従い、読み出し開始論理アドレスＬＢＡ０から始まる読み出しデータサイズＳの示す論理アドレスＬＢＡｉの範囲に対応する各物理アドレスＰＡ３ｉの位置からデータ（第３のデータ）Ｄ３ｉを読み出す。このデータＤ３ｉの読み出しは次のように実行される。
【００６２】
まずアドレス管理部１４はアドレス変換テーブル１４０を参照することにより、論理アドレスＬＢＡｉ（ここでは、ＬＢＡｉ＝ＬＢＡ０＝０ｘ０、つまり書き込み開始論理アドレスＬＢＡ０）を、当該論理アドレスＬＢＡｉが割り当てられる物理アドレスＰＡ３ｉに変換する（ステップ５０３ａ）。ドライバ１３ａは、アドレス管理部１４によって論理アドレスＬＢＡｉから変換された物理アドレスＰＡ３ｉをＮＡＮＤコントローラ１２に渡すことにより、ＮＡＮＤフラッシュメモリ１１からのデータの読み出しを指定する。するとＮＡＮＤコントローラ１２は、ＮＡＮＤフラッシュメモリ１１の物理アドレスＰＡ３ｉの位置からデータＤ３ｉを読み出す（ステップ５０３ｂ）。このことは、論理アドレスＬＢｉの指定により、ＳＳＤ１０が、ＮＡＮＤフラッシュメモリ１１の物理アドレスＰＡ３ｉの位置からデータＤ３ｉを読み出すことと等価である。読み出されたデータＤ３ｉは、ドライバ１３ａにより読み出しデータ判定部２４に渡される。ステップ５０３ａ及び５０３ｂは、読み出しデータ判定部２４からの読み出し要求の示すセクタ数Ｓだけ繰り返される。つまり、ステップ５０３ａ及び５０３ｂは、論理アドレスＬＢＡ０〜ＬＢＡ２５５の各々について繰り返される。
【００６３】
読み出しデータ判定部２４は、ＳＳＤ１０が論理アドレス指定による読み出し要求を実行し終えると、ドライバ１３ａから渡されたデータＤ３ｉ（ここではｉ＝０）の有効部を、書き込みデータメモリ２２に格納されている、論理アドレスＬＢＡｉに対応する検証データＤｉと、対応するフィールド毎に比較する（ステップ５０４）。
【００６４】
上述のように、前記データＤ３ｉはＮＡＮＤフラッシュメモリ１１内の物理アドレスＰＡ３ｉの位置から読み出されたデータであり、当該物理アドレスＰＡ３ｉは、アドレス管理部１４によって論理アドレスＬＢＡｉから変換された物理アドレスである。検証データＤｉは、ＳＳＤ１０が正常であるならば、ＮＡＮＤフラッシュメモリ１１の物理アドレスＰＡ３ｉの位置から読み出されることが期待されるデータの有効部である。ここでは、物理アドレスＰＡ３ｉがＰＡｉに一致しているかは問わない。ＳＳＤ１０が正常であるにも拘わらずに物理アドレスＰＡ３ｉがＰＡｉに一致しない状態は、物理アドレスＰＡｉの位置のデータが物理アドレスＰＡ３ｉの位置に再配置された場合に発生する。このようなデータ再配置は、コンパクション、ウエアレベリング等の条件が成立する都度、アドレス管理部１４によって自動的に実行される。
【００６５】
読み出しデータ判定部２４は、対応するフィールド毎の比較の結果に基づいて、一致の有無を判定する（ステップ５０５）。もし、論理アドレス、物理アドレス及び識別子のいずれかで不一致が検出されたならば（ステップ５０５のＮｏ）、読み出しデータ判定部２４はステップ５０６に進む。即ち、データＤ３ｉの有効部が期待される検証データＤｉに一致しないならば、読み出しデータ判定部２４はステップ５０６に進む。
【００６６】
ステップ５０６において、読み出しデータ判定部２４は検証データＤｉが格納されている、書き込みデータメモリ２２内のエントリに不一致箇所を記録する。具体的には読み出しデータ判定部２４は、このエントリのフラグフィールド２２７，２２８及び２２９にそれぞれ設定されているフラグＦ２１，Ｆ２２及びＦ２３のうち、不一致が検出されたフィールドに対応するフラグを“１”に更新する。
【００６７】
読み出しデータ判定部２４は、ステップ５０６を実行するとステップ５０７に進む。また、論理アドレス、物理アドレス及び識別子の全てで一致が検出されたならば（ステップ５０５のＹｅｓ）、書き込みデータ判定部２３はステップ５０６をスキップしてステップ５０７に進む。
【００６８】
ステップ５０７において読み出しデータ判定部２４は、全ての論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）について、データＤ３ｉ及びＤｉを比較したかを判定する。もし、そうでないならば（ステップ５０７のＮｏ）、読み出しデータ判定部２４は、ドライバ１３ａから渡された次のデータＤ３ｉ（ｉ＝ｉ＋１）を指定して（ステップ５０８）、ステップ５０４に戻る。
【００６９】
このようにして読み出しデータ判定部２４は、論理アドレス指定による読み出し要求に応じてＳＳＤ１０から読み出される、論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）の指定するデータＤ３ｉの有効部を、当該論理アドレスＬＢＡｉに対応するデータＤｉと比較する動作を繰り返す。そして、この繰り返しを終了すると（ステップ５０７のＹｅｓ）、読み出しデータ判定部２４は、その旨を検証コントローラ２５に通知する。
【００７０】
すると検証コントローラ２５は、書き込みデータメモリ２２に格納されている全エントリに基づき、前記入出力デバイスを通して出力して検証処理を終了する（ステップ５０９）。この検証結果は、少なくとも不一致を示すフラグを含む検証データエントリの群を備えていればよい。なお、検証データエントリが、フラグフィールド２２４〜２２９を含まない構成を適用してもよい。この場合、例えば不一致が検出された検証データが保持されている検証データエントリまたは当該検証データエントリ中の論理アドレスに対応付けて、フラグフィールド２２４〜２２９から構成されるデータを書き込みデータメモリ２２に格納すればよい。このようにすると、検証結果を示すデータの量を削減できる。
【００７１】
前述したように本実施形態では、読み出しデータ判定部２４は、検証コントローラ２５による判定でアドレス管理部１４のアドレス管理機能（及びドライバ１３ａの書き込み動作）が正常であると確認された場合に起動される。このため読み出しデータ判定部２４による判定で、フラグフィールド２２７及び２２８にそれぞれ設定されているフラグＦ２１及びＦ２２が不一致を示す可能性は極めて低い。これに対し、読み出しデータ判定部２４が起動された時点では、ドライバ１３ａの読み出し動作は検証されていない。このため、フラグフィールド２２９に設定されているフラグＦ２３が不一致を示す可能性はある。もし、フラグＦ２３が不一致を示す場合、つまり識別子の不一致が検出された場合、ドライバ１３ａによる読み出し動作の不具合が発生している可能性が高い。
【００７２】
以上のことから、本実施形態によれば、アドレス管理部１４のアドレス管理機能及びドライバ１３ａの書き込み動作が保証されている状態で、読み出しデータ判定部２４によりドライバ１３ａの読み出し動作を検証できる。つまり本実施形態によれば、書き込みデータＤ１ｉ中に設定された検証データＤｉは、読み出しデータ判定部２４による判定にも用いられ、この判定結果を読み出し時におけるＳＳＤ１０の不具合の原因を特定するためのヒントとして利用することができる。このように本実施形態によれば、書き込み時、読み出し時それぞれの時点でＳＳＤ１０の不具合が発生したことを検出することができるため、不具合の発生時点により近い位置から不具合原因の解析を開始することができる。
【００７３】
なお、前記実施形態では、ＳＳＤ１０が論理アドレス指定による読み出し要求を実行し終えた後に、読み出しデータ判定部２４による比較・判定が開始される。しかし、ＳＳＤ１０による読み出し要求の実行と並行して、読み出しデータ判定部２４による比較・判定が実行されてもよい。
【００７４】
また前記実施形態では、全ての論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）について検証データＤｉの生成及び生成された検証データＤｉを含む書き込みデータＤ１ｉの書き込みが終了した後、再度全ての論理アドレスＬＢＡｉについて検証データＤｉの生成及び生成された検証データＤｉを含む書き込みデータＤ１ｉの書き込みが行われる。しかし、１論理アドレスＬＢＡｉずつ、検証データＤｉの生成及び生成された検証データＤｉを含む書き込みデータＤ１ｉの書き込みと再度の検証データＤｉの生成及び生成された検証データＤｉを含む書き込みデータＤ１ｉの書き込みとが実行されても構わない。また、検証データの再生成及び再書き込みは必ずしも必要ない。但し、検証データの再生成及び再書き込みを適用する方が、書き込み動作の検証精度が高くなる。
【００７５】
また、論理アドレスＬＢＡｉ毎の書き込みデータＤ１ｉの書き込みの後に、例えば書き込み検証シナリオに従う検証コントローラ２５からＳＳＤ１０への指示（例えばフラッシュコマンドの発行）により、当該ＳＳＤ１０において論理アドレスＬＢＡｉ（ｉ＝０，１，２，…，２５５）に対応する物理アドレスのデータの所定の物理アドレスへの配置換えが行われるようにしてもよい。例えば、論理アドレスＬＢＡ０（ｉ＝０，ＬＢＡ０＝０ｘ０）に対応する物理アドレスＰＡ０が０ｘＡ（０ｘＡ＝０ｘ１０００）であるものとする。この場合、ＮＡＮＤフラッシュメモリ１１内の物理アドレス０ｘＡの位置のデータが、当該ＮＡＮＤフラッシュメモリ１１内の別の物理アドレス、例えば０ｘＣの位置に再配置されてもよい。これにより、アドレス管理部１４のアドレス管理機能をより高精度に検証できる。
【００７６】
上述のデータ再配置（つまり、物理アドレス０ｘＡから物理アドレス０ｘＣへのデータの再配置）に際し、論理アドレスＬＢＡ０（０ｘ０）が設定された論理アドレスフィールド１４１を有するアドレス変換テーブル１４０内のエントリの物理アドレスフィールド１４２の内容が、０ｘＡから０ｘＣに更新される。つまり、論理アドレス０ｘ０が割り当てられる物理アドレスが０ｘＡから０ｘＣに変更される。
【００７７】
この場合、書き込みデータ判定部２３はデータ再配置の後に、論理アドレス０ｘ０に対応するデータの読み出しのために、前記実施形態と異なって、物理アドレス０ｘＣの指定による読み出し要求をＳＳＤ１０に発行すればよい。これにより、アドレス管理部１４のデータ再配置を含むアドレス管理機能をより高精度に検証できる。明らかなように、データ再配置が正常に行われているならば、物理アドレス０ｘＣの位置から論理アドレス０ｘ０に対応するデータ、つまり論理アドレス０ｘ０、物理アドレス０ｘＡ及び識別子２５６を含むデータが読み出されることが期待される。
【００７８】
また前記実施形態では、検証データＤｉは、論理アドレスＬＢＡｉ、当該論理アドレスＬＢＡｉが割り当てられた物理アドレスＰＡｉ及び一意な識別子ＩＤｉを含む。しかし、検証データＤｉが必ずしも論理アドレスＬＢＡｉ及び物理アドレスＰＡｉを含んでいる必要はない。例えば、データの書き込み時と読み出し時のいずれで不具合が発生しているかを検証するだけでよいならば、検証データＤｉが少なくとも一意な識別子ＩＤｉを含んでいればよい。つまり検証データが一意であればよい。この場合、書き込みデータメモリ２２の記憶容量を小さくできる。
【００７９】
以上説明した少なくとも１つの実施形態によれば、書き込みから読み出しまでのどの時点で不具合が発生しているかを特定できる半導体記憶装置を検証する装置及び方法を提供することができる。
【００８０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８１】
１０…ＳＳＤ（半導体記憶装置）、１１…ＮＡＮＤフラッシュメモリ（書き換え可能な不揮発性メモリ）、１２…ＮＡＮＤコントローラ、１３ａ，１３ｂ…ドライバ、１４…アドレス管理部、２０…検証装置、２１…検証データ生成部、２２…書き込みデータメモリ、２３…書き込みデータ判定部、２４…読み出しデータ判定部、２５…検証コントローラ、１４０…アドレス変換テーブル、２１０…カウンタ。
【図１】
2013196605.tif 000003
【図２】
2013196605.tif 000004
【図３】
2013196605.tif 000005
【図４】
2013196605.tif 000006
【図５】
2013196605.tif 000007
【図６】
2013196605.tif 000008
【図７】
2013196605.tif 000009