(57)【特許請求の範囲】
【請求項１】
フラッシュメモリを記憶媒体として利用する機器を制御する機器制御手段から発行されるコマンドに従って、前記フラッシュメモリにアクセスするメモリコントローラであって、
前記機器制御手段から発行されたコマンドがデータの書き込み要求を示す場合、前記フラッシュメモリから、当該コマンドで指定されたデータサイズ分の１又は連続する複数の空きセクタを検出するデータ書込領域検索手段と、
該データ書込領域検索手段によって前記空きセクタが検出できなかった場合、１又は連続する複数のブロックを選択し、当該ブロックのデータを消去することで、前記指定されたデータサイズ分の１又は連続する複数の空きセクタを確保するデータ書込領域確保手段と、
前記機器制御手段から発行されたコマンドがデータの書き込み指示を示す場合、前記機器制御手段から転送されたデータを、前記データ書込領域検索手段により検出された空きセクタ、又は、前記データ書込領域確保手段により確保された空きセクタに書き込むデータ書込手段と、
前記機器制御手段から発行されたコマンドがデータの読み出し指示を示す場合、当該データを前記フラッシュメモリから読み出すデータ読出手段と、を備え、
前記データ書込領域確保手段は、前記選択したブロックにおける使用中のセクタのデータを、当該セクタを基準とした上位又は下位のセクタに移動させ、
前記データ読出手段は、当該データが前記データ書込手段により当初に書き込まれた１又は連続する複数のセクタに存在しない場合には、前記データ書込領域確保手段によるデータの移動方向に基づき、前記当初に書き込まれたセクタから上位側のセクタに遡って、又は、前記当初に書き込まれたセクタから下位側のセクタに向かって、当該データを検索する、
ことを特徴とするメモリコントローラ。
【請求項２】
フラッシュメモリを記憶媒体として利用する機器を制御する機器制御手段から発行されるコマンドに従って、前記フラッシュメモリにアクセスするメモリコントローラであって、
前記機器制御手段から発行されたコマンドがデータの書き込み要求を示す場合、前記フラッシュメモリから、当該コマンドで指定されたデータサイズ分の１又は連続する複数の空きセクタを検出するデータ書込領域検索手段と、
該データ書込領域検索手段によって前記空きセクタが検出できなかった場合、１又は連続する複数のブロックを選択し、当該ブロックのデータを消去することで、前記指定されたデータサイズ分の１又は連続する複数の空きセクタを確保するデータ書込領域確保手段と、
前記機器制御手段から発行されたコマンドがデータの書き込み指示を示す場合、前記機器制御手段から転送されたデータを、前記データ書込領域検索手段により検出された空きセクタ、又は、前記データ書込領域確保手段により確保された空きセクタに書き込むデータ書込手段と、
前記機器制御手段から発行されたコマンドがデータの読み出し指示を示す場合、当該データを前記フラッシュメモリから読み出すデータ読出手段と、を備え、
前記データ書込領域確保手段は、予め決められた移動方向に基づいて、前記選択したブロックにおける使用中のセクタのデータを他のセクタに移動させ、
前記データ読出手段は、
前記移動方向に基づいて絞り込んだ領域の範囲における１又は複数のセクタから順次データを読み出す処理と、
該処理にて読み出されたデータが、前記機器制御手段が指定したデータであるか否かを照合する処理と、を並行して行う、
ことを特徴とするメモリコントローラ。
【請求項３】
フラッシュメモリを記憶媒体として利用する機器を制御する機器制御手段から発行されるコマンドに従って、前記フラッシュメモリにアクセスするメモリコントローラであって、
前記機器制御手段から発行されたコマンドがデータの書き込み要求を示す場合、前記フラッシュメモリから、当該コマンドで指定されたデータサイズ分の１又は連続する複数の空きセクタを検出するデータ書込領域検索手段と、
該データ書込領域検索手段によって前記空きセクタが検出できなかった場合、１又は連続する複数のブロックを選択し、当該ブロックのデータを消去することで、前記指定されたデータサイズ分の１又は連続する複数の空きセクタを確保するデータ書込領域確保手段と、
前記機器制御手段から発行されたコマンドがデータの書き込み指示を示す場合、前記機器制御手段から転送されたデータを、前記データ書込領域検索手段により検出された空きセクタ、又は、前記データ書込領域確保手段により確保された空きセクタに書き込むデータ書込手段と、
前記機器制御手段から発行されたコマンドがデータの読み出し指示を示す場合、当該データを前記フラッシュメモリから読み出すデータ読出手段と、を備え、
前記データ書込領域確保手段は、予め決められた移動方向に基づいて、前記選択したブロックにおける使用中のセクタのデータを他のセクタに移動させ、
前記データ読出手段は、当該データが前記データ書込手段により書き込まれた１又は連続する複数のセクタに存在しない場合には、前記移動方向に基づいて絞り込んだ領域の範囲で当該データを検索し、
前記機器制御手段が発行するデータの書き込み要求を示すコマンドには、前記データ書込領域確保手段によって移動が生じるデータ数の許容値が設定されている、
ことを特徴とするメモリコントローラ。
【請求項４】
前記データ書込領域確保手段は、各ブロックに格納されるデータ数が平均化するように、前記選択したブロックにおける使用中のセクタのデータの移動を行う、
ことを特徴とする請求項１乃至３の何れか１項に記載のメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリ等の不揮発性の記憶媒体へのアクセス技術に関する。
【背景技術】
【０００２】
近年、不揮発性の記憶媒体であるフラッシュメモリは、パーソナルコンピュータ等の情報処理装置、携帯電話やデジタルカメラ等、様々な電子機器で使用されている。フラッシュメモリでは、上書き動作が行えないため、ガベージコレクションを適宜実行して、空き容量を確保する必要がある。従来より、かかるガベージコレクションに関連した技術は、種々提案されている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−３２８７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上記のガベージコレクションが実行されると、使用中のセクタのデータが、他のブロックの未使用のセクタに書き込まれるため、メモリコントローラで管理されるアドレス変換テーブルにおける当該データの論理アドレスと物理アドレスとの当初の対応関係が崩れてしまう。したがって、このように他のブロックのセクタに移動したデータに対して、読み出しや削除を行うには、各ブロックのセクタを順次検索して、当該データを見つけ出す必要が生じる。
【０００５】
なお、データの移動が生じる度に上記のアドレス変換テーブルを逐次更新して、論理アドレスと物理アドレスとの対応関係を最新の状態に常時維持することで、上記のような検索をせずに、当該データが格納されているセクタにアクセスすることは可能であるが、処理負荷の増大を伴うことは否めない。
【０００６】
本発明は、フラッシュメモリの制御において、ガベージコレクションによって他のセクタに移動したデータの検索効率を、処理負荷を増大させることなく向上させ、処理速度の向上を図ることができるメモリコントローラを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明に係るメモリコントローラは、
フラッシュメモリを記憶媒体として利用する機器を制御する機器制御手段から発行されるコマンドに従って、前記フラッシュメモリにアクセスするメモリコントローラであって、
前記機器制御手段から発行されたコマンドがデータの書き込み要求を示す場合、前記フラッシュメモリから、当該コマンドで指定されたデータサイズ分の１又は連続する複数の空きセクタを検出するデータ書込領域検索手段と、
該データ書込領域検索手段によって前記空きセクタが検出できなかった場合、１又は連続する複数のブロックを選択し、当該ブロックのデータを消去することで、前記指定されたデータサイズ分の１又は連続する複数の空きセクタを確保するデータ書込領域確保手段と、
前記機器制御手段から発行されたコマンドがデータの書き込み指示を示す場合、前記機器制御手段から転送されたデータを、前記データ書込領域検索手段により検出された空きセクタ、又は、前記データ書込領域確保手段により確保された空きセクタに書き込むデータ書込手段と、
前記機器制御手段から発行されたコマンドがデータの読み出し指示を示す場合、当該データを前記フラッシュメモリから読み出すデータ読出手段と、を備え、
前記データ書込領域確保手段は、前記選択したブロックにおける使用中のセクタのデータを、当該セクタを基準とした上位又は下位のセクタに移動させ、
前記データ読出手段は、当該データが前記データ書込手段により当初に書き込まれた１又は連続する複数のセクタに存在しない場合には、前記データ書込領域確保手段によるデータの移動方向に基づき、前記当初に書き込まれたセクタから上位側のセクタに遡って、又は、前記当初に書き込まれたセクタから下位側のセクタに向かって、当該データを検索する、ことを特徴とする。
【発明の効果】
【０００８】
本発明によれば、空き領域を確保する際、所定の移動方向に基づいて、データを移動させ、データの読み出しの際には、かかる移動方向に基づいて絞り込んだ領域の範囲で当該データを検索するため、フラッシュメモリのアクセスにおいて、処理負荷を増大させることなく検索効率を向上させ、処理速度の向上が図れる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態１に係るメモリコントローラを備えるフラッシュメモリシステムの概略構成を示す図である。
【図２】図１のメモリコントローラの構成を示すブロック図である。
【図３】実施形態１のメモリ制御処理の手順を示すフローチャートである。
【図４】実施形態１のデータ書込可能判定処理の手順を示すフローチャートである。
【図５】図１のフラッシュメモリのメモリ構造を概略的に示す図である。
【図６】実施形態１のデータ書込処理の手順を示すフローチャートである。
【図７】実施形態１のデータ読出処理の手順を示すフローチャートである。
【図８】実施形態１のデータ削除処理の手順を示すフローチャートである。
【図９】実施形態２のデータ読出処理におけるマイクロプロセッサ側の処理の手順を示すフローチャートである。
【図１０】実施形態２のデータ読出処理におけるメモリインタフェース部側の処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態に係るメモリコントローラについて図面を参照して詳細に説明する。
【００１１】
（実施形態１）
図１は、本発明の実施形態１に係るメモリコントローラを備えるフラッシュメモリシステムの概略構成を示す図である。このフラッシュメモリシステムは、例えば、太陽光発電システムにおける複数のパワーコンディショナと接続し、各パワーコンディショナの運転状態に関するデータを収集する機器（いわゆる、データロガー）等に搭載される。
【００１２】
図１において、機器制御部１０は、ＣＰＵ（Central Processing Unit）、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）等（何れも図示せず）から構成され、当該機器全体の制御を行う。
【００１３】
機器制御部１０は、バス４０を介してメモリコントローラ２０と接続し、メモリコントローラ２０は、バス５０を介してフラッシュメモリ３０と接続する。メモリコントローラ２０は、機器制御部１０からのコマンドに従って、フラッシュメモリ３０にアクセスし、データの書き込み、読み出し及び削除や、ガベージコレクション、ブロックの消去等を行う。
【００１４】
メモリコントローラ２０は、図２に示すように、機器インタフェース部２１と、マイクロプロセッサ２２と、ＲＯＭ２３と、ＲＡＭ２４と、クロック源２５と、メモリインタフェース部２６と、から構成される。これらの各構成要素は、一つの半導体チップ上に集積され、メモリコントローラ２０を構成する。なお、本発明のメモリコントローラは、例えば、セルベースＩＣ等を用いたフルロジックで具現化すると、処理の高速化が図れるが、本実施形態においては、理解を容易にするため、本発明のメモリコントーラが図２に示す構成であるものとして説明する。
【００１５】
機器インタフェース部２１は、バス４０を介して機器制御部１０に接続し、機器制御部１０との間でデータ等の授受を行なう回路である。マイクロプロセッサ２２は、ＲＯＭ２３に記憶されているプログラムに従って、メモリコントローラ２０全体の動作を制御する。ＲＡＭ２４は、論理アドレスと物理アドレスとの対応関係を示すアドレス変換テーブルや、書き込み用のデータや読み出したデータ等が一時的に保存される作業用メモリ等として使用される。
【００１６】
クロック源２５は、水晶発振器等により構成され、メモリコントローラ２０の各構成要素の動作の基準となる所定周波数のクロックを各構成要素に供給する。
【００１７】
メモリインタフェース部２６は、マイクロプロセッサ２２からの指令に基づいて、フラッシュメモリ３０にアクセスして、各種の処理（データの書き込み、読み出し及び削除、ガベージコレクション、ブロックの消去等）を行う回路である。
【００１８】
図３は、以上の構成のメモリコントローラ２０が実行するメモリ制御処理の手順を示すフローチャートである。機器インタフェース部２１は、機器制御部１０が発行したコマンドを受信すると（ステップＳ１０１；ＹＥＳ）、これをマイクロプロセッサ２２に供給する。マイクロプロセッサ２２は、かかるコマンドに含まれるコマンド種別をチェックする。
【００１９】
その結果、当該コマンドがデータの書き込み要求を示す場合（ステップＳ１０２；ＹＥＳ）、メモリコントローラ２０は、データの書き込みが可能か否かを判定する処理（データ書込可能判定処理）を実行する（ステップＳ１０３）。データ書込可能判定処理の詳細については後述する。データ書込可能判定処理が終了すると、再度、コマンド受信待ち状態（ステップＳ１０１）となる。
【００２０】
あるいは、当該コマンドがデータの書き込み指示を示す場合（ステップＳ１０４；ＹＥＳ）、メモリコントローラ２０は、機器制御部１０から転送されたデータをフラッシュメモリ３０に書き込む処理（データ書込処理）を実行する（ステップＳ１０５）。データ書込処理の詳細については後述する。データ書込処理が終了すると、再度、コマンド受信待ち状態（ステップＳ１０１）となる。
【００２１】
あるいは、当該コマンドがデータの読み出し指示を示す場合（ステップＳ１０６；ＹＥＳ）、メモリコントローラ２０は、機器制御部１０が指定したデータをフラッシュメモリ３０から読み出し、機器制御部１０に転送する処理（データ読出処理）を実行する（ステップＳ１０７）。データ読出処理の詳細については後述する。データ読出処理が終了すると、再度、コマンド受信待ち状態（ステップＳ１０１）となる。
【００２２】
あるいは、当該コマンドがデータの削除指示を示す場合（ステップＳ１０８；ＹＥＳ）、メモリコントローラ２０は、指定されたデータを削除する処理（データ削除処理）を実行する（ステップＳ１０９）。データ削除処理の詳細については後述する。データ削除処理が終了すると、再度、コマンド受信待ち状態（ステップＳ１０１）となる。
【００２３】
当該コマンドが上記の何れにも該当しない場合（ステップＳ１０８；ＮＯ）、当該コマンドは破棄され（ステップＳ１１０）、再度、コマンド受信待ち状態（ステップＳ１０１）となる。
【００２４】
続いて、上記のデータ書込可能判定処理、データ書込処理、データ読出処理及びデータ削除処理の詳細について説明する。なお、本実施形態のフラッシュメモリシステムでは、機器制御部１０から転送されたデータは、フラッシュメモリ３０の連続した空き領域に格納されるものとする。また、機器制御部１０は、データの上書きを行いたい場合、メモリコントローラ２０に、当該データの読み出し指示を示すコマンド、削除指示を示すコマンド、書き込み要求を示すコマンド及び書き込み指示を示すコマンドを順次発行するものとする。
【００２５】
図４は、データ書込可能判定処理の手順を示すフローチャートである。上述したように、この処理は、受信したコマンドがデータの書き込み要求を示す場合に実行される。この場合のコマンドには、コマンド種別と、書き込みを要求するデータのサイズ（データサイズ）と、が含まれる。先ず、マイクロプロセッサ２２は、受信したコマンドからデータサイズを抽出し、メモリインタフェース部２６に供給する。
【００２６】
メモリインタフェース部２６は、フラッシュメモリ３０にアクセスして、当該データサイズ分の連続した空き領域が存在する否かを探索する（ステップＳ２０１）。ここで、本実施形態におけるフラッシュメモリ３０のメモリ構造を図５に示す。フラッシュメモリ３０のメモリ領域は、“ページ”と“ブロック”に分割されて管理されている。
【００２７】
ページは、データの読み出し及び書き込みにおける処理単位である。ブロックは、データの消去における処理単位である。
【００２８】
図５に示したフラッシュメモリ３０では、１つのページは、１セクタ（５１２バイト）のデータ領域と、１６バイトの冗長領域とを含んでいる。セクタには、機器制御部１０から転送されたデータが書き込まれる。冗長領域には、ページの利用状況を示す情報（利用フラグ）等の付加データが記録される。
【００２９】
利用フラグは、各セクタの利用状況を示す。例えば、「未使用」、「使用中」、「削除」等を示す。例えば、ブロックが消去された直後は、当該ブロックの全てのセクタに対応する利用フラグは「未使用」を示す。そして、この「未使用」セクタのみに、データを書き込めることができる。
【００３０】
上記の探索の結果、機器制御部１０が要求するデータサイズ分の連続した空き領域が存在する場合（ステップＳ２０１；ＹＥＳ）、メモリインタフェース部２６は、そのセクタ（複数セクタからなる場合は、先頭のセクタ）の位置（物理アドレス）をマイクロプロセッサ２２に通知する。マイクロプロセッサ２２は、当該物理アドレスをＲＡＭ２４に保存し、機器インタフェース部２１を介して、データの書き込みが可能である旨を示す応答メッセージを機器制御部１０に発行する（ステップＳ２０２）。
【００３１】
一方、要求されたデータサイズ分の連続した空き領域が存在しない場合（ステップＳ２０１；ＮＯ）、マイクロプロセッサ２２は、メモリインタフェース部２６を介して、ガベージコレクションを実行する（ステップＳ２０３）。例えば、メモリインタフェース部２６は、利用フラグが「削除」を示すセクタを最も多く含むブロックをフラッシュメモリ３０全体から検索し、該当するブロックを消去対象ブロックとして決定する。そして、消去対象ブロック中の利用フラグが「使用中」を示すセクタに格納されているデータを他のブロックの空きセクタ（「未使用」セクタ）に移動、即ち、コピーすると共に、当該移動先のセクタに対応する冗長領域の利用フラグを「使用中」に更新する。
【００３２】
本発明では、ガベージコレクションにおいて、「使用中」セクタのデータの移動方向は、予め決められている。本実施形態では、メモリインタフェース部２６は、「使用中」セクタのデータを当該セクタを基準とした上方向に移動させる。例えば、当該消去対象ブロックのブロック番号が“１０”であり、ページ番号が１０のセクタのデータを移動させる場合、当該データは、ブロック０（先頭ブロック）から、ブロック１０のページ１０までの何れかの空きセクタにコピーされる。
【００３３】
なお、当該消去対象ブロックと移動先のブロックが同一である場合（この例では、ブロック１０のページ０〜１０までの何れかの空きセクタにコピーする場合）、一旦、ＲＡＭ２４などに当該セクタのデータを待避させ、当該ブロックの消去後、再度、ページ０〜１０までの何れかのセクタにその待避したデータを書き込むことになる。
【００３４】
以上のようにして、当該消去対象ブロックについてのガベージコレクションが正常に終了すると（ステップＳ２０４；ＹＥＳ）、マイクロプロセッサ２２は、メモリインタフェース部２６を介して、当該消去対象ブロックを消去する（ステップＳ２０５）。メモリインタフェース部２６は、これにより確保したセクタ（複数セクタからなる場合は、先頭のセクタ）の位置（物理アドレス）をマイクロプロセッサ２２に通知する。マイクロプロセッサ２２は、当該物理アドレスをＲＡＭ２４に保存し、機器インタフェース部２１を介して、データの書き込みが可能である旨を示す応答メッセージを機器制御部１０に発行する（ステップＳ２０２）。
【００３５】
一方、データの移動先が確保できないなど、ガベージコレクションが正常に終了しなかった場合（ステップＳ２０４；ＮＯ）、マイクロプロセッサ２２は、データの書き込みが不可能である旨を示す応答メッセージを機器インタフェース部２１を介して、機器制御部１０に発行する（ステップＳ２０６）。
【００３６】
なお、機器制御部１０が要求するデータサイズが、１ブロック分のデータ領域（例えば、５１２×３２＝１６ｋバイト）を超える場合は、かかるデータサイズに相当する分の連続した複数のブロックについて、上記のガベージコレクション及びブロック消去が行われる。
【００３７】
続いて、データ書込処理（図３のＳ１０５）の詳細について説明する。図６は、データ書込処理の手順を示すフローチャートである。上述したように、この処理は、受信したコマンドがデータの書き込み指示を示す場合に実行される。機器制御部１０は、このコマンドを、先に発行したデータの書き込み要求を示すコマンドに対して、データの書き込み可能である旨の応答メッセージがメモリコントローラ２０から返ってきた場合に発行する。
【００３８】
このコマンドには、コマンド種別と、論理アドレスと、データサイズと、が含まれる。マイクロプロセッサ２２は、機器インタフェース部２１を介し、機器制御部１０に対して、書き込み対象となるデータの転送を要求する（ステップＳ３０１）。機器インタフェース部２１は、かかる要求に応答して機器制御部１０から転送されてくるデータ（転送データ）を受信し（ステップＳ３０２）、ＲＡＭ２４に格納する。
【００３９】
マイクロプロセッサ２２は、先に探索又は確保した領域の先頭を示す物理アドレスと、ＲＡＭ２４に格納されている転送データのポインタと、データサイズと、をパラメータとしたデータの書込指令をメモリインタフェース部２６に発行する。これにより、メモリインタフェース部２６は、ＲＡＭ２４に格納されている転送データをフラッシュメモリ３０の指定された領域に書き込む（ステップＳ３０３）。また、メモリインタフェース部２６は、データを書き込んだセクタに対応する冗長領域の利用フラグを、「未使用」から「使用中」に更新する。
【００４０】
マイクロプロセッサ２２は、転送データの書き込みが完了すると、ＲＡＭ２４に展開しているアドレス変換テーブルを更新する（ステップＳ３０４）。ここでは、マイクロプロセッサ２２は、当該書き込んだ転送データについての論理アドレスと物理アドレスとの対応関係をアドレス変換テーブルに登録する。そして、マイクロプロセッサ２２は、データの書き込みが完了した旨を示す応答メッセージを機器制御部１０に発行して（ステップＳ３０５）、本処理を終了する。
【００４１】
次に、データ読出処理（図３のＳ１０７）の詳細について説明する。図７は、データ読出処理の手順を示すフローチャートである。上述したように、この処理は、受信したコマンドがデータの読み出し指示を示す場合に実行される。
【００４２】
このコマンドには、コマンド種別と、データ名と、論理アドレスと、データサイズと、が含まれる。マイクロプロセッサ２２は、アドレス変換テーブルを参照して、機器制御部１０が指定した当該論理アドレスに対応する物理アドレスを取得する（ステップＳ４０１）。
【００４３】
マイクロプロセッサ２２は、取得した物理アドレスと、データサイズと、をパラメータとしたデータの読出指令をメモリインタフェース部２６に発行する。メモリインタフェース部２６は、指定された物理アドレスと、データサイズと、に対応する１又は複数の連続したセクタからデータの読み出しが可能か否かを判定する（ステップＳ４０２）。例えば、当該セクタが「使用中」である場合、メモリインタフェース部２６は、データの読み出しが可能であると判定し、当該セクタが「使用中」でない場合は、データの読み出しが不可能であると判定する。
【００４４】
上記の判定の結果、当該セクタからデータの読み出しが可能な場合（ステップＳ４０２；ＹＥＳ）、メモリインタフェース部２６は、当該１又は複数のセクタからデータを読み出し、ＲＡＭ２４に格納する（ステップＳ４０３）。一方、当該セクタからデータの読み出しが不可能な場合（ステップＳ４０２；ＮＯ）、メモリインタフェース部２６は、ステップＳ４０７の処理を行う。
【００４５】
ステップＳ４０３でデータが読み出されると、マイクロプロセッサ２２は、読み出されたデータのデータ名を取得する（ステップＳ４０４）。本実施形態では、データ名は、当該データの所定箇所（例えば、データの先頭部分）に埋め込まれており、マイクロプロセッサ２２は、かかる部分を抽出することで、読み出したデータのデータ名を取得する。そして、マイクロプロセッサ２２は、取得したデータ名と、機器制御部１０が指定したデータ名とを比較して、両者が一致するか否かを判定する（ステップＳ４０５）。
【００４６】
読み出したデータのデータ名と、機器制御部１０が指定したデータ名とが一致する場合（ステップＳ４０５；ＹＥＳ）、マイクロプロセッサ２２は、読み出したデータを機器インタフェース部２１を介して、機器制御部１０に転送し（ステップＳ４０６）、本処理を終了する。一方、両者が一致しない場合（ステップＳ４０５；ＮＯ）、メモリインタフェース部２６は、ステップＳ４０７の処理を行う。
【００４７】
ステップＳ４０７では、メモリインタフェース部２６は、次に探索する必要のあるセクタが存在するか否かを判定する。機器制御部１０が指定した論理アドレスに対応する物理アドレスに、機器制御部１０が指定したデータ名のデータが存在しないということは、ガベージコレクションにより、当該データの格納先が移動した可能性が高い。したがって、この場合には、各ブロックのセクタを順次検索して、指定されたデータ名に一致するデータを見つけ出す必要がある。
【００４８】
本実施形態では、上述したように、ガベージコレクションによって、「使用中」セクタのデータは、自己の位置を基準とした上方向のセクタにコピーされる。したがって、本実施形態のメモリコントローラ２０は、当初のセクタから上位側のセクタに遡って、指定されたデータ名に一致するデータを検索する。
【００４９】
具体的には、ステップＳ４０７では、今回アクセスしたセクタ（複数セクタの場合は、先頭のセクタ）の上位側直近に、指定されたデータサイズに相当する分のセクタが存在するか否かを判定する。例えば、指定されたデータサイズが、１セクタのサイズ以下の場合、当該セクタが、先頭ブロック（即ち、ブロック０）の先頭ページ（即ち、ページ０）以外であれば、次に探索（即ち、アクセス）すべきセクタが“存在する”と判定される。
【００５０】
上記の判定の結果、次にアクセスすべきセクタが存在する場合（ステップＳ４０７；ＹＥＳ）、メモリインタフェース部２６は、ステップＳ４０２の処理に戻り、当該セクタからデータの読み出しが可能か否かを判定する。一方、次にアクセスすべきセクタが存在しない場合（ステップＳ４０７；ＮＯ）、マイクロプロセッサ２２は、データの読み出しが不可能である旨を示す応答メッセージを機器インタフェース部２１を介して、機器制御部１０に発行し（ステップＳ４０８）、本処理を終了する。
【００５１】
次に、データ削除処理（図３のＳ１０９）の詳細について説明する。図８は、データ削除処理の手順を示すフローチャートである。上述したように、この処理は、受信したコマンドがデータの削除指示を示す場合に実行される。
【００５２】
このコマンドには、コマンド種別と、データ名と、論理アドレスと、データサイズと、が含まれる。マイクロプロセッサ２２は、アドレス変換テーブルを参照して、機器制御部１０が指定した当該論理アドレスに対応する物理アドレスを取得する（ステップＳ５０１）。
【００５３】
マイクロプロセッサ２２は、取得した物理アドレスと、データサイズと、をパラメータとしたデータの削除指令をメモリインタフェース部２６に発行する。メモリインタフェース部２６は、指定された物理アドレスと、データサイズと、に対応する１又は複数の連続したセクタからデータの削除が可能か否かを判定する（ステップＳ５０２）。例えば、当該セクタが「使用中」である場合、メモリインタフェース部２６は、データの削除が可能であると判定し、当該セクタが、「未使用」や「削除」等、「使用中」でない場合は、データの削除が不可能であると判定する。
【００５４】
上記の判定の結果、当該セクタのデータが削除可能な場合（ステップＳ５０２；ＹＥＳ）、メモリインタフェース部２６は、当該セクタからデータを読み出し、ＲＡＭ２４に格納する（ステップＳ５０３）。なお、ここでのデータの読み出しは、後述するように、データ名の取得を目的とするため、削除対象のデータが複数のセクタに亘って格納されている場合には、先頭のセクタのデータのみが読み出されるようにしてもよい。
【００５５】
ステップＳ５０３でデータが読み出されると、マイクロプロセッサ２２は、読み出されたデータのデータ名を取得する（ステップＳ５０４）。そして、マイクロプロセッサ２２は、取得したデータ名と、機器制御部１０が指定したデータ名とを比較して、両者が一致するか否かを判定する（ステップＳ５０５）。
【００５６】
読み出したデータのデータ名と、機器制御部１０が指定したデータ名とが一致する場合（ステップＳ５０５；ＹＥＳ）、マイクロプロセッサ２２は、メモリインタフェース部２６を介して、当該１又は複数のセクタのデータを削除する（ステップＳ５０６）。具体的には、メモリインタフェース部２６は、セクタのデータを消去するのではなく、当該セクタに対応する冗長領域の利用フラグを「削除」に更新する。
【００５７】
また、マイクロプロセッサ２２は、ＲＡＭ２４に展開しているアドレス変換テーブルを更新する（ステップＳ５０７）。ここでは、マイクロプロセッサ２２は、当該削除したデータについての論理アドレスと物理アドレスとの対応関係をアドレス変換テーブルから削除する。そして、マイクロプロセッサ２２は、データの削除が完了した旨を示す応答メッセージを機器インタフェース部２１を介して、機器制御部１０に発行し（ステップＳ５０８）、本処理を終了する。一方、双方のデータ名が一致しない場合（ステップＳ５０５；ＮＯ）、メモリインタフェース部２６は、ステップＳ５０９の処理を行う。
【００５８】
ステップＳ５０９では、メモリインタフェース部２６は、上述したデータ読出処理の場合（図７のステップＳ４０７）と同様に、次に探索すべきセクタが存在するか否かを判定する。その結果、次に探索すべきセクタが存在する場合（ステップＳ５０９；ＹＥＳ）、メモリインタフェース部２６は、ステップＳ５０２の処理に戻り、当該セクタからデータの削除が可能か否かを判定する。一方、次に探索すべきセクタが存在しない場合（ステップＳ５０９；ＮＯ）、マイクロプロセッサ２２は、データの削除が不可能である旨を示す応答メッセージを機器インタフェース部２１を介して、機器制御部１０に発行し（ステップＳ５１０）、本処理を終了する。
【００５９】
以上のように、本実施形態に係るメモリコントローラ２０では、ガベージコレクションを実行して空き領域を確保する場合、予め決められた移動方向に従って、「使用中」セクタのデータを当該セクタを基準とした上方向に移動させる。したがって、データの読み出しや削除において、アドレス変換テーブルによって得られた書き込み時の当初のセクタ位置に当該データが存在しない場合、上位側のセクタに遡って、指定されたデータ名に一致するデータを検索すればよいため、検索の範囲が絞られ、該当データを効率的に見つけ出すことが可能になる。
【００６０】
また、ガベージコレクションにより、データの移動が生じる度にアドレス変換テーブルを逐次更新する必要がないため、処理負荷の低減も図れる。
【００６１】
なお、本例では、ガベージコレクションの際、メモリインタフェース部２６は、「使用中」セクタのデータを当該セクタを基準とした上方向に移動させていたが、下方向に移動させる仕様にしてもよい。この場合、例えば、当該消去対象ブロックのブロック番号が“１０”であり、ページ番号が１０のセクタのデータを移動させる場合、当該データは、ブロック１０のページ１０から最終ブロックのページ３１までの何れかの空きセクタにコピーされることになる。
【００６２】
そして、データの読み出しや削除において、アドレス変換テーブルによって得られた書き込み時の当初のセクタ位置に当該データが存在しない場合、下位側のセクタに向かって、指定されたデータ名に一致するデータの検索が行われる。このようにしても、検索の範囲が絞られるため、上方向に移動させる場合と同様の効果を奏する。
【００６３】
あるいは、ガベージコレクションの際、メモリインタフェース部２６は、「使用中」セクタのデータを、ブロックｉからブロックｊ（ｊ＞ｉ）の間等、特定の領域に移動させるようにしてもよい。このようにしても、データの読み出しや削除において、検索の範囲が絞られるため、該当データを効率的に見つけ出すことが可能になる。
【００６４】
（実施形態２）
続いて、本発明の実施形態２に係るメモリコントローラについて説明する。本実施形態のメモリコントローラの物理的な構成は、実施形態１のメモリコントローラ２０（図２参照）と同様である。以下、本実施形態のメモリコントローラの各構成要素には、実施形態１のメモリコントローラ２０と同一の符号を付し、実施形態２のメモリコントローラの特徴を中心に説明する。
【００６５】
本実施形態のメモリコントローラでは、データ読出処理において、いわゆるバーストモードにてデータの読み出しを行い、データの読み出しと、マイクロプロセッサ２２によるデータ名の照合とが並行して行われる点に特徴を有する。他の点については、実施形態１のメモリコントローラ２０と略同様である。
【００６６】
図９は、本実施形態のデータ読出処理におけるマイクロプロセッサ２２側の処理の手順を示すフローチャートである。実施形態１と同様、この処理は、機器制御部１０が発行したコマンドがデータの読み出し指示を示す場合に実行される。
【００６７】
マイクロプロセッサ２２は、アドレス変換テーブルを参照して、機器制御部１０が指定した当該論理アドレスに対応する物理アドレスを取得する（ステップＳ６０１）。マイクロプロセッサ２２は、取得した物理アドレスと、データサイズと、をパラメータとしたデータの読出指令をメモリインタフェース部２６に発行する（ステップＳ６０２）。
【００６８】
上記の読出指令の発行後、マイクロプロセッサ２２は、メモリインタフェース部２６により読み出されたデータがＲＡＭ２４に格納されているか否かを判定する（ステップＳ６０３）。ＲＡＭ２４に読み出されたデータが格納されている場合（ステップＳ６０３；ＹＥＳ）、マイクロプロセッサ２２は、かかるデータのデータ名を取得する（ステップＳ６０４）。一方、ＲＡＭ２４に読み出されたデータが存在しない場合（ステップＳ６０３；ＮＯ）であって、メモリインタフェース部２６から探索が終了した旨の応答を受けていると（ステップＳ６０５；ＹＥＳ）、マイクロプロセッサ２２は、データの読み出しが不可能である旨を示す応答メッセージを機器インタフェース部２１を介して、機器制御部１０に発行し（ステップＳ６０６）、本処理を終了する。
【００６９】
メモリインタフェース部２６から探索が終了した旨の応答を受けていない場合（ステップＳ６０５；ＮＯ）、マイクロプロセッサ２２は、ステップＳ６０３の処理を再度実行する。
【００７０】
ステップＳ６０４にて、ＲＡＭ２４に読み出されたデータのデータ名を取得すると、マイクロプロセッサ２２は、取得したデータ名と、機器制御部１０が指定したデータ名とを比較して、両者が一致するか否かを判定する（ステップＳ６０７）。
【００７１】
読み出したデータのデータ名と、機器制御部１０が指定したデータ名とが一致する場合（ステップＳ６０７；ＹＥＳ）、マイクロプロセッサ２２は、読み出したデータを機器インタフェース部２１を介して、機器制御部１０に転送する（ステップＳ６０８）。そして、マイクロプロセッサ２２は、データの読出終了指令をメモリインタフェース部２６に発行し（ステップＳ６０９）、本処理を終了する。一方、両者が一致しない場合（ステップＳ６０７；ＮＯ）、マイクロプロセッサ２２は、ステップＳ６０３の処理を再度行い、メモリインタフェース部２６により読み出され、ＲＡＭ２４に格納されている次のデータが存在する場合には（ステップＳ６０３；ＹＥＳ）、そのデータ名を取得する（ステップＳ６０４）。以降、ステップＳ６０５でＹＥＳ、又は、ステップＳ６０７でＹＥＳになるまで、マイクロプロセッサ２２は、上記処理を繰り返し行う。
【００７２】
図１０は、データ読出処理におけるメモリインタフェース部２６側の処理の手順を示すフローチャートである。この処理は、マイクロプロセッサ２２からのデータ読出指令を受けることで開始される。メモリインタフェース部２６は、マイクロプロセッサ２２からのデータ読出終了指令を受けたか否かを判定し（ステップＳ７０１）、マイクロプロセッサ２２からのデータ読出終了指令を受けている場合は（ステップＳ７０１；ＹＥＳ）、本処理を終了する。一方、データ読出終了指令を受けていない場合は（ステップＳ７０１；ＮＯ）、指定された物理アドレスと、データサイズと、に対応する１又は複数の連続したセクタからデータの読み出しが可能か否かを判定する（ステップＳ７０２）。
【００７３】
例えば、当該セクタが「使用中」である場合、メモリインタフェース部２６は、データの読み出しが可能であると判定し、当該セクタが「使用中」でない場合は、データの読み出しが不可能であると判定する。上記の判定の結果、当該セクタからデータの読み出しが可能な場合（ステップＳ７０２；ＹＥＳ）、メモリインタフェース部２６は、当該１又は複数のセクタからデータを読み出し、ＲＡＭ２４に格納する（ステップＳ７０３）。一方、当該セクタからデータの読み出しが不可能な場合（ステップＳ７０２；ＮＯ）、又は、ステップＳ７０３の処理後、メモリインタフェース部２６は、次に探索する必要のあるセクタが存在するか否かを判定する（ステップＳ７０４）。
【００７４】
上記の判定の結果、次にアクセスすべきセクタが存在しない場合（ステップＳ７０４；ＮＯ）、メモリインタフェース部２６は、探索が終了した旨をマイクロプロセッサ２２に応答し（ステップＳ７０５）、本処理を終了する。一方、次にアクセスすべきセクタが存在する場合（ステップＳ７０４；ＹＥＳ）、メモリインタフェース部２６は、ステップＳ７０１の処理に戻り、マイクロプロセッサ２２からのデータ読出終了指令を受けたか否かを判定する。
【００７５】
以降、ステップＳ７０１でＹＥＳ、又は、ステップＳ７０４でＮＯになるまで、メモリインタフェース部２６は、上記処理を繰り返し行う。
【００７６】
このように、本実施形態のメモリコントローラでは、メモリインタフェース部２６によるデータの読み出しと、マイクロプロセッサ２２によるデータ名の照合とを並行して行うため、処理の高速化が図れる。
【００７７】
なお、マイクロプロセッサ２２によるデータ名の照合処理に空き時間ができないようにするため、２つのクロック源を備える構成にし、メモリコントローラ２０によるデータ読み出し動作よりも、マイクロプロセッサ２２によるデータ名の照合動作の速度を遅くするようにしてもよい。
【００７８】
本発明は、上記の各実施形態に限定されず、本発明の要旨を逸脱しない範囲での種々の変更は勿論可能である。
【００７９】
例えば、機器制御部が書き込みを要求するデータサイズが、１ブロック分のデータ領域（例えば、５１２×３２＝１６ｋバイト）以内であることが前提条件である場合、データ書込可能判定処理において、一のブロック内で、要求されたデータサイズ分の連続した空き領域があるか否かを探索するようにしてもよい。このようにすることで、ブロックをまたがずにデータを格納することができ、ガベージコレクションの際の書き換え回数を低減させることができる。
【００８０】
また、ブロック毎の消去動作回数や書き換え回数の平均化を図る観点から、ガベージコレクションにおいて、各ブロック内に存在するデータ数が平均化するように、データの移動を行うようにしてもよい。
【００８１】
また、所定のタイミングで（例えば、定期的に）、機器制御部から所定のデータサイズを指定したデータの書き込み要求を示すコマンドをメモリコントローラに発行することで、書き込むべきデータの有無にかかわらず、所望のタイミングで、メモリコントローラにガベージコレクションを実行させることも可能である。
【００８２】
また、機器制御部からデータの書き込み要求を示すコマンドをメモリコントローラに発行する際、予め、ガベージコレクションにより移動が生じるデータ数の上限（許容値）を指定できるようにしてもよい。このようにすると、例えば、それぞれのデータサイズは小さいものの、格納されているデータ数が多いブロックは、消去対象ブロックから除外されるため、データの書き換え回数の低減が図れる。
【産業上の利用可能性】
【００８３】
本発明は、フラッシュメモリ等の不揮発性の記憶媒体を利用する様々な電子機器に好適に採用され得る。
【符号の説明】
【００８４】
１０  機器制御部
２０  メモリコントローラ
２１  機器インタフェース部
２２  マイクロプロセッサ
２３  ＲＯＭ
２４  ＲＡＭ
２５  クロック源
２６  メモリインタフェース部
３０  フラッシュメモリ
【図１】
0005253471.tif 000002
【図２】
0005253471.tif 000003
【図３】
0005253471.tif 000004
【図４】
0005253471.tif 000005
【図５】
0005253471.tif 000006
【図６】
0005253471.tif 000007
【図７】
0005253471.tif 000008
【図８】
0005253471.tif 000009
【図９】
0005253471.tif 000010
【図１０】
0005253471.tif 000011