フラッシュメモリの制御システム
【課題】複数のセクタを使用してデータを保存するとともに、常時一定量の書き込みデータをフラッシュメモリ内に確保しておくことができるフラッシュメモリの制御システムを提供する。
【解決手段】 複数のセクタを使用してデータの書き込みを行うフラッシュメモリの制御システムにおいて、
各セクタの状態を示す状態フラグに基づいてデータの書き込みを行う書き込み制御部を有することを特徴とする。
【解決手段】 複数のセクタを使用してデータの書き込みを行うフラッシュメモリの制御システムにおいて、
各セクタの状態を示す状態フラグに基づいてデータの書き込みを行う書き込み制御部を有することを特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のセクタを使用してデータの書き込みを行うフラッシュメモリの制御システムに関する。
【背景技術】
【0002】
従来より、制御部がバイト単位で取得したデータを書き込む記憶媒体としてフラッシュメモリが使用されている。
【0003】
一般的にフラッシュメモリには以下の特徴がある。
1)セクタと呼ばれるブロック単位で構成されている。
2)バイト単位でのデータの書き換えはできない。データを書き換える場合には一旦セクタ単位でデータを消去する必要がある。
3)データを消去するとセクタの全ビットが“1”となる。
4)図12に示すように、ビット単位で“1”から“0”へ変更するのみのデータ変更である場合には、セクタ単位でデータを消去することなくデータの書き換えが可能である。
下記非特許文献1には、セクタ単位でのデータ消去についてなど、フラッシュメモリの概要が記載されている。
【0004】
図13は従来のフラッシュメモリの制御システムの一例を示すブロック図である。
図13の制御システム100において、制御部101は、周期的にバイト単位で取得した一定長のデータ103をフラッシュメモリ102に書き込む。そして、必要に応じてフラッシュメモリ102からバイト単位で一定長のデータ103を読み出し、処理を行う。制御部101は、処理に必要なデータを保存するメモリ領域101aとROM領域101bを備えている。
【0005】
データ103は、フラッシュメモリ内にてデータが書き込まれている部分と書き込まれていない部分とを判別できるようにするために、全ビット“1”とならないようなデータ構造をとる。
【0006】
図14はフラッシュメモリ102の詳細を示す図である。本図では、フラッシュメモリ102がセクタ1〜セクタ10で構成された例を示している。これらのセクタの中から1つのセクタ(たとえばセクタ10)を使用して、取得したデータ103の書き込みを行う。
【0007】
電源ON等による起動時に、制御部はセクタ10内で最初にデータを書き込むアドレスを検索する。発見されたアドレスは、制御部101のメモリ領域101aに用意したデータ書き込みポインタWPTに設定される。
【0008】
セクタはデータが消去されると全ビットが“1”になる。そのため、データ103を書き込むアドレスは、データ103の一定長を単位とし、セクタ10内で全ビットが“1”になっている最初のアドレスを先頭とした部分になる。
【0009】
制御部101は、データを書き込むごとに書き込みポインタWPTをインクリメントし、順次データをセクタ10に書き込んで行く。セクタ10の最終アドレスまでデータを書き込む(すなわち、セクタ10の最大容量までデータを書き込む)と、制御部101はセクタ10へのデータの書き込みを終了する。
【先行技術文献】
【非特許文献】
【0010】
【非特許文献1】「フラッシュメモリガイドブック」、Spansion Japan株式会社、2008年9月25日、p4-5
【発明の概要】
【発明が解決しようとする課題】
【0011】
セクタ10の最大容量までデータが書き込まれた状態でさらに新しいデータを書き込む場合には、書き込み領域を作るために一旦セクタ10のデータを全て消去し、その上で新たなデータを書き込む必要がある。
【0012】
しかしながら、フラッシュメモリ102に保存するデータ103が、たとえば操作履歴やアラーム状態のログデータ等のように時系列で保存する必要がある場合には、セクタ10を消去することによりそれまでにセクタ10に書き込まれたデータが全て失われることとなり、データとしての価値が損なわれてしまう。
【0013】
本発明は、従来の問題をなくし、複数のセクタを使用してデータを保存するとともに、常時一定量の書き込みデータをフラッシュメモリ内に確保しておくことができるフラッシュメモリの制御システムを提供することを目的とする。
【課題を解決するための手段】
【0014】
このような課題を解決するために、請求項1に記載の発明は、
複数のセクタを使用してデータの書き込みを行うフラッシュメモリの制御システムにおいて、
各セクタの状態を示す状態フラグに基づいてデータの書き込みを行う書き込み制御部を有することを特徴とする。
【0015】
請求項2に記載の発明は、
請求項1に記載のフラッシュメモリの制御システムにおいて、
前記状態フラグは各セクタの一部として設けられていることを特徴とする。
【0016】
請求項3に記載の発明は、
請求項1または2に記載のフラッシュメモリの制御システムにおいて、
前記書き込み制御部は、各セクタの書き込み可能データ数と、次に書き込むセクタ名とを含むセクタ制御情報を保持することを特徴とする。
【0017】
請求項4に記載の発明は、
請求項1〜3のいずれかに記載のフラッシュメモリの制御システムにおいて、
前記書き込み制御部は、
前記状態フラグを参照して書き込み可能なセクタを検索し、発見されたセクタに対してデータの書き込みを行い、
書き込み可能なセクタが発見されない場合には、前記セクタ制御情報を参照して最も古いデータが保存されたセクタ内のデータを消去し、そのセクタに対してデータの書き込みを行うことを特徴とする。
【0018】
請求項5に記載の発明は、
請求項1〜4のいずれかに記載のフラッシュメモリの制御システムにおいて、
前記状態フラグは、
そのセクタが未だ制御されていない初期状態であることを示す第1の状態と、
そのセクタ内のデータがすべて消去された状態であることを示す第2の状態と、
そのセクタがデータの書き込み中であることを示す第3の状態と、
そのセクタが最大容量までデータが書き込まれた状態であることを示す第4の状態と、
を備えることを特徴とする。
【0019】
請求項6に記載の発明は、
請求項5に記載のフラッシュメモリの制御システムにおいて、
前記状態フラグは、前記第1〜第4の状態までセクタ単位でデータを消去することなく順次状態遷移が可能な値を設定値として有することを特徴とする。
【発明の効果】
【0020】
本発明によれば、
複数のセクタを使用してデータの書き込みを行うフラッシュメモリの制御システムにおいて、各セクタの状態を示す状態フラグに基づいてデータの書き込みを行う書き込み制御部を有することにより、
複数のセクタを使用してデータを保存するとともに、常時一定量の書き込みデータをフラッシュメモリ内に確保しておくことができるフラッシュメモリの制御システムを提供できる。
【図面の簡単な説明】
【0021】
【図1】本発明のフラッシュメモリの制御システムの一実施例を示す図である。
【図2】図1のフラッシュメモリの詳細を示す図である。
【図3】セクタの状態遷移を示す図である。
【図4】状態フラグの設定値を示す図である。
【図5】セクタ制御情報の例を示す図である。
【図6】セクタ1,2へのデータの書き込み処理のフローを示す図である。
【図7】セクタの書き込みと消去を示す図である。
【図8】データの書き込みセクタとして4セクタを割り当てた例を示す図である。
【図9】図8に示す書き込みセクタ構成における、セクタの書き込みと消去を示す図である。
【図10】データの書き込みセクタに不連続なセクタを含む例を示す図である。
【図11】セクタ状態と読み出すデータの先頭アドレスおよびデータ数の関係を示す図である。
【図12】フラッシュメモリのデータ書き換えについての説明図である。
【図13】従来のフラッシュメモリの制御システムの一例を示すブロック図である。
【図14】図13に示すフラッシュメモリの詳細を示す図である。
【発明を実施するための形態】
【実施例1】
【0022】
図1は、本発明のフラッシュメモリの制御システムの一実施例を示す図である。
図1の制御システム1において、制御部11は、周期的にバイト単位で取得した一定長のデータ13をフラッシュメモリ12に書き込む。そして、必要に応じてフラッシュメモリ12からバイト単位で一定長のデータ13を読み出し、処理を行う。制御部11は、処理に必要なデータを保存するメモリ領域11aとROM領域11bを備えている。
【0023】
データ13は、フラッシュメモリ内にてデータが書き込まれている部分と書き込まれていない部分とを判別できるようにするために、全ビット“1”とならないようなデータ構造をとる。
【0024】
図2はフラッシュメモリ12の詳細を示す図である。本図では、フラッシュメモリ12がセクタ1〜セクタ11で構成された例を示している。本実施例では、これらのセクタのうちセクタ1とセクタ2をデータ書き込みセクタとして使用し、データ13の保存を行う。
【0025】
セクタ1およびセクタ2には、それぞれのセクタの状態を示す2つの状態フラグを設ける。各セクタの先頭アドレスを「状態フラグ1」、最終アドレスを「状態フラグ2」として、フラグの役割を担わせる。先頭アドレスと最終アドレス以外の中間のアドレスは、データ書き込み用のアドレスとして用いる。
【0026】
セクタ1に書き込み可能なデータ数はデータD11〜データD1N1までのN1個、セクタ2に書き込み可能なデータ数はデータD21〜データD2N2までのN2個とする。セクタ1の状態フラグ1はFLG11、状態フラグ2はFLG12とする。セクタ2の状態フラグ1はFLG21、状態フラグ2はFLG22とする。セクタ1およびセクタ2は、両セクタに共通して用いられる書き込みポインタWPTにて指定されるアドレスにデータが書き込まれる。
【0027】
状態フラグ1,2には、「初期状態」、「クリア状態」、「書き込み状態」、「FULL状態」の4つの状態を用意する。
「初期状態」:セクタ内が未制御の状態、または、セクタ内のデータを消去中の状態。
「クリア状態」:セクタ内のデータがすべて消去され、その後まだ1度もデータが書き込まれていない状態。
「書き込み状態」:最初のデータが書き込まれてから、セクタの最大容量に至るまでの状態。
「FULL状態」:セクタの最大容量までデータが書き込まれ、新たなデータの書き込みができなくなった状態。
【0028】
図3はセクタの状態遷移を示す図である。フラッシュメモリが未制御の状態(フラッシュメモリは出荷時の状態のまま、すなわち一度もデータが書かれていない状態)から本フローはスタートする。
未制御の状態は、セクタにデータが書き込まれていないため「初期状態」と定義し、データの消去を実行し、「クリア状態」に遷移する。この状態でデータの書き込みが可能な状態になる。データの書き込みが開始されると、セクタは「クリア状態」から「書き込み状態」に遷移する。データの書き込み中はこの「書き込み状態」が保持される。セクタの最大容量までデータが書き込まれ、新たなデータの書き込みができなくなると、セクタは「FULL状態」に遷移する。新たなデータを書き込むためには、それまでにセクタ内に書き込まれたデータを消去する必要がある。データの消去が開始されると、セクタは「初期状態」に遷移する。データ消去が完了すると「クリア状態」に遷移し、再びデータの書き込みが可能な状態となる。
【0029】
状態フラグ1,2は各書き込みセクタの一部として設ける。すなわち、状態フラグを不揮発性メモリであるフラッシュメモリ内に設けることにより、一旦電源をOFFして再起動したような場合であっても、再起動前の状態を継続して動作可能となる。
【0030】
なお、状態フラグ1,2はセクタデータの一部として設けられるため、データを書き換える場合にはセクタ単位でデータを消去する必要があるというフラッシュメモリの制約を受ける。この制約を回避するため、状態フラグ1,2の設定値はセクタ単位でのデータ消去を行わずともデータの書き換えが可能な値とする。すなわち、セクタの状態変化によりフラグ情報を書き換える場合に、セクタ単位でのデータ消去が必要ない値とした。
【0031】
図4は状態フラグの設定値を示す図である。「初期状態」では、状態フラグ1,2ともに0xFFFFFFFF(16進数)を設定値とする。「クリア状態」では状態フラグ1は0x77777777、状態フラグ2は0xFFFFFFFFとする。「書き込み状態」では、状態フラグ1は0x33333333、状態フラグ2は0xFFFFFFFFとする。「FULL状態」では、状態フラグ1は0x33333333、状態フラグ2は0x77777777とする。
【0032】
セクタ内が未制御のとき、またはセクタの消去中は、セクタ内のデータが自動的に全ビット“1”となる。そのため、「初期状態」では状態フラグ1,2ともに0xFFFFFFFF(16進数)を設定値とする。
【0033】
セクタの消去が終了した時点で、制御部11は書き込みポインタWPTを状態フラグ1である先頭アドレスに設定し、値を0x77777777に書き換える。なお、16進数のFはビットデータでは“1111”であり、16進数の7は“0111”である。16進数のF(“1111”)を7(“0111”)に変更するのは、“1”のビットを“0”に書き換えるだけの変更であるため、セクタの消去を行うことなくデータの書き換えが可能である。同様に、16進数の7(“0111”)を3(“0011”)に変更するのも、セクタの消去を行うことなく可能である。
【0034】
制御部11には、図5に示すようなセクタ制御情報を保持させておく。図5の(a)は書き込み対象となるセクタ、図5の(b)は各書き込み対象セクタの制御情報の内容を示している。セクタの制御情報には、各セクタのセクタ種別(先頭セクタ、中間セクタ、最終セクタ)、次に書き込むセクタ名、書き込み可能なデータ数が含まれている。
先頭セクタは書き込み対象セクタのうち最初にデータの書き込みを行うセクタ、最終セクタは最後にデータの書き込みを行うセクタ、中間セクタは先頭セクタと最終セクタの間のセクタである。
【0035】
図5の(b)において、セクタ1はセクタ種別が先頭セクタ、次に書き込むセクタはセクタ2、書き込み可能なデータ数はN1個となっている。また、セクタ2はセクタ種別が最終セクタ、次に書き込むセクタはセクタ2、書き込み可能なデータ数はN2個となっている。なお、図5の例では、書き込み対象セクタが2つであるため、中間セクタがない。
【0036】
図6はセクタ1,2へのデータの書き込み処理のフローを示す図である。
ユーザによりデータの書き込み動作を伴う作業が指示されると本フローはスタートする。
【0037】
まず、ステップS1において、制御部1はセクタ1,2のセクタ状態をチェックし、「初期状態」のセクタがあるかどうかをチェックする。具体的には、制御部1はセクタ1,2の状態フラグ(状態フラグ1,2)を確認し、「初期状態」となっているセクタがあるかを検索する。「初期状態」のセクタが発見された場合には、ステップS2に進む。「初期状態」のセクタが発見されなかった場合には、ステップS4に進む。
【0038】
ステップS2では、「初期状態」のセクタ内のデータを消去し、ステップS3に進む。
ステップS3では、ステップS2でデータを消去したセクタのセクタ状態を「クリア状態」に設定し、ステップS4に進む。
【0039】
ステップS4では、全てのセクタ(すなわち、セクタ1、2)が「クリア状態」になっているかをチェックする。セクタ1,2が両方とも「クリア状態」である場合にはステップS5に進み、それ以外の場合にはステップS7に進む。
【0040】
セクタ1,2が「クリア状態」の場合には、書き込み対象セクタであるセクタ1,2内のデータが全て消去され、かつ消去後まだ一度もデータが書き込まれていない状態である。ステップS5では、制御部11はセクタ1(書き込み先頭セクタ)のセクタ状態を「書き込み状態」に設定する。具体的には、制御部11はセクタ1の先頭アドレスに書き込みポインタWPTを設定するとともに、この先頭アドレスに割り振られている状態フラグ1を「書き込み状態」の設定値に書き換える。その後ステップS6に進む。
【0041】
ステップS6では、制御部11は書き込みポインタWPTをセクタ1のデータ先頭アドレスに設定し、ステップS8に進む。
【0042】
ステップS7では、まず「書き込み状態」となっているセクタを検索する。「書き込み状態」のセクタが発見された場合には、そのセクタでデータがまだ書き込まれていない最初のアドレスを検索する。アドレスの検索は全ビット“1”となっているアドレスを検索することにより行う。制御部11は、発見された未書き込みアドレスに書き込みポインタWPTを設定し、ステップS8に進む。
これにより、再起動等した場合であっても、再起動前の状態を継続して動作させることが可能となる。また、書き込みポインタWPTを設定すべきアドレス検索の対象も、全セクタではなく、「書き込み状態」のセクタのみでよいため、検索時間を短縮できる。
【0043】
ステップS7において、「書き込み状態」のセクタが発見されない場合には、「クリア状態」のセクタを検索する。発見されたセクタのセクタ状態を「書き込み状態」に変更し、書き込みポインタWPTをそのセクタのデータ先頭アドレスに設定し、ステップS8に進む。
【0044】
ステップS8では、制御部11は、書き込みポインタWPTが設定されたアドレスにデータ13のデータを書き込み、ステップS9に進む。
ステップS9では、制御部11は、書き込みポインタWPTをインクリメントし、書き込みアドレスを次のアドレスに設定し、ステップS10に進む。
【0045】
ステップS10では、そのセクタの最大容量までデータを書き込んだかどうかをチェックする。具体的には、書き込みポインタWPTに設定された値とそのセクタに書き込み可能なデータ数とを比較し、書き込みポインタWPTに設定された値が書き込み可能データ数を超える場合にはステップS11に進む。書き込みポインタWPTに設定された値が書き込み可能データ数を超えていない場合には、ステップS8に戻り、そのセクタにデータの書き込みを繰り返す。
【0046】
ステップS11では、それまでデータを書き込んでいたセクタのセクタ状態を「FULL状態」に設定する。具体的には、そのセクタの状態フラグ2を「FULL状態」の設定値に書き換える。その後ステップS12に進む。
【0047】
ステップS12では、制御部11はセクタ制御情報を参照して次の書き込みセクタを把握し、次の書き込みセクタのセクタ状態を確認する。具体的には、現在の書き込みセクタがセクタ1であった場合には次の書き込みセクタとしてセクタ2のセクタ状態を確認し、現在の書き込みセクタがセクタ2であった場合にはセクタ1のセクタ状態を確認する。次の書き込みセクタが「FULL状態」である場合にはステップS13に進み、それ以外の場合にはステップS15に進む。
【0048】
ステップS13では、次の書き込みセクタが「FULL状態」のため、新たなデータを書き込めるようにするよう、次の書き込みセクタ内のデータを消去し、ステップS14に進む。
【0049】
ステップS14では、消去した次の書き込みセクタのセクタ状態を「クリア状態」に設定する。具体的には、そのセクタの状態フラグ1を「クリア状態」の設定値に書き換える。その後S15に進む。
【0050】
ステップS15では、次の書き込みセクタのセクタ状態を「書き込み状態」に設定し、ステップS16に進む。具体的には、そのセクタの状態フラグ1を「書き込み状態」の設定値に書き換える。その後ステップS16に進む。
【0051】
ステップS16では、書き込みポインタWPTを次の書き込みセクタのデータ先頭アドレスに設定し、ステップS8に戻る。以降、ステップS8〜ステップS16を繰り返すことで、データ13のデータを順次フラッシュメモリに保存していく。
【0052】
図7はセクタの書き込みと消去を示す図である。
図7の(a)は、セクタ1,2が両方とも「クリア状態」となっている状態である。書き込みポインタWPTは先頭セクタとなるセクタ1の先頭アドレスに設定される(図7の(a))。
【0053】
セクタ1にデータ13が書き込まれていき、書き込みポインタWPTもインクリメントされていく(図7の(b))。セクタ1の最大容量までデータが書き込まれると、セクタ1は「FULL状態」となり、引き続き次の書き込みセクタであるセクタ2にデータ13が書き込まれていく(図7の(c))。
【0054】
セクタ2にも最大容量までデータが書き込まれると、セクタ2も「FULL状態」となる(図7の(d))。セクタ2の次の書き込みセクタはセクタ1である。そこで、制御部11は、セクタ1に保存されたデータをセクタ単位で消去し、一旦セクタ1を「クリア状態」に戻す(図7の(e))。その後、セクタ1に新たなデータの書き込みを行う(図7の(f))。
【0055】
セクタ1の最大容量までデータが書き込まれると、セクタ1は再び「FULL状態」になる(図7の(g))。セクタ1の次の書き込みセクタはセクタ2である。そこで、制御部11は、セクタ2に保存されたデータをセクタ単位で消去し、一旦セクタ2を「クリア状態」に戻す(図7の(h))。その後、セクタ2に新たなデータの書き込みを行う(図7の(i))。
【0056】
セクタ2が再び「FULL状態」に達すると(図7の(j))、再度セクタ1を消去し、セクタ1に新たなデータの書き込みを行う(図7の(e))。以降、図7の(e)〜(j)までの流れを繰り返す。
【0057】
このように、制御部11にてデータ書き込みセクタのセクタ状態を把握し、取得時間が古いデータが書き込まれているセクタのみデータを消去して新たな書き込みを行い、他のセクタのデータは保存する。これにより、常時一定量のデータをフラッシュメモリ内に残しておくことができる。このような制御を可能とするために、フラッシュメモリの書き込み対象セクタに状態フラグ1,2を用意し、制御部11内にセクタ制御情報を設けている。
【0058】
本実施例は以上のように構成され、
複数のセクタを使用してデータ13の書き込みを行うフラッシュメモリの制御システムにおいて、書き込みセクタ1,2の状態を示す状態フラグFLG11〜FLG22に基づいてデータ13の書き込みを行う書き込み制御部11を有するため、
常時一定量の書き込みデータをフラッシュメモリ内に確保しておくことができるフラッシュメモリの制御システムを提供できる。
【0059】
取得時間が最も古いデータが保存されたセクタを消去して新たなデータを書き込み、取得時間が新しいデータは保存されるため、たとえば操作履歴やアラーム状態のログデータ等のように時系列で保存する必要があるデータの管理が可能となる。
【0060】
また、状態フラグFLG11〜FLG22は書き込みセクタ1,2の一部として設けられているため、一旦電源をOFFして再起動したような場合であっても、再起動前の状態を継続して動作可能となる。
【0061】
なお、本実施例では、データの書き込みセクタとしてフラッシュメモリ内の2セクタを割り当てた例で説明したが、書き込みセクタの数はより多くてもよい。
【0062】
図8はデータの書き込みセクタとして4セクタを割り当てた例を示す図である。図8の(a)は書き込み対象セクタ、図8の(b)は書き込み対象セクタの制御情報の内容を示している。図8では、フラッシュメモリ内のセクタ1〜セクタ4を書き込みセクタに割り当て、セクタ1を書き込み先頭セクタ、セクタ2,3を中間セクタ、セクタ4を最終セクタとしている。
【0063】
図9は、図8に示す書き込みセクタ構成における、セクタの書き込みと消去を示す図である。書き込み先頭セクタであるセクタ1からデータ13を書き込む(図9の(a))。セクタ1が「FULL状態」になると、引き続きセクタ2(図9の(b))、セクタ3(図9の(c))、セクタ4(図9の(d))と順次データを書き込んで行く。セクタ4の次に書き込むセクタはセクタ1であるが、セクタ1はすでに「FULL状態」となっている。そのため、さらに新たなデータを書き込む場合には、セクタ1を消去し、そこに新たなデータを書き込む(図9の(e))。さらにセクタ1が「FULL状態」になった場合には、セクタ2を消去した上で新たなデータを書き込む(図9の(f))。以降、次に書き込むセクタが「FULL状態」であれば、そのセクタに書き込まれているデータを消去し、そこに新しいデータを書き込む制御を繰り返す(図9の(g)、(h))。
これにより、取得時間が最も古いデータが書き込まれているセクタのみが消去されるとともに、一旦セクタ1〜4までデータが書き込まれた後は、常時一定量のデータ(3セクタ分)をフラッシュメモリ内に残しておくことができる。
【0064】
なお、図8の例では4つの連続するセクタを書き込みセクタとして使用したが、書き込みセクタは必ずしも連続していなくてもよい。
【0065】
図10はデータの書き込みセクタに不連続なセクタを含む例を示す図である。図10の(a)は書き込み対象セクタ、図10の(b)は書き込み対象セクタの制御情報の内容を示している。図10では、フラッシュメモリ内のセクタ2,5,7,10,11を書き込みセクタに割り当て、セクタ2を書き込み先頭セクタ、セクタ5,7,10を中間セクタ、セクタ11を最終セクタとしている。
【0066】
図10のように書き込みセクタが不連続であっても、制御部11に図10の(b)のようなセクタ制御情報を保持させることによって、割り当てる書き込みセクタのセクタ数、セクタ容量、セクタ配置に制限なく、本発明のフラッシュメモリ制御システムを適用できる。
【0067】
なお、フラッシュメモリに書き込まれたデータを読み出すには、書き込みデータの先頭アドレスと書き込みデータ数を取得することが必要となる。これらの情報は状態フラグと書き込みポインタWPTの位置から取得可能である。
【0068】
図11は、セクタ状態と読み出すデータの先頭アドレスおよびデータ数の関係を示す図である。図11の(a1)〜(a5)はセクタ状態を示し、図11の(b)は(a1)〜(a5)の各セクタ状態における読み出すデータの先頭アドレスとデータ数をまとめたものである。図11の(a1)〜(a5)において、書き込みポインタWPTはそれぞれセクタ1、セクタ3、セクタ4、セクタ1、セクタ3内のアドレスに設定され、そのセクタ内にN個のデータが書き込まれた状態になっているものとする。
【0069】
図11の(a1)の状態では、次の書き込みセクタは「クリア状態」であることから、セクタ2〜セクタ4には一切データが書き込まれていないことがわかる。したがって、データの読み出しを行う際は、データの先頭アドレスはセクタ1のデータ先頭アドレス、データ数はセクタ1に書き込んだデータ数Nであることが把握できる。
【0070】
図11の(a2)の状態では、次の書き込みセクタは「クリア状態」であることから、セクタ1〜セクタ3までデータが書き込まれており、かつ、セクタ4には一切データが書き込まれていないことがわかる。したがって、データの読み出しを行う際は、データの先頭アドレスはセクタ1のデータ先頭アドレス、データ数はセクタ1,2に書き込んだデータ数+セクタ3に書き込んだデータ数Nの合計(N1+N2+N)として求められる。
【0071】
図11の(a3)の状態では、次の書き込みセクタは「FULL状態」であることから、セクタ1〜セクタ3までデータが書き込まれていることがわかる。したがって、データの読み出しを行う際は、データの先頭アドレスはセクタ1のデータ先頭アドレス、データ数はセクタ1〜3に書き込んだデータ数+セクタ4に書き込んだデータ数Nの合計(N1+N2+N3+N)として求められる。
【0072】
図11の(a4)の状態では、次の書き込みセクタは「FULL状態」であることから、セクタ2〜セクタ4までデータが書き込まれていることがわかる。したがって、データの読み出しを行う際は、データの先頭アドレスはセクタ2のデータ先頭アドレス、データ数はセクタ2〜4に書き込んだデータ数+セクタ1に書き込んだデータ数Nの合計(N2+N3+N4+N)として求められる。
【0073】
図11の(a5)の状態では、次の書き込みセクタは「FULL状態」であることから、セクタ4,1,2にデータが書き込まれていることがわかる。したがって、データの読み出しを行う際は、データの先頭アドレスはセクタ4のデータ先頭アドレス、データ数はセクタ4,1,2に書き込んだデータ数+セクタ3に書き込んだデータ数Nの合計(N4+N1+N2+N)として求められる。
【0074】
このように、本発明では、データの読み出しにあたり、読み出すデータの先頭アドレスとデータ数を、書き込み制御で使用する書き込みポインタWPTとセクタ状態から取得でき、読み出し制御専用にポインタ等を用意する必要がない。そのため、制御部11はデータの書き込みに集中でき、書き込み制御の時間短縮を図ることが可能となる。
【0075】
なお、本実施例における制御部11は特許請求の範囲における書き込み制御部に相当する。また、本実施例におけるセクタの「初期状態」は特許請求の範囲における「第1の状態」に相当し、「クリア状態」は「第2の状態」に相当し、「書き込み状態」は「第3の状態」に相当し、「FULL状態」は「第4の状態」に相当する。
【符号の説明】
【0076】
11 制御部
12 フラッシュメモリ
13 データ
【技術分野】
【0001】
本発明は、複数のセクタを使用してデータの書き込みを行うフラッシュメモリの制御システムに関する。
【背景技術】
【0002】
従来より、制御部がバイト単位で取得したデータを書き込む記憶媒体としてフラッシュメモリが使用されている。
【0003】
一般的にフラッシュメモリには以下の特徴がある。
1)セクタと呼ばれるブロック単位で構成されている。
2)バイト単位でのデータの書き換えはできない。データを書き換える場合には一旦セクタ単位でデータを消去する必要がある。
3)データを消去するとセクタの全ビットが“1”となる。
4)図12に示すように、ビット単位で“1”から“0”へ変更するのみのデータ変更である場合には、セクタ単位でデータを消去することなくデータの書き換えが可能である。
下記非特許文献1には、セクタ単位でのデータ消去についてなど、フラッシュメモリの概要が記載されている。
【0004】
図13は従来のフラッシュメモリの制御システムの一例を示すブロック図である。
図13の制御システム100において、制御部101は、周期的にバイト単位で取得した一定長のデータ103をフラッシュメモリ102に書き込む。そして、必要に応じてフラッシュメモリ102からバイト単位で一定長のデータ103を読み出し、処理を行う。制御部101は、処理に必要なデータを保存するメモリ領域101aとROM領域101bを備えている。
【0005】
データ103は、フラッシュメモリ内にてデータが書き込まれている部分と書き込まれていない部分とを判別できるようにするために、全ビット“1”とならないようなデータ構造をとる。
【0006】
図14はフラッシュメモリ102の詳細を示す図である。本図では、フラッシュメモリ102がセクタ1〜セクタ10で構成された例を示している。これらのセクタの中から1つのセクタ(たとえばセクタ10)を使用して、取得したデータ103の書き込みを行う。
【0007】
電源ON等による起動時に、制御部はセクタ10内で最初にデータを書き込むアドレスを検索する。発見されたアドレスは、制御部101のメモリ領域101aに用意したデータ書き込みポインタWPTに設定される。
【0008】
セクタはデータが消去されると全ビットが“1”になる。そのため、データ103を書き込むアドレスは、データ103の一定長を単位とし、セクタ10内で全ビットが“1”になっている最初のアドレスを先頭とした部分になる。
【0009】
制御部101は、データを書き込むごとに書き込みポインタWPTをインクリメントし、順次データをセクタ10に書き込んで行く。セクタ10の最終アドレスまでデータを書き込む(すなわち、セクタ10の最大容量までデータを書き込む)と、制御部101はセクタ10へのデータの書き込みを終了する。
【先行技術文献】
【非特許文献】
【0010】
【非特許文献1】「フラッシュメモリガイドブック」、Spansion Japan株式会社、2008年9月25日、p4-5
【発明の概要】
【発明が解決しようとする課題】
【0011】
セクタ10の最大容量までデータが書き込まれた状態でさらに新しいデータを書き込む場合には、書き込み領域を作るために一旦セクタ10のデータを全て消去し、その上で新たなデータを書き込む必要がある。
【0012】
しかしながら、フラッシュメモリ102に保存するデータ103が、たとえば操作履歴やアラーム状態のログデータ等のように時系列で保存する必要がある場合には、セクタ10を消去することによりそれまでにセクタ10に書き込まれたデータが全て失われることとなり、データとしての価値が損なわれてしまう。
【0013】
本発明は、従来の問題をなくし、複数のセクタを使用してデータを保存するとともに、常時一定量の書き込みデータをフラッシュメモリ内に確保しておくことができるフラッシュメモリの制御システムを提供することを目的とする。
【課題を解決するための手段】
【0014】
このような課題を解決するために、請求項1に記載の発明は、
複数のセクタを使用してデータの書き込みを行うフラッシュメモリの制御システムにおいて、
各セクタの状態を示す状態フラグに基づいてデータの書き込みを行う書き込み制御部を有することを特徴とする。
【0015】
請求項2に記載の発明は、
請求項1に記載のフラッシュメモリの制御システムにおいて、
前記状態フラグは各セクタの一部として設けられていることを特徴とする。
【0016】
請求項3に記載の発明は、
請求項1または2に記載のフラッシュメモリの制御システムにおいて、
前記書き込み制御部は、各セクタの書き込み可能データ数と、次に書き込むセクタ名とを含むセクタ制御情報を保持することを特徴とする。
【0017】
請求項4に記載の発明は、
請求項1〜3のいずれかに記載のフラッシュメモリの制御システムにおいて、
前記書き込み制御部は、
前記状態フラグを参照して書き込み可能なセクタを検索し、発見されたセクタに対してデータの書き込みを行い、
書き込み可能なセクタが発見されない場合には、前記セクタ制御情報を参照して最も古いデータが保存されたセクタ内のデータを消去し、そのセクタに対してデータの書き込みを行うことを特徴とする。
【0018】
請求項5に記載の発明は、
請求項1〜4のいずれかに記載のフラッシュメモリの制御システムにおいて、
前記状態フラグは、
そのセクタが未だ制御されていない初期状態であることを示す第1の状態と、
そのセクタ内のデータがすべて消去された状態であることを示す第2の状態と、
そのセクタがデータの書き込み中であることを示す第3の状態と、
そのセクタが最大容量までデータが書き込まれた状態であることを示す第4の状態と、
を備えることを特徴とする。
【0019】
請求項6に記載の発明は、
請求項5に記載のフラッシュメモリの制御システムにおいて、
前記状態フラグは、前記第1〜第4の状態までセクタ単位でデータを消去することなく順次状態遷移が可能な値を設定値として有することを特徴とする。
【発明の効果】
【0020】
本発明によれば、
複数のセクタを使用してデータの書き込みを行うフラッシュメモリの制御システムにおいて、各セクタの状態を示す状態フラグに基づいてデータの書き込みを行う書き込み制御部を有することにより、
複数のセクタを使用してデータを保存するとともに、常時一定量の書き込みデータをフラッシュメモリ内に確保しておくことができるフラッシュメモリの制御システムを提供できる。
【図面の簡単な説明】
【0021】
【図1】本発明のフラッシュメモリの制御システムの一実施例を示す図である。
【図2】図1のフラッシュメモリの詳細を示す図である。
【図3】セクタの状態遷移を示す図である。
【図4】状態フラグの設定値を示す図である。
【図5】セクタ制御情報の例を示す図である。
【図6】セクタ1,2へのデータの書き込み処理のフローを示す図である。
【図7】セクタの書き込みと消去を示す図である。
【図8】データの書き込みセクタとして4セクタを割り当てた例を示す図である。
【図9】図8に示す書き込みセクタ構成における、セクタの書き込みと消去を示す図である。
【図10】データの書き込みセクタに不連続なセクタを含む例を示す図である。
【図11】セクタ状態と読み出すデータの先頭アドレスおよびデータ数の関係を示す図である。
【図12】フラッシュメモリのデータ書き換えについての説明図である。
【図13】従来のフラッシュメモリの制御システムの一例を示すブロック図である。
【図14】図13に示すフラッシュメモリの詳細を示す図である。
【発明を実施するための形態】
【実施例1】
【0022】
図1は、本発明のフラッシュメモリの制御システムの一実施例を示す図である。
図1の制御システム1において、制御部11は、周期的にバイト単位で取得した一定長のデータ13をフラッシュメモリ12に書き込む。そして、必要に応じてフラッシュメモリ12からバイト単位で一定長のデータ13を読み出し、処理を行う。制御部11は、処理に必要なデータを保存するメモリ領域11aとROM領域11bを備えている。
【0023】
データ13は、フラッシュメモリ内にてデータが書き込まれている部分と書き込まれていない部分とを判別できるようにするために、全ビット“1”とならないようなデータ構造をとる。
【0024】
図2はフラッシュメモリ12の詳細を示す図である。本図では、フラッシュメモリ12がセクタ1〜セクタ11で構成された例を示している。本実施例では、これらのセクタのうちセクタ1とセクタ2をデータ書き込みセクタとして使用し、データ13の保存を行う。
【0025】
セクタ1およびセクタ2には、それぞれのセクタの状態を示す2つの状態フラグを設ける。各セクタの先頭アドレスを「状態フラグ1」、最終アドレスを「状態フラグ2」として、フラグの役割を担わせる。先頭アドレスと最終アドレス以外の中間のアドレスは、データ書き込み用のアドレスとして用いる。
【0026】
セクタ1に書き込み可能なデータ数はデータD11〜データD1N1までのN1個、セクタ2に書き込み可能なデータ数はデータD21〜データD2N2までのN2個とする。セクタ1の状態フラグ1はFLG11、状態フラグ2はFLG12とする。セクタ2の状態フラグ1はFLG21、状態フラグ2はFLG22とする。セクタ1およびセクタ2は、両セクタに共通して用いられる書き込みポインタWPTにて指定されるアドレスにデータが書き込まれる。
【0027】
状態フラグ1,2には、「初期状態」、「クリア状態」、「書き込み状態」、「FULL状態」の4つの状態を用意する。
「初期状態」:セクタ内が未制御の状態、または、セクタ内のデータを消去中の状態。
「クリア状態」:セクタ内のデータがすべて消去され、その後まだ1度もデータが書き込まれていない状態。
「書き込み状態」:最初のデータが書き込まれてから、セクタの最大容量に至るまでの状態。
「FULL状態」:セクタの最大容量までデータが書き込まれ、新たなデータの書き込みができなくなった状態。
【0028】
図3はセクタの状態遷移を示す図である。フラッシュメモリが未制御の状態(フラッシュメモリは出荷時の状態のまま、すなわち一度もデータが書かれていない状態)から本フローはスタートする。
未制御の状態は、セクタにデータが書き込まれていないため「初期状態」と定義し、データの消去を実行し、「クリア状態」に遷移する。この状態でデータの書き込みが可能な状態になる。データの書き込みが開始されると、セクタは「クリア状態」から「書き込み状態」に遷移する。データの書き込み中はこの「書き込み状態」が保持される。セクタの最大容量までデータが書き込まれ、新たなデータの書き込みができなくなると、セクタは「FULL状態」に遷移する。新たなデータを書き込むためには、それまでにセクタ内に書き込まれたデータを消去する必要がある。データの消去が開始されると、セクタは「初期状態」に遷移する。データ消去が完了すると「クリア状態」に遷移し、再びデータの書き込みが可能な状態となる。
【0029】
状態フラグ1,2は各書き込みセクタの一部として設ける。すなわち、状態フラグを不揮発性メモリであるフラッシュメモリ内に設けることにより、一旦電源をOFFして再起動したような場合であっても、再起動前の状態を継続して動作可能となる。
【0030】
なお、状態フラグ1,2はセクタデータの一部として設けられるため、データを書き換える場合にはセクタ単位でデータを消去する必要があるというフラッシュメモリの制約を受ける。この制約を回避するため、状態フラグ1,2の設定値はセクタ単位でのデータ消去を行わずともデータの書き換えが可能な値とする。すなわち、セクタの状態変化によりフラグ情報を書き換える場合に、セクタ単位でのデータ消去が必要ない値とした。
【0031】
図4は状態フラグの設定値を示す図である。「初期状態」では、状態フラグ1,2ともに0xFFFFFFFF(16進数)を設定値とする。「クリア状態」では状態フラグ1は0x77777777、状態フラグ2は0xFFFFFFFFとする。「書き込み状態」では、状態フラグ1は0x33333333、状態フラグ2は0xFFFFFFFFとする。「FULL状態」では、状態フラグ1は0x33333333、状態フラグ2は0x77777777とする。
【0032】
セクタ内が未制御のとき、またはセクタの消去中は、セクタ内のデータが自動的に全ビット“1”となる。そのため、「初期状態」では状態フラグ1,2ともに0xFFFFFFFF(16進数)を設定値とする。
【0033】
セクタの消去が終了した時点で、制御部11は書き込みポインタWPTを状態フラグ1である先頭アドレスに設定し、値を0x77777777に書き換える。なお、16進数のFはビットデータでは“1111”であり、16進数の7は“0111”である。16進数のF(“1111”)を7(“0111”)に変更するのは、“1”のビットを“0”に書き換えるだけの変更であるため、セクタの消去を行うことなくデータの書き換えが可能である。同様に、16進数の7(“0111”)を3(“0011”)に変更するのも、セクタの消去を行うことなく可能である。
【0034】
制御部11には、図5に示すようなセクタ制御情報を保持させておく。図5の(a)は書き込み対象となるセクタ、図5の(b)は各書き込み対象セクタの制御情報の内容を示している。セクタの制御情報には、各セクタのセクタ種別(先頭セクタ、中間セクタ、最終セクタ)、次に書き込むセクタ名、書き込み可能なデータ数が含まれている。
先頭セクタは書き込み対象セクタのうち最初にデータの書き込みを行うセクタ、最終セクタは最後にデータの書き込みを行うセクタ、中間セクタは先頭セクタと最終セクタの間のセクタである。
【0035】
図5の(b)において、セクタ1はセクタ種別が先頭セクタ、次に書き込むセクタはセクタ2、書き込み可能なデータ数はN1個となっている。また、セクタ2はセクタ種別が最終セクタ、次に書き込むセクタはセクタ2、書き込み可能なデータ数はN2個となっている。なお、図5の例では、書き込み対象セクタが2つであるため、中間セクタがない。
【0036】
図6はセクタ1,2へのデータの書き込み処理のフローを示す図である。
ユーザによりデータの書き込み動作を伴う作業が指示されると本フローはスタートする。
【0037】
まず、ステップS1において、制御部1はセクタ1,2のセクタ状態をチェックし、「初期状態」のセクタがあるかどうかをチェックする。具体的には、制御部1はセクタ1,2の状態フラグ(状態フラグ1,2)を確認し、「初期状態」となっているセクタがあるかを検索する。「初期状態」のセクタが発見された場合には、ステップS2に進む。「初期状態」のセクタが発見されなかった場合には、ステップS4に進む。
【0038】
ステップS2では、「初期状態」のセクタ内のデータを消去し、ステップS3に進む。
ステップS3では、ステップS2でデータを消去したセクタのセクタ状態を「クリア状態」に設定し、ステップS4に進む。
【0039】
ステップS4では、全てのセクタ(すなわち、セクタ1、2)が「クリア状態」になっているかをチェックする。セクタ1,2が両方とも「クリア状態」である場合にはステップS5に進み、それ以外の場合にはステップS7に進む。
【0040】
セクタ1,2が「クリア状態」の場合には、書き込み対象セクタであるセクタ1,2内のデータが全て消去され、かつ消去後まだ一度もデータが書き込まれていない状態である。ステップS5では、制御部11はセクタ1(書き込み先頭セクタ)のセクタ状態を「書き込み状態」に設定する。具体的には、制御部11はセクタ1の先頭アドレスに書き込みポインタWPTを設定するとともに、この先頭アドレスに割り振られている状態フラグ1を「書き込み状態」の設定値に書き換える。その後ステップS6に進む。
【0041】
ステップS6では、制御部11は書き込みポインタWPTをセクタ1のデータ先頭アドレスに設定し、ステップS8に進む。
【0042】
ステップS7では、まず「書き込み状態」となっているセクタを検索する。「書き込み状態」のセクタが発見された場合には、そのセクタでデータがまだ書き込まれていない最初のアドレスを検索する。アドレスの検索は全ビット“1”となっているアドレスを検索することにより行う。制御部11は、発見された未書き込みアドレスに書き込みポインタWPTを設定し、ステップS8に進む。
これにより、再起動等した場合であっても、再起動前の状態を継続して動作させることが可能となる。また、書き込みポインタWPTを設定すべきアドレス検索の対象も、全セクタではなく、「書き込み状態」のセクタのみでよいため、検索時間を短縮できる。
【0043】
ステップS7において、「書き込み状態」のセクタが発見されない場合には、「クリア状態」のセクタを検索する。発見されたセクタのセクタ状態を「書き込み状態」に変更し、書き込みポインタWPTをそのセクタのデータ先頭アドレスに設定し、ステップS8に進む。
【0044】
ステップS8では、制御部11は、書き込みポインタWPTが設定されたアドレスにデータ13のデータを書き込み、ステップS9に進む。
ステップS9では、制御部11は、書き込みポインタWPTをインクリメントし、書き込みアドレスを次のアドレスに設定し、ステップS10に進む。
【0045】
ステップS10では、そのセクタの最大容量までデータを書き込んだかどうかをチェックする。具体的には、書き込みポインタWPTに設定された値とそのセクタに書き込み可能なデータ数とを比較し、書き込みポインタWPTに設定された値が書き込み可能データ数を超える場合にはステップS11に進む。書き込みポインタWPTに設定された値が書き込み可能データ数を超えていない場合には、ステップS8に戻り、そのセクタにデータの書き込みを繰り返す。
【0046】
ステップS11では、それまでデータを書き込んでいたセクタのセクタ状態を「FULL状態」に設定する。具体的には、そのセクタの状態フラグ2を「FULL状態」の設定値に書き換える。その後ステップS12に進む。
【0047】
ステップS12では、制御部11はセクタ制御情報を参照して次の書き込みセクタを把握し、次の書き込みセクタのセクタ状態を確認する。具体的には、現在の書き込みセクタがセクタ1であった場合には次の書き込みセクタとしてセクタ2のセクタ状態を確認し、現在の書き込みセクタがセクタ2であった場合にはセクタ1のセクタ状態を確認する。次の書き込みセクタが「FULL状態」である場合にはステップS13に進み、それ以外の場合にはステップS15に進む。
【0048】
ステップS13では、次の書き込みセクタが「FULL状態」のため、新たなデータを書き込めるようにするよう、次の書き込みセクタ内のデータを消去し、ステップS14に進む。
【0049】
ステップS14では、消去した次の書き込みセクタのセクタ状態を「クリア状態」に設定する。具体的には、そのセクタの状態フラグ1を「クリア状態」の設定値に書き換える。その後S15に進む。
【0050】
ステップS15では、次の書き込みセクタのセクタ状態を「書き込み状態」に設定し、ステップS16に進む。具体的には、そのセクタの状態フラグ1を「書き込み状態」の設定値に書き換える。その後ステップS16に進む。
【0051】
ステップS16では、書き込みポインタWPTを次の書き込みセクタのデータ先頭アドレスに設定し、ステップS8に戻る。以降、ステップS8〜ステップS16を繰り返すことで、データ13のデータを順次フラッシュメモリに保存していく。
【0052】
図7はセクタの書き込みと消去を示す図である。
図7の(a)は、セクタ1,2が両方とも「クリア状態」となっている状態である。書き込みポインタWPTは先頭セクタとなるセクタ1の先頭アドレスに設定される(図7の(a))。
【0053】
セクタ1にデータ13が書き込まれていき、書き込みポインタWPTもインクリメントされていく(図7の(b))。セクタ1の最大容量までデータが書き込まれると、セクタ1は「FULL状態」となり、引き続き次の書き込みセクタであるセクタ2にデータ13が書き込まれていく(図7の(c))。
【0054】
セクタ2にも最大容量までデータが書き込まれると、セクタ2も「FULL状態」となる(図7の(d))。セクタ2の次の書き込みセクタはセクタ1である。そこで、制御部11は、セクタ1に保存されたデータをセクタ単位で消去し、一旦セクタ1を「クリア状態」に戻す(図7の(e))。その後、セクタ1に新たなデータの書き込みを行う(図7の(f))。
【0055】
セクタ1の最大容量までデータが書き込まれると、セクタ1は再び「FULL状態」になる(図7の(g))。セクタ1の次の書き込みセクタはセクタ2である。そこで、制御部11は、セクタ2に保存されたデータをセクタ単位で消去し、一旦セクタ2を「クリア状態」に戻す(図7の(h))。その後、セクタ2に新たなデータの書き込みを行う(図7の(i))。
【0056】
セクタ2が再び「FULL状態」に達すると(図7の(j))、再度セクタ1を消去し、セクタ1に新たなデータの書き込みを行う(図7の(e))。以降、図7の(e)〜(j)までの流れを繰り返す。
【0057】
このように、制御部11にてデータ書き込みセクタのセクタ状態を把握し、取得時間が古いデータが書き込まれているセクタのみデータを消去して新たな書き込みを行い、他のセクタのデータは保存する。これにより、常時一定量のデータをフラッシュメモリ内に残しておくことができる。このような制御を可能とするために、フラッシュメモリの書き込み対象セクタに状態フラグ1,2を用意し、制御部11内にセクタ制御情報を設けている。
【0058】
本実施例は以上のように構成され、
複数のセクタを使用してデータ13の書き込みを行うフラッシュメモリの制御システムにおいて、書き込みセクタ1,2の状態を示す状態フラグFLG11〜FLG22に基づいてデータ13の書き込みを行う書き込み制御部11を有するため、
常時一定量の書き込みデータをフラッシュメモリ内に確保しておくことができるフラッシュメモリの制御システムを提供できる。
【0059】
取得時間が最も古いデータが保存されたセクタを消去して新たなデータを書き込み、取得時間が新しいデータは保存されるため、たとえば操作履歴やアラーム状態のログデータ等のように時系列で保存する必要があるデータの管理が可能となる。
【0060】
また、状態フラグFLG11〜FLG22は書き込みセクタ1,2の一部として設けられているため、一旦電源をOFFして再起動したような場合であっても、再起動前の状態を継続して動作可能となる。
【0061】
なお、本実施例では、データの書き込みセクタとしてフラッシュメモリ内の2セクタを割り当てた例で説明したが、書き込みセクタの数はより多くてもよい。
【0062】
図8はデータの書き込みセクタとして4セクタを割り当てた例を示す図である。図8の(a)は書き込み対象セクタ、図8の(b)は書き込み対象セクタの制御情報の内容を示している。図8では、フラッシュメモリ内のセクタ1〜セクタ4を書き込みセクタに割り当て、セクタ1を書き込み先頭セクタ、セクタ2,3を中間セクタ、セクタ4を最終セクタとしている。
【0063】
図9は、図8に示す書き込みセクタ構成における、セクタの書き込みと消去を示す図である。書き込み先頭セクタであるセクタ1からデータ13を書き込む(図9の(a))。セクタ1が「FULL状態」になると、引き続きセクタ2(図9の(b))、セクタ3(図9の(c))、セクタ4(図9の(d))と順次データを書き込んで行く。セクタ4の次に書き込むセクタはセクタ1であるが、セクタ1はすでに「FULL状態」となっている。そのため、さらに新たなデータを書き込む場合には、セクタ1を消去し、そこに新たなデータを書き込む(図9の(e))。さらにセクタ1が「FULL状態」になった場合には、セクタ2を消去した上で新たなデータを書き込む(図9の(f))。以降、次に書き込むセクタが「FULL状態」であれば、そのセクタに書き込まれているデータを消去し、そこに新しいデータを書き込む制御を繰り返す(図9の(g)、(h))。
これにより、取得時間が最も古いデータが書き込まれているセクタのみが消去されるとともに、一旦セクタ1〜4までデータが書き込まれた後は、常時一定量のデータ(3セクタ分)をフラッシュメモリ内に残しておくことができる。
【0064】
なお、図8の例では4つの連続するセクタを書き込みセクタとして使用したが、書き込みセクタは必ずしも連続していなくてもよい。
【0065】
図10はデータの書き込みセクタに不連続なセクタを含む例を示す図である。図10の(a)は書き込み対象セクタ、図10の(b)は書き込み対象セクタの制御情報の内容を示している。図10では、フラッシュメモリ内のセクタ2,5,7,10,11を書き込みセクタに割り当て、セクタ2を書き込み先頭セクタ、セクタ5,7,10を中間セクタ、セクタ11を最終セクタとしている。
【0066】
図10のように書き込みセクタが不連続であっても、制御部11に図10の(b)のようなセクタ制御情報を保持させることによって、割り当てる書き込みセクタのセクタ数、セクタ容量、セクタ配置に制限なく、本発明のフラッシュメモリ制御システムを適用できる。
【0067】
なお、フラッシュメモリに書き込まれたデータを読み出すには、書き込みデータの先頭アドレスと書き込みデータ数を取得することが必要となる。これらの情報は状態フラグと書き込みポインタWPTの位置から取得可能である。
【0068】
図11は、セクタ状態と読み出すデータの先頭アドレスおよびデータ数の関係を示す図である。図11の(a1)〜(a5)はセクタ状態を示し、図11の(b)は(a1)〜(a5)の各セクタ状態における読み出すデータの先頭アドレスとデータ数をまとめたものである。図11の(a1)〜(a5)において、書き込みポインタWPTはそれぞれセクタ1、セクタ3、セクタ4、セクタ1、セクタ3内のアドレスに設定され、そのセクタ内にN個のデータが書き込まれた状態になっているものとする。
【0069】
図11の(a1)の状態では、次の書き込みセクタは「クリア状態」であることから、セクタ2〜セクタ4には一切データが書き込まれていないことがわかる。したがって、データの読み出しを行う際は、データの先頭アドレスはセクタ1のデータ先頭アドレス、データ数はセクタ1に書き込んだデータ数Nであることが把握できる。
【0070】
図11の(a2)の状態では、次の書き込みセクタは「クリア状態」であることから、セクタ1〜セクタ3までデータが書き込まれており、かつ、セクタ4には一切データが書き込まれていないことがわかる。したがって、データの読み出しを行う際は、データの先頭アドレスはセクタ1のデータ先頭アドレス、データ数はセクタ1,2に書き込んだデータ数+セクタ3に書き込んだデータ数Nの合計(N1+N2+N)として求められる。
【0071】
図11の(a3)の状態では、次の書き込みセクタは「FULL状態」であることから、セクタ1〜セクタ3までデータが書き込まれていることがわかる。したがって、データの読み出しを行う際は、データの先頭アドレスはセクタ1のデータ先頭アドレス、データ数はセクタ1〜3に書き込んだデータ数+セクタ4に書き込んだデータ数Nの合計(N1+N2+N3+N)として求められる。
【0072】
図11の(a4)の状態では、次の書き込みセクタは「FULL状態」であることから、セクタ2〜セクタ4までデータが書き込まれていることがわかる。したがって、データの読み出しを行う際は、データの先頭アドレスはセクタ2のデータ先頭アドレス、データ数はセクタ2〜4に書き込んだデータ数+セクタ1に書き込んだデータ数Nの合計(N2+N3+N4+N)として求められる。
【0073】
図11の(a5)の状態では、次の書き込みセクタは「FULL状態」であることから、セクタ4,1,2にデータが書き込まれていることがわかる。したがって、データの読み出しを行う際は、データの先頭アドレスはセクタ4のデータ先頭アドレス、データ数はセクタ4,1,2に書き込んだデータ数+セクタ3に書き込んだデータ数Nの合計(N4+N1+N2+N)として求められる。
【0074】
このように、本発明では、データの読み出しにあたり、読み出すデータの先頭アドレスとデータ数を、書き込み制御で使用する書き込みポインタWPTとセクタ状態から取得でき、読み出し制御専用にポインタ等を用意する必要がない。そのため、制御部11はデータの書き込みに集中でき、書き込み制御の時間短縮を図ることが可能となる。
【0075】
なお、本実施例における制御部11は特許請求の範囲における書き込み制御部に相当する。また、本実施例におけるセクタの「初期状態」は特許請求の範囲における「第1の状態」に相当し、「クリア状態」は「第2の状態」に相当し、「書き込み状態」は「第3の状態」に相当し、「FULL状態」は「第4の状態」に相当する。
【符号の説明】
【0076】
11 制御部
12 フラッシュメモリ
13 データ
【特許請求の範囲】
【請求項1】
複数のセクタを使用してデータの書き込みを行うフラッシュメモリの制御システムにおいて、
各セクタの状態を示す状態フラグに基づいてデータの書き込みを行う書き込み制御部を有することを特徴とするフラッシュメモリの制御システム。
【請求項2】
前記状態フラグは各セクタの一部として設けられていることを特徴とする請求項1に記載のフラッシュメモリの制御システム。
【請求項3】
前記書き込み制御部は、各セクタの書き込み可能データ数と、次に書き込むセクタ名とを含むセクタ制御情報を保持することを特徴とする請求項1または2に記載のフラッシュメモリの制御システム。
【請求項4】
前記書き込み制御部は、
前記状態フラグを参照して書き込み可能なセクタを検索し、発見されたセクタに対してデータの書き込みを行い、
書き込み可能なセクタが発見されない場合には、前記セクタ制御情報を参照して最も古いデータが保存されたセクタ内のデータを消去し、そのセクタに対してデータの書き込みを行うことを特徴とする請求項1〜3のいずれかに記載のフラッシュメモリの制御システム。
【請求項5】
前記状態フラグは、
そのセクタが未だ制御されていない初期状態であることを示す第1の状態と、
そのセクタ内のデータがすべて消去された状態であることを示す第2の状態と、
そのセクタがデータの書き込み中であることを示す第3の状態と、
そのセクタが最大容量までデータが書き込まれた状態であることを示す第4の状態と、
を備えることを特徴とする請求項1〜4のいずれかに記載のフラッシュメモリの制御システム。
【請求項6】
前記状態フラグは、前記第1〜第4の状態までセクタ単位でデータを消去することなく順次状態遷移が可能な値を設定値として有することを特徴とする請求項5に記載のフラッシュメモリの制御システム。
【請求項1】
複数のセクタを使用してデータの書き込みを行うフラッシュメモリの制御システムにおいて、
各セクタの状態を示す状態フラグに基づいてデータの書き込みを行う書き込み制御部を有することを特徴とするフラッシュメモリの制御システム。
【請求項2】
前記状態フラグは各セクタの一部として設けられていることを特徴とする請求項1に記載のフラッシュメモリの制御システム。
【請求項3】
前記書き込み制御部は、各セクタの書き込み可能データ数と、次に書き込むセクタ名とを含むセクタ制御情報を保持することを特徴とする請求項1または2に記載のフラッシュメモリの制御システム。
【請求項4】
前記書き込み制御部は、
前記状態フラグを参照して書き込み可能なセクタを検索し、発見されたセクタに対してデータの書き込みを行い、
書き込み可能なセクタが発見されない場合には、前記セクタ制御情報を参照して最も古いデータが保存されたセクタ内のデータを消去し、そのセクタに対してデータの書き込みを行うことを特徴とする請求項1〜3のいずれかに記載のフラッシュメモリの制御システム。
【請求項5】
前記状態フラグは、
そのセクタが未だ制御されていない初期状態であることを示す第1の状態と、
そのセクタ内のデータがすべて消去された状態であることを示す第2の状態と、
そのセクタがデータの書き込み中であることを示す第3の状態と、
そのセクタが最大容量までデータが書き込まれた状態であることを示す第4の状態と、
を備えることを特徴とする請求項1〜4のいずれかに記載のフラッシュメモリの制御システム。
【請求項6】
前記状態フラグは、前記第1〜第4の状態までセクタ単位でデータを消去することなく順次状態遷移が可能な値を設定値として有することを特徴とする請求項5に記載のフラッシュメモリの制御システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図8】
【図10】
【図12】
【図13】
【図14】
【図7】
【図9】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図8】
【図10】
【図12】
【図13】
【図14】
【図7】
【図9】
【図11】
【公開番号】特開2011−248834(P2011−248834A)
【公開日】平成23年12月8日(2011.12.8)
【国際特許分類】
【出願番号】特願2010−124194(P2010−124194)
【出願日】平成22年5月31日(2010.5.31)
【出願人】(000006507)横河電機株式会社 (4,443)
【Fターム(参考)】
【公開日】平成23年12月8日(2011.12.8)
【国際特許分類】
【出願日】平成22年5月31日(2010.5.31)
【出願人】(000006507)横河電機株式会社 (4,443)
【Fターム(参考)】
[ Back to top ]