(57)【要約】【課題】ストライピング記録を行う記録装置において、ストライピング順に転送するため大容量の転送バッファを必要とし、また1ストライピング単位を転送するまでは並列転送が行えない。【解決手段】ストライピング単位よりも小さいブロック単位で複数の転送バッファメモリを切り替えながらホストインタフェースと複数の転送バッファメモリとの間でデータ転送するとともに、ストライピング単位で連続して複数の転送バッファメモリと複数の記憶手段との間でデータ転送するように、切替手段と複数の記憶媒体制御手段とを制御する。【選択図】図１
2006018419.tif 000002
【特許請求の範囲】
【請求項１】
ホストインタフェースを介してホスト機器との間で入出力されるデータを所定のストライピング単位で複数の記憶媒体にストライピング記録および再生を行う記憶装置であって、
前記複数の記憶媒体のそれぞれに対して入出力されるデータを一時的に記憶する複数の転送バッファメモリと、
対応する前記複数の記憶媒体と前記複数の転送バッファメモリとの間のデータ転送を制御する複数の記憶媒体制御手段と、
前記ホストインタフェースと前記複数の転送バッファメモリとの間のデータ転送経路を切り替える切替手段と、
前記ストライピング単位よりも小さいブロック単位で前記複数の転送バッファメモリを切り替えながら前記ホストインタフェースと前記複数の転送バッファメモリとの間でデータ転送するとともに、ストライピング単位で連続して前記複数の転送バッファメモリと前記複数の記憶手段との間でデータ転送するように、前記切替手段と前記複数の記憶媒体制御手段とを制御する制御手段とを有する記憶装置。
【請求項２】
前記ホスト機器は、前記ホスト機器の記憶領域に前記複数の記憶媒体のそれぞれに対応する未転送領域の先頭アドレスを記憶し、
前記制御手段は、前記記憶領域と前記転送バッファメモリとの間のデータ転送の切り替え時に更新する転送カウンタを有し、
前記転送カウンタの更新時に、前記記憶媒体に対応する前記記憶領域のストライピング単位の境界の有無を判定して前記記憶媒体に対応する次のストライピング単位の先頭アドレスまで前記転送カウンタを補正する請求項１記載の記録装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリカード、ハードディスク等の記憶手段を複数使用した、ホスト機器に対しては単一のドライブとしてインターフェースする記憶装置に関する。
【背景技術】
【０００２】
フラッシュメモリを用いたカード型の記録媒体であるメモリカードとしては、コンパクトフラッシュ（登録商標）、ＳＤメモリーカード等が開発されている。メモリカードは、他の記録媒体と比較して小型、低消費電力、ランダムアクセス可能等の特長があり、このため、デジタルスチルカメラ、携帯電話等の携帯機器に広く利用されている。
【０００３】
しかしながら、例えばメモリカードに映像情報のような大容量のデータをリアルタイムに記録しようとした場合には、メモリカードで実現できるデータ転送レートと記憶容量によって、記録する画面の解像度、フレームレート、圧縮率、記録可能時間等が制限され、その応用範囲が限られる。例えば、メモリカードを記録媒体とするビデオカメラであれば、磁気テープを記録媒体とするＶＴＲと同等の高画質、長時間記録を実現することは困難である。
【０００４】
このようなメモリカードの短所を補うため、装置内に複数のメモリカードを装着し、ストライピングによって大容量、高転送レートを持つ単一のディスク装置（ＲＡＩＤ  ０：Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ  ０）を実現する方式が、特許文献１に開示されている。
【０００５】
また特許文献２には、５１２バイトのブロック単位でアクセスできる複数の半導体メモリ装置をブロック単位でストライピングし、１Ｍバイトのデータ転送バッファと複数の半導体メモリ装置との間で並列にデータ転送を行うことによってデータ転送バッファ上でデータをまとめ、データ転送バッファとホスト機器との間で単一のＳＣＳＩインターフェースを介してデータ転送するような、記憶装置が開示されている。
【０００６】
ここで、現在コンピュータシステムやコンピュータを組み込んだシステムにおいて一般的に用いられているバス（ホストバス）について、ＰＣＩバスを例に挙げて説明する。ＰＣＩバスはクロック周波数３３ＭＨｚ、データ幅３２ビットのバスであり、１クロックで４バイトのデータ転送を行うことができる。このとき、転送先のアドレスはデータと同じ３２ビットのバスを時分割して示される。すなわち、ＰＣＩバスにおける１回の転送は、転送先のアドレスおよび転送コマンドを示すクロックサイクル（アドレスフェーズ）と、それに続く複数の転送データを示す複数のクロックサイクル（データフェーズ）から成り、アドレスフェーズで示されたアドレスを先頭アドレスとし、連続するデータ数をメモリサイズとするメモリ領域のデータを連続転送することができる。したがって、ＰＣＩバスの瞬間的な最大転送レートは１３２ＭＢ／ｓとなる。
【０００７】
一方、例えばＳＤメモリーカードでは、５０ＭＨｚクロックで４ビット幅のバスによるデータ転送が規定されており、最大２５ＭＢ／ｓのデータ転送が可能である。このように、ＳＤメモリーカードの最大データ転送レートは、ＰＣＩバスの最大データ転送レートよりずっと小さいので、ＳＤメモリーカードとシステムのメインメモリとの間でＰＣＩバスを介してデータ転送を行う場合には、データ転送バッファメモリが必要になる。
【０００８】
特に、複数のＳＤメモリーカードに対するデータ転送を、１つのＰＣＩバス上で時分割で切り替えて行う場合、切り替えの方法によっては大きなデータ転送バッファメモリが必要になるので注意が必要である。
【０００９】
例えば特許文献２のように、５１２バイトのブロック毎に、すなわちストライピング単位を５１２バイトとして８つのメモリカードにストライピングしている場合、各メモリカードにはメインメモリ上で連続したアドレスのデータが１ブロック（５１２バイト）単位で記録されることになる。そして各メモリカード〜データ転送バッファ間ではほぼ同時並列に低速でデータ転送を行う一方、ホストバスを介してデータ転送バッファ〜メインメモリ間ではアドレス順に高速転送する。１つのメモリカードのデータをホストバス上で転送している間、他のメモリカードは、データ転送バッファへのデータ転送を並行して行わなければ全体として高速なデータ転送が実現できないので、少なくとも５１２バイトのブロックサイズのメモリカード枚数分、すなわちここでは８倍のデータ転送バッファが必要になる。
【００１０】
ところで、各メモリカードのアクセス単位である５１２バイトのブロックサイズは、ソフトウエアから見たドライブの互換性を高めるために、従来のハードディスクにおけるアクセス単位（セクタ）と同じに設定されたものである。これに対して、メモリカードで使用されているフラッシュメモリの消去単位・書き込み単位は、内部メモリのセル構造に応じて最適に選ばれ、メモリ容量が大きくなるに従って５１２バイトよりも大きくなる傾向がある。そのような場合でも、ホスト機器のソフトウエア上の互換性を考慮して５１２バイト単位のアクセスを実現するためには、転送バッファを使っていわゆるリード・モデファイ・ライト処理を行うことが必要となる。例えば、フラッシュメモリの消去単位が２Ｋバイトであるときに５１２バイトのみの書き込みを行うと、メモリカード内部では書き替える５１２バイトを含む２Ｋバイトをいったん転送バッファへ読み出し、そのうちの５１２バイトを転送バッファ上で書き替え、書き替えられた転送バッファの内容２Ｋバイトをフラッシュメモリ上の消去済の消去単位ブロックへ書き込む処理を行う。
【００１１】
このため、フラッシュメモリの消去単位より小さいブロックのみの書き込み性能は、そのフラッシュメモリの最大書き込み性能よりも低くなる。このとき、ストライピング単位が消去単位よりも小さいと、全てのメモリカードに対してリード・モデファイ・ライトが必要になるので、書き込みが遅いセクタ数の範囲が大きくなってしまう。したがって、より高い転送レートを実現するためには、ストライピング単位をフラッシュメモリの消去単位と同じか、その整数倍のサイズとすることが望ましい。
【特許文献１】特開２０００−２０７１３７号公報（第３頁、図１）
【特許文献２】特開平８−２３５０７６号公報（第５〜６頁、図７）
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながらこのような従来の記憶装置の場合、データ転送バッファに必要な容量は、ストライピング単位（フラッシュメモリの消去単位またはその整数倍）とメモリカード数の積になるので、さらに大きな容量のバッファが必要になるという問題点があった。
【００１３】
またストライピングを行う場合には、データ転送開始時に最初にアクセスするデータブロックについて、メモリカードとデータ転送バッファとの間でデータ転送が完了するまでの待ち時間が生じる。そして、ストライピング単位が大きくなると上述のようにデータ転送バッファサイズが大きくなるためにこの時間が長くなることにつながる。その結果、一連のデータ転送の開始時におけるレイテンシが増加するという問題点があった。
【００１４】
本発明は上記の問題点に鑑み、複数メモリカードの並列動作によるストライピングを使用した高レートデータ転送を、小容量の転送バッファを用いて実現可能とする記憶装置を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明は上記の問題点を解決するために、
ホストインタフェースを介してホスト機器との間で入出力されるデータを所定のストライピング単位で複数の記憶媒体にストライピング記録および再生を行う記憶装置であって、前記複数の記憶媒体のそれぞれに対して入出力されるデータを一時的に記憶する複数の転送バッファメモリと、対応する前記複数の記憶媒体と前記複数の転送バッファメモリとの間のデータ転送を制御する複数の記憶媒体制御手段と、前記ホストインタフェースと前記複数の転送バッファメモリとの間のデータ転送経路を切り替える切替手段と、前記ストライピング単位よりも小さいブロック単位で前記複数の転送バッファメモリを切り替えながら転送データを前記ホストインタフェースと前記複数の転送バッファメモリとの間でデータ転送するとともに、ストライピング単位で連続して前記複数の転送バッファメモリと前記複数の記憶手段との間でデータ転送するように、前記切替手段と前記複数の記憶媒体制御手段とを制御する制御手段とを有する構成としたものである。
【発明の効果】
【００１６】
上記のように本発明によれば、記憶装置を構成する複数の低速な記憶媒体の特性によって決まるストライピング単位が比較的大きい場合でも、ストライピング単位とは無関係でより小さい所定のデータ数毎に、ホスト機器との間のデータ転送を切り替えることができるので、ホスト機器から見たデータアクセスの待ち時間を小さくできるという利点がある。また、データ転送の単位を小さくできるので、データＦＩＦＯの容量を小さくでき、装置規模の増加を抑制することができる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照しながら本発明の実施形態について説明する。本発明の実施形態では、記憶媒体として４枚のＳＤメモリーカードを用いて、論理的に１つのＲＡＩＤドライブを構成した記憶装置について説明する。なお、記憶媒体としてはコンパクトフラッシュ（登録商標）等の他のメモリカードでもよいし、光ディスク、ハードディスク等でもよい。また、その数についても４つ以外に２つ、８つ等でも構わない。
【００１８】
（実施の形態１）
まず、本発明の基本構成を実施の形態１として、説明を簡略化するために次のような仮定の下で説明する。すなわち、ホスト機器がメインメモリ上に転送用バッファとして確保するメモリ領域は、物理的または論理的に連続した一つの領域であるということである。しかしながら、実施の形態２で後述するように、メモリ領域が複数の領域に分かれた場合であっても基本的な構成は共通である。
【００１９】
図１は、本実施形態における記憶装置とホスト機器の構成を示すブロック図である。
本発明のＲＡＩＤドライブ１０１は、ホストインタフェース１３３を介してホスト機器１０２との間で入出力されるデータを所定のストライピング単位で複数の記憶媒体にストライピング記録および再生を行う記憶装置である。ＲＡＩＤドライブ１０１は、ＲＡＩＤドライブ１０１にデータを読み書きするホスト機器１０２と、ホストインタフェース１３３を介して接続されている。ホスト機器１０２の例としては、ビデオカメラやビデオレコーダ等の映像機器のほかに、ＰＣ等が挙げられる。ホスト機器１０２とＲＡＩＤドライブ１０１とは、一体に構成されていてもよいし、ケーブル等で接続される構成でもよい。ＲＡＩＤドライブ１０１は、複数の記憶媒体として４つのＳＤメモリーカード１１０、１１１、１１２、１１３を内蔵し、これらをホスト機器１０２に対して論理的に単一のディスクドライブとしてアクセスできるようにしている（ＲＡＩＤ  ０）。複数の転送バッファメモリとしての４つのデータＦＩＦＯ１１７、１１８、１１９、１２０は、４つのＳＤメモリーカード１１０、１１１、１１２、１１３それぞれに対して入出力されるデータを一時的に記憶するバッファメモリである。複数の記憶媒体制御手段としての４つのメモリカード制御回路１２１、１２２、１２３、１２４は、それぞれＳＤメモリーカードとデータＦＩＦＯとの間でのデータ転送を制御する。制御手段１３４は、ホストインタフェース１３３経由でホスト機器１０２から入力されたコマンドと転送データのアドレスとに基づいて、切替回路１２５および複数のメモリカード制御回路を制御する。切替手段としての切替回路１２５は、制御手段１３４からの制御信号に基づいて４つのデータＦＩＦＯ１１７、１１８、１１９、１２０とホストインタフェース１３３との間の転送経路を切り替える。
【００２０】
本実施形態において、ホスト機器１０２からのデータアクセスの最小単位は１セクタ（５１２バイト）とする。一方、４つのデータＦＩＦＯ１１７、１１８、１１９、１２０は、それぞれセクタサイズよりも小さい１２８バイトずつの容量を持ち、ホストインタフェース１３３と４つのデータＦＩＦＯとの間のデータ転送は、切替回路１２５にて１２８バイト単位で切り替えて行うものとする。
【００２１】
上記のような構成のＲＡＩＤドライブ１０１において、ホスト機器１０２から見たＲＡＩＤドライブ内データの論理的なアドレスと、４つのＳＤメモリーカード１１０、１１１、１１２、１１３それぞれの、メモリカード制御回路１２１、１２２、１２３、１２４から見たカード内データのアドレスの関係を図２に示す。各ＳＤメモリーカード１１０、１１１、１１２、１１３は、ＳＤメモリーカード規格上の最小アクセス単位である５１２バイトのブロック単位でアクセスできる。このブロックをセクタと呼び、図２では小さい四角形で表している。図２で、４つの縦に並んだセクタ列が、それぞれ４つのＳＤメモリーカード１１０、１１１、１１２、１１３の記憶領域を表している。各セクタにはＳＤメモリーカード内での通し番号であるＳＤメモリーカード内セクタ番号が与えられている。この番号が各ＳＤメモリーカード内でセクタを指定するアドレスになり、メモリカード制御回路１２１、１２２、１２３、１２４から見たカード内データのアドレスとなる。
【００２２】
同様に、ＲＡＩＤドライブ１０１内の全データを通して各セクタに通し番号であるＲＡＩＤドライブ内セクタ番号が与えられている。このＲＡＩＤドライブ内セクタ番号が、ホスト機器１０２から見た論理的アドレスとなる。図２で各セクタを表わす四角形内に、これら２種類のセクタ番号を１６進数で表示している。左側の数字がＲＡＩＤドライブ内セクタ番号、右側の数字がＳＤメモリーカード内セクタ番号を表す。また各ＳＤメモリーカード１１０、１１１、１１２、１１３には、それぞれメモリカード番号＃０、＃１、＃２、＃３を割り当てて区別することにする。
【００２３】
図２に示したように、本実施形態のＲＡＩＤドライブ１０１は、２Ｋバイト（＝４セクタ）をストライピング単位としてストライピングを行うため、ＲＡＩＤドライブ内セクタ番号は、順番に１つのＳＤメモリーカードの連続する４セクタに割り当てられ、その続きが次のＳＤメモリーカードの連続する４セクタに割り当てられるというように、４セクタ毎に４つのメモリカードを巡回するように割り当てられる。なお、ＳＤメモリーカード１１０、１１１、１１２、１１３の消去単位もストライピング単位と同じ２Ｋバイトとする。すなわち、各ＳＤメモリーカードへのデータ転送がストライピング単位である２Ｋバイトのブロック単位で行われる限り、リード・モデファイ・ライトは発生せず、これによる書き込み性能の低下はない。
【００２４】
一方、ＳＤメモリーカード内セクタ番号は、図２に示したように、ＳＤメモリーカード内の先頭セクタから縦に並んだセクタの順番に与えられる。
【００２５】
上記構成のＲＡＩＤドライブ１０１の基本的な動作について、図３、図４を参照して説明する。ここでは、ホスト機器１０２からＲＡＩＤドライブ１０１へデータを転送する場合について説明するが、ＲＡＩＤドライブ１０１からホスト機器１０２へのデータ転送の場合についても同様である。ＲＡＩＤドライブ１０１へのデータ転送の場合、ホスト機器１０２は、まず転送するデータをメインメモリ１０８上に確保されるホスト側バッファに格納し、次にＲＡＩＤドライブ１０１に対してデータ転送のコマンドを送る。これに対してＲＡＩＤドライブ１０１はコマンド解釈を行い、ホスト側バッファからＲＡＩＤドライブ内のＳＤメモリーカード１１０、１１１、１１２、１１３へデータを転送する。
【００２６】
データ転送の概要は次の通りである。制御手段１３４が、２Ｋバイトのストライピング単位よりも小さいデータＦＩＦＯサイズである１２８バイトのブロック単位で、データＦＩＦＯを切り替えながら、ホストインタフェースとデータＦＩＦＯとの間でデータ転送するように、切替回路１２５を制御する。すなわち、転送データについて、４つのＳＤメモリーカードに対応する各ストライピング単位から順番に、1ブロックずつを選択して対応するデータＦＩＦＯに転送する。そして制御手段１３４はこれと並行して、メモリカード制御回路を制御することにより、各データＦＩＦＯに蓄積されるデータをＳＤメモリーカードに対して転送し、結果として、ストライピング単位で連続してＳＤメモリーカードに対してデータ転送を行う。
【００２７】
図３は、ホスト機器１０２のホスト側バッファの概念図である。図中の数字（１６進数）はバッファ中のブロック番号を示しており、データＦＩＦＯのサイズである１２８バイトのブロックごとにこの番号が割り当てられている。バッファ上には転送すべきデータがアドレス順に並んでいる。バッファ上のデータは２Ｋバイトのストライピング単位毎にストライピングされて各ＳＤメモリーカードに転送される。すなわち、その転送先はストライピング単位０がＳＤメモリーカード＃０、ストライピング単位１がＳＤメモリーカード＃１となり、そしてストライピング単位４が再びＳＤメモリーカード＃０と、巡回するように割り当てられる。しかしながら、このバッファ上のデータが直接転送されるデータＦＩＦＯのサイズはそれぞれ１２８バイトであるため、データＦＩＦＯへの転送は各ストライピング単位を巡回して先頭から１ブロック（１２８バイト）ずつ、対応するデータＦＩＦＯ１１７、１１８、１１９、１２０に対して行われる。すなわち、ホスト側バッファからのデータ転送順をブロック番号で示すと、００、１０、２０、３０、０１、１１、２１、３１、…、０Ｆ、１Ｆ、２Ｆ、３Ｆ、４０、５０、６０、７０、４１、…というようになる。
【００２８】
図４は、ホスト機器１０２からＲＡＩＤドライブ１０１へのデータ転送をおこなったときのタイミング図である。図４において、横軸は経過時間を表している。説明の便宜上、図中には時刻として０から６８までの時刻を付してある。また、図中に記載されている数字は図３で示したホスト側バッファのブロック番号であり、ホスト側バッファ上のどのデータを転送または蓄積しているかを示している。（ａ）および（ｆ）〜（ｉ）は、各メモリからの読み出しおよび書き込み動作を示し、（ｂ）〜（ｅ）は、データＦＩＦＯでのデータ蓄積状況を示し、縦軸がデータ蓄積量を表している。また、本実施形態では便宜上、ホスト側バッファとデータＦＩＦＯとの間の転送速度は、データＦＩＦＯとＳＤメモリーカードとの間の転送速度のちょうど４倍であるとする。
【００２９】
以下、図４を用いてＲＡＩＤドライブ１０１のデータ転送について説明する。ＲＡＩＤドライブ１０１がホスト機器１０２からデータ転送のコマンドを受け取り、実際にホスト機器１０２からのデータ転送が開始されると、まず時刻０においてホスト側バッファのブロック番号００から１２８バイトのデータがＲＡＩＤドライブ１０１に対して転送される。ブロック番号００は、ＳＤメモリーカード＃０に転送されるストライピング単位０の先頭ブロックである。制御手段１３４は、ＲＡＩＤドライブ１０１に対して送られたデータ転送コマンドが示すＲＡＩＤドライブ内先頭セクタ番号にもとづいて、対応するメモリカード番号と先頭セクタのストライピング単位内でのオフセットを図２を参照して求め、この情報からブロック番号００のデータをデータＦＩＦＯ１１７に転送すると決定し、切替回路１２５を制御する。これにより、ブロック番号００からのデータはデータＦＩＦＯ１１７に転送され、蓄積される。転送は時刻１に完了し、（ｂ）の時刻１で示されるようにデータＦＩＦＯ１１７にはブロック番号００のデータ１２８バイト分が蓄積されている。
【００３０】
次に時刻１において、直前に転送したブロック番号００が属するストライピング単位０の次のストライピング単位１の先頭ブロックである、ブロック番号１０のデータがＲＡＩＤドライブ１０１に対して転送される。制御手段１３４は、直前のブロック番号００の転送時に得たメモリカード番号と先頭セクタのストライピング単位内でのオフセットに基づいて、ブロック番号１０がＳＤメモリーカード＃１に転送される先頭ブロックであることを知ることができる。制御手段１３４はこれに基づきブロック番号１０のデータをデータＦＩＦＯ１１８に転送すると決定し、切替回路１２５を制御する。これにより、ブロック番号１０のデータはデータＦＩＦＯ１１８に転送され、蓄積される。転送は時刻２に完了し、（ｃ）の時刻２で示されるようにデータＦＩＦＯ１１８にはブロック番号１０のデータ１２８バイト分が蓄積されている。
【００３１】
同様に、ブロック番号２０、ブロック番号３０のデータがデータＦＩＦＯ１１９、１２０にそれぞれ転送される（（ｄ）の時刻３、（ｅ）の時刻４）。
【００３２】
一方、制御手段１３４は時刻１において、データＦＩＦＯ１１７にデータが蓄積されたので、次にメモリカード制御回路１２１を制御してデータＦＩＦＯ１１７のデータをＳＤメモリーカード１１０に転送する。データＦＩＦＯからＳＤメモリーカードへの転送はホスト機器からデータＦＩＦＯへの転送よりも時間を要する（本実施形態では便宜上４倍）ため、（ｆ）のように時刻１で転送を開始すると、時刻５で転送を完了する。
【００３３】
同様に、データＦＩＦＯ１１８、１１９、１２０のデータはＳＤメモリーカード１１１、１１２、１１３に転送される。
【００３４】
次に、ＳＤメモリーカード１１０への転送に注目して説明する。（ｂ）の時刻４のように、ホスト側バッファのブロック番号０１のデータがデータＦＩＦＯ１１７に対して転送開始される。このとき、データＦＩＦＯ１１７にはまだブロック番号００のデータが１／４残っているが、時刻５においてブロック番号００のデータはすべてＳＤメモリーカード１１０への転送を完了し、それと同時にブロック番号０１のデータがデータＦＩＦＯ１１７への蓄積を完了するため、バッファがオーバーフローすることはない。そして（ｆ）の時刻５において、メモリカード制御回路１２１はブロック番号０１のデータをＳＤメモリーカード１１０へ転送開始する。ブロック番号００とブロック番号０１のデータは連続したデータなので、データＦＩＦＯ１１７からＳＤメモリーカード１１０へのデータ転送はブロック番号００、０１と連続して行われることになる。
【００３５】
同様に、時刻８においてブロック番号０２のデータが、時刻１２においてブロック番号０３のデータがデータＦＩＦＯ１１７に転送開始され、時刻９、時刻１３においてこれらのデータがデータＦＩＦＯ１１７からＳＤメモリーカード１１０へ転送開始される。これが繰り返され、最終的にはストライピング単位０の２Ｋバイト分のデータ、すなわちブロック番号００〜０Ｆのデータが時間的に連続してＳＤメモリーカード１１０に転送される。その結果、ＳＤメモリーカード１１０には１消去単位分のデータが連続して記録されるので、リードモディファイライドは発生せず、書き込み性能の低下はおこらない。
【００３６】
他のＳＤメモリーカードについても同様の転送が行われるため、データＦＩＦＯの容量が消去単位やセクタサイズよりも小さいにもかかわらず、ＳＤメモリーカードの書き込み性能を低下させることなくＲＡＩＤドライブ１０１へのデータ転送を実現することができる。なお、ストライピング単位４以降のデータについても引き続き連続して転送が行われ、ホスト機器１０２からのコマンドで要求された転送サイズのデータ転送を完了する。
【００３７】
（実施の形態２）
次に第２の実施の形態として、本発明における記憶装置のより一般化された状況での動作について詳細に説明する。
【００３８】
図５は、本実施形態における記憶装置とホスト機器の構成を示すブロック図である。なお、実施の形態１と同様の構成要素については同じ番号を付し、説明を省略する。図５において、ＲＡＩＤドライブ１０１はＰＣカード規格に従う形状を持ち、ホスト機器１０２との電気的インターフェースにＰＣカード規格で定められたカードバス１０３を用いている。このカードバス規格におけるデータ転送は前述のＰＣＩバスと同じであり、カードバス１０３の信号は、ＰＣＩバスブリッジと同様に働くカードバスブリッジ１０４によって、ホスト機器１０２のＰＣＩバス１０５に中継される。また、ＰＣＩバス１０５の信号は、ホストブリッジ１０６によってホストＣＰＵ１０７とメインメモリ１０８をつなぐメモリバス１０９に中継される。
【００３９】
カードバス制御回路１１６は、カードバス規格の制御手順に従ってカードバス１０３と内部レジスタバス１１４および内部ＤＭＡバス１１５の間のデータ転送を行う。切替回路１２５は、転送制御回路１２８からの制御信号に基づいて４つのデータＦＩＦＯ１１７、１１８、１１９、１２０および転送制御回路１２８とカードバス制御回路１１６の間のＤＭＡ転送信号を切り替える。コマンドレジスタ１２６は、カードバス１０３を通したホスト機器１０２からのデータ転送コマンドが書き込まれる。コマンド制御回路１２７は、コマンドレジスタ１２６に書き込まれたＲＡＩＤドライブ１０１に対するコマンドを解釈し、４つのＳＤメモリーカード１１０、１１１、１１２、１１３に対するコマンドを求め、４つのメモリカード制御回路１２１、１２２、１２３、１２４に対して、それぞれのコマンドを送出する。転送制御回路１２８は、コマンド制御回路１２７からのコマンドに基づいて、メインメモリ１０８上に確保されているホスト側バッファを、４つのＳＤメモリーカード１１０、１１１、１１２、１１３に対応する領域に分割し、切り替え回路１２５を制御して、４つのデータＦＩＦＯ １１７、１１８、１１９、１２０のデータを正しいメモリ領域に転送する。テーブルカウンタ１２９は、転送制御回路１２８の制御処理において、メモリ領域ディスクリプタテーブルの読み取りアドレスを保持する。メモリ領域ディスクリプタバッファ１３０は、４つのＳＤメモリーカード１１０、１１１、１１２、１１３に対応するメモリ領域のディスクリプタを保持する。転送カウンタ１３１は、４つのデータＦＩＦＯ１１７、１１８、１１９、１２０の転送データ数などを保持する。
【００４０】
この実施形態においても、ホスト機器からのデータアクセスの最小単位は１セクタ（５１２バイト）、４つのデータＦＩＦＯ１１７、１１８、１１９、１２０のサイズは１２８バイト、ホストバスであるカードバス上では、１２８バイト単位で４つのカードのデータ転送を切り替えるものとする。
【００４１】
なお、カードバス制御回路１１６およびコマンドレジスタ１２６がホストインタフェースに相当する。また、コマンド制御回路１２７、転送制御回路１２８、メモリ領域ディスクリプタバッファ１３０、テーブルカウンタ１２９および転送カウンタ１３１が制御手段に相当する。
【００４２】
本実施形態においても、ホスト機器１０２から見たドライブ内データの論理的なアドレスと、４つのＳＤメモリーカード１１０、１１１、１１２、１１３それぞれの、メモリカード制御回路１２１、１２２、１２３、１２４から見たカード内データのアドレスの関係は図２の通りである。
【００４３】
以上で説明したようなアドレスマッピングを前提として、以下に本実施形態のＲＡＩＤドライブ１０１の動作を説明する。図６は、ＲＡＩＤドライブ１０１とホスト機器１０２の間でのデータ転送コマンド処理の概略フローチャートである。同図において左側のフローチャートはホスト機器１０２の処理手順を、右側のフローチャートはＲＡＩＤドライブ１０１の処理手順を表している。
【００４４】
データ転送の開始にあたって、ホスト機器１０２は、まず前準備３０１を行う。前準備３０１では、メインメモリ１０８上にホスト側バッファを確保し、（このホスト側バッファを示す）後述のメモリ領域ディスクリプタテーブルと呼ばれる情報を、やはりメインメモリ１０８上に格納する。また、転送方向がＲＡＩＤドライブ１０１へのデータ書き込みの場合には、転送するデータを、確保したホスト側バッファに格納する。
【００４５】
次に、ホスト機器１０２は、コマンド書き込み３０２において、カードバス１０３上のプロトコルに従って、コマンドレジスタ１２６へデータ転送コマンドを書き込み、ＲＡＩＤドライブ１０１からのコマンド終了通知待ち状態３０３に入る。一方、カードバス１０３からのコマンドレジスタ１２６へのコマンド書き込みは、カードバス制御回路１１６によってカードバスプロトコルに従って処理され、得られたデータ転送コマンドはコマンドレジスタ１２６に格納される。コマンドレジスタ１２６からコマンドの書き込み通知を受けたコマンド制御回路１２７は、コマンド書き込み待ち状態３０５を抜けて、コマンド処理３０６に移る。
【００４６】
コマンド処理３０６では、コマンドレジスタ１２６に格納されたデータ転送コマンドに対応して、４つのＳＤメモリーカード１１０、１１１、１１２、１１３とメインメモリ１０８上に確保されたホスト側バッファとの間で、カードバス１０３を通してデータ転送を行う。このコマンド処理の詳細については後述する。
【００４７】
書き込まれたコマンドに対応する全てのデータ転送が終了したら、コマンド制御回路１２７はコマンド終了通知３０７に移り、割り込み信号線１３２によって、ホスト機器１０２にコマンド処理の終了を通知する。コマンド処理の終了通知を受けたホスト機器１０２は、必要であれば後処理３０４を行う。
【００４８】
以上のように、ホスト機器１０２からのコマンド書き込みをトリガとして、ＲＡＩＤドライブ１０１とホスト機器１０２の間でコマンド単位のハンドシェイクが行われる。このとき、上記の前準備３０１で、ホスト機器１０２がメインメモリ１０８に確保するメモリ領域には、転送しようとするデータ数以上の領域を確保する必要があるが、メインメモリは通常ホスト機器上で実行している全ての処理（プログラム）で共有されているので、転送データ数以上の連続する領域が確保できない場合があり得る。そこで、転送データ数以上の連続メモリ領域が確保できない場合には、それ以下の領域を複数確保し、それら複数の領域のサイズの合計が転送データ数以上になるようになされる。
【００４９】
一般に１つのメモリ領域は先頭アドレスとサイズによって特定できるので、先頭アドレスと領域サイズの値から成る、メモリ領域ディスクリプタと呼ばれるデータ構造を定義し、上記のように確保された複数のメモリ領域に対応する、複数のメモリ領域ディスクリプタの配列で、全体のバッファメモリ領域を特定する。この配列はメモリ領域ディスクリプタテーブルと呼ばれ、前述のようにメインメモリ１０８上に確保される。図７に、本発明の実施形態におけるメモリ領域ディスクリプタテーブルの例を示す。
【００５０】
図７では、ホスト側バッファは、アドレス０から２０００（１６進数）バイト、アドレス４８００（１６進数）からＡ００（１６進数）バイト、アドレス８０００（１６進数）から２０００（１６進数）バイトの３つのメモリ領域から構成される合計サイズ１８９４４バイト（３７セクタ）のメモリ領域であり、メモリ領域ディスクリプタテーブル４０１は、各区分領域をあらわす上記先頭アドレスとサイズの値が記憶された３つのメモリ領域ディスクリプタ４０１、４０３、４０４で構成されている。なお、図７でサイズの左側の０および１は、それぞれ次のディスクリプタが有ることと、無いことを示すＥＯＴフラグである。３つめのディスクリプタ４０４にＥＯＴフラグ１が立っていることは、ホスト側バッファが、３つめの領域で終了していることを表している。
【００５１】
また、上記コマンド書き込み３０２において、ホスト機器１０２がコマンドレジスタ１２６に書き込むコマンドのデータ構造の例を図８に示す。同図に示したように、コマンドは、データの転送方向（書き込みまたは読み出し）を表すコマンドコード５０１、転送すべきデータのＲＡＩＤドライブ１０１内先頭セクタ番号５０２、転送すべきセクタ数５０３、およびメモリ領域ディスクリプタテーブル４０１のメインメモリ１０８における先頭アドレス５０４で構成される。
【００５２】
次に、コマンド処理３０６の詳細を説明する。コマンドの書き込みを検知したＲＡＩＤドライブ１０１では、コマンド処理３０６において、コマンド制御回路１２７が、コマンドレジスタ１２６の内容を図８に示したデータ構造に従って解釈し、メモリカード制御回路１２１、１２２、１２３、１２４と、転送制御回路１２８に必要な転送パラメータと転送開始トリガを送る。
【００５３】
図９に、このときのコマンド制御回路１２７における上記コマンド処理３０６の詳細フローチャートを、転送制御回路１２８の制御フローチャートとともに示す。図９においてコマンド制御回路１２７は、まずパラメータ計算６０１で、メモリカード制御回路１２１、１２２、１２３、１２４と、転送制御回路１２８に送る転送パラメータを求める。
【００５４】
メモリカード制御回路１２１、１２２、１２３、１２４に送る転送パラメータは、４つのＳＤメモリーカード１１０、１１１、１１２、１１３それぞれにおいて転送すべきデータの、ＳＤメモリーカード内先頭セクタ番号と転送セクタ数である。
【００５５】
これ等の転送パラメータの値を図１０の例で説明する。図１０は、先頭セクタ番号５０２の値が６で、転送セクタ数５０３の値が３７（１０進。以下特に明記なき場合は１０進表記とする。）の場合の、ＲＡＩＤドライブ１０１内のセクタ番号と、４つのＳＤメモリーカード内のセクタ番号の関係を示している。図２と同様に実線の四角形が転送対象のセクタを表し、その中に書いた１６進数字の左側がＲＡＩＤドライブ１０１内のセクタ番号を、右側が各メモリカード内のセクタ番号を表している。
【００５６】
コマンドの先頭セクタ番号５０２の値は６、転送セクタ数の値は３７であるから、ＲＡＩＤドライブ内セクタ番号６の先頭セクタ７０２から、ＲＡＩＤドライブ内セクタ番号４２（１６進数で２Ａ）の末尾セクタ７０８までの３７セクタが転送対象のセクタである。
【００５７】
図に示したように、求める転送パラメータは、ＳＤメモリーカード毎に、カード番号０に対しては先頭セクタ７０１のセクタ番号４と転送セクタ数８、カード番号１に対しては先頭セクタ７０２のセクタ番号２と転送セクタ数１０、カード番号２に対しては先頭セクタ７０３のセクタ番号０と転送セクタ数１１、カード番号３に対しては先頭セクタ７０４のセクタ番号０と転送セクタ数８となる。
【００５８】
これらの転送パラメータを以下のようにして求める。コマンドの先頭セクタ７０２のセクタ番号、転送セクタ数をそれぞれ、
Ｓ＝６、Ｚ＝３７
とし、ストライピング単位セクタ数を
Ｕ＝４
メモリカード数を
Ｎ＝４
とする。余りを切り捨てる整数の除算を「／」、剰余演算を「％」で表すと、先頭セクタ７０２を含むメモリカード番号ＣＳは、
ＣＳ＝（Ｓ／Ｕ）％Ｎ
を計算することにより求められ、
ＣＳ＝（６／４）％４＝１
である。
【００５９】
一般に、各メモリカード内の先頭セクタのセクタ番号は、
先頭セクタを含むメモリカード番号ＣＳより小さい番号のメモリカードについては
（Ｓ／（Ｕ×Ｎ）＋１）×Ｕ
として、先頭セクタを含むメモリカードについては
（Ｓ／（Ｕ×Ｎ））×Ｕ＋（Ｓ％Ｕ）
として、先頭セクタを含むメモリカード番号ＣＳより大きい番号のメモリカードについては
（Ｓ／（Ｕ×Ｎ））×Ｕ
として求められる。
【００６０】
図１０の例では、ＣＳ＝１なので、メモリカード０の先頭セクタ７０１のメモリカード内セクタ番号は、
Ｓ０＝（６／（４×４）＋１）×４＝４
メモリカード１の先頭セクタ７０２のメモリカード内セクタ番号は、
Ｓ１＝（６／（４×４））×４＋（６％４）＝２
メモリカード２および３の先頭セクタ７０３、７０４のメモリカード内セクタ番号は、
Ｓ２＝（６／（４×４））×４＝０
Ｓ３＝（６／（４×４））×４＝０
と求められる。
【００６１】
次に、転送対象末尾セクタの直後のセクタのＲＡＩＤドライブ内セクタ番号は
Ｅ＝Ｓ＋Ｚ
として求められ、上式と同様に、末尾直後セクタを含むメモリカード番号ＣＥは、
ＣＥ＝（Ｅ／Ｕ）％Ｎ
各メモリカード内の末尾直後セクタのメモリカード内セクタ番号は、メモリカード番号ＣＥより小さい番号のメモリカードについては 
（Ｅ／（Ｕ×Ｎ）＋１）×Ｕ
として、メモリカード番号ＣＥのメモリカードについては
（Ｅ／（Ｕ×Ｎ））×Ｕ＋（Ｅ％Ｕ）
として、メモリカード番号ＣＥより大きい番号のメモリカードについては
（Ｅ／（Ｕ×Ｎ））×Ｕ
として求められる。
【００６２】
図１０の例では、転送対象末尾セクタ７０８の直後のセクタ７０７のＲＡＩＤドライブ内セクタ番号は
Ｅ＝Ｓ＋Ｚ＝４３
末尾直後セクタ７０７を含むメモリカード番号ＣＥは、
ＣＥ＝（Ｅ／Ｕ）％Ｎ＝（４３／４）％４＝２
となるので、メモリカード０および１の末尾直後セクタ７０５、７０６のメモリカード内セクタ番号は
Ｅ０＝（４３／（４×４）＋１）×４＝１２
Ｅ１＝（４３／（４×４）＋１）×４＝１２
メモリカード２の末尾直後セクタ７０７のメモリカード内セクタ番号は
Ｅ２＝（４３／（４×４））×４＋（４３％４）＝１１
メモリカード３の末尾直後セクタ７０９のメモリカード内セクタ番号は
Ｅ３＝（４３／（４×４））×４＝８
と求められる。
【００６３】
したがって、各メモリカード毎の転送セクタ数Ｚ０、Ｚ１、Ｚ２、Ｚ３は、
Ｚ０＝Ｅ０−Ｓ０＝１２−４＝８
Ｚ１＝Ｅ１−Ｓ１＝１２−２＝１０
Ｚ２＝Ｅ２−Ｓ２＝１１−０＝１１
Ｚ３＝Ｅ３−Ｓ３＝８−０＝８
と求められる。
【００６４】
このようにして、各ＳＤメモリーカードの転送パラメータであるＳＤメモリーカードの転送対象セクタの先頭アドレスＳ０、Ｓ１、Ｓ２、Ｓ３と転送セクタ数Ｚ０、Ｚ１、Ｚ２、Ｚ３が求められる。上記の計算は、Ｕ、Ｎが２の巾乗の場合には、大部分ビットの組み換えで実現できる。
【００６５】
次に図９に戻り、上記のように転送パラメータを求めたコマンド制御回路１２７は、データ転送起動処理６０２において、４つのＳＤメモリーカードに対する転送パラメータを、それぞれメモリカード制御回路１２１、１２２、１２３、１２４に送るともに、転送開始のトリガ信号をメモリカード制御回路１２１、１２２、１２３、１２４に送る。これにより、ＳＤメモリーカード１１０、１１１、１１２、１１３とデータＦＩＦＯ１１７、１１８、１１９、１２０の間で、４つの並列データ転送が開始される。
【００６６】
また、コマンド制御回路１２７は、パラメータ計算６０１において、転送制御回路１２８への転送パラメータも同時に求める。転送制御回路１２８への転送パラメータは、先頭セクタ７０２が含まれるＳＤメモリーカードのカード番号ＣＳ、先頭セクタ７０２のストライピング境界から数えたセクタ数（以下オフセット値と呼ぶ）ＯＳ、各ＳＤメモリーカードの総転送セクタ数Ｚ０、Ｚ１、Ｚ２、Ｚ３、およびメモリ領域ディスクリプタテーブルの先頭アドレスＤＡＳである。
【００６７】
これらのうちＣＳ、Ｚ０、Ｚ１、Ｚ２、Ｚ３は既に前述の式で求められている。また、メモリ領域ディスクリプタテーブルの先頭アドレスＤＡＳは、コマンドレジスタ１２６に書き込まれた先頭アドレスフィールド５０４の値である。
【００６８】
先頭セクタ７０２のストライピング境界からのオフセット値ＯＳは、
ＯＳ ＝ Ｓ ％ Ｕ
として求められ、図１０の例では
ＯＳ ＝ ６ ％ ４ ＝ ２
である。
【００６９】
パラメータ計算６０１においてこれ等の転送パラメータを求めたコマンド制御回路１２７は、データ転送起動６０２において転送パラメータとともに転送開始トリガを転送制御回路１２８に送る。これにより、メインメモリ１０８上のホスト側バッファと４つのデータＦＩＦＯとの間のＤＭＡ転送処理が開始される。
【００７０】
トリガ待ち状態６０７で待機していた転送制御回路１２８は、コマンド制御回路１２７からの上記転送開始とリガを受けて、巡回ＤＭＡ転送処理６０５に入り、与えられたパラメータに基づくカードバス上のＤＭＡ転送を制御する。
【００７１】
この巡回ＤＭＡ転送処理について説明するために、まず、バッファ用メモリ領域と４つのメモリカードのセクタとの対応関係を図１１に示す。図１１は、図１０と同じ先頭セクタ番号Ｓ、転送セクタ数Ｚに対して、図７のディスクリプタテーブルで示されるバッファ用メモリ領域を当てはめた場合を表わしている。
【００７２】
図１０と同じく実線の四角形が転送対象のセクタを表しており、その中に書かれた左側の数字は、図１０と同じＲＡＩＤドライブ内セクタ番号を表す。一方、（）内の１６進数字は、そのセクタに対応するバッファ用メモリ領域のアドレス範囲を１６進数で示している。
【００７３】
図に示したように先頭セクタ７０２から順番に５１２バイトずつのメモリ領域を、ＲＡＩＤドライブ内セクタ番号順に対応させる。したがって、セクタ７０２から８０１までで１つめのディスクリプタ４０２が示すバッファ用メモリ領域（００００から１ＦＦＦまで）が終了し、次のセクタ８０２からは２つめのディスクリプタ４０３が示すメモリ領域（４８００から５１ＦＦ）が図のように対応する。同様に、セクタ８０３から最後のセクタ７０８までは、３つめのディスクリプタ４０４が示すメモリ領域（８０００から９ＦＦＦ）が対応する。
【００７４】
図１２は、転送制御回路１２８における巡回ＤＭＡ転送処理６０５のさらなる詳細フローチャートである。以下、このフローチャートを参照しながら、巡回ＤＭＡ転送処理６０５の詳細を説明する。転送制御回路１２８は、巡回ＤＭＡ転送処理６０５において、制御変数として、転送カウンタ１３１、テーブルカウンタ１２９、メモリ領域ディスクリプタバッファ１３０を使用する。
【００７５】
転送カウンタ１３１は、データ転送対象のカード番号カウンタＴＣ、各ＳＤメモリーカードに対応した総転送数カウンタＴＺ０、ＴＺ１、ＴＺ２、ＴＺ３、転送先メモリアドレスカウンタＴＡ０、ＴＡ１、ＴＡ２、ＴＡ３、１メモリ領域内の転送数カウンタＴＳ０、ＴＳ１、ＴＳ２、ＴＳ３、ストライピング境界からのオフセットカウンタＴＯ０、ＴＯ１、ＴＯ２、ＴＯ３によって構成される。また、テーブルカウンタ１２９は、メモリ領域ディスクリプタテーブルのアドレスカウンタＤＴＡ、メモリ領域ディスクリプタテーブル終了フラグレジスタＥＯＴ、メモリブロックの先頭バイトに対応するカード番号レジスタＢＣＳ、メモリブロックの先頭バイトのオフセットＢＯＳによって、メモリ領域ディスクリプタバッファ１３０は、各ＳＤメモリーカードに対応するメモリ領域の先頭アドレスレジスタＢＡ０、ＢＡ１、ＢＡ２、ＢＡ３、転送サイズレジスタＢＳ０、ＢＳ１、ＢＳ２、ＢＳ３によって構成されている。
【００７６】
まず、図１２の初期化ステップ９０１において、各カウンタ、バッファを下記のように初期化する。
【００７７】
ＴＣ＝ＣＳ＝先頭セクタのカード番号
ＴＯ（ＣＳ）＝ＯＳ×５１２＝先頭セクタのオフセット（バイト単位）
ＴＯ（ＣＳ以外）＝０
ＴＳ０＝ＴＳ１＝ＴＳ２＝ＴＳ３＝０
ＴＺ０＝Ｚ０×５１２＝カード０の総転送バイト数
ＴＺ１＝Ｚ１×５１２＝カード１の総転送バイト数
ＴＺ２＝Ｚ２×５１２＝カード２の総転送バイト数
ＴＺ３＝Ｚ３×５１２＝カード３の総転送バイト数
ＤＴＡ＝メモリ領域ディスクリプタテーブルの先頭アドレス
ＥＯＴ＝０
ＢＣＳ＝ＣＳ＝先頭セクタのカード番号
ＢＯＳ＝ＯＳ×５１２＝先頭セクタのオフセット（バイト単位）
ＢＳ０＝ＢＳ１＝ＢＳ２＝ＢＳ３＝０
次に、転送開始判断９０２において、メモリ領域ディスクリプタの処理９０３を行うか否かを判定する。すなわち、レジスタＥＯＴが０（未処理のメモリ領域ディスクリプタが残っていることを意味する）で、かつ、レジスタＢＳ０、ＢＳ１、ＢＳ２、ＢＳ３が全て０（レジスタＢＳ０、ＢＳ１、ＢＳ２、ＢＳ３が空きであることを意味する）であるとき、メモリ領域ディスクリプタの処理９０３に進む。そうでないとき、データ転送終了判定９０５へ進む。
【００７８】
メモリ領域ディスクリプタ処理９０３では、切替回路１２５、カードバス制御回路１１６を制御して、メモリ領域ディスクリプタテーブルのアドレスカウンタＤＴＡが指しているメインメモリ１０８上の領域から、１つのメモリ領域ディスクリプタを読み取る。読み取ったメモリ領域ディスクリプタの先頭アドレス値をＢＭＡ、領域サイズ値をＢＭＳとし、テーブル終了フラグの値をＥＯＴに記憶する。
【００７９】
まず、ＢＭＡ、ＢＭＳが示す１つのメモリ領域内で、各メモリカードの先頭のバイトに対応するメモリアドレスを、下記式のように求める。すなわち、メモリ領域内の先頭バイトを含むメモリカードの番号ＢＣＳよりも小さい番号Ｃｓｍｌのメモリカードについては、
ＢＡ（Ｃｓｍｌ）＝Ｕ×（Ｎ＋Ｃｓｍｌ−ＢＣＳ）×５１２−ＢＯＳ＋ＢＭＡ
先頭バイトを含むメモリカードについては、
ＢＡ（ＢＣＳ）＝ＢＭＡ
先頭バイトを含むメモリカードの番号ＢＣＳよりも大きい番号Ｃｂｉｇのメモリカードについては
ＢＡ（Ｃｂｉｇ）＝Ｕ×（Ｃｂｉｇ−ＢＣＳ）×５１２−ＢＯＳ＋ＢＭＡ
とする。
【００８０】
例えば図１１の例で、最初のメモリ領域ディスクリプタ４０２について数値を代入すると、下記のようになる。
【００８１】
ＢＡ０＝４×（４＋０−１）×５１２−１０２４＋０＝５１２０
ＢＡ１＝０
ＢＡ２＝４×（２−１）×５１２−１０２４＋０＝１０２４
ＢＡ３＝４×（３−１）×５１２−１０２４＋０＝３０７２
これらは、図１１のセクタ７０１、７０２、７０３、７０４の先頭アドレス１４００（１６進）、００００、０４００（１６進）、０Ｃ００（１６進）を表わしている。
【００８２】
次に、カード番号０のＳＤメモリのストライピング境界（図１１の例の１つめのメモリ領域ではセクタ８０４の先頭に相当）から、メモリ領域内の最後バイトに対応するバイトまでのサイズαを次式のように求める。
【００８３】
α＝Ｕ×ＢＣＳ×５１２＋ＢＯＳ＋ＢＭＳ
すると、メモリ領域内の最終バイトの次のバイトが含まれるＳＤメモリーカード番号ＢＣＥと、そのバイトのオフセットＢＯＥが次の式で求められる。
【００８４】
ＢＣＥ＝（α／（Ｕ×５１２））％Ｎ
ＢＯＥ ＝ α ％ （Ｕ × ５１２）
各メモリカードのメモリ領域内のバイト数は、
β＝（α／（Ｕ×Ｎ×５１２））×（Ｕ×５１２）
に対して、
ＣＳより小さい番号のメモリカードについてはＵ×５１２を引き、
ＣＳと等しい番号のメモリカードについてはＢＯＳを引き、
かつ、
ＢＣＥよりも小さい番号のメモリカードについてはＵ×５１２を加え、
ＢＣＥと等しい番号のメモリカードについてはＢＯＥを加える
ことにより求められる。
【００８５】
図１１の１つめのディスクリプタ４０２によって示されるメモリ領域の例では、
α＝４×１×５１２＋１０２４＋８１９２＝１１２６４
ＢＣＥ＝（１１２６４／（４×５１２））％４＝１
ＢＯＥ＝１１２６４％（４×５１２）＝１０２４
β＝（１１２６４／（４×４×５１２））×（４×５１２）＝２０４８
ＢＳ０＝２０４８−４×５１２＋４×５１２＝２０４８
ＢＳ１＝２０４８−１０２４＋１０２４＝２０４８
ＢＳ２＝２０４８
ＢＳ３＝２０４８
と求められる。
【００８６】
以上のように、１つのメモリ領域について、各カード毎の先頭メモリアドレスＢＡ０、ＢＡ１、ＢＡ２、ＢＡ３と転送サイズＢＳ０、ＢＳ１、ＢＳ２、ＢＳ３を求めたら、テーブルカウンタ更新９０４において下記のようにカウンタを更新し、転送開始判定９０２に戻る。
【００８７】
ＤＴＡ＝次のディスクリプタのアドレス
ＢＣＳ＝ＢＣＥ
ＢＯＳ＝ＢＯＥ
上記のように転送開始判断９０２に戻って来ると、ＢＳ０、ＢＳ１、ＢＳ２、ＢＳ３が全て０ではないので、データ転送終了判定９０５へ進む。
【００８８】
全データ転送終了判定９０５では、各カード毎の総データ転送数カウンタＴＺ０、ＴＺ１、ＴＺ２、ＴＺ３が全て０の場合に、全てのデータ転送が終了したものと判断し、巡回ＤＭＡ転送処理６０５を終了する。そうでない場合には、メモリ領域内転送終了判定９０６へ進む。当然、最初の処理では、総データ転送数カウンタが全て０ではないので、領域内転送終了判定９０６へ進む。
【００８９】
領域内転送終了判定９０６では、現在の転送対象カード番号ＴＣのメモリ領域内の転送数カウンタＴＳ（ＴＣ）が０である場合、そのメモリ領域内の転送は終了したものと判定して、次のディスクリプタ判定９０７に進む。そうでない場合、データ転送処理９０９に進む。最初の処理では、転送数カウンタＴＳ（ＴＣ）は０に初期化されているので、次のディスクリプタ判定９０７に進む。
【００９０】
次のディスクリプタ判定９０７では、現在の転送対象カード番号ＴＣについて、次のディスクリプタが、メモリ領域ディスクリプタバッファ１３０に保存されているかどうかを判定する。すなわち、転送サイズカウンタＢＳ（ＴＣ）が０の場合、次のディスクリプタは保存されていないものと判定し、転送カード番号更新９１０へ進む。そうでない場合は、ディスクリプタロード９０８へ進む。
【００９１】
ディスクリプタロード９０８では、メモリ領域ディスクリプタバッファ１３０から、現在の転送対象カード番号ＴＣのディスクリプタＢＡ（ＴＣ）、ＢＳ（ＴＣ）を読み取り、転送先アドレスカウンタＴＡ（ＴＣ）、領域内転送数カウンタＴＳ（ＴＣ）に下記のように設定する。
【００９２】
ＴＡ（ＴＣ）＝ＢＡ（ＴＣ）
ＴＳ（ＴＣ）＝ＢＳ（ＴＣ）
さらに、ＢＳ（ＴＣ）を０に設定して、このレジスタ値を無効とし、データ転送処理９０９へ進む。
【００９３】
データ転送処理９０９では、まず、１回のＤＭＡ転送における連続転送データ数ＴＳｂｓｔを下記のように決める。
【００９４】
ＴＳｂｓｔ＝ｍｉｎ（ＴＺ（ＴＣ）、ＴＳ（ＴＣ）、（Ｕ×５１２−ＴＯ（ＴＣ））、１２８）
ここで、ｍｉｎ（）は最小値を表している。すなわち、ＴＺ（ＴＣ）はカード番号ＴＣの残りの全データ数、ＴＳ（ＴＣ）は同じバッファ用メモリ領域内のカード番号ＴＣの残りデータ数、（Ｕ×５１２−ＴＯ（ＴＣ））は同じバッファ用メモリ領域内のアドレス不連続点までの残りデータ数、１２８は１つのＳＤメモリーカードの最大連続転送数を表しており、これらのうちの最小値を転送データ数とする。
【００９５】
次に、転送制御回路１２８は、切り替え回路１２５を制御して、カード番号ＴＣに対応するデータＦＩＦＯのデータをカードバス制御回路１１６に接続し、切り替え回路１２５を通して、カードバス制御回路１１６に、先頭アドレスがＴＡ（ＴＣ）で、転送データ数がＴＳｂｓｔであるような、バスマスタＤＭＡ転送コマンドを発行する。  これを受けたカードバス制御回路１１６は、メインメモリ１０８のアドレスＴＡ（ＴＣ）からＴＳｂｓｔバイトのデータを、切り替え制御回路１２５によって選択されたデータＦＩＦＯとの間で、カードバスプロトコルに従って転送する。
【００９６】
上記のＤＭＡ転送が終了したら、転送制御回路１２８は、転送カウンタ更新９１０において、下記のようにＤＭＡ転送を制御するカウンタを更新する。
【００９７】
ＴＺ（ＴＣ）＝ＴＺ（ＴＣ）−ＴＳｂｓｔ
ＴＡ（ＴＣ）＝ＴＡ（ＴＣ）＋ＴＳｂｓｔ
ＴＳ（ＴＣ）＝ＴＳ（ＴＣ）−ＴＳｂｓｔ
さらに、
ＴＯ（ＴＣ）＋ＴＳｂｓｔ≧Ｕ×５１２
のとき
ＴＡ（ＴＣ）＝ＴＡ（ＴＣ）＋（Ｎ−１）×Ｕ×５１２
ＴＯ（ＴＣ）＝０
とし、
ＴＯ（ＴＣ）＋ＴＳｂｓｔ＜Ｕ×５１２
のとき
ＴＯ（ＴＣ）＝ＴＯ（ＴＣ）＋ＴＳｂｓｔ
とし、
ＴＣ＝ＴＣ＋１
として、転送開始判定９０２に戻る。
【００９８】
以上のように、巡回ＤＭＡ転送処理６０５での全てのデータ転送が終了したら（全データ転送終了判定９０５でＴＺ０、ＴＺ１、ＴＺ２、ＴＺ３が全て０と判定したら）、転送制御回路１２８はデータ転送終了通知６０６に進み、全てのデータ転送の終了をコマンド制御回路１２７に通知する。データ転送の終了通知を受けたコマンド制御回路１２７は、コマンド終了通知６０６に進み、割り込み信号１３２によってホスト機器１０２にコマンド処理の終了を通知する。
【００９９】
以上説明した動作により、ＲＡＩＤドライブ１０１における、ＲＡＩＤドライブ１０１からホスト１０２へのデータ読み出し時のデータ転送順を図１３に示す。図１３に示したように、ＳＤメモリーカード１１０、１１１、１１２、１１３においては、同時並列でデータ読み出しが行われ、一方カードバス１０３においては、４つのＳＤメモリーカードのデータを１２８バイトごとに巡回しながら転送される。
【０１００】
また、ＲＡＩＤドライブ１０１における、ホスト１０２からＲＡＩＤドライブ１０１へのデータ書き込み時のデータ転送順を図１４に示す。図１４に示したように、カードバス１０３において４つのＳＤメモリーカードに対応するデータを１２８バイトごとに巡回しながら転送されたデータは、ＳＤメモリーカード１１０、１１１、１１２、１１３においては、同時並列で書き込まれる。
【０１０１】
以上のように４つのＳＤメモリーカードに対応するデータを１２８バイトごとに分割して連続転送するので、各カードに対応するＦＩＦＯ１１７、１１８、１１９、１２０は１２８バイトあれば十分である。したがって、本発明によれば複数の低速メモリカードにおけるブロック単位の並列転送をブロックサイズよりも小さなバッファメモリを用いて実現することができる。
【産業上の利用可能性】
【０１０２】
上記のように構成された本発明の記憶装置は、ビデオカメラ等におけるリムーバブルメディアとしても、ＰＣベースのノンリニア編集機におけるメディアとしても、多数のハードディスクを用いたＰＣＩ−ＲＡＩＤボードとしても利用できる。
【図面の簡単な説明】
【０１０３】
【図１】本発明の記憶装置の基本構成を示すブロック図
【図２】本発明の記憶装置内のセクタ番号のマッピングを示す構成図
【図３】ホスト機器のホスト側バッファの構成図
【図４】本発明の記憶装置のデータ転送の概要を示すタイミング図
【図５】本発明の記憶装置の構成を示すブロック図
【図６】本発明の記憶装置とホスト機器の動作手順を示すフローチャート
【図７】本発明におけるメモリ領域ディスクリプタの例を示す構成図
【図８】本発明におけるコマンドのデータ構造を示す構成図
【図９】本発明の記憶装置のコマンド処理動作を示すフローチャート
【図１０】本発明におけるカード毎の転送パラメータを示す構成図
【図１１】本発明におけるメモリ領域とカードのマッピングを示す構成図
【図１２】本発明の記憶装置の巡回ＤＭＡ処理動作を示すフローチャート
【図１３】本発明の記憶装置のデータ読み出し転送順を示すタイミング図
【図１４】本発明の記憶装置のデータ書き込み転送順を示すタイミング図
【符号の説明】
【０１０４】
１０１    ＲＡＩＤドライブ
１０２    ホスト機器
１０８    メインメモリ
１１０、１１１、１１２、１１３    ＳＤメモリーカード
１１７、１１８、１１９、１２０    データＦＩＦＯ
１２１、１２２、１２３、１２４    メモリカード制御回路
１２５    切替回路
１２８    転送制御回路
１２９    テーブルカウンタ
１３０    メモリ領域ディスクリプタバッファ
１３１    転送カウンタ
１３３    ホストインタフェース
１３４    制御手段
【図１】
2006018419.tif 000003
【図２】
2006018419.tif 000004
【図３】
2006018419.tif 000005
【図４】
2006018419.tif 000006
【図５】
2006018419.tif 000007
【図６】
2006018419.tif 000008
【図７】
2006018419.tif 000009
【図８】
2006018419.tif 000010
【図９】
2006018419.tif 000011
【図１０】
2006018419.tif 000012
【図１１】
2006018419.tif 000013
【図１２】
2006018419.tif 000014
【図１３】
2006018419.tif 000015
【図１４】
2006018419.tif 000016