(57)【要約】【課題】フラッシュメモリに格納されているデータが更新されたとき、旧いデータを格納するブロックには“旧”のフラグを書き込んでいた。しかし、多値メモリではフラグに書き込むことが困難であり、新旧を判断する他の方法が求められている。【解決手段】フラッシュメモリを用いたメモリカードに、論理アドレスに関連付けられて格納されているデータを更新するとき、更新される前のデータが格納されたブロックの物理アドレスを起点に、昇順方向にたどって使用可能で未使用の最初のブロックに最新のデータを格納する。そして、ある論理アドレスの最新のデータが格納されたブロックを求めるときは、フラッシュメモリの使用可能で未使用のブロックの中で物理アドレスが最大の値を求め、降順方向にたどって求める論理アドレスのデータが格納されたブロックの最初のブロックに格納されていると判断する。【選択図】図１
2006048585.tif 000002
【特許請求の範囲】
【請求項１】
論理アドレスと該論理アドレスに関連づけられたデータを、物理アドレスに関連づけられたブロックに格納するフラッシュメモリの、前記データを新たなデータに変えて格納する更新を、
前記データを格納するブロックの物理アドレスを求め、
該物理アドレスの値を順次、昇順方向に増加して物理アドレスを生成し、
順次、該生成された物理アドレスに関連づけられたブロックが使用可能で未使用のブロックか否かを検証し、
該検証結果が使用可能で未使用のブロックであるとき、該ブロックに前記論理アドレスと、前記新たなデータを格納することによって行い、
所定の論理アドレスに関連づけられて格納されたデータの新旧を、
使用可能で未使用のブロックの物理アドレスの中の最大値を求め、
該最大値から順次、降順方向に減じて物理アドレスを生成し、
順次、該生成された物理アドレスのブロックが格納する論理アドレスを検証し、
検証した論理アドレスが前記所定の論理アドレスと一致したとき、該ブロックに格納されたデータが最新のデータとすることによって判断することを特徴とするフラッシュメモリのアクセス方法。
【請求項２】
前記、昇順方向に増加して生成した物理アドレスが、前記物理アドレスの最大値を超えたとき、該生成された物理アドレスを、０に置き換えることを特徴とする請求項１記載のフラッシュメモリのアクセス方法。
【請求項３】
前記、降順方向に減じて生成した物理アドレスが、負の値となったとき、該生成された物理アドレスを、前記物理アドレスの最大値に置き換えることを特徴とする請求項１記載のフラッシュメモリのアクセス方法。
【請求項４】
前記ブロックが格納する論理アドレスに関連づけられて格納されたデータの新旧の判断を、
前記フラッシュメモリの始動し、
前記フラッシュメモリが格納する情報を揮発性メモリで作成した管理テーブルに転送し、
前記管理テーブルの情報を揮発性メモリで作成された判定テーブルを用いて最新データを格納する物理アドレスを判断し、
前記判断結果を前記管理テーブルに新の表示を行うことを特徴とする請求項１乃至３のいずれかに記載のフラッシュメモリのアクセス方法。
【請求項５】
前記管理テーブルに前記新の表示に応じて、
前記管理テーブル上の前記論理アドレスを保持する他の物理アドレスに旧の表示を行い、
前記フラッシュメモリの消去動作が、前記管理テーブル上に旧の値を書き込まれたブロックを全て選択し、
選択された全てのブロックを消去することを特徴とする請求項１乃至４のいずれかに記載のフラッシュメモリのアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリを用いたメモリカードなどファイルストレージデバイスのデータを更新し、更新されたデータの新旧を判別するアクセス方法に関わる。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリなどの不揮発性メモリは占有する容積が小さく、低消費電力であって、かつ電源を供給しなくてもデータを保持できる。この特性を生かして、メモリカードなど携帯できる形態で電子データを保存するファイルストレージデバイスの用途に広く使われている。
【０００３】
フラッシュメモリは、メモリセルとなるトランジスタのフローティングゲートに電子などの電荷を注入し、保持することで情報を記憶している。データの書き込みは指定されたアドレスに対応するメモリセルを個々に選択し、電荷を注入して書き込んでいる。しかしフラッシュメモリでは注入された電荷を取り除く逆方向の値の書き込み動作は個々のメモリセル毎に行うのではなく、セルアレイ領域を区分する所定のブロック内のメモリセルを一括して行われ、この動作を一括消去と呼んでいる。このため、既にデータが書き込まれたブロックの内容を更新しようとする場合は、全てのメモリセルが消去状態になっている未使用のブロックを選択して修正されたデータを書き込まなければならない。データの更新を行ったときは、更新される前のデータが格納されたブロックには古いデータであることを示すために、新旧フラッグと呼ばれる特定のビットのメモリセルに旧を示す値を書き込んで区別する方法が取られている。
【０００４】
この新旧フラグは、ブロック内の特定のビットが割り当てられ、最初にデータを書き込むときには未書き込みの状態で設定されている。そしてデータの更新が行われ、他のブロックに最新のデータが書き込まれたとき、旧となるブロックの新旧フラグとして割り当てられたビットに追加の書き込みが行われる。
【０００５】
パーソナルコンピュータなどの電子機器をホストとして、メモリカードにデータを書き込んだり、読み出したりする場合、ホストとなる機器で定義するアドレスと、フラッシュメモリが取り扱うアドレスは異なっていて、ホストがデータ処理で取り扱うアドレスを論理アドレスと呼んでいる。フラッシュメモリは、ＮＡＮＤ型やＮＯＲ型などデバイス固有の構造に合わせたアドレスが振り当てられていて、これを物理アドレスと呼んでいる。
【０００６】
フラッシュメモリにデータを書き込んだときのデータ構造を図８に示す。フラッシュメモリ８００の記憶領域は複数のブロック８０１で構成され、それぞれに物理アドレス８０２が与えられている。データ領域８０３はメイン領域８０４とスペア領域８０５に分けられ、メイン領域８０４にホストから送られてくるデータを記憶する。スペア領域８０５には、論理アドレス８０６、新旧フラグ８０７、およびエラー訂正情報などその他８０８の情報を記憶している。論理アドレス“５７９”のデータは物理アドレス“７９０１”と“７９０８”のブロックに記憶されているが、物理アドレス“７９０１”のブロックの新旧フラグ８０７には“１”の旗が立っていて、旧のデータであることを示している。
【０００７】
上記からわかるようにメイン領域８０４、およびスペア領域８０５の中の論理アドレス８０６とその他８０８には、このブロックに最初にデータを書き込んだときに同時にその値画がデータとして書き込まれる。しかし、新旧フラグ８０７は、任意の論理アドレスに関連づけられたデータが更新されて、未使用のブロックに書き込まれるとき、旧いデータが保持されているブロックの新旧フラグ８０７に旧の値が書き込まれる。（特許文献１参照）
このように、従来のフラッシュメモリは、一度データが書き込まれたブロックに対しても新旧フラグに対応したビットを未書き込みの状態で用意しておけば、旧のデータになった時点で該当するブロックの新旧フラグの対応するビットを選択して書き込むことができる。従って、データの更新が繰り返されて、同じ論理アドレスのデータが複数存在しても常に最新のデータが書き込まれたブロックを容易に特定することができる。
【０００８】
また、この情報は不揮発性メモリであるフラッシュメモリに保持されているのでメモリカードの電源が切られた後も保持されている。
【０００９】
近年フラッシュメモリの記憶密度を向上する手段として、多値技術が開発され利用されるようになってきた。多値技術とは、１つのメモリセルに従来のように“０”、“１”の１ビットだけの情報を記憶させるのではなく、注入された電荷の量の多寡についても情報として加え、２ビット以上の情報を記憶させる技術である。図９を用いて多値フラッシュメモリセルの記憶原理について説明する。１つのメモリセルの電荷が注入されることによって、セルの閾値電圧Ｖｔｈが変化する。図９では、そのＶｔｈのレベルを注入されていない消去された状態と合わせて４段階に分割し、２ビットの情報を記憶する例を示している。縦軸はメモリセルの閾値電圧Ｖｔｈを示し、Ｖ１、Ｖ２、Ｖ３はメモリセルの記憶状態を判定する電圧を示している。横軸はメモリセルの各状態の分布状況を示している。“  ”で挟んだ２つの数字の、左側が上位ビットの値を示し、右側が下位ビットの値を示している。
【００１０】
消去された状態、すなわち、Ｖｔｈ＜Ｖ１のとき、２ビットの値を“１１”とし、Ｖ１＜Ｖｔｈ＜Ｖ２を“１０”、Ｖ２＜Ｖｔｈ＜Ｖ３を“０１”、Ｖ３＜Ｖｔｈを“００”と定義することができる。このようにメモリセルの閾値レベルを細かく区分することで２ビットの情報を記憶できることがわかる。
【００１１】
ところが、既にデータが書き込まれたブロックで特定のビットの値を書き込むときには手数がかかることになる。例えば、下位ビットの値を“１”から“０”に書換える場合、上位ビットの値が“１”の場合は狙いとする閾値Ｖｔｈの値がＶ１＜Ｖｔｈ＜Ｖ２となり、上位ビットの値が“０”の場合は狙いとする閾値Ｖｔｈ＜Ｖ３となる。このように特定のビットに書き込みを行うためにはメモリセルを共有する他方のビットの値を読み出してから書き込みレベルを指定しなければならない。従って、１ビットの値を単独に書換えることは手間のかかる作業となる。
【００１２】
しかも、Ｖ１＜Ｖｔｈ＜Ｖ２値を“０１”の組合せを選択することも可能であるが、一般に市販のフラッシュメモリではこのようなメモリセルの状態と各ビットの値の関係は公開されていない。また、一般に多値のフラッシュメモリは外部端子から見た仕様は従来の単値のメモリと同じになるように作られているため、メモリカードを設計するメモリの使用者には組み合わせられているビットの関係を知ることができないため、より困難である。
【００１３】
このように、多値のフラッシュメモリを用いたフラッシュカードを使用する場合、旧のデータを更新して古いデータが書かれたブロックの新旧フラグを表す特定のビットに“０”のデータを書き込むことが困難になる。
【特許文献１】米国特許第５４７９６３８号
【発明の開示】
【発明が解決しようとする課題】
【００１４】
フラッシュメモリを用いたメモリカードなどのようなファイルストレージデバイスの新旧データの管理方法について、データの更新時にはフラッシュメモリは消去されて未使用のブロックへ新しいデータを書き込み、旧のデータがかかれたブロックのスペア領域に設けられている新旧ビットの値を未書き込みの状態“１”から“０”の値に書き込むことで、新旧のデータの識別を行っている。
【００１５】
しかし、記憶媒体として多値のフラッシュメモリを使用する場合、一つのメモリセルに２ビットのアドレスを振り当てられていため、従来行っていたように既にデータが書き込まれたブロックの中の特定のビットにデータを書き込むことが容易ではなくなる。従来のように、旧のデータが書き込まれたブロック内の特定ビットが割り当てられた新旧フラグに旧のフラグをあらわす値を書き込む場合は、対をなす他方のビットの値を求め、その組合せとして得られたＶｔｈの値を狙って書き込む必要がある。
【００１６】
従って、一度データが書き込まれたブロックに追加の書き込みを行うことなく、更新された新旧のデータの中から最も新しいデータを見つけ出す方法が求められている。
【課題を解決するための手段】
【００１７】
上記課題に対して本発明では、フラッシュメモリのブロックの一つに既に書き込まれたデータを更新する場合、新たに書き込まれた新のデータの物理アドレスが常に旧のデータが書き込まれた物理アドレスより昇順方向にあり、新旧データが書き込まれた物理アドレスの間には常に使用可能でかつ未使用のブロックが存在しないように書き込みを管理することで解決している。
すなわち、論理アドレスと該論理アドレスに関連づけられたデータを、物理アドレスに関連づけられたブロックに格納するフラッシュメモリの、前記データを新たなデータに変えて格納する更新を、前記データを格納するブロックの物理アドレスを求め、該物理アドレスの値を順次、昇順方向に増加して物理アドレスを生成し、順次、該生成された物理アドレスに関連づけられたブロックが使用可能で未使用のブロックか否かを検証し、該検証結果が使用可能で未使用のブロックであるとき、該ブロックに前記論理アドレスと、前記新たなデータを格納することによって行われる。
【００１８】
このようにして更新されたデータは、所定の論理アドレスに関連づけられて格納されたデータの新旧を、使用可能で未使用のブロックの物理アドレスの中の最大値を求め、該最大値から順次、降順方向に減じて物理アドレスを生成し、順次、該生成された物理アドレスのブロックが格納する論理アドレスを検証し、検証した論理アドレスが前記所定の論理アドレスと一致したとき、該ブロックに格納されたデータが最新のデータと判断される。
【００１９】
このようにフラッシュメモリにアクセスすることで、フラッシュメモリのブロックに新旧フラグを書き込むことなしに新旧の判断を行うことができる。
【００２０】
さらに、データの更新では前記昇順方向に増加して生成した物理アドレスが、前記物理アドレスの最大値を超えたとき、該生成された物理アドレスを、０に置き換え、新旧の判断では、前記降順方向に減じて生成した物理アドレスが、負の値となったとき、該生成された物理アドレスを、前記物理アドレスの最大値に置き換えることで、最新のデータを保持するブロックが使用可能で未使用のブロックの物理アドレスの最大値より大きな物理アドレスを持っていた場合にも見つけ出すことができる。すなわち、物理アドレスの昇順方向で最大値の次を０の値に設定することによって、データの更新時の昇順方向、新旧の判断時の降順方向に物理アドレス値の生成する手順で、開始する物理アドレスの値にかかわらず全ての物理アドレスを生成することができる。従って全てのブロックについて検出することが可能になる。
【００２１】
また、前記ブロックが格納する論理アドレスに関連づけられて格納されたデータの新旧の判断を、前記フラッシュメモリの始動し、前記フラッシュメモリが格納する情報を揮発性メモリで作成した管理テーブルに転送し、前記管理テーブルの情報を揮発性メモリで作成された判定テーブルを用いて最新データを格納する物理アドレスを判断し、前記判断結果を前記管理テーブルに新の表示を行うことで、始動された後の通常の動作時には、前記管理テーブルを参照することで速やかに最新データを保持するブロックを見つけ出すことが可能となる。
【００２２】
さらに、前記管理テーブルに前記新の表示に応じて、前記管理テーブル上の前記論理アドレスを保持する他の物理アドレスに旧の表示を行うことで、更新される前のデータが保持されたブロックの物理アドレスの全てに旧の表示を行うことができる。また、前記フラッシュメモリのデータの更新を繰り返すことで使用可能で未使用のブロックの数が減少し、所定の数より少なくなると旧のデータを保持したブロックのメモリセルを消去して未使用の状態にすることが必要になる。このときは、前記フラッシュメモリの消去動作が、前記管理テーブル上に旧の値を書き込まれたブロックを全て選択し、選択された全てのブロックを消去する。このように一括消去された後には更新される前の旧のデータを保持するブロックは存在しなくなる。従って、消去によって新たに使用可能で未使用のブロックが生じても、旧のブロックの全てがなくなっているので、前に述べた、新と旧のブロックの間には使用可能で未使用のブロックが存在しない、とういう条件を維持することができる。
【発明の効果】
【００２３】
本発明は、メモリカードに多値フラッシュメモリを用いたとき、更新されて旧になったブロックに旧を示すフラグを書き込むことなく新旧の判断を可能にする。
【００２４】
新旧の判断は、カードの始動時にフラッシュメモリのスペア領域に保持された情報を揮発性メモリに生成された管理テーブルに転送し、この管理テーブル上で判断が行われるため余計な待ち時間を要しない。
【００２５】
また、データの更新や読み出す際の最新のデータもこの管理テーブル上で判別できるため高速の動作が可能になる。
【発明を実施するための最良の形態】
【００２６】
以下に、本発明におけるフラッシュメモリカードの新旧データを判別するために、メモリカードの構成を示し、データを更新する際にフラッシュメモリにデータを格納する方法、フラッシュメモリに格納されたデータの中から最新のデータを始動時に判定するための設定方法、ブロック消去の方法、および読み出し方法について述べる。
【実施例】
【００２７】
図１はフラッシュメモリを用いたメモリカードがホストに接続されたメモリカードシステムを示している。
【００２８】
メモリカードシステム１００はメモリカード１０１とホスト１５１とで構成されている。ホスト１５１はホストＩ／Ｆ１５２を備え、データバス１５３を介して論理アドレスと、データをメモリカードとの間で送受信する。
【００２９】
メモリカード１０１はフラッシュメモリ１０２とコントローラ１０３で構成され、データバス１０４を介して物理アドレスとデータをフラッシュメモリ１０２とコントローラ１０３との間で送受する。コントローラ１０３は、ホスト１５１との間でデータを交換するメモリカードＩ／Ｆ１１０、アドレスレジスタ１１１、データレジスタ１１２、管理テーブル１１３、新旧判定テーブル１１４、空きブロックカウンタ１１５、およびコントローラを制御するＣＰＵ１１６を備えている。
【００３０】
メモリカード１０１にデータを書き込む場合は、ホスト１５１から送られてきた論理アドレスと、データはそれぞれアドレスレジスタ１１１とデータレジスタ１１２に格納される。ＣＰＵ１１６はアドレスレジスタ１１１に格納された論理アドレスを管理テーブル１１３で参照し、格納しようとするフラッシュメモリの物理アドレスを決定する。データレジスタ１１２に格納されたデータはフラッシュメモリの決定された物理アドレスのブロックにデータバス１５３を経由して書き込まれる。
【００３１】
管理テーブル１１３は揮発性メモリで構成され、フラッシュメモリ１０２に書き込まれるデータの論理アドレスと物理アドレスの対応関係や、データが更新されているとき新旧の表示などの管理情報を保持している。また、新旧判定テーブル１１４は揮発性メモリで構成されている。
【００３２】
フラッシュメモリ１０２は多値構造のセルが用いられている。そのため、前記のようにブロックに一度データを書き込んだ後には、再び同じブロックに新旧フラグに相当する特定のビットに書き込む動作は行っていない。そのため、フラッシュメモリのスペア領域のどこにもデータの新旧を表す記号は書かれていない。新旧の判断は以下で詳しく説明する。
【００３３】
管理テーブル１１３は、メモリカード１０１の始動時にフラッシュメモリ１０２が格納する情報を元に作成され、データの書き込み、消去動作に応じて内容が修正される。始動時に更新されたデータの新旧の判断は新旧判定テーブルを用いて行われる。
【００３４】
ＮＡＮＤ型のフラッシュメモリ１０２は複数のブロックで構成され、さらに、各ブロックは複数のページで構成されている。読み出しと書き込み動作はページ単位で行われ、消去動作はブロックを単位に一括消去が行われる。それぞれのブロックには物理アドレスが付与れ、各ブロックのデータ領域にはデータと、論理アドレスなどのスペア情報が格納される。
【００３５】
図２は多値フラッシュメモリ１０２のデータ構造を示し、
ブロック１２１にはそれぞれに物理アドレス１２２が付与されている。データ領域１２３はメイン領域１２４とスペア領域１２５に分けられ、メイン領域１２４にホストから送られてくるデータを記憶する。スペア領域１２５には、論理アドレス１２６、およびエラー訂正情報などその他１２７の情報を記憶している。基本的構成は図８で示したデータ構造と同じであるが、新旧フラグに相当する領域はなく、それぞれのブロックを構成するメモリ領域は一度値を書き込まれた後は、データが更新された場合も再び書き込まれることはない。
【００３６】
物理アドレスの“０”と“１”は予め用途が予約された予約ブロックであって、物理アドレス“０”のブロックのメイン領域には欠陥があるブロックのアドレスが書き込まれている。また、物理アドレス“１”のブロックのメイン領域にはブートデータが書き込まれていて、メモリカードの始動時に自動的に読み出される。
【００３７】
物理アドレス“２”以降は一般に使用されるブロックで、昇順方向に数字が振り当てられ、図２の例では物理アドレス“９９９９”が最大値で、最終アドレスと定義する。メイン領域で（未使用）と書かれているブロックは、欠陥がなく予約もされていない使用可能で未使用のブロックであることを表している。
【００３８】
物理アドレス“２”、“３”のブロックは、一度所用された後に消去されることでランダムに発生する使用可能で未使用のブロックの例を示している。物理アドレス“７９０３”は欠陥があるブロックで使用することができない。物理アドレス“７９００から７９０６”のブロックには、欠陥ブロックを除いて、論理アドレス“５７８”から“５８３”の値が論理アドレス領域１２６に書き込まれ、それぞれに関連するデータがメイン領域１２４に書き込まれている。
【００３９】
物理アドレス“７９０７”にはその後に書き込まれた論理アドレス“８１０”のデータが書かれている。物理アドレス“７９０８”のブロックのデータの論理アドレスも“５７９”であって、物理アドレス“７９０１”のブロックと同じ値になっている。以下で説明する本発明の判断方法に従えば、物理アドレス“７９０８”のデータが最新のデータであることがわかる。
【００４０】
図２に示したように、同じ論理アドレスのデータが書き込まれた複数のブロックが存在するが、フラッシュメモリそのものにはどのブロックに最新のデータが書き込まれているかを示す情報は備えていない。
【００４１】
次に、管理テーブル１１３の構成を図３に示す。管理テーブル１１３は、メモリカードの始動時にフラッシュメモリ１０２が保持する情報をもとに作成され、論理アドレスと物理アドレスの関係を保持し、動作中のデータの読み出し、書き込み、消去時のフラッシュメモリ１０２のアドレス情報を管理している。物理アドレス１３１の“０”から最終アドレス“９９９９”に対応した行があり、それぞれの行に、論理アドレス１３２、新旧フラグ１３３、欠陥フラグ１３４、および予約フラグ１３５の値が保持されている。図３では、図２に対応して表示されていて、物理アドレス“７９０１”の新旧フラグ１３３には“旧”の表示があり、物理アドレス“７９０８”には“新”の表示がなされている。この表示方法については、後で説明する。
【００４２】
以下に、データの更新があったときのフラッシュメモリへの書き込む方法、更新された複数の同じ論理アドレスが異なる物理アドレスのブロックに保持されている場合、最新の更新されたデータがどのブロックに保持されているかを決定する方法について順に述べる。
【００４３】
＜データの更新＞先ず、メモリカードが始動されていて通常の動作状態にあるとき、ホスト１５１から、既にフラッシュメモリ１０２に書き込まれている論理アドレスを割り当てられたデータを更新する要求がなされた場合について説明する。ホスト１５１から更新するデータの論理アドレスと書き込みデータはホストＩ／Ｆ１５２、データバス１５３を経由してメモリカード１０１に送られ、メモリカードＩ／Ｆ１１０を経由してアドレスレジスタ１１１、およびデータレジスタ１１２に保存される。
【００４４】
フラッシュメモリ１０２に更新される新しいデータを書き込むために、管理テーブル１１３上から、更新する前までは最新のデータが書き込まれているブロックの物理アドレスを求める。そして、物理アドレスを昇順方向にたどって、最初に見つかった使用可能で未使用のブロックに新しいデータを書き込む。同時に、管理テーブルの値を書換えて、最新の状態に書換えてデータの更新を完了する。図２および図３の例では、物理アドレス“７９０１”には論理アドレス“５７９”の更新する前の最新のデータが格納されていて、物理アドレス“７９０１”の新旧フラグ１３３には”新“の表示がなされている。この段階では物理アドレス“７９０８”のブロックは未使用の状態で、ここに論理アドレス“５７９”の更新された最新のデータが書き込まれる。
【００４５】
上記のデータの更新の手順を図４のフローチャートを用いて説明する。先ず、管理テーブル１１３上で、論理アドレス１３２の中から更新する論理アドレスの値を見つけ出す。論理アドレスに対応する物理アドレスが複数個ある場合、その中から新旧フラグ１３３が“新”になっている行の物理アドレス１３１を見つけ出し、Ｎの値をその物理アドレスに設定する（Ｓ１１１）。さらに、新旧フラグ１３３の値を“新”から“旧”に変更する（Ｓ１１２）。
【００４６】
次に、Ｎの値をＮ＝Ｎ＋１に昇順方向に置き換える（Ｓ１１３）。置き換えたＮの値と最終ブロックの値を比較する（Ｓ１１４）。Ｎの値が最終ブロックの値より大きくなったときは、Ｎの値をＮ＝０に置き換える（Ｓ１１５）。このステップは、物理アドレスを昇順方向に順次増加させたときの、最終ブロックの次を“０”と定義しているからである。
【００４７】
次に、管理テーブル１１３上で、物理アドレスがＮのブロックが使用可能で未使用かどうかを検証する（Ｓ１１６）。該当しない場合は、再びステップＳ１１３にもどり、物理アドレスを昇順方向に使用可能で未使用のブロックが見つかるまでこれを繰り返す。
【００４８】
ステップＳ１１６で使用可能で未使用のブロックに該当したとき、このブロックに更新する新しいデータを書き込む。すなわち、フラッシュメモリ１０２の物理アドレスがＮのブロックの論理アドレス１２６にアドレスレジスタ１１１に保持されている論理アドレスを書き込み、データレジスタ１１２に保持されたデータをメイン領域１２４に書き込む（Ｓ１１７）。
【００４９】
引き続いて管理テーブル１１３の物理アドレスがＮの行の論理アドレス１３２にアドレスレジスタ１１１に保持されている論理アドレスを書き込み、さらに新旧フラグ１３３を“新”に変更する（Ｓ１１８）。
【００５０】
次に空きブロックカウンタ１１５の値Ｍを１減じてＭ＝Ｍ−１に置き換える（Ｓ１１９）。そして、置き換えられたＭの値が指定されている最小値Ｍｍｉｎと比較して（Ｓ１２０）大きいか等しい場合ステップＳ１２３に進んでデータの更新を完了する。
【００５１】
ステップＳ１２０でＭの値が最小値Ｍｍｉｎよりも小さくなったときは、管理テーブル１１３の新旧フラグ１３３に“旧”の表示がある物理アドレスのブロックを全て消去する（Ｓ１２１）。次いで、管理テーブル上の消去したブロックに該当する行の論理アドレス１３２、新旧フラグ１３３のデータを削除する（Ｓ１２２）。こうしてデータの更新を完了する（Ｓ１２３）。
【００５２】
メモリカード１０１がホスト１５１に接続された使用状態で引き続きデータを読み出す場合は更新された最新のデータは、管理テーブル１１３の上の新旧フラグ１３３に“新”の表示があるので正しく識別できる。しかし、一度メモリカード１０１の電源が一度切断されると、揮発性メモリで構成された管理テーブル１１３のデータは消滅する。従って、始動時にはフラッシュメモリ１０２が保持している情報をもとに管理テーブル１１３を作成する必要がある。以下に始動時に管理テーブルに管理情報を設定する方法について説明する。
【００５３】
＜始動時の設定＞メモリカード１０１をホスト１５１に接続するとコントローラ１０３が起動し、フラッシュメモリ１０２の予約ブロックから、ブートデータを読み出してＣＰＵ１１６にメモリカードの管理プログラムを与える。次にフラッシュメモリ１０２のそれぞれのブロックのスペアエリア１２５の情報を順次読み出し、管理テーブル１１３に転送する。
【００５４】
フラッシュメモリの予約ブロックのメイン領域１２４と、各ブロックのスペア領域１２５に書き込まれたデータを順番に読み出してコントローラに転送し、管理テーブルを作成する手順を図５に示すフローチャートを用いて説明する。
【００５５】
先ず、フラッシュメモリの物理アドレス“０”のブロックに書き込まれている欠陥アドレス情報を読み出して、管理テーブル１１３の対応する物理アドレスの行の欠陥フラグ１３４の列に欠陥表示を書き込む。引き続き、予約ブロックの予約フラグ１３４に予約の表示を行う。（Ｓ１３１）
次に、物理アドレスを指定するＮの値をＮ＝０に設定し（Ｓ１３２）、次いで、空きブロックカウンタ１１５の値Ｍをフラッシュメモリ１０２のブロックの数に設定する（Ｓ１３３）。次に、物理アドレスがＮのブロックが、使用可能なブロックかどうかを判断する（Ｓ１３４）。ここで、使用可能なブロックとは、欠陥が無くかつ予約されていないブロックである。使用可能なブロックであれば、そのブロックが既に使用済みであるかどうかを判断する（Ｓ１３５）。既に使用済みであれば、割り当てられている論理アドレス１２６の値を管理テーブル１１３の論理アドレス１３２に保管する（Ｓ１３６）。この場合、空きブロックの数が１減少しているので、Ｍの値をＭ＝Ｍ−１に置き換える（Ｓ１３７）。
【００５６】
次に、Ｎの値が最終アドレスの値に等しいかどうかを判断する（Ｓ１３８）。等しくないときは、Ｎの値をＮ＝Ｎ−１に置き換えて（Ｓ１３９）ステップＳ１３４に戻って、再び同じ判断を繰り返す。ステップＳ１３４で物理アドレスＮのブロックが使用可能でない場合は、ステップＳ１３７に跳び、空きブロックの数Ｍを１減じる。
【００５７】
また、ステップＳ１３５で物理アドレスＮのブロックが未使用の場合は、ステップＳ１３８に跳び、Ｎの値が最終アドレスと一致していないかどうかを判定する。
【００５８】
ステップＳ１３８でＮの値が最終アドレスと一致すれば、全ての物理アドレスに対する調査が終わり、始動時にフラッシュメモリ１０２から管理情報を転送する管理テーブル１１３の作成が完了する（Ｓ１４０）。
【００５９】
次に、同一論理アドレスが指定された複数のブロックが存在したとき、どちらのブロックのデータが最新のデータであるかを判断する必要がある。以下に、管理テーブル１１３に読み出した情報を用いて、新旧フラグ１３３の列にフラグを立てる手順を図６のフローチャートを用いて説明する。
【００６０】
本フローにおいては、揮発性メモリ上に設けた新旧判定テーブル１１４を用いる。新旧判定テーブル１１４は図７に示すように、論理アドレス１４１、最新物理ブロック１４２、および最新ブロック発見済みフラグ１４３から構成されていて、上記図５のフローチャートに従って作成された管理テーブル１１３を用いて作成し、論理アドレス１４１の昇順方向に並べておく。同じ論理アドレスが複数個ある場合は物理アドレス１４２は昇順方向に並べ、最初の状態では最新ブロック発見済みフラグ１４３は全て値が未入力にしておく。
【００６１】
先ず、図６の最初のステップＳ１５１でＮの値をＮ＝最終アドレスに設定する。通常の場合は、図５の管理テーブル作成手順に引き続いて行うのでＮは最終アドレスに設定された状態で終了している。次に、管理テーブル１１３を参照して物理アドレスの値がＮのブロックが使用可能でかつ未使用のブロックかどうかを判断する（Ｓ１５２）。いずれにも該当しない場合はＮの値をＮ＝Ｎ−１に置き換え（Ｓ１５３）、再びステップＳ１５２の判断を繰り返す。このようにして、物理アドレスの値Ｎを最大値から降順方向に１ずつ減じながら設定して点検し、使用可能で未使用の条件に最初に該当するブロックを見つけ出す。
【００６２】
ステップＳ１５２で該当するブロックが見つかったとき、そのＮの値をＮｓｔａｒｔとする（Ｓ１５４）。このようにして定めたＮｓｔａｒｔは、使用可能で未使用のブロックの中で最大の物理アドレスであって一意的に定めることができ、この物理アドレスを起点にして以下の手順に従って最新のデータが格納されたブロックを判断していく。
【００６３】
メモリカードの使用開始時点では、このＮｓｔａｒｔは最終アドレスとは一致するが、データの更新と、ブロックの消去を繰り返すことで、最終アドレスまで使用され、未使用のブロックの物理アドレスの値が小さくなる状態が生じるが、上記の手順で求めることで対処することが可能となっている。
【００６４】
ステップＳ１５４に続いて、Ｎの値をＮ＝Ｎ−１に降順方向に置き換える（Ｓ１５５）。そして置き換えたＮの値が負かどうかを判定し（Ｓ１５６）、負になっていない場合、引き続きＮの値とＮｓｔａｒｔとを比較し（Ｓ１５７）、等しくない場合、ステップＳ１５９で物理アドレスがＮのブロックが使用可能でかつ論理アドレスが書き込まれているブロックかどうかを判断する。判定条件に一致しない場合は、ステップＳ１５５にもどる。使用可能で論理アドレスがある場合は、新旧判定テーブル１１４の論理アドレス１４１と新旧ブロック発見済みフラグ１４３を参照し、該当する論理アドレスの物理ブロックが既に見つかっているかどうかを判断する（Ｓ１６０）。その論理アドレスが発見済みではない場合、ステップＳ１６２に移り、管理テーブル１１３の新旧フラグ１３３に“新”の表示を行い、新旧判定テーブル１１４の最新ブロック発見済みフラグ１４３に“済み”を表示する。そして、再びステップＳ１５５にもどる。
【００６５】
ステップＳ１６０で該当する論理アドレスが発見済みの場合、管理テーブル１１３の該当するブロックの新旧フラグ１３３を“旧”の表示に変更し、新旧判定テーブル１１４の最新ブロック発見済みフラグを済みに表示する。
【００６６】
図７に示した新旧判定テーブル１１４の場合、論理アドレス“５７９”に対応する物理アドレスの新旧判断では、降順方向に物理アドレスをたどり、物理アドレス“７９０８”で論理アドレス“５７９”を始めて発見したので、管理テーブル１１３の新旧フラグ１３３に“新”の表示がされている。同時に新旧判定テーブル１１４の最新ブロック発見済みフラグには済みの表示がされる。従って、さらに物理アドレスの値を降順方向に減じて、“７９０１”になったときには、該当する論理アドレス“５７９”は既に発見済みになっているので、管理テーブル１１３の新旧フラグ１３３には”旧“の表示がされている。
【００６７】
ステップＳ１５５で降順方向にＮの値を１ずつ減じる操作を繰り返していると、ついにはＮが負の値が生成される。この場合、ステップＳ１５６の判定でステップＳ１５８へ進み、ここでＮの値を最終アドレスの値に置き換える。そして引き続きステップＳ１５７へ進みフローに従った手順が繰り返される。
【００６８】
そして、Ｎの値がＮ＝Ｎｓｔａｒｔになったとき、ステップＳ１５７で全ての物理アドレスの検証が終了したと判断し、管理テーブル１１３の新旧フラグ１３３への書き込みが完了する（Ｓ１６３）。
【００６９】
ステップＳ１５６でＮが負の値になったときにＮの値を最終アドレスの値に置き換えることで物理アドレスを連続して降順方向に順番に置き換えることができる。そして、ステップＳ１５７でＮ＝Ｎｓｔａｒｔと判定されたとき、全物理アドレスの降順方向の検証が行われたことが判る。
【００７０】
データ更新の項で説明したように、同じ論理アドレスのデータを保持しているブロックが複数個あった場合、更新された最新のデータの物理アドレスは必ず更新される前の物理アドレスから昇順方向にたどるブロックの中の最初の使用可能で未使用のブロックに書き込まれている。従って、データの更新が複数回繰り返して行われた場合も、最も旧のデータが保持されているブロックと最新のデータが保持されているブロックの間には使用可能で未使用のブロックは存在しないことがわかる。
【００７１】
このような順番で新旧のデータが保持されているので、複数箇所に保持された論理アドレスの最新のデータは、使用可能で未使用のブロックから物理アドレスを降順方向にたどって最初に発見されたブロックに保持されていることがわかる。さらに、使用可能で未使用のブロックが多数、分散して存在する状態が存在する。このような場合、使用可能で未使用のブロックの中で物理アドレスが最大値を持ったブロックを起点にすることで、一意的に見つけ出すことができる。
【００７２】
次に、ブロック消去について説明する。
【００７３】
＜ブロック消去＞ステップＳ１２２で示したように空きブロックカウンタ１１５の値が規定値より少なくなった場合は、旧のデータが格納されたブロックの消去を行う。消去動作は管理テーブル１１３の新旧フラグ１３３の中で旧の表示がある全ての物理アドレスを指定し、フラッシュメモリ１０２が備えるブロック消去機能を利用し一括消去する。消去動作はデータの読み出しや、書き込みに比べて時間を要するので、必ずしもステップＳ１２２の時に限らず、メモリカードが待ちの状態にあるときを利用して行っても良い。
【００７４】
この消去動作で注意を要するのは、管理テーブル１１３上の新旧フラグ１３３の中で“旧”の表示があるブロックを全て消去しなければならないという点である。なぜなら、フラッシュメモリのスペア領域には新旧フラグに相当する記録がないため、同じ論理アドレスの表示を持つ物理アドレスが複数存在するとき、データが保持されているブロックの物理アドレスの順序が厳しく限定されているからである。
【００７５】
すなわち、データの更新のところで述べたように、同じ論理アドレスのデータを記憶したブロックが複数存在する場合は、最新のデータが書き込まれたブロックと更新される前の旧のデータが書き込まれたブロックとの間には、使用可能で未使用のブロックが存在しないということを基本条件としている。消去動作で旧のブロックの一部が消去されずに残った場合、旧のデータを保持する物理ブロックと新のデータを保持するブロックの間にあった別の旧のデータを保持するブロックが消去され使用可能で未使用のブロックとなって、上記の前提条件が満たせなくなってしまうからである。
【００７６】
＜データの読み出し＞次に、メモリカードからデータを読み出すときの手順について説明する。メモリカード１０１はホスト１５１からは読み出すデータの論理アドレスをインターフェース１５２を経由して受信し、アドレスレジスタ１１１に保持する。管理テーブル１１３の中から保存された論理アドレスと一致し、新旧フラグ１３３に新の表示のあるブロックの物理アドレス１３１を見つけ出す。そして、フラッシュメモリ１０２から対応するブロックのデータを読み出し、データレジスタ１１２に保持する。引き続きインターフェース１１０を経由してホスト１５１へ読み出したデータを送る。
【００７７】
以上述べたように、本発明では、フラッシュメモリのデータの更新を旧のデータを保持するブロックから物理アドレスの昇順方向にある使用可能で未使用の最初のブロックに書き込むことに特徴がある。従って、最新のデータが使用可能で未使用のブロックの中で物理アドレスが最大のブロックを降順方向にたどり、最初に目的とする論理アドレスを保持するブロックが最新のデータを保持していることがわかる。
【００７８】
なお、本発明の実施において、昇順方向と降順方向を置き換えて実施してもなんら問題がないことも明らかである。
【産業上の利用可能性】
【００７９】
フラッシュメモリを用いたメモリカードなどのファイルシステムでは、多値フラッシュメモリの利用が拡大している。しかし、多値フラッシュメモリは一度データを書き込まれたブロックの特定のビットに対してデータを追記することが困難である。本発明によれば、データの更新が繰り返されることで、同じ論理アドレスを持った複数のブロックの新旧判断を従来のように、旧になったブロックに追記することなく、容易に新旧を判断することができる。新旧の情報はメモリカードに記録されたデータの物理アドレスの順番によって判断されるので、電源の供給が無くても保持することができ、また物理アドレスの順番から新旧の判断はメモリカードが備えるコントローラによって自動的に行われる。
【図面の簡単な説明】
【００８０】
【図１】本発明の実施例となるメモリカードシステム説明する図である。
【図２】多値フラッシュメモリに書き込むデータの構成を示す図である。
【図３】管理テーブルを示す図である。
【図４】データの更新を行う手順を示すフローチャートである。
【図５】管理テーブルの作成を行う手順を示すフローチャートである。
【図６】新旧フラグの作成を行う手順を示すフローチャートである。
【図７】新旧判定テーブルを示す図である。
【図８】フラッシュメモリに書き込む従来のデータ構成を示す図である。
【図９】多値メモリのＶｔｈと２ビットの値の関係を説明する図である。
【符号の説明】
【００８１】
１００  メモリカードシステム
１０１  メモリカード
１０２  フラッシュメモリ
１０３  コントローラ
１０４  データバス
１１０  メモリカードＩ／Ｆ
１１１  アドレスレジスタ１１３  管理テーブル
１１２  データレジスタ
１１３  管理テーブル
１１４  新旧判定テーブル
１１５  空きブロックカウンタ
１１６  ＣＰＵ
１５１  ホスト
１５３  データバス
【図１】
2006048585.tif 000003
【図２】
2006048585.tif 000004
【図３】
2006048585.tif 000005
【図４】
2006048585.tif 000006
【図５】
2006048585.tif 000007
【図６】
2006048585.tif 000008
【図７】
2006048585.tif 000009
【図８】
2006048585.tif 000010
【図９】
2006048585.tif 000011