(57)【特許請求の範囲】
【請求項１】
ホストシステムからの命令に応答して、物理ブロックに含まれる各ページのユーザ領域が１又は複数のセクタ領域で構成されているフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
ホストシステムからのデータ書き込みの命令に応答して、ｉ）前記セクタ領域に一連のデータを順次書き込み、ii)  前記一連のデータが書き込まれたセクタ領域に対応する冗長領域にデータが書き込まれたことを示す書込マークを順次書き込み、iii）前記一連のデータの末尾データを書き込んだ前記セクタ領域に対応する冗長領域に一連のデータの末尾データを書き込んだことを示す終了マークを書き込む書込手段と、
前記書込マーク及び前記終了マークに基づいて、前記一連のデータの書き込みが正常に終了しなかったことを検知する異常終了検知手段と、
前記書込マーク及び前記終了マークに基づいて、前記一連のデータが正常に書き込まれているセクタ領域の末尾を検出する正常データ検出手段と、
を備え、
前記書込マークは、前記物理ブロックに書き込まれた何番目の一連のデータであるかを示す順番情報を含み、
前記異常終了検知手段が前記一連のデータの書き込みが正常に終了しなかったことを検知したときに、書き込みが正常に終了しなかった前記一連のデータに対応する前記順番情報が１番目を示す情報である場合、前記正常データ検出手段は、前記一連のデータが正常に書き込まれているセクタ領域の末尾を検出する処理を行わず、正常に書き込まれている前記一連のデータが無いと判断する、
ことを特徴とするメモリコントローラ。
【請求項２】
請求項１に記載のメモリコントローラと、フラッシュメモリとから構成されることを特徴とするフラッシュメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ及び当該メモリコントローラを備えるフラッシュメモリシステムに関する。
【背景技術】
【０００２】
近年、不揮発性の記憶媒体であるフラッシュメモリの開発が盛んに行われ、デジタルカメラ等の情報機器（ホストシステム）の記憶媒体として普及している。
【０００３】
このような機器が扱うデータが大容量化したことに伴い、フラッシュメモリの記憶容量も大容量化が進んでいる。
【０００４】
また、フラッシュメモリの用途は、パーソナルコンピュータやデジタルカメラ等のホストシステムの外部記憶装置（フラッシュメモリシステム）として使用されることが多く、任意に着脱等される場合がある。このため、例えば、フラッシュメモリへのデータの書き込み（保存）動作中に外部記憶装置（フラッシュメモリシステム）がホストシステムから引き抜かれたような場合、正常に書き込まれていないデータ（異常データ）が残ってしまうことがある。
【０００５】
このような観点から、特許文献１等には、フラッシュメモリの記憶データを更新する際に所定のフラグを設定し、更新が完了すると、他のフラグを設定して更新が正常に完了したことを示す技術が開示されている。この技術を用いれば、電源遮断等で書き込み処理が途中で終了（以下、異常終了と言う。）したときに、異常終了したことを検出することはできる。
【０００６】
しかし、電源遮断等で書き込み処理が異常終了したときに、フラッシュメモリに記憶されているデータを正常データと異常データとに分離することができない。
【特許文献１】特開２００５−１７４２３２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
書き込み処理が異常終了して、データの書き込み先になっていたフラッシュメモリ内の物理ブロックに正常データと異常データが並存する場合、それらを分離して正常データだけを残す必要がある。
【０００８】
又、データの書き込み先であるフラッシュメモリは大容量化が進んでおり、１個のページのユーザ領域が１セクタ（５１２バイト）、１ブロックが３２ページの構成（以下、スモールブロックタイプと言う。）から、１個のページのユーザ領域が４セクタ（２０４８バイト）、１ブロックが６４ページの構成（以下、ラージブロックタイプと言う。）に移行しつつある。つまり、１個のブロックに含まれるユーザ領域が３２個のセクタ領域（５１２バイトの領域）で構成されるスモールブロックタイプから、１個のブロックに含まれるユーザ領域が２５６個のセクタ領域（５１２バイトの領域）で構成されるラージブロックタイプに移行しつつある。
【０００９】
このように１個の物理ブロックの容量（セクタ数）が大きくなると、ホストシステムから同一の物理ブロックが書き込み先となる書き込み要求が与えられる回数が多くなり、書き込み処理が異常終了したときに書き込み先の物理ブロックに書き込まれているデータ量も多くなるので、正常データと異常データを判別する処理がより煩雑になる。
【００１０】
本発明は上記の実情に鑑みてなされたもので、書き込み処理が異常終了したときに、データの書き込み先になっていたフラッシュメモリ内の物理ブロックに並存する正常データと異常データを容易に判別することができるメモリコントローラ、及び当該メモリコントローラを備えるフラッシュメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、本発明のメモリコントローラは、ホストシステムからの命令に応答して、物理ブロックに含まれる各ページのユーザ領域が１又は複数のセクタ領域で構成されているフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
ホストシステムからのデータ書き込みの命令に応答して、ｉ）前記セクタ領域に一連のデータを順次書き込み、ii)  前記一連のデータが書き込まれたセクタ領域に対応する冗長領域にデータが書き込まれたことを示す書込マークを順次書き込み、iii）前記一連のデータの末尾データを書き込んだ前記セクタ領域に対応する冗長領域に一連のデータの末尾データを書き込んだことを示す終了マークを書き込む書込手段と、
前記書込マーク及び前記終了マークに基づいて、前記一連のデータの書き込みが正常に終了しなかったことを検知する異常終了検知手段と、
前記書込マーク及び前記終了マークに基づいて、前記一連のデータが正常に書き込まれているセクタ領域の末尾を検出する正常データ検出手段と、
を備え、
前記書込マークは、前記物理ブロックに書き込まれた何番目の一連のデータであるかを示す順番情報を含み、
前記異常終了検知手段が前記一連のデータの書き込みが正常に終了しなかったことを検知したときに、書き込みが正常に終了しなかった前記一連のデータに対応する前記順番情報が１番目を示す情報である場合、前記正常データ検出手段は、前記一連のデータが正常に書き込まれているセクタ領域の末尾を検出する処理を行わず、正常に書き込まれている前記一連のデータが無いと判断する、
ことを特徴とする。
【００１６】
この発明に係るフラッシュメモリシステムは、上記のメモリコントローラと、フラッシュメモリと、から構成される。
【発明の効果】
【００１７】
本発明によれば、フラッシュメモリへの一連のデータの書き込み処理が異常終了した場合、つまり、一連のデータの書き込み処理で、一連のデータの末尾データが書き込まれずに異常終了した場合、最後にデータが書き込まれたセクタ領域に対応する冗長領域には書込マークが書き込まれるが、終了マークは書き込まれない。従って、最後にデータが書き込まれたセクタ領域に対応する冗長領域に書込マークと終了マークの双方が書き込まれていない場合には、一連のデータの書き込み処理が異常終了したと判断することができる。
【００１８】
更に、一連のデータの書き込み処理が異常終了したと判断した場合には、終了マークに基づいて一連のデータが正常に書き込まれているセクタ領域の末尾を検出することができる。
【発明を実施するための最良の形態】
【００１９】
以下、図面に基づき、本発明の実施の形態について詳細に説明する。
【００２０】
図１は、本発明に係るフラッシュメモリシステム１を概略的に示すブロック図である。図１に示すように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するコントローラ３で構成されている。
【００２１】
なお、フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続される。ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成される。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２２】
フラッシュメモリ２は、不揮発性メモリであり、レジスタとメモリセルアレイから構成される。フラッシュメモリ２は、レジスタとメモリセルとの間でデータの複写を行って、データの書き込み又は読み出しを行う。
【００２３】
メモリセルアレイは、複数のメモリセル群とワード線を備える。各メモリセル群は、複数のメモリセルが直列に接続されたものである。ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、データの複写、即ち、レジスタから選択されたメモリセルへの複写又は選択されたメモリセルからレジスタへのデータの複写が行われる。
【００２４】
メモリセルアレイを構成するメモリセルは、２つのゲートを備えたＭＯＳトランジスタによって構成される。ここで、上側のゲート、下側のゲートは、それぞれ、コントロールゲート、フローティングゲートと呼ばれており、フローティングゲートに電荷（電子）を注入若しくはフローティングゲートから電荷（電子）を排出することによって、データの書き込み若しくはデータの消去が行われる。
【００２５】
このフローティングゲートは、周囲を絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。なお、フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧をコントロールゲートとフローティングゲート間に印加する。また、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧をコントロールゲートとフローティングゲート間に印加する。
【００２６】
ここで、フローティングゲートに電子が注入されている状態が書き込み状態であり、論理値「０」に対応する。また、フローティングゲートから電子が排出されている状態が消去状態であり、論理値「１」に対応する。
【００２７】
このようなフラッシュメモリ２のアドレス空間を図２に示す。フラッシュメモリ２のアドレス空間は、“ページ”及び“ブロック（物理ブロック）”で構成されている。
【００２８】
ページは、フラッシュメモリ２にて行われるデータ読み出し動作及びデータ書き込み動作における処理単位である。物理ブロックは、フラッシュメモリ２にて行われるデータ消去動作における処理単位であり、複数個のページで構成されている。
【００２９】
図２に示したフラッシュメモリ２では、１つのページは、４セクタ（２０４８バイト）のユーザ領域２５と、６４バイトの冗長領域２６で構成され、１つの物理ブロックは６４個のページで構成されている。
【００３０】
又、物理ブロックには、それぞれに固有の物理ブロックアドレス（ＰＢＡ）が割り当てられている。更に、記憶領域を複数のゾーンに分割して管理する場合には、複数個の物理ブロックで物理ゾーンを構成し、各物理ゾーンに固有の物理ゾーン番号（ＰＺＮ）を割り当てている。各物理ゾーンに含まれる物理ブロックの、各物理ゾーン内での通番を物理ゾーン内ブロック番号（ＰＺＩＢＮ）と呼んでいる。
【００３１】
一方、ホストシステム４側のアドレス空間は、セクタ（５１２バイト）単位で分割した領域に付けた通番であるＬＢＡ（Logical Block Address）で管理されている。更に、複数個のセクタをまとめたものを論理ブロックと呼び、複数個の論理ブロックをまとめたものを論理ゾーンと呼んでいる。尚、論理ブロックに付けられた通番を論理ブロック番号（ＬＢＮ）と呼び、各論理ブロックに含まれるセクタの、各論理ブロック内での通番をセクタ番号（ＳＮ）と呼んでいる。又、論理ゾーンに付けられた通番を論理ゾーン番号（ＬＺＮ）と呼び、各論理ゾーンに含まれる論理ブロックの、各論理ゾーン内での通番を論理ゾーン内ブロック番号（ＬＺＩＢＮ）と呼んでいる。
【００３２】
従って、各論理ゾーンに含まれる論理ブロック数をｎとした場合、ＬＢＮをｎで割ったときの商がＬＺＮに対応し、余りがＬＺＩＢＮに対応する。
【００３３】
又、各論理ゾーンにはそれぞれ１個の物理ゾーンが割り当てられ、論理ゾーンに含まれる各論理ブロックに対応するデータは、その論理ゾーンに割り当てられた物理ゾーンに含まれる物理ブロックに書き込まれる。更に、データが書き込まれた物理ブロックの冗長領域２６には、そのデータに対応する論理ブロックを特定できる情報（以下、論理アドレス情報という。）が書き込まれる。この論理アドレス情報として、一般的にはデータ量の少ないＬＺＩＢＮが書き込まれるが、ＬＢＮを書き込んでも構わない。  
【００３４】
上述の物理ブロックと論理ブロックとの対応関係は、データの書き込みや消去が行われる毎に変化する。このため、個々の時点における両者の対応関係を管理するためアドレス変換テーブルが作成され、対応関係が変化する毎に更新される。尚、論理ゾーンと物理ゾーンとの対応関係は予め設定されているので、アクセス対象の物理ゾーンに含まれる物理ブロックの冗長領域２６に書き込まれている論理アドレス情報を参照することにより、このアドレス変換テーブルを論理ゾーン単位で作成することができる。
【００３５】
次に、４セクタ（２０４８バイト）のユーザ領域２５と、６４バイトの冗長領域２６で構成されたページの記憶領域について、図３を参照して説明する。各ページのユーザ領域２５は、４つの領域（以下、セクタ領域２５’と言う。）に区分されている。このセクタ領域２５’には、それぞれ、ホストシステム４から供給される１セクタ（５１２バイト）のユーザデータが格納される。
【００３６】
一方、冗長領域２６も、４つの領域（以下、部分冗長領域２６’と言う。）に区分され、この部分冗長領域２６’には、それぞれ、１６バイトの領域が割り当てられる。各ページの部分冗長領域２６’には、それぞれ、対応するセクタ領域２５’に書き込まれたユーザデータのエラーコレクション（ＥＣＣ）コードと、対応するセクタ領域２５’の書き込み状態を示す書き込みマーク及び終了マークが書き込まれる。更に、各物理ブロックの先頭ページの部分冗長領域２６’には、論理アドレス情報及びブロックステータス（フラグ）が書き込まれる。
【００３７】
ＥＣＣコードは、セクタ領域２５’に記憶されているユーザデータに含まれる誤りを検出し、訂正するためのデータである。
【００３８】
書き込みマークは、対応するセクタ領域２５’にユーザデータが書き込まれているか否かを示す情報である。終了マークは、一連のユーザデータを書き込む書き込み処理（以下、一連のユーザデータを書き込む書き込み処理をシーケンス書き込み処理という）で、末尾のユーザデータが書き込まれたセクタ領域２５’を示す情報である。つまり、シーケンス書き込み処理で複数セクタのユーザデータを書き込んだ場合、そのシーケンス書き込み処理でユーザデータを書き込んだセクタ領域２５’に対応する部分冗長領域２６’に書き込みマークを書き込み、更に、末尾のユーザデータを書き込んだセクタ領域２５’に対応する部分冗長領域２６’に終了マークを書き込む。ここで、シーケンス書き込み処理とは、フラッシュメモリインターフェースブロック１０に設定された情報に基づいて実行される一連のユーザデータの書き込み処理をいう。ホストシステム４から与えられた書き込みコマンドに基づくアクセス対象領域が複数の物理ブロックに跨っていない場合は、ホストシステム４から与えられた１回の書き込みコマンドに基づいて、１回のシーケンス書き込み処理が実行される。
【００３９】
又、各セクタ領域２５’と各部分冗長領域２６’の対応関係は、適宜設定することができる。例えば、図３に示したように、ユーザ領域２５内の先頭のセクタ領域２５’を冗長領域２６の先頭の部分冗長領域２６’に、ユーザ領域２５内の２番目のセクタ領域２５’を冗長領域２６の２番目の部分冗長領域２６’に、ユーザ領域２５内の３番目のセクタ領域２５’を冗長領域２６の３番目の部分冗長領域２６’にそれぞれ対応させる。
【００４０】
次に、フラッシュメモリ２に対するアクセスを制御するコントローラ３について説明する。コントローラ３は、フラッシュメモリ２にデータ、アドレス情報、内部コマンド等を供給することにより読み出し処理、書き込み処理、ブロック消去処理等の各処理を行う。
【００４１】
ここで、内部コマンドとは、コントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２は、コントローラ３から与えられる内部コマンドに従って動作する。一方、ホストシステム４からコントローラ３に与えられるコマンドを外部コマンドと言う。
【００４２】
コントローラ３は、図１に示すように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣ（エラー・コレクション・コード）ブロック１１と、ＲＯＭ（Read Only Memory）１２と、から構成される。これら機能ブロックによって構成されるコントローラ３は、一つの半導体チップ上に集積される。以下に各機能ブロックについて説明する。
【００４３】
マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムに従って、コントローラ３の全体の動作を制御する。例えば、マイクロプロセッサ６は、各種処理等を定義したコマンドセット（以下、シーケンスコマンドと言う。）をＲＯＭ１２から読み出し、このシーケンスコマンドに従ってフラッシュメモリインターフェースブロック１０に処理を実行させる。
【００４４】
ＲＯＭ１２は、不揮発性の記憶素子であり、上記のシーケンスコマンド等が記憶されている。
【００４５】
ワークエリア８は、フラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成される。上述のアドレス変換テーブルは、このワークエリア８上に作成される。
【００４６】
バッファ９は、フラッシュメモリ２から読み出されたデータ及びフラッシュメモリ２に書き込むべきデータを一時的に蓄積する。すなわち、フラッシュメモリ２から読み出されたデータは、ホストシステム４が受け取り可能な状態となるまでバッファ９に保持され、フラッシュメモリ２に書き込むべきデータは、フラッシュメモリ２が書き込み可能な状態となるまでバッファ９に保持される。
【００４７】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加されるエラーコレクションコードを生成するとともに、読み出しデータに付加されたエラーコレクションコードに基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００４８】
ホストインターフェースブロック７は、ホストシステム４との間で、データ、アドレス情報、外部コマンド等の授受を行う。ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてフラッシュメモリシステム１の内部（例えば、バッファ９）に取り込まれる。また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。
【００４９】
フラッシュメモリインターフェースブロック１０は、内部バス１４を介して、フラッシュメモリ２とデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。
【００５０】
ホストインターフェースブロック７及びフラッシュメモリインターフェースブロック１０は、図４に示すような各種のレジスタを備える。ホストインターフェースブロック７は、コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３等を備えており、フラッシュメモリインターフェースブロック１０は、物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２、カウンタＲ１３、書込マークレジスタＲ１４、終了マークレジスタＲ１５等を備える。
【００５１】
コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３には、ホストシステム４から与えられる情報が書き込まれる。コマンドレジスタＲ１には、書き込みコマンド、読み出しコマンド等の外部コマンドが書き込まれる。ＬＢＡレジスタＲ３には、アクセス対象領域の先頭のＬＢＡが書き込まれる。セクタ数レジスタＲ２にはアクセス対象領域のセクタ数が書き込まれる。
【００５２】
物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２、カウンタＲ１３には、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３に書き込まれた情報に基づいて、フラッシュメモリ２内のアクセス対象領域を指示する情報が書き込まれる。
【００５３】
フラッシュメモリ２内のアクセス対象領域を特定するときには、ＬＢＡレジスタＲ３に設定されたＬＢＡに基づいてアクセス対象のＬＢＮとＳＮが特定される。
【００５４】
例えば、ＬＢＡが連続する２５６セクタの領域を、フラッシュメモリ（１ブロックが６４ページで、１ページが４セクタのフラッシュメモリ）の１個の物理ブロックに割り当てた場合、図５に示したようにＬＢＡの下位８ビットがＳＮに対応し、この下位８ビットを除いた上位側のビットがＬＢＮに対応する。つまり、ＬＢＡが連続する２５６セクタの領域を論理ブロックとした場合、ＬＢＡの下位８ビットが論理ブロック内の各セクタに付けた通番であるセクタ番号ＳＮ（０〜２５５）を示し、このＬＢＡの下位８ビットを除いた上位側のビットがＬＢＮを示している。尚、ＬＢＡ、ＬＢＮ及びＳＮのビット数については、フラッシュメモリの容量や仕様等に応じて決定される。
【００５５】
続いて、アクセス対象のＬＢＮとＳＮに基づいて、物理ブロックアドレスレジスタＲ１１及びセクタ番号レジスタＲ１２へアクセス対象領域を指示する情報の設定が行われる。
【００５６】
物理ブロックアドレスレジスタＲ１１には、ＬＢＡレジスタＲ３に書き込まれたＬＢＡのＬＢＮを示す部分に基づいて特定された論理ブロックと対応する物理ブロックのＰＢＡ又は空きブロックのＰＢＡが書き込まれる。つまり、特定された論理ブロックに対応する物理ブロックからユーザデータを読み出す場合、又は、そのブロックに追加書き込みをする場合には、特定された論理ブロックと対応する物理ブロックのＰＢＡが物理ブロックアドレスレジスタＲ１１に書き込まれ、特定された論理ブロックに対応するユーザデータを空きブロックに書き込む場合には、その空きブロックのＰＢＡが物理ブロックアドレスレジスタＲ１１に書き込まれる。
【００５７】
セクタ番号レジスタＲ１２には、ＬＢＡレジスタＲ３に書き込まれたＬＢＡのＳＮに対応する部分が書き込まれる。ここで、各物理ブロックにはＬＢＡの順番でユーザデータを書き込まれるので、上記ＳＮは、各物理ブロックに含まれるセクタ領域２５’に付けられた通番に対応する。尚、各ページのユーザ領域２５は４個のセクタ領域２５’で構成されているので、ＳＮの上位６ビットが物理ブロック内のページ番号ＰＮ（０〜６３）に対応し、ＳＮの下位２ビットがユーザ領域２５に含まれるセクタ領域２５’の順番を示すページ内セクタ番号ＰＩＳＮ（０〜３）に対応する。
【００５８】
カウンタＲ１３には、物理ブロックアドレスレジスタＲ１１に設定されたＰＢＡで特定される物理ブロックに書き込まれる一連のユーザデータのセクタ数が書き込まれる。従って、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３に書き込まれた情報に基づいて特定されるアクセス対象領域が複数の物理ブロックに跨っていない場合は、セクタ数レジスタＲ２に設定されたセクタ数がカウンタＲ１３に書き込まれる。
【００５９】
尚、ＬＢＡレジスタＲ３及びセクタ数レジスタＲ２に基づいて特定されるアクセス対象領域が複数の論理ブロックに跨っている場合、アクセス対象領域の物理ブロックも複数の物理ブロックに跨っているので、物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２、カウンタＲ１３に対する情報の設定は論理ブロック毎に行われる。従って、ＬＢＡレジスタＲ３及びセクタ数レジスタＲ２に基づいて特定されるアクセス対象領域が複数の論理ブロックに跨っている場合、ホストシステム４から与えられる１回の書き込みコマンドに基づいて複数回（例えば、２個の論理ブロックに跨っている場合は２回）のシーケンス書き込み処理が実行される。
【００６０】
書き込み処理の場合には、書込マークレジスタＲ１４と終了マークレジスタＲ１５に、部分冗長領域２６’に書き込まれる書込マークと終了マークがそれぞれ設定される。
【００６１】
本実施の形態では、書込マークを８ビットとし、終了マークを４ビットとしている。書込マークは、その物理ブロックに対する何回目のシーケンス書き込み処理であるかによって下記のように書込マークの設定を変えている。
１回目のシーケンス書き込み処理時の書込マーク：００ｈ（１６進数表記）
２回目のシーケンス書き込み処理時の書込マーク：０５ｈ（１６進数表記）
３回目のシーケンス書き込み処理時の書込マーク：０Ａｈ（１６進数表記）
４回目のシーケンス書き込み処理時の書込マーク：０Ｆｈ（１６進数表記）
５回目のシーケンス書き込み処理時の書込マーク：５０ｈ（１６進数表記）
６回目のシーケンス書き込み処理時の書込マーク：５５ｈ（１６進数表記）
７回目のシーケンス書き込み処理時の書込マーク：５Ａｈ（１６進数表記）
８回目のシーケンス書き込み処理時の書込マーク：５Ｆｈ（１６進数表記）
９回目のシーケンス書き込み処理時の書込マーク：Ａ０ｈ（１６進数表記）
１０回目のシーケンス書き込み処理時の書込マーク：Ａ５ｈ（１６進数表記）
１１回目のシーケンス書き込み処理時の書込マーク：ＡＡｈ（１６進数表記）
１２回目のシーケンス書き込み処理時の書込マーク：ＡＦｈ（１６進数表記）
１３回目のシーケンス書き込み処理時の書込マーク：Ｆ０ｈ（１６進数表記）
１４回目のシーケンス書き込み処理時の書込マーク：Ｆ５ｈ（１６進数表記）
１５回目以降のシーケンス書き込み処理時の書込マーク：ＦＡｈ（１６進数表記）
【００６２】
例えば、既に８回のシーケンス書き込み処理が行われている物理ブロックに、９回目のシーケンス書き込み処理を行う場合には、書込マークレジスタＲ１４にＡ０ｈ（１６進数表記）を、終了マークレジスタＲ１５にＦｈ（１６進数表記）を設定した後にシーケンス書き込み処理が実行する。シーケンス書き込み処理が実行されると物理ブロックアドレスレジスタＲ１１及びセクタ番号レジスタＲ１２に設定されている情報に基づいて、ユーザデータの書き込み先のページを特定する物理アドレス情報と、書き込み先のページ内のセクタ領域２５’を特定する情報がフラッシュメモリ２に供給される。更に、セクタ領域２５’に書き込まれるユーザデータが、バッファ９から供給され、部分冗長領域２６’に書き込まれる書込マークと終了マークが、書込マークレジスタＲ１４と終了マークレジスタＲ１５からそれぞれ供給される。ここで、書き込み先のページを特定する物理アドレス情報は、物理ブロックアドレスレジスタＲ１１に設定されているＰＢＡとセクタ番号レジスタＲ１２に設定されているＳＮの上位６ビットに基づいて生成され、ページ内のセクタ領域２５’を特定する情報は、ＳＮの下位２ビットに基づいて生成される。
【００６３】
１セクタのユーザデータがバッファ９からフラッシュメモリ２に供給される毎にセクタ番号レジスタＲ１２に設定されている値がインクリメント（１ずつ増加）され、カウンタＲ１３に設定されている値がデクリメント（１ずつ減少）される。カウンタＲ１３に設定されている値が１になったときに、終了マークレジスタＲ１５に０ｈ（１６進数表記）が設定され、カウンタＲ１３に設定されている値が０になったときにシーケンス書き込み処理が終了する。例えば、カウンタＲ１３に「８」を設定してシーケンス書き込み処理を開始した場合、８セクタのユーザデータの書き込みが行われ、８セクタ目のユーザデータが書き込まれたセクタ領域２５’に対応する部分冗長領域２６’には、終了マークとして０ｈ（１６進数表記）が書き込まれる。
【００６４】
つまり、シーケンス書き込み処理は、物理ブロックアドレスレジスタＲ１１に書き込み先の物理ブロックのＰＢＡを書き込み、セクタ番号レジスタＲ１２に書き込みを開始するセクタ領域２５’に対応するＳＮを書き込み、カウンタＲ１３に書き込むユーザデータのセクタ数を書き込み、書込マークレジスタＲ１４に書込マークを書き込み、終了マークレジスタＲ１５にＦｈ（１６進数表記）を書き込んだ後に開始され、カウンタＲ１３に書き込まれたセクタ数分のユーザデータが書き込まれると終了する。
【００６５】
尚、書込マークは、ビット誤りの発生を考慮して０ｈ、５ｈ、Ａｈ及びＦｈ（１６進数表記）の組み合わせ（但し、ＦＦｈを除く）で構成している。又、部分冗長領域２６’の書込マークが書き込まれる部分がＦＦｈ（消去状態）の場合は、書込マークが書き込まれていないと判断する。
【００６６】
本実施の形態では、各物理ブロックに含まれる２５６個のセクタ領域２５’のユーザデータが記憶されているか否かを書込マークに基づいて判断し、ユーザデータが記憶されている末尾のセクタ領域２５’に対応する部分冗長領域２６’に終了マークが書き込まれているか否かで、シーケンス書き込み処理が正常に終了したかどうかを判断している。
【００６７】
更に、ユーザデータが記憶されている末尾のセクタ領域２５’に対応する部分冗長領域２６’に終了マークが書き込まれていなかった場合、正常データと異常データの判別が行われる。この判別では、ユーザデータが記憶されている末尾のセクタ領域２５’に対応する部分冗長領域２６’に書き込まれている書込マークの１つ前の書込マークが書き込まれている末尾の部分冗長領域２６’を検出し、この部分冗長領域２６’と対応するセクタ領域２５’までに記憶されているユーザデータを正常データと判断する。但し、１５回目以降のシーケンス書き込み処理では同じ書込マークＦＡｈ（１６進数表記）が書き込まれるので、ユーザデータが記憶されている末尾のセクタ領域２５’と対応する部分冗長領域２６’に書込マークＦＡｈ（１６進数表記）が書き込まれていた場合は、終了マークが書き込まれている末尾の部分冗長領域２６’と対応するセクタ領域２５’までに書き込まれているユーザデータを正常データと判断する。尚、正常データと判断されたユーザデータは他の消去済みの物理ブロックに転送（複写）され、転送後に正常データと異常データ並存する物理ブロックの記憶データは消去される。
【００６８】
又、ユーザデータが書き込まれている末尾のセクタ領域２５’に対応する部分冗長領域２６’に終了マークが書き込まれていなかったときに、その部分冗長領域２６’に書き込まれている書込マークが１回目のシーケンス書き込み処理を示す書込マーク００ｈ（１６進数表記）であった場合はその物理ブロックに正常データが無いと判断する。尚、正常データが無いと判断した物理ブロックの記憶データは消去される。
【００６９】
次に、部分冗長領域２６’に書き込まれている書込マークを参照してユーザデータが書き込まれている末尾のセクタ領域２５’を検出する処理を、図６を参照して説明する。尚、以下の説明で部分冗長領域２６’には、対応するセクタ領域２５’と同じＳＮが付けられているものとする。つまり、ＳＮが「０」のセクタ領域２５’と対応する部分冗長領域２６’のＳＮは「０」とし、ＳＮが「１」のセクタ領域２５’と対応する部分冗長領域２６’のＳＮは「１」とし、以下同様にＳＮが「２５５」のセクタ領域２５’と対応する部分冗長領域２６’のＳＮは「２５５」とする。
【００７０】
まず、検索範囲の先頭セクタ番号ＳＳとして先頭部分冗長領域２６’のＳＮである０（二進数表記：００００  ００００）を設定する（ステップＳ５１）。
【００７１】
続いて、検索範囲の最終セクタ番号ＥＳとして最終部分冗長領域２６’のＳＮに１を加算した２５６（二進数表記：１  ００００  ００００）を設定する（ステップＳ５２）。
【００７２】
次に、参照する部分冗長領域２６’のＳＮの値ｎを算出する（ステップＳ５３）。この値ｎは、下記の式によって求める。
ｎ＝（ＳＳ＋ＥＳ）／２
つまり、この値ｎはＳＳとＥＳを加算した後に、下位方向に１ビットシフトさせる（最下位ビットを削除する）ことにより求められる。
【００７３】
次に、ＳＮがステップＳ５３で求めたｎと一致する部分冗長領域２６’を参照し、参照した部分冗長領域２６’に書込マークが書き込まれているか否かを判別する（ステップＳ５４）。つまり、書込マークが００ｈ（１６進数表記）〜ＦＡｈ（１６進数表記）のいずれかであれば、書込マークが書き込まれていると判断し、書込マークがＦＦｈ（１６進数表記）であれば、書込マークが書き込まれていないと判断する。
【００７４】
参照した部分冗長領域２６’に書込マークが書き込まれていた場合（ステップＳ５４：Ｙｅｓ）、書込マークが書き込まれている末尾の部分冗長領域２６’は参照した部分冗長領域２６’より前にはないので、先頭セクタ番号ＳＳをステップＳ５３で求めたｎの値に変更する（ステップＳ５５）。
【００７５】
参照した部分冗長領域２６’に書込マークが書き込まれていない場合（ステップＳ５４：Ｎｏ）、書込マークが書き込まれている末尾の部分冗長領域２６’は参照した部分冗長領域２６’より後にはないので、最終セクタ番号ＥＳをステップＳ５３で求めたｎの値に変更する（ステップＳ５６）。次に、先頭セクタ番号ＳＳと最終セクタ番号ＥＳを比較し、先頭セクタ番号ＳＳと最終セクタ番号ＥＳの差が「１」より大きいか否かを判断する（ステップＳ５７）。先頭セクタ番号ＳＳと最終セクタ番号ＥＳの差が「１」より大きい場合（ステップＳ５７：Ｙｅｓ）、ステップＳ５３に戻り、次に参照する部分冗長領域２６’のＳＮの値ｎを算出する。一方、先頭セクタ番号ＳＳと最終セクタ番号ＥＳの差が「１」の場合（ステップＳ５７：Ｎｏ）は、先頭セクタ番号ＳＳに設定されている値が、書込マークが書き込まれている末尾の部分冗長領域２６’のＳＮと判断して検出処理を終了する。
【００７６】
このようにして検出された書込マークが書き込まれている末尾の部分冗長領域２６’に終了マーク０ｈ（１６進数表記）が書き込まれていた場合、前回のシーケンス書き込み処理は正常に終了したと判断する。一方、書込マークが書き込まれている末尾の部分冗長領域２６’に終了マーク０ｈ（１６進数表記）が書き込まれていなかった場合、前回のシーケンス書き込み処理は正常に終了しなかったと判断する。
【００７７】
次に、前回のシーケンス書き込み処理が正常に終了しなかったと判断した場合、前回のシーケンス書き込み処理より前のシーケンス書き込み処理で書き込まれた正常データを判別する処理を行う。但し、正常に終了しなかったと判断した前回のシーケンス書き込み処理で書き込まれた書込マークが、１回目のシーケンス書き込み処理を示す書込マーク００ｈ（１６進数表記）であった場合は、その物理ブロックに正常データが無いと判断し、正常データを判別する処理を行わない。
【００７８】
正常に終了しなかったと判断した前回のシーケンス書き込み処理で書き込まれた書込マークがＦＡｈ（１６進数表記）の場合は、書込マークが書き込まれている末尾の部分冗長領域２６’より前の部分冗長領域２６’を順次参照していき、終了マークが書き込まれている末尾の部分冗長領域２６’を検出する。このようにして検出された部分冗長領域２６’と対応するセクタ領域２５’までに書き込まれているユーザデータを正常データと判断する。例えば、ＳＮが２４３の部分冗長領域２６’、ＳＮが２４２の部分冗長領域２６’、ＳＮが２４１の部分冗長領域２６’という順番で参照していき、ＳＮが２４３〜２３８の部分冗長領域２６’に終了マークが無く、ＳＮが２３７の部分冗長領域２６’に終了マークが有った場合には、ＳＮが０〜２３７のセクタ領域２５’に記憶されているユーザデータを正常データと判断する。
【００７９】
正常に終了しなかったと判断した前回のシーケンス書き込み処理で書き込まれた書込マークが、２〜１４回目のシーケンス書き込み処理を示す書込マークであった場合、前回のシーケンス書き込み処理で書き込まれた書込マークより１つ前の書込マークと終了マークの双方が書き込まれている部分冗長領域２６’ と対応するセクタ領域２５’までに書き込まれているユーザデータを正常データと判断する。この前回のシーケンス書き込み処理で書き込まれた書込マークより１つ前の書込マークと終了マークの双方が書き込まれている部分冗長領域２６’を検出する処理、つまり、正常データが記憶されている末尾のセクタ領域２５’を検出する処理を図７を参照して説明する。
【００８０】
まず、検索範囲の先頭セクタ番号ＳＳとして先頭部分冗長領域２６’のＳＮである０を設定する（ステップＳ６１）。
【００８１】
続いて、検索範囲の最終セクタ番号ＥＳとして書込マークが書き込まれている末尾の部分冗長領域２６’のＳＮの値を設定する。更に、最終書込マークＥＭとして書込マークが書き込まれている末尾の部分冗長領域２６’に書き込まれている書込マークを設定する。（ステップＳ６２）。つまり、最終書込マークＥＭには、正常に終了しなかったと判断した前回のシーケンス書き込み処理で書き込まれた書込マークを設定する。
【００８２】
次に、参照する部分冗長領域２６’のＳＮの値ｎを算出する（ステップＳ６３）。この値ｎは、下記の式によって求める。
ｎ＝（ＳＳ＋ＥＳ）／２
つまり、この値ｎはＳＳとＥＳを加算した後に、下位方向に１ビットシフトさせる（最下位ビットを削除する）ことにより求められる。
【００８３】
次に、ＳＮがステップＳ６３で求めたｎと一致する部分冗長領域２６’を参照し、参照した部分冗長領域２６’に書き込まれている書込マークと、最終書込マークＥＭとして設定されている書込マークを比較する（ステップＳ６４）。
【００８４】
参照した部分冗長領域２６’に書き込まれている書込マークと、最終書込マークＥＭとして設定されている書込マークが同じ場合（ステップＳ６４：Ｙｅｓ）、最終書込マークＥＭとして設定されている書込マークより１つ前の書込マークが書き込まれている部分冗長領域２６’は参照した部分冗長領域２６’より後にはないので、最終セクタ番号ＥＳをステップＳ６３で求めたｎの値に変更する（ステップＳ６５）。最終セクタ番号ＥＳの変更後、ステップＳ６３に戻り参照する部分冗長領域２６’のＳＮの値ｎを再度算出する。
【００８５】
参照した部分冗長領域２６’に書き込まれている書込マークと、最終書込マークＥＭとして設定されている書込マークが異なる場合（ステップＳ６４：Ｎｏ）、つまり、参照した部分冗長領域２６’に書き込まれている書込マークが、最終書込マークＥＭとして設定されている書込マークより１つ以上前の書込マークである場合、最終書込マークＥＭとして設定されている書込マークより１つ前の書込マークと終了マークが書き込まれている部分冗長領域２６’は参照した部分冗長領域２６’より前にはないので、先頭セクタ番号ＳＳをステップＳ６３で求めたｎの値に変更する（ステップＳ６６）。  
【００８６】
続いて、参照した部分冗長領域２６’に書き込まれている書込マークと、最終書込マークＥＭとして設定されている書込マークの１つ前の書込マークを比較する（ステップＳ６７）。
【００８７】
参照した部分冗長領域２６’に書き込まれている書込マークと、最終書込マークＥＭとして設定されている書込マークの１つ前の書込マークが異なる場合（ステップＳ６７：Ｎｏ）、つまり、参照した部分冗長領域２６’に書き込まれている書込マークが、最終書込マークＥＭとして設定されている書込マークより２つ以上前の書込マークである場合、ステップＳ６３に戻り参照する部分冗長領域２６’のＳＮの値ｎを再度算出する。
【００８８】
参照した部分冗長領域２６’に書き込まれている書込マークと、最終書込マークＥＭとして設定されている書込マークの１つ前の書込マークが同じ場合（ステップＳ６７：Ｙｅｓ）、参照した部分冗長領域２６’に終了マークが書き込まれているか否かを判断する（ステップＳ６８）。
【００８９】
参照した部分冗長領域２６’に終了マークが書き込まれていない場合（ステップＳ６８：Ｎｏ）、ステップＳ６３に戻り参照する部分冗長領域２６’のＳＮの値ｎを再度算出する。
【００９０】
参照した部分冗長領域２６’に終了マークが書き込まれている場合（ステップＳ６８：Ｙｅｓ）、先頭セクタ番号ＳＳに設定されている値が、正常データが記憶されている末尾のセクタ領域２５’のＳＮと判断して検出処理を終了する。
【００９１】
次に、正常データと異常データを判別する処理を具体例に基づいて説明する。例えば、図８に示すように、書込マークと終了マークが書き込まれている場合について説明する。
【００９２】
この例では、書込マークが書き込まれている末尾の部分冗長領域２６’のＳＮは２５であり、ＳＮが２５の部分冗長領域２６’にはシーケンス書き込み処理が正常に終了したことを示す終了マーク０ｈ（１６進数表記）が書き込まれていない。従って、前回のシーケンス書き込み処理が正常に終了しなかったと判断する。
【００９３】
ここで、ＳＮが２５の部分冗長領域２６’に書き込まれている書込マークは０Ａｈ（１６進数表記）なので、０Ａｈ（１６進数表記）より１つ前の書込マーク０５ｈ（１６進数表記）と終了マーク０ｈ（１６進数表記）が書き込まれている部分冗長領域２６’のＳＮが、正常データが記憶されている末尾のセクタ領域２５’のＳＮであると判断する。つまり、ＳＮが０〜１７のセクタ領域２５’に記憶されているユーザデータが正常データであると判断する。
【００９４】
次に、図９に示すように、書込マークと終了マークが書き込まれている場合について説明する。
この例では、書込マークが書き込まれている末尾の部分冗長領域２６’のＳＮは７であり、ＳＮが７の部分冗長領域２６’にはシーケンス書き込み処理が正常に終了したことを示す終了マーク０ｈ（１６進数表記）が書き込まれていない。従って、前回のシーケンス書き込み処理が正常に終了しなかったと判断する。
【００９５】
ここで、ＳＮが７の部分冗長領域２６’に書き込まれている書込マークは、この物理ブロックに対する１回目のシーケンス書き込み処理を示す００ｈ（１６進数表記）なので、この物理ブロックには正常データが記憶されていないと判断する。
【００９６】
以上説明したように、各シーケンス書き込み処理で一連のデータが書き込まれるセクタ領域２５’に対応する部分冗長領域２６’に同じ書込マークを書き込み、一連のデータの末尾のユーザデータが書き込まれたセクタ領域２５’に対応する部分冗長領域２６’に終了マークを書き込むことにより、異常終了が発生したか否の判断と、正常データと異常データの判別を容易に行うことができる。
【００９７】
尚、書込マークのビット数、ビットパターン及びビットパターンの種類については適宜設定することができる。書込マークのビットパターンの種類については、シーケンス書き込み処理毎に全て異ならせることが好ましいが、同一の物理ブロックに対する平均的なシーケンス書き込み処理の回数等を考慮して適宜決定すればよい。又。終了マークのビット数及びビットパターンについても適宜設定することができる。
【００９８】
又、フラッシュメモリの構成、例えば、各物理ブロックに含まれるセクタ領域２５’の数等については特に限定することなく実施することができる。フラッシュメモリに対するアクセス方法やアドレス管理方法についても特に限定することなく実施することができる。
【図面の簡単な説明】
【００９９】
【図１】本発明の実施の形態に係るフラッシュメモリシステムを概略的に示すブロック図である。
【図２】この発明の実施の形態のフラッシュメモリのアドレス空間の構造を概略的に示す図である。
【図３】ユーザ領域と冗長領域の構成例を示す図である。
【図４】ホストインターフェースブロック及びフラッシュメモリインタフェースブロックの構成を示すブロック図である。
【図５】論理アドレス情報ＬＢＡの構成を説明するための図である。
【図６】ユーザデータが書き込まれている末尾のセクタ領域を検出する処理を説明するためのフローチャートである。
【図７】正常データが記憶されている末尾のセクタ領域を検出する処理を説明するためのフローチャートである。
【図８】物理ブロックに書き込まれた書込マークと終了マークの例を示す図である。
【図９】物理ブロックに書き込まれた書込マークと終了マークの例を示す図である。
【符号の説明】
【０１００】
１    フラッシュメモリシステム
２    フラッシュメモリ
３    コントローラ
４    ホストシステム
６    マイクロプロセッサ
７    ホストインターフェースブロック
８    ワークエリア
９    バッファ
１０  フラッシュメモリインターフェースブロック
１１  ＥＣＣブロック
１２  ＲＯＭ
１３  外部バス
１４  内部バス
２５  ユーザ領域
２６  冗長領域
【図１】
0004501881.tif 000002
【図２】
0004501881.tif 000003
【図３】
0004501881.tif 000004
【図４】
0004501881.tif 000005
【図５】
0004501881.tif 000006
【図６】
0004501881.tif 000007
【図７】
0004501881.tif 000008
【図８】
0004501881.tif 000009
【図９】
0004501881.tif 000010