(57)【特許請求の範囲】
【請求項１】
ＮＡＮＤ型フラッシュメモリにより構成され、ユーザ用データを格納するためのデータ用記憶部と、
ＮＡＮＤ型フラッシュメモリと種類の相違する不揮発性メモリにより構成される符号用記憶部と、
前記ユーザ用データに対応する第１次のエラー訂正用符号を生成し、前記第１次のエラー訂正用符号を前記データ用記憶部に書き込むエラー検出訂正部と
を備え、
前記符号用記憶部は、
前記第１次のエラー訂正用符号に対応する第２次のエラー訂正用符号を格納し得る構成である、記憶装置。
【請求項２】
請求項１に記載の記憶装置であって、
前記エラー検出訂正部は、
前記第１次のエラー訂正用符号に対応する第２次のエラー訂正用符号を生成し、前記第２次のエラー訂正用符号を前記符号用記憶部に書き込む構成をさらに備える、記憶装置。
【請求項３】
請求項１または２に記載の記憶装置であって、
前記ＮＡＮＤ型フラッシュメモリは、追記可能な構成である、記憶装置。
【請求項４】
請求項１または２に記載の記憶装置であって、
前記ＮＡＮＤ型フラッシュメモリは、追記不可能な構成である、記憶装置。
【請求項５】
請求項１ないし４のいずれかに記載の記憶装置であって、
前記符号用記憶部は、ＯＴＰ（ワンタイム・プログラマブル）メモリである、記憶装置。
【請求項６】
請求項１ないし４のいずれかに記載の記憶装置であって、
前記符号用記憶部は、前記データ用記憶部よりデータ保持能力が高いメモリにより構成された、記憶装置。
【請求項７】
コンピュータ装置であって、
該コンピュータ装置に接続された請求項１に記載の記憶装置の前記データ用記憶部から、前記第１次のエラー訂正用符号を受信する入力制御部と、
前記第１次のエラー訂正用符号に対応する第２次のエラー訂正用符号を生成するエラー訂正用符号生成制御部と、
前記第２次のエラー訂正用符号を前記記憶装置に送信する出力制御部と
を備える、コンピュータ装置。
【請求項８】
コンピュータの制御方法であって、
前記コンピュータに接続された請求項１に記載の記憶装置の前記データ用記憶部から、前記第１次のエラー訂正用符号を受信することを、前記コンピュータに実行させ、
前記第１次のエラー訂正用符号に対応する第２次のエラー訂正用符号を生成することを、前記コンピュータに実行させ、
前記第２次のエラー訂正用符号を前記記憶装置に送信することを、前記コンピュータに実行させる、コンピュータの制御方法。
【請求項９】
コンピュータを制御するためのコンピュータプログラムであって、
前記コンピュータに接続された請求項１に記載の記憶装置の前記データ用記憶部から、前記第１次のエラー訂正用符号を受信する機能と、
前記第１次のエラー訂正用符号に対応する第２次のエラー訂正用符号を生成する機能と、
前記第２次のエラー訂正用符号を前記記憶装置に送信する機能と
を前記コンピュータに実現させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＮＡＮＤ型フラッシュメモリを備える記憶装置、前記記憶装置が接続されるコンピュータ装置、コンピュータの制御方法、およびコンピュータプログラムに関する。
【背景技術】
【０００２】
近年、ハードディスク装置に代替して、大容量のフラッシュメモリを備えたストレージデバイスが知られており、とりわけ、容量当たりの価格が低いＮＡＮＤ型フラッシュメモリを備えるストレージデバイスが種々提案されている（例えば特許文献１）。
【０００３】
しかしながら、ＮＡＮＤ型フラッシュメモリには、データの保持期間に制限があり、大容量化に伴って加工技術が微細化すればするほど、データの保持期間が短くなるという問題があった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４３７７９５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記問題を考慮し、本発明が解決しようとする課題は、データの保持期間を長くすることにある。
【課題を解決するための手段】
【０００６】
本発明は、上述の課題の少なくとも一部を解決するためになされたものであり、以下の形態又は適用例として実現することが可能である。
【０００７】
［適用例１］  ＮＡＮＤ型フラッシュメモリにより構成され、ユーザ用データを格納するためのデータ用記憶部と、
ＮＡＮＤ型フラッシュメモリと種類の相違する不揮発性メモリにより構成され、前記ユーザ用データに対応するエラー訂正用符号を格納するための符号用記憶部と
を備える記憶装置。
【０００８】
適用例１に係る記憶装置では、データ記憶部と符号用記憶部が設けられ、符号用記憶部は、データ用記憶部を構成するＮＡＮＤ型フラッシュメモリと種類の相違する不揮発性メモリによって構成される。この不揮発性メモリがＮＡＮＤ型フラッシュメモリよりデータの保持能力が高いものであるならば、データ記憶部よりも符号用記憶部はデータ保持期間が長いものとなる。実際、ＮＡＮＤ型フラッシュメモリは、データのＲｅａｄ処理が行われる度に高電圧（１０〜２０Ｖ）を必要とすることから、Ｒｅａｄ処理が一定回数以上行われる度に、メモリセル内の電子が減少し、データが保持できなくなるのに対して、Ｖ−ＥＰＲＯＭ、ＭＲＡＭ等の不揮発性メモリは、ＲＥＡＤ処理において、高電圧を必要としないことから、ＮＡＮＤ型フラッシュメモリよりもデータ保持ができなくなるまでの期間が長くなる。データ記憶部内のデータが破壊された場合、符号用記憶部に記憶されたエラー訂正用符号によりその破壊されたデータを高い確率で訂正することができるが、前記記憶装置では、上記のように記号用記憶部のデータ保持期間が長いことから、結果として、装置全体としても、データの保持期間が長くなる。
【０００９】
［適用例２］  適用例１に記載の記憶装置であって、前記ユーザ用データに対応する第１次のエラー訂正用符号を生成し、前記第１次のエラー訂正用符号を前記データ用記憶部に書き込むエラー検出訂正部を備え、前記符号用記憶部は、前記ユーザ用データに対応するエラー訂正用符号として、前記第１次のエラー訂正用符号に対応する第２次のエラー訂正用符号を格納し得る構成である、記憶装置。
【００１０】
この構成によれば、ユーザ用データに対応するエラー訂正用符号をデータ記憶部に書き込む既存の装置をそのまま用いて、記憶装置を構成することができる。
【００１１】
［適用例３］  適用例２に記載の記憶装置であって、前記エラー検出訂正部は、前記第１次のエラー訂正用符号に対応する第２次のエラー訂正用符号を生成し、前記第２次のエラー訂正用符号を前記符号用記憶部に書き込む構成をさらに備える、記憶装置。
【００１２】
この構成によれば、第１次のエラー訂正用符号はデータ用記憶部に、第２次のエラー訂正用符号は符号用記憶部に記憶される。このために、第２次のエラー訂正用符号から第１次のエラー訂正用符号を訂正し、第１次のエラー訂正用符号からユーザ用データを訂正することが高い確率で可能となる。
【００１３】
［適用例４］  適用例１ないし３のいずれかに記載の記憶装置であって、前記ＮＡＮＤ型フラッシュメモリは、追記可能な構成である、記憶装置。この構成であれば、ＮＡＮＤ型フラッシュメモリに追記が可能となる。
【００１４】
［適用例５］  適用例１ないし３のいずれかに記載の記憶装置であって、前記ＮＡＮＤ型フラッシュメモリは、追記不可能な構成である、記憶装置。この構成であれば、ＮＡＮＤ型フラッシュメモリをリードオンリーモードで使用することが可能となる。
【００１５】
［適用例６］  適用例１ないし５のいずれかに記載の記憶装置であって、前記符号用記憶部は、ＯＴＰ（ワンタイム・プログラマブル）メモリである、記憶装置。ＯＴＰメモリは、データの書き込みが１回に制限されていることから、データ保持期間が極めて長い。したがって、前記記憶装置によれば、データの保持期間を飛躍的に長くすることができる。
【００１６】
［適用例７］  適用例１ないし５のいずれかに記載の記憶装置であって、前記符号用記憶部は、前記データ用記憶部よりデータ保持能力が高いメモリにより構成された、記憶装置。この構成であれば、データの保持期間を確実に長くすることができる。
【００１７】
［適用例８］  コンピュータ装置であって、
該コンピュータ装置に接続された請求項２に記載の記憶装置の前記データ用記憶部から、前記第１次のエラー訂正用符号を受信する入力制御部と、
前記第１次のエラー訂正用符号に対応する第２次のエラー訂正用符号を生成するエラー訂正用符号生成制御部と、
前記第２次のエラー訂正用符号を前記記憶装置に送信する出力制御部と
を備える、コンピュータ装置。
【００１８】
適用例８に係るコンピュータ装置では、第１次のエラー訂正用符号を記憶装置のデータ用記憶部に、第２次のエラー訂正用符号を記憶装置の符号用記憶部に記憶させることができる。記憶装置においては、データ記憶部よりも符号用記憶部はデータ保持期間が長いものとなっていることから、データ記憶部内のデータが破壊された場合、符号用記憶部に記憶されたエラー訂正用符号によりその破壊されたデータを高い確率で訂正することができる。このために、記憶装置におけるデータの保持期間を長くすることができる。
【００１９】
［適用例９］  コンピュータの制御方法であって、
前記コンピュータに接続された請求項２に記載の記憶装置の前記データ用記憶部から、前記第１次のエラー訂正用符号を受信することを、前記コンピュータに実行させ、
前記第１次のエラー訂正用符号に対応する第２次のエラー訂正用符号を生成することを、前記コンピュータに実行させ、
前記第２次のエラー訂正用符号を前記記憶装置に送信することを、前記コンピュータに実行させる、コンピュータの制御方法。
【００２０】
［適用例１０］  コンピュータを制御するためのコンピュータプログラムであって、
前記コンピュータに接続された請求項２に記載の記憶装置の前記データ用記憶部から、前記第１次のエラー訂正用符号を受信する機能と、
前記第１次のエラー訂正用符号に対応する第２次のエラー訂正用符号を生成する機能と、
前記第２次のエラー訂正用符号を前記記憶装置に送信する機能と
を前記コンピュータに実現させるコンピュータプログラム。
【００２１】
適用例９に係るコンピュータ装置の制御方法および適用例１０に係るコンピュータプログラムによれば、適用例８に係るコンピュータ装置と同様に、記憶装置におけるデータの保持期間を長くすることができる。
【００２２】
さらに、本発明は、前記適用例１ないし１０以外の種々の形態で実現可能であり、例えば、適用例１に係る記憶装置と適用例８に係るコンピュータ装置とを併せ持つコンピュータシステムとしての形態、適用例１０に係るコンピュータプログラムを記録した記録媒体、そのコンピュータプログラムを含み搬送波内に具現化されたデータ信号、等の形態でとしての形態等で実現することが可能である。記録媒体としては、例えば、磁気ディスクや光ディスク、メモリカード、ハードディスク等の種々の媒体を利用することができる。
【図面の簡単な説明】
【００２３】
【図１】本発明の第１実施例としてのコンピュータシステムの概略構成を示す説明図である。
【図２】初期化処理を示すフローチャートである。
【図３】ＥＣＣについての説明図である。
【図４】ＵＳＢメモリデバイス１００で実行されるデータ読出処理の前半部分を示すフローチャートである。
【図５】ＵＳＢメモリデバイス１００で実行されるデータ読出処理の後半部分を示すフローチャートである。
【図６】第２実施例における初期化処理を示すフローチャートである。
【発明を実施するための形態】
【００２４】
以下、本発明の実施の形態を実施例に基づき説明する。
Ａ．第１実施例：
Ａ−１．ハードウェアの構成：
図１は、本発明の第１実施例としてのコンピュータシステムの概略構成を示す説明図である。図示するように、コンピュータシステムは、パーソナルコンピュータなどのホスト１０と、ホスト１０に接続されるＵＳＢメモリデバイス１００とを備える。ＵＳＢメモリデバイス１００が適用例１に記載の「記憶装置」に該当する。
【００２５】
ホスト１０は、中央演算処理装置としてのＣＰＵ１１を中心にバス１２により相互に接続されたメモリ１３、ホストコントローラ１５、ルートハブ１６、ハードディスクドライブ（ＨＤＤ）１７、ディスプレイコントローラ１８等を備える。また、ホスト１０は、ディスプレイ２０や、入力装置としてのマウスおよびキーボード（図示せず）が接続されている。
【００２６】
メモリ１３は、各種データや各種プログラム等を記憶し、ＣＰＵ１１の作業領域となる。ホストコントローラ１５はＵＳＢインタフェースユニットであり、このホストコントローラ１５にルートハブ１６が一体化されている。ルートハブ１６は複数のポート１６Ｐを備える。ＨＤＤ１７は、内蔵タイプのものであり、コンピュータプログラム（以下、単に「プログラム」と呼ぶ）等が格納されている。ディスプレイコントローラ１８は、ディスプレイ２０への信号出力を制御するコントローラである。
【００２７】
ＵＳＢメモリデバイス１００は、ホスト１０に接続されて使用される二次記憶装置であり、スティック型のものである。ＵＳＢメモリデバイス１００は、外部への接続部として、ＵＳＢポート１１０を備え、このＵＳＢポート１１０がルートハブ１６のいずれかのポート１６Ｐに差し込まれることで、ホスト１０に接続される。
【００２８】
ＵＳＢメモリデバイス１００は、コントローラ１２０と、ユーザ用のデータを格納するためのＮＡＮＤ型フラッシュメモリ１３０と、エラー訂正用符号(以下、「ＥＣＣ：Error Correcting Code」と呼ぶ)を格納するためのＯＴＰ（ワンタイム・プログラマブル）メモリ１４０とを備える。
【００２９】
コントローラ１２０は、ホスト１０からコマンドを受け取るＵＳＢインターフェース１２１と、ＮＡＮＤ型フラッシュメモリ１３０やＯＴＰメモリ１４０に対して所定のコマンドプロトコルに従ってコマンドを発行するメモリインターフェース１２２と、制御処理を行うプロセッサ１２３と、ＵＳＢインターフェース１２１とプロセッサ１２３とに接続されるバッファ１２４とを備える。
【００３０】
プロセッサ１２３は、その制御プログラムであるファームウェア（図示せず）を有する。プロセッサ１２３は、ホスト１０からライト（Ｗｒｉｔｅ）コマンドを受け取ると、ファームウェアによってＮＡＮＤ型フラッシュメモリ１３０へのデータの書き込みを実行し、ホスト１０からリード（Ｒｅａｄ）コマンドを受け取ると、ファームウェアによってＮＡＮＤ型フラッシュメモリ１３０からのデータの読み出しを実行する。また、プロセッサ１２３は、ＮＡＮＤ型フラッシュメモリ１３０へのデータの書き込み時に、ファームウェア(ハードウェアでも可)によってエラー検出訂正処理を実行し、エラー検出訂正処理によって得られたＥＣＣを、ＮＡＮＤ型フラッシュメモリ１３０もしくはＯＴＰメモリ１４０に書き込む。
【００３１】
ＮＡＮＤ型フラッシュメモリ１３０は、不揮発性の半導体メモリの一種で、本実施例では、追記可能なものが用いられている。また、ＮＡＮＤ型フラッシュメモリ１３０は、前述したように、ユーザ用データを格納するためのもので、大容量（例えば、３２ギガビット）である。これに対して、ＯＴＰメモリ１４０は、１回だけ書き込み可能な不揮発性メモリで、比較的、小容量（例えば、１〜２ギガビット）である。ＯＴＰメモリ１４０は、ＥＰＲＯＭ（ＵＶ−ＥＰＲＯＭ，ＥＥＰＲＯＭ）タイプ、ゲート酸化膜破壊タイプ、eフューズタイプ等、種々のものを採用可能であるが、本実施例では、ＥＥＰＲＯＭタイプのものが採用されている。
【００３２】
Ａ−２．ソフトウェアおよびファームウェアの構成：
本実施例で用いられているＵＳＢメモリデバイス１００は、データ保持期間を高めるために、リードオンリーモードとして使用するようにしている。すなわち、ＵＳＢメモリデバイス１００は、初期化処理で、データの書き込みを行った上でリードオンリーモードへの移行を行い、以後、データの書き込みを禁止し、データの読み出ししかできないようにしている。こうした初期化処理とデータ読出処理について、以下に詳述する。
【００３３】
・初期化処理：
図２は、初期化処理を示すフローチャートである。図２（Ａ）はホスト１０のＣＰＵ１１で実行されるホスト側初期化処理であり、図２（Ｂ）はＵＳＢメモリデバイス１００のプロセッサ１２３で実行されるデバイス側初期化処理である。ホスト１０は、初期化処理を実行する旨の指示をキーボードから受けたときに、所定のプログラムをＨＤＤ１７からロードして実行することで、ホスト側初期化処理を行う。
【００３４】
図２（Ａ）に示すように、ホスト側初期化処理が実行開始されると、ホスト１０のＣＰＵ１１は、ＵＳＢメモリデバイス１００に対してライト（Ｗｒｉｔｅ）コマンドを発行する（ステップＳ１１０）。
【００３５】
ＵＳＢメモリデバイス１００のプロセッサ１２３は、ＵＳＢメモリデバイス１００に対するライトコマンドが発行されたことを検知したときに、自身のファームウェアに従ってデバイス側初期化処理を実行する。
【００３６】
図２（Ｂ）に示すように、デバイス側初期化処理が実行開始されると、プロセッサ１２３は、まず、ホスト１０側から送られてくるライトコマンドを受け取る（ステップＳ２１０）。次いでプロセッサ１２３は、ライトコマンドに記録されたデータ（以下、「書込データ」と呼ぶ）と、書込データから作成したＥＣＣ（以下、「ＥＣＣ＿Ａ」と呼ぶ）とを、ＮＡＮＤ型フラッシュメモリ１３０に書き込む処理を行う（ステップＳ２２０）。ステップＳ２２０の処理は、詳しくは次の（ｉ）（ii）の通り行う。
【００３７】
（ｉ）まず、書込データから一定サイズ毎にデータ（区分データ）を読み出して、区分データ毎にエラー検出訂正処理を実行しＥＣＣ＿Ａを得る。
（ii）次に、書込データと各ＥＣＣ＿ＡをＮＡＮＤ型フラッシュメモリ１３０に書き込む。
【００３８】
図３は、ＥＣＣについての説明図である。上記（ｉ）の処理によれば、図３（ａ）に示すように、書込データＤＴが一定サイズ毎に区分けされ、図３（ｂ）に示すように、区分データＤＴａ毎にＥＣＣ＿Ａが作成されることになる。実際には、各区分データは、記憶領域（ＮＡＮＤ領域）の物理アドレスもしくは論理アドレス上で一定の間隔毎に存在するように格納され、各ＥＣＣ＿Ａは、エラー検出訂正処理の実行先である各区分データの後ろに連続して存在するように格納される。これにより、エラー検出訂正の対象がいずれの区分データであるかを、各ＥＣＣ＿Ａから辿ることができる。ＥＣＣを作成するエラー検出訂正処理についてのアルゴリズムについては、周知の構成であることから、ここでは説明を省略する。
【００３９】
図２に戻って、ステップＳ２２０の実行後、プロセッサ１２３は、ＥＣＣ＿ＡからＥＣＣ（以下、「ＥＣＣ＿Ｂ」と呼ぶ）を作成し、ＥＣＣ＿ＢをＯＴＰメモリ１４０に書き込む処理を行う（ステップＳ２３０）。ステップＳ２３０の処理は、詳しくは次の（iii）（iv）の通り行う。
【００４０】
（iii）まず、ＥＣＣ＿Ａを所定の数毎、集め、各集合に対してエラー検出訂正処理を実行し、ＥＣＣ＿Ｂを得る。
（iv）次に、各ＥＣＣ＿ＢをＯＴＰメモリ１４０に書き込む。
【００４１】
上記（iii）の処理によれば、図３においては（ｂ）から（ｃ）に処理がなされることになる。なお、各ＥＣＣ＿Ｂは、エラー検出訂正の対象がいずれのＥＣＣ＿Ａであるかがわかる必要がある。このために、ＥＣＣ＿ＡとＥＣＣ＿Ｂと対応関係を表す対応テーブルが、コントローラ１２０内のＮＡＮＤ記憶領域（図示せず）に記憶される。この対応テーブルを利用することで、エラー検出訂正の対象がいずれのＥＣＣ＿Ａであるかを、各ＥＣＣ＿Ｂから辿ることができる。
【００４２】
また、後述のステップＳ３９４でデータリフレッシュが実行された際にも、書込みデータの各区分単位で物理アドレスもしくは論理アドレスを移動し、移動に応じた論理アドレスはコントローラ１２０内のＮＡＮＤのテーブルに記録が行われるように構成する。これにより、データ参照に不具合が生じることがない。前記テーブルは、ＮＡＮＤ型フラッシュメモリ１３０に記録する構成としてもよい。
【００４３】
なお、各データのサイズは、一例として次の通りである。区分データＤＴａが３２ギガビットに対し、ＥＣＣ＿Ａは１７９２メガビット、ＥＣＣ＿Ｂは１２８メガビットとなる。
【００４４】
プロセッサ１２３は、ステップＳ２３０の実行後、ライトコマンドに従う書き込みが完了した旨を、ホスト１０に対して通知する（ステップＳ２３５）。
【００４５】
図２（Ａ）に示すように、ホスト１０のＣＰＵ１１は、ＵＳＢメモリデバイス１００からの前記書込完了の通知を受け取り（ステップＳ１１５）、その後、リードオンリーモード（Ｒｅａｄ Ｏｎｌｙ Ｍｏｄｅ）コマンドをＵＳＢメモリデバイス１００に発行する（ステップＳ１２０）。ステップＳ１２０の実行後、ＣＰＵ１１は、ホスト側初期化処理を終了する。
【００４６】
ＵＳＢメモリデバイス１００のプロセッサ１２３は、ステップＳ２３０の実行後、ホスト１０からリードオンリーモードコマンドを受け取ると、以後、自身を、データの書き込みを禁止してデータの読み出ししかできない状態（リードオンリーモード）に移行する（ステップＳ２４０）。ステップＳ２４０の実行後、プロセッサ１２３は、デバイス側初期化処理を終了する。
【００４７】
デバイス側初期化処理の結果、ＵＳＢメモリデバイス１００内のＮＡＮＤ型フラッシュメモリ１３０には、ライトコマンドに記録された書込データＤＴと、第１次のエラー訂正用符号であるＥＣＣ＿Ａとが格納されることになる。一方、ＵＳＢメモリデバイス１００内のＯＴＰメモリ１４０には、第２次のエラー訂正用符号であるＥＣＣ＿Ｂが格納されることになる。
【００４８】
・データ読出処理：
ホスト１０において、ＵＳＢメモリデバイス１００に対してリード（Ｒｅａｄ）コマンドの発行がなされると、ＵＳＢメモリデバイス１００は、自身に対するリードコマンドが発行されたことを検知して、次に示すデータ読出処理を実行する。
【００４９】
図４および図５は、ＵＳＢメモリデバイス１００で実行されるデータ読出処理を示すフローチャートである。このデータ読出処理は、ＵＳＢメモリデバイス１００のプロセッサ１２３で自身のファームウェアに従って実行される処理で、ホスト１０からリードコマンドを受け取ったときに実行開始される。
【００５０】
処理が開始されると、図４に示すように、プロセッサ１２３は、まず、ホスト１０側から送られてくるリードコマンドを受け取る（ステップＳ３００）。次いで、プロセッサ１２３は、ＮＡＮＤ型フラッシュメモリ１３０から、リードコマンドにより指定された読出対象データを含む区分データ（以下、「対象区分データ」と呼ぶ）を読み出し、対象区分データにエラー検出訂正処理を実行しＥＣＣ（以下、「ＥＣＣ＿Ｘ」と呼ぶ）を得る（ステップＳ３１０）。次いで、プロセッサ１２３は、対象区分データに対応するＥＣＣ＿ＡとＥＣＣ＿ＢをＮＡＮＤ型フラッシュメモリ１３０から読み出す（ステップＳ３２０）。
【００５１】
ステップＳ３２０の実行後、プロセッサ１２３は、図５のステップＳ３３０に処理を進めて、ステップＳ３２０の読み出しにより得られたＥＣＣ＿Ａと、ステップＳ３１０で得られたＥＣＣ＿Ｘとを比較する。ここで、両者が一致すると判定された場合には、プロセッサ１２３は、ステップＳ４００に処理を進めて、ステップＳ３１０で読み出した対象区分データの中から読出対象データを抽出し、その抽出した読出対象データをホスト１０に転送する。すなわち、ステップＳ３２０でＥＣＣ＿ＡとＥＣＣ＿Ｘとが一致すると判定された場合には、対象区分データにビット化けがない（すなわち、誤りがない）として、対象区分データに含まれる読出対象データをホスト１０に転送する。ステップＳ４００の実行後、「リターン」に抜けて、このデータ読出処理を一旦終了する。
【００５２】
一方、ステップＳ３３０でＥＣＣ＿ＡとＥＣＣ＿Ｘとが一致しないと判定された場合には、プロセッサ１２３は、ステップＳ３４０に処理を移行する。ステップＳ３４０では、ステップＳ３２０で読み出したＥＣＣ＿Ａにエラー検出訂正処理を実行しＥＣＣ（以下、「ＥＣＣ＿ａ」と呼ぶ）を得る。
【００５３】
ステップＳ３４０の実行後、プロセッサ１２３は、ステップＳ３２０の読み出しにより得られたＥＣＣ＿Ｂと、ステップＳ３４０で得られたＥＣＣ＿ａとを比較する（ステップＳ３５０）。ここで、両者が一致しないと判定された場合には、ステップＳ３２０の読み出しにより得られたＥＣＣ＿Ａ、すなわち、ＮＡＮＤ型フラッシュメモリ１３０内のＥＣＣ＿Ａにビット化けがある（すなわち、誤りがある）として、ステップＳ３６０に処理を進める。
【００５４】
ステップＳ３６０では、ＥＣＣ＿Ｂを用いてＥＣＣ＿Ａを訂正可能か否かを判定する。詳しくは、ＥＣＣ＿Ａに対応したＥＣＣ＿ＢをＯＴＰメモリ１４０から、読み出して、そのＥＣＣ＿ＢでＥＣＣ＿Ａを訂正可能か否かを判定する。エラー検出訂正処理は、エラーが発生したビット数やエラーが発生した位置等から定まる所定条件下でエラー訂正が可能であり、その所定条件を外れた場合には、エラー検出訂正が不可能となる。このため、ステップＳ３６０では、ＥＣＣ＿Ａが前記所定条件を満たしているか否かから、訂正可能か否かを判定する。
【００５５】
ステップＳ３６０で訂正が不可能であると判定されたときには、プロセッサ１２３は、ステップＳ４１０に処理を移行して、リードコマンドに従う読み出しが不能である旨のエラーメッセージをホスト１０に送信する。ステップＳ４１０の実行後、「リターン」に抜けて、このデータ読出処理を一旦終了する。
【００５６】
一方、ステップＳ３６０で訂正が可能であると判定されたときには、プロセッサ１２３は、ステップＳ３７０に処理を移行して、ＯＴＰメモリ１４０から読み出したＥＣＣ＿Ｂを用いてＥＣＣ＿Ａを訂正する。その後、ステップＳ３８０に処理を進める。
【００５７】
また、ステップＳ３５０で、ＥＣＣ＿ＢとＥＣＣ＿ａとが一致したと判定された場合には、ＥＣＣ＿Ｂは正しく、読出対象データにビット化けがある（すなわち、誤りがある）として、ステップＳ３８０に処理を進める。
【００５８】
ステップＳ３８０では、ＥＣＣ＿Ａを用いて読出対象データを訂正可能か否かを判定する。この判定は、ステップＳ３６０と同様のもので、前述した所定条件を満たしているか否かから訂正可能か否かを判定する。
【００５９】
ステップＳ３８０で訂正が不可能であると判定されたときには、プロセッサ１２３は、前述したステップＳ４１０に処理を移行する。この結果、リードコマンドに従う読み出しが不能である旨のエラーメッセージがホスト１０に送信される。
【００６０】
一方、ステップＳ３８０で訂正が可能であると判定されたときには、プロセッサ１２３は、ＥＣＣ＿Ａを用いて、そのＥＣＣ＿Ａに対応した対象区分データを訂正する（ステップＳ３９０）。その後、プロセッサ１２３は、ステップＳ３９０により行なったデータ訂正のビット数が所定値を上回ったか否かを判定する（ステップＳ３９２）。ここで、所定値を上回ったと判定されたデータブロックについては、データをリフレッシュする処理を行う（ステップＳ３９４）。リフレッシュの方法としては、周知の種々のものを採用することができるが、本実施例では、特許文献１に記載のように、リフレッシュ管理テーブルを用いて対象となるブロックを時分割に一括してリフレッシュする。なお、データをリフレッシュした物理ブロックについての積算値は一旦、クリアする。
【００６１】
ステップＳ３９４の実行後、プロセッサ１２３は、前述したステップＳ４００に処理を移行する。また、ステップＳ３９２でデータ訂正ビット数の積算結果が所定値以下であると判定された場合にも、プロセッサ１２３は、ステップＳ４００に処理を移行する。ステップＳ４００では、訂正後の対象区分データのから前記読出対象データを抽出し、その抽出した読出対象データをホスト１０に送信する。
【００６２】
以上で説明した第１実施例のコンピュータシステムにおけるＵＳＢメモリデバイス１００では、ユーザ用データを格納するためのＮＡＮＤ型フラッシュメモリ１３０と、ＥＣＣを格納するためのＯＴＰメモリ１４０とが設けられている。ＮＡＮＤ型フラッシュメモリ１３０には、ユーザ用データと共に、ユーザ用データに対応する第１次のエラー訂正用符号としてのＥＣＣ＿Ａが記憶される。ＯＴＰメモリ１４０には、ＥＣＣ＿Ａに対応する第２次のエラー訂正用符号としてのＥＣＣ＿Ｂが記憶される。
【００６３】
前記コンピュータシステムでは、ホスト１０がＵＳＢメモリデバイス１００からデータを読み出す際に、ＮＡＮＤ型フラッシュメモリ１３０内の読出対象データが破壊されている（文字化けもしくはビット反転している）場合、ＵＳＢメモリデバイス１００は、ＯＴＰメモリ１４０に記憶されたＥＣＣ＿ＢによりＥＣＣ＿Ａを訂正し、ＥＣＣ＿Ａから読出対象データを訂正することで、その破壊された読出対象データを高い確率で訂正することができる。その上、ＯＴＰメモリ１４０は、データの書き込みが１回に制限されており、データ保持期間が極めて長いことから、長い期間にわたってデータの読み出しが可能となることから、装置としてのデータの保持期間を飛躍的に長くすることができる。
【００６４】
本実施例では、さらに、
（ａ）ＵＳＢメモリデバイス１００において、データの書き込みは初期化処理で行うだけで、それ以後はリードオンリーモードとすること、
（ｂ）ＮＡＮＤ型フラッシュメモリ１３０内のデータ訂正のビット数が多くなったときに、データリフレッシュを行うこと（ステップＳ３９２、Ｓ３９４）、
を併用することによって、データ保持期間をより長くすることを実現している。従来のＮＡＮＤ型フラッシュメモリを備えるストレージデバイスは１年〜１０年のデータ保持期間であるが、本実施例のＵＳＢメモリデバイス１００は数十年〜百年のデータ保持期間となっている。
【００６５】
なお、上記（ａ）、（ｂ）の構成は、本発明に対しては付加的な要素であり、適宜省略可能である。
【００６６】
Ｂ．第２実施例：
本発明の第２実施例について、次に説明する。この第２実施例としてのコンピュータシステムは、第１実施例と比較して、ＥＣＣ＿Ｂを作成する場所が相違する。第１実施例では、ＥＣＣ＿Ａ、ＥＣＣ＿Ｂ共に、ＵＳＢメモリデバイス１００のプロセッサ１２３によるエラー検出訂正処理により作成していたが、これに換えて、第２実施例では、ＥＣＣ＿Ａの作成はＵＳＢメモリデバイス１００側で行い、ＥＣＣ＿Ｂの作成はホスト１０側で行う構成とした。以下、第２実施例の詳細な構成を説明する。なお、各パーツの符号については、第１実施例と同一の番号を付けて説明を行う。
【００６７】
第２実施例では、ＵＳＢメモリデバイス１００のプロセッサ１２３に含まれるエラー検出訂正処理を行うファームウェアと同じ処理内容のソフトウェアが、ホスト１０のＨＤＤ１７にインストールされている。
【００６８】
図６は、第２実施例における初期化処理を示すフローチャートである。図６（Ａ）はホスト１０のＣＰＵ１１で実行されるホスト側初期化処理であり、図６（Ｂ）はＵＳＢメモリデバイス１００のプロセッサ１２３で実行されるデバイス側初期化処理である。ホスト側初期化処理は、第１実施例におけるホスト側初期化処理（図２（Ａ））と比較して、ステップＳ１１０、Ｓ１２０が同一であり、ステップＳ１１０とステップＳ１２０との間のステップＳ５１２ないしＳ５１６の処理が相違する。デバイス側初期化処理は、第１実施例におけるデバイス側初期化処理（図２（Ｂ））と比較して、ステップＳ２１０、Ｓ２２０、Ｓ２４０が同一であり、ステップＳ２２０とステップＳ２４０との間のステップＳ６３０およびステップＳ６３２の処理が相違する。
【００６９】
図６（Ｂ）に示すように、ＵＳＢメモリデバイス１００のプロセッサ１２３は、ステップＳ２２０の実行後、ステップＳ２２０で作成されたＥＣＣ＿Ａを、ＵＳＢインターフェース１２１を介してホスト１０に送信する（ステップＳ６３０）。
【００７０】
図６（Ａ）に示すように、ステップＳ１１０の実行後、ホスト１０のＣＰＵ１１は、ＵＳＢメモリデバイス１００から送られてくるＥＣＣ＿Ａを受信し（ステップＳ５１２）、ＥＣＣ＿ＡからＥＣＣ＿Ｂを作成する（ステップＳ５１４）。この作成は、ＨＤＤ１７にインストールされた前述したエラー検出訂正処理のソフトウェアを用いて行う。その後、ステップＳ５１４で作成されたＥＣＣ＿Ｂを、ホストコントローラ１５を介してＵＳＢメモリデバイス１００に送信する（ステップＳ５１６）。ステップＳ５１６の実行後、ＣＰＵ１１は、ステップＳ１２０に処理を進める。
【００７１】
ＵＳＢメモリデバイス１００のプロセッサ１２３は、ホスト１０から送られてくるＥＣＣ＿ＢをＯＴＰメモリ１４０に書き込む（ステップＳ６３２）。ステップＳ６３２の実行後、プロセッサ１２３は、ステップＳ２０に処理を進める。以上で、初期化処理の説明を終える。なお、本実施例のデータ読出処理については、第１実施例と同一である。
【００７２】
以上で説明した第２実施例の初期化処理によれば、第１実施例と同様に、ＮＡＮＤ型フラッシュメモリ１３０にユーザ用データとＥＣＣ＿Ａが記憶され、ＯＴＰメモリ１４０にＥＣＣ＿Ｂが記憶されることになる。このために、第２実施例におけるＵＳＢメモリデバイス１００は、第１実施例と同様に、装置としてのデータの保持期間を飛躍的に長くするという効果を奏する。
【００７３】
また、この第２実施例では、ＥＣＣ＿Ｂの作成をホスト側で担うように構成されていることから、データ書き込み時のＵＳＢメモリデバイス１００のコントローラ１２０の負担を軽減することができることから、データの書き込み速度の向上を図ることができる。
【００７４】
Ｃ．変形例：
以上、本発明の第１および第２の実施例について説明したが、本発明はこれらの実施例に限定されず、その趣旨を逸脱しない範囲で種々の構成を採ることができる。例えば、ソフトウェアによって実現した機能は、ハードウェアによって実現するものとしてもよい。また、そのほか、以下のような変形が可能である。
【００７５】
・変形例１：
前記各実施例では、ＵＳＢメモリデバイス１００に備えられるＮＡＮＤ型フラッシュメモリ１３０は、追記可能なものとしたが、これに換えて、追記不可能なものとしてもよい。
【００７６】
・変形例２：
前記各実施例では、ＵＳＢメモリデバイス１００に備えられる符号用記憶部は、ＯＴＰメモリ１４０により構成していたが、これに換えて、ＮＡＮＤ型フラッシュメモリ１３０と種類の相違する、ＯＴＰメモリ以外の不揮発性メモリとしてもよい。例えば、Ｖ−ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＭＲＡＭ、ＦＲＡＭ、ＰＲＡＭ等に換えることができる。例示されたこれらのメモリは、ＮＡＮＤ型フラッシュメモリよりもデータ保持能力が高いメモリである。
【００７７】
・変形例３：
前記各実施例では、ＵＳＢメモリデバイス１００のコントローラ１２０に備えられるメモリインターフェース１２２は、ＮＡＮＤ型フラッシュメモリ１３０とＯＴＰメモリ１４０の双方に対して読み書きできるインターフェースであるが、これに換えて、ＮＡＮＤ型フラッシュメモリ１３０に対して読み書きできるフラッシュメモリインターフェースと、ＯＴＰメモリ１４０に対して読み書きできるＯＴＰメモリインターフェースとを別個に備える構成としてもよい。
【００７８】
・変形例４：
前記各実施例では、エラー訂正用符号として、第１次のＥＣＣ＿Ａと第２次のＥＣＣ＿Ｂとを作成する構成としたが、これに換えて、第１次のＥＣＣ＿Ａだけを作成する構成としてもよい。この場合には、ＮＡＮＤ型フラッシュメモリ１３０にはＥＣＣを格納せず、ＥＣＣ＿ＡはＯＴＰメモリ１４０に格納する構成とする。この構成によっても、前記各実施例と同様に、装置としてのデータの保持期間を長くすることができる。
【００７９】
・変形例５：
前記各実施例では、記憶装置をＵＳＢメモリデバイス１００とし、ホスト１０との間のインターフェースをＵＳＢとしたが、これに換えて、ＩＥＥＥ１３９４（アイトリプルイーイチサンキューヨン）、ｅＳＡＴＡ、Ｔｈｕｎｄｅｒｂｏｌｔ（Ｉｎｔｅｌ社の登録商標）等の他のインターフェースによりホストと接続される構成としてもよい。また、コンピュータ装置を、汎用のパーソナルコンピュータであるホスト１０に換えて、プリンタ装置、ファックス装置等の他の装置とすることもできる。
【００８０】
・変形例６：
上記実施例では、ホスト側初期化処理を記述したコンピュータプログラムは、ＨＤＤ１７に記憶される構成としたが、これに替えて他の記憶部に記憶される構成としてもよい。上記コンピュータプログラムは、ＣＤ−ＲＯＭなどの各種記憶媒体（コンピュータ読み取り可能な記録媒体等）に記憶されて配布されたり、またはインターネットなど各種通信手段を通じて配信されたりするものとすることができる。
【００８１】
なお、前述した実施例および各変形例における構成要素の中の、独立請求項で記載された要素以外の要素は、付加的な要素であり、適宜省略可能である。また、本発明はこれらの実施例および各変形例になんら限定されるものではなく、その要旨を逸脱しない範囲内において種々の態様での実施が可能である。
【符号の説明】
【００８２】
１０…ホスト
１１…ＣＰＵ
１２…バス
１３…メモリ
１５…ホストコントローラ
１６…ルートハブ
１６Ｐ…ポート
１７…ハードディスクドライブ
１８…ディスプレイコントローラ
２０…ディスプレイ
１００…ＵＳＢメモリデバイス
１２０…コントローラ
１２１…ＵＳＢインターフェース
１２２…メモリインターフェース
１２３…プロセッサ
１２４…バッファ
１３０…ＮＡＮＤ型フラッシュメモリ
１４０…ＯＴＰメモリ
【図１】
0005703939.tif 000002
【図２】
0005703939.tif 000003
【図３】
0005703939.tif 000004
【図４】
0005703939.tif 000005
【図５】
0005703939.tif 000006
【図６】
0005703939.tif 000007