以下、本発明の実施例を図面を参照しつつ詳細に説明する。
図1は、本発明に係る半導体メモリの制御装置を含む記憶装置を備えた情報処理システムを示すブロック図である。図1に示すように、かかる情報処理システムは、ホスト情報処理装置1及び記憶装置2を含む。
ホスト情報処理装置1は、記憶装置2に記憶されているデータ(後述する)、又は外部供給されたデータに基づいて各種情報処理を行いつつ、データを書き込ませるべき書込命令、書込先のアドレス及び書込用データ、或いは、データの読み出しを促す読出命令及び読出元のアドレスを記憶装置2に供給する。
記憶装置2は、ホストインターフェース(以下、ホストIFと称する)部21、メモリアクセスバス22、CPU(Central Processing Unit)23、メモリ制御部24及びNAND型のフラッシュメモリ25を有する。
ホストIF部21は、ホスト情報処理装置1から供給された書込命令、読出命令、アドレス及び書込用データを受け、これらをメモリアクセスバス22を介してCPU23に供給する。また、ホストIF部21は、メモリ制御部24から送出された読出データRDD(後述する)をメモリアクセスバス22を介して受け、これをホスト情報処理装置1に供給する。CPU23は、メモリアクセスバス22を介して供給された書込命令、アドレス及び書込用データに応じて、このアドレスに書込用データを書き込ませるべきメモリ書込制御信号を生成し、これをメモリアクセスバス22を介してメモリ制御部24に供給する。また、CPU23は、メモリアクセスバス22を介して供給された読出命令及びアドレスに応じて、そのアドレスからデータの読み出しを行わせるべきメモリ読出制御信号を生成し、これをメモリアクセスバス22を介してメモリ制御部24に供給する。
メモリ制御部24は、誤り訂正符号化部240、誤り検出訂正部241、0誤りカウンタ242、1誤りカウンタ243、レジスタ244及び判定部245の如きモジュールを含む。
誤り訂正符号化部240は、上記したメモリ書込制御信号に応じて、このメモリ書込制御信号にて示される書込用データに対して、例えばBCH符号の如き誤り訂正符号を付加して誤り訂正符号化した書込データWDを生成し、これをレジスタ244に記憶する。
誤り検出訂正部241は、フラッシュメモリ25から読み出された読出データRDに対して誤り検出処理を施す。ここで、読出データRDのビット系列中に誤りビットが検出された場合には、誤り検出訂正部241は、その誤りビットの論理レベルを検出する。
この際、誤り検出訂正部241は、読出データRDのビット系列中から論理レベル0の誤りビット、つまり、本来、論理レベル1であるべきところ、論理レベル0の誤った状態となっているビット、いわゆる「0誤り」が生じたビットを検出する度に0誤り検出パルスを発生しこれを0誤りカウンタ242に供給する。また、誤り検出訂正部241は、読出データRDのビット系列中から論理レベル1の誤りビット、つまり、本来、論理レベル0であるべきところ、論理レベル1の誤った状態となっているビット、いわゆる「1誤り」が生じたビットを検出する度に1誤り検出パルスを発生しこれを1誤りカウンタ243に供給する。そして、誤り検出訂正部241は、読出データRDに誤りが存在するもののその誤りを訂正することが可能である場合には、かかる読出データRDに対して誤り訂正処理を施し、誤り訂正されたデータを図2に示すように読出データRDDとしてレジスタ244に記憶する。尚、フラッシュメモリ25から読み出された読出データRDに誤りが無かった場合には、誤り検出訂正部241は、この読出データRDを読出データRDDとしてレジスタ244に記憶する。すなわち、読出データRDの内で有効なデータだけが読出データRDDとしてレジスタ244に記憶されるのである。
0誤りカウンタ242は、上記した0誤り検出パルスが供給された数をカウントし、そのカウント値を、0誤り発生数EG0としてレジスタ244に記憶する。すなわち、0誤りカウンタ242は、読出データRDのビット系列中において「0誤り」が生じたビットの数をカウントし、その「0誤り」の数を示す0誤り発生数EG0をレジスタ244に記憶するのである。
1誤りカウンタ243は、上記した1誤り検出パルスが供給された数をカウントし、そのカウント値を、1誤り発生数EG1としてレジスタ244に記憶する。すなわち、1誤りカウンタ243は、読出データRDのビット系列中において「1誤り」が生じたビットの数をカウントし、その「1誤り」の数を示す1誤り発生数EG1をレジスタ244に記憶するのである。
メモリ制御部24は、これらモジュールの動作を反映させて、メモリ書込制御信号又はメモリ読出制御信号に応じたフラッシュメモリ25へのアクセス(データ書込、読出、消去)を、例えば4キロバイト又は8キロバイト分のメモリセルからなるページ単位、又は64ページ分からなるブロック単位で行う。すなわち、メモリ制御部24は、メモリ書込制御信号に応じて、先ず、書込対象となるページを含むブロック内の全てのメモリセルの状態を論理レベル1の状態に設定するという、データ消去を行う。次に、メモリ制御部24は、レジスタ244に記憶されている書込データWDと共にこのメモリ書込制御信号にて指定されたアドレス、及びデータ書込を促す書込指令信号をフラッシュメモリ25に供給する。これにより、フラッシュメモリ25は、書込データWDが論理レベル0を示す場合には、アドレスによって指定されたページ内のメモリセルを論理レベル1の状態(データの消去状態)から論理レベル0の状態に遷移させるべき書込駆動(例えば電荷注入又は電荷放出)を実施する。一方、書込データWDが論理レベル1、つまりデータ消去状態と同一論理レベルを示す場合には、メモリセルに対するアクセスは行わない。かかる動作により、フラッシュメモリ25は、指定されたアドレスに上記書込データWDを書き込む。更に、メモリ制御部24は、書込データWDが書き込まれたページと、その書込日時又は
全ページ内での書込順序を示す情報とを対応付けて示す書込順序管理情報TMを生成し、これを図2に示すようにレジスタ244に記憶する。
また、メモリ制御部24は、メモリアクセスバス22を介してメモリ読出制御信号が供給された場合には、このメモリ読出制御信号にて指定されたアドレスをフラッシュメモリ25に供給しつつ、データ読出を促す読出指令信号をフラッシュメモリ25に供給する。これにより、フラッシュメモリ25は、指定されたアドレスに記憶されている書込データWDを読みだし、これを上記した読出データRDとしてメモリ制御部24に供給する。尚、書込データWD及び読出データRD各々のビット長は、誤り訂正符号としての単位ブロック長、或いは、NAND型フラッシュメモリとしての1ページ分のビット長等である。
その後、1つの読出データRDに対する、誤り検出訂正部241での誤り検出及び訂正処理、及び上記した0誤りカウンタ242及び1誤りカウンタ243でのカウント動作が終了すると、判定部245は、レジスタ244に記憶されている1誤り発生数EG1が0誤り発生数EG0よりも大であるか否かの判定を行う。この際、1誤り発生数EG1が0誤り発生数EG0よりも大であると判定された場合に、判定部245は、この読出データRDが、書込時の電源遮断によって破壊された無効データであると判断する。
上記した動作の終了後、メモリ制御部24は、レジスタ244に記憶されている有効データとしての読出データRDDを、メモリアクセスバス22を介してホストIF部21に送出する。これにより、フラッシュメモリ25から読み出された読出データがホスト情報処理装置1に送出される。一方、無効データであると判断した読出データRDに対しては、メモリ制御部24は、ホスト情報処理装置1への送信は行わない。尚、メモリ制御部24は、この無効データであると判断した読出データRDが格納されていたページ又はブロックに対して、後述するが如きリフレッシュ処理を実施する。
このように、メモリ制御24は、フラッシュメモリ25に対してデータ書込を行うにあたり、書込データWDが論理レベル0である場合には、フラッシュメモリ25内のメモリセルを論理レベル1の状態(データ消去状態)から論理レベル0の状態に遷移させるべき書込駆動(例えば電荷注入又は電荷放出)を実施する。ところが、上記した書込駆動中に電源遮断が生じると、メモリセルの状態が論理レベル1の状態(データ消去状態)から論理レベル0の状態に遷移する前に、メモリセルへの電荷注入又は電荷放出動作が中断してしまう。よって、このメモリセルは、本来、論理レベル0の状態に書き込みが為されるべきところを、論理レベル0の状態にまで完全に書き込みきれない。この際、かかるメモリセルからデータを読み出すと、正しく論理レベル0が読み出される場合と、誤って論理レベル1が読み出される場合とが混在する不安定な状態となる。従って、このメモリセルから読み出されたデータに誤りが生じている場合には、本来、論理レベル0であるべきところ、論理レベル1の誤った状態で読み出されてしまうという、いわゆる「1誤り」が生じる可能性が高くなる。
従って、データ書込中に電源遮断が生じた状況で書き込まれたデータを読み出して、誤り検出を行うと、検出された全ての誤りビットの内で「1誤り」となっているビットの数が、「0誤り」となっているビットの数よりも多くなる。
そこで、メモリ制御部24の判定部245では、1誤り発生数EG1の方が0誤り発生数EG0よりも大なる場合には、この読出データRDを、書込時の電源遮断によって破壊された無効データであると判断するのである。
尚、データ書込中に電源遮断が生じた状況で書き込まれたデータを読み出すと、実際には、読出データRDのビット系列中に生じる全ての誤りビットの中で、「1誤り」の割合が「0誤り」の割合に比して大幅(例えば9:1)に多くなる。そこで、判定部245は、0誤り発生数EG0に電源遮断判定用シフト値SVを加算した値(EG0+SV)よりも1誤り発生数EG1の方が大なる場合に、この読出データRDを、書込時の電源遮断によって破壊された無効データであると判断するようにしても良い。また、判定部245は、読出データRDのビット系列中に生じる全誤りビットの内で、「1誤り」のビット数の割合が電源遮断判定閾値(例えば90%)より大となる場合に、この読出データRDを、書込時の電源遮断によって破壊された無効データであると判断するようにしても良い。要するに、データ書込中に電源遮断が生じた状況で書き込まれたデータを読み出すと、実際には読出データRDのビット系列中に生じる全ての誤りビットの中で、「1誤り」の割合が「0誤り」の割合に比して大幅に多くなることに鑑みて、判定部245にて上記の如き判定を行うようにするのである。
よって、メモリ制御部24によれば、1回分の読み出しにより、その読出データが書込処理中の電源遮断によって破壊されたデータであるか否かを検出することができ、このデータを無効データとして管理することが可能となる。これにより、書込処理中の電源遮断に起因して、1アドレスから不正なデータが読み出される場合と、正常又は訂正可能なデータが読み出される場合とが混在してしまう不安定な状態が回避される。
従って、本発明によれば、書込処理中の電源遮断により、破壊されたデータがメモリに書き込まれてしまっても、読出データの信頼性低下を抑えることが可能となり、システム全体の安定化が図られるようになる。
ここで、記憶装置2では、その記憶媒体としてNAND型のフラッシュメモリ25を用いていることから、リードディスターブ、リテンション、或いは書込中の電源遮断等に起因するデータ破壊が生じる。そこで、メモリ制御部24は、定期的又は読出動作時に、データの再書込、いわゆるリフレッシュ処理を行う。
図3は、フラッシュメモリ25からの読出データRDの読み出し動作に応じて、メモリ制御部24が実行するリフレッシュ制御ルーチンを示すフローチャートである。尚、かかるリフレッシュ制御ルーチンは、フラッシュメモリ25から読み出された読出データRDに対する、誤り検出訂正部241での誤り検出及び訂正処理、及び0誤りカウンタ242及び1誤りカウンタ243でのカウント動作が終了した後にメモリ制御部24によって実施されるものである。
図3において、先ず、メモリ制御部24は、レジスタ244に記憶されている0誤り発生数EG0と1誤り発生数EG1とを加算して誤り総数EAを求め(ステップS1)、かかる誤り総数EAがリフレッシュ実行閾値EXよりも大であるか否かを判定する(ステップS2)。このステップS2において、誤り総数EAがリフレッシュ実行閾値EX以下であると判定された場合、メモリ制御部24は、このリフレッシュ制御ルーチンを抜ける。すなわち、この際、リフレッシュ処理は実施されない。
かかるステップS2において誤り総数EAがリフレッシュ実行閾値EXより大であると判定された場合、メモリ制御部24は、上記した0誤り発生数EG0に電源遮断判定用シフト値SVを加算した値(EG0+SV)よりも、1誤り発生数EG1の方が大であるか否かを判定する(ステップS3)。
ステップS3において、1誤り発生数EG1が上記した(EG0+SV)以下であると判定された場合、メモリ制御部24は、データ読出時に周辺のメモリセルの値を変化させてしまうリードディスターブが生じたと判断して、第1ブロックリフレッシュ処理を実行する(ステップS4)。
第1ブロックリフレッシュ処理では、メモリ制御部24は、図4(a)に示すように、フラッシュメモリ25から読み出された読出データRDが書き込まれているページEPGが属するブロックBL1内の全てのデータを順次読み出しつつ、誤り検出訂正部241をもって誤り訂正処理を施す。そして、メモリ制御部24は、図4(a)に示すように、その訂正後の全データを他のブロックBL2にコピーする。この際、メモリ制御部24は、ブロックBL1を無効ブロック、ブロックBL2を有効ブロックとして管理すべく、レジスタ244に記憶されている管理情報データKDを更新する。
また、ステップS3において、1誤り発生数EG1が上記した(EG0+SV)より大であると判定された場合、メモリ制御部24は、レジスタ244に記憶されている書込順序管理情報TMに基づき、この読出データRDが格納されているページへの書込の順序が、フラッシュメモリ25の全ページ中で最も新しいか否かを判定する(ステップS5)。かかるステップS5において、最新の書込ではないと判定された場合、メモリ制御部24は、経時変化によってデータが消失するリテンションが生じていると判断して、第2ブロックリフレッシュ処理を実行する(ステップS6)。
第2ブロックリフレッシュ処理では、メモリ制御部24は、図4(b)に示すように、フラッシュメモリ25から読み出された読出データRDが書き込まれているページEPGが属するブロックBL1内の全てのデータに対して、誤り検出訂正部241をもって誤り訂正処理を施し、その訂正後の全データをブロックBL1内に上書きする。よって、この際、メモリ制御部24は、ブロックBL1を有効ブロックとして引き続き管理することになるので、管理情報データKDの更新は実施しない。
また、ステップS5において、読出データRDが格納されているページへの書込順序が最新であると判定されると、メモリ制御部24は、この読出データRDがデータ書込動作中の電源遮断に起因して破壊されてしまった無効データであると判断して、ページリフレッシュ処理を実行する(ステップS7)。
ページリフレッシュ処理では、メモリ制御部24は、図4(c)に示すように、フラッシュメモリ25から読み出された読出データRDが書き込まれているページEPG1だけからデータを読み出し、誤り検出訂正部241をもって誤り訂正を施す。そして、メモリ制御部24は、図4(c)に示すように、この訂正後のデータを、ページEPG1が属するブロックBL1内の他のページEPG2にコピーする。尚、かかるページリフレッシュ処理において、メモリ制御部24は、読出データRDが書き込まれているページEPG1だけからデータを読み出して誤り訂正を施したものを、図4(d)に示すように、ページEPG1が属するブロックBL1とは異なるブロックBL1内のページEPG2にコピーするようにしても良い。そして、メモリ制御部24は、ページEPG1を無効ページ、ページEPG2を有効ページとして管理すべく、レジスタ244に記憶されている管理情報データKDを更新する。
上記したステップS4、S6又はS7の終了後、メモリ制御部24は、図3に示すリフレッシュ制御ルーチンを終了する。
すなわち、書込動作中に電源遮断が生じた場合には、書込駆動(例えばメモリセルへの電荷注入)が不十分になることから、論理レベル0の状態(例えば、所望量の電荷が蓄積された状態)に書き込み切れなかったメモリセルにおいて「1誤り」が生じる可能性が高くなる。また、リテンションによって論理レベル0の状態を維持しきれなくなったメモリセルにおいても同様に「1誤り」が生じる可能性が高くなる。そこで、読出データRD中に誤りが存在する場合には、メモリ制御部24は、全体の誤り発生数に対する「1誤り」の割合が「0誤り」の割合よりも大となると判定(S3)した場合に、書込動作中の電源遮断又はリテンションが生じたと判断する。ここで、リテンションは、書き込みが終了してからの経過期間が短いほど発生の可能性が低い。そこで、メモリ制御部24は、全体の誤り発生数に対する「1誤り」の割合が「0誤り」の割合よりも大であると判定(S3)し、且つその判定対象となった読出データRDが格納されているページへの書込みが全ページ中で最も新しいと判定(S5)した場合に、「1誤り」の原因が書込時の電源遮断にあると判断し、それ以外の場合にはリテンションであると判断するようにしている。
この際、リテンションでは、「1誤り」が検出されたページのみならず、そのページを含むブロック全体に同様な「1誤り」が生じる。
そこで、「1誤り」の原因がリテンションであると判断した場合には、メモリ制御部24は、図4(b)に示す如く、「1誤り」が検出されたページを含むブロック全体に対してリフレッシュ処理を施す。
一方、書込動作中に電源遮断が生じた場合には、その書き込み途中のページにだけ「1誤り」が生じ、ブロック全体にその影響が及ぶ可能性は低い。
そこで、「1誤り」の原因が書込動作中の電源遮断であると判断した場合には、メモリ制御部24は、図4(c)又は図4(d)に示す如く、「1誤り」が検出されたデータが格納されているページに対してだけリフレッシュ処理を施すようにしたのである。
よって、上記したリフレッシュ処理によれば、書込動作中の電源遮断に起因して破壊されたデータが書き込まれた場合には、そのデータが格納されているページに対してだけ、データを再書込させるリフレッシュ処理を実施すれば良いので、ブロック全体に対してリフレッシュ処理を施す場合に比して処理時間及び消費電力の低減が図られる。
尚、図3に示されるステップS4においてリードディスターブの発生時に為される第1ブロックリフレッシュ処理では、図4(a)に示す如くページEPGを含むブロックBL1内の全てのデータを訂正後、他のブロックBL2にコピーするようにしているが、図4(b)のようにページEPGを含むブロックBL1に上書きするようにしても良い。
また、図3に示されるステップS6においてリテンションの発生時に為される第2ブロックリフレッシュ処理では、図4(b)に示す如くページEPGを含むブロックBL1内の全てのデータを訂正後、このブロックBL1に上書きするようにしているが、図4(a)のように他のブロックBL2にコピーするようにしても良い。
また、図3に示すステップS7でのページリフレッシュ処理では、図4(c)又は図4(d)に示ように、リフレッシュ対象となるページEPG1に記憶されているデータに誤り訂正を施したものを他のページEPG2にコピーするようにしているが、図5に示すように、訂正後のデータをページEPG1自体に上書きするようにしても良い。このように、ページリフレッシュ処理として、同一ページへの上書きを行うようにすれば、図4(c)又は図4(d)の如き他のページへのコピーを実施する際に必要となるデータ消去処理が不要となる。よって、処理時間の削減と共に、データ消去に伴うフラッシュメモリ25の寿命低下を抑制させることが可能となる。
図6は、本発明に係る他の半導体メモリ制御装置を含む情報処理システムを示すブロック図である。尚、かかる情報処理システムは、図1に示す情報処理システムと同様に、ホスト情報処理装置1及び記憶装置2からなる。
ホスト情報処理装置1は、記憶装置2に記憶されているデータ、又は外部供給されたデータに基づいて各種情報処理を行いつつ、データを書き込ませるべき書込命令、書込先のアドレス及び書込用データ、或いは、データの読み出しを促す読出命令及び読出元のアドレスを記憶装置2に供給する。
記憶装置2は、ホストIF部21、メモリアクセスバス22、CPU23、メモリ制御部34及びNAND型のフラッシュメモリ25を有する。
ホストIF部21は、ホスト情報処理装置1から供給された書込命令、読出命令、アドレス及び書込用データを受け、これらをメモリアクセスバス22を介してCPU23に供給する。また、ホストIF部21は、メモリ制御部34から送出された読出データRDDをメモリアクセスバス22を介して受け、これをホスト情報処理装置1に供給する。CPU23は、メモリアクセスバス22を介して供給された書込命令、アドレス及び書込用データに応じて、このアドレスに書込用データを書き込ませるべきメモリ書込制御信号を生成し、これをメモリアクセスバス22を介してメモリ制御部34に供給する。また、CPU23は、メモリアクセスバス22を介して供給された読出命令及びアドレスに応じて、そのアドレスからデータの読み出しを行わせるべきメモリ読出制御信号を生成し、これをメモリアクセスバス22を介してメモリ制御部34に供給する。
メモリ制御部34は、誤り訂正符号化部240、レジスタ244、誤り検出訂正部341、誤りカウンタ342及び読出回数カウンタ343の如きモジュールを含む。
誤り訂正符号化部240は、上記したメモリ書込制御信号に応じて、このメモリ書込制御信号にて示される書込用データに対して、例えばBCH符号の如き誤り訂正符号を付加して誤り訂正符号化した書込データWDを生成し、これをレジスタ244に記憶する。
誤り検出訂正部341は、フラッシュメモリ25から読み出された読出データRDに対して誤り検出処理を施し、誤りが存在する場合には、読出データRDのビット系列中に誤りビットを検出する度に誤り検出パルスを発生しこれを誤りカウンタ342に供給する。また、誤り検出訂正部341は、読出データRD中に誤りが存在する場合には、その誤りを訂正することが可能であるか否かを判定し、誤りを訂正することが可能である場合には、かかる読出データRDに対して誤り訂正処理を施し、訂正されたデータを図2に示すように読出データRDDとしてレジスタ244に記憶する。尚、フラッシュメモリ25から読み出された読出データRDに誤りが無かった場合には、誤り検出訂正部341は、この読出データRDを読出データRDDとしてレジスタ244に記憶する。すなわち、読出データRDの内で有効なデータだけが読出データRDDとしてレジスタ244に記憶されるのである。
誤りカウンタ342は、上記した誤り検出パルスが供給された数をカウントし、そのカウント値を、誤り総数EAとしてレジスタ244に記憶する。
読出回数カウンタ343は、読出判定制御ルーチン(後述する)において1つの読出データRDを繰り返し読み出す際の現時点での読出回数をカウントしその回数を示す読出回数RNを出力する。
メモリ制御部34は、これらモジュールの動作を反映させて、以下の如く、メモリ書込制御信号又はメモリ読出制御信号に応じたフラッシュメモリ25へのアクセスを行う。
すなわち、メモリ制御部34は、メモリ書込制御信号に応じて、レジスタ244に記憶されている書込データWDと共にこのメモリ書込制御信号にて指定されたアドレス、及びデータ書込を促す書込指令信号をフラッシュメモリ25に供給する。これにより、フラッシュメモリ25は、指定されたアドレスに上記書込データWDを書き込む。
また、メモリ制御部34は、メモリアクセスバス22を介してメモリ読出制御信号が供給された場合には、図7に示す如き読出判定制御ルーチンを実行する。
図7において、先ず、メモリ制御部34は、読出回数カウンタ343における読出回数RNの初期値として、「0」を読出回数カウンタ343に設定する(ステップS71)。次に、メモリ制御部34は、メモリ読出制御信号にて指定されたアドレスをフラッシュメモリ25に供給しつつ、データ読出を促す読出指令信号をフラッシュメモリ25に供給するという読出アクセスを実行する(ステップS72)。これにより、フラッシュメモリ25は、指定されたアドレスに記憶されている書込データWDを読みだし、これを上記した読出データRDとしてメモリ制御部34に供給する。尚、書込データWD及び読出データRD各々のビット長は、誤り訂正符号としての単位ブロック長、或いは、NAND型フラッシュメモリとしての1ページ分のビット長等である。この際、誤り検出訂正部341は、フラッシュメモリ25から読出データRDが読み出される度に、この読出データRDに対して誤り検出処理を施し、誤りが有る場合には、引き続き誤り訂正が可能であるか否かを判定する。ここで、誤り訂正可能である場合には、誤り検出訂正部341は、かかる読出データRDに対して誤り訂正処理を施して訂正されたデータを読出データRDDとしてレジスタ244に記憶する。一方、上記読出データRD中に誤りが無かった場合には、誤り検出訂正部341は、この読出データRDを読出データRDDとしてレジスタ244に記憶する。すなわち、フラッシュメモリ25から読み出された読出データRDの内で、誤りが無かったもの、或いは誤りが有るが訂正可能なものだけが有効データである読出データRDDとしてレジスタ244に記憶されるのである。
ここで、メモリ制御部34は、誤り検出訂正部341にて誤りが有るか否かを判定し(ステップS73)、誤りが有ると判定された場合には、引き続き、その誤りを訂正することが可能であるか否かを判定する(ステップS74)。ステップS74にて、誤り訂正不可であると判定されると、メモリ制御部34は、読出データRDがデータ書込中の電源遮断によって破壊されたデータであると判断し、この読出データRDを無効データとすると共に、読出データRDの格納領域(ページ又はブロック)をリフレッシュ対象として管理すべく管理情報データKDを更新する(ステップS75)。
尚、かかるステップS74において誤り訂正が可能であると判定された場合、又は上記ステップS73において誤りが無いと判定された場合、メモリ制御部34は、読出回数カウンタ343における現在の読出回数RNに「1」を加算したものを新たな読出回数RNとして読出回数カウンタ343に設定する(ステップS76)。次に、メモリ制御部34は、その読出回数RNが無効判定回数IVNより大であるか否かを判定する(ステップS77)。ステップS77において、読出回数RNが無効判定回数IVN以下であると判定された場合、メモリ制御部34は、上記ステップS72に戻って前述した如き動作を繰り返し実行する。
一方、ステップS77において、読出回数RNが無効判定回数IVNより大であると判定された場合、メモリ制御部34は、レジスタ244に記憶されている有効データとしての読出データRDDを、メモリアクセスバス22を介してホストIF部21に送出する(ステップS78)。かかるステップS78又はS75の実行後、メモリ制御部34は、この読出判定制御ルーチンを抜けて上記した動作を終了する。
以上の如く、図7に示す読出判定制御ルーチンの実行により、メモリ制御部34は、読出指定されたデータをフラッシュメモリ25から繰り返し読み出しつつ、各読出し毎に読出データ中に誤りが有るか否かの判定(S73)、及び誤り訂正可能であるか否かの判定(S74)を行う。この際、上記した繰り返し読み出しの回数が無効判定回数IVNに到るまでの間に、訂正不可の誤りが有ると判定されたら、メモリ制御部34は、その読出データはデータ書込中の電源遮断によって不安定な状態となっている無効データであると判断する。そして、メモリ制御部34は、この読出データを無効データとして設定すると共に、かかる読出データが格納されていたページ、又はそのページが属するブロックをリフレッシュ対象として管理すべく管理情報データKDを更新する(S75)。つまり、かかる制御により、1つのアドレスから、不正なデータが読み出される場合と、正常又は訂正可能なデータが読み出される場合とが混在する不安定な書込状態にある領域(ページ又はブロック)が検出されるのである。一方、繰り返し読み出しの回数が無効判定回数IVNに到るまで、各読出データ中に誤りが無い、又は誤りが有るものの訂正可能であるとの判定が連続して為された場合、メモリ制御部34は、その読出データは有効データであると判断し、これをホスト情報処理装置1に送信する。尚、メモリ制御部34は、管理情報データKDによって無効データとして管理された読出データについては、ホスト情報処理装置1側への送信は行わない。
このように、メモリ制御部34によれば、データ書込中の電源遮断に起因して、1アドレスから不正なデータが読み出される場合と、正常又は訂正可能なデータが読み出される場合とが混在してしまう不安定な書込状態にある領域(ページ)を検出することが出来る。よって、その後、かかる領域から読み出された読出データを無効データとする、或いはその領域に対してリフレッシュ処理を施してデータ回復を行うことにより、正しい読出データを安定的にホスト情報処理装置1に送信することが可能となる。
尚、データ書込中の電源遮断によって不安定な書込状態となってしまったデータの格納領域を検出すべく、図7に示す読出判定制御に、図1に示すメモリ制御部24で実施される無効データの判定方法を組み合わせるようにしても良い。例えば、図7に示すフローチャートにおいて、ステップS74に代えて図3に示すステップS3を採用する。この際、かかるステップS3において、1誤り発生数EG1が、0誤り発生数EG0に電源遮断判定用シフト値SVを加算した数(EG0+SV)以下であると判定された場合、メモリ制御部34は、図7に示すステップS76の実行に移る。一方、1誤り発生数EG1が(EG0+SV)より大であると判定された場合、メモリ制御部34は、読出データRDがデータ書込中の電源遮断によって破壊されたものであると判断し、図7に示すステップS75の実行に移るのである。
また、図1又は図6に示されるメモリ制御部24又は34では、外部装置としてのホスト情報処理装置1から供給された読出指令に応じて、前述した如き無効データの判定動作及び図3に示すリフレッシュ処理、或いは図7に示す如き読出判定制御を開始するようにしているが、他のタイミングで上記した処理を開始するようにしても良い。
例えば、電源投入に応じてデータ読み出しを促す読出指令を生成する手段をメモリ制御部24(又は34)に設け、この電源投入に応じて生成された読出指令に応じて、メモリ制御部24(又は34)が、前述した如き無効データの判定動作、図3に示すリフレッシュ処理、又は図7に示す如き読出判定制御を開始するようにしても良い。
また、ホスト情報処理装置1からのアクセスが為されていない待機期間中にデータ読み出しを促す読出指令を生成する手段をメモリ制御部24(又は34)に設け、待機期間中に生成された読出指令に応じて、メモリ制御部24(又は34)が、前述した如き無効データの判定動作、図3に示すリフレッシュ処理、又は図7に示す如き読出判定制御を開始するようにしても良い。
また、図1に示される判定部245では、フラッシュメモリ25内の全記憶領域を対象として無効データの判定を行うようにしているが、全ページの内で書込順序が最新であるページにだけ、前述した如き無効データの判定を行うようにしても良い。
また、図1又は図6に示す実施例では、書込対象となるページを含むブロック内の全てのメモリセルの状態を論理レベル1の状態、つまりデータ消去状態に設定してから、このページ内の所望のメモリセルのみを論理レベル0の状態に遷移させるというデータ書込を行うようにしている。しかしながら、メモリセルにおけるデータ消去状態を論理レベル0とし、これを論理レベル1の状態に遷移させるというデータ書込を行うようにしても良い。また、上記実施例では、メモリセル内に蓄積されている電荷量の違いにより論理レベル1及び0の状態を表すようにしているが、電荷以外の物性の違いにより論理レベル1及び0の状態を表すようにしても良い。また、上記実施例では、不揮発性メモリとしてNAND型のフラッシュメモリ25を採用しているが、これに限定されない。
要するに、本発明は、複数のメモリセルからなるメモリセル群内の全メモリセルを第1の論理レベルの状態に設定してから、当該メモリセル群内の所望のメモリセルのみを第2の論理レベルの状態に遷移させるデータ書込を行い、読出指令に応じて当該メモリセル群からデータの読み出しを行って読出データ片(RD)を得るようなアクセスを行う半導体メモリに適用するものである。
この際、本発明においては、誤り検出部(241)が読出データ片に誤り検出処理を施すことにより誤りビットを検出する。そして、判定部(245)が、読出データ片から検出された全ての誤りビットの内で上記した第1の論理レベルを有する誤りビットの数が第2の論理レベルを有する誤りビットの数よりも大なる場合に、この読出データ片が無効データであると判定するのである。
或いは、他の態様として、誤り検出訂正判定部(341)は、メモリセル群から読み出された読出データ片(RD)に誤りが生じているか否かを検出すると共に、誤りが生じている場合には訂正可能であるか否かを判定する。この際、読出データ片に誤りが生じていない、又は誤りが生じているが訂正可能であると判定された場合には、読み出し制御部(S71〜S77)が、無効判定回数(IVN)だけメモリセル群から繰り返し読出データ片を読み出す。この際、誤り検出訂正判定部(341)により、繰り返し読み出された読出データ片各々の内の少なくとも1つが訂正不可であると判定された場合には、判定部(S74、S75)が、上記読出データ片が無効データであると判定するのである。