(58)【調査した分野】(Int.Cl.,DB名)
演算処理装置と、一時記憶を行う第1メモリと、プログラムを格納する第2メモリと、データを書き込む外部メモリとのアクセスを制御するメディアアクセス装置と、を含む半導体集積回路装置であって、
前記演算処理装置は、前記メディアアクセス装置を介して、
前記外部メモリに一時書込み領域を確保し、
前記外部メモリにデータを書き込むとき、前記一時書込み領域に対して、閾時間に基づいて書き込みを行い、
前記一時書込み領域における第1個所への書き込みが、前記閾時間が経過するまでに完了しない場合には、前記第1個所への書き込みをキャンセルして、前記一時書込み領域における、前記第1個所とは異なる第2個所への書き込みを行う、
ことを特徴とする半導体集積回路装置。
【発明を実施するための形態】
【0016】
まず、本実施例のメモリ制御方法、メモリ制御プログラムおよび半導体集積回路装置を詳述する前に、
図1〜
図7を参照して、半導体集積回路装置に適用されるメモリ(記憶媒体,二次記憶装置)におけるメモリ制御方法およびその課題を説明する。
【0017】
例えば、フラッシュメモリ等のメモリに対して、デジタルカメラの画像データに対するメタデータを格納する場合、FAT(File Allocation Table)ファイルシステムに基づいて、複数のメタデータを所定の書き込み領域へ順に書き込んでいる。
【0018】
FATファイルシステムは、例えば、コンピュータがデータを保持するために使用するもので、二次記憶装置(メモリ,記憶媒体)を管理するためのデータ構造であり、メモリ上のデータをファイル/ディレクトリ単位で管理する。
【0019】
また、FATファイルシステムは、例えば、サイズが様々に異なるファイルに対して、メモリの領域を効率よく割り当てることを主な目的としている。そのため、FATファイルシステムでは、例えば、メモリを次のように管理している。
【0020】
図1は、FATファイルシステムにおけるメモリ上のデータ構造の一例を説明するための図であり、フラッシュメモリの一例としてのSDカード(SDメモリカード)におけるデータ構造の一例を示す。
図2は、
図1に示すデータ構造における1つのファイルの構成を説明するための図である。
【0021】
図1に示されるように、SDカード上のFATファイルシステムのデータ構造(FATパーティション)は、例えば、「ブートセクタ領域(R1)」、「FAT領域(R2)」および「ファイル/ディレクトリ領域(R3)」の3つの領域に分割することができる。なお、これら3つの領域の他に、ルートディレクトリの情報領域(ルートディレクトリエントリ)を持つ場合もある。
【0022】
ここで、SDカード(メモリ)上のデータは、例えば、「セクタ」(一般的には、512byte)を最小単位として書き換えを行う。また、ファイル/ディレクトリ領域R3は、「クラスタ」と呼ばれるセクタより一回り大きな単位(一般的に、512byteから32KB)で管理される。
【0023】
ファイルのデータに対しては、クラスタ単位でメモリの領域が割り当てられる。そして、クラスタをチェーンのように繋ぐことで1つのファイルデータが形成される。このクラスタのリンク構造を「クラスタチェーン」と呼ぶ。こうすることにより、メモリの領域の割り当てを、ファイルの位置関係やデータサイズに依存することなく、効率よく行うことが可能になる。
【0024】
ここで、クラスタサイズ(クラスタのサイズ)は、セクタサイズの2
n(2のn乗倍)の大きさとされている。また、クラスタは、セクタと同じサイズでも良いが、セクタと異なるサイズを許すことにより、柔軟な管理が可能になる。
【0025】
なお、クラスタサイズは、小さい方がメモリの領域を無駄なく使うことができるが、大きなデータを管理する場合には、クラスタサイズが大きい方が好ましく、これらの間で最適なクラスタサイズが調整される。
【0026】
図1において、ブートセクタ領域R1は、メモリ(記憶媒体,二次記憶装置)全体についての情報(メモリの容量、クラスタサイズ等)を保持する。ここで、ブートセクタ(ブートセクタ領域R1)は、例えば、1セクタ〜12セクタの大きさを持つ領域である。
【0027】
FAT領域R2は、ファイル/ディレクトリ領域R3の各クラスタのリンク情報を格納し、例えば、12bit,16bitまたは32bitの値が並んだ配列形式のデータを含み、1つのFATエントリは、1つのクラスタと一対一で対応している。
【0028】
FATのエントリには、「対応するクラスタに続くクラスタ番号」を示す値が格納される。なお、次に続くクラスタがない場合は、「EOC(End Of Cluster)」を示す値が格納され、FATのエントリに対応するクラスタが未使用の場合は「空」を示す値が格納される。
【0029】
また、クラスタ番号は、2番から始まると決められているのに対して、FATのエントリは、0番から始まる。そのため、0番目と1番目のFATエントリには、対応するクラスタがないので、予約領域「RSV」を示す特別な値が設定される。
【0030】
このように、クラスタのリンク構造は、FAT領域R2に書かれた「次に続くクラスタ番号」で管理されるため、このFAT領域R2の値を書き換えることにより、どのクラスタ同士が繋がれているかが変化する。
【0031】
ファイル/ディレクトリ領域R3は、ファイル中の「実データ」と、「ディレクトリエントリ」と呼ばれる管理情報を保持する。ディレクトリエントリは、例えば、ファイル名やファイルサイズといった、1つのファイルについての情報を含み、1つのファイルは、ディレクトリエントリを先頭に、クラスタ単位で繋がった実データを含む。
【0032】
ここで、ディレクトリエントリ自身も、クラスタの中で管理され、ディレクトリエントリは、クラスタ内に複数格納することができる。また、ディレクトリエントリをデータとして持つ特殊なファイルを「ディレクトリ」と呼ぶことができる。
【0033】
具体的に、
図1に示されるように、FAT領域R2において、例えば、0番目と1番目のFATエントリ(0),(1)には、「RSV」を示す特別な値が設定され、2番目のFATエントリ
(2)には、「EOC」を示す値が格納される。
【0034】
また、FATのエントリ(FAT領域R2)において、例えば、クラスタ(3),(4),(5),(12)には、次に続くクラスタ番号4,5,12,13を示す値が格納され、次に続くクラスタがないクラスタ(13)には、「EOC」を示す値が格納されることになる。なお、FATのエントリに対応するクラスタが未使用のクラスタ(6)〜(11),(14),(15)には、「空」を示す値が格納される。
【0035】
さらに、
図1および
図2に示されるように、1つのファイル(ファイル1)は、ファイル名やファイルサイズといった情報を含むディレクトリエントリ(2)を先頭として、クラスタ(3)→(4)→(5)→(12)→(13)として繋がった実データを有する。
【0036】
ここで、実データのサイズ(ファイルサイズ)は、5つのクラスタ(3),(4),(5),(12),(13)の合計サイズに満たないため、最後のクラスタ(13)には、約1/3程度の未使用部分(実データが格納されない部分)が含まれる。なお、クラスタ(13)の未使用部分は、クラスタ単位で管理されるため、他のファイルを格納するために使用されることはない。
【0037】
ところで、SDカード等のフラッシュメモリを使ったメモリ(記憶媒体,二次記憶装置)に対するデータ書き込みは、データ『0』とデータ『1』を自由に反転させることは難しい。すなわち、『1』を『0』に書き換えることは、ビットごとに(セクタ単位で)行うことができるが、『0』を『1』に書き換える場合は、消去ブロックと呼ばれる単位でまとめて行うようになっている。
【0038】
このままでは、自由に『0』と『1』を反転できる磁気ディスクといった他の記憶媒体(記録メディア)と同様に扱うことができず、不便である。そのため、書込み手順が工夫され、あたかも『0』と『1』が自由に反転できるように見せる工夫がされている。
【0039】
例えば、論理セクタと物理セクタを使う方法があり、この処理の例を
図3〜
図6を参照して説明する。
図3および
図4は、フラッシュメモリの書き換え処理の一例(消去動作を伴わない場合)を説明するための図である。
【0040】
前述したように、SDカード等のフラッシュメモリの書き換え処理として、データ『1』をデータ『0』に書き換えることは可能であるが、データ『0』をデータ『1』に書き換えるには消去動作(消去処理)を行う。
【0041】
なお、データ『0』および『1』は便宜的なものであり、逆であってもよい。さらに、以下に説明する8ビットの書き換えデータも単なる例であり、様々な場合があり得るのはいうまでもない。
【0042】
図3(a)は、初期状態を示し、
図3(b)は、1番目のセクタをデータ『10101010』に書き換える場合を示し、そして、
図3(c)は、2番目のセクタをデータ『11001100』に書き換える場合を示す。
【0043】
また、
図4(a)は、1番目のセクタをデータ『11110000』に書き換える場合を示し、
図4(b)は、1番目のセクタをデータ『11111100』に書き換える場合を示す。
【0044】
まず、
図3(a)に示されるように、初期状態では、例えば、全ての物理セクタは、『11111111』(消去状態)とされている。
【0045】
次に、
図3(b)に示されるように、1番目のセクタ(論理セクタ)をデータ『10101010』に書き換える場合、『11111111』となっている1番目の物理セクタにおいて、上位から2,4,6,8ビット目のデータを『0』に書き換える。この場合、消去動作は不要なため、短時間で書き換え処理を完了することができる。
【0046】
また、
図3(c)に示されるように、2番目のセクタをデータ『11001100』に書き換える場合、『11111111』となっている2番目の物理セクタにおいて、上位から2,4,7,8ビット目のデータを『0』に書き換える。この場合も、消去動作は不要なため、短時間で書き換え処理を完了することができる。
【0047】
さらに、
図4(a)に示されるように、1番目のセクタをデータ『11110000』に書き換える場合、
図3(b)を参照して説明したように、1番目の物理セクタには、データ『10101010』が書き込まれており、1番目の物理セクタは更新不可となる。
【0048】
そこで、例えば、空いている(初期状態のまま『11111111』となっている)5番目の物理セクタに対して、データ『11110000』を書き込む。すなわち、上位から1〜4ビットのデータを『0』に書き換える。そして、1番目の論理セクタに対応する物理セクタを、5番目の物理セクタとする。
【0049】
これにより、ユーザからは、1番目のセクタが『10101010』から『11110000』に書き換えられたようにみえる。この場合も、消去動作は不要なため、短時間で書き換え処理を完了することができる。
【0050】
これに対して、
図4(b)に示されるように、1番目のセクタをデータ『11111100』に書き換える場合、例えば、空いている(『11111111』となっている)物理セクタが無いと、消去動作を実行した後に、改めて書き込み(書き換え)処理を行う。この場合、消去動作を行うことになるため、書き換え処理に長時間を要することになる。
【0051】
図5および
図6は、フラッシュメモリの書き換え処理の他の例(消去動作を伴う場合)を説明するための図である。
図5(a)は、消去動作の開始状態を示し、
図5(b)は、消去対象の物理セクタAのうち、有効なデータを全て置換用の物理セクタBにコピーする様子を示す。
【0052】
また、
図6(a)は、物理セクタAと物理セクタBの役割を入れ替え、物理セクタBを新たなデータ用セクタとし、物理セクタAを新たな置換用セクタとする様子を示し、
図6(b)は、物理セクタAを消去する様子を示す。
【0053】
なお、
図5(a),
図5(b)および
図6(a),
図6(b)では、1つのデータ用セクタに対して1つの置換用セクタを設けているが、例えば、複数(例えば、10個程度)のデータ用セクタに対して1つの置換用セクタを設けるようにしてもよい。
【0054】
まず、
図5(a)に示されるように、消去動作の開始状態は、例えば、
図4(b)を参照して説明した、空いている物理セクタが無いときに対応する。このとき、データ用の物理セクタAに対応する置換用の物理セクタBを用意しておく。ここで、置換用の物理セクタBは、全てのセクタが『11111111』(消去状態)とされている。
【0055】
次に、
図5(b)に示されるように、消去対象の物理セクタAのうち、有効なデータが書き込まれている2番目,4番目,7番目および8番目のセクタのデータを、置換用の物理セクタ
Bの2番目,4番目,7番目および8番目のセクタに書き込む。
【0056】
さらに、
図6(a)に示されるように、物理セクタAと物理セクタBの役割を入れ替え、物理セクタBを新たなデータ用セクタとし、物理セクタAを新たな置換用セクタとする。
【0057】
これにより、データ用の物理セクタBにおいて、2番目,4番目,7番目および8番目のセクタには、有効なデータが書き込まれていることになるが、1番目,3番目,5番目および6番目のセクタは、空きの状態になる。
【0058】
従って、データ用の物理セクタBにおける空き(『11111111』)となっている1番目,3番目,5番目および6番目のセクタは、書き換えが可能になる。
【0059】
そして、
図6(b)に示されるように、置換用の物理セクタAを消去して、全てのセクタを『11111111』として、次に、データ用の物理セクタBにおいて、空いている物理セクタが無いときに備える。
【0060】
このように、例えば、
図5(a)の空いている物理セクタが無いときには、
図5(b),
図6(a)および
図6(b)を参照して説明した処理を行い、データ用の物理セクタBの空いているセクタに書き換えを行うことになる。
【0061】
そのため、例えば、SDカード等のメモリカード(フラッシュメモリ)に対する書き込みを行うとき、消去動作が不要な場合と消去動作を行った場合で、書き込み時間に大きな差(ばらつき)が生じることになる。
【0062】
図7は、メモリカードに対する書き込み時間を説明するための図であり、SDカードに一定サイズの小さなデータを繰り返し書き込む場合、その書き込みに要する時間を示すものである。なお、SDカードに書き込むデータサイズは、全て1セクタの固定サイズとされている。
【0063】
図7に示されるように、例えば、SDカードに対する書き込み処理は、1回目〜5回目および7回目では数ms程度なのに対して、6回目では数百msになっている。
【0064】
これは、6回目の書き込み処理において、上述した消去動作を行ったためであり、その書き込み処理に要する時間は、消去動作が不要な1回目〜5回目および7回目の処理時間の100倍程度に達していることが分かる。
【0065】
このように、SDカード等のフラッシュメモリでは、書き込み時間に大きなばらつきがあるため、ファイル書き込みの完了時間(レスポンス)が長くなってしまう。すなわち、SDカード等のメモリにデータを書き込む際、できる限り速く書き込みが完了するのが望ましい。特に、近年では、動画データを中心に大きなサイズのデータを書き込む処理が望まれている。
【0066】
これに対して、メモリ側も速度を上げる工夫が多く施されており、近年の高速SDカードでは、データ量の多いHD(High Definition)動画等もコマ落ちすることなく記録できるようになっている。
【0067】
しかしながら、向上が著しいのは、動画等の一定サイズのデータを連続して書き込む速度(書き込み転送速度)であり、例えば、メタデータ等の小さなデータを書き込む場合の書き込み完了時間(レスポンス)は必ずしも短くなっているとは限らない。
【0068】
例えば、書込み転送速度が20MB/sのメモリの場合、20MBのデータを1秒で書き込むことはできるが、1KBのデータを50μ秒(2万分の1秒)で書き込むことは困難である。実際には、1KBのような小さなデータの書き込み時間は、通常、数ms程度である。
【0069】
しかしながら、前述したように、この書き込み時間はばらつきが大きく、時には、数百msに達することがある。これは、SDカード等、近年、幅広く使われているフラッシュメモリを使った記憶媒体において発生する現象であり、書き込み時にフラッシュメモリの消去動作が入ることによるものと考えられる。
【0070】
ここで、記憶媒体(SDカード等のフラッシュメモリ)にファイルを書き込む際には、実際のファイルデータだけでなく、ファイルシステムが持つ小さな管理データを多く書き込むことになる。
【0071】
そのため、前述したように、小さなデータの書き込み完了時間が長い場合、たとえデータサイズの小さいファイルでも、1つのファイルを書き込む時間はとても長くなってしまう。これは、例えば、写真の連写等、多数のファイルを次々に書き込むような処理は不得意であることを意味する。
【0072】
この書き込み処理に要する時間が長くなるのは、例えば、データ用の物理セクタに空きが無くなった場合に生じるため、そのタイミング(時間のばらつき)を制御するのが困難であり、例えば、デジタルカメラの動画撮影等においてコマ落ちを招く虞がある。
【0073】
以下、本実施例のメモリ制御方法、メモリ制御プログラムおよび半導体集積回路装置を、添付図面を参照して詳述する。
【0074】
図8は、本実施例に係る半導体集積回路装置のハードウェア構成の一例を示すブロック図であり、デジタルカメラの構成例を示すものである。
【0075】
図8に示されるように、デジタルカメラ1は、例えば、バス17を介して接続されたメディアアクセス装置11,CPU(演算処理装置)12,RAM(第1メモリ)13,ROM(第2メモリ)14,表示部15および入力部16を含む。
【0076】
メディアアクセス装置11は、図示しないコネクタ(カードスロット)を介して、例えば、SDカード等のフラッシュメモリ(記憶媒体,二次記憶装置:外部メモリ)2に接続され、例えば、撮影した画像データおよび管理データ等をメモリ(SDカード)2に格納する。
【0077】
表示部15は、例えば、撮影時の画像や撮影済みの画像を表示し、或いは、各種設定内容を表示するための液晶表示装置を示し、また、入力部16は、撮影条件の設定やシャッタおよび各種センサからの入力を示す。
【0078】
ここで、メディアアクセス装置11,CPU12,RAM13,ROM14およびバス17は、例えば、一体化して1つの半導体集積回路装置(LSI)を形成することができる。
【0079】
なお、後述する本実施例のメモリ制御プログラムは、例えば、半導体集積回路装置におけるROM14に格納され、CPU12に各種処理を実行させることで、例えば、メディアアクセス装置11を介してSDカード等のメモリ2を制御する。
【0080】
また、ROM14は、例えば、書き換えが可能な不揮発性メモリであるフラッシュメモリやMRAM(磁気抵抗RAM)やFeRAM(強誘電体RAM)等であってもよく、また、RAM13もMRAMやFeRAM等であってもよい。
【0081】
図9は、本実施例に係る半導体集積回路装置のソフトウェア構成の一例を説明するための図である。
図9に示されるように、半導体集積回路装置におけるソフトウェア30は、例えば、デジタルカメラのアプリケーション31、ファイルシステム(本実施例によるFATファイルシステム)32およびメディアドライバ33を含む。
【0082】
ここで、メディアドライバ33は、メモリ(SDカード等のフラッシュメモリ)2をアクセスするメディアアクセス装置11を駆動制御する。なお、本実施例が適用されるメモリ2は、SDカードに限定されるものではなく、さらに、フラッシュメモリに限定されるものでもない。
【0083】
ただし、本実施例が適用されるメモリ2としては、例えば、データ『1』を『0』に書き換えることはビットごとに(セクタ単位で)行うことができるが、データ『0』を『1』に書き換える場合は所定の単位でまとめて消去動作を行うものが好ましい。さらに、本実施例は、消去動作に要する時間が、データの書き換え(『1』を『0』に書き換え)処理に要する時間よりも十分に長いメモリ2に対して適用されるのが好ましい。
【0084】
本実施例では、一時書込み領域R4の予約、閾時間の決定、一時書込み領域R4への書き込み、一時書込み領域R4への書き込みの再試行、並びに、一時書込み領域R4からの書き戻しを行う。
【0085】
まず、
図10および
図11を参照して、一時書込み領域R4の予約について説明する。
図10および
図11は、本実施例に係るメモリ制御方法が適用されるメモリ上のデータ構造例を説明するための図である。
【0086】
図10と前述した
図1の比較から明らかなように、本実施例に係るメモリ制御方法が適用されるメモリ2上のデータ構造は、
図1を参照して説明したFATファイルシステムにおけるメモリ上のデータ構造に対して、「一時書き込み領域(R4)」が追加されている。ここで、一時書き込み領域R4は、例えば、ファイル/ディレクトリ領域R3と同様に、クラスタ単位で管理される。
【0087】
なお、
図10において、一時書き込み領域R4は、ファイル/ディレクトリ領域R3の外側に(R3とは別に)確保されているが、ファイル/ディレクトリ領域R3に含めることもできる。この場合は、特別なファイルを用意して、そのファイルの実データを一時書込み領域R4として使用する。
【0088】
具体的に、メモリ2が32GBの容量を持つフラッシュメモリの場合、例えば、半分の16GBをブートセクタ領域R1、FAT領域R2およびファイル/ディレクトリ領域R3としてフォーマットし、残りの16GBを一時書き込み領域R4とすることができる。
【0089】
或いは、例えば、全体の32GBをブートセクタ領域R1、FAT領域R2およびファイル/ディレクトリ領域R3としてフォーマットし、ファイル/ディレクトリ領域R3の中に一時書き込み領域R4を設けることもできる。
【0090】
図11に示されるように、例えば、一時書き込み領域R4を管理するために、半導体集積回路装置におけるRAM13上に、書き込み済みクラスタ(個所の)情報131および未書き込みクラスタ(個所の)情報132を格納するようになっている。
【0091】
ここで、書き込み済みクラスタ情報131は、例えば、初期状態(消去状態)で『11111111』となっているクラスタにデータ(『0』)を書き込み、書き込みが済んだクラスタ番号の情報である。また、未書き込みクラスタ情報132は、データ(『0』)が未だ書き込まれていない『11111111』となっているクラス
タ番号の情報である。
【0092】
なお、書き込み済みクラスタ情報131および未書き込みクラスタ情報132のそれぞれにおけるクラスタ番号の初期値は、一時書込み領域R4の中で一番小さなクラスタ番号が設定されている。
【0093】
そして、一時書込み領域R4に書き込みを行うたびに、未書き込みクラスタ情報132のクラスタ番号を1つ進めるようになっている。また、一時書込み領域R4からファイル/ディレクトリ領域R3へ書き戻すたびに、書き込み済みクラスタ情報131のクラスタ番号を1つ進めるようになっている。
【0094】
このように、メモリ(SDカード)の一部を、一時書込み領域R4として予約しておく。なお、一時書込み領域R4の獲得は、様々な手法が可能であり、特に、規定されるものではない。ただし、後に、詳述するように、一時書込み領域R4は、閾時間を超えた場合に再試行(再書き込み処理)を行うことになるため、十分に広い領域を確保するのが好ましい。
【0095】
図11では、例えば、一時書込み領域R4のクラスタR40,R41に一時書き込みされたデータは、後に、
図15を参照して説明するデータ書き戻し処理が行われて、本来のファイル/ディレクトリ領域R3におけるクラスタR3k,R3k+1に書き戻された様子を示す。
【0096】
また、
図11において、例えば、一時書込み領域R4のクラスタR43およびR45は、後に、
図13を参照して説明する一時書込み領域R4への書き込みが、閾時間xが経過するまでに完了してデータが書き込まれた個所を示す。ただし、ファイル/ディレクトリ領域R3へのデータ書き戻し処理は、未だ行われていない。
【0097】
さらに、
図11において、例えば、一時書込み領域R4のクラスタR42およびR44は、後に、
図13を参照して説明する一時書込み領域R4への書き込みが、閾時間xを経過しても完了せずに書き込みがキャンセルされた個所を示す。
【0098】
次に、
図12を参照して、閾時間の決定について説明する。
図12は、本実施例に係るメモリ制御プログラム(メモリ制御方法)における閾時間の決定処理の一例を説明するためのフローチャートである。
【0099】
閾時間の決定処理は、例えば、メモリ(SDカード)を使用開始する際に、書き込み試行を複数回行って書き込み時間のばらつきを分析し、書き込み時間が短い場合と長い場合を区別するための閾時間(x)を決めるものである。
【0100】
なお、この閾時間の決定処理は、例えば、デジタルカメラのカードスロットにSDカード2が差し込まれたとき、或いは、予めSDカード2が差し込まれているデジタルカメラの電源をオンしたとき等のSDカード2を使用する初期化処理として行われる。
【0101】
すなわち、閾時間xの決定は、メモリ2を使用する装置に対して、そのメモリ2が接続されたとき、或いは、メモリ2が接続された装置の電源がオンしたときに行うことができる。
【0102】
図12に示されるように、閾時間の決定処理が開始すると、ステップST11において、「一時書込み領域R4」に対して、n回(例えば、100回程度)データを書き込み、書き込んだ際に、書き込みにかかった時間をRAM13に記録する。ここで、一時書込み領域R4にn回データを書き込むのは、全て異なるクラスタを対象として書き込み処理を行う。
【0103】
さらに、ステップST12に進んで、n回の書き込みにかかった時間のうち、中間値(例えば、50番目の値)をxとし、さらに、ステップST13に進んで、xを少し増加させる(例えば、1.1倍する)。
【0104】
すなわち、
図7を参照して説明したように、例えば、消去動作を行うことにより書き込みに要する時間が長時間になるのは、例えば、100回のデータを書き込み時間のうちの50番目(中間)のものよりも長いと考えられる。そこで、小さい値(短い閾時間)xから始めて、少しずつ増加(1.1倍)するようにしている。
【0105】
そして、ステップST14に進んで、n回の各書き込みのうち、xより時間がかかった場合の回数をn-slowとし、さらに、ステップST15に進んで、n-slowが一定値(例えば、n×0.1)を下回ったかどうかを判定する。
【0106】
ステップST15において、n-slowが一定値を下回っていない(n-slow≧n×0.1)と判定すると、ステップST13に戻って、上述したステップST13〜ST15の処理を繰り返す。
【0107】
一方、ステップST15において、n-slowが一定値を下回った(n-slow<n×0.1)と判定すると、ステップST16に進んで、xを閾時間として、閾時間の決定処理を終了する。
【0108】
具体的に、例えば、n=100のとき、n-slowが10を下回った、すなわち、消去動作を行うことにより書き込みに要する時間が長時間になるのは、100回のうち10回に満たないとして、その時の閾時間xを決定する。なお、決定された閾時間xは、例えば、デジタルカメラがオンしている間中、保持されることになる。
【0109】
ここで、閾時間xは、小さな値(短い時間)の方が書き込みの再試行のコストが小さくなるが、小さくしすぎると、「速く書き込みが終了する場合」を誤判定することになり、書き込み時間が長くなってしまう。
【0110】
逆に、閾時間xは、大きな値(長い時間)の方が書き込みの再試行のコストが大きくなるが、大きくしすぎると、本実施例を適用する効果が薄れてしまう。そのため、「速く書き込みが終了する場合」をできるだけ誤判定しない範囲で、閾時間xを小さな値に決定するのが好ましい。
【0111】
なお、
図12に示す各処理において、n=100、1.1倍、および、n×0.1等は単なる例であり、様々な値に設定することができる。さらに、閾時間xの決定処理は、
図12を参照して説明したものに限定されないのはもちろんである。
【0112】
図13を参照して、一時書込み領域R4への書き込み、および、一時書込み領域R4への書き込みの再試行(再書き込み処理)について説明す
る。図13は、本実施例に係るメモリ制御プログラムにおけるデータ書き込み処理の一例を説明するためのフローチャートである。
【0113】
一時書込み領域R4への書き込み処理は、例えば、メタデータの書き込みを行う際に、直接対象の領域に書き込みを行うのではなく、一旦、一時書込み領域R4に対して書き込みを行う。
【0114】
また、一時書込み領域R4への書き込みの再試行は、一時書込み領域R4に書き込みを行う際、決められた閾時間(x)を過ぎても書き込みが終了しなかった場合、その書き込みをキャンセルして、一時書込み領域R4の別の場所(クラスタ)に改めて書き込みを行う。これを、閾時間x以内で書き込みが完了する場所が見つかるまで繰り返す。
【0115】
図13に示されるように、データ書き込み処理が開始すると、ステップST21において、一時書込み領域R4における「未書き込みクラスタ」へデータを書き込んで、ステップST22に進み、書き込みが完了かどうかを判定する。
【0116】
ステップST22において、書き込みが完了したと判定すると、データ書き込み処理を終了し、書き込みが完了していないと判定すると、ステップST23に進んで、閾時間xを経過したかどうかを判定する。ここで、ステップST22において、一時書込み領域R4における書き込みが完了したと判定した個所(クラスタ)は、例えば、
図11におけるクラスタR43,R45に対応する。
【0117】
ステップST23において、閾時間xを経過したと判定すると、ステップST24に進んで、書き込みをキャンセルしてステップST25に進む。具体的に、例えば、SDかーどの場合には、コマンドCMD12を発行して、書き込みをキャンセルする。ここで、ステップST24において、書き込みをキャンセルした個所は、例えば、
図11におけるクラスタR42,R44に対応する。
【0118】
ステップST25では、一時書込み領域R4における「未書き込みクラスタ」を1つ進めて、ステップST21に戻り、同様の処理を繰り返す。また、ステップST23において、閾時間xを経過していないと判定すると、ステップST22に戻り、同様の処理を繰り返す。
【0119】
図14は、本実施例に係るメモリ制御プログラムにおけるデータ参照処理の一例を説明するためのフローチャートである。ここで、データ参照処理は、例えば、デジタルカメラにおいて、SDカード2に格納された画像データを、表示部15に表示する、或いは、デジタルカメラが接続されたパーソナルコンピュータやテレビ受像機等に転送する場合の処理に相当する。
【0120】
図14に示されるように、データ参照処理が開始すると、ステップST31において、「現在のクラスタ」を「書き込み済みクラスタ」に設定し、ステップST32に進んで、「現在のクラスタ」に参照対象クラスタのデータがあるかどうかを判定する。
【0121】
ステップST32において、「現在のクラスタ」に参照対象クラスタのデータがあると判定すると、ステップST33に進んで、一時領域からデータを読み出して、処理を終了する。
【0122】
一方、ステップST32において、「現在のクラスタ」に参照対象クラスタのデータがないと判定すると、ステップST34において「現在のクラスタ」を1つ進め、ステップST35に進んで、「現在のクラスタ」が「未書き込みクラスタ」かどうかを判定する。
【0123】
ステップST35において、「現在のクラスタ」が「未書き込みクラスタ」であると判定すると、ステップST36に進んで、参照対象クラスタからデータを読み出して、処理を終了する。なお、ステップST35において、「現在のクラスタ」が「未書き込みクラスタ」ではないと判定すると、ステップST32に戻って同様の処理を繰り返す。
【0124】
図15を参照して、一時書込み領域R4からの書き戻しについて説明する。
図15は、本実施例に係るメモリ制御プログラムにおけるデータ書き戻し処理の一例を説明するためのフローチャートである。
【0125】
一時書込み領域R4からの書き戻し処理は、一時書込み領域R4への書き込みが完了した後、本来の書き込み対象領域へデータを書き戻す。一旦、一時書込み領域R4への書き込みが完了すれば、たとえ電源が落ちても書き込んだデータが保持されているので、データの書き戻し処理は、急いで行わなくてもよい。
【0126】
図15に示されるように、データ書き戻し処理が開始すると、ステップST41において、「書き込み済みクラスタ」に有効なデータがあるかどうかを判定、すなわち、RAM13に格納された書き込み済みクラスタ情報131を参照して判定を行う。
【0127】
ステップST41において、有効なデータがあると判定すると、ステップST42に進んで、「書き込み済みクラスタ」のデータを本来のクラスタへコピーしてステップST43に進む。
【0128】
ここで、ステップST42におけるデータのコピー処理は、例えば、
図11における一時書込み領域R4のクラスタR40,R41に一時書き込みされたデータを、本来のファイル/ディレクトリ領域R3におけるクラスタR3k,R3k+1に書き戻す処理に対応する。
【0129】
なお、ステップST41において、「書き込み済みクラスタ」に有効なデータがないと判定すると、直接、ステップST43に進む。ステップST43では、「書き込み済みクラスタ」をクリアし、さらに、ステップST44に進んで、「書き込み済みクラスタ」を1つ進めて、ステップST45において、「書き込み済みクラスタ」が「未書き込みクラスタ」であるかどうかを判定する。
【0130】
ここで、「書き込み済みクラスタ」が「未書き込みクラスタ」であるかどうかの判定は、RAM13に格納された書き込み済みクラスタ情報131および未書き込みクラスタ
情報132を参照して行う。
【0131】
ステップST45において、「書き込み済みクラスタ」が「未書き込みクラスタ」であると判定すると、データ書き戻し処理を終了し、「書き込み済みクラスタ」が「未書き込みクラスタ」ではないと判定すると、ステップST41に戻って同様の処理を繰り返す。
【0132】
このように、一時書込み領域R4への書き込みが完了した後、一時書込み領域R4へ書き込んだデータを本来の領域へ書き戻すようになっている。
【0133】
このように、本実施例によれば、例えば、SDカード等のフラッシュメモリを使った二次記憶装置(記憶媒体,メモリ)に対する書き込み時間のばらつきの影響を回避して、ファイル書き込みの完了時間を短く抑えることができる。これにより、例えば、デジタルカメラによる写真の連続撮影等において、多数のファイルを次々に書き込む処理を高速に行うことが可能になる。
【0134】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではない。また、明細書のそのような記載は、発明の利点および欠点を示すものでもない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【0135】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
(付記1)
メモリに対するデータ書き込みを制御するメモリ制御方法であって、
前記メモリに一時書込み領域を確保し、
前記メモリにデータを書き込むとき、前記一時書込み領域に対して、閾時間に基づいて書き込みを行い、
前記一時書込み領域における第1個所への書き込みが、前記閾時間が経過するまでに完了しない場合には、前記第1個所への書き込みをキャンセルして、前記一時書込み領域における、前記第1個所とは異なる第2個所への書き込みを行う、
ことを特徴とするメモリ制御方法。
【0136】
(付記2)
前記閾時間は、
前記一時書込み領域に対する書き込み試行を複数回行い、書き込み時間のばらつきを分析して決定する、
ことを特徴とする付記1に記載のメモリ制御方法。
【0137】
(付記3)
前記閾時間の決定は、
前記メモリを使用する初期化処理として行われる、
ことを特徴とする付記2に記載のメモリ制御方法。
【0138】
(付記4)
前記閾時間の決定は、
前記メモリを使用する装置に対して、前記メモリが接続されたとき、或いは、前記メモリが接続された装置の電源がオンしたときに行われる、
ことを特徴とする付記2または付記3に記載のメモリ制御方法。
【0139】
(付記5)
前記一時書込み領域は、
前記メモリに設けられたファイル/ディレクトリ領域とは別に、確保される、
ことを特徴とする付記1乃至付記4のいずれか1項に記載のメモリ制御方法。
【0140】
(付記6)
前記一時書込み領域は、
前記メモリに設けられたファイル/ディレクトリ領域に含まれる、
ことを特徴とする付記1乃至付記4のいずれか1項に記載のメモリ制御方法。
【0141】
(付記7)
前記一時書込み領域に書き込まれたデータは、
前記メモリに設けられたファイル/ディレクトリ領域に書き戻される、
ことを特徴とする付記1乃至付記6のいずれか1項に記載のメモリ制御方法。
【0142】
(付記8)
前記メモリは、
データの読み出し時間に対して、消去時間に長時間を要し、
第1データから第2データへの書き換えには、消去動作が行われる記憶媒体である、
ことを特徴とする付記1乃至付記7のいずれか1項に記載のメモリ制御方法。
【0143】
(付記9)
前記メモリは、フラッシュメモリである、
ことを特徴とする付記1乃至付記8のいずれか1項に記載のメモリ制御方法。
【0144】
(付記10)
前記メモリは、SDカードである、
ことを特徴とする付記9に記載のメモリ制御方法。
【0145】
(付記11)
メモリに対するデータ書き込みを制御するメモリ制御プログラムであって、演算処理装置に対して、
前記メモリに一時書込み領域を確保する手順と、
前記メモリにデータを書き込むとき、前記一時書込み領域に対して、閾時間に基づいて書き込みを行う手順と、
前記一時書込み領域における第1個所への書き込みが、前記閾時間が経過するまでに完了しない場合には、前記第1個所への書き込みをキャンセルして、前記一時書込み領域における、前記第1個所とは異なる第2個所への書き込みを行う手順と、を実行させる、
ことを特徴とするメモリ制御プログラム。
【0146】
(付記12)
さらに、前記演算処理装置に対して、
前記一時書込み領域に対する書き込み試行を複数回行い、書き込み時間のばらつきを分析して前記閾時間を決定する手順を実行させる、
ことを特徴とする付記11に記載のメモリ制御プログラム。
【0147】
(付記13)
演算処理装置と、一時記憶を行う第1メモリと、プログラムを格納する第2メモリと、データを書き込む外部メモリとのアクセスを制御するメディアアクセス装置と、を含む半導体集積回路装置であって、
前記演算処理装置は、前記メディアアクセス装置を介して、
前記外部メモリに一時書込み領域を確保し、
前記
外部メモリにデータを書き込むとき、前記一時書込み領域に対して、閾時間に基づいて書き込みを行い、
前記一時書込み領域における第1個所への書き込みが、前記閾時間が経過するまでに完了しない場合には、前記第1個所への書き込みをキャンセルして、前記一時書込み領域における、前記第1個所とは異なる第2個所への書き込みを行う、
ことを特徴とする半導体集積回路装置。
【0148】
(付記14)
前記演算処理装置は、前記メディアアクセス装置を介して、
前記一時書込み領域に対する書き込み試行を複数回行い、書き込み時間のばらつきを分析して前記閾時間を決定する、
ことを特徴とする付記13に記載の半導体集積回路装置。
【0149】
(付記15)
前記第1メモリは、
前記一時書き込み領域における書き込み済み個所の情報および未書き込み個所の情報を格納している、
ことを特徴とする付記13または付記14に記載の半導体集積回路装置。