以下、本発明の実施の形態について図面を参照して説明する。図1は、本発明に係るフラッシュメモリシステムの、一実施の形態の概略構成を示すブロック図である。図1に示したように、フラッシュメモリシステム1は、フラッシュメモリ2と、それを制御するメモリコントローラ3で構成されている。また、フラッシュメモリシステム1は、外部バス13を介してホストシステム4と接続される。
ホストシステム4は、ホストシステム4の全体の動作を制御するためのCPU(Central Processing Unit)と、フラッシュメモリシステム1との情報の授受を担うコンパニオンチップ等とから構成される。ホストシステム4は、たとえば文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
フラッシュメモリ2は、不揮発性メモリであり、フラッシュメモリ2内のレジスタとメモリセルアレイとの間でデータの複写を行って、データの書き込み又は読み出しを行う。メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。各メモリセル群は、複数のメモリセルが直列に接続されたものである。ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、データの複写、すなわち、レジスタから選択されたメモリセルへのデータの書き込み(複写)、又は選択されたメモリセルからレジスタへのデータの読み出し(複写)が行われる。つまり、メモリコントローラ3から与えられたデータは、レジスタを介してメモリセルアレイに書き込まれ、メモリセルアレイに記憶されているデータはレジスタを介してメモリコントローラ3に供給される。
メモリセルアレイを構成するメモリセルは、2つゲートを備えたMOSトランジスタによって構成される。ここで、一方のゲートはコントロールゲート、他方のゲートはフローティングゲートとそれぞれ呼ばれている。フローティングゲートに電荷(電子)を注入若しくはフローティングゲートから電荷(電子)を排出することによって、データの書き込み若しくはデータの消去が行われる。
このフローティングゲートは、周囲が絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。なお、フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧がコントロールゲートとフローティングゲートとの間に印加される。また、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧がコントロールゲートとフローティングゲートとの間に印加される。ここで、フローティングゲートに電子が注入されている状態が書き込み状態であり、論理値「0」に対応する。また、フローティングゲートから電子が排出されている状態が消去状態であり、論理値「1」に対応する。
このようなフラッシュメモリ2のアドレス空間は、図2に示したように“ページ”及び“ブロック(物理ブロック)”で構成されている。ページは、フラッシュメモリ2で行われるデータ読み出し動作及びデータ書き込み動作における処理単位である。物理ブロックは、フラッシュメモリ2で行われるデータ消去動作における処理単位であり、複数個のページで構成されている。図2は、大ブロックの場合の構造を示しており、1個のページは、4セクタ(2048バイト)のユーザ領域25と64バイトの冗長領域26とで構成され、1個の物理ブロックは64個のページで構成されている。
尚、小ブロックの場合は、1個のページは、1セクタ(512バイト)のユーザ領域と16バイトの冗長領域とで構成され、1個の物理ブロックは32個のページで構成されている。又、大ブロックの場合は、ユーザ領域25を4分割した512バイトの領域をサブページといい、各サブページに冗長領域26内の一部の領域が割り当てられている。従って、大ブロックの場合、1個の物理ブロックには、256個のサブページが含まれている。
次に、ホストシステム4側のアドレス空間とフラッシュメモリ2側のアドレス空間について図3を参照して説明する。ホストシステム4側のアドレス空間は、図3(a)に示したように、セクタ(512バイト)単位で分割した領域に付けた通番であるLBA(Logical Block Address)で管理されている。メモリコントローラ3内では、複数個のセクタをまとめたものを論理ブロックとして、複数個の論理ブロックをまとめたものを論理ゾーンとしている。ここで、図3(b)に示したように、論理ブロックに付けられた通番を論理ブロック番号(LBN)と言い、論理ゾーンに付けられた通番を論理ゾーン番号(LZN)と言う。また、各論理ゾーンに含まれる論理ブロックの、各論理ゾーン内での通番を論理ゾーン内ブロック番号(LZIBN)と言う。
フラッシュメモリ2側のアドレス空間は、図3(c)に示したように、各物理ブロックに固有の物理ブロックアドレス(PBA)が割り当てられている。さらに、記憶領域を複数のゾーンに分割して管理する場合には、複数個の物理ブロックで物理ゾーンを構成し、各物理ゾーンに固有の物理ゾーン番号(PZN)を割り当てている。各物理ゾーンに含まれる物理ブロックの、各物理ゾーン内での通番を物理ゾーン内ブロック番号(PZIBN)と言う。
また、各論理ゾーンにはそれぞれ1個の物理ゾーンが割り当てられ、論理ゾーンに含まれる各論理ブロックに対応するデータは、その論理ゾーンに割り当てられた物理ゾーンに含まれる物理ブロックに書き込まれる。したがって、1個の論理ブロックに含まれるセクタ数は、1個の物理ブロックに含まれるセクタ領域の個数に応じて設定される。但し、1個の論理ブロックを複数個の物理ブロックに割り当てる場合には、その複数個の物理ブロックを1個の物理ブロックとみなして1個の論理ブロックに含まれるセクタ数を設定する。
図3は、1個の論理ブロックを、256個のサブページで構成さている1個の物理ブロックに割り当てた場合を示している。従って、256セクタが1個の論理ブロックに対応し、LBN#0〜#499の500個の論理ブロックで構成されたLZN#0の論理ゾーンは、LBA#0〜#127999の128000セクタの領域に対応している。LZN#1以降の論理ゾーンについても同様に、LZN#1の論理ゾーンは、LBA#128000〜#255999の128000セクタの領域に対応し、LZN#2の論理ゾーンは、LBA#256000〜#383999の128000セクタの領域に対応し、LZN#3の論理ゾーンは、LBA#384000〜#511999の128000セクタの領域に対応している。
LBN#0〜#499の500個の論理ブロックで構成されたLZN#0の論理ゾーンは、PBA#0〜#511の512個の物理ブロックで構成されたPZN#0の物理ゾーンに割り当てられている。LZN#1以降の論理ゾーンについても同様に、LZN#1の論理ゾーンは、PZN#1の物理ゾーンに割り当てられ、LZN#2の論理ゾーンは、PZN#2の物理ゾーンに割り当てられ、LZN#3の論理ゾーンは、PZN#3の物理ゾーンに割り当てられている。
ここで、物理ゾーンに含まれる物理ブロックの個数を、論理ゾーンに含まれる論理ブロックの個数より多くしているのは、ペアブロック(同一の論理ブロックに対応する新データと旧データが記憶された1対の物理ブロック)を許容するためである。従って、ペアブロックの許容数を多くしたい場合には、物理ゾーンに含まれる物理ブロックの個数を多くすればよい。又、物理ゾーンに含まれる物理ブロックの個数は、データを正常に書き込むことができない不良ブロックが発生した場合等も考慮して設定しなければならない。
尚、本実施の形態では、各物理ブロックには、その物理ブロックに割り当てられた論理ブロックに含まれるセクタに対応するデータをLBAの順番で書き込んでいる。従って、物理ブロックと論理ブロックとの対応関係を管理することにより、ホストシステム4側でLBAで管理されている領域とフラッシュメモリ2内の記憶領域の対応関係を管理することができる。
この物理ブロックと論理ブロックの対応関係は、データの書き込みや消去が行われる毎に変化する。従って、物理ブロックと論理ブロックの対応関係を示すアドレス変換テーブルを作成し、対応関係が変化する毎にアドレス変換テーブルを更新している。このアドレス変換テーブルは、論理ゾーン(論理ゾーンと対応する物理ゾーン)毎に作成される。このアドレス変換テーブルは起動時に作成してもよいが、アクセスの対象になった論理ゾーンについて、その都度作成するようにしてもよい。
アドレス変換テーブルを作成するときは、物理ブロックの先頭ページの冗長領域26に書き込まれる論理ブロックを示す情報(以下、論理アドレス情報という)が読み出される。冗長領域26に書き込まれる論理アドレス情報としては、LBN等の論理ブロックを特定する情報が用いられる。なお、本実施の形態のように論理ゾーンと物理ゾーンとの対応関係が予め設定されている場合は、LZIBNに基づいてアドレス変換テーブルを作成することができるので、LBNよりデータ量の少ないLZIBNを論理アドレス情報として用いることが好ましい。
図6はアドレス変換テーブル31の一例であり、論理ブロックと物理ブロックの対応関係を、LZIBNとPZIBNの対応関係で示している。このアドレス変換テーブル31では、論理ゾーンに含まれるLZIBN#0〜#499の500個の論理ブロックに対応する物理ブロックを、この論理ゾーンに割り当てられている物理ゾーン内の物理ブロックに付けられたPZIBNで示している。
また、物理ブロックの先頭ページの冗長領域26には、その物理ブロックが不良ブロックであるか否かを示すブロックステータス(フラグ)が書き込まれる。更に、冗長領域26の各サブページに割り当てられた領域には、各サブページに書き込まれたユーザデータに対応するエラーコレクションコード(ECC)等の付加情報が書き込まれる。
次に、フラッシュメモリ2に対してアクセス処理を行うメモリコントローラ3について説明する。メモリコントローラ3は、フラッシュメモリ2にデータ、アドレス情報、内部コマンド等を供給することにより読み出し処理、書き込み処理、ブロック消去処理等の各処理を行う。
ここで、内部コマンドとは、メモリコントローラ3がフラッシュメモリ2に処理の実行を指示するためのコマンドであり、フラッシュメモリ2はメモリコントローラ3から与えられる内部コマンドに従って動作する。一方、ホストシステム4からメモリコントローラ3に与えられるコマンドを外部コマンドと言う。
メモリコントローラ3は、図1に示したように、マイクロプロセッサ6と、ホストインターフェースブロック7と、ワークエリア8と、バッファ9と、フラッシュメモリインターフェースブロック10と、ECC(エラー・コレクション・コード)ブロック11と、ROM(Read Only Memory)12とを備えている。これら機能ブロックによって構成されるメモリコントローラ3は、1つの半導体チップ上に集積される。
マイクロプロセッサ6は、ROM12に記憶されているプログラムに従って、メモリコントローラ3の全体の動作を制御する。
また、マイクロプロセッサ6は、ROM12に記憶されているプログラムに基づいてフラッシュメモリインターフェースブロック10等の動作を制御することにより、アドレス管理手段、書込み手段、ペアブロック管理手段、ペアブロック解消手段等の各手段を実現している。
ROM12は、不揮発性の記憶素子であり、マイクロプロセッサ6の動作プログラムの他に、フラッシュメモリインターフェースブロック10の動作プログラムであるシーケンスコマンド等を記憶している。
ワークエリア8は、フラッシュメモリ2の制御に必要なデータが一時的に格納される作業領域であり、複数のSRAM(Static Random Access Memory)セルによって構成される。上述のアドレス変換テーブルは、このワークエリア8上に作成される。
バッファ9は、フラッシュメモリ2から読み出されたデータ及びフラッシュメモリ2に書き込むべきデータを一時的に蓄積する。すなわち、フラッシュメモリ2から読み出されたデータは、ホストシステム4が受け取り可能な状態となるまでバッファ9に保持され、フラッシュメモリ2に書き込むべきデータは、フラッシュメモリ2が書き込み可能な状態となるまでバッファ9に保持される。
ECCブロック11は、フラッシュメモリ2に書き込むデータに付加されるエラーコレクションコードを生成するとともに、読み出しデータに付加されたエラーコレクションコードに基づいて、読み出したデータに含まれる誤りを検出・訂正する。
ホストインターフェースブロック7は、ホストシステム4との間で、外部バス13を介し、データ、アドレス情報、外部コマンド等の授受を行う。ホストシステム4よりフラッシュメモリシステム1に供給されるデータ等は、ホストインターフェースブロック7を入口としてフラッシュメモリシステム1の内部(たとえば、バッファ9)に取り込まれる。また、フラッシュメモリシステム1からホストシステム4に供給されるデータ等は、ホストインターフェースブロック7を出口としてホストシステム4に供給される。
フラッシュメモリインターフェースブロック10は、内部バス14を介して、フラッシュメモリ2とデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。フラッシュメモリインターフェースブロック10は、書き込み処理、読み出し処理等の処理毎に設定されているシーケンスコマンドに従って、各種の処理を実行する。
ホストインターフェースブロック7及びフラッシュメモリインターフェースブロック10は、図4に示したような各種レジスタを備えている。ホストインターフェースブロック7は、コマンドレジスタR1、セクタ数レジスタR2及びLBAレジスタR3等を備えている。フラッシュメモリインターフェースブロック10は、物理ブロックアドレスレジスタR11、セクタ番号レジスタR12、カウンタR13等を備えている。
コマンドレジスタR1、セクタ数レジスタR2及びLBAレジスタR3には、ホストシステム4から与えられる情報が書き込まれる。コマンドレジスタR1には、書き込みコマンド、読み出しコマンド等の外部コマンドが書き込まれる。セクタ数レジスタR2にはアクセス対象領域のセクタ数が書き込まれる。LBAレジスタR3には、アクセス対象領域の先頭のLBAが書き込まれる。
物理ブロックアドレスレジスタR11、セクタ番号レジスタR12及びカウンタR13には、セクタ数レジスタR2及びLBAレジスタR3に書き込まれた情報に基づいて、アクセスする物理ブロックの物理ブロックアドレス(PBA)、アクセスを開始するサブページの番号(0〜255)、アクセスするセクタ数(サブページの数)が設定される。
ここで、物理ブロックアドレスレジスタR11、セクタ番号レジスタR12及びカウンタR13に設定される物理ブロックアドレス(PBA)、サブページの番号及びセクタ数(サブページの数)について説明する。図3に示したように、1個の論理ブロックに、LBAが連続する256セクタの領域を含んでいる場合、LBAの下位8ビットは論理ブロックに含まれるセクタに付けられた通番(以下、セクタ番号(SN)と言う)に対応する。一方、この下位8ビットを除いた上位側のビットは、論理ブロックに付けられた通番である論理ブロック番号(LBN)に対応する。
物理ブロックアドレスレジスタR11には、LBAレジスタR3及びセクタ数レジスタR2に書き込まれた情報に基づいて求めた論理ブロック番号(LBN)で特定される論理ブロックと対応する物理ブロックの物理ブロックアドレス(PBA)又は空きブロックの物理ブロックアドレス(PBA)が設定される。ここで、空きブロックの物理ブロックアドレス(PBA)が設定されるのは、データの書換え等を行う場合、つまり、空きブロックに書替えデータを書き込む場合である。
次に、セクタ番号(SN)とサブページ番号の対応関係について説明する。本実施の形態では、論理ブロックに含まれる各セクタに対応するデータをLBAの順番で物理ブロック内のサブページに書き込んでいる。従って、物理ブロック内の256個のサブページに付けられた通番であるサブページ番号(0〜255)とセクタ番号(SN)は、同じ番号同士が対応する。つまり、セクタ番号#0に対応するデータは、サブページ番号#0のサブページに書き込まれ、セクタ番号#1に対応するデータは、サブページ番号#1のサブページに書き込まれ、セクタ番号#2に対応するデータは、サブページ番号#2のサブページに書き込まれる。
セクタ番号(SN)とサブページ番号がこのような対応関係になっているため、セクタ番号レジスタR12には、LBAレジスタR3及びセクタ数レジスタR2に書き込まれた情報に基づいて求めたアクセス対象領域の先頭セクタのセクタ番号(SN)が設定される。つまり、LBAレジスタR3及びセクタ数レジスタR2に書き込まれた情報に基づいて求めたアクセス対象領域の先頭セクタのセクタ番号(SN)は、アクセスを開始するサブページのサブページ番号に一致する。
カウンタR13には、LBAレジスタR3及びセクタ数レジスタR2に書き込まれた情報に基づいて求めたアクセス対象領域に含まれるセクタ数が設定される。つまり、アクセス対象領域に含まれるセクタ数は、アクセスされるサブページの個数に一致する。
尚、LBAレジスタR3及びセクタ数レジスタR2に設定された情報に基づいて特定されるアクセス対象領域が複数の論理ブロックに跨っている場合には、そのアクセス対象領域と対応する物理ブロックも複数の物理ブロックに跨っているので、物理ブロックアドレスレジスタR11、セクタ番号レジスタR12、カウンタR13に対する情報の設定は論理ブロック毎に行われる。
フラッシュメモリインターフェースブロック10は、このようにして物理ブロックアドレスレジスタR11、セクタ番号レジスタR12及びカウンタR13に設定された値に基づいて書き込み処理や読み出し処理を実行する。
書き込み処理では、1セクタのデータがバッファ9からフラッシュメモリ2に供給される毎にセクタ番号レジスタR12に設定されている値がインクリメント(1ずつ増加)され、カウンタR13に設定されている値がデクリメント(1ずつ減少)される。カウンタR13に設定されている値が0になったときに書き込み処理が終了する。従って、セクタ番号レジスタR12に最初に設定された値に対応するサブページからカウンタR13に最初に設定された値に対応するサブページ分のデータが書き込まれる。
同様に、読み出し処理では、1セクタのデータがフラッシュメモリ2からバッファ9に読み出される毎にセクタ番号レジスタR12に設定されている値がインクリメント(1ずつ増加)され、カウンタR13に設定されている値がデクリメント(1ずつ減少)される。カウンタR13に設定されている値が0になったときに読み出し処理が終了する。従って、セクタ番号レジスタR12に最初に設定された値に対応するサブページからカウンタR13に最初に設定された値に対応するサブページ分のデータが読み出される。
例えば、セクタ番号レジスタR12に「10」を設定し、カウンタR13に「8」を設定して書き込み処理を開始した場合、サブページ番号#10〜#17のサブページにユーザデータが書き込まれる。
次に空きブロック検索について説明する。フラッシュメモリに記憶されているデータを書き替えるときには、書換えデータを元のデータが記憶されていた物理ブロックとは別の物理ブロックに書き込んでいる。従って、フラッシュメモリに記憶されているデータを書き替えるときには、書換えデータの書き込み先になる空きブロックの検索が行われる。図5は、空きブロックを検索するときに用いられる空きブロック検索テーブル33の一例を示している。
この空きブロック検索テーブル33は、64バイト(512ビット)のデータから構成され、物理ゾーンに含まれる物理ブロックの使用状況を各ビットの論理値で示している。つまり、各ビットが物理ゾーンに含まれる1個の物理ブロックに対応しており、空きブロックに対応するビットには論理値「1」が設定されている。データが書き込まれている物理ブロックに対応するビットと、不良ブロックに対応するビットには論理値「0」が設定されている。
図5では、一番上の行の8ビット(1バイト)は、下位側から順番にPZIBN#0〜#7の物理ブロックの使用状況を示している。以下同様に、二番目の行は、PZIBN#8〜#15の物理ブロックの使用状況を示し、三番目の行は、PZIBN#16〜#23の物理ブロックの使用状況を示している。そして、一番下の行は、PZIBN#504〜#511の物理ブロックの使用状況を示している。従って、一番上の行の最下位ビットはPZIBN#0の物理ブロックの使用状況を示し、一番下の行の最上位ビットはPZIBN#511の物理ブロックの使用状況を示している。
この空きブロック検索テーブル33を用いて空きブロックを検索する場合は、各行の1バイトのデータを上の行から順番に読み出していき、読み出したデータが0(2進数表示:0000 0000)でないときは、そのデータをシフトレジスタに書き込み、シフトレジスタを下位方向にシフトさせる。何回のシフトでキャリーが発生したかにより、下位から何ビット目が「1」であるかを判別する。例えば、4番目の行(PZIBN#24〜#31)の0001 1000(2進数表示)をシフトレジスタに書き込み、シフトレジスタを下位方向にシフトさせた場合は、4回のシフトでキャリーが発生するので、下位側から4ビット目に対応するPZIBN#27の物理ブロックが空きブロックとして検出される。
また、次回の空きブロック検索では、4番目の行の下位側から5ビット目のビットから検索が開始される。このように下位側から5ビット目のビットから検索が開始する場合は、シフトレジスタにデータを設定する前に、設定するデータの下位4ビットが「0」になるようなマスク処理が施される。
尚、検出した空きブロックにデータを書き込んだときには、その物理ブロックに対応する空きブロック検索テーブル33上のビットが「1」から「0」に書き換えられる。又、データの書替えで、元のデータが記憶されていた物理ブロックの記憶データを消去したときには、その物理ブロックに対応する空きブロック検索テーブル33上のビットが「0」から「1」に書き換えられる。一方、アドレス変換テーブル(論理ブロックと物理ブロックの対応関係をLZIBNとPZIBNの対応関係で示したアドレス変換テーブル)については、書き込んだデータに対応する論理ブロックのLZIBNと対応関係にあるPZIBNが、元のデータが記憶されていた物理ブロックのPZIBNから書換えデータを書き込んだ物理ブロックのPZIBNに変更する。
次に、本発明に係るペアブロックの管理について説明する。このペアブロックは、同一の論理ブロックに対応する2個の物理ブロックである。上述のように、フラッシュメモリ2に記憶されているデータを書き換える場合には、元のデータが記憶されている物理ブロック(第1の物理ブロック)とは別の物理ブロック(第2の物理ブロック)に書換えデータが書き込まれる。ここで、書換え範囲に含まれるサブページの後に、書換え範囲に含まれないサブページがあった場合、この書換え範囲に含まれないサブページについては、第1の物理ブロックから第2の物理ブロックへのデータの転送(複写)を行わずに、同一の論理ブロックに対応する2個の物理ブロック(第1の物理ブロックと第2の物理ブロック)を並存させている。ここで、ペアブロックに記憶されているLBAが同一のデータ(サブページ番号が同一のサブページに記憶されているデータ)については、第2の物理ブロックに記憶されているデータが優先され、第1の物理ブロックにだけ記憶されているデータについては、第1の物理ブロックに記憶されているデータが有効になる。
このようにすることにより、アクセス対象領域が連続する書き込み指示がホストシステム側から与えられた場合、つまり、ホストシステム側から与えられた書き込み指示に基づいた書換え範囲が連続している場合に、第1の物理ブロックから第2の物理ブロックへの無駄なデータの転送(複写)を行わずに、第2の物理ブロックに対して書換えデータを継続して書き込むことができる。しかし、ペアブロックの数が多くなりすぎると、空きブロックを確保することができなくなる。
そこで、本発明に係るペアブロックの管理では、このペアブロックの最大数を設定し、ペアブロックの組数(ペア数)が最大数に達したときに、最も古いペアブロック(ペアブロック状態になった順番が最先のペアブロック)の第1の物理ブロックにだけ記憶されているデータについて、第1の物理ブロックから第2の物理ブロックへのデータの転送(複写)を行い、このデータの転送(複写)が終了した後に、第1の物理ブロックの記憶データを消去して、ペアブロックの組数(ペア数)が所定の最大数を超えないように管理している。
このペアブロックを管理する方法について図7〜図10を参照しながら説明する。尚、本実施の形態では、ペアブロックの最大数を2としている。又、ペアブロックの新旧関係(ペアブロック状態になった順番の先後関係)を判断するために、物理ブロックの先頭ページの冗長領域に2ビットのペアブロックシリアル番号(#0〜#3)を書き込んでいる。このペアブロックシリアル番号のビット数については、ペアブロックの最大数に応じて適宜設定する。例えば、ペアブロックの最大数が3以下であれば、2ビットのペアブロックシリアル番号でペアブロックの新旧関係を判断することができるが、ペアブロックの最大数が4の場合は、ペアブロックシリアル番号を3ビット(#0〜#7)にしなければ、ペアブロックの新旧関係を判断することができなくなる。
又、以下の説明では、ホストシステム4から与えられる書込み(書換え)の指示に基づいたアクセス対象領域は、LZN#0の論理ゾーンに含まれるものとして説明する。このLZN#0の論理ゾーンについては、図6に示したようなアドレス変換テーブル31及び図5に示したような空きブロック検索テーブル33が作成されているものとする。又、以下の処理を開始する時点では、ペアブロックは存在せず、後述するペアブロックテーブルには、何の情報も設定されていないものとする。
まず、ホストシステムから与えられた書込み(書換え)の指示に基づいたアクセス対象領域が、LBN#0(=LZIBN#0)の論理ブロックのSN#64〜#159の96セクタの領域であった場合の書込み(書換え)処理について説明する(図7(a)に示した*1)。
まず、アドレス変換テーブル31を参照することにより、LZIBN#0(=LBN#0)の論理ブロックに対応するデータがPZIBN#22(=PBA#22)の物理ブロックに記憶されていることが分かる。更に、後述するペアブロックテーブルを参照することにより、ペアブロックは存在しないことが分かる。
続いて、PZIBN#22(=PBA#22)の物理ブロックの書込み状態を調べ、全てのサブページにデータが書き込まれているため、空きブロック検索テーブル33を用いた空きブロック検索が行われる。この空きブロック検索で、PZIBN#27(=PBA#27)が検出され、このPBA#27(PZIBN#27)の物理ブロックに対する書込み(書換え)処理が開始される。
この書込み(書換え)処理では、まず、PZIBN#22(=PBA#22)の物理ブロックのサブページ番号#0〜#63のサブページに記憶されているデータが、PZIBN#27(=PBA#27)の物理ブロックのサブページ番号#0〜#63のサブページに転送(複写)される。続いて、ホストシステム4から与えられるLBN#0(=LZIBN#0)の論理ブロックのSN#64〜#159のセクタに対応する書換えデータ(書換えデータA)が、PZIBN#27(=PBA#27)の物理ブロックのサブページ番号#64〜#159のサブページに書き込まれる。
尚、この書込み(書換え)処理を開始する時点でペアブロックは存在しないので、PZIBN#27(=PBA#27)の物理ブロックの冗長領域には、ペアブロックシリアル番号として#0が書き込まれる。又、同一の論理ブロックに対応するPZIBN#22(=PBA#22)の物理ブロックとPZIBN#27(=PBA#27)の物理ブロックの新旧関係を判断するため、PZIBN#27(=PBA#27)の物理ブロックの冗長領域にシリアル番号が書き込まれる。PZIBN#27(=PBA#27)の物理ブロックに書き込まれるシリアル番号は、PZIBN#22(=PBA#22)の物理ブロックに書き込まれているシリアル番号をインクリメント(1を加算)した#1になる。又、空きブロック検索テーブル33のPZIBN#27(=PBA#27)の物理ブロックに対応するビットの論理値が「1」から「0」に書き換えられる。
この後、アクセス対象領域にLBN#0(=LZIBN#0)の論理ブロックのSN#160以降のセクタが含まれる書込み(書換え)の指示が与えられた場合は、PZIBN#27(=PBA#27)の物理ブロックのサブページ番号#160以降のサブページに対してその書込み(書換え)処理が続行される。従って、PZIBN#22(=PBA#22)の物理ブロックのサブページ番号#160〜#255のサブページに記憶されているデータを、PZIBN#27(=PBA#27)の物理ブロックのサブページ番号#160〜#255のサブページに転送(複写)する、データの転送(複写)を行わない。つまり、書換え範囲に含まれるサブページの後に、書換え範囲に含まれないサブページがあった場合、この書換え範囲に含まれないサブページについては、書換え対象でない記憶データの転送(複写)を行わない。
ここで、PZIBN#22(=PBA#22)の物理ブロックとPZIBN#27(=PBA#27)の物理ブロックがペアブロックになるため、ペアブロックテーブルにペアブロックを管理するための情報が設定される。
図8はペアブロックテーブル32の一例であり、このペアブロックテーブル32には、ペアブロックと対応関係にある論理ブロックのLZIBN、ペアブロックの新旧関係が新しい方の物理ブロックのPZIBN、及び新旧関係が新しい方の物理ブロックに書き込まれたペアブロックシリアル番号が設定される。ここでは、図8(a)に示したように、PZIBN#22(=PBA#22)の物理ブロック及びPZIBN#27(=PBA#27)の物理ブロックと対応関係にある論理ブロックのLZIBNである#0、新旧関係が新しい方の物理ブロックのPZIBNである#27、PZIBN#27(=PBA#27)の物理ブロックの冗長領域に書き込んだペアブロックシリアル番号である#0をそれぞれ設定する。
次に、ホストシステムから与えられた書込み(書換え)の指示に基づいたアクセス対象領域が、LBN#2(=LZIBN#2)の論理ブロックのSN#32〜#127の96セクタの領域であった場合の書込み(書換え)処理について説明する(図7(b)に示した*2)。
この書込み(書換え)処理の場合も、まず、アドレス変換テーブル31とペアブロックテーブルが参照される。アドレス変換テーブル31を参照することにより、LZIBN#2(=LBN#2)の論理ブロックに対応するデータがPZIBN#6(=PBA#6)の物理ブロックに記憶されていることが分かる。更に、ペアブロックテーブル32を参照することにより、ペアブロックが存在し、そのペアブロックに対応するペアブロックシリアル番号が#0であることが分かる。
続いて、PZIBN#6(=PBA#6)の物理ブロックの書込み状態を調べ、全てのサブページにデータが書き込まれいるため、空きブロック検索テーブル33を用いた空きブロック検索が行われる。この空きブロック検索で、PZIBN#28(=PBA#28)が検出され、このPBA#28(PZIBN#28)の物理ブロックに対する書込み(書換え)処理が開始される。
この書込み(書換え)処理では、まず、PZIBN#6(=PBA#6)の物理ブロックのサブページ番号#0〜#31のサブページに記憶されているデータが、PZIBN#28(=PBA#28)の物理ブロックのサブページ番号#0〜#31のサブページに転送(複写)される。続いて、ホストシステム4から与えられるLBN#2(=LZIBN#2)の論理ブロックのSN#32〜#127のセクタに対応する書換えデータ(書換えデータB)が、PZIBN#28(=PBA#28)の物理ブロックのサブページ番号#32〜#127のサブページに書き込まれる。
尚、PZIBN#28(=PBA#28)の物理ブロックの冗長領域には、シリアル番号として#0が書き込まれ、ペアブロックシリアル番号として#1が書き込まれる。ここで、PZIBN#28(=PBA#28)の物理ブロックの冗長領域に書き込まれるシリアル番号は、PZIBN#6(=PBA#6)の物理ブロックの冗長領域に書き込まれているシリアル番号をインクリメント(1を加算)した番号になる。又、PZIBN#28(=PBA#28)の物理ブロックの冗長領域に書き込まれるペアブロックシリアル番号は、PZIBN#27(=PBA#27)の物理ブロックの冗長領域に書き込まれているペアブロックシリアル番号をインクリメント(1を加算)した番号になる。又、空きブロック検索テーブル33のPZIBN#28(=PBA#28)の物理ブロックに対応するビットの論理値は、「1」から「0」に書き換えられる。
ここで、PZIBN#6(=PBA#6)の物理ブロックとPZIBN#28(=PBA#28)の物理ブロックがペアブロックになるため、ペアブロックが2つになる。従って、PZIBN#6(=PBA#6)の物理ブロックとPZIBN#28(=PBA#28)の物理ブロックからなるペアブロックの情報をペアブロックテーブル32に設定するためには、ペアブロックテーブルに設定されているPZIBN#22(=PBA#22)の物理ブロックとPZIBN#27(=PBA#27)の物理ブロックのペアブロック状態を解消しなければならない。このペアブロック状態を解消するため、図7(a)の*3に示したデータの転送(複写)を行わなければならない。
このデータの転送(複写)では、PZIBN#22(=PBA#22)の物理ブロックのサブページ番号#160〜#255のサブページに記憶されているデータが、PZIBN#27(=PBA#27)の物理ブロックのサブページ番号#160〜#255のサブページに転送(複写)される。このデータの転送(複写)が終了した後、PZIBN#22(=PBA#22)の物理ブロックの記憶データが消去される。又、アドレス変換テーブル31のLZIBN#0に対応するPZIBNは#22から#27に書き換えられ、空きブロック検索テーブル33のPZIBN#22(=PBA#22)の物理ブロックに対応するビットの論理値は0から1に書き換えられる。
一方、ペアブロックテーブル32には、図8(b)に示したようにPZIBN#6(=PBA#6)の物理ブロックとPZIBN#28(=PBA#28)の物理ブロックからなるペアブロックの情報が設定される。つまり、PZIBN#6(=PBA#6)の物理ブロック及びPZIBN#28(=PBA#28)の物理ブロックと対応関係にある論理ブロックのLZIBNである#2、新旧関係が新しい方の物理ブロックのPZIBNである#28、PZIBN#28(=PBA#28)の物理ブロックの冗長領域に書き込んだペアブロックシリアル番号である#1をそれぞれ設定する。
次に、LBN#1(=LZIBN#1)の論理ブロックのSN#64〜#255の192セクタの領域に対する書込み(書換え)の指示がホストシステムから与えられた場合について説明する(図9(b)に示した*4)。
この書込み(書換え)処理は、ペアブロック状態を解消するためのデータの転送(複写)(図7(a)の*3)が終了した後に開始される。従って、この書換え処理を開始するときに存在するペアブロックは、PZIBN#6(=PBA#6)の物理ブロックとPZIBN#28(=PBA#28)の物理ブロックからなるペアブロック(図9(a))だけである。
この書込み(書換え)処理の場合も、まず、アドレス変換テーブル31とペアブロックテーブルが参照される。アドレス変換テーブル31を参照することにより、LZIBN#1(=LBN#1)の論理ブロックに対応するデータがPZIBN#12(=PBA#12)の物理ブロックに記憶されていることが分かる。更に、ペアブロックテーブル32を参照することにより、ペアブロックが存在し、そのペアブロックに対応するペアブロックシリアル番号が#1であることが分かる。
続いて、PZIBN#12(=PBA#12)の物理ブロックの書込み状態を調べ、全てのサブページにデータが書き込まれいるため、空きブロック検索テーブル33を用いた空きブロック検索が行われる。この空きブロック検索で、PZIBN#50(=PBA#50)が検出され、このPBA#50(PZIBN#50)の物理ブロックに対する書込み(書換え)処理が開始される。
この書込み(書換え)処理では、まず、PZIBN#12(=PBA#12)の物理ブロックのサブページ番号#0〜#63のサブページに記憶されているデータが、PZIBN#50(=PBA#50)の物理ブロックのサブページ番号#0〜#63のサブページに転送(複写)される。続いて、ホストシステム4から与えられるLBN#1(=LZIBN#1)の論理ブロックのSN#64〜#255のセクタに対応する書換えデータ(書換えデータC)が、PZIBN#50(=PBA#50)の物理ブロックのサブページ番号#64〜#255のサブページに書き込まれる。
尚、PZIBN#50(=PBA#50)の物理ブロックの冗長領域には、シリアル番号として#3が書き込まれ、ペアブロックシリアル番号として#2が書き込まれる。ここで、PZIBN#50(=PBA#50)の物理ブロックの冗長領域に書き込まれるシリアル番号は、PZIBN#12(=PBA#12)の物理ブロックの冗長領域に書き込まれているシリアル番号をインクリメント(1を加算)した番号になる。又、PZIBN#50(=PBA#50)の物理ブロックの冗長領域に書き込まれるペアブロックシリアル番号は、PZIBN#28(=PBA#28)の物理ブロックの冗長領域に書き込まれているペアブロックシリアル番号をインクリメント(1を加算)した番号になる。又、空きブロック検索テーブル33のPZIBN#50(=PBA#50)の物理ブロックに対応するビットの論理値は、「1」から「0」に書き換えられる。
この書込み(書換え)処理が終了したときにPZIBN#12(=PBA#12)の物理ブロックに記憶されている全てのデータは、PZIBN#50(=PBA#50)の物理ブロックに記憶されているデータで置き換えられているので、アドレス変換テーブル31は更新されるが、ペアブロックテーブル32は更新されない。つまり、この書込み(書換え)処理が終了した後にPZIBN#12(=PBA#12)の物理ブロックに記憶されているデータが消去され、アドレス変換テーブル31のLZIBN#1に対応するPZIBNは#12から#50に書き換えられ、空きブロック検索テーブル33のPZIBN#12(=PBA#12)の物理ブロックに対応するビットの論理値は0から1に書き換えられる。
この後、更にホストシステムから書込み(書換え)の指示が与えられた場合、ホストシステム4から与えられる書換えデータが書込まれる物理ブロックの冗長領域には、ペアブロックテーブル32に設定されているペアブロックシリアル番号をインクリメント(1を加算)した番号、つまり、PZIBN#28(=PBA#28)の物理ブロックの冗長領域に書き込まれているペアブロックシリアル番号をインクリメント(1を加算)した番号が書き込まれる。
以上に説明した実施の形態では、ペアブロックの最大数を2としため、ペアブロックテーブル32に設定される情報(LZIBN、PZIBN及びペアブロックシリアル番号)は1組であったが、ペアブロックの最大数をnとした場合は、ペアブロックテーブル32に設定できる情報をn−1組とすればよい。例えば、ペアブロックの最大数を3とした場合は、図10に示したようにペアブロックテーブル32には2組までの情報が設定される。
図10に示したようにペアブロックテーブル32に2組の情報が設定されていた場合において、新たなペアブロックの新旧関係が新しい方の物理ブロックの冗長領域には、順番が後のペアブロックシリアル番号をインクリメント(1を加算)した番号が書き込まれる。つまり、図10に示したようにペアブロックテーブル32に設定されているペアブロックシリアル番号が#3と#0の場合には、#0をインクリメント(1を加算)した#1が新たなペアブロックの新旧関係が新しい方の物理ブロックの冗長領域に書き込まれる。
又、新たなペアブロックができた場合には、順番が先のペアブロックシリアル番号に対応するペアブロックのペアブロック状態が解消される。つまり、図10に示したようにペアブロックテーブル32に設定されているペアブロックシリアル番号が#3と#0の場合には、LZIBN#7の論理ブロックに対応するペアブロックのペアブロック状態が解消される。
以上に説明したように、本発明のメモリコントローラ、メモリコントローラを備えるフラッシュメモリ、並びに、フラッシュメモリの制御方法においては、ペアブロックの組数及びペアブロックの新旧関係(ペアブロック状態になった順番の先後関係)を管理し、ペアブロックの組数が予め設定した最大数に達したときに、一番古いペアブロック(ペアブロック状態になった順番が最先のペアブロック)のペアブロック状態を解消している。従って、ペアブロック間の無駄な記憶データの転送(複写)を減少させるという効果を維持しつつ、ペアブロックの増加に伴う空きブロック数の減少を所定の範囲内に抑えることが可能となる。
尚、本発明のメモリコントローラ、メモリコントローラを備えるフラッシュメモリ、並びに、フラッシュメモリの制御方法は上述した実施の形態に限定されず、特許請求の範囲に記載した範囲で様々の変形や改良が可能である。例えば、ペアブロックシリアル番号、ペアブロックテーブル等は、ペアブロック状態になった順番の先後関係を判別できれば、様々の変形や改良が可能である。