(57)【特許請求の範囲】
【請求項１】
ホスト装置から転送されたデータを記憶するデータ記憶装置であって、
所定の記憶領域を有する第１の記憶部と、
所定の記憶領域を有する第２の記憶部と、
少なくとも前記第１の記憶部の使用領域を監視する監視手段と、
前記ホスト装置から前記データが転送された場合において、前記監視手段を用いて前記第１の記憶部の記憶領域が残存していると判断した場合に、前記転送されたデータを前記第１の記憶部に書き込むとともに、前記転送されたデータを補正するための補正用データを前記第２の記憶部に書き込み、前記第１の記憶部の記憶領域が残存していないと判断した場合に、前記第２の記憶部に既に記憶された前記補正用データを前記第２の記憶部の最終アドレスから逆行して消去しつつ、該消去された領域に前記最終アドレスから逆行して前記転送されたデータを書き込む書込制御手段と
を備えるデータ記憶装置。
【請求項２】
請求項１に記載のデータ記憶装置であって、
前記書込制御手段は、前記補正用データとして、前記ホスト装置から転送されたデータに基づき誤り訂正符号を生成する符号化手段を備える
データ記憶装置。
【請求項３】
請求項２に記載のデータ記憶装置であって、
前記符号化手段は、前記ホスト装置から転送されたデータと同じビット数、またはそれよりも少ないビット数の誤り訂正符号を生成する
データ記憶装置。
【請求項４】
請求項１に記載のデータ記憶装置であって、
前記書込制御手段は、前記補正用データとして、前記ホスト装置から転送されたデータと同一のデータ、または、前記ホスト装置から転送されたデータを構成する各ビットを反転させたデータを生成する手段を備える
データ記憶装置。
【請求項５】
請求項１に記載のデータ記憶装置であって、
前記書込制御手段は、前記ホスト装置から転送されたデータを前記第２の記憶部に書き込む際に、前記第１の記憶部の物理的な最終アドレスと、前記第２の記憶部の物理的な最終アドレスとを結合した仮想的なアドレス空間に従って、前記第２の記憶部へデータの書き込みを行う
データ記憶装置。
【請求項６】
請求項１に記載のデータ記憶装置であって、更に、
前記ホスト装置からデータの読み出し要求を受けた場合において、該読み出し要求を受けたデータの記憶先が、前記第１の記憶部であり、かつ、該データから生成された補正用データが前記第２の記憶部に存在する場合に、該データを前記第１の記憶部から読み込むとともに、該補正用データを前記第２の記憶部から読み込み、該補正用データに基づき該データを補正して前記ホスト装置に該データを転送する読込制御手段を備える
データ記憶装置。
【請求項７】
請求項６に記載のデータ記憶装置であって、
前記読込制御手段は、前記読み出し要求を受けたデータの記憶先が、前記第１の記憶部であり、かつ、該データから生成された補正用データが前記第２の記憶部に存在しない場合に、該データを前記第１の記憶部から読み込み、該データをそのまま前記ホスト装置に転送する手段を備える
データ記憶装置。
【請求項８】
請求項６または請求項７のいずれかに記載のデータ記憶装置であって、
前記読込制御手段は、前記読み出し要求を受けたデータの記憶先が、前記第２の記憶部であり、かつ、該第２の記憶部の通常のデータが記録されている領域である場合に、該データを該第２の記憶部から読み込み、該データをそのまま前記ホスト装置に転送する手段を備える
データ記憶装置。
【請求項９】
請求項６ないし請求項８のいずれかに記載のデータ記憶装置であって、
前記読込制御手段は、前記読み出し要求を受けたデータの記憶先が、前記第２の記憶部の前記補正用データが記憶されている領域である場合に、前記第２の記憶部からデータの読み込みを行うことなく、所定のデータをダミーデータとして前記ホスト装置に転送する手段を備える
データ記憶装置。
【請求項１０】
請求項６ないし請求項９のいずれかに記載のデータ記憶装置であって、
前記書込制御手段は、前記ホストから転送されたデータを、前記第２の記憶部に書き込んだ場合に、該データの書き込まれた最大アドレスを示すアドレスポインタを記憶し、
前記読込制御手段は、前記アドレスポインタに基づき、前記読み出し要求を受けたデータに対応する補正用データが前記第２の記憶部に記憶されているか否か、または、前記読み出し要求を受けたデータの記憶先が、前記第２の記憶部の前記補正用データが記憶されている領域であるか否かを判断する
データ記憶装置。
【請求項１１】
請求項６ないし請求項９のいずれかに記載のデータ記憶装置であって、
前記書込制御手段は、前記ホストから転送されたデータを、前記第２の記憶部に書き込んだ場合に、該第２の記憶部の個々のアドレスについて、データを書き込んだか否かを示す所定のテーブルを記憶し、
前記読込制御手段は、前記テーブルに基づき、前記読み出し要求を受けたデータに対応する補正用データが前記第２の記憶部に記憶されているか否か、または、前記読み出し要求を受けたデータの記憶先が、前記第２の記憶部の前記補正用データが記憶されている領域であるか否かを判断する
データ記憶装置。
【請求項１２】
請求項１ないし請求項１１のいずれかに記載のデータ記憶装置であって、
前記第１の記憶部の記憶領域が残存していない場合であっても、所定の設定操作に応じて、前記書込制御手段に対して前記第２の記憶部への通常のデータの書き込みを制限する設定手段を備える
データ記憶装置。
【請求項１３】
請求項１ないし請求項１２のいずれかに記載のデータ記憶装置であって、
前記第１の記憶部と前記第２の記憶部とは、同一の記憶容量を有する
データ記憶装置。
【請求項１４】
請求項１ないし請求項１３のいずれかに記載のデータ記憶装置であって、
前記データは、前記ホスト装置からＵＳＢインタフェースを介して転送される
データ記憶装置。
【請求項１５】
請求項１ないし請求項１４のいずれかに記載のデータ記憶装置であって、
前記第１の記憶部および前記第２の記憶部は、不揮発性の半導体メモリである
データ記憶装置。
【請求項１６】
請求項１５に記載のデータ記憶装置であって、
前記不揮発性の半導体メモリとは、フラッシュメモリである
データ記憶装置。
【請求項１７】
所定の記憶領域を有する第１の記憶部と第２の記憶部とを備えるデータ記憶装置がホスト装置から転送されたデータを記憶する方法であって、
前記第１の記憶部の使用領域を監視し、
前記ホスト装置から前記データが転送された場合において、前記監視の結果、前記第１の記憶部の記憶領域が残存していると判断した場合に、前記転送されたデータを前記第１の記憶部に書き込むとともに、前記転送されたデータを補正するための補正用データを前記第２の記憶部に書き込み、
前記第１の記憶部の記憶領域が残存していないと判断した場合に、前記第２の記憶部に既に記憶された前記補正用データを前記第２の記憶部の最終アドレスから逆行して消去しつつ、該消去された領域に前記最終アドレスから逆行して前記転送されたデータを書き込む
データ記憶方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ等のホスト装置から転送されるデータを記憶する技術に関する。
【背景技術】
【０００２】
近年、ハードディスクドライブやフラッシュメモリといった記憶デバイスを複数組み合わせてデータを記録することにより、記録したデータの信頼性を高める技術が種々提案されている（下記特許文献１参照）。例えば、ミラーリングと呼ばれる技術では、物理的あるいは論理的に分離された２つの記憶領域に対して同一内容のデータの書き込みを行うことにより、１つの記憶領域に障害が発生しても、もう１つの記憶領域によってシステムを稼働し続けることが可能となる。
【０００３】
【特許文献１】特開２０００−２０７１３７号公報
【０００４】
しかし、ミラーリングでは、２つの記憶領域に同一内容のデータを書き込むため、実質的な記憶容量が半減してしまうという問題があった。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このような問題を考慮し、本発明が解決しようとする課題は、複数の記憶領域を用いてデータを記憶するにあたり、データの信頼性を向上させつつ、本来の記憶容量を有効に利用可能とすることにある。
【課題を解決するための手段】
【０００６】
上記課題を踏まえ、本発明を次のように構成した。すなわち、
ホスト装置から転送されたデータを記憶するデータ記憶装置であって、
所定の記憶領域を有する第１の記憶部と、
所定の記憶領域を有する第２の記憶部と、
少なくとも前記第１の記憶部の使用領域を監視する監視手段と、
前記ホスト装置から前記データが転送された場合において、前記監視手段を用いて前記第１の記憶部の記憶領域が残存していると判断した場合に、前記転送されたデータを前記第１の記憶部に書き込むとともに、前記転送されたデータを補正するための補正用データを前記第２の記憶部に書き込み、前記第１の記憶部の記憶領域が残存していないと判断した場合に、前記第２の記憶部に既に記憶された前記補正用データを前記第２の記憶部の最終アドレスから逆行して消去しつつ、該消去された領域に前記最終アドレスから逆行して前記転送されたデータを書き込む書込制御手段と
を備えることを要旨とする。
【０００７】
本発明のデータ記憶装置によれば、第１の記憶部の記憶領域が残存していれば、ホスト装置から転送されたデータを第１の記憶部に書き込み、そのデータを補正するためのデータを第２の記憶部に書き込む。そのため、仮に、第１の記憶部に記憶されたデータが何らかの原因で損傷したとしても、第２の記憶部に書き込まれた補正用データを用いることで、これを補正することができる。
【０００８】
更に、本発明のデータ記憶装置では、第１の記憶部の記憶領域が残存していなければ、第２の記憶部に書き込まれていた補正用データを消去しつつ、この第２の記憶部にもホスト装置から転送されたデータを書き込む。そのため、第１の記憶部と第２の記憶部の記憶容量を有効に利用することが可能になる。すなわち、本発明によれば、データの信頼性向上と記憶容量の有効利用との調整を図り、機能的なデータ記憶装置を提供することが可能になる。なお、第１の記憶部と第２の記憶部とは、物理的に分離された記憶デバイスであるものとしてもよいし、１つの記憶デバイス内の記憶領域が論理的に分離されて形成されているものとしてもよい。
【０００９】
上記構成のデータ記憶装置において、
前記書込制御手段は、前記補正用データとして、前記ホスト装置から転送されたデータに基づき誤り訂正符号を生成する符号化手段を備えるものとしてもよい。
【００１０】
このような構成によれば、第２の記憶部に記憶された誤り訂正符号を用いて、第１の記憶部に記憶されたデータを容易に訂正することが可能になる。誤り訂正符号は、例えば、ハミング符号化やサイクリック符号化、リードソロモン符号化などの種々の符号化技術を利用して生成することができる。誤り訂正符号は、一般的に、ＥＣＣデータと呼ばれる。
【００１１】
上記構成のデータ記憶装置において、
前記符号化手段は、前記ホスト装置から転送されたデータと同じビット数、またはそれよりも少ないビット数の誤り訂正符号を生成するものとしてもよい。
【００１２】
このような構成において、ホスト装置から転送されたデータと同じビット数の誤り訂正符号を生成するものとすれば、ホストから転送されたデータと、このデータから生成された補正用データとが同じデータ長となるため、これらを第１の記憶部と第２の記憶部の同一アドレスに記憶させることができ、アドレス管理を容易に行うことが可能になる。また、ホスト装置から転送されたデータよりも少ないビット数の誤り訂正符号を生成するものとすれば、第２の記憶部に記憶させる補正用データの容量を削減することができる。
【００１３】
上記構成のデータ記憶装置において、
前記書込制御手段は、前記補正用データとして、前記ホスト装置から転送されたデータと同一のデータ、または、前記ホスト装置から転送されたデータを構成する各ビットを反転させたデータを生成する手段を備えるものとしてもよい。
【００１４】
このような構成によれば、補正用データとして、ホスト装置から転送されたデータと同一のデータ、または、ホスト装置から転送されたデータを構成する各ビットを反転させたデータを生成するため、補正用データの生成が容易となり処理負担が軽減される。また、データの読み出し時にエラーのチェックを行う際にも、単純に、両データを比較すればよいため、処理の負担が軽減され、処理速度の低下を防ぐことができる。
【００１５】
上記構成のデータ記憶装置において、
前記書込制御手段は、前記ホスト装置から転送されたデータを前記第２の記憶部に書き込む際に、前記第１の記憶部の物理的な最終アドレスと、前記第２の記憶部の物理的な最終アドレスとを結合した仮想的なアドレス空間に従って、前記第２の記憶部へデータの書き込みを行うものとしてもよい。
【００１６】
このような構成によれば、第２の記憶部に通常のデータを書き込む動作状態において、第１の記憶部と第２の記憶部の記憶領域をそれぞれ区別することなくシームレスにアドレスを指定することが可能になる。
【００１７】
上記構成のデータ記憶装置において、
更に、前記ホスト装置からデータの読み出し要求を受けた場合において、該読み出し要求を受けたデータの記憶先が、前記第１の記憶部であり、かつ、該データから生成された補正用データが前記第２の記憶部に存在する場合に、該データを前記第１の記憶部から読み込むとともに、該補正用データを前記第２の記憶部から読み込み、該補正用データに基づき該データを補正して前記ホスト装置に該データを転送する読込制御手段を備えるものとしてもよい。
【００１８】
このような構成によれば、第１の記憶部に記憶されたデータと、第２の記憶部に記憶された補正用データに基づき、ホスト装置から読み込み要求を受けたデータについてエラーのチェックや訂正を行うことができるので、データの信頼性を向上させることができる。
【００１９】
上記構成のデータ記憶装置において、
前記読込制御手段は、前記読み出し要求を受けたデータの記憶先が、前記第１の記憶部であり、かつ、該データから生成された補正用データが前記第２の記憶部に存在しない場合に、該データを前記第１の記憶部から読み込み、該データをそのまま前記ホスト装置に転送する手段を備えるものとしてもよい。
【００２０】
このような構成によれば、第２の記憶部に記憶されていた補正用データが既に消去されてしまっている場合においても、第１の記憶部から適切にデータを読み出して、ホスト装置に転送することができる。
【００２１】
上記構成のデータ記憶装置において、
前記読込制御手段は、前記読み出し要求を受けたデータの記憶先が、前記第２の記憶部であり、かつ、該第２の記憶部の通常のデータが記録されている領域である場合に、該データを該第２の記憶部から読み込み、該データをそのまま前記ホスト装置に転送する手段を備えるものとしてもよい。
【００２２】
このような構成によれば、第２の記憶部に通常のデータを記憶する動作状態において、第２の記憶部から適切にデータを読み出して、ホスト装置に転送することができる。
【００２３】
上記構成のデータ記憶装置において、
前記読込制御手段は、前記読み出し要求を受けたデータの記憶先が、前記第２の記憶部の前記補正用データが記憶されている領域である場合に、前記第２の記憶部からデータの読み込みを行うことなく、所定のデータをダミーデータとして前記ホスト装置に転送する手段を備えるものとしてもよい。
【００２４】
第２の記憶部に通常のデータを書き込む動作状態では、第２の記憶部の補正用データが記憶されている領域は、本来、ホスト装置からは空領域であると認識される領域である。従って、上記構成により、このような領域からデータを読み込む場合に所定のデータをダミーデータとしてホスト装置に転送したとしても、ホスト装置は、その領域が無効データであると認識しているはずである。ダミーデータとしては、例えば、１６進数で、「００」や「ＦＦ」、「５５」、「ＡＡ」などを表すデータとすることができる。
【００２５】
上記構成のデータ記憶装置において、
前記書込制御手段は、前記ホストから転送されたデータを、前記第２の記憶部に書き込んだ場合に、該データの書き込まれた最大アドレスを示すアドレスポインタを記憶し、
前記読込制御手段は、前記アドレスポインタに基づき、前記読み出し要求を受けたデータに対応する補正用データが前記第２の記憶部に記憶されているか否か、または、前記読み出し要求を受けたデータの記憶先が、前記第２の記憶部の前記補正用データが記憶されている領域であるか否かを判断するものとしてもよい。
【００２６】
このような構成によれば、第２の記憶部内の通常のデータが記憶されている領域と補正用データが記憶されている領域とを、上述したアドレスポインタによって明確に判別することが可能になる。従って、このアドレスポインタを用いれば、読み出し要求を受けたデータに対応する補正用データが第２の記憶部に記憶されている否か、あるいは、読み出し要求を受けたデータの記憶先が、第２の記憶部の補正用データが記憶されている領域であるか否か、といった判断を容易に行うことが可能になる。
【００２７】
また、上記構成のデータ記憶装置において、
前記書込制御手段は、前記ホストから転送されたデータを、前記第２の記憶部に書き込んだ場合に、該第２の記憶部の個々のアドレスについて、データを書き込んだか否かを示す所定のテーブルを記憶し、
前記読込制御手段は、前記テーブルに基づき、前記読み出し要求を受けたデータに対応する補正用データが前記第２の記憶部に記憶されているか否か、または、前記読み出し要求を受けたデータの記憶先が、前記第２の記憶部の前記補正用データが記憶されている領域であるか否かを判断するものとしてもよい。
【００２８】
かかる構成のように、第２の記憶部の個々のアドレスについて、データを書き込んだか否かを示す所定のテーブルを用いることによっても、上述した種々の判断を容易に行うことが可能になる。
【００２９】
上記構成のデータ記憶装置において、
前記第１の記憶部の記憶領域が残存していない場合であっても、所定の設定操作に応じて、前記書込制御手段に対して前記第２の記憶部への通常のデータの書き込みを制限する設定手段を備えるものとしてもよい。
【００３０】
このような構成によれば、第２の記憶部への通常のデータの書き込みを任意に制限することができるので、ユーザの利便性を向上させることができる。このような設定操作は、データ記憶装置に設けた物理的なスイッチや、データ記憶装置と接続されたホスト上で稼働するアプリケーションによって行うものとすることができる。
【００３１】
上記構成のデータ記憶装置において、
前記第１の記憶部と前記第２の記憶部とは、同一の記憶容量を有するものとしてもよい。
【００３２】
このような構成によれば、第１の記憶部と第２の記憶部とのアドレスを一対一に対応させてデータと補正用データとを記憶させることができるので、アドレス管理を容易に行うことができる。また、このような構成では、第１および第２の記憶部として、同一種類のデバイスを採用することができるので、製造コストを軽減することが可能になる。なお、第１の記憶部と第２の記憶部とは、必ずしも同一容量とする必要はなく、第２の記憶部を第１の記憶部よりも大きな記憶容量としてもよい。また、補正用データのデータ長が、ホストから転送されたデータのデータ長よりも短ければ、第２の記憶部の容量を第１の記憶部より少なくすることが可能である。
【００３３】
上記構成のデータ記憶装置において、
前記データは、前記ホスト装置からＵＳＢインタフェースを介して転送されるものとしてもよい。
【００３４】
このような構成であれば、コンピュータ等のホスト装置に用意されたＵＳＢポートに本発明のデータ記憶装置を接続するだけで、容易に本発明のデータ記憶装置を利用することができる。そのため、ユーザの利便性を向上させることができる。
【００３５】
上記構成のデータ記憶装置において、
前記第１の記憶部および前記第２の記憶部は、不揮発性の半導体メモリであるものとすることができる。不揮発性の半導体メモリとしては、例えば、ＮＡＮＤ型やＮＯＲ型の各種フラッシュメモリ、ＥＥＰＲＯＭ、バッテリバックアップされたＤＲＡＭ等を利用することができる。
【００３６】
このような構成によれば、携帯性に優れた小型のデータ記憶装置を提供することができる。なお、第１および第２の記憶部としては、半導体メモリ以外にも、例えば、ハードディスクドライブや、書き換え可能な光ディスクなどを採用することができる。また、第１の記憶部と第２の記憶部とで、全く異なる種類のデバイスを採用することも可能である。
【００３７】
なお、本発明は、上述したデータ記憶装置としての構成のほか、次のようなデータ記憶方法としても構成することができる。すなわち、
所定の記憶領域を有する第１の記憶部と第２の記憶部とを備えるデータ記憶装置がホスト装置から転送されたデータを記憶する方法であって、
前記第１の記憶部の使用領域を監視し、
前記ホスト装置から前記データが転送された場合において、前記監視の結果、前記第１の記憶部の記憶領域が残存していると判断した場合に、該データを前記第１の記憶部に書き込むとともに、該データを補正するための補正用データを前記第２の記憶部に書き込み、
前記第１の記憶部の記憶領域が残存していないと判断した場合に、前記第２の記憶部に既に記憶された前記補正用データを消去しつつ該データを、該第２の記憶部に書き込むデータ記憶方法である。
【００３８】
このようなデータ記憶方法によっても、上述した種々の効果と同様の効果を奏することができる。
【発明を実施するための最良の形態】
【００３９】
以下、上述した本発明の作用・効果を一層明らかにするため、本発明の実施の形態を実施例に基づき次の順序で説明する。
Ａ．データ記憶装置の概略構成：
Ｂ．データ記憶装置の動作の概要：
Ｃ．各種処理：
（Ｃ１）メイン処理：
（Ｃ２）ポインタ設定処理：
（Ｃ３）ライト処理：
（Ｃ４）リード処理：
Ｄ．効果：
Ｅ．変形例：
【００４０】
Ａ．データ記憶装置の概略構成：
図１は、実施例としてのデータ記憶装置１０の概略構成を示す説明図である。図示するように、本実施例のデータ記憶装置１０は、内部にフラッシュメモリを２つ備えている（第１フラッシュメモリＦＬ１と第２フラッシュメモリＦＬ２）。フラッシュメモリの種別としては、例えば、ＮＡＮＤ型のフラッシュメモリやＮＯＲ型のフラッシュメモリを利用することができる。
【００４１】
データ記憶装置１０は、通常の動作時には、第１フラッシュメモリＦＬ１に対してデータを書き込み、第２フラッシュメモリＦＬ２に対しては、第１フラッシュメモリＦＬ１に書き込んだデータを補正するためのＥＣＣデータを書き込む機能を備えている。このような動作状態のことを、以下では、「データ保障モード」という。また、データ記憶装置１０は、第１フラッシュメモリＦＬ１の残容量がゼロになると、第２フラッシュメモリＦＬ２に対して既に書き込まれたＥＣＣデータを消去しながら、この第２フラッシュメモリＦＬ２にも通常のデータを書き込む機能を備えている。以下では、このような動作状態のことを「容量優先モード」という。
【００４２】
図１に示すように、本実施例のデータ記憶装置１０は、ＵＳＢコネクタ１１０とＵＳＢ制御回路１２０とフラッシュコントローラ１３０と第１フラッシュメモリＦＬ１と第２フラッシュメモリＦＬ２とによって構成されている。
【００４３】
ＵＳＢコネクタ１１０は、データ記憶装置１０の筐体（図中の破線部分）から露出して設けられており、パーソナルコンピュータやプリンタ等のホスト機器（以下、単に「ホスト」と呼ぶ）に備えられたＵＳＢインタフェースに接続される。
【００４４】
ＵＳＢ制御回路１２０は、ＵＳＢコネクタ１１０とフラッシュコントローラ１３０とに接続されている。ＵＳＢ制御回路１２０は、当該データ記憶装置１０をＵＳＢマスストレージクラスのデバイスとして動作させる回路であり、ＵＳＢプロトコルに基づきホストとの通信を制御する回路である。このＵＳＢ制御回路１２０は、更に、ホストから受信したＵＳＢコマンドをＡＴＡコマンドやＳＣＳＩコマンドに変換したり、フラッシュコントローラ１３０から受信したステータス信号やデータをＵＳＢコマンドに変換する機能を備える。ＡＴＡコマンドとは、ＡＮＳＩ（American National Standard Institute）によって標準化されたコマンドであり、本実施例のデータ記憶装置１０の他、ハードディスクやＰＣカード型メモリ等の種々のデータ記憶装置に対してデータの読み書きを制御するための汎用的なコマンドである。ＳＣＳＩコマンドは、ＡＴＡコマンドよりも汎用性が高く、ハードディスク等の記憶装置のほか、スキャナ等も制御可能なコマンドである。
【００４５】
フラッシュコントローラ１３０は、ＵＳＢ制御回路１２０から転送されたＡＴＡコマンド（あるいはＳＣＳＩコマンド）を解釈し、バススイッチ１５０を介して接続された第１フラッシュメモリＦＬ１や第２フラッシュメモリＦＬ２に対するデータの読み書きを制御する集積回路である。フラッシュコントローラ１３０は、かかる制御を行うために、内部にＣＰＵやＲＯＭ、ＲＡＭ等を備えている。このＲＯＭには、データ記憶装置１０の動作を制御するためのプログラムが記録されている。ＣＰＵは、ＲＡＭをワークエリアとして用いつつ、このプログラムを実行することで、データ記憶装置１０の全般的な動作を制御する。
【００４６】
フラッシュコントローラ１３０は、アドレス変換回路１４０とバススイッチ１５０とを備えている。アドレス変換回路１４０は、２つのフラッシュメモリのデータ記憶領域を連続的にアクセス可能な仮想的なアドレスを、第１フラッシュメモリＦＬ１もしくは第２フラッシュメモリＦＬ２の実アドレスに変換する回路である。かかるアドレス変換には、レジスタ１４５に記憶されたアドレスポインタの値が用いられる。上述したように、本実施例のデータ記憶装置１０は、データ保障モードと容量優先モードという２種類の動作状態があり、このうち、容量優先モードでは、第２フラッシュメモリＦＬ２に対しても通常のデータを書き込む。そこで、フラッシュコントローラ１３０は、２つのフラッシュメモリのデータ記憶領域を連続的にアクセス可能な仮想的なアドレスを使用し、アドレス変換回路１４０が、この仮想的なアドレスを各フラッシュメモリの実アドレスに変換する。こうすることで、フラッシュコントローラ１３０は、フラッシュメモリの種別を考慮することなく、データの読み書きを行うことが可能となる。
【００４７】
バススイッチ１５０は、フラッシュコントローラ１３０と第１フラッシュメモリＦＬ１と第２フラッシュメモリＦＬ２とに接続されている。バススイッチ１５０は、フラッシュコントローラ１３０から出力されたコマンド（ライトコマンドやリードコマンド）やアクセス先のフラッシュメモリのアドレスに基づき、データの入出力先となるフラッシュメモリの切り換えを行う。このバススイッチ１５０は、内部にＥＣＣエンコーダ１６０とＥＣＣデコーダ１７０と、ダミーデータ出力回路１８０とを備えている。
【００４８】
ＥＣＣエンコーダ１６０は、データ保障モード時において、ホストから書き込み指示のあったデータをハミング符号化してＥＣＣデータを生成する回路である。生成されたＥＣＣデータは、第２フラッシュメモリＦＬ２に書き込まれる。本実施例では、１バイトのデータに対して、１バイトのＥＣＣデータを生成する。なお、ＥＣＣデータは、ハミング符号化以外にも、サイクリック符号化やリードソロモン符号化などの他の符号化技術によって生成するものとしてもよい
【００４９】
一方、ＥＣＣデコーダ１７０は、データ保障モードあるいは容量優先モード時において、第２フラッシュメモリＦＬ２から読み出したＥＣＣデータを、第１フラッシュメモリＦＬ１から読み出した通常のデータに基づきデコードし、読み出したデータのエラーチェックと補正を行うための回路である。
【００５０】
ダミーデータ出力回路１８０は、容量優先モード時において、ホストが、第２フラッシュメモリＦＬ２内のＥＣＣデータ（正確には、第１フラッシュメモリＦＬ１内のデータを補正するためのＥＣＣデータ）が記録されている領域からデータを読み出そうとした場合に、ダミーデータ（例えば、「００」）を出力する回路である。このダミーデータ出力回路１８０の動作の詳細については後述する。
【００５１】
バススイッチ１５０は、データ記憶装置１０の動作状態に応じて、上述したＥＣＣエンコーダ１６０とＥＣＣデコーダ１７０とダミーデータ出力回路１８０と第１フラッシュメモリＦＬ１と第２フラッシュメモリＦＬ２との接続状態を変更する。かかる変更の態様は後述する種々の処理の説明の中で併せて説明する。
【００５２】
Ｂ．データ記憶装置の動作の概要：
図２は、データ保障モード時のデータ記憶装置１０の内部メモリマップを示す説明図である。図の左側には、第１フラッシュメモリＦＬ１がＦＡＴ形式によりフォーマットされ、１つのパーティションが形成されている例を示している。
【００５３】
ＦＡＴ形式のフォーマットでは、第１フラッシュメモリＦＬ１の記憶領域は、管理領域ＭＡとユーザデータ領域ＤＡとに分離される。管理領域ＭＡは、マスタブートレコード（以下、「ＭＢＲ領域」という）や、バイオスパラメータブロック（以下、「ＢＰＢ領域」という）、ＦＡＴ１、ＦＡＴ２、ルートディレクトリなどと呼ばれる領域によって構成される。ＦＡＴのデータ構造は周知のため、以下ではこれらの各領域について簡単に説明する。
【００５４】
ＭＢＲ領域は、ホストが接続された場合に、最初に読み込まれる領域である。このマスタブートレコードには、ブートストラップコードやパーティションテーブルなどが記録されている。パーティションテーブルには、生成されているパーティションの数や、各パーティションの開始セクタおよび終了セクタ、オフセット、総セクタ数などの情報が記録されている。
【００５５】
ＢＰＢ領域は、各パーティションの先頭セクタに記録されており、そのパーティションのフォーマット形式やセクタ数、ＦＡＴの数などが記録されている。
【００５６】
ＦＡＴ１およびＦＡＴ２には、ユーザデータ領域ＤＡに記録された各ファイルを構成するクラスタチェーンの情報が記録されている。ＦＡＴ１とＦＡＴ２には、同一の情報が記録される。
【００５７】
ルートディレクトリには、ルートにあるファイルのファイル名や拡張子、属性、そのファイルを構成する最初のクラスタ番号等が記録されている。
【００５８】
図２の右側に示すように、データ保障モード時には、第２フラッシュメモリＦＬ２には、第１フラッシュメモリＦＬ１に書き込まれたデータからＥＣＣエンコーダ１６０によって生成されたＥＣＣデータが記録される。上述したように、本実施例では、１バイトのデータに対して、１バイトのＥＣＣデータを生成するものとしたため、第１フラッシュメモリＦＬ１と第２フラッシュメモリＦＬ２のアドレスは１対１で対応している。つまり、第１フラッシュメモリＦＬ１のあるアドレスに記録されたデータに対応するＥＣＣデータは、第２フラッシュメモリＦＬ２の同一のアドレスに記録される。
【００５９】
データ保障モード時において、データ記憶装置１０は、ホストからデータの書き込み指示があれば、第１フラッシュメモリＦＬ１のユーザデータ領域ＤＡが残存する限り、そのデータを、第１フラッシュメモリＦＬ１のユーザデータ領域ＤＡの下位アドレスに向かって書き込む。そして、そのデータから生成されたＥＣＣデータが、第２フラッシュメモリＦＬ２の同一のアドレスに書き込まれる。一方、ホストからデータの読み出し指示があれば、第１フラッシュメモリＦＬ１の指定されたアドレスからデータを読み出すとともに、第２フラッシュメモリＦＬ２の同一アドレスからＥＣＣデータを読み出し、ＥＣＣデコーダ１７０によってエラーのチェックやデータの補正を行う。
【００６０】
図３は、容量優先モード時のデータ記憶装置１０の内部メモリマップを示す説明図である。図示するように、第１フラッシュメモリＦＬ１のユーザデータ領域ＤＡの残領域がゼロになり、データ記憶装置１０の動作状態が、データ保障モードから容量優先モードに切り替わると、データ記憶装置１０は、ホストから書き込み指示のあったデータを、第２フラッシュメモリＦＬ２のユーザデータ領域ＤＡに、最終アドレスＢｎから逆行して書き込む。このとき、書き込み先にＥＣＣデータが存在していた場合には、そのＥＣＣデータを消去した上で、データの書き込みを行う。この容量優先モード時においては、データ記憶装置１０は、ＥＣＣデータの生成は行わない。
【００６１】
データ記憶装置１０が容量優先モードで動作している場合、第２フラッシュメモリＦＬ２のユーザデータ領域ＤＡには、データ保障モード時に書き込まれたＥＣＣデータを記憶する領域と、動作状態が容量優先モードに切り替わった後に書き込まれた通常のデータを記憶する領域との２種類の領域が存在する。そこで、データ記憶装置１０は、この２種類の領域の境界を弁別するために、その境界のアドレスを示すアドレスポインタＡＰ３を用意して、これをレジスタ１４５に記憶している。このアドレスポインタＡＰ３は、第２フラッシュメモリＦＬ２に順次データが書き込まれると、第２フラッシュメモリＦＬ２の最終アドレスＢｎから、そのユーザデータ領域ＤＡの先頭アドレスＢ５に向けて移動することになる。
【００６２】
データ記憶装置１０は、容量優先モード時であっても、第２フラッシュメモリＦＬ２のＥＣＣデータが残存している領域に対応するデータを第１フラッシュメモリＦＬ１から読み込む場合には、データ保障モード時と同様に、ＥＣＣデータを用いたデータの補正やエラーチェックを行うことができる。そこで、データ記憶装置１０は、第１フラッシュメモリＦＬ１内のかかる領域を弁別するため、第２フラッシュメモリＦＬ２のアドレスポインタＡＰ３に対応する第１フラッシュメモリＦＬ１のアドレスを、アドレスポインタＡＰ２としてレジスタ１４５に記憶している。このアドレスポインタＡＰ２は、第２フラッシュメモリＦＬ２に順次データが書き込まれると、第１フラッシュメモリＦＬ１の最終アドレスＡｎから、ユーザデータ領域ＤＡの先頭アドレスＡ５に向けて移動することになる。
【００６３】
このアドレスポインタＡＰ２は、フラッシュコントローラ１３０が、第１フラッシュメモリＦＬ１の記憶領域が残存しているか否かを判断する際にも用いられる。つまり、フラッシュコントローラ１３０は、このアドレスポインタＡＰ２を監視し、アドレスポインタＡＰ２が第１フラッシュメモリＦＬ１の最終アドレスＡｎを示していれば、第１フラッシュメモリＦＬ１の記憶容量が残存していると判断することができる。そのため、この場合には、第１フラッシュメモリＦＬ１に対してデータの書き込みを行う。一方、最終アドレスＡｎよりも低いアドレスを示していれば、第１フラッシュメモリＦＬ１の記憶容量が残存していないと判断することができる。この場合、フラッシュコントローラ１３０は、第２フラッシュメモリＦＬ２に対してデータの書き込みを行うことになる。
【００６４】
更に、データ記憶装置１０は、第１フラッシュメモリＦＬ１の管理領域ＭＡとユーザデータ領域ＤＡの境界を弁別するため、その境界のアドレスを示すアドレスポインタＡＰ１を用意して、これをレジスタ１４５に記憶している。後述するライト処理やリード処理では、上述したアドレスポインタＡＰ１〜ＡＰ３を用いることで、データの読み書き先となるフラッシュメモリの判別やＥＣＣデータの生成の有無の判断等が行われる。
【００６５】
図４は、フラッシュコントローラ１３０が用いる仮想アドレスと、ホストから認識可能なアドレス空間とを示す説明図である。図示するように、データ記憶装置１０は、動作状態が容量優先モードに切り替わると、第１フラッシュメモリＦＬ１の最終実アドレスＡｎと第２フラッシュメモリＦＬ２の最終実アドレスＢｎとが接続されて１つの記憶領域を有するものとして動作する。この場合、第１フラッシュメモリＦＬ１の最終実アドレスは、「Ａｎ」であるため、第２フラッシュメモリＦＬ２の最終実アドレスＢｎは、仮想アドレスとして「Ａｎ＋１」となる。また、第１フラッシュメモリＦＬ１と第２フラッシュメモリＦＬ２とは同一容量であるため、第２フラッシュメモリＦＬ２のユーザデータ領域ＤＡの先頭実アドレスＢ５は、仮想アドレスとして「２Ａｎ−ＡＰ１」となる。つまり、容量優先モードにおいては、アドレス変換回路１４０の働きにより、ホストからはデータ記憶装置１０の実アドレスとして、仮想アドレスＡ０から仮想アドレス（２Ａｎ−ＡＰ１）までが認識され、この連続した領域がシームレスにアクセス可能となる。なお、仮想アドレスＡ０〜Ａｎのアドレス値は、第１フラッシュメモリＦＬ１の実アドレスと同一のアドレス値（Ａ０〜Ａｎ）である。
【００６６】
Ｃ．各種処理：
（Ｃ１）メイン処理：
図５は、データ記憶装置１０が実行するメイン処理のフローチャートである。この処理は、データ記憶装置１０がホストに接続されて電源が供給されたと同時にフラッシュコントローラ１３０が実行を開始する処理である。
【００６７】
この処理が開始されると、まず、フラッシュコントローラ１３０は、２つのフラッシュメモリに既に記憶されたデータの位置に基づいて、アドレスポインタＡＰ１〜ＡＰ３の値を設定するためのポインタ設定処理を行う（ステップＳ１０）。このポインタ設定処理の詳細については後述する。
【００６８】
続いて、フラッシュコントローラ１３０は、ＵＳＢコネクタ１１０およびＵＳＢ制御回路１２０を介して、ホストから何らかのコマンドを受信したか否かを判断する（ステップＳ２０）。コマンドを受信していない場合には（ステップＳ２０：Ｎｏ）、この処理をループすることでコマンドを受信するまで待機する。一方、コマンドを受信した場合には（ステップＳ２０：Ｙｅｓ）、そのコマンドの種類を判別する（ステップＳ３０）。
【００６９】
上記ステップＳ３０において、受信したコマンドが、データの書き込みを行うライトコマンドであると判断されれば（ステップＳ３０：「ライト」）、フラッシュコントローラ１３０は、後述するライト処理を行う（ステップＳ４０）。一方、受信したコマンドが、データの読み込みを行うリードコマンドであると判断されれば（ステップＳ３０：「リード」）、後述するリード処理を行う（ステップＳ５０）。そして、これらの処理が完了すれば、処理を上記ステップＳ２０に戻す。以上で説明したメイン処理によれば、電源供給がストップされるまで、ホストから受信したコマンドに応じた処理がなされることになる。
【００７０】
（Ｃ２）ポインタ設定処理：
図６は、上述したメイン処理のステップＳ１０で実行されるポインタ設定処理のフローチャートである。このポインタ設定処理は、２つのフラッシュメモリに既に記憶されたデータの位置に基づいて、アドレスポインタの初期値を求めるための処理である。以下の説明において「アドレス」とは、特に明記のない限り図４に示した仮想アドレスのことをいうものとする。
【００７１】
この処理が実行されると、まず、フラッシュコントローラ１３０は、第１フラッシュメモリＦＬ１のＭＢＲ領域とＢＰＢ領域とを読み込む（ステップＳ１００）。そして、これらの領域に既にＭＢＲ情報とＢＰＢ情報とが書き込まれているかを判断する（ステップＳ１１０）。
【００７２】
上記ステップＳ１１０において、ＭＢＲ情報とＢＰＢ情報とが書き込まれていないと判断した場合には（ステップＳ１１０：Ｎｏ）、データ記憶装置１０は、未だフォーマットされていない状態であるため、フラッシュコントローラ１３０は、アドレスポインタＡＰ１〜ＡＰ３の値を次のように設定する。すなわち、アドレスポインタＡＰ１およびＡＰ２の値を、第１フラッシュメモリＦＬ１の物理的な最終アドレスに相当するアドレスＡｎとし、アドレスポインタＡＰ３の値を、第２フラッシュメモリＦＬ２の物理的な最終アドレスに相当するアドレス（Ａｎ＋１）とする。データ記憶装置１０が未フォーマットの場合には、かかる処理によって当該ポインタ設定処理は終了する。
【００７３】
上記ステップＳ１１０において、ＭＢＲ領域とＢＰＢ領域とにそれぞれ、ＭＢＲ情報とＢＰＢ情報とが記録されていると判断した場合には（ステップＳ１１０：Ｙｅｓ）、フラッシュコントローラ１３０は、ＭＢＲ領域やＢＰＢ領域に記録されたパーティションテーブルやセクタ数等の情報に基づきユーザデータ領域ＤＡの先頭アドレスＡ５を算出する（ステップＳ１３０）。こうしてアドレスＡ５を算出すると、フラッシュコントローラ１３０は、アドレスポインタＡＰ１の値を、このアドレス「Ａ５」に設定する（ステップＳ１４０）。
【００７４】
次に、フラッシュコントローラ１３０は、ＦＡＴ領域に記録された情報を解析して、ユーザデータ領域ＤＡに既に書き込まれているデータの最大アドレス（以下、「最大書込アドレスＥＡ」という）を求める（ステップＳ１５０）。ＦＡＴ領域には、ユーザデータ領域ＤＡに記録されたファイルのクラスタチェーンに関する情報が記録されているため、全ファイルのクラスタチェーンを辿っていくことで、最大書込アドレスＥＡを求めることができる。なお、ＦＡＴ１とＦＡＴ２には同一の情報が記録されているため、どちらの情報を解析してもよい。
【００７５】
最大書込アドレスＥＡを求めると、フラッシュコントローラ１３０は、この最大書込アドレスＥＡと第１フラッシュメモリＦＬ１の最終アドレスであるアドレスＡｎとを比較して、最大書込アドレスＥＡがアドレスＡｎを超えているかを判断する（ステップＳ１６０）。この判断の結果、最大書込アドレスＥＡがアドレスＡｎを超えていれば（ステップＳ１６０：Ｙｅｓ）、既に、ユーザデータが第２フラッシュメモリＦＬ２にも書き込まれており、動作モードは容量優先モードであると判断できるため（図４参照）、次のようにアドレスポインタＡＰ２，ＡＰ３の値を設定する。すなわち、アドレスポインタＡＰ３の値を、最大書込アドレスＥＡに設定し、アドレスポインタＡＰ２の値を、アドレスＡｎの２倍のアドレス値から最大書込アドレスＥＡを差し引いたアドレス（２Ａｎ−ＥＡ）とする（ステップＳ１７０）。こうして求められたアドレスポインタＡＰ２とアドレスポインタＡＰ３とは、第１フラッシュメモリＦＬ１と第２フラッシュメモリＦＬ２との実アドレスにおいて、同一のアドレスを示すことになる（図３，図４参照）。
【００７６】
上記ステップＳ１６０において、最大書込アドレスＥＡが、アドレスＡｎ以下であると判断された場合には（ステップＳ１６０：Ｎｏ）、未だ、第１フラッシュメモリＦＬ１にユーザデータ領域ＤＡが残存しており、動作モードはデータ保障モードであると判断できる。そのため、フラッシュコントローラ１３０は、アドレスポインタＡＰ２の値をアドレスＡｎとし、アドレスポインタＡＰ３の値をアドレス（Ａｎ＋１）とする（ステップＳ１８０）（図２参照）。
【００７７】
以上の処理により、アドレスポインタＡＰ１〜ＡＰ３の値を設定すると、フラッシュコントローラ１３０は、これらの値をレジスタ１４５に記録し（ステップＳ１９０）、一連のポインタ設定処理を終了して、メイン処理に処理を戻す。
【００７８】
（Ｃ３）ライト処理：
図７は、上述したメイン処理のステップＳ４０で実行されるライト処理のフローチャートである。このライト処理は、ホストから受信したライトデータをフラッシュメモリに書き込むための処理である。
【００７９】
この処理が実行されると、まず、フラッシュコントローラ１３０は、ホストからＵＳＢ制御回路１２０を介して受信したライトコマンドを解析して、書き込み先のアドレス（以下、「ライトアドレスＷＡ」という）を求める（ステップＳ２００）。
【００８０】
続いて、フラッシュコントローラ１３０は、レジスタ１４５を参照して、ライトアドレスＷＡが、アドレスポインタＡＰ１が示すアドレスよりも低いアドレスであるかを判断する（ステップＳ２１０）。この判断の結果、ライトアドレスＷＡが、アドレスポインタＡＰ１が示すアドレスよりも低いアドレスであれば（ステップＳ２１０：Ｙｅｓ）、第１フラッシュメモリＦＬ１の管理領域ＭＡに対する書き込みであると判断できる（図３，４参照）。そのため、フラッシュコントローラ１３０は、第１フラッシュメモリＦＬ１のライトアドレスＷＡに、ライトデータを書き込み、更に、第２フラッシュメモリＦＬ２の実アドレスＷＡ（図３の実アドレスＢ０〜Ｂ５のいずれか）に、ライトデータから生成したＥＣＣデータを書き込む（ステップＳ２２０）。
【００８１】
図８は、上記ステップＳ２２０において、データの書き込みを行う際のバススイッチ１５０の内部構成を示す説明図である。図示するように、この場合には、バススイッチ１５０は、フラッシュコントローラ１３０を内部のバッファＢＦ１とＥＣＣエンコーダ１６０とに分岐して接続するとともに、バッファＢＦ１と第１フラッシュメモリＦＬ１とを接続し、さらに、ＥＣＣエンコーダ１６０と第２フラッシュメモリＦＬ２とを接続する。このようなバススイッチ１５０の構成によれば、第１フラッシュメモリＦＬ１にライトデータを出力し、第２フラッシュメモリＦＬ２に、そのデータから生成されたＥＣＣデータを出力することができる。
【００８２】
上記ステップＳ２２０によって管理領域ＭＡに対するライトデータの書き込み、およびＥＣＣデータの書き込みが終了すると、フラッシュコントローラ１３０は、図６で説明したポインタ設定処理を実行する（ステップＳ２３０）。こうすることで、データ記憶装置１０の電源投入直後でなくても、データ記憶装置１０のフォーマット完了時に、アドレスポインタＡＰ１〜ＡＰ３の値を適切に設定することができる。
【００８３】
上記ステップＳ２１０において、ライトアドレスＷＡが、アドレスポインタＡＰ１が示すアドレスよりも高いアドレスであると判断された場合には（ステップＳ２１０：Ｎｏ）、フラッシュコントローラ１３０は、次に、レジスタ１４５を参照して、ライトアドレスＷＡが、アドレスポインタＡＰ２が示すアドレスよりも低いアドレスであるかを判断する（ステップＳ２４０）。この判断の結果、ライトアドレスＷＡが、アドレスポインタＡＰ２が示すアドレスよりも低いアドレスであると判断されれば（ステップＳ２４０：Ｙｅｓ）、ライトアドレスＷＡが、アドレスポインタＡＰ１が示すアドレスとアドレスポインタＡＰ２が示すアドレスとの間の領域に存在することになるため、データ記憶装置１０の動作状態がデータ保障モードであっても容量優先モードであっても、第２フラッシュメモリＦＬ２のライトアドレスＷＡに対応するアドレスには、ＥＣＣデータが書き込まれていることになる（図２，３参照）。従って、フラッシュコントローラ１３０は、第１フラッシュメモリＦＬ１のライトアドレスＷＡにライトデータを書き込み、第２フラッシュメモリＦＬ２の同一アドレスＷＡ（実アドレス）に、ライトデータから生成されたＥＣＣデータを書き込む（ステップＳ２５０）。このときのバススイッチの内部構成は、図８に示した構成と同一である。
【００８４】
上記ステップＳ２４０において、ライトアドレスＷＡが、アドレスポインタＡＰ２よりも高いアドレスであると判断された場合には（ステップＳ２４０：Ｎｏ）、フラッシュコントローラ１３０は、次に、ライトアドレスＷＡが、第１フラッシュメモリＦＬ１の最終アドレスＡｎよりも低いアドレスであるかを判断する（ステップＳ２６０）。この判断の結果、ライトアドレスＷＡが、アドレスＡｎよりも低いアドレスであると判断されれば（ステップＳ２６０：Ｙｅｓ）、ライトアドレスＷＡが、アドレスポインタＡＰ２が示すアドレスとアドレスＡｎとの間に存在することになる。つまり、この場合には、アドレスポインタＡＰ２がアドレスＡｎよりも低いアドレスとなっているため、現在の動作状態が容量優先モードであると判断でき、また、ライトアドレスＷＡに対応する第２フラッシュメモリＦＬ２のアドレスにはＥＣＣデータが存在しないと判断することができる（図３参照）。従って、フラッシュコントローラ１３０は、第２フラッシュメモリＦＬ２に対して、ＥＣＣデータの書き込みを行うことなく、第１フラッシュメモリＦＬ１のライトアドレスＷＡにライトデータを書き込む（ステップＳ２７０）。
【００８５】
図９は、上記ステップＳ２７０においてライトデータを書き込む際のバススイッチ１５０の内部構成を示す説明図である。図示するように、この場合には、バススイッチ１５０は、フラッシュコントローラ１３０と内部のバッファＢＦ１とを接続するとともに、このバッファＢＦ１を第１フラッシュメモリＦＬ１に接続する。一方、バススイッチ１５０は、フラッシュコントローラ１３０と第２フラッシュメモリＦＬ２との接続は行わない。このようなバススイッチ１５０の構成によれば、第１フラッシュメモリＦＬ１に対してのみライトデータを書き込むことができる。
【００８６】
上記ステップＳ２６０において、ライトアドレスＷＡが、第１フラッシュメモリＦＬ１の最終アドレスＡｎよりも高いアドレス、すなわち、第２フラッシュメモリＦＬ２内のアドレスであると判断された場合には（ステップＳ２６０：Ｎｏ）、フラッシュコントローラ１３０は、次に、ライトアドレスＷＡが、アドレスポインタＡＰ３が示すアドレスよりも高いアドレスであるかを判断する（ステップＳ２８０）。この判断の結果、ライトアドレスＷＡが、アドレスポインタＡＰ３よりも高いアドレスであると判断されれば（ステップＳ２８０：Ｙｅｓ）、第２フラッシュメモリＦＬ２のＥＣＣデータが記録されている領域に対する書き込みであると判断できるため（図４参照）、フラッシュコントローラ１３０は、まず、アドレスポインタＡＰ３が示すアドレスからライトアドレスＷＡまでのデータを消去する（ステップＳ２９０）。そして、アドレスポインタＡＰ３の値をライトアドレスＷＡが示すアドレスに再設定し、アドレスポインタＡＰ２の値を「２Ａｎ−ＷＡ」に再設定した上で（ステップＳ３００）、第２フラッシュメモリＦＬ２内のライトアドレスＷＡに、ライトデータを書き込む（ステップＳ３１０）。上記ステップＳ３００において、アドレスポインタＡＰ３の値が初めてアドレス（Ａｎ＋１）を超えた場合に、データ記憶装置１０の動作状態は、データ保障モードから容量優先モードに移行することになる。
【００８７】
図１０は、上記ステップＳ３１０においてライトデータを書き込む際のバススイッチ１５０の内部構成を示す説明図である。図示するように、この場合には、バススイッチ１５０は、フラッシュコントローラ１３０を内部のバッファＢＦ２に接続するとともに、このバッファＢＦ２を第２フラッシュメモリＦＬ２に接続する。一方、バススイッチ１５０は、フラッシュコントローラ１３０と第１フラッシュメモリＦＬ１との接続は行わない。このようなバススイッチ１５０の構成によれば、第２フラッシュメモリＦＬ２に対してのみライトデータを書き込むことができる。
【００８８】
上記ステップＳ２８０において、ライトアドレスＷＡが、アドレスポインタＡＰ３よりも低いアドレスであると判断されれば（ステップＳ２８０：Ｎｏ）、ライトアドレスＷＡは、第２フラッシュメモリＦＬ２内の通常のデータを書き込む領域内のアドレスであると判断できるため、フラッシュコントローラ１３０は、ＥＣＣデータの消去を行うことなく、第２フラッシュメモリＦＬ２のライトアドレスＷＡ（図３のアドレスＢ５〜Ｂｎの範囲で、実アドレス（２Ｂｎ−ＷＡ））にライトデータの書き込みを行う（ステップＳ３１０）。この時のバススイッチ１５０の内部構成は、図１０に示した構成と同一である。
【００８９】
以上で説明したライト処理によれば、ライトアドレスＷＡと、アドレスポインタＡＰ１〜ＡＰ３等を適宜比較することで、現在のデータ記憶装置１０の動作モードに応じたデータの書き込みを適切に処理することが可能になる。
【００９０】
（Ｃ４）リード処理：
図１１は、上述したメイン処理のステップＳ５０で実行されるリード処理のフローチャートである。このリード処理は、ホストからの要求に応じてフラッシュメモリからデータを読み出すための処理である。
【００９１】
この処理が実行されると、まず、フラッシュコントローラ１３０は、ホストからＵＳＢ制御回路１２０を介して受信したリードコマンドを解析して、読み込み先のアドレス（以下、「リードアドレスＲＡ」という）を求める（ステップＳ４００）。
【００９２】
続いて、フラッシュコントローラ１３０は、レジスタ１４５を参照して、リードアドレスＲＡが、アドレスポインタＡＰ２が示すアドレスよりも低いアドレスであるかを判断する（ステップＳ４１０）。この判断の結果、リードアドレスＲＡが、アドレスポインタＡＰ２が示すアドレスよりも低いアドレスであれば（ステップＳ４１０：Ｙｅｓ）、リードアドレスＲＡに対応する第２フラッシュメモリＦＬ２のアドレスには、ＥＣＣデータが存在することになるので（図３参照）、第１フラッシュメモリＦＬ１のリードアドレスＲＡからデータを読み込むとともに、第２フラッシュメモリＦＬ２のリードアドレスＲＡ（実アドレス）からＥＣＣデータを読み込む（ステップＳ４２０）。フラッシュコントローラ１３０がこれらのデータを読み込む時に、バススイッチ１５０内では、ＥＣＣデコーダ１７０によって、エラーチェックおよびエラー補正が行われる（ステップＳ４３０）。エラーチェックおよびエラー補正がなされると、フラッシュコントローラ１３０は、読み込んだデータをＵＳＢ制御回路１２０を通じてホストに転送する（ステップＳ４４０）。
【００９３】
図１２は、上記ステップＳ４２０において、データを読み込む際のバススイッチ１５０の内部構成を示す説明図である。図示するように、この場合には、バススイッチ１５０は、フラッシュコントローラ１３０と内部のＥＣＣデコーダ１７０とを接続するとともに、第１フラッシュメモリＦＬ１と第２フラッシュメモリＦＬ２とをＥＣＣデコーダ１７０に接続する。このようなバススイッチ１５０の構成によれば、第１フラッシュメモリＦＬ１から読み込まれたデータと第２フラッシュメモリＦＬ２から読み込まれたＥＣＣデータとに基づきＥＣＣデコーダ１７０によってエラーのチェックやデータ補正を行うことができる。エラーが発生しなかった場合や、データが補正された場合には、そのデータが、フラッシュコントローラ１３０を通じてホストに出力される。これに対して、エラーが発生してデータが補正できなかった場合には、その旨がフラッシュコントローラ１３０を通じてホストに通知される。
【００９４】
上記ステップＳ４１０において、リードアドレスＲＡが、アドレスポインタＡＰ２が示すアドレスよりも高いアドレスであると判断された場合には（ステップＳ４１０：Ｎｏ）、フラッシュコントローラ１３０は、次に、リードアドレスＲＡが、第１フラッシュメモリＦＬ１の最終アドレスＡｎよりも低いアドレスであるかを判断する（ステップＳ４５０）。この判断の結果、リードアドレスＲＡが、アドレスＡｎよりも低いアドレスであると判断されれば（ステップＳ４５０：Ｙｅｓ）、リードアドレスＲＡが、アドレスポインタＡＰ２が示すアドレスとアドレスＡｎとの間に存在することになる。つまり、この場合には、アドレスポインタＡＰ２がアドレスＡｎよりも低いアドレスとなっているため、現在の動作状態が容量優先モードであると判断でき、また、リードアドレスＲＡに対応する第２フラッシュメモリＦＬ２のアドレスにはＥＣＣデータが存在しないと判断することができる（図３参照）。従って、フラッシュコントローラ１３０は、第１フラッシュメモリＦＬ１のリードアドレスＲＡからのみデータを読み込み（ステップＳ４６０）、これをホストに転送する（ステップＳ４４０）。
【００９５】
図１３は、上記ステップＳ４６０においてデータを読み込む際のバススイッチ１５０の内部構成を示す説明図である。図示するように、この場合には、バススイッチ１５０は、フラッシュコントローラ１３０と内部のバッファＢＦ３とを接続するとともに、このバッファＢＦ３を第１フラッシュメモリＦＬ１に接続する。一方、バススイッチ１５０は、フラッシュコントローラ１３０と第２フラッシュメモリＦＬ２との接続は行わない。このようなバススイッチ１５０の構成によれば、第１フラッシュメモリＦＬ１からのみデータを読み込むことができる。
【００９６】
上記ステップＳ４５０において、リードアドレスＲＡが、第１フラッシュメモリＦＬ１の最終アドレスＡｎよりも高いアドレス、すなわち、第２フラッシュメモリＦＬ２内のアドレスであると判断された場合には（ステップＳ４５０：Ｎｏ）、フラッシュコントローラ１３０は、次に、リードアドレスＲＡが、アドレスポインタＡＰ３が示すアドレスよりも低いアドレスであるかを判断する（ステップＳ４７０）。この判断の結果、リードアドレスＲＡが、アドレスポインタＡＰ３よりも低いアドレスであると判断されれば（ステップＳ４７０：Ｙｅｓ）、第２フラッシュメモリＦＬ２内の通常のデータが記録されている領域から読み込みを行うと判断できるため（図３，４参照）、フラッシュコントローラ１３０は、第２フラッシュメモリＦＬ２内のリードアドレスＲＡからデータを読み込み（ステップＳ４８０）、これをホストに転送する（ステップＳ４４０）。
【００９７】
図１４は、上記ステップＳ４８０においてデータを読み込む際のバススイッチ１５０の内部構成を示す説明図である。図示するように、この場合には、バススイッチ１５０は、フラッシュコントローラ１３０を内部のバッファＢＦ４に接続するとともに、このバッファＢＦ４を第２フラッシュメモリＦＬ２に接続する。一方、バススイッチ１５０は、フラッシュコントローラ１３０と第１フラッシュメモリＦＬ１との接続は行わない。このようなバススイッチ１５０の構成によれば、第２フラッシュメモリＦＬ２からのみデータを読み込むことができる。
【００９８】
上記ステップＳ４７０において、リードアドレスＲＡが、アドレスポインタＡＰ３よりも高いアドレスであると判断されれば（ステップＳ４７０：Ｎｏ）、第２フラッシュメモリＦＬ２のＥＣＣデータが書き込まれている領域に対してリードが行われることになる（図４参照）。容量優先モードでは、この領域は、ホストからは未使用領域であると認識される必要があるため、フラッシュコントローラ１３０は、バススイッチ１５０内のダミーデータ出力回路１８０を用いてダミーデータ「００」を生成し（ステップＳ４９０）、これをホストに転送する（ステップＳ４４０）。こうすることで、ホストからは、かかる領域に何もデータが記録されていないと認識されることになる。なお、ダミーデータとしては、「００」以外にも、例えば、「ＦＦ」や「ＡＡ」、「５５」などのデータを生成するものとしてもよい。
【００９９】
図１５は、上記ステップＳ４９０において、ダミーデータを読み込む際のバススイッチ１５０の内部構成を示す説明図である。図示するように、この場合には、バススイッチ１５０は、内部のダミーデータ出力回路１８０をフラッシュコントローラ１３０に接続し、第１フラッシュメモリＦＬ１や第２フラッシュメモリＦＬ２とフラッシュコントローラ１３０との接続は行わない。このようなバススイッチ１５０の構成によれば、ダミーデータ出力回路１８０からダミーデータのみを読み込むことができる。
【０１００】
以上で説明したリード処理によれば、リードアドレスＲＡと、アドレスポインタＡＰ２，ＡＰ３等を適宜比較することで、現在のデータ記憶装置１０の動作モードに応じて、適切な領域から通常のデータやＥＣＣデータを読み出すことが可能になる。
【０１０１】
Ｄ．効果：
以上、本実施例のデータ記憶装置１０の詳細な構成およびその処理について説明した。本実施例のデータ記憶装置１０によれば、第１フラッシュメモリＦＬ１の記憶領域が残存していれば、ホストから書き込み指示のあったデータを、第１フラッシュメモリＦＬ１に書き込み、さらに、そのデータを補正するためのＥＣＣデータを第２フラッシュメモリＦＬ２に書き込む。そのため、仮に、第１フラッシュメモリＦＬ１に記録されたデータが何らかの原因で損傷したとしても、第２フラッシュメモリＦＬ２に書き込まれたＥＣＣデータを用いることで、これを補正することができる。
【０１０２】
更に、本実施例のデータ記憶装置１０は、第１フラッシュメモリＦＬ１の残容量がゼロとなれば、第２フラッシュメモリＦＬ２に既に書き込まれていたＥＣＣデータを消去しつつ、この第２フラッシュメモリＦＬ２にもホストから転送されたデータを書き込む。そのため、２つのフラッシュメモリを備えたデータ記憶装置１０の記憶容量を有効に利用することが可能になる。以上より、本実施例によれば、データの信頼性と記憶容量の有効利用との調整を図り、機能的なデータ記憶装置を提供することが可能になる。
【０１０３】
Ｅ．変形例：
以上、本発明の実施例について説明したが、本発明はこのような実施例に限定されず、その趣旨を逸脱しない範囲で種々の構成を採ることができることはいうまでもない。例えば、ハードウェアによって実現した機能は、ソフトウェアによって実現するものとしてもよい。そのほか、以下のような変形が可能である。
【０１０４】
（Ｅ１）変形例１：
上記実施例では、データ保障モードにおいて、第２フラッシュメモリＦＬ２に対して、ＥＣＣデータを記録するものとした。これに対して、第２フラッシュメモリＦＬ２には、第１フラッシュメモリＦＬ１に書き込む内容と同一のデータを書き込むものとしてもよい。このような構成によれば、データの冗長性を高めることができるため、耐障害性を向上させることができる。また、このような構成によれば、両者のデータを対比するだけでエラーのチェックを行うことができるのでデータ記憶装置１０の処理負担を軽減することができる。
【０１０５】
かかる構成を採用する場合において、第１フラッシュメモリＦＬ１に記録されたデータと、第２フラッシュメモリＦＬ２に記録されたデータとのどちらが正常なデータであるかは、フラッシュメモリに標準的に記録されるＥＣＣデータを利用することで判別することができる。汎用的なフラッシュコントローラとＮＡＮＤ型フラッシュメモリとを備えるデータ記憶装置では、一つのフラッシュメモリの中で、２０４８バイトのデータにつき、６４バイトのＥＣＣデータが標準的に記録される。従って、このＥＣＣデータを用いて、フラッシュメモリ内に記録されたデータのエラーチェックを行い、エラーの発生していない方のフラッシュメモリから出力されたデータをホストに転送することで、正常なデータを出力することが可能になる。
【０１０６】
なお、本変形例では、第２フラッシュメモリＦＬ２に対して、第１フラッシュメモリＦＬ１と同一内容のデータを書き込むものとしたが、その他にも、例えば、第２フラッシュメモリＦＬ２に対して、第１フラッシュメモリＦＬ１に書き込むデータの各ビットを反転させたデータを書き込むものとしてもよい。
【０１０７】
（Ｅ２）変形例２：
上記実施例では、アドレスポインタを用いることで、フラッシュメモリ内の管理領域ＭＡとユーザデータ領域ＤＡとの判別や、通常のデータが書き込まれている領域とＥＣＣデータが書き込まれている領域との判別を行うものとした。これに対して、例えば、フラッシュメモリ内の個々のアドレスにデータが記憶されているか否かを管理するテーブルを用いることによっても上記実施例と同様の処理を行うことができる。
【０１０８】
図１６は、第２フラッシュメモリＦＬ２内のデータの記憶状態を表すテーブルの一例を示す説明図である。このテーブルＴＢＬには、図４に示した第２フラッシュメモリＦＬ２内の仮想アドレス（Ａｎ＋１）から仮想アドレス（２Ａｎ−ＡＰ１）までの個々のアドレスについて、それぞれ１ビットの領域が割り当てられている。この各ビットのビット状態は、そのビットに対応するアドレスにデータが記憶されているか否かを表している。つまり、「１」の場合には、データが記憶されており、「０」の場合にはデータが記憶されていないことを表す。
【０１０９】
フラッシュコントローラ１３０は、第２フラッシュメモリＦＬ２にＥＣＣデータを書き込むデータ保障モード時には、このテーブルＴＢＬには、何も書き込みを行わないものとする。つまり、データ保障モード時には、テーブルＴＢＬの各ビットは、「０」のままとなる。
【０１１０】
これに対して、第２フラッシュメモリＦＬ２に通常のデータを書き込む容量優先モードでは、第２フラッシュメモリＦＬ２にデータを書き込むと、そのライトアドレスに対応するテーブルＴＢＬ内のビットを「１」にセットする。こうすることで、第２フラッシュメモリＦＬ２内のどのアドレスにデータの書き込みが行われたかを容易に判別することができる。
【０１１１】
以降、フラッシュコントローラ１３０は、このテーブルのビット状態を参照することで、第２フラッシュメモリＦＬ２にＥＣＣデータを書き込むべきか否か、あるいは、第２フラッシュメモリＦＬ２からＥＣＣデータを読み込むべきか否かを容易に判別することができる。例えば、第１フラッシュメモリＦＬ１にデータを書き込む際に、第１フラッシュメモリＦＬ１内のライトアドレスに対応する第２フラッシュメモリＦＬ２のアドレスのテーブルＴＢＬ上のビットが「１」であれば、第２フラッシュメモリＦＬ２のそのアドレスには既に通常のデータが記録されていると判断することができる。従って、この場合には、第１フラッシュメモリＦＬ１に対してのみデータを書き込む。また、第１フラッシュメモリＦＬ１にデータを書き込む際に、第１フラッシュメモリＦＬ１内のライトアドレスに対応する第２フラッシュメモリＦＬ２のアドレスのテーブル上のビットが「０」であれば、未だ、第２フラッシュメモリＦＬ２には通常のデータが書き込まれていないと判断できる。従って、この場合には、第１フラッシュメモリＦＬ１にデータを書き込むとともに、第２フラッシュメモリＦＬ２にＥＣＣデータを書き込むことができる。
【０１１２】
以上で説明した変形例によれば、テーブルＴＢＬを用いることで、第２フラッシュメモリＦＬ２内の書き込み状態を詳細に管理することができる。従って、容量の小さなデータをランダムなアドレスに書き込むような使用状態においても、通常のデータやＥＣＣデータの読み書きを適切に行うことが可能になる。
【０１１３】
（Ｅ３）変形例３：
上記実施例では、第１フラッシュメモリＦＬ１のデータ容量がゼロとなった場合に、データ記憶装置１０の動作状態が、自動的に、データ保障モードから容量優先モードに移行するものとして説明した。これに対して、データ記憶装置１０にモード切換スイッチを設け、このスイッチの設定によって動作状態が変化するものとしてもよい。こうすることで、ユーザはデータ記憶装置１０の利用形態に応じて柔軟に動作モードを設定することができる。例えば、重要なデータを保存する目的では、第２フラッシュメモリＦＬ２に対するデータの書き込みを制限することで、データ保障モードにデータ記憶装置１０を強制的に設定し、容量の大きなデータを保存する目的では、容量優先モードにデータ記憶装置１０を強制的に設定することができる。データ記憶装置１０は、デフォルトの状態では、データの信頼性を向上させるため、データ保障モードに設定されているものとすることができる。
【０１１４】
このような動作モードの設定は、物理的なスイッチの操作ではなく、ソフトウェア的に行うものとしてもよい。ソフトウェア的に実現する方法としては、例えば、モード切替のための専用のアプリケーションをホストにインストールし、このアプリケーションが、データ記憶装置１０にモード切替コマンドを発行することでフラッシュコントローラ１３０あるいはＵＳＢ制御回路１２０がそのコマンドを解析し、動作モードを切り換えるといった方法がある。
【０１１５】
（Ｅ４）変形例４：
上記実施例では、第１フラッシュメモリＦＬ１に書き込むデータと、第２フラッシュメモリＦＬ２に書き込むＥＣＣデータとは、同一のデータ容量を有するものとした。そのため、第１フラッシュメモリＦＬ１と第２フラッシュメモリＦＬ２とは同一の容量を有するものとして説明した。しかし、第２フラッシュメモリＦＬ２に必要な記憶容量は、ＥＣＣデータのサイズに応じて変化するため、第１フラッシュメモリＦＬ１と第２フラッシュメモリＦＬ２とは、異なるデータ容量であっても構わない。例えば、第１フラッシュメモリＦＬ１に書き込むデータよりも第２フラッシュメモリＦＬ２に書き込むＥＣＣデータのデータ長が短ければ、第２フラッシュメモリＦＬ２のデータ容量を、第１フラッシュメモリＦＬ１のデータ容量よりも少なくすることができる。
【０１１６】
また、第１フラッシュメモリＦＬ１に書き込むデータと、第２フラッシュメモリＦＬ２に書き込むＥＣＣデータのデータ長が同一であっても、第２フラッシュメモリＦＬ２の方が大きいデータ容量を有していてもよい。この場合、データ記憶装置１０がデータ保障モードで動作している場合には、第２フラッシュメモリＦＬ２のデータ容量を活かすことができないが、容量優先モードに移行した場合には、第２フラッシュメモリＦＬ２のデータ容量が多ければ、それだけ、全体のデータ容量が増加することになる。
【０１１７】
（Ｅ５）変形例５：
上記実施例では、図４に示したように、容量優先モード時には、第１フラッシュメモリＦＬ１の最終実アドレスと、第２フラッシュメモリＦＬ２の最終実アドレスが結合するようにアドレスの管理を行うものとした。これに対して、第１フラッシュメモリＦＬ１の最終実アドレスと、第２フラッシュメモリＦＬ２内のユーザデータ領域の先頭実アドレスとが結合するようにアドレス管理を行うものとしてもよい。このような構成では、容量優先モードに動作状態が移行した場合に、第２フラッシュメモリＦＬ２内の古いＥＣＣデータから順に消去を行うものとする。
【０１１８】
（Ｅ６）変形例６：
上記実施例では、データ記憶装置１０の動作状態が、データ保障モードから容量優先モードに移行した後に、再度、データ保障モードに移行することについては言及していない。しかし、以下の方法をとることにより、再度、データ保障モードに移行することは可能である。すなわち、容量優先モードに移行した後に、第１フラッシュメモリＦＬ１あるいは第２フラッシュメモリＦＬ２からデータが消去され、記憶されているデータの全容量が第１フラッシュメモリＦＬ１のユーザデータ領域ＤＡ以下となった場合に、デフラグメンテーションを実行し、全てのデータを、第１フラッシュメモリＦＬ１のユーザデータ領域に移動させる。その上で、第１フラッシュメモリＦＬ１に移動された個々のデータからＥＣＣデータを生成し、これを第２フラッシュメモリＦＬ２に記録する。以上の処理を実行することで、容量優先モードから、再度、データ保障モードに動作状態を移行させることが可能である。かかる処理は、記憶されているデータの全容量が第１フラッシュメモリＦＬ１のユーザデータ領域以下となった場合に自動的に実行するものとしてもよいし、データ記憶装置１０に設けた物理的なスイッチの操作や、ホストにインストールした専用のアプリケーションによる操作によって実行するものとしてもよい。
【０１１９】
（Ｅ７）変形例７：
上記実施例では、データ記憶装置１０の動作状態が容量優先モードであっても、第２フラッシュメモリＦＬ２にＥＣＣデータが残存している限りは、このＥＣＣデータを用いてエラー補正等を行うものとした。これに対して、動作状態が容量優先モードに切り替わった場合には、ＥＣＣデータをすべて消去、もしくは、ないものとして扱うものとしてもよい。このような構成であれば、容量優先モードにおいて第２フラッシュメモリＦＬ２にＥＣＣデータが存在するか否かの判断を行う必要がなくなるため、処理負担が軽減され、読み書きスピードを向上させることが可能になる。
【０１２０】
（Ｅ８）変形例８：
上記実施例では、データ記憶装置１０は、記憶デバイスとしてフラッシュメモリを備えるものとした。これに対して、例えば、ハードディスクドライブや書き換え可能な光ディスクなどを記憶デバイスとして備えるものとしてもよい。また、上記実施例では、フラッシュメモリを２つ備えるものとしたが、その数はこれに限られず、偶数個のフラッシュメモリを備えるものとすることができる。この場合、２つのフラッシュメモリを１組として、各組のフラッシュメモリに対して実施例と同様の処理を行うものとすることができる。また、上記実施例では、物理的に異なる２つのフラッシュメモリを備えるものとしたが、１つのフラッシュメモリ内の記憶領域を論理的に２つの領域に分割し、分割した一方の領域を、上記実施例の第１フラッシュメモリＦＬ１と同様に扱い、他方を上記実施例の第２フラッシュメモリＦＬ２と同様に扱うものとしてもよい。
【０１２１】
（Ｅ９）変形例９：
上記実施例では、データ記憶装置１０はＦＡＴ形式によってフォーマットされるものとして説明したが、フォーマットの形式はこれに限られない。例えば、ＮＴＦＳやＨＰＦＳ、Ｌｉｎｕｘ（登録商標）ＥＸＴ等、様々な形式に応用することが可能である。
【０１２２】
また、上記実施例では、第１フラッシュメモリＦＬ１や第２フラッシュメモリＦＬ２のデータの記憶場所のことを、「アドレス」として説明したが、かかる用語は、フォーマットの種類やオペレーティングシステム、記憶デバイスの種類に応じて、「セクタ」や「クラスタ」、「ブロック」、「ブロックアドレス」などと適宜読み替えることができる。
【図面の簡単な説明】
【０１２３】
【図１】データ記憶装置１０の概略構成を示す説明図である。
【図２】データ保障モード時のデータ記憶装置の内部メモリマップを示す説明図である。
【図３】容量優先モード時のデータ記憶装置の内部メモリマップを示す説明図である。
【図４】フラッシュコントローラ１３０が用いる仮想アドレスと、ホストから認識可能なアドレス空間とを示す説明図である
【図５】メイン処理のフローチャートである。
【図６】ポインタ設定処理のフローチャートである。
【図７】ライト処理のフローチャートである。
【図８】バススイッチ１５０の内部構成を示す説明図である。
【図９】バススイッチ１５０の内部構成を示す説明図である。
【図１０】バススイッチ１５０の内部構成を示す説明図である。
【図１１】リード処理のフローチャートである。
【図１２】バススイッチ１５０の内部構成を示す説明図である。
【図１３】バススイッチ１５０の内部構成を示す説明図である。
【図１４】バススイッチ１５０の内部構成を示す説明図である。
【図１５】バススイッチ１５０の内部構成を示す説明図である。
【図１６】第２フラッシュメモリＦＬ２内のデータの記憶状態を表すテーブルの一例を示す説明図である。
【符号の説明】
【０１２４】
１０...データ記憶装置
１１０...ＵＳＢコネクタ
１２０...ＵＳＢ制御回路
１３０...フラッシュコントローラ
１４０...アドレス変換回路
１４５...レジスタ
１５０...バススイッチ
１６０...ＥＣＣエンコーダ
１７０...ＥＣＣデコーダ
１８０...ダミーデータ出力回路
【図１】
0004700562.tif 000002
【図２】
0004700562.tif 000003
【図３】
0004700562.tif 000004
【図４】
0004700562.tif 000005
【図５】
0004700562.tif 000006
【図６】
0004700562.tif 000007
【図７】
0004700562.tif 000008
【図８】
0004700562.tif 000009
【図９】
0004700562.tif 000010
【図１０】
0004700562.tif 000011
【図１１】
0004700562.tif 000012
【図１２】
0004700562.tif 000013
【図１３】
0004700562.tif 000014
【図１４】
0004700562.tif 000015
【図１５】
0004700562.tif 000016
【図１６】
0004700562.tif 000017