(57)【要約】      （修正有）【課題】フラッシュメモリの使用中に発生するエラーブロックを管理する方法及び装置を提供する。【解決手段】（ａ） フラッシュメモリに複数の使用ブロックを有する使用領域と複数の予備ブロックを有する予備領域とを割り当て、マッピング情報を保存するブロックマップページを複数含むブロックマップページグループを前記予備領域に生成する段階、（ｂ） 前記ブロックマップページグループのうち最も最近のマッピング情報を含んでいるブロックマップページを主メモリに常駐させる段階、及び（ｃ） フラッシュ演算中にエラーブロックが発生する場合に未使用予備ブロックを探し、見つけられた未使用予備ブロックに発生した前記エラーブロックに記録された情報を復元して記録し、前記マッピング情報を更新して前記ブロックマップページグループのうち何れか１つのブロックマップページに記録する段階を含む。【選択図】図１２
2004310770.tif 000002
【特許請求の範囲】
【請求項１】
（ａ） フラッシュメモリに複数の使用ブロックを有する使用領域と複数の予備ブロックを有する予備領域とを割り当て、前記使用領域または前記予備領域で発生するエラーブロックとこれに代えて使用する予備ブロックとのマッピング情報を保存するブロックマップページを複数含むブロックマップページグループを提供する段階と、
（ｂ） 前記ブロックマップページグループのうち所定の規則により選択されたブロックマップページのマッピング情報をメモリに常駐させる段階と、
（ｃ） フラッシュ演算中に発生したエラーブロックを前記常駐マッピング情報を通じて探した未使用予備ブロックとマッピングし、前記常駐マッピング情報を更新して前記更新されたマッピング情報を前記ブロックマップページグループに属するブロックマップページに記録する段階と、を含むフラッシュメモリのエラーブロック管理方法。
【請求項２】
前記（ａ）段階は、フラッシュメモリに複数の使用ブロックを有する使用領域と複数の予備ブロックを有する予備領域とを割り当てる（ａ１）段階と、
前記生成された予備ブロックと発生するエラーブロックとのマッピング情報を記録するブロックマップフィールドを予備ブロック毎に生成し、前記生成されたブロックマップフィールド、マッピング情報の時点を判断するためのカウントフィールド、及び有効性判断のためのトランジションフィールドを含むブロックマップ情報を初期化させる（ａ２）段階と、
フラッシュメモリに存在するエラーブロックを検査して見つけられたエラーブロック及び前記見つけられたエラーブロックに代える予備ブロックのマッピング情報を前記ブロックマップフィールドに各々記録し、前記カウントフィールドに初期カウントをしてブロックマップ情報を生成する（ａ３）段階と、
前記ブロックマップ情報を前記ブロックマップページグループの何れか１つのブロックマップページに記録する（ａ４）段階と、を含む請求項１に記載のフラッシュメモリのエラーブロック管理方法。
【請求項３】
前記ブロックマップページグループは少なくとも２つの予備ブロックで構成されることを特徴とする請求項１に記載のフラッシュメモリのエラーブロック管理方法。
【請求項４】
前記フラッシュメモリは複数のチップよりなり、各段階はそれぞれのチップ毎に行われることを特徴とする請求項１ないし３のうち何れか１項に記載のフラッシュメモリのエラーブロック管理方法。
【請求項５】
前記（ａ）段階は、前記使用ブロック及び前記予備ブロックのうち少なくとも一部を保護領域に指定して検証されていないソフトウェアの接近を遮断することを特徴とする請求項１に記載のフラッシュメモリのエラーブロック管理方法。
【請求項６】
前記（ｂ）段階は、ブロックマップページグループ内のブロックマップページのうちから有効でありかつ最も最近に記録されたブロックマップページを検索し、検索されたブロックマップページのマッピング情報をメモリに常駐させることを特徴とする請求項１に記載のフラッシュメモリのエラーブロック管理方法。
【請求項７】
前記有効でありかつ最も最近に記録されたブロックマップページを検索する時、それぞれのブロックマップページのトランジションフィールドに記録された値及びカウントフィールドに記録された数の大きさを基準として検索することを特徴とする請求項６に記載のフラッシュメモリのエラーブロック管理方法。
【請求項８】
前記ブロックマップページグループ内のブロックマップページのうちから有効でありかつ最も最近のブロックマップページを検索する過程で有効でなく、かつ読取りエラーが表示されたブロックマップページを見つける場合、前記見つけられた読取りエラーブロックを所定の方法で復旧する段階をさらに含むことを特徴とする請求項６に記載のフラッシュメモリのエラーブロック管理方法。
【請求項９】
フラッシュメモリが複数のチップよりなる場合に各段階はチップ毎に行われることを特徴とする請求項６ないし８のうち何れか１項に記載のフラッシュメモリのエラーブロック管理方法。
【請求項１０】
前記（ｃ）段階は前記常駐マッピング情報を用いて未使用予備ブロックを探す（ｃ１）段階と、
前記（ｃ１）段階を通じて見つけられた未使用予備ブロックとエラーブロックとの番号をマッピングして前記常駐マッピング情報を更新する（ｃ２）段階と、
前記ブロックマップページグループの未使用ブロックマップページを探す（ｃ３）段階と、
前記発生したエラーブロックに記録された情報を前記見つけられた未使用予備ブロックに複写する（ｃ４）段階と、
前記更新されたマッピング情報を含む情報を前記見つけられた未使用ブロックマップページに記録する（ｃ５）段階と、
前記未使用ブロックマップページが有効であることを表示する（ｃ６）段階と、を含むことを特徴とする請求項１に記載のフラッシュメモリのエラーブロック管理方法。
【請求項１１】
前記エラーブロックが保護領域で発生した場合に前記保護領域を読取り／書込み可能状態に変更し、前記（ｃ６）段階が終わった後に前記保護領域を再び読取り専用状態に変更する段階をさらに含むことを特徴とする請求項１０に記載のフラッシュメモリのエラーブロック管理方法。
【請求項１２】
フラッシュメモリが複数のチップよりなる場合に各段階はチップ毎に行われることを特徴とする請求項１０または１２に記載のフラッシュメモリのエラーブロック管理方法。
【請求項１３】
前記（ｃ）段階は、発生したエラーブロックが読取りエラーブロックであるか否かを判断する（ｃ１）段階と、
読取りエラーブロックを復旧するために臨時に使用する予備ブロックを消去する（ｃ２）段階と、
読取りエラーブロックのエラーを訂正して前記予備ブロックに複写する（ｃ３）段階と、
前記ブロックマップページグループのうち未使用ブロックマップページを探す（ｃ４）段階と、
前記見つけられたブロックマップページに前記読取りエラーブロックと前記予備ブロックとのマッピング情報及び読取りエラー復旧状態であることを表示する（ｃ５）段階と、
前記読取りエラーブロックを消去する（ｃ６）段階と、
前記予備ブロックを前記消去された読取りエラーブロックに複写する（ｃ７）段階と、
前記見つけられたブロックマップページに無効であることを表示する（ｃ８）段階と、を含むことを特徴とする請求項１に記載のフラッシュメモリのエラーブロック管理方法。
【請求項１４】
前記読取りエラーブロックが保護領域で発生した場合に保護領域を読取り／書込み可能状態に変更し、前記（ｃ８）段階が終わった後に前記保護領域を再び読取り専用状態に変更することを特徴とする請求項１３に記載のフラッシュメモリのエラーブロック管理方法。
【請求項１５】
少なくとも１つ以上のフラッシュメモリチップよりなるフラッシュメモリのエラーブロック管理装置において、
複数の使用ブロックを有する使用領域と使用中に発生するエラーブロックに代えるための複数の予備ブロックを有する予備領域とを有し、使用中に発生するエラーブロックとこれに代える予備ブロックとのマッピング情報を保存するブロックマップページを複数有しているブロックマップページグループを前記予備領域内に有しているフラッシュメモリと、
前記ブロックマップページグループ内に存在する最近の有効なブロックマップページのマッピング情報と、エラーブロックの発生時にこれを処理するためのプロセスを定義するフラッシュ装置管理子をローディングするためのメモリと、
前記フラッシュメモリとメモリに電気的に連結され、フラッシュ装置管理子のコードを読取ってフラッシュメモリに対するフラッシュ演算及びエラーブロック管理をする中央処理装置と、を含むフラッシュメモリのエラーブロック管理装置。
【請求項１６】
前記ブロックマップページグループは少なくとも２つ以上の予備ブロックで構成されたことを特徴とする請求項１５に記載のフラッシュメモリのエラーブロック管理装置。
【請求項１７】
前記中央処理装置とフラッシュメモリ間に電気的に連結されており、中央処理装置がフラッシュ演算を行う間にフラッシュメモリに次の演算のためのデータを保存しているバッファを２つ以上有しているフラッシュメモリコントローラをさらに含むことを特徴とする請求項１５に記載のフラッシュメモリのエラーブロック管理装置。
【請求項１８】
前記フラッシュメモリコントローラは、フラッシュメモリの一定領域を保護領域に設定して前記フラッシュ装置管理子により検証されたフラッシュアプリケーションに対してのみ保護領域に対するフラッシュ演算を許容し、検証されていないフラッシュアプリケーションに対しては保護領域に対するフラッシュ演算を許容しないことを特徴とする請求項１７に記載のフラッシュメモリのエラーブロック管理装置。
【請求項１９】
前記フラッシュメモリが複数のフラッシュメモリチップよりなる場合に前記フラッシュメモリの使用領域、予備領域と前記予備領域内のブロックマップページグループは各フラッシュメモリチップ毎に存在することを特徴とする請求項１５に記載のフラッシュメモリのエラーブロック管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリの使用中に発生するエラーブロックを処理する方法及び装置に係り、より詳細にはフラッシュ演算を最小化するフラッシュメモリのエラーブロック管理方法に関する。また本発明は、検証されていないフラッシュアプリケーションによる悪意的なフラッシュ演算からフラッシュメモリに保存されている重要な情報を保護するためにフラッシュメモリの一定領域を保護領域に設定して管理する方法及び装置に関する。
【背景技術】
【０００２】
フラッシュメモリは、ＲＡＭやＲＯＭまたはハードディスクのようにデータ貯蔵手段ではあるが、複数のブロックを有しており、ブロック単位で消去演算を行うという点で特徴を有する。
【０００３】
フラッシュメモリの各ブロックには消去演算回数の制限がある。従って、フラッシュメモリが工場で出荷された後、消去演算の制限回数を超えれば、該当ブロックはエラーブロックになり得、また物理的特性のよくないブロックである場合、消去演算回数が制限回数に接近すれば、該当ブロックはエラーブロックになってしまう。そして、ＮＡＮＤフラッシュメモリのようなフラッシュメモリは工場で出荷される時より幾つかのブロックはエラーブロックであって、この時のエラーブロックを探す方法は製造社で提供する。また、フラッシュメモリに読取り演算を行う時、以前にフラッシュメモリに用いられたデータと異なるデータが読取られることもあり、該当ブロックもエラーブロックである。このようなエラーブロックはフラッシュメモリの使用中にあらゆるブロックから発生するか、あるいは使用する前からエラーブロックで有り得る。エラーブロックの存在はフラッシュメモリを使用し難くする要素である。
【０００４】
このようなエラーブロックを管理するためにはエラーブロックを管理するための情報が必要であり、かかる情報をＲＡＭまたはＥＥＰＲＯＭのような別途のメモリに保存して管理しうる。しかし、ＲＡＭに管理情報を保存した場合には電源が消えれば、ＲＡＭに保存された情報は全てなくなってしまう問題点があり、ＥＥＰＲＯＭのような別途のメモリに管理情報を保存する場合はシステム構築のための追加費用が必要であり、システムを複雑にする恐れがある。
【０００５】
このような問題点を解決するために特許文献１に開示された従来の発明はフラッシュメモリシステムでエラーブロックを処理する方法を提示したが、フラッシュメモリの一定の領域をエラーブロック管理のための部分として割り当ててエラーブロックを処理する。
【０００６】
図１は、前記発明のエラーブロック管理の基本単位であるチャンクの構造を示すブロック図である。従来の発明はフラッシュメモリ領域を実際データを書込み／消去するのに使われるデータ領域とエラーブロックが発生した場合、これを処理するための余分の空間である余分領域（Ｓｐａｒｅ Ａｒｅａ）とに区分し、余分領域は複数のチャンクに区分した。図１は、チャンクの構造を示している。チャンクは余分ブロック０から余分ブロックｙまでのｙ＋１個の余分ブロックよりなっている。１つのチャンクにはメモリ番地数の大きい領域にオリジナルチャンクマップ及びコピーチャンクマップが各々１つの余分ブロックに保存される。そして、揮発性メモリであるＲＡＭにはワーキングチャンクマップが存在する。
【０００７】
図２は、チャンクマップのさらに詳細な構造を示す。すなわち、余分ブロック０を拡大した図面である。チャンクマップはフラッシュメモリに存在するオリジナルチャンクマップ、コピーチャンクマップ、及びＲＡＭに存在するワーキングチャンクマップが何れも同じデータ構造を有する。まず、エラーブロック管理ヘッダ（ＢＢＭ Ｈｅａｄｅｒ）部分にはエラーブロックを管理するためのメタ情報が保存されるが、例えば、総ブロックの数、チャンクマップの大きさ、チャンクマップの状態などがある。そして、各々有効フィールドとエラーデータブロック番号を有するエントリー（ＢＢＭ Ｅｎｔｒｙ）が余分ブロックの数と同じｙ＋１個がある。エントリーにはエラーブロックとこれに代える余分ブロックのマッピング情報が保存される。例えば７番エントリーのエラーデータブロック番号が１０であれば、エラーブロックの１０番ブロックがチャンクｎの７番余分ブロックに再マッピング（Ｒｅ−ｍａｐｐｉｎｇ）されていることを示す。
【０００８】
前記従来の技術の動作は次の通りである。まず、エラーブロック管理子を初期化するが、エラーブロック管理子の初期化過程はエラーブロック管理子フォーマット、チャンクフォーマット、チャンクマウント過程よりなるが、エラーブロック管理子の初期化が完了される時点はチャンクがマウントされる時点である。チャンクをマウントする過程はフレッシュメモリのコピーチャンクマップとオリジナルチャンクマップとを読取ってＲＡＭ上にワーキングチャンクマップを生成する過程である。この際、フラッシュメモリにコピーチャンクマップとオリジナルチャンクマップとを２つ維持して各種演算途中でエラーが発生しても復旧できる方法を提供する。エラーブロック管理子初期化作業が終われば準備状態になる。特定ブロックに対する接近方法は各チャンクに対して要請されたブロックがエントリーに存在するか否かを検査した後、もしエントリーに存在すれば再マッピングした結果を送る。新しいエラーブロックが見つけられた時のアルゴリズムを要約すれば次の通りである。まず、使用可能な未使用エントリーを探し、そのエントリーを含むチャンクマップを読取ってワーキングチャンクマップに書込む。次いで、新しいマッピング情報をワーキングチャンクマップの見つけられた未使用エントリーに書込む。次いで、変更された再マッピング情報をフラッシュメモリのオリジナルチャンクマップ及びコピーチャンクマップに記録する。
【０００９】
前述した従来の技術はフラッシュメモリ上のコピーチャンクマップとオリジナルチャンクマップ及びＲＡＭ上のワーキングチャンクマップが一貫性を保つように複数回のフラッシュメモリに対する書込み／消去演算を行う。例えば、新しい実行時間エラーブロックが発生した場合、次のような演算を必要とする。
１．オリジナルチャンクマップブロック消去演算
２．オリジナルチャンクマップブロックにオリジナルチャンクマップ書込み演算
３．オリジナルチャンクマップの状態を無効（Ｉｎｖａｌｉｄ）にする書込み演算
４．コピーチャンクマップブロック消去演算
５．コピーチャンクマップブロックにコピーチャンクマップ書込み演算
６．オリジナルチャンクマップの状態を有効（Ｖａｌｉｄ）にする書込み演算
【００１０】
すなわち、フラッシュメモリに２回の消去演算と４回の書込み演算を行うようになる。またエラーブロックと余分ブロックとのマッピング情報が複数のチャンクに保存されるので、エラーブロックを処理するために各チャンクをマウントし、各チャンクに存在するチャンクマップ間の一貫性を維持するために複雑なアルゴリズムを行うべきである。したがって、実行時間エラーブロックが発生してもフラッシュ演算の回数を多く必要としない発明が必要である。
【００１１】
最近はフラッシュメモリを単純にデータの保存空間として使用するだけでなく、ＯＳ（Ｏｐｅｒａｔｉｎｇ Ｓｙｓｔｅｍ） ＲＯＭイメージやブートローダー（Ｂｏｏｔ Ｌｏａｄｅｒ）など保護の必要性を有するデータの保存にも用いられている。ＯＳ ＲＯＭイメージやブートローダーのようにシステムの動作に重要な役割をするデータをフラッシュメモリに保存する場合に該当領域をフラッシュメモリ関連ソフトウェアの動作エラーや、ユーザのエラーにより発生しうる消去または書込み演算から保護する必要性がある。すなわち、フラッシュメモリの一定領域を読取り専用領域に設定して管理する必要性がある。一方、読取り専用領域が設定されたフラッシュメモリの場合にもその領域内で発生するか、あるいは発生可能なエラーブロックに代えるための方法が必要であり、この場合にはエラーブロックに代える新しいブロックまた読取り専用ブロックに設定して管理する必要性がある。
【特許文献１】米国特許６，２６０，１５１ Ｂ１
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明の目的は、エラー領域が発生した時に少ないフラッシュ演算の回数でエラー領域を管理できる方法及び装置を提供するところにある。
【００１３】
本発明の他の目的は、フラッシュ関連ソフトウェアの動作エラーがフラッシュメモリの一定領域のデータを変更することを防止するために、フラッシュメモリの一定領域を保護領域として管理する方法及び装置を提供するところにある。
【００１４】
本発明のさらに他の目的は、フラッシュメモリの一定領域が読取り専用として保護されている場合、この領域で発生するエラーブロックに対する管理方法及び装置を提供するところにある。
【課題を解決するための手段】
【００１５】
前記目的を達成するための本発明のフラッシュメモリのエラーブロック管理方法は、（ａ） フラッシュメモリに複数の使用ブロックを有する使用領域と複数の予備ブロックを有する予備領域とを割り当て、前記使用領域または前記予備領域で発生するエラーブロックとこれに代えて使用する予備ブロックとのマッピング情報を保存するブロックマップページを複数含むブロックマップページグループを提供する段階と、（ｂ） 前記ブロックマップページグループのうち所定の規則により選択されたブロックマップページのマッピング情報をメモリに常駐させる段階と、（ｃ） フラッシュ演算中に発生したエラーブロックを前記常駐マッピング情報を通じて探した未使用予備ブロックとマッピングし、前記常駐マッピング情報を更新して前記更新されたマッピング情報を前記ブロックマップページグループに属するブロックマップページに記録する段階と、を含む。
【００１６】
前記（ａ）段階はフラッシュメモリに複数の使用ブロックを有する使用領域と複数の予備ブロックを有する予備領域とを割り当てる（ａ１）段階と、前記生成された予備ブロックと発生するエラーブロックのマッピング情報とを記録するブロックマップフィールドを予備ブロック毎に生成し、前記生成されたブロックマップフィールド、マッピング情報の時点を判断するためのカウントフィールド、及び有効性判断のためのトランジションフィールドを含むブロックマップ情報を初期化させる（ａ２）段階と、フラッシュメモリに存在するエラーブロックを検査して見つけられたエラーブロック及び前記見つけられたエラーブロックに代える予備ブロックとのマッピング情報を前記ブロックマップフィールドに各々記録し、前記カウントフィールドに初期カウントをしてブロックマップ情報を生成する（ａ３）段階と、前記ブロックマップ情報を前記ブロックマップページグループの何れか１つのブロックマップページに記録する（ａ４）段階と、を含む。前記ブロックマップページグループは、少なくとも２つの予備ブロックで構成されることが望ましい。前記フラッシュメモリは、複数のチップよりなる場合に、各段階はそれぞれのチップ毎に行われることが望ましい。また、前記（ａ）段階で前記使用ブロック及び前記予備ブロックのうち少なくとも一部を保護領域に指定して検証されていないソフトウェアの接近を遮断することが望ましい。
【００１７】
前記（ｂ）段階は、ブロックマップページグループ内のブロックマップページのうちから有効でありかつ最も最近に記録されたブロックマップページを検索し、検索されたブロックマップページのマッピング情報をメモリに常駐させる。前記有効でありかつ最も最近に記録されたブロックマップページを検索する時、それぞれのブロックマップページのトランジションフィールドに記録された値及びカウントフィールドに記録された数の大きさを基準として検索することが望ましい。前記ブロックマップページグループ内のブロックマップページのうちから有効でありかつ最も最近のブロックマップページを検索する過程で有効でなく、かつ読取りエラーが表示されたブロックマップページを見つける場合、前記見つけられた読取りエラーブロックを所定の方法で復旧する段階をさらに含むことが望ましい。前記段階はフラッシュメモリが複数のチップよりなる場合に各段階はチップ毎に行われることが望ましい。
【００１８】
前記（ｃ）段階は、前記常駐マッピング情報を用いて未使用予備ブロックを探す（ｃ１）段階と、前記（ｃ１）段階を通じて見つけられた未使用予備ブロックとエラーブロックとの番号をマッピングして前記常駐マッピング情報を更新する（ｃ２）段階と、前記ブロックマップページグループの未使用ブロックマップページを探す（ｃ３）段階と、前記発生したエラーブロックに記録された情報を前記見つけられた未使用予備ブロックに複写する（ｃ４）段階と、前記更新されたマッピング情報を含む情報を前記見つけられた未使用ブロックマップページに記録する（ｃ５）段階と、前記未使用ブロックマップページが有効であることを表示する（ｃ６）段階と、を含む。前記 前記（ｃ）段階は、前記エラーブロックが保護領域で発生した場合に前記保護領域を読取り／書込み可能状態に変更し、前記（ｃ６）段階が終わった後に前記保護領域を再び読取り専用状態に変更する段階をさらに含むことが望ましい。前記各段階は、フラッシュメモリが複数のチップよりなる場合に各段階はチップ毎に行われることが望ましい。
【００１９】
一方、前記（ｃ）段階は、発生したエラーブロックが読取りエラーブロックである否かを判断する（ｃ１）段階と、読取りエラーブロックを復旧するために臨時に使用する予備ブロックを消去する（ｃ２）段階と、読取りエラーブロックのエラーを訂正して前記予備ブロックに複写する（ｃ３）段階と、前記ブロックマップページグループのうち未使用ブロックマップページを探す（ｃ４）段階と、前記見つけられたブロックマップページに前記読取りエラーブロックと前記予備ブロックとのマッピング情報及び読取りエラー復旧状態であることを表示する（ｃ５）段階と、前記読取りエラーブロックを消去する（ｃ６）段階と、前記予備ブロックを前記消去された読取りエラーブロックに複写する（ｃ７）段階と、前記見つけられたブロックマップページに無効であることを表示する（ｃ８）段階と、を含む。前記読取りエラーブロックが保護領域で発生した場合に保護領域を読取り／書込み可能状態に変更し、前記（ｃ８）段階が終わった後に前記保護領域を再び読取り専用状態に変更することが望ましい。
【００２０】
前記目的達成のために本発明に係る少なくとも１つ以上のフラッシュメモリチップよりなるフラッシュメモリのエラーブロック管理装置は、複数の使用ブロックを有する使用領域と使用中に発生するエラーブロックに代えるための複数の予備ブロックを有する予備領域を有し、使用中に発生するエラーブロックとこれに代える予備ブロックとのマッピング情報を保存するブロックマップページを複数有しているブロックマップページグループを前記予備領域内に有しているフラッシュメモリと、前記ブロックマップページグループ内に存在する最近の有効なブロックマップページのマッピング情報と、エラーブロックの発生時にこれを処理するためのプロセスを定義するフラッシュ装置管理子をローディングするためのメモリと、前記フラッシュメモリとメモリに電気的に連結され、フラッシュ装置管理子のコードを読取ってフラッシュメモリに対するフラッシュ演算及びエラーブロック管理をする中央処理装置と、を含む。
【００２１】
前記ブロックマップページグループは少なくとも２つ以上の予備ブロックで構成されたことが望ましい。一方、前記中央処理装置とフラッシュメモリ間に電気的に連結されており、中央処理装置がフラッシュ演算を行う間にフラッシュメモリに次の演算のためのデータを保存しているバッファを２つ以上有しているフラッシュメモリコントローラをさらに含むことが望ましい。前記フラッシュメモリコントローラは、フラッシュメモリの一定領域を保護領域に設定して前記フラッシュ装置管理子により検証されたフラッシュアプリケーションに対してのみ保護領域に対するフラッシュ演算を許容し、検証されていないフラッシュアプリケーションに対しては保護領域に対するフラッシュ演算を許容しないことが望ましい。
【００２２】
前記フラッシュメモリが複数のフラッシュメモリチップよりなる場合に前記フラッシュメモリの使用領域、予備領域と前記予備領域内のブロックマップページグループは各フラッシュメモリチップ毎に存在することが望ましい。
【発明の効果】
【００２３】
本発明によれば、フラッシュメモリの使用中にエラーブロックが生じた場合に少ないフラッシュメモリ演算回数でエラーブロックを管理できてシステム性能を従来の発明と違って向上させうる。また、読取り専用に設定された領域（保護領域）があるフラッシュメモリの保護領域で発生したエラーブロックに代えて割当てられる新しい領域も読取り専用に設定できて変更する必要のない重要なデータを安全に管理できる方法を提供する。
【発明を実施するための最良の形態】
【００２４】
以下、添付図面に基づいて本発明に係る望ましい実施例を詳細に説明する。
【００２５】
図３は、本発明を具現するシステムの一実施例を示し、図４はシステムの動作を示す。システムはフラッシュメモリ１００、フラッシュメモリコントローラ２００、中央処理装置３００、及びＸＩＰ（Ｅｘｅｃｕｔｅ−Ｉｎ−Ｐｌａｃｅ）可能なメモリ４００を含む。ＸＩＰ可能なメモリ４００とは、ＲＡＭのようにその中でソフトウェアを実行させうるメモリ（以下、”主メモリ”という）を意味する。
【００２６】
中央処理装置３００は主メモリ４００に常駐したフラッシュアプリケーション４１０及びフラッシュ装置管理子４２０を用いてフラッシュメモリ１００に必要な情報を書込み、読取り及び消去でき（以下、”フラッシュ演算”という）、消去演算はブロック単位で行わねばならない。
【００２７】
図３のようにフラッシュメモリコントローラ２００が存在するシステムでは、フラッシュアプリケーション４１０は常にフラッシュメモリコントローラ２００を通じてフラッシュメモリ１００に接近する。現在フラッシュメモリ１００は読取り演算の速度に比べて書込み演算の速度が約２０倍ないし１０００倍遅く、フラッシュメモリコントローラ２００は書込みまたは読取り演算の速度を向上させうるが、このためにフラッシュメモリコントローラ２００の内部に書込みまたは読取り演算のためのバッファを２つ以上備える。そして、中央処理装置３００がフラッシュメモリコントローラ２００のバッファにデータを入力または出力する間にフラッシュメモリコントローラ２００は他のバッファのデータをフラッシュメモリ１００に出力または入力することによって、フラッシュメモリコントローラ２００は中央処理装置３００からフラッシュメモリ１００へのデータ入出力速度を向上させうる。
【００２８】
フラッシュアプリケーション４１０がフラッシュメモリ１００を利用するために、フラッシュメモリコントローラ２００に接近する時、フラッシュメモリコントローラ２００はフラッシュメモリを一部領域を読取り専用領域に設定し、フラッシュアプリケーション４１０のフラッシュ演算エラーからデータを保護しうる。読取り専用領域の使用のためにフラッシュメモリコントローラ２００は検証されたフラッシュアプリケーション４１２であることを認証し、認証を通過した検証されたフラッシュアプリケーション４１２だけがフラッシュメモリ１００の読取り専用領域に接近して書込み及び消去演算を行え、認証を受けていない非検証されたフラッシュアプリケーション４１４はフラッシュメモリ１００の読取り専用領域への接近によって書込み及び消去演算を不可能にしてフラッシュ演算エラーからデータを保護しうる。
【００２９】
ＮＡＮＤフラッシュメモリのようなＩ／Ｏバスインターフェースを通じて制御しうるフラッシュメモリは一般的に中央処理装置３００のメモリバスインターフェースへの連結または制御が容易ではない。従って、フラッシュメモリコントローラ２００はＩ／Ｏバスインターフェースを有するフラッシュメモリ１００と中央処理装置３００との間に位置して相異なるバスインターフェースの連結を助けることによって、容易にフラッシュメモリ１００を使用可能にする。フラッシュメモリコントローラ２００はフラッシュメモリ１００の一定領域を読取り専用領域にするか、フラッシュ演算性能を向上させるなどの多様な機能を提供するが、フラッシュメモリコントローラ２００を除いた中央処理装置３００と主メモリ４００及びフラッシュメモリ１００だけでもシステムを具現しうる。
【００３０】
主メモリ４００にはフラッシュ装置管理子４２０とフラッシュアプリケーション４１０とが常駐しうる。フラッシュ装置管理子４２０はフラッシュアプリケーション４１０がフラッシュメモリ１００使用中に発生したエラーブロックを管理するあらゆるプロセスを定義するソフトウェアとして具現したモジュールであって、主メモリ４００に常駐し、中央処理装置３００がフラッシュ装置管理子４２０のコードを実行させることによってエラーブロックを管理する。フラッシュアプリケーション４１０は検証されたフラッシュアプリケーション４１２と非検証されたフラッシュアプリケーション４１４とに分けられる。検証されたフラッシュアプリケーション４１２はフラッシュ装置管理子４２０を使用する上位階層であり、フラッシュメモリのデータを故意的に破壊する動作エラーを起こさないフラッシュアプリケーション４１０であり、ブートローダー、フラッシュトランスレーションレイヤー、ファイルシステムなどになりうる。非検証されたフラッシュアプリケーション４１４はシステムを非正常的に動作させるためにクラッカー等によって作られたウイルスプログラムやハッキングプログラムなどになり得、フラッシュメモリのデータを故意的に破壊する動作エラーを起こすフラッシュアプリケーション４１０である。フラッシュ装置管理子４２０は検証されたフラッシュアプリケーション４１２がフラッシュメモリ１００を使用可能にする。
【００３１】
図４は、フラッシュアプリケーション４１２、フラッシュ装置管理子４２０とフラッシュメモリコントロール２００間に半物理アドレスと物理アドレスに関する関連関係を示す。検証されたフラッシュアプリケーション４１２はフラッシュ装置管理子４２０に半物理アドレスでフラッシュ演算を要請し、フラッシュ装置管理子４２０は半物理アドレスを物理アドレスに変換してフラッシュメモリコントローラ１００にフラッシュ演算を行う。半物理アドレス及び物理アドレスは、ブロック番号＊ブロックの大きさ＋ブロックのオフセットで表現されうる。ブロックのオフセットは０より大きいか同じであり、ブロックの大きさより小さい値である。
【００３２】
半物理アドレスでブロック番号は常に使用領域１１０の予備ブロック番号のうち１つである。しかし、物理アドレスの場合、ブロック番号は使用領域１２０の使用ブロックがエラーブロックである場合、予備領域の予備ブロック番号のうち１つとなる。大部分の場合において半物理アドレスと物理アドレスとは同一であり、予備ブロックがエラーブロックである場合にのみ異なる。
【００３３】
一方、非検証されたフラッシュアプリケーション４１４はフラッシュ装置管理子４２０を通じず、フラッシュメモリコントローラ２００に接近する場合が発生することもあるが、フラッシュメモリコントローラ２００に検証されたフラッシュアプリケーション４１２であることを認証し、非検証されたフラッシュアプリケーション４１４が保護領域１３０にフラッシュ演算を行う場合に認証されていないためにフラッシュ演算は許容されない。
【００３４】
図５は、ｋ＋１個のフラッシュメモリチップで具現したフラッシュメモリのブロック図である。フラッシュメモリ１００はｋ＋１個のフラッシュメモリチップとして具現できるが、各メモリチップは使用領域１１０とエラーブロックを管理するための予備領域１２０とを有しうる。もちろん、本発明ではエラーブロックを管理するための予備領域を特定チップ、例えばチップ０、チップ１、チップ２に集中的に設けても良い。望ましい実施例において、各チップに予備領域１２０を設けることによってフラッシュ演算のために常にエラーブロックの有無を検査せねばならない範囲を１つのチップに限定することによって、フラッシュ演算の性能を高めうる。予備領域１２０の大きさは各チップから発生可能な最大エラーブロック数とエラーブロックを管理するために必要なブロック数との和で決定される。予備領域１２０で必要なブロックの数を決定する方法は後述する。
【００３５】
図６は、ｔ個の使用領域のパーティションと１つの予備領域のパーティションとに分けられたフラッシュメモリチップを示すブロック図である。フラッシュメモリにブートローダーＲＯＭイメージ、ＯＳ ＲＯＭイメージ、またはファイルシステムデータなどを保存するのに当たって、それぞれの用途のためにフラッシュメモリに領域を区分して割り当てられ、このように区分された領域をパーティションという。各パーティションは、パーティション管理ソフトウェアがあり、各パーティション管理ソフトウェアは自体パーティションで発生可能なエラーブロックをフラッシュ装置管理子４２０を通じて包括的に管理する。パーティション管理ソフトウェアは検証されたフラッシュアプリケーション４１２であり、ブートローダー、ＯＳ、ファイルシステムなどになりうる。使用領域１１０は該当チップの最下位アドレスから割り当てられ、予備領域１２０は使用領域１１０が使用していない所に割り当てられるが、この順序は変わりうる。この際、使用領域１１０はｔ個のパーティションに分けられるが、パーティションの数ｔ及び大きさはフラッシュメモリに保存される情報の種類と量によって決定される。
【００３６】
図７は、非保護領域と保護領域とを全て含むフラッシュメモリの何れか１つのチップの構造を示すブロック図である。フラッシュメモリ１００自体でまたはフラッシュメモリコントローラ２００がフラッシュメモリの一定領域を読取り専用領域（保護領域）に設定できるならば、図７のような構造で該当チップの使用領域１１０と予備領域１２０は保護領域１３０と非保護領域１４０とに分けられる。保護領域１３０は検証されたフラッシュアプリケーション４１２にのみフラッシュ演算が許容され、非検証フラッシュアプリケーション４１４はフラッシュ演算は許容されないか、読取り演算だけ可能である。すなわち、ＯＳ ＲＯＭイメージやブートローダーのように特別に保護されるべきデータが記録される領域であると言える。フラッシュアプリケーションが保護領域１３０に接近する時は常にフラッシュアプリケーションの認証段階を経なければならない。フラッシュアプリケーションが検証されたフラッシュアプリケーションであるか否かを判断できる認証方法は認証のための特定コードの有無で判断できる。すなわち、特定コードがあるフラッシュアプリケーションに対してフラッシュ装置管理子４２０はフラッシュメモリコントローラ２００にフラッシュアプリケーションの接近許容を要請しうる。しかし、このような方法以外にも認証方法は他の多様な方法で具現しうる。非保護領域１４０はフラッシュアプリケーション４１０が読取り、書込み及び消去が何れも可能な領域をいう。図７において、非保護領域１４０は使用領域１１０と予備領域１２０とに亙っている形に具現した。保護使用領域は最下位アドレスから割当てられ、その上に非保護使用領域、非保護予備領域、及び保護予備領域が順次に割当てられる。しかし、この順序は変わりうる。
【００３７】
図８は、全ての領域が非保護領域よりなるフラッシュメモリの何れか１つのチップの構造を示すブロック図である。もし、ＯＳ ＲＯＭイメージやブートローダーのように特別に保護されねばならないデータがない場合であれば、全ての領域を非保護領域１４０に設定して使用しても良い。かかる場合にあらゆるパーティションに対してフラッシュ演算が可能である。
【００３８】
図９は、ｙ個のブロックよりなる１つのパーティションの構造を示すブロック図である。ブロックはフラッシュメモリで消去演算の単位であって、何れかのブロックに１つのビットでもエラーが生じれば、該当ブロックはエラーブロックになる。このようなエラーブロックは使用領域１１０でも発生し、あるいは予備領域１２０でも発生しうる。
【００３９】
図１０は、非保護領域と保護領域とを共に含む予備領域の構造を示すブロック図である。図１０の予備領域１２０は、非保護領域１４０のエラーブロックに代えるためのｍ個の予備ブロック１５４と保護領域１３０のエラーブロックに代えるためのｎ個の予備ブロック１５５とを含んで合計ｍ＋ｎ個の予備ブロックと、使用領域１１０または予備領域１２０のエラーブロックとこれに代えるための非保護または保護予備ブロック１５４または１５５をマッピングする情報を含んでいる非保護または保護ブロックマップページグループ１５０または１５８と、読取り領域のエラーを処理するために指定した１つの予備ブロックであるトランスファブロック１５２、及びパーティション情報を含んでいるパーティション情報ブロック１５６を含んでいる。前記ｎとｍとの大きさは固定することもあるが、変更可能に具現しうる。例えば、合計ｍ＋ｎ＝１００である時、保護ブロックでエラーが発生しない間に１００回連続して非保護ブロックでエラーが発生した場合にｍ＝１００、ｎ＝０になりうる。
【００４０】
ブロックマップページグループは、使用領域１１０及び予備領域１２０内の非保護領域１４０のエラーブロックとこれに代える予備ブロック１５４とのマッピング情報を含んでいる非保護ブロックマップページグループ１５０と、使用領域１１０及び予備領域１２０内の保護領域１３０のエラーブロックとこれに代える予備ブロック１５５とのマッピング情報を含んでいる保護ブロックマップページグループ１５８を含む概念として使用する。非保護ブロックマップページグループ１５０及び保護ブロックマップページグループ１５８は各々２つのブロックで構成されることが望ましく、これについては後述する。一方、非保護ブロックマップページグループ１５０と保護ブロックマップページグループ１５８とを区別せず、１つのブロックマップページグループとして使用しても良いが、この場合にもブロックマップページグループは２つのブロックで構成されることが望ましい。
【００４１】
パーティション情報ブロック１５６はチップのパーティションに関する情報を含んでいるブロックであって、パーティションに対する情報をフラッシュメモリに保存しなければ、パーティション情報ブロック１５６は予備領域１２０に割当てられない。
【００４２】
トランスファブロック１５２は読取りエラーが発生したブロックを回復するために使用するブロックである。フラッシュメモリで読取りエラーが発生した場合に消去演算を行ってから再使用可能な場合があるので、読取りエラーが発生したブロックを再使用するためにトランスファブロックを使用しうる。もし、読取りエラーを書込みエラー及び消去エラーと同一に取扱ってエラーブロックを予備ブロックに代える場合にトランスファブロック１５２は不要である。
【００４３】
ブロックマップページグループ１５０または１５８、トランスファブロック１５２及びパーティション情報ブロック１５６はエラーブロックでない正常ブロックに割当てられねばならない。現在商用化されたフラッシュメモリの消去演算可能回数は約１０，０００ないし１００，０００であり、フラッシュチップの総ブロック数は約１０，０００未満である。そして、フラッシュメモリの使用中に発生可能なエラーブロックの数はフラッシュチップの総ブロック数の数パーセントである。エラーブロックが発生する時、ブロックマップページグループ１５０または１５８、あるいはトランスファブロック１５２に消去演算を行えるが、この時、消去演算の総回数はフラッシュメモリで発生可能なエラーブロックの数と同じか、少ないと言える。このためにブロックマップページグループ１５０または１５８、あるいはトランスファブロック１５２のために割当てられたブロックがエラーブロックになる確率はきわめて小さく、したがってブロックマップページグループ１５０または１５８やトランスファブロック１５２あるいはパーティション情報ブロック１５６のエラーに対する対応としては最初にエラーブロックでない正常ブロックとして割り当てることだけで十分である。
【００４４】
図１１は、全領域が非保護領域よりなる予備領域の構造を示すブロック図である。この際、ｎは０になり、ｍはフラッシュメモリを使用する間に発生してもフラッシュメモリの性能が保証される最大エラーブロックの数と同じである。
【００４５】
図１２は、全領域が保護領域１３０よりなる予備領域１２０の構造を示すブロック図である。図１２では使用領域１１０も保護領域１３０である。この際、ｍは０になり、ｎはフラッシュメモリを使用する間に発生してもフラッシュメモリの性能が保証される最大エラーブロックの数と同じである。
【００４６】
図１３は、ブロックマップページグループ１５０または１５８構造の詳細ブロック図である。ブロックマップページグループはｑ個のブロックマップページ１６０で構成されており、各ブロックマップページ１６０はエラーブロック番号１６６とこれに代える予備ブロック番号１６７とで構成されるブロックマップフィールド１６１を予備ブロック１５４または１５５の数と同じｍ＋ｎ個を有する。すなわち、１つのブロックマップページ１６０はエラーブロックとこれに代える予備ブロックとのマッピング情報を何れも含む。また、ブロックマップページ１６０は最も最近に書込まれたブロックマップページを探すのに用いられるカウントフィールド１６３と、自体のブロックマップフィールド情報１６１が有効か、無効か、それとも使用されていないかを区別可能にするトランジションフィールド１６５も含む。最も最近に書込まれたブロックマップページ１６０はトランジションフィールド１６５に有効表示を有するブロックマップページ１６０のうちカウントフィールド１６３に最大数が書込まれたものであって、これを主メモリ、例えばＲＡＭに書込んだものをブロックマップ情報１７０という。ブロックマップ情報１７０を通じたブロックマップページグループの更新は後述する。一方、本発明の望ましい実施例においてエラーブロック番号１６６と予備ブロック番号１６７とは何れも２バイトを有するが、これは現在商用化されたフラッシュメモリの総ブロック数は１０，０００未満である。したがって、２バイトは０ないし６５５３５までの数を有しうるので、それ位ならば十分な量であるからである。また、発明の望ましい実施例においてカウントフィールド１６３は２バイトを有するが、現在商用化されたフラッシュメモリの総ブロック数は１０，０００未満であり、フラッシュメモリの使用中に発生可能なエラーブロックの数はフラッシュチップの総ブロック数の数パーセントである。したがって、２バイトは０ないし６５，５３５までの数を有しうるので、それ位ならば十分な量であるからである。
【００４７】
図３の主メモリ４００にあるフラッシュアプリケーションのうちに検証されたフラッシュアプリケーション４１２は使用領域１１０の特定の使用ブロックに接近するためにフラッシュ装置管理子４２０に半物理アドレスを送り、フラッシュ装置管理子４２０は半物理アドレスに合う物理アドレスを有するブロックを探す。この際、エラーブロックを使用しないようにするために最も最近のエラーブロック情報を含んでいるブロックページ１６０のブロックマップ情報１７０に登録されたブロックマップフィールド１６１のうち使用ブロック番号がエラーブロックナンバー１６６と一致すればこれに代える予備ブロック１６７を使用する。
【００４８】
図１４は、フラッシュメモリに対するフラッシュ装置管理子の動作プロセスを示すフローチャートであり、図１５及び図１６は予備領域フォーマットプロセスをより詳細に示すフローチャートであり、図１７ないし図１９はブロックマップ情報のＲＡＭ常駐プロセスをより詳細に示すフローチャートであり、図２０ないし図２２はエラーブロック処理プロセスをより詳細に示すフローチャートである。
【００４９】
まずフラッシュメモリの全領域を読取り／書込み可能に設定（Ｓ９０）した後、各チップを使用領域と予備領域とに分け、予備領域にブロックマップページグループを作るプロセス、すなわち予備領域をフォーマットするが（Ｓ１００）、前記Ｓ９０及びＳ１００は最初の１回時にのみ必要なプロセスである。予備領域フォーマット（Ｓ１００）の動作は図１５及び図１６を参照して説明する。
【００５０】
予備領域のフォーマット（Ｓ１００）はフラッシュチップ番号ｔを０に初期化する（Ｓ１１０）。そして、チップｔ（ｔ＝０）の予備領域フォーマット（Ｓ１３０）を実行した後、最後のチップであるかを検査する（Ｓ１７０）。最後のチップでなければ、フラッシュチップ番号ｔを１増加させ（Ｓ１２０）、次のチップに対するフォーマットを実行する。そして、あらゆるチップに対するフォーマットが終了すれば、予備領域フォーマットが終了される。
【００５１】
チップｔの予備領域をフォーマット（Ｓ１３０）するためには、まずチップの一定部分は使用領域として割り当て、一定領域はフラッシュメモリの使用中に発生するエラーブロックに対する対策としてチップｔの予備領域に割り当てる（Ｓ１３２）。予備領域のために割り当てるべきブロックの数はフラッシュメモリの使用中に発生可能な最大のエラーブロックの数と発生するエラーブロックを管理するためのブロックの数との和として求められる。前者に割当てられたブロックは予備ブロックのグループであり、後者に割当てられたブロックはブロックマップページグループであって、トランスファブロック及びパーティション情報ブロックがこれに該当する。エラーブロックを管理するためのブロックの数は次のように割り当てられる。まずチップを保護領域と非保護領域とに分けて使用する場合に保護ブロックマップページグループと非保護ブロックマップページグループとのために各々２つのブロックを割り当て、チップを非保護領域だけで使用する場合には非保護ブロックマップページグループのための２つのブロックだけを割り当てる。各ブロックマップページグループに２つのブロックを割り当てる理由は後述する。
【００５２】
パーティション情報をチップに保存しようとする場合にはパーティション情報ブロックを１ブロック割り当てる。また、読取りエラーが発生したブロックを予備ブロックに代えず、再使用可能にするのに必要なトランスファブロックも１ブロックを割り当てる。これを表で整理すれば次の通りである。
【００５３】
【表１】
2004310770.tif 000003
【００５４】
チップｔの予備領域割当（Ｓ１３２）が終了すれば、チップｔのブロックマップ情報を初期化する（Ｓ１３４）。各チップのブロックマップ情報は平常時には図１の主メモリ４００に常駐するフラッシュ装置管理子に含まれた情報として原則的に各チップのブロックマップページグループに保存されている最も最近のブロックマップページと同じ情報を有する。まず、フラッシュメモリを使用する時はブロックマップ情報生成のためにブロックマップ情報を初期化しなければならない。チップｔのブロックマップ情報の初期化（Ｓ１３４）はブロックマップ情報の大きさを決定し、各フィールドを特定値として初期化することを意味する。ブロックマップ情報の大きさは、トランジションフィールド１６５の大きさ＋カウントフィールド１６３の大きさ＋ブロックマップフィールド１つの大きさ＊予備ブロックの数と決められる。各フィールドの初期値を見れば、トランジションフィールド１６５は有効表示を有し、カウントフィールド１６３は最初に記録されるブロックマップ情報という意味で１を有する。そして、ブロックマップフィールド１６１のエラーブロック番号１６６と予備ブロック番号１６７は次のように初期化する。エラーブロック番号１６６と予備ブロック番号１６７で表現できる最大値を各ブロックマップフィールド１６１のエラーブロック番号１６６と予備ブロック番号１６７に記録することによって、あらゆるブロックマップフィールド１６１を未使用ブロックマップフィールドに作る。本発明でエラーブロック番号１６６と予備ブロック番号１６７を記録するための空間の望ましい実施例は２バイトであるが、これは現在商用化されたフラッシュメモリの総ブロック数が１０，０００未満であるためである。すなわち、各ブロック番号１６６または１６７が有しうる最大値は６５５３５であり、６５５３５は未使用ブロックの数を示すのに十分である。
【００５５】
チップｔのブロックマップ情報が初期化されれば（Ｓ１３４）、これに基づいてチップｔのブロックマップ情報を生成する（Ｓ１３６）。ブロックマップ情報を生成しようとするならチップｔで使用領域１１０の最下位アドレスから最上位アドレスまでエラーブロックの存在有無を検査する。エラーブロックが見つけられれば、チップｔのブロックマップフィールドで未使用ブロックマップフィールドを探し、前記探した未使用ブロックマップフィールドのエラーブロック番号１６６と予備ブロック番号１６７に見つけられたエラーブロックとこれに代える予備ブロックの番号を書込む。未使用ブロックマップフィールドを探す時はブロックマップフィールド１ １６１からブロックマップフィールドｍ＋ｎ １６１まで順次に検査して最初に見つけられた未使用ブロックマップフィールドを取ることが望ましい。
【００５６】
一方、フラッシュメモリを保護領域と非保護領域とに分けて使用する場合にそれぞれのブロックマップ情報（保護ブロックマップ情報と非保護ブロックマップ情報）を生成することもできるが、１つのブロックマップ情報として生成することもできる。もちろん保護領域と非保護領域とに分けても、ブロックマップページグループを１つに統合して使用する場合にはブロックマップ情報を１つに生成しうる。
【００５７】
最後に生成されたブロックマップ情報をチップｔの予備領域のブロックマップページグループに記録する（Ｓ１３８）。記録方法はブロックマップページグループに属するあらゆるブロックに消去演算を行い、最下位アドレスのブロックマップページにチップｔのブロックマップ情報を記録すれば良い。
【００５８】
予備領域フォーマットが完了されれば（Ｓ１００）、ブロックマップ情報を主メモリに常駐させる（Ｓ２００）。初めてフラッシュメモリを使用する場合でなければ、各チップのブロックマップ情報は最も最近に記録された各チップのブロックマップページと同じ情報を有するように各チップで最新のブロックマップページを検索して常駐させる（Ｓ２００）。
【００５９】
ブロックマップ情報を主メモリに常駐させる方法は、図１７ないし図１９を参照して説明する。まずフラッシュチップ番号ｔを０に初期化させる（Ｓ２１０）。そして、チップｔの最新ブロックマップ情報を主メモリに常駐させた後（Ｓ２３０）、該当チップが最後のチップであるか否かを検査し（Ｓ２７０）、最後のチップでなければ、フラッシュチップ番号ｔを１増加させる方式で最後のチップに対するブロックマップ情報を主メモリに常駐させるまで前記過程を繰り返す。
【００６０】
チップｔのブロックマップ情報を主メモリに常駐させる過程（Ｓ２３０）を説明すれば、まずチップｔのブロックマップ情報のカウントフィールドに０を記録し、カウントフィールドを初期化する（Ｓ２３２）。そしてチップｔのブロックマップページグループから最初のブロックマップページを読取る（Ｓ２３４）。読取ったブロックマップページの有効性を検査し（Ｓ２３８）、有効なブロックマップページであれば、チップｔのブロックマップ情報のカウントと読取ったブロックマップページのカウントとを比較する（Ｓ２４０）。チップｔのブロックマップ情報のカウントが小さければ、読取ったブロックマップページの情報がチップｔのブロックマップ情報よりさらに最近の情報ということを意味するので、ブロックマップページをチップｔのブロックマップ情報にコピーして最近の情報に更新する（Ｓ２４２）。読取ったブロックマップページが最後のブロックマップページであれば（Ｓ２４４）、チップｔのブロックマップ情報に保存された情報が最も最新のブロックマップページを含んでいるので主メモリに常駐させる。読取ったブロックマップページが最後のブロックマップページでなければ、さらに最新のブロックマップページの存否を探すためにチップｔの次のブロックマップページを読取る（Ｓ２３６）。次いで、前記説明した過程を繰り返す。チップｔの有効ブロックマップページであるか否かを検査する段階（Ｓ２３８）で有効ページでなければ、これを無視してチップｔの次のブロックウェブページを読取って（Ｓ２３６）、前記説明した過程を繰り返す。読取りエラーを書込みエラーや消去エラーと別途に取扱うならば、読取りエラーを処理するためのプロセス（Ｓ２４６、Ｓ２５０、Ｓ２６０）が追加される。有効ブロックマップページ検査で（Ｓ２３８）、読取りエラー復旧中のマークが表示されたブロックマップページであれば（Ｓ２４６）、読取りエラーを復旧し（Ｓ２５０）、ブロックマップページに読取りエラー表示を無效化する（Ｓ２６０）。そして、再び次のブロックマップページを読取る（Ｓ２３６）。一方、有効ブロックマップページでもなく、読取りエラーでもない場合には有効でないブロックマップページであるために、次のブロックマップページを読取る。次のブロックマップページを読取り（Ｓ２３６）、再び前記Ｓ２３８からＳ２４４の過程を繰り返す。読取りエラーの復旧のより詳細な過程は図１９を参照して説明する。まずチップｔの読取りエラーブロックを消す（Ｓ２５２）。ブロックマップ情報を主メモリに常駐させる過程で見つけられる読取りエラーは、以前の読取りエラー復旧中を表示した段階以後に復旧作業中に突然に電源が遮断される場合に再び電源が入る時に見つけられる。読取りエラーブロックを消去した後（Ｓ２５２）、チップｔのトランスファブロックを読取りエラーブロックにコピーし（ｓ２５４）、チップｔの前記見つけられたブロックマップページに無効マークを書込む（Ｓ２５６）。次いで、チップｔの保護領域を読取り専用状態に変更する（Ｓ２５８）。
【００６１】
ブロックマップ情報が主メモリに常駐すれば（Ｓ２００）、フラッシュメモリの保護領域を読取り専用に設定する（Ｓ２８０）。そして、フラッシュ演算可能な準備状態となる（Ｓ３００）。図３の主メモリ４００のフラッシュアプリケーション４１０は使用領域の特定アドレスをフラッシュ演算するためには、フラッシュ装置管理子に半物理アドレスを渡し、フラッシュ装置管理子は該当半物理アドレスに基づいて物理アドレスを生成する（Ｓ４００）。物理的アドレスを探せば（Ｓ４００）、フラッシュ演算を行う（Ｓ５００）。フラッシュ演算途中でエラーブロックが見つけられれば該当半物理アドレスをエラーブロックでない、予備ブロックを使用できるようにマッピング情報を登録してエラーを修正する作業を行う（Ｓ６００）。エラーブロックを処理する過程は、図２０ないし図２２を参照すれば次の通りである。もし、読取りエラーブロックを書込みまたは消去エラーブロックと異なって取扱うならば、チップｔのエラーブロックが読取りエラーブロックであるか否かを検査し（Ｓ６１０）、読取りエラーブロックである場合にチップｔの読取りエラーブロック処理（Ｓ６２０）を行い、そうでない場合には書込み／消去エラーブロック処理（Ｓ６６０）を行う。読取りエラーブロックを書込みまたは消去エラーブロックと同一に取扱う場合にはあらゆるエラーブロックに対してチップｔの書込み／消去エラーブロック処理（Ｓ６６０）を行う。
【００６２】
まず図２１を参照してチップｔの読取りエラーブロック処理（Ｓ６２０）を見れば、まずチップｔの保護領域を読取り／書込み状態に変更する（Ｓ６２２）。次いで、チップｔのトランスファブロックを消去した（Ｓ６２４）後、チップｔの読取りエラーブロックのエラーを訂正してチップｔのトランスファブロックにコピーする（Ｓ６２６）。一定ビット以下のエラーに対してはエラー訂正コードでエラーを訂正しうる。この際、チップｔの未使用ブロックマップページを探すが（Ｓ６２８）、もし未使用ブロックマップページがなければ、最も最新のブロックマップページが含まれたブロックでないブロックに消去演算を行う。そして、ブロックマップ情報のカウントフィールドに１を加算した後、前記消去されたブロックの最下位アドレスの未使用ブロックマップページに前記チップｔのブロックマップ情報を記録し、前記ブロックマップページに有効マークを書込む。そして、前記ブロックマップページの上位ブロックマップページのうちから未使用ブロックマップページを探せる。前記見つけられたブロックマップページのトランジションフィールドを読取りエラー復旧中状態にしてブロックマップフィールド１のエラーブロック番号に読取りエラーブロック番号をブロックマップフィールド１の予備ブロック番号にトランスファブロック番号を記録し（Ｓ６３０）、前記見つけられたブロックマップページに有効マークを書込む（Ｓ６３２）。そして、チップｔの読取りエラーブロックを消去した後（Ｓ６３４）、チップｔのトランスファブロックを読取りエラーブロックにコピーし（Ｓ６３６）、チップｔの前記見つけられたブロックマップページに無効マークを書込む（Ｓ６３８）。その際、チップｔの保護領域を読取り専用状態に変更する（Ｓ６４０）。
【００６３】
読取りエラー復旧中を表示するＳ６３０段階はＳ６３２段階以後に復旧作業中突然に電源が遮断される場合に備えたものである。最後の無効マークを書き込むことは、既に読取りエラーブロックは以後には正常に使用できるために読取りエラーブロックがチェックされたブロックマップページを無効マークすることである。図１８の有効ブロックマップページ検査で（Ｓ２３８）、読取りエラー復旧中マークが表示されたブロックマップページであれば（Ｓ２４６）、前記ブロックマップページのブロックマップフィールド１に含まれたエラーブロック番号１６６から読取りエラーブロック番号を得て前記Ｓ６３２、Ｓ６３４、Ｓ６３６、Ｓ６３８の段階を経て読取りエラーを復旧する。読取りエラーは主に保護領域で発生したことについて説明したが、もし非保護領域で読取りエラーが発生した場合にもＳ６２２及びＳ６４０を除いて残りの段階を同一に行って読取りエラーブロックを処理しうる。
【００６４】
次いで、図２２を参照してチップｔの書込み／消去エラーブロック処理（Ｓ６６０）でまずチップｔの未使用予備ブロックを探す（Ｓ６６２）。未使用予備ブロックはチップｔのブロックマップ情報を用いて探すことができ、それは次の通りである。
【００６５】
エラーブロックがチップｔの保護領域で発生した場合、チップｔのブロックマップ情報に登録されているブロックマップフィールドのうち既に発生したエラーブロックに対して予備ブロックがマッピングされているエラーブロック番号１６６を参照して未使用予備ブロックを探す。望ましい実施例において、既に発生したエラーブロックに対して予備ブロックがマッピングされている場合に最も大きい番号を有する予備ブロックから順次に未使用予備ブロックを探す。エラーブロックがチップｔの非保護領域で発生した場合、チップｔのブロックマップ情報に登録されているブロックマップフィールドのうち既に発生したエラーブロックに対して予備ブロックがマッピングされているエラーブロック番号１６６を参照して未使用予備ブロックを探す。望ましい実施例において既に発生したエラーブロックに対して予備ブロックがマッピングされている場合に最も大きい番号を有する予備ブロックから順次に未使用予備ブロックを探す。前記のような方式で未使用予備ブロックを探す場合には保護領域及び非保護領域の予備ブロックの数を予め割り当てずに発生するエラーブロックに合わせて使用しうる長所がある。
【００６６】
未使用予備ブロックを探せば（Ｓ６６２）、チップｔのブロックマップ情報でチップｔの未使用ブロックマップフィールドを探す（Ｓ６６４）。前記Ｓ６６２及びＳ６６４はブロックマップ情報に基づいて探す。次いで、ブロックマップ情報を更新する（Ｓ６６６）。ブロックマップ情報の更新はブロックマップ情報にある見つけられた予備ブロックをマッピングするように予備ブロックとエラーブロックとの番号を書込む。ブロックマップ情報を更新した後にブロックマップページグループで使用できるブロックマップページを探し（Ｓ６６８）、エラーブロックが保護領域に含まれているか否かを検査した後（Ｓ６７０）、エラーブロックが保護領域に含まれているならば、チップｔの予備領域の保護領域を読取り／書込み状態に変更する（Ｓ６７２）。しかし、見つけられた未使用予備ブロックが読取り／書込み可能な非保護領域の予備ブロックである場合には前記Ｓ６７２段階は不要である。ここで、未使用ブロックマップページとは、最も最新の情報を含んでいるブロックマップページを除いたブロックマップページのうち何れか１つのブロックマップページを意味する。そして、チップｔのエラーブロックを未使用チップｔの予備ブロックにコピーする（Ｓ６７４）。次いで、チップｔの未使用ブロックマップページにチップｔのブロックマップ情報を書込み（Ｓ６７６）、チップｔの未使用ブロックマップページに有効マークを書込む（Ｓ６７８）。最後に、チップｔの予備領域の保護領域を読取り専用状態に変更する（Ｓ６８０）。エラーブロックを予備ブロックに代えたフラッシュメモリはエラーブロックが存在していないように使用できる。前記Ｓ６６８段階に用いられるブロックマップページを探す方法は、ブロックマップページのトランジションフィールドを使用して有効如何を判断し、有効なものうちカウントフィールドの数が最も大きなものをブロックマップページと判断する。Ｓ６７６段階で空いているブロックマップページにブロックマップ情報を記載するが、この際既存に保存されたブロックマップページのうち最も大きなカウントより１だけ大きいカウントをカウントフィールドに書込む。もし、空いているブロックマップページがなければ、他のブロックマップページを探して書込むが、そこも満ちている状態であれば、最新のブロックマップページのあるブロックでないブロックに対して消去演算をして記録すれば良い。
【００６７】
例えば、１０個のブロックマップページを有しているＡブロックとＢブロックとがあるとしよう。ブロックマップページを使用する順序は最下位アドレスから最上位アドレスに使用するとする時、Ａブロックのブロックマップページを全て使用した場合にはＢブロックのブロックマップページを使用する。この際、それぞれのブロックマップページは生成当時のマッピング情報を有しているので、Ａブロック及びＢブロックは一種のマッピング情報ヒストリーブロックの役割をする。したがって、Ａブロックを全て使用してＢブロックの最後のブロックマップページまで使用した場合に新たなエラーブロックが発生すればＡブロックを消し、そこに新しいマッピング情報を含むブロックマップページを作る。この時、もしシステムの誤作動や電源が遮断されても、少なくとも現在のマッピング情報を除いた最も最近のマッピング情報Ｂブロックに存在するので、フラッシュメモリを容易に使用しうる。今後、現在エラーブロックに対してフラッシュ演算をしようとすれば、その時エラーブロックに対して新たに予備ブロックをマッピングし、そのマッピング情報を含んでブロックマップページを作れば良い。
【００６８】
一方、ブロックマップページグループが１つのブロックよりなっていれば、空いているブロックマップページがない時、ブロックマップページグループを消し、再び最初から書込みできるが、もしブロックマップページを消す時、システムの誤動作や電源が切れる場合に既存のマッピング情報は消える。したがって、２つ以上のブロックを有することが望ましく、２つのブロックを有することが最も望ましい。
【００６９】
本発明が属する技術分野の当業者は本発明がその技術的思想や必須的な特徴を変更せず、他の具体的な形に実施されうるということを理解できるであろう。例えば、以上の実施例ではそれぞれのチップが全て予備領域を有することを中心に説明したが、本発明はこれに限定されず、予備領域を特定のチップに集中して設ける場合にも適用されうる。したがって、以上で記述した一実施例はあらゆる面で例示的なものであり、限定的でないものと理解せねばならない。本発明の範囲は発明の詳細な説明よりは特許請求の範囲により示され、特許請求の範囲の意味及び範囲、そしてその等価概念から導出されるあらゆる変更または変形された形態が本発明の範囲に含まれると解釈されねばならない。
【産業上の利用可能性】
【００７０】
本発明は、最小のフラッシュ演算でエラーブロックを管理し、かつ重要なデータを保護領域に設定して検証されていないアプリケーションによる悪意的なデータき損や誤動作によるデータき損を防止できる改善されたフラッシュメモリシステムに適用されうる。
【図面の簡単な説明】
【００７１】
【図１】従来の発明のフラッシュメモリシステムでエラーブロック管理の基本単位であるチャンクの構造を示すブロック図である。
【図２】図１に示されたチャンクマップのより詳細な構造を示すブロック図である。
【図３】本発明のシステム構成要素を簡略に示すブロック図である。
【図４】図３のシステムの動作を説明するためのブロック図である。
【図５】ｋ＋１個のフラッシュメモリチップに具現したフラッシュメモリのブロック図である。
【図６】ｔ個の使用領域のパーティションと１つの予備領域パーティションとに分けられたフラッシュメモリの何れか１つのチップの構造を示すブロック図である。
【図７】非保護領域と保護領域を何れも含むフラッシュメモリの何れか１つのチップの構造を示すブロック図である。
【図８】あらゆる領域が非保護領域よりなるフラッシュメモリの何れか１つのチップの構造を示すブロック図である。
【図９】ｙ個のブロックよりなる１つのパーティションの構造を示すブロック図である。
【図１０】非保護領域と保護領域を何れも含む予備領域の構造を示すブロック図である。
【図１１】全領域が非保護領域よりなる予備領域の構造を示すブロック図である。
【図１２】全領域が保護領域よりなる予備領域の構造を示すブロック図である。
【図１３】ブロックマップページグループの構造を詳細に示すブロック図である。
【図１４】フラッシュメモリに対するフラッシュ装置管理子の動作プロセスを示すフローチャートである。
【図１５】予備領域フォーマットプロセスをより詳細に示すフローチャートである。
【図１６】予備領域フォーマットプロセスのうち何れか１つのチップの予備領域フォーマットプロセスをより詳細に示すフローチャートである。
【図１７】ブロックマップ情報のＲＡＭ常駐プロセスをより詳細に示すフローチャートである。
【図１８】何れか１つのチップに対するブロックマップ情報のＲＡＭ常駐プロセスをより詳細に示すフローチャートである。
【図１９】エラー訂正コードでチップｔの読取りエラーブロックを復旧する過程を詳細に示すフローチャートである。
【図２０】エラーブロック処理プロセスをより詳細に示すフローチャートである。
【図２１】読取りエラーブロック処理プロセスをより詳細に示すフローチャートである。
【図２２】書込み／消去エラーブロック処理プロセスをより詳細に示すフローチャートである。
【符号の説明】
【００７２】
１２０    予備領域
１３０    保護領域
１５８    ブロックマップページグループ
１５５    予備ブロック
１５２    トランスファブロック
【図１】
2004310770.tif 000004
【図２】
2004310770.tif 000005
【図３】
2004310770.tif 000006
【図４】
2004310770.tif 000007
【図５】
2004310770.tif 000008
【図６】
2004310770.tif 000009
【図７】
2004310770.tif 000010
【図８】
2004310770.tif 000011
【図９】
2004310770.tif 000012
【図１０】
2004310770.tif 000013
【図１１】
2004310770.tif 000014
【図１２】
2004310770.tif 000015
【図１３】
2004310770.tif 000016
【図１４】
2004310770.tif 000017
【図１５】
2004310770.tif 000018
【図１６】
2004310770.tif 000019
【図１７】
2004310770.tif 000020
【図１８】
2004310770.tif 000021
【図１９】
2004310770.tif 000022
【図２０】
2004310770.tif 000023
【図２１】
2004310770.tif 000024
【図２２】
2004310770.tif 000025