(57)【要約】【課題】書換頻度の高いデータの記憶にも対応することができる一括消去型不揮発性メモリを得る。【解決手段】複数のセクタから構成されるクラスタにおける未使用領域のアドレス情報を格納するアドレス情報格納手段と、データの書込要求を受けると、その未使用領域のアドレス情報を参照して、その未使用領域に当該データの書込処理を実行するデータ書込手段と、上記データ書込手段がデータの書込処理を実行すると、その未使用領域のアドレス情報を更新するアドレス情報更新手段とを備え、前記データ書込手段は、セクタが複数のデータブロックから構成される場合、セクタのヘッダ領域内に格納されているデータブロックの使用状況を示す使用状況フラグを参照して、そのデータブロックの未使用領域にデータの書込処理を実行する。【選択図】        図１
2008047155.tif 000002
【特許請求の範囲】
【請求項１】
複数のセクタから構成されるクラスタにおける未使用領域のアドレス情報を格納するアドレス情報格納手段と、
データの書込要求を受けると、その未使用領域のアドレス情報を参照して、その未使用領域に当該データの書込処理を実行するデータ書込手段と、
上記データ書込手段がデータの書込処理を実行すると、その未使用領域のアドレス情報を更新するアドレス情報更新手段とを備え、
前記データ書込手段は、セクタが複数のデータブロックから構成される場合、セクタのヘッダ領域内に格納されているデータブロックの使用状況を示す使用状況フラグを参照して、そのデータブロックの未使用領域にデータの書込処理を実行することを特徴とする一括消去型不揮発性メモリ。
【請求項２】
データ書込手段は、データブロックに未使用領域が存在しない場合には、他のデータブロックの未使用領域にデータの書込処理を実行することを特徴とする請求項１記載の一括消去型不揮発性メモリ。
【請求項３】
データを格納しているデータブロックのブロック位置を示すポインタを揮発性メモリに構築するポインタ構築手段を設けたことを特徴とする請求項２記載の一括消去型不揮発性メモリ。
【請求項４】
一括消去型不揮発性メモリを備える携帯電話であって、
前記一括消去型不揮発性メモリは、
複数のセクタから構成されるクラスタにおける未使用領域のアドレス情報を格納するアドレス情報格納手段と、
データの書込要求を受けると、その未使用領域のアドレス情報を参照して、その未使用領域に当該データの書込処理を実行するデータ書込手段と、
上記データ書込手段がデータの書込処理を実行すると、その未使用領域のアドレス情報を更新するアドレス情報更新手段とを備え、
前記データ書込手段は、セクタが複数のデータブロックから構成される場合、セクタのヘッダ領域内に格納されているデータブロックの使用状況を示す使用状況フラグを参照して、そのデータブロックの未使用領域にデータの書込処理を実行することを特徴とする携帯電話。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、不揮発データを記録するフラッシュＥＥＰＲＯＭ（以下、フラッシュメモリという）などの一括消去型不揮発性メモリおよび携帯電話に関するものである。
【背景技術】
【０００２】
現在の携帯電話などの組込型システムにおいては、システムのプログラムを格納する場合、ランダムアクセスが可能なフラッシュメモリを用いる一方、書き換え頻度が多いデータや比較的データ量が小さい不揮発データを記録する場合にはＥＥＰＲＯＭを用い、また、大規模な不揮発データを記録する場合には、シリアル書き込みによるフラッシュメモリまたはバックアップ電源付きＳＲＡＭを用いるようにしている。
【０００３】
ここで、ＥＥＰＲＯＭは、フラッシュメモリに比べて、ビットあたりの記憶素子数が多くビットあたりの単価が増大する。また、バックアップ電源付きＳＲＡＭにおいては電源を付けているためコストが増大する。上記の別々に記憶していたデータをフラッシュメモリで記憶することでデバイスの実装面積、及びコストが減少するメリットが生まれる。
【０００４】
組込型システムにおける従来のフラッシュメモリは、システムプログラムの書込処理の実行中に、他のシステムプログラムを読み込むことができず、システムプログラムの書き込み時は特殊な処理を施してプログラムを書き込んでいたが、最近、データの書込処理の実行中に、他の書込をしていないエリアからデータを読み込むことができる一括消去型不揮発性メモリ（以下、ＢＧＯフラッシュメモリと呼ぶ）の出現により、データを格納していたフラッシュメモリをプログラムが格納されているフラッシュメモリに取り込むことが可能となった。
【０００５】
フラッシュメモリにデータを格納する使用例として特公平７−５０５５８号公報に示すような半導体ディスクがある（図１４を参照）。このシステムでは、フラッシュメモリ４を半導体ディスクとして使用し、この半導体ディスクの制御を行うために制御装置１、ＲＡＭ２、バス制御部３及び内部バス５が設けられているが、フラッシュメモリ４はＥＥＰＲＯＭやＳＲＡＭにない制限がある。
【０００６】
即ち、データの書き込みが０から１、または、１から０の一方通行である。このため、一度書き込みが完了した場所に再書き込みをする場合は、書き込みたい場所を含むブロックの全体を一括消去して、ブロック全体を０または１にした後、データの書き込みを行う必要がある。このため、ＥＥＰＲＯＭやＳＲＡＭのようにバイト単位で書き込みを行うことが難しい。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来の一括消去型不揮発性メモリは以上のように構成されているので、データの書込処理が実行された場所を含むブロックの全体を一括消去すれば、再度、同一の場所にデータを書き込むことができるが、フラッシュメモリの消去可能回数はＥＥＰＲＯＭと比較して、１０分の１程度しか保証されておらず、書換頻度の高いデータの記憶には対応することが困難であるなどの課題があった。
【０００８】
この発明は上記のような課題を解決するためになされたもので、書換頻度の高いデータの記憶にも対応することができる一括消去型不揮発性メモリを得ることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、複数のセクタから構成されるクラスタにおける未使用領域のアドレス情報を格納するアドレス情報格納手段と、データの書込要求を受けると、その未使用領域のアドレス情報を参照して、その未使用領域に当該データの書込処理を実行するデータ書込手段と、上記データ書込手段がデータの書込処理を実行すると、その未使用領域のアドレス情報を更新するアドレス情報更新手段とを備え、前記データ書込手段は、セクタが複数のデータブロックから構成される場合、セクタのヘッダ領域内に格納されているデータブロックの使用状況を示す使用状況フラグを参照して、そのデータブロックの未使用領域にデータの書込処理を実行することを特徴とする。
【発明の効果】
【００１０】
以上説明したとおり、この発明によれば、セクタが複数のデータブロックから構成される場合、セクタのヘッダ領域内に格納されているデータブロックの使用状況を示す使用状況フラグを参照して、そのデータブロックの未使用領域にデータの書込処理を実行するように構成したので、１バイトから８バイトの単位で、最大２５４種類のデータを自由に書き換えることができる効果がある。
【発明を実施するための最良の形態】
【００１１】
以下、この発明の実施の一形態を説明する。
実施の形態１．
図１はこの発明の実施の形態１による一括消去型不揮発性メモリを示す構成図であり、図において、１１は複数のセクタを有するクラスタから構成されるＢＧＯフラッシュメモリ（アドレス情報格納手段）であり、ＢＧＯフラッシュメモリ１１の先頭のセクタには未使用領域のアドレス情報が格納されている。１２はＢＧＯフラッシュメモリ１１を制御するマイクロコンピュータ、１３はマイクロコンピュータ１２のＲＡＭ、１４はマイクロコンピュータ１２のＣＰＵであり、ＣＰＵ１４は未使用領域のアドレス情報をＢＧＯフラッシュメモリ１１の先頭のセクタに格納するアドレス情報格納手段と、データの書込要求を受けると、そのクラスタにおける未使用領域のアドレス情報を参照して、その未使用領域にデータの書込処理を実行するデータ書込手段と、その未使用領域のアドレス情報を更新するアドレス情報更新手段と、各クラスタにＩＤを登録するＩＤ管理手段と、ポインタ構築手段とを構成する。なお、図１のシステムの周辺には、本システムを使用する携帯電話などの周辺デバイスが接続される。
【００１２】
次に動作について説明する。最初に、図２を参照しながらＢＧＯフラッシュメモリ１１の物理アドレス、クラスタ管理エリア及びアプリケーションエリアについて説明する。ただし、ＢＧＯフラッシュメモリ１１は、データを消去するとＦＦｈになり、データの書き換え方向は１から０であるとする。
【００１３】
クラスタ管理エリアのクラスタＩＤは、１バイトで表現され、００ｈ及びＦＦｈを除いた２５４通りの表現が可能である（アプリケーションが使用するクラスタにはユニークなＩＤが登録される）。また、ＦＦｈが初期状態のためＦＦｈが未使用クラスタＩＤ（ＦＦｈは書込可能なクラスタであることを示す）、００ｈが無効クラスタＩＤ（００ｈは書込不可能なクラスタであることを示す）となる。図２の３個のクラスタＩＤには同じ値が格納され、２以上のクラスタＩＤが一致するとき、クラスタＩＤが有効であると判断する。
【００１４】
３個のクラスタＩＤの次にはコピーフラグが１バイト確保され、消去ブロックのクラスタ管理エリアの４バイトを除いたエリアがアプリケーションエリアとなる。このアプリケーションエリアは、アプリケーションが自由に使用することができるエリアである。
【００１５】
各アプリケーションは、自分のデータが格納されているアドレスを直接保持することはなく、自分のアプリケーションＩＤを保持している。制約事項として、このアプリケーションＩＤは、システムを使用する全てのアプリケーションにおいて唯一のものでなければならない。実際にアプリケーションがＢＧＯフラッシュメモリ１１を使用する場合は、自分のアプリケーションＩＤに一致するクラスタＩＤを検索して、自分の使用している物理アドレスを検索し、そこからさらに、自分の読み書きしたいデータのアドレスを計算する。
【００１６】
ＢＧＯフラッシュメモリ１１は、データの消去をブロック単位で行う必要があるため、ブロック内のあるエリアのみを消去する場合は、必要データの待避、ブロックの消去、必要データの書き込みを行う必要がある。必要データの待避をＲＡＭ１３に行うことは、コストの面、ＢＧＯフラッシュメモリ１１を使う意味、及びデータの信頼性からも望ましいものではない。このためデータの待避は必然的にＢＧＯフラッシュメモリ１１上に行うが、そのためにはデータが書き込まれていない未使用領域、即ち、ブランクエリアが必要である。上記操作をデータリクレームと呼び、ＢＧＯフラッシュメモリ１１において避けて通ることのできない処理である。
【００１７】
ここで、図３及び図４を参照しながらデータリクレーム時の処理を説明する。例えば、クラスタＡのデータリクレームが必要になると（ステップＳＴ１）、クラスタＡのアプリケーションは、ＢＧＯフラッシュメモリ１１上のブランクエリアを検索する（ステップＳＴ２）。例えば、クラスタＤがブランクエリアである場合には、クラスタＤのクラスタＩＤを参照して、ブランクエリアのアドレスを取得する（ステップＳＴ４）。ただし、ブランクエリアが存在しない場合には、無効クラスタを一括消去してブランクエリアを作成し（ステップＳＴ３）、そのブランクエリアのアドレスを取得する（ステップＳＴ４）。
【００１８】
そして、ブランクエリアのアドレスを取得すると、クラスタＡのアプリケーションは、現在使用中であるクラスタＡのコピーフラグを０１ｈにして（ステップＳＴ５）、ブランクエリア（クラスタＤ）に自分のアプリケーションＩＤ（１ｈのＩＤ）を登録する（ステップＳＴ６）。（図４の中段を参照）
【００１９】
クラスタＡのアプリケーションは、ブランクエリア（クラスタＤ）に自分のアプリケーションＩＤを登録すると、必要データをブランクエリアにコピーし（ステップＳＴ７）、コピーが完了すると、古いエリアであるクラスタＡを一括消去または無効化して、処理を終了する（ステップＳＴ８，ＳＴ９）。（図４の下段を参照）
【００２０】
ただし、データリクレーム中に電源遮断などの障害が発生すると、クラスタＩＤが同一のクラスタが存在してしまう場合がある。このような場合は、アプリケーションに割り振られたクラスタＩＤは重複できないという制約事項があるため、システム起動時に取り除く必要がある。
【００２１】
このため、システム起動時に、重複クラスタの存在をチェックするが、重複クラスタを検出すると、重複クラスタのうち、コピーフラグがＦＦｈであるものを削除する。その理由は、一括消去またはデータの無効化をする前に、システムの障害が発生すると、データリクレームの処理がどこまで完了したかを見極めることが困難である。そのため、コピーフラグを見てコピー元を判断し、コピー先を削除する。コピー元を保持しておけば、データの内容が壊れて書き込みが不可能になる不具合を回避することができるからである。
【００２２】
次に、データの書き込み時にデバイスエラー（書込エラー）が発生すると、再度、データの書込処理を実行する必要がある。そのような場合に対処するために、ブランクエリアを２エリア以上用意しておくようにする。また、データの書込エラーが発生すると、書込エラーが発生したクラスタＩＤを無効クラスタに変更して、新しいブランククラスタを取得し、リクレーム処理を実行する。無効クラスタにおいても、一旦、一括消去を行うと、クラスタの状態が元の正常な状態に戻る場合があるため、電源投入時や、システムが暇な時などに無効エリアを一括消去する。これは、デバイスの突発的なエラーに対して有効な手段である。
【００２３】
図５はアプリケーションにおける内部データを示す構造図である。クラスタはｎページのセクタから構成されており、０ページ目にヘッダが確保され、１ページ目以降にデータエリアが確保されている。このうち０ページの先頭４バイトはクラスタＩＤとコピー用フラグとして使用され、その後ろに３２バイトの格納ページ情報が格納される。書き込むデータ長はシステムにて予め決定され、そのシステム内においては不変である。
【００２４】
図７はデータの読み込み手順を示すものであるが、アプリケーションは、クラスタＩＤを参照して格納ページ情報を読み出し、データが格納されているセクタであるページ番号を取得する。アプリケーションは、例えば、データがｘページ目に格納されていることを認識すると、ｘページ目の先頭位置に格納されている格納位置オフセット情報を参照し、ｘページの何処にデータが格納されているかを認識する。
【００２５】
ここで、格納ページ情報と格納位置オフセット情報は、ビットマップフィールドで表記され、両者とも３２バイトのエリアを確保し、ビットが２５６個存在する。各ビットの値は、セクタの使用状態が変化するごとに、１から０に変更される。
【００２６】
即ち、格納ページ情報については、例えば、１ページ目からｘページ目までデータが格納されると、ＬＳＢからｘビットまで、ビット値が１から０に変更され、０の数のトータルが指定ページに対応する。一方、格納位置オフセット情報については、図６に示すように、データ領域の１バイトと、格納位置オフセット情報の１ビットが対応し、データ領域の先頭バイトから順次データが格納されるごとに、格納位置オフセット情報のＬＳＢから順次１ビットが１から０に変更される。
【００２７】
これにより、アプリケーションは、格納ページ情報における０のビットの合計からデータが格納されているページ番号を認識すると、格納位置オフセット情報のＬＳＢから順次ビットの値をサーチして、データ領域の先頭からどこまでデータが格納されているかを認識する。例えば、格納位置オフセット情報のＬＳＢから２４ビットまでが０の場合には、データ領域の先頭から２４バイトまでデータが格納されていると認識する。そして、アプリケーションは、データが格納されている最終位置を認識すると、そこからデータ長分前に戻った位置がデータの先頭アドレスであるので、その先頭アドレスからデータを読み出す処理を実行する。
【００２８】
図８はデータの書込手順を示すフローチャートである。まず、アプリケーションは、データの読み出し時と同じ手順で、データが格納されている最終位置を認識すると、そのページ内にブランクエリア（未使用領域）が存在するか否かを調査する（ステップＳＴ１１）。
【００２９】
ブランクエリアが存在する場合は、データが格納されている最終位置の次の位置を先頭アドレスとして、書込要求に係るデータの書込処理を実行するとともに、格納位置オフセット情報を更新する（ステップＳＴ１２）。即ち、データが格納されている最終位置の次の位置に対応するビットを１から０に変更する。
【００３０】
一方、現在のページ内にブランクエリアが存在しない場合、クラスタ内に次のページが存在するか否かを調査する（ステップＳＴ１３）。次のページが存在する場合には、次のページの格納位置オフセット情報を参照して、次のページがブランクであるか否かを調査する（ステップＳＴ１４）。これは、次のページにおける過去のデータ書込時において、電源遮断等の障害が発生したことがあると、書込途中のデータが残っていることがあるからである（書込途中のデータが残っていると、新たなデータを書き込むことができない不具合が発生する）。
【００３１】
アプリケーションは、次のページがブランクである場合には、データ領域の先頭位置に、書込要求に係るデータの書込処理を実行するとともに、格納位置オフセット情報を更新する（ステップＳＴ１５）。また、アプリケーションは、格納ページ情報も更新する（ステップＳＴ１６）。即ち、次のページに対応するビットを１から０に変更する。
【００３２】
次のページがブランクでない場合には、更に次のページがブランクであるか否かを調査するが、次のページが存在しなくなると、上述したデータリクレームを実行して、他の未使用クラスタにおける１ページ目のデータ領域の先頭位置に、書込要求に係るデータの書込処理を実行する（ステップＳＴ１７）。
【００３３】
以上で明らかなように、この実施の形態１によれば、データの書込要求を受けると、未使用領域のアドレス情報を参照して、その未使用領域にデータの書込処理を実行するように構成したので、クラスタに未使用領域が存在する場合には、当該クラスタを一括消去することなく、データの書き込みが可能になり、その結果、ＢＧＯフラッシュメモリ１１の書換回数が増加する効果を奏する。
【００３４】
実施の形態２．
上記実施の形態１では、ページ内にブランクエリアが存在する場合、既に書き込まれているデータの後ろに詰めて最新のデータを書き込むものについて示したが、即ち、ページ内には複数のデータを格納する領域を確保して、最後に格納されたデータ（最新データ）のみを有効にするものについて示したが、図９に示すように、セクタ（ページ）内に複数のデータブロックを構成し、セクタのヘッダエリア内に格納されているデータブロックの使用状況を示す使用状況フラグ（ページ内使用中ブロックフラグ、ページ内使用済ブロックフラグ）を参照して、各データブロックの未使用領域にデータの書込処理を実行するようにしてもよい。
【００３５】
図９はアプリケーションにおける内部データを示す構造図である。クラスタの全てにページヘッダと、複数個のデータブロックを作成する。ページヘッダにはクラスタＩＤと、コピー用フラグを先頭におき、その後ろにページ内使用中ブロックフラグを３バイト、ページ内使用済ブロックフラグを３バイトおく。なお、データブロック内には、データＮＯとデータ領域使用状況を１バイトずつおき、その後ろ８バイトをデータ領域として使用する。
【００３６】
図１０はページ内使用中ブロックフラグ及びページ内使用済ブロックフラグとデータブロックの対応図である。使用中のブロックを検索するには、ページ内使用中ブロックフラグとページ内使用済ブロックフラグの排他的論理和を求め、その結果が１のビットに対応するデータブロックが使用中のデータブロックになる（図１０の例では、データブロックＰ）。
【００３７】
データの読み書きは、データＩＤを指定することにより行う。このうち、００ｈは使用済データＩＤとし、ＦＦｈはブランクデータＩＤとする。その他、２５４種類のデータＩＤをとることができる。各ＩＤに割り振られるデータサイズは１バイトから８バイトまでの値をとることができ、プログラム中では、データサイズを変えることがないものとする。
【００３８】
また、アプリケーションのポインタ構築手段がデータ検索用のポインタ（データを格納しているデータブロックのブロック位置を示すポインタ）をＲＡＭ１３に作成する。ポインタの内部にはページ番号及びデータエリアのブロック番号を格納する。これを電源投入時などＲＡＭ１３の内容が消えてしまったときに、全てのデータエリアをサーチして検索し、内容を保持する。
【００３９】
読み出し時は、アプリケーションがデータＩＤのポインタが示すデータブロックを検索し、データ領域使用状況（図１１を参照）を参照してデータの読込処理を実行する。即ち、データ領域使用状況の８ビットがデータ領域の８バイトの使用状況に対応しており、データ領域使用状況のビットが０の場所が使用済の場所である。
【００４０】
図１２はデータ検索用ポインタの初期ルーチンを示すフローチャートである。電源投入時などの初期ルーチンにおいては、アプリケーションが使用クラスタのアドレスを検索し、ページ内にデータがある場合には、ポインタのデータを更新する（ステップＳＴ２１〜ＳＴ２３）。ページ内の使用データの検索方法であるが、全てのブロックを検索すると非常にデータ数が多いため、データの読込時と同様に、ページヘッダのページ内使用中ブロックフラグとページ内使用済ブロックフラグを参照して、使用データを検索する。そして、全てのページの検索が終了するまで、上記の処理を繰り返し（ステップＳＴ２４，ＳＴ２５）、最後のページの検索が終了した時点でポインタの作成が完了する。
【００４１】
図１３はデータの書込手順を示すフローチャートである。まず、アプリケーションは、データが格納されているデータブロックのブランクエリアを検索し、データを書き込むことができるブランクエリアがデータエリア内に存在する場合には、そのデータブロックのデータエリア（ブランクエリア）内にデータの書込処理を実行する（ステップＳＴ３１，ＳＴ３２）。
【００４２】
一方、データを書き込むことができるブランクエリアがデータエリア内に存在しない場合には、他の新しいデータブロックを取得できるか否かを判断する（ステップＳＴ３３）。新しいデータブロックが取得できた場合、新しいデータブロックにデータＮＯ、データ領域及びページ内使用中ブロックフラグを書き込む処理を実行する（ステップＳＴ３４，ＳＴ３５）。また、ページ内使用済ブロックフラグ及びデータブロックのＩＤの書込も同時に実行する（ステップＳＴ３６，ＳＴ３７）。なお、データブロックを新しく取得できない場合には、データリクレームを実行する（ステップＳＴ３８）。
【００４３】
以上で明らかなように、この実施の形態２によれば、セクタが複数のデータブロックから構成される場合、セクタのヘッダ領域内に格納されているデータブロックの使用状況を示す使用状況フラグ（ページ内使用中ブロックフラグ、ページ内使用済ブロックフラグ）等を参照して、そのデータブロックの未使用領域にデータの書込処理を実行するように構成したので、１バイトから８バイトの単位で、最大２５４種類のデータを自由に書き換えることができる効果を奏する。
【００４４】
実施の形態３．
上記実施の形態１及び実施の形態２では、ＢＧＯフラッシュメモリ１１にデータを書き込むものについて示したが、これに限るものではなく、その他の一括消去型不揮発性メモリにおいても使用可能であることは言うまでもない。
【図面の簡単な説明】
【００４５】
【図１】この発明の実施の形態１による一括消去型不揮発性メモリを示す構成図である。
【図２】ＢＧＯフラッシュメモリの内部構造及びクラスタ管理エリアを示す説明図である。
【図３】データリクレームの処理を示すフローチャートである。
【図４】データリクレーム時におけるクラスタＩＤの割り当てを示す説明図である。
【図５】アプリケーションにおける内部データを示す構造図である。
【図６】格納位置オフセット情報とデータの対応関係を示す説明図である。
【図７】データの読み込み手順を示す説明図である。
【図８】データの書込手順を示すフローチャートである。
【図９】アプリケーションにおける内部データを示す構造図である。
【図１０】ページ内使用中ブロックフラグ及びページ内使用済ブロックフラグとデータブロックの対応図である。
【図１１】データ領域使用状況とデータ領域の対応図である。
【図１２】データ検索用ポインタの初期ルーチンを示すフローチャートである。
【図１３】データの書込手順を示すフローチャートである。
【図１４】フラッシュメモリにデータを格納する半導体ディスクを示す構成図である。
【符号の説明】
【００４６】
１１  ＢＧＯフラッシュメモリ（アドレス情報格納手段）、１４  ＣＰＵ（アドレス情報格納手段、データ書込手段、アドレス情報更新手段、ＩＤ管理手段、ポインタ構築手段）。
【図１】
2008047155.tif 000003
【図２】
2008047155.tif 000004
【図３】
2008047155.tif 000005
【図４】
2008047155.tif 000006
【図５】
2008047155.tif 000007
【図６】
2008047155.tif 000008
【図７】
2008047155.tif 000009
【図８】
2008047155.tif 000010
【図９】
2008047155.tif 000011
【図１０】
2008047155.tif 000012
【図１１】
2008047155.tif 000013
【図１２】
2008047155.tif 000014
【図１３】
2008047155.tif 000015
【図１４】
2008047155.tif 000016