説明

メモリの管理方法

【課題】リードディスターブエラーの防止とbadブロック処理を効率よく行うメモリの管理方法の提供。
【解決手段】
フラッシュメモリデバイスにリフレッシュ管理テーブルを設け、物理ブロック毎のデータ読み出し回数、消去回数を随時記憶、更新する。データ読み出し回数が予め決定してなる閾値に至ったときに、該物理ブロックにフラグ“Low”を設定する。またデータ読み出し時にECCエラーが発見された物理ブロックにはフラグ“High”を設定する。そして適宜リフレッシュ管理テーブルをサーチし、フラグ“Low”のブロックはリフレッシュし、フラグ“High”のブロックはbadブロック処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリ、取り分けNAND型フラッシュメモリの管理方法に関する。
【背景技術】
【0002】
EEPROM(電気的にデータの消去及び書き換えが可能な不揮発性メモリ)の一種としてフラッシュメモリが知られている。フラッシュメモリは、ワード線とビット線の交点に位置するセルに電荷を蓄積し、データの書き込み(プログラムともいう)を行うメモリである。電荷がセルに蓄積されている以上、電源をOFFにしてもデータは失われない。しかしフラッシュメモリにおいては、リードディスターブエラー(read disturb error)といって、所定物理ブロックの所定ページのデータが読み出されると、同一ブロック内の他のページのセルに記憶されているデータが変化してしまう現象が生じる場合がある。これは、データの読み出し対象となった選択セルからデータが読み出される際、非選択セル(データ読み出し対象となっていないページのセル)の浮遊ゲートに電荷が注入されてしまい、これにより非選択セルが弱くプログラムされたのと同じ状態になるためであり、読み出し回数が増えるに従い、より多くのメモリセルが影響を受ける。このためフラッシメモリでは、通常、読み出し回数制限値がベンダーによって指定されている。例えば、現行製品で、SLC(Single-Level-Cell)では、10万回乃至100万回、MLC(Multi-Level-Cell)では、1万回乃至10万回である。一般に、データ書き換え回数が増大すると、読み出し回数はより制限される。
【0003】
(従来技術の問題点)
このリードディスターブエラーに対処するため、該エラーが生じない特別な回路を予め用意したり、電荷の変化したセル単体を個別に探し出してこれを補正しエラーデータが読み出されないようにする方法などが提案されているが、回路や処理が複雑で高価となり、実用的ではない。
【0004】
また、他の対処方法としては、物理ブロックごとにデータ読み出し回数をカウントし、ベンダー指定のデータ読み出し回数制限値に至ったときにそのブロックのリフレッシュを都度実行している。即ち、読み出し対象となった当該ブロックがデータ読み出し回数制限に至ったとき、データ読み出しの直前又は直後にリフレッシュを実行している。このため、複数の物理ブロックが一度にデータ読み出し制限に至ったとき、連続したリフレッシュ実行のために一定のデータ転送レートが保証できずユーザに不快感を与えたり、ホストに読み出されるデータが一時的に中断しプレイに支障が生じるといった問題が生じる。
【特許文献1】特開10−228783
【特許文献2】特開2002−150783
【特許文献3】特開2004−326867
【特許文献4】特許第3641066号
【発明の開示】
【発明が解決しようとする課題】
【0005】
本発明は、このような問題点に鑑みてなされたものであり、NAND型フラッシュメモリデバイスのリードディスターブエラーの防止とbadブロック処理を効率よく行うメモリの管理方法を提供することにある。その他の目的は、明細書、図面、特に特許請求の範囲から自ずと明らかとなろう。
【課題を解決するための手段】
【0006】
上記課題解決のため、本発明は、請求項記載の新規な特徴的構成を採用する。
【発明を実施するための最良の形態】
【0007】
以下、本発明を実施するための最良の形態について図面を用いて説明するが、本発明は特許請求の範囲内において種々の形態を採ることができ、下記実施形態に限定されないことはいうまでもない。
【0008】
(システム基本構成)
図1に示すように、本発明は、NAND型フラッシュメモリ22(本明細書において、特に必要のない限り、単に“フラッシュメモリ”という)と該フラッシュメモリ22に対するデータの書き込みや読み出しの実行、その他の制御を行うコントローラ21を有するフラッシュメモリデバイス2(特許請求の範囲の「記憶装置」に相当)において実行される。本願では、フラッシュメモリデバイス2と、該デバイス2にデータの書き込みや読み出しのコマンドを発行するホスト1からなる構成をシステムという。コントローラ21には、必要に応じ作業領域としてのRAM23を接続する。RAM23はコントローラ21の内部に設けてもよい。システムは、例えばMPEG音楽プレーヤのように、所定の機器として一体に構成されていてもよいし、ホスト1がPC(パーソナルコンピュータ)で構成され、フラッシュメモリデバイス2がSSD(Solid State Drive)としてPCとUSBインターフェースやIDEインターフェースで接続される構成であってもよい。その他、遊技機等所定の機器に搭載される基板上に構成されてもよい。
【0009】
フラッシュメモリ22は、ユーザデータ領域、予備領域、管理領域を有する。ユーザデータ領域は、主記憶領域とも呼ばれる。ユーザデータ領域を構成する物理ブロックは、論理ブロックと対応する関係を有し、その関係は論理/物理ブロック管理テーブルで管理され、その対応関係が変わると、随時該テーブルで更新される。予備ブロック(予備領域を構成するブロック)は、ユーザデータ領域を構成する物理ブロックがbadブロックとなったときに使用される代替ブロックである。また、フラッシュメモリ22には空きブロックが少なくとも一つ確保される。この空きブロックは、通常、ユーザデータ領域の物理ブロックにデータを上書きするときに使用されるブロックである。この場合空きブロックは、予備ブロック同様、論理ブロックアドレスと関連付けされない。なお、詳細は後述するが、本願のリフレッシュは、この空きブロック若しくは予備ブロックのいずれかを使用して実行する。
【0010】
図2は、フラッシュメモリ22のメモリアレイを示している。図示するように、ユーザデータ領域は物理ブロック番号“0”から“4041”で構成され、物理ブロック番号“4042”が空きブロック、物理ブロック番号“4043”から“4091”までが予備ブロックで構成されている。その他、物理ブロック番号“4092”から“4095”までの管理領域が存在する。コントローラ11は、空きブロックの物理ブロック番号及び予備ブロックの物理ブロック番号を把握するため、それぞれ不図示の空きブロックテーブル、予備ブロックテーブルで管理する。論理/物理ブロック管理テーブル、空きブロックテーブル、予備ブロックテーブルを総称して、ブロック管理テーブルというものとする。
【0011】
図3はリフレッシュ管理テーブルの内容例を表している。リフレッシュ管理テーブルは、システム稼動中RAM23において、物理ブロックごとのデータ読み出し回数や消去回数を記憶するものである。システム稼動中はその内容が適宜更新される。システムの電源が遮断されるとき、その内容は管理領域に保存される。システム稼動の度にこれが繰り返される。
【0012】
フラッシュメモリデバイス2がホスト1からデータ読み出しコマンドを受けると、コントローラ21は、ホスト1から指定されたアドレスを論理ブロックアドレスとして、その論理ブロックアドレスに対応する物理ブロックアドレスを論理/物理ブロック管理テーブルから割り出してデータを読み出す。そしてその都度、リフレッシュ管理テーブルに、当該物理ブロックに対するデータ読み出し回数を記録する(図3参照)。また、物理ブロックのデータを消去するごとに消去回数をインクリメントして記録する。消去はそのブロック内のデータの書き換えを含む概念である。
【0013】
物理ブロックのデータ読み出し回数制限値(図4のベンダー指定値)は、一般に過去の消去回数に依存する。即ち、過去にデータ消去された回数が多いほど、読み出し回数は制限される。このデータ読み出し回数制限値は、例えば図4に示すように、物理ブロックの消去回数が0回から999回までは1,000,000回(図4のフェーズA)、消去回数が1,000回から9,999回までは300,000回(図4のフェーズB)、消去回数が10000回から99,999回までは100,000回(図4のフェーズC)と設定される。
【0014】
従来、そのブロックのデータ読み出し回数が制限値に至ったとときに、読み出しを実行する直前又は直後に、その都度リフレッシュを実行していたが、read時間が増大するという問題があった。そこで本発明では、リフレッシュ管理テーブルを用い、後述する方法により、対象となるブロックを時分割に一括してリフレッシュし、read時間の増大を防止するものである。
【0015】
まず、リフレッシュを実行する基準(コントローラ閾値)をベンダー指定値より小さい値に設定することにより、データ読み出し回数がベンダー指定値に至る前に有効にリフレッシュを実行できるようにした。図4のフェーズA,B,Cのベンダー指定値とコントローラ閾値の関係を参照されたい。データ読み出し回数が、コントローラ閾値に至ると、コントローラ21(正確にはコントローラ21のCPU(図示せず))は、リフレッシュ管理テーブルの当該物理ブロックにフラグ“Low”(特許請求の範囲の第1種フラグに相当)を設定する(図3)。
【0016】
システムの電源が遮断される際は、リフレッシュ管理テーブルの内容を管理領域に不揮発的に記録し、次回システム稼動時に再度RAM23に展開し、過去の記録を利用する。システム稼動中に何らかの理由により電源が遮断される可能性があるので、所定時間間隔ごとに(例えば10分おき)、リフレッシュ管理テーブルの内容を、管理領域に記録してもよい。
【0017】
以下、本発明のリフレッシュ方法の実施形態例を説明する。
(第1実施例:オートリフレッシュ)
オートリフレッシュは、デバイス2に電源投入直後、ホスト1よりコントローラ21に、ENABLE/DISABLE AUTO REFRESH コマンド(デバイス提供者で定義するユニークコマンド。以下、単にオートリフレッシュコマンドという。)を発行しておき、所定時刻及び/又は所定時間間隔にリフレッシュを実行させる方法である。デバイス2に定常的に電源が投入されているようなシステムの場合は、所定時刻ごと(秒単位で設定可能)にリフレッシュを実行してもよい。またはコントローラ21に、ENABLE/DISABLE AUTO REFRESH コマンドで実行すると同様なプログラム(ファームウエア)を予めインストールしておいてもよい。これらオートリフレッシュは、フラッシュメモリデバイス2が有するタイマー(図示せず)を利用して自動的にリフレッシュを実行する方法であるため、本願では以下、タイマーイベントという。オートリフレッシュの場合、特許請求の範囲のステップd)、e)、f)がタイマーイベントで実行される。
【0018】
A.フラグ“Low”の設定されている物理ブロックが一つだけ存在する場合
オートリフレッシュコマンドまたはファームウエアにより、タイマーイベントが、ホスト1がメディアアクセスをしていないときに発生した場合は、コントローラ21はリフレッシュ管理テーブルをサーチし、フラグ“Low”が設定されている物理ブロックが一つ存在することが確認された場合、コントローラ21は当該フラグが設定されている物理ブロックのリフレッシュを直ちに実行する。尚、メディアアクセスとは、ホストがコマンドを発行することにより、フラッシュメモリ22からデータの読み出しや、データの書き込みを行うことをいう。
【0019】
タイマーイベントが、ホスト1がメディアアクセスしているときに発生した場合は、一の物理ブロックに対するメディアアクセスの処理を完了し次のメディアアクセスの処理開始前に割り込んでリフレッシュを実行する。
【0020】
B.フラグ“Low”の設定されている物理ブロックが二つ以上存在する場合
タイマーイベントが、ホスト1がメディアアクセスを実行していないときに発生した場合であって、リフレッシュ管理テーブルでフラグ“Low”が設定されている物理ブロックが二つ存在することが確認された場合、コントローラ21は当該フラグが設定されている物理ブロックを一つずつ、即ち、ブロック単位でリフレッシュする。まずデータ消去回数が、図4のフェーズA,B,Cのいずれに該当するかを判定し、データ読み出し回数がそれぞれの閾値(コントローラ閾値)を超えた値が大きいもの順にリフレッシュを実行する。又は、データ読み出し回数がベンダー指定値に近いもの順にリフレッシュを実行する。図4では、フェーズA,B,Cのそれぞれで、ベンダー指定値とコントローラ閾値の差がすべて同じであるため、上記2例において実質的に同一の結果となるが、フェーズA,B,Cのそれぞれで、ベンダー指定値とコントローラ閾値の差を異なる値に設定した場合は、前者の実行方法を採った場合と後者の実行方法を採った場合とではリフレッシュの順番が異なる。このような方法を採ることにより、リードディスターブエラーを生起する可能性の高い順番で物理ブロックがリフレッシュされるため、リードディスターブエラーの発生をより確実に防止することができる。
【0021】
C.タイマーイベントがホスト1がメディアアクセスしているときに発生した場合、若しくはホスト1のメディアアクセス中にタイマーイベントが発生した場合であって、フラグ“Low”の設定されている物理ブロックが複数存在することが確認された場合。
この場合は、物理ブロック単位で、時分割にリフレッシュを実行する。即ち1物理ブロック当たりのタイマーイベントの処理は、その開始から終了までせいぜい100ms(ミリ秒)程度であるから、リフレッシュ間隔(一の物理ブロックのリフレッシュ開始から次の物理ブロックのリフレッシュ開始まで)を、例えば1秒以上に設定する。そしてコントローラ21は、まず一の物理ブロックに対するメディアアクセスの処理の完了後、次のブロックのメディアアクセスの処理開始前に割り込んで1物理ブロックのリフレッシュを実行する。その後1秒経過してから同様なタイミングで次の物理ブロックのリフレッシュを実行する。
【0022】
このようにすれば、リフレッシュ対象ブロックが複数存在する場合でも、ホスト1にデータを転送している最中にデータが途切れてユーザに不快感を与えたり、プレイに支障を生じさせることがない。特に、フラッシュメモリ22に記憶されているデータが音楽や動画などのコンテンツであって、多数の物理ブロックが一度にコントローラ閾値に達するような事態が生じても、物理ブロックごと時分割にリフレッシュを実行することにより、一定のデータ転送レートを担保することができ、ユーザに支障を来たすことがない。
【0023】
以下、図を用いて、フラグ“Low”の設定された物理ブロックに対するリフレッシュのやり方について説明する。
【0024】
図3に示す通り、リフレッシュフラグの設定されている物理ブロックが、物理ブロック番号“2”、“6”及び“9999”の三つあるとする。データ消去回数は、物理ブロック番号“2”も物理ブロック番号“6”もどちらも0回で、フェーズAに該当する。データ読み出し回数は、物理ブロック番号“2”は990,100回、物理ブロック番号“6”は990、515回であり、コントローラ閾値990,000に対して、物理ブロック番号“6”が、より閾値を超えているため、リフレッシュは物理ブロック番号“6”が、物理ブロック番号“2”に優先する。また物理ブロック番号“9999”のデータ消去回数は1050回であるためフェーズBに該当し、コントローラ閾値290,000に対して読み出し回数が290,050回であり、コントローラ閾値を越える回数は、物理ブロック番号“2”より少ないから、リフレッシュは物理ブロック番号“2”が優先する。以上より、物理ブロック番号“6”、“2”、“9999”の順にリフレッシュを実行することになる。
【0025】
物理ブロック番号“6”のリフレッシュに当たっては、まず空きブロック(物理ブロック番号“4042”)を新たなデータ書き込み用のブロックとして選定する。次にリフレッシュ対象物理ブロックである物理ブロック番号“6”から1ページずつフラッシュメモリ22内のバッファにすべてのデータを読み出し、続いてバッファから前記新たなデータ書き込み用ブロックに全てのページのデータを1ページずつプログラム(書き込み)する。そして元のブロックである物理ブロック番号“6”のデータを一括消去する(図5参照)。1ブロック分のデータすべてを読み出してから新たなデータ書き込み用ブロックへ書き込むのではなく、バッファへの読み出しと新たなデータ書き込み用ブロックへの書き込みを、ページ単位で、順次行ってもよい。この場合、バッファの容量は1ページ分で足りる。
【0026】
そして、元の物理ブロックである物理ブロック番号“6”に対応していた論理ブロック番号を、新たなデータ書き込み用ブロックとなった物理ブロック番号(“4042”)に新たに対応させて、論理/物理ブロック管理テーブルを更新するとともに、物理ブロック番号“6”を空きブロックとして、空きブロック管理テーブルを更新する(“4042は空きブロック管理テーブルから削除する”)。また、リフレッシュ管理テーブル上で、消去した元のブロックである物理ブロック番号“6”のデータ読み出し回数をゼロに変更し、データ消去回数を1つインクリメントする。以上で物理ブロック番号“6”に対するリフレッシュが完了する。物理ブロック番号“6”のリフレッシュが終了したら、以降、物理ブロック番号“2”、”9999”についても、上記例に倣ってリフレッシュを実行する。なお新たなデータ書き込み用のブロックは、予備ブロックの一つ(例えば、物理ブロック番号“4043”)から選定してもよい。この場合は、元の物理ブロックに対応していた論理ブロック番号を、新たなデータ書き込み用ブロックとなった物理ブロック番号(“4043”)に新たに対応させて、論理/物理ブロック管理テーブルを更新するとともに、元の物理ブロック番号を空きブロックとして、空きブロック管理テーブルを更新する(“4042は空きブロック管理テーブルから削除する”)。
【0027】
尚、必ずしもホスト1への高速なデータ転送が要求されない場合は、リフレッシュ対象物理ブロックである物理ブロック番号“6”から1ページずつエラー訂正しながらRAM23(リフレッシュ管理テーブルを記録する領域意外の領域を利用)にすべてのデータを読み出して格納し、続いてRAM23から前記新たなデータ書き込み用ブロックに全てのページのデータを1ページずつプログラム(書き込み)してもよい。こうすれば、ブロックの潜在的なエラーをすべて訂正するので、データの信頼性が高まる。この場合もバッファへの読み出しと新たなデータ書き込み用ブロックへの書き込みを、ページ単位で、順次行ってもよいことは言うまでもない。
【0028】
従来リフレッシュは、データの読み出し中にイレギュラーに必要となり、ホストへのデータのread時間が増大していたが、本発明では、リフレッシュ管理テーブルを用いて、所定のタイミングで一括して行うので、斯かる不都合は生じない。また従来のリフレッシュのやり方は、1)その物理ブロックのデータをフラッシュメモリ22内のバッファに待避し、次に2)当該ブロックのデータを消去し、その後3)待避しておいたデータを元のブロックに再書き込みしている。この場合、当該ブロックのデータを消去した後であってかつバッファに待避しておいたデータを元のブロックに再書き込み完了する前に何らかの原因で電源が遮断された場合、本来のデータが消失してしまう危険性がある。この点、上記実施形態例によれば、新たなデータ書き込み用ブロックにデータが完全にコピーされるまで、元のブロックのデータは消去されないから、リフレッシュ中のどの段階で電源が遮断されても本来のデータが失われることがない。尚本発明においても、上記1)乃至3)のやり方でリフレッシュしてもよいことは言うまでもない。その場合は元のブロックを再利用するので、ブロック管理テーブルのいずれも変更しなくてよい。
【0029】
(第2実施例:ホストからのコマンド発行によるリフレッシュ)
上述のオートリフレッシュの他、メディアアクセスを実行しないときに、ホスト1がコントローラ21に以下のようなコマンドを発行してリフレッシュを実行してもよい。
1.GET REFRESH PENDING STATUS コマンド
本コマンドは、コントローラ21に対し、リフレッシュ管理テーブルをサーチさせ
て、リフレッシュフラグ(“Low”又は後述する“High”)が設定されている物理ブロックの総数をホスト1に通知させるものである。
2.EXECUTE
REFRESH コマンド
本コマンドは、コントローラ21にリフレッシュを実行させるものである。リフレ
ッシュが終了するとコマンドが終了する。リフレッシュを実行する物理ブロック数を指定できる。
3.SAVE
REFRESH TABLE コマンド
本コマンドは、コントローラ21に、RAM23上のリフレッシュ管理テーブルの内
容を、管理領域に保存させるものである。リフレッシュ管理テーブルの保存が終了するとコマンドが終了する。
【0030】
ホスト1のドライバには、GET REFRESH PENDING STATUS コマンドを発行して、リフレッシュの必要なブロックの有無及びその数を把握し、リフレッシュの必要なブロックがあれば、ホスト1がメディアアクセスしていないときにコントローラ21にEXECUTE REFRESHコマンドを発行するようプログラムしておく。
【0031】
このようにすれば、ホスト1は必要に応じて適宜コントローラ21にリフレッシュを実行させることができる。即ち、コントローラ21は、必要なときにのみ、効果的にリフレッシュを実行することができる。またSAVE REFRESH TABLE コマンドにより、必要に応じ、コントローラ21にRAM23上のリフレッシュ管理テーブルの内容をフラッシュメモリのリフレッシュ管理テーブルに不揮発的に保存させることができる。
【0032】
以上のように、本発明は上記第1実施例、第2実施例のいずれのリフレッシュ方法を採用しても、リフレッシュを実行すべき物理ブロックが複数存在する場合、一定のタイムインターバルを以って複数の物理ブロックを時分割でリフレッシュするため、音楽や動画などのコンテンツの読み出しが途中で途切れ、ユーザに不快感を与えたり、プレイに支障を生じることがない。また、メディアアクセスする必要のないタイミングに上記ベンダーコマンドを発行するようホスト1のドライバにプログラムしておくことにより、コントローラ21の動作効率をより向上させることができる。
【0033】
(bitエラーの対応及びbadブロックの処理)
フラッシュメモリデバイスは、データ書き込みの際、ユーザデータに対してエラーチェックコード(ECC)を付加して書き込んでいる。データ読み出し時にはデコーダがこのエラーチェックコードを基に、読み出したデータにエラー(本願ではこれを「bitエラー」という)がないかをチェックし、bitエラー数がコントローラの能力値(例えば8bit)以内であれば、コントローラ21内のエラー訂正回路(図示せず)がbitエラーを訂正し、正しいデータをホスト1に送出する。bitエラーは、データの消去、リードディリスターブ、経年変化(データリテンション)、セルの物理的欠陥(たとえば絶縁膜の劣化、破壊)などに起因して生じる。bitエラー数がコントローラ能力値を超えると、その欠陥セルを含むブロックは、もはやエラー訂正ができず、使用に耐えないbadブロックとなる。
【0034】
そこで本発明では、安全性を担保するため、コントローラ21の能力値と同じかそれより小さい所定値(例えば7bit)を予め閾値(「badブロック閾値」という)として設定しておき、bitエラーがbadブロック閾値に至ったセルを含むブロックをbadブロックと看做し、お蔵入りとするものである。
【0035】
以下、この処理を簡単に説明する。まず、読み出したデータのbitエラー数がbadブロック閾値未満であったときは、通常通り、bitエラーを訂正してデータをホスト1に送出する。bitエラーがbadブロック閾値以上かつコントローラの能力値以下であったときは、bitエラーを訂正したデータをホスト1に送出するとともに、リフレッシュ管理テーブルの当該エラーを含む物理ブロックに、第2種フラグ“High”を設定する。図3には、物理ブロック番号“4”において、読み出し回数300回でフラグ“High”が設定されている様子が示されている。
【0036】
タイマーイベントが発生し、若しくはリフレッシュコマンドがホスト1から発行され、コントローラ21がリフレッシュ管理テーブルをサーチした結果、フラグ“High”が設定された物理ブロックが確認されたときは、予備ブロック(ここでは物理ブロック番号“4044”)を新たなデータ書き込み用ブロックに割り当てる。次にbadブロックと看做された物理ブロックの全データを1ページずつエラー訂正しながらRAM23に一旦格納し、前記予備ブロックに書き込む。badブロックと看做された物理ブロックの全データをフラッシュメモリ内22のバッファに読み出して、エラー訂正することなく予備ブロックに書き込んでもよいが、エラー訂正して書き込む方がデータの信頼性が高まる。データの書き込み処理が完了したら、元の物理ブロックの論理ブロック番号と予備ブロックの物理ブロック番号“4044”を新たに対応させて、論理/物理ブロック管理テーブルを更新する。このとき元のブロックの物理ブロック番号がブロック管理テーブルから削除されるので、元の物理ブロックは以降使用されることはない。
【0037】
そして、リフレッシュ管理テーブル上において、badブロックと看做された物理ブロックアドレス“4”のフラグ“High”をNoneにする。この場合、元ブロックは以降使用しないので、ブロックに記憶されているデータは消去しなくてよい。以上で、フラグ“High”の設定された物理ブロック番号“4”に対する処理が完了する(本願では以上の処理を“badブロック処理”というものとする)。
【0038】
尚、万一bitエラー数がコントローラ能力値を超えた場合は、エラー訂正ができないため、コントローラ21はホスト1にエラーを返すことになるが、badブロックと看做すための前記badブロック閾値を、アプリケーションや使用環境に応じて適切な値に設定することにより、斯かる事態の発生を防ぐことができる。
【0039】
そして、コントローラ21がリフレッシュ管理テーブルをサーチしたとき、フラグ“Low”の設定されている物理ブロックとフラグ“High”の設定されている物理ブロックが並存する場合は、フラグ“High”の設定されている物理ブロックに対するbadブロック処理を、フラグ“Low”の設定されている物理ブロックのリフレッシュに優先して実行する。
【0040】
上記第1実施例(オートリフレッシュ)において、タイマーイベントが、ホストがメディアアクセス実行中に発生した場合若しくはタイマーイベントの処理中にホスト1からメディアアクセスコマンドが発行された場合であって、その時点でリフレッシュ管理テーブル上に、フラグ“Low”及び/又は“High”の設定されている物理ブロックが複数存在する場合は、フラグ“High”の設定されている物理ブロックの処理を優先しつつ、フラグ“High”及び/又は“Low”の設定されている物理ブロックに対する処理を、前述した方法(段落0021参照)と同様に、ブロック単位で時分割に実行する。
【0041】
また上記第2実施例(ホストからのコマンド発行によるリフレッシュ)において、コントローラ21がリフレッシュの実行中にさらにホスト1からメディアアクセスコマンドが発行された場合であって、その時点でリフレッシュ管理テーブル上に、フラグ“Low”及び/又は“High”の設定されている物理ブロックが複数存在する場合も、フラグ“High”の設定されている物理ブロックの処理を優先しつつ、フラグ“High”及び/又は“Low”の設定されている物理ブロックに対する処理を、前述した方法(段落0021参照)と同様に、ブロック単位で時分割に実行する。
【0042】
尚、万一bitエラー数がコントローラ能力値を超えた場合は、エラー訂正ができないため、コントローラ21はホスト1にエラーを返すことになるが、badブロックと看做すための前記badブロック閾値を、アプリケーションや使用環境に応じて適切な値に設定することにより、斯かる事態の発生を防ぐことができる。
【0043】
以下、コントローラ21がホスト1からコマンドを発行された場合の処理(リフレッシュコマンドに基づきリフレッシュを行う場合の例)を、図7乃至図9のフローチャートを用いて説明する。はじめに図7を用いて説明する。コントローラ21は常時ホスト1からコマンドが発行されたかを確認する(SP1)。コマンドが発行された場合、その発行されたコマンドがデータの上書きを伴う書き込みコマンド又は消去コマンドか確認し(SP2)、yesの場合は、当該コマンドを実行し(SP3)、リフレッシュ管理テーブルの当該コマンドが実行された物理ブロックの“消去回数”を1つインクリメントする(SP4)。初期値は0である。発行されたコマンドがデータの上書きを伴う書き込みコマンド又は消去コマンドでない場合は、引き続きデータの読み出しコマンドであるか確認し(SP5)、yesの場合は※1(図8)へ進む。即ち、そのコマンドに従ってデータの読み出しを実行し(SP6)、データを読み出したページを含む物理ブロックの“読み出し回数”を一つインクリメントする(SP7)。そして、そのブロックに係る読み出し回数がコントローラ閾値以上であるか確認し(SP8)、yesであれば、リフレッシュ管理テーブルにフラグ“Low”を設定する(SP9)。そして読み出したデータにbitエラーがないか確認し(SP10)、ない場合はデータをそのままホストに送出する(SP11)。bitエラーがあった場合は,badブロック閾値未満であるか確認し(SP12)、yesであればエラー訂正した上で(SP13)、データをホストに送出する(SP11)。bitエラーがbadブロック閾値以上であった場合はコントローラ能力値以下であるかを確認し(SP14)、yesであればリフレッシュ管理テーブルの当該物理ブロックにフラグ“High”を設定し(SP15)、エラー訂正した上で(SP13)、データをホストに送出する(SP11)。仮にbitエラーがコントローラ能力値を超えていた場合はホストにエラーを返し(SP16)、※3(図8参照)に進む。
【0044】
SP5でnoであった場合は、※2へ進む(図9参照)。即ち、ホストから発行されたコマンドがリフレッシュコマンドであるか確認し(SP17)、noであれば当該処理を実行して(SP18)、※3に進む。yesであればリフレッシュ管理テーブルをサーチし(SP19)、フラグ(“High”及び/又は“Low”)が設定されているかを確認する(SP20)。そしてyesであれば、フラグ“High”のブロックに対する処理を、フラグ“Low”のブロックに優先して行う(SP21)。そして、論理/物理ブロック管理テーブルを更新し(SP22)、※3へと進む。
【0045】
以上のように、上記実施形態例では、リードディスターブエラー発生の未然防止(リフレッシュ)と、種々の原因により発生したbadブロックの処理を、リフレッシュ管理テーブルを用いて一括して処理することができるため、従来にはないシステムパフォーマンスを提供することができる。
【0046】
尚、RAM23は、コントローラ21に外付けする場合、Random Access Memoryの他、DRAM、SDRAM(synchronous DRAM)でもよい。
【0047】
また、図6に示ように、リフレッシュ管理テーブルは、工場出荷時に物理ブロックごとに異なるデータ読み出し回数(ダミー)を記録しておいてもよい。このようにすれば、専らシーケンシャルリード(sequential read)されるアプリケーションの場合、リフレッシュをさらに分散して実行することができる。
【0048】
また、本システムが遊戯機に搭載される場合、一日のプレイ中に何度もコンテンツデータが読み出される。コンテンツは例えば、図柄である。このコンテンツデータは複数の物理ブロックに跨ってファイルとして管理されている場合もある(これをコンテンツファイルという)。この場合、一日における当該図柄の読み出し回数を記憶しておくとともに、システム電源をオンしたときに、一日における当該図柄の読み出し回数の最大値や毎日の平均値を求め、当日にフラグ“Low”が設定され得る状況であるかを予想し、設定される可能性がある場合は、システム本稼動前にリフレッシュを前倒しで実行してもよい(フィードフォワード制御)。或いは、システム稼動終了後に翌日にフラグ“Low”が設定されるかを予想し、設定される可能性がある場合、電源OFF前にリフレッシュを実行してもよい。このようにすれば、プレイ途中のリフレッシュを極力少なくすることができ、システムパフォーマンスを一層向上させることができる。パチンコ遊技機やスロットマシンのように、一日中稼動する遊技機の場合は特に有効である。
【0049】
以上説明したように、本発明は、リフレッシュをデータ読み出し回数制限値(ベンダー閾値)に至る前に実行するとともに、リフレッシュとbadブロック処理の両者をjust in time方式ではなくリフレッシュ管理テーブルを使用して集中して実行するため、リードディステーブエラーの防止とbadブロック処理を有効且つ効率的に行うことができる。またホストからの継続したデータ読み出し要求がなされた場合でも一定のタイムインターバルで時分割にリフレッシュやbadブロック処理を実行するので、データ転送レートを保証でき、ユーザに不快感を与えたり、ホストに転送されるデータが一時的に中断しプレイに支障が生じることを防止することができる。ホストがメディアアクセスしないときにコマンドを発行してリフレッシュを実行する場合は、データ転送レートをより一層保証することができる。
【図面の簡単な説明】
【0050】
【図1】本発明の実施形態を実行するシステムの基本構成例である。
【図2】フラッシュメモリの領域例である。
【図3】リフレッシュ管理テーブルの内容例である。
【図4】データ消去回数範囲(フェーズ)ごとの、データ読み出し回数のベンダー指定値及びコントローラ閾値の関係例である。
【図5】リフレッシュの実行方法例である。
【図6】工場出荷時(初期状態)のリフレッシュ管理テーブル例である。
【図7】コントローラが実行する処理のフローチャート例である。
【図8】コントローラが実行する処理のフローチャート例(続き)である。
【図9】コントローラが実行する処理のフローチャート例(続き)である。
【符号の説明】
【0051】
1 ホスト
2 フラッシュメモリデバイス
21 コントローラ
22 NAND型フラッシュメモリ
23 RAM

























【特許請求の範囲】
【請求項1】
ユーザデータ領域と予備領域と管理領域を有するメモリと該メモリを制御するコントローラからなる記憶装置における、当該コントローラが行うメモリの管理方法であって、
a)物理ブロック毎のデータ読み出し回数、消去回数を、リフレッシュ管理テーブルに随時記録、更新するステップと、
b)物理ブロックのデータ読み出し回数が各物理ブロックのデータ消去回数のフェーズごとに異なる値に設定されている各閾値に至ったとき、リフレッシュ管理テーブル上の当該物理ブロックに第1種フラグを設定するステップと、
c)メモリから読み出されたデータにbitエラーがあった場合であって、該bitエラー数が予め定めた閾値以上であったとき、リフレッシュ管理テーブルの当該エラーのあった物理ブロックに第2種フラグを設定するステップと、
d)リフレッシュ管理テーブルをサーチするステップと、
e)ステップd)において第1種フラグの設定された物理ブロックが確認されたとき、そのブロックをリフレッシュするステップと、
f)ステップd)において第2種フラグの設定された物理ブロックが確認されたとき、その物理ブロックのデータを予備ブロックに書き写し、ブロック管理テーブルを更新するステップ、
を有することを特徴とするメモリの管理方法。
【請求項2】
リフレッシュは、第1種フラグの設定された物理ブロックのデータをバッファにコピーするとともに、元のデータを消去してから前記バッファにコピーしたデータを元のブロックに書き戻し、リフレッシュ管理テーブル上の当該物理ブロックのデータ読み出し回数を“0”に変更することを有することを特徴とする請求項1記載のメモリの管理方法。
【請求項3】
リフレッシュは、第1種フラグの設定された物理ブロックのデータを空きブロック若しくは予備ブロックにコピーするとともに、元のデータを消去して、ブロック管理テーブルを更新し、リフレッシュ管理テーブル上の当該物理ブロックのデータ読み出し回数を“0”に変更することを特徴とする請求項1記載のメモリの管理方法。
【請求項4】
ステップd)乃至ステップf)を、タイマーイベントとして実行することを特徴とする請求項1記載のメモリの管理方法。
【請求項5】
システムに電源投入後、ホストからコントローラにタイマーイベントを発生させるコマンドを予め発行しておくことを特徴とする請求項4記載のメモリの管理方法。
【請求項6】
タイマーイベントを発生させるファームウエアをコントローラに予めプログラムしておくことを特徴とする請求項4記載のメモリの管理方法。
【請求項7】
ステップd)で、第1種フラグの設定されている物理ブロックと第2種フラグ設定されている物理ブロックの両者が存在することが確認されたとき、ステップf)をステップe)に優先して実行することを特徴とする請求項1乃至請求項6いずれか1項記載のメモリの管理方法。
【請求項8】
ステップd)で第1種フラグ及び/又は第2種フラグの設定されている物理ブロックが複数存在する状況下において、コントローラがタイマーイベントとホストのメディアアクセスを同時処理する場合、ステップe)及び/又はステップf)を所定のタイムインターバルで、当該ブロック単位で実行することを特徴とする請求項7項記載のメモリの管理方法。
【請求項9】
ホストが、メディアアクセスコマンドを発行していないときにステップd)を実行させるコマンドを発行し、これにより第1種フラグ及び/又は第2種フラグの設定された物理ブロックがあることが確認された場合は、引き続きコマンドを発行してステップe)及び/又はステップf)を実行することを特徴とする請求項1乃至請求項3いずれか1項記載のメモリの管理方法。
【請求項10】
前記ステップe)及び/又はステップf)を実行させるコマンドの処理中にホストからメディアアクセスコマンドが発行され、その時点で第1種フラグ及び/又は第2種フラグの設定されている物理ブロックが複数存在する場合、それら物理ブロックに対するステップe)及び/又はステップf)の実行を、所定のタイムインターバルで、当該ブロック単位で実行することを特徴とする請求項9記載のメモリの管理方法。
【請求項11】
工場出荷時、リフレッシュ管理テーブルの読み出し回数としてダミーデータを予め記録しておくことを特徴とする請求項1乃至請求項10いずれか1項記載のメモリの管理方法。
【請求項12】
ユーザデータ領域の読み出し回数を物理ブロック単位で毎日記憶しておくとともに、システム電源をオンしたときに、当該物理ブロック単位の読み出し回数の最大値又は平均値を求めて、当日に第1種フラグが設定される物理ブロックが存在するか否かを予想し、設定される可能性がある物理ブロックは、システム本稼動前にリフレッシュを前倒しで実行することを特徴とする請求項1乃至請求項11いずれか1項記載のメモリの管理方法。
【請求項13】
ユーザデータ領域の読み出し回数を物理ブロック単位で毎日記憶しておくとともに、システム稼動終了後、当該物理ブロック単位毎の読み出し回数の最大値又は平均値を求めて、翌日に第1種フラグが設定される物理ブロックが存在するか否かを予想し、設定される可能性がある物理ブロックは、システム電源をOFFする前にリフレッシュを前倒しで実行することを特徴とする請求項1乃至請求項11いずれか1項記載のメモリの管理方法。










【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2009−224012(P2009−224012A)
【公開日】平成21年10月1日(2009.10.1)
【国際特許分類】
【出願番号】特願2008−257302(P2008−257302)
【出願日】平成20年10月2日(2008.10.2)
【出願人】(594096966)株式会社ハギワラシスコム (32)
【Fターム(参考)】