(57)【要約】【課題】サブディレクトリエントリ更新時においても高速アクセスが可能なメモリコントローラを提供すること。【解決手段】半導体メモリ１１を制御するメモリコントローラ１２であって、ホスト機器２に接続可能とされ、前記ホスト機器２からデータ及びアドレスを受信するホストインタフェース２０と、前記アドレスを保持可能な保持回路２５と、前記データから上位ディレクトリを示す情報を検出し、検出された場合には前記アドレスを前記保持回路２５に保持させる制御回路２２〜２４とを具備し、前記制御回路２２〜２４は、前記保持回路２５に保持される前記アドレスと同一アドレスに対して書き込みアクセスが為された際には、当該データを同一の前記メモリブロックに順次書き込む。【選択図】      図３
2008084184.tif 000002
【特許請求の範囲】
【請求項１】
各々がデータを保持可能な複数の不揮発性のメモリセルを含むメモリブロックを複数備え、且つ前記メモリブロック単位でデータが消去される半導体メモリを制御するメモリコントローラであって、
ホスト機器に接続可能とされ、前記ホスト機器からデータ及び該データを書き込むべきアドレスを受信するホストインタフェースと、
前記ホストインタフェースで受信された前記アドレスを保持可能な保持回路と、
前記ホストインタフェースで受信された前記データから当該データの上位ディレクトリを示す情報を検出し、検出された場合には、該データを書き込むべき前記アドレスを前記保持回路に保持させる制御回路と
を具備し、前記制御回路は、前記保持回路に保持された前記アドレスと同一アドレスに対して書き込みアクセスが為された際には、同一の前記メモリブロックに当該データを順次書き込む
ことを特徴とするメモリコントローラ。
【請求項２】
前記制御回路は、前記上位ディレクトリを示す情報の値を保持する上位ディレクトリ情報保持部と、
前記上位ディレクトリ情報保持部において保持される値が前記データに含まれているか否かによって、前記データにおける前記上位ディレクトリを示す情報の有無を検出する検出部と、
前記検出部において前記上位ディレクトリを示す情報が検出された際に、前記データを前記保持回路に保持させる制御部と
を備えることを特徴とする請求項１記載のメモリコントローラ。
【請求項３】
各々がデータを保持可能な複数の不揮発性のメモリセルを含むメモリブロックを複数備え、且つ前記メモリブロック単位でデータが消去される半導体メモリを制御するメモリコントローラであって、
ホスト機器に接続可能とされ、前記ホスト機器からデータ及び該データを書き込むべきアドレスを受信するホストインタフェースと、
前記ホストインタフェースで受信された前記アドレスを保持可能な保持回路と、
前記ホストインタフェースで受信された前記データ中において、所定の値が一定間隔で繰り返し含まれているか否かを検出し、含まれている場合には、該データを書き込むべき前記アドレスを前記保持回路に保持させる制御回路と
を具備し、前記所定の値とは、前記データがサブディレクトリエントリである場合に、当該サブディレクトリエントリに含まれるエントリがディレクトリであるかファイルであるかを示す値であり、
前記制御回路は、前記保持回路に保持された前記アドレスと同一アドレスに対して書き込みアクセスが為された際には、同一の前記メモリブロックに当該データを順次書き込む
ことを特徴とするメモリコントローラ。
【請求項４】
各々がデータを保持可能な複数の不揮発性のメモリセルを含むメモリブロックを複数備え、且つ前記メモリブロック単位でデータが消去される半導体メモリを制御するメモリコントローラであって、
ホスト機器に接続可能とされ、前記ホスト機器からデータ及び該データを書き込むべきアドレスを受信するホストインタフェースと、
前記半導体メモリからルートディレクトリエントリを読み出し、該半導体メモリに含まれるサブディレクトリエントリのアドレスを算出する制御回路と、
前記制御回路で算出された前記サブディレクトリエントリのアドレスを保持する保持回路と
を具備し、前記制御回路は、前記保持回路に保持された前記アドレスと同一アドレスに対して書き込みアクセスが為された際には、同一の前記メモリブロックに当該データを順次書き込む
ことを特徴とするメモリコントローラ。
【請求項５】
前記制御回路は、前記データ中に前記上位ディレクトリを示す情報が検出された場合には、いずれかの前記メモリブロックを新たに確保し、確保した該メモリブロックに前記データを書き込む
ことを特徴とする請求項１または２記載のメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、メモリコントローラに関する。例えば、不揮発性の半導体メモリチップの動作を制御するメモリコントローラに関する。
【背景技術】
【０００２】
近年、デジタルカメラや携帯型オーディオプレーヤの急速な普及により、大容量の不揮発性半導体メモリの需要が拡大している。そして、不揮発性半導体メモリとしてＮＡＮＤ型フラッシュメモリが広く使用されている。
【０００３】
ＮＡＮＤ型フラッシュメモリでは、データを管理する方式としてＦＡＴ（File Allocation System）ファイルシステムが広く用いられている。上記ＦＡＴファイルシステムによれば、ＮＡＮＤ型フラッシュメモリにはルートディレクトリの情報を保持するルートディレクトリエントリが設けられる。ルートディレクトリエントリには、ルートディレクトリにあるファイルやサブディレクトリの情報が格納されている。従って、ルートディレクトリエントリは頻繁に更新され、且つ比較的データサイズが小さい。
【０００４】
この点、ＮＡＮＤ型フラッシュメモリにおいては、データは複数のメモリセルにつき一括して消去される。この消去単位を、以下メモリブロックと呼ぶ。そしてＮＡＮＤ型フラッシュメモリではその特性上、データを上書きすることができない。そこで、ルートディレクトリエントリが更新される際には、キャッシュとして用いる別のメモリブロックを用意し、更新される度にこのメモリブロックにルートディレクトリエントリを追記する方法が提案されている（例えば特許文献１参照）。
【０００５】
本方法であると、ルートディレクトリエントリの更新時におけるメモリブロック間でのデータの移動を低減出来、高速アクセスが可能となる。しかしながら、アドレスが固定されていないサブディレクトリエントリの更新時の対応が困難であるという問題があった。
【特許文献１】特開２００６−０１８４７１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
この発明は、サブディレクトリエントリ更新時においても高速アクセスが可能なメモリコントローラを提供する。
【課題を解決するための手段】
【０００７】
この発明の一態様に係るメモリコントローラは、各々がデータを保持可能な複数の不揮発性のメモリセルを含むメモリブロックを複数備え、且つ前記メモリブロック単位でデータが消去される半導体メモリを制御するカードコントローラであって、ホスト機器に接続可能とされ、前記ホスト機器からデータ及び該データを書き込むべきアドレスを受信するホストインタフェースと、前記ホストインタフェースで受信された前記アドレスを保持可能な保持回路と、前記ホストインタフェースで受信された前記データから当該データの上位ディレクトリを示す情報を検出し、検出された場合には、該データを書き込むべき前記アドレスを前記保持回路に保持させる制御回路とを具備し、前記制御回路は、前記保持回路に保持された前記アドレスと同一アドレスに対して書き込みアクセスが為された際には、同一の前記メモリブロックに当該データを順次書き込む。
【発明の効果】
【０００８】
本発明によれば、サブディレクトリエントリ更新時においても高速アクセスが可能なメモリコントローラを提供出来る。
【発明を実施するための最良の形態】
【０００９】
以下、この発明の実施形態につき図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【００１０】
［第１の実施形態］  
この発明の第１の実施形態に係るメモリコントローラについて、図１を用いて説明する。図１は、本実施形態に係るメモリシステムのブロック図である。
【００１１】
図示するようにメモリシステムは、メモリカード１及びホスト機器２を備えている。ホスト機器２は、バスインタフェース１４を介して接続されるメモリカード１に対しアクセスを行うためのハードウェアおよびソフトウェアを備えている。メモリカード１は、ホスト機器２に接続された時に電源供給を受けて動作し、ホスト機器２からのアクセスに応じた処理を行う。
【００１２】
メモリカード１は、ホスト機器２とバスインタフェース１４を介して情報の授受を行う。メモリカード１は、ＮＡＮＤ型フラッシュメモリチップ（単にＮＡＮＤ型フラッシュメモリ、またはフラッシュメモリと呼ぶことがある）１１、フラッシュメモリチップ１１を制御するカードコントローラ１２、および複数の信号ピン（第１ピン乃至第９ピン）１３を備えている。
【００１３】
複数の信号ピン１３は、カードコントローラ１２と電気的に接続されている。複数の信号ピン１３における第１ピン乃至第９ピンに対する信号の割り当ては、例えば図２に示すようになっている。図２は、第１ピン乃至第９ピンと、それらに割り当てられた信号とを示す表である。
【００１４】
データ０乃至データ３は、第７ピン、第８ピン、第９ピン、および第１ピンにそれぞれ割り当てられている。第１ピンは、また、カード検出信号に対しても割り当てられている。さらに、第２ピンはコマンドに割り当てられ、第３ピンおよび第６ピンは接地電位Ｖssに、第４ピンは電源電位Ｖddに、第５ピンはクロック信号に割り当てられている。
【００１５】
また、メモリカード１は、ホスト機器２に設けられたスロットに対して挿抜可能なように形成されている。ホスト機器２に設けられたホストコントローラ（図示せず）は、これら第１ピン乃至第９ピンを介してメモリカード１内のカードコントローラ１２と各種信号およびデータを通信する。例えば、メモリカード１にデータが書き込まれる際には、ホストコントローラは、書き込みコマンドを、第２ピンを介してカードコントローラ１２にシリアルな信号として送出する。このとき、カードコントローラ１２は、第５ピンに供給されているクロック信号に応答して、第２ピンに与えられる書き込みコマンドを取り込む。
【００１６】
ここで、前述したように、書き込みコマンドは、第２ピンのみを利用してカードコントローラ１２にシリアルに入力される。コマンドの入力に割り当てられている第２ピンは、図２に示すように、データ３用の第１ピンと接地電位Ｖss用の第３ピンとの間に配置されている。複数の信号ピン１３とそれに対するバスインタフェース１４は、ホスト機器２内のホストコントローラとメモリカード１とが通信するのに使用される。
【００１７】
これに対し、フラッシュメモリ１１とカードコントローラ１２との間の通信は、ＮＡＮＤ型フラッシュメモリ用のインタフェースによって行われる。したがって、ここでは図示しないが、フラッシュメモリ１１とカードコントローラ１２とは例えば８ビットの入出力（Ｉ／Ｏ）線により接続されている。
【００１８】
例えば、カードコントローラ１２がフラッシュメモリ１１にデータを書き込む際には、カードコントローラ１２は、これらＩ／Ｏ線を介してデータ入力コマンド８０Ｈ、カラムアドレス、ページアドレス、データ、およびプログラムコマンド１０Ｈをフラッシュメモリ１１に順次入力する。ここで、コマンド８０Ｈの“Ｈ”は１６進数を示すものであり、実際には“１０００００００”という８ビットの信号が、８ビットのＩ／Ｏ線にパラレルに与えられる。つまり、このＮＡＮＤ型フラッシュメモリ用のインタフェースでは、複数ビットのコマンドがパラレルに与えられる。
【００１９】
また、ＮＡＮＤ型フラッシュメモリ用のインタフェースでは、フラッシュメモリ１１に対するコマンドとデータが同じＩ／Ｏ線を共用して通信されている。このように、ホスト機器２内のホストコントローラとメモリカード１とが通信するインタフェースと、フラッシュメモリ１１とカードコントローラ１２とが通信するインタフェースとは異なる。
【００２０】
次に、図１に示すメモリカード１の備えるカードコントローラの内部構成について図３を用いて説明する。図３はカードコントローラ１２のブロック図である。
【００２１】
カードコントローラ１２は、フラッシュメモリ１１内部の物理状態（例えば、何処の物理ブロックアドレスに、何番目の論理セクタアドレスデータが含まれているか、あるいは、何処のブロックが消去状態であるか）を管理する。カードコントローラ１２は、ホストインタフェースモジュール２０、命令・アドレス検出部２１、サブディレクトリエントリ検出部２２、パターン記憶部２３、ＭＰＵ（Micro processing unit）２４、アドレス保存部２５、データバッファ２６、フラッシュコントローラ２７、ＲＯＭ（Read-only memory）２８、及びＲＡＭ（Random access memory）２９を有する。
【００２２】
ホストインタフェースモジュール２１は、カードコントローラ１２とホスト機器２との間のインタフェース処理を行う。すなわち、データの書き込み時には書き込み命令、書き込みアドレス、及び書き込みデータをホスト機器２から受け取る。そして書き込み命令及びアドレスを命令・アドレス検出部２１へ出力し、書き込みデータをサブディレクトリエントリ検出部２２へ出力する。
【００２３】
命令・アドレス検出部２１は、ホストインタフェースモジュール２０から書き込み命令及びアドレスを受け取る。そして書き込み命令をＭＰＵ２４へ出力する。また命令・アドレス検出部２１は、アドレスを確認することにより、書き込み命令がルートディレクトリエントリの更新であるか否かを判定する。ルートディレクトリエントリについては後述する。
【００２４】
サブディレクトリエントリ検出部２２は、ホストインタフェースモジュール２０から書き込みデータを受け取る。そして、パターン記憶部２３に保持されているパターンを用いて、書き込みデータがサブディレクトリエントリであるか否かを検出する。パターン及びサブディレクトリエントリについては後述する。そして書き込みデータをデータバッファ２６へ出力する。
【００２５】
ＭＰＵ２４は、メモリカード１全体の動作を制御する。ＭＰＵ２４は、例えばメモリカード１が電源供給を受けたときに、ＲＯＭ２８に格納されているファームウェア（制御プログラム）をＲＡＭ２９上に読み出して所定の処理を実行することにより、各種のテーブルをＲＡＭ２９上に作成する。またＭＰＵ２４は、命令・アドレス検出部２１から前述の書き込み命令、及び読み出し命令や消去命令を受け取り、フラッシュメモリ１１に対して所定の処理を実行したり、バッファ２６を通じたデータ転送処理を制御したりする。
【００２６】
ＲＯＭ２８は、ＭＰＵ２４により制御される制御プログラムなどを格納する。ＲＡＭ２９は、ＭＰＵ２４の作業エリアとして使用され、制御プログラムや各種のテーブル（表）を記憶する。フラッシュコントローラ２７は、カードコントローラ１２とフラッシュメモリ１１との間のインタフェース処理を行う。
【００２７】
バッファ２６は、ホスト機器２から送られてくる書き込みデータをフラッシュメモリ１１へ書き込む際に、一定量のデータ（例えば、１ページ分）を一時的に記憶したり、フラッシュメモリ１１から読み出されるデータをホスト機器２へ送り出す際に、一定量のデータを一時的に記憶したりする。
【００２８】
次に、ＮＡＮＤ型フラッシュメモリ１１の内部構成について簡単に説明する。図４はＮＡＮＤ型フラッシュメモリ１１のブロック図である。図示するようにＮＡＮＤ型フラッシュメモリ１１は、メモリセルアレイ３０及びページバッファ３１を備えている。
【００２９】
メモリセルアレイ３０は、複数のメモリセルブロックＢＬＫ０〜ＢＬＫｎ（ｎは２以上の自然数）を含んでいる。なお以下ではメモリセルブロックＢＬＫ０〜ＢＬＫｎを単純にメモリブロックＢＬＫと呼ぶことがある。また、データの消去はメモリブロックＢＬＫ単位で行われる。すなわち、同一メモリセルブロックＢＬＫ内のデータは一括して消去される。メモリセルブロックＢＬＫの各々は、複数のメモリセルＭＣを備えている。各メモリセルは、フローティングゲートとコントロールゲートとを含む積層ゲートを備えたＭＯＳトランジスタである。またメモリセルブロックＢＬＫ内には、複数のワード線ＷＬ０、ＷＬ１、…（以下ワード線ＷＬと呼ぶ）と、ワード線ＷＬに直交するビット線ＢＬ０、ＢＬ１、…（以下ビット線ＢＬと呼ぶ）とが設けられている。そして、同一行にあるメモリセルＭＣは同一のワード線に共通接続されている。また、同一列にあるメモリセルＭＣは、複数のメモリセル単位でビット線ＢＬに共通接続されている。なお、データの書き込み及び読み出しは複数のメモリセルの集合毎に行われ、このメモリセルの集合を１ページと呼ぶ。なお、読み出し時及び書き込み時において、ロウアドレスによっていずれかのワード線ＷＬが選択され、カラムアドレスによっていずれかのビット線ＢＬが選択される。図４の例であると、フラッシュメモリ１１の各ページは、２１１２バイト（５１２バイト分のデータ記憶部×４＋１０バイト分の冗長部×４＋２４バイト分の管理データ記憶部）を有しており、各メモリブロックＢＬＫは例えば１２８ページを含んでいる。
【００３０】
ページバッファ３１は、フラッシュメモリ１１へのデータ入出力を行い、データを一時的に保持する。ページバッファ３１が保持可能なデータサイズは、各メモリブロックＢＬＫのページサイズと同じく２１１２バイト（２０４８バイト＋６４バイト）である。データ書き込みなどの際、ページバッファ１１は、フラッシュメモリ１１に対するデータ入出力処理を、自身の記憶容量に相当する１ページ分の単位で実行する。なお、以下では説明の簡単化のために、冗長部及び管理データ記憶部については省略し、１ページのデータサイズが２０４８バイトであるとして説明を行う。
【００３１】
次に、上記フラッシュメモリ１１において、データが書き込まれる領域の構成について図５を用いて説明する。図５は、フラッシュメモリ１１の備えるメモリセルアレイ３０のメモリ空間を示す概念図である。図示するようにメモリ空間は、おおまかにはユーザデータ領域４０及び管理領域４１に分けられる。
【００３２】
ユーザデータ領域４０は、ユーザによって書き込まれる正味のデータを格納する領域である。
【００３３】
管理領域４１は、フラッシュメモリ１１に記録されているファイル（データ）を管理するために設けられており、ファイルの管理情報を保持する。このように、メモリに記録されているファイル（データ）を管理する方式をファイルシステムと呼ぶ。ファイルシステムにおいては、メモリにおけるファイルやフォルダなどのディレクトリ情報の作成方法、ファイルやフォルダなどの移動方法や削除方法、データの記録方式、管理領域の場所や利用方法などが定められる。図５では一例としてＦＡＴ（File Allocation Table）ファイルシステムについて示している。
【００３４】
管理領域４１は、例えばブート領域４２、パーティション情報領域４３、ルートディレクトリエントリ４４、ＦＡＴ１（４５）、及びＦＡＴ２（４６）を含んでいる。ブート領域４２は、例えばブート情報を記憶する。パーティション情報領域４３はパーティション情報を記憶する。ＦＡＴ１及びＦＡＴ２は、データがいずれのクラスタに記憶されているかを記憶する。ルートディレクトリエントリ４４は、ルートディレクトリの情報を記憶する。そして、ファイル名又はフォルダ名、ファイルサイズ、属性及びファイルの更新日時などとともに、ＦＡＴ１、ＦＡＴ２に示されたどのクラスタがファイルの先頭クラスタであるかを記憶する。
【００３５】
ユーザデータ領域４０は、クラスタと呼ばれる複数の領域を含んでいる。そして、書き込まれるデータがクラスタサイズより大きい場合、クラスタ単位に分割されて記憶される。この際、データが書き込まれるクラスタは連続しない場合がある。すなわち、１つのデータが場所的に離れたクラスタに書き込まれる。この際に、データがどのクラスタに分割されて書き込まれたかを管理するための管理データが、ＦＡＴ１、ＦＡＴ２に記憶される。
【００３６】
一例として、フラッシュメモリ１１におけるディレクトリ構造が図６に示すようであったとする。図６はディレクトリツリーを示す概念図である。図中において、“＜”と“＞”で区切ったものはディレクトリを示す。図示するように、ルートディレクトリにはサブディレクトリ“ＡＡＡ”と、２つのテキストファイル“ＦＩＬＥ１．ｔｘｔ”、“ＦＩＬＥ２．ｔｘｔ”が含まれる。またサブディレクトリ“ＡＡＡ”にはサブディレクトリ“ＢＢＢ”と、２つの画像ファイル“ＦＩＬＥ１Ａ．ｊｐｇ”、“ＦＩＬＥ１Ｂ．ｊｐｇ”が含まれる。更にサブディレクトリ“ＢＢＢ”には、２つの画像ファイル“ＦＩＬＥ１Ｂ．ｊｐｇ”、“ＦＩＬＥ２Ｂ．ｊｐｇ”が含まれる。
【００３７】
上記のディレクトリ構成におけるルートディレクトリエントリ４４の内容について図７を用いて説明する。図７はルートディレクトリエントリ４４の構成を示す概念図である。ルートディレクトリエントリ４４は、各々が３２バイトの複数のエントリを備える。そして各エントリが、ルートディレクトリに含まれるファイルまたはサブディレクトリに関する情報を保持する。各エントリは、３２バイトの先頭バイト位置から順に、ファイルまたはサブディレクトリの名前（８バイト）、拡張子（３バイト）、属性（１バイト）、予約（１０バイト）、記録時刻（１バイト）、記録日（１バイト）、先頭クラスタ（２バイト）、及びファイルサイズ（４バイト）を保持する。属性とは、例えばディレクトリであるかファイルであるか、読み取り専用ファイルであるか否か、隠しファイルであるか否か、システムファイルであるか否か、等を示す情報である。予約を示す１０バイトのデータは、先頭の２バイトは“０ｘ００００”である。なおデータについて先頭に付加した“０ｘ”は、当該データが１６進数であることを示す。先頭クラスタとは、そのサブディレクトリのサブディレクトリエントリやファイルが格納される先頭クラスタを示す。通常、クラスタサイズは１６ｋバイトである。例えばファイル“ＦＩＬＥ１．ｔｘｔ”が４０ｋＢであったとすると、そのサイズはクラスタサイズよりも大きい。従ってファイルはクラスタ単位のサイズに分割され、空きクラスタに記憶される。つまり、３つのクラスタを使用してファイルが書き込まれる。クラスタは連続している必要がないため、例えばクラスタ５、クラスタ６、クラスタ８を使用してファイルが記憶される。この際の先頭クラスタ５が、ルートディレクトリエントリ４４に保持される。なお、ファイルがどのクラスタに分割して記憶されたかを管理しているのがＦＡＴ１、ＦＡＴ２である。ＦＡＴ１、ＦＡＴ２には、同一のデータが記憶されており、一方のＦＡＴに欠陥が生じた場合、他方のＦＡＴを用いてデータの修復が可能とされている。ＦＡＴ１、ＦＡＴ２は、ファイルに割り当てられたクラスタの情報を記憶しており、クラスタのリンクの関係を記憶している。ＦＡＴ１、ＦＡＴ２に記憶された情報をトレースすることにより、元のファイルへと復元することができる。
【００３８】
つまり、分割されたファイル“ＦＩＬＥ１．ｔｘｔ”の４０ｋＢうち、前半の１６ｋバイトがクラスタ５に記憶され、次の１６ｋＢがクラスタ６に記憶され、後半の８ｋバイトがクラスタ８に記憶されるため、ＦＡＴ１、ＦＡＴ２には、クラスタ５の次にクラスタ６、８がリンクされることを示す情報が記憶される。３つのクラスタに分割されたファイルを読み出す際、ＦＡＴ１、ＦＡＴ２に記憶されたこれらの情報をチェイン接続することにより、ファイルが元に復元される。
【００３９】
このようなファイルシステムを使用したフラッシュメモリ１１は、データを書き込む際、書き込みデータ以外に、ルートディレクトリエントリ４４の情報やＦＡＴなどの管理情報も一緒に更新する必要がある。
【００４０】
次にサブディレクトリエントリについて説明する。ルートディレクトリにサブディレクトリ“ＡＡＡ”が作成され、サブディレクトリ“ＡＡＡ”の下にサブディレクトリ“ＢＢＢ”が作成されると、これらのサブディレクトリ内の情報を示すサブディレクトリエントリが作成される。図８はフラッシュメモリ１１のアドレス空間を示す概念図であり、ルートディレクトリエントリとサブディレクトリエントリとに着目した図である。
【００４１】
図示するように、上記のルートディレクトリエントリ４４は管理領域４１内の所定の領域に記録される。つまり、ルートディレクトリエントリ４４が保持される領域のアドレスＡ（ＲＯＯＴ）は初めから決まっており、その値は既知である。これに対してサブディレクトリエントリは、データ領域４０におけるいずれかの空き領域に記録される。すなわち、“ＡＡＡ”及び“ＢＢＢ”に関するサブディレクトリエントリ４７、４８のアドレスＡ（ＡＡＡ）、Ａ（ＢＢＢ）は予め決まっているわけでは無く、サブディレクトリエントリ４７、４８作成時に決定される。
【００４２】
一例として、サブディレクトリ“ＡＡＡ”に関するサブディレクトリエントリ４７の構成について図９を用いて説明する。図９はサブディレクトリエントリ４７の構成を示す概念図である。図示するように、サブディレクトリエントリ４７もルートディレクトリエントリ４４と同じく、サブディレクトリ“ＡＡＡ”内にあるディレクトリやファイルの情報を保持する。すなわち、各々が３２バイトの複数のエントリを備える。そして各エントリは、３２バイトの先頭バイト位置から順に、ファイルまたはサブディレクトリの名前（８バイト）、拡張子（３バイト）、属性（１バイト）、予約（１０バイト）、記録時刻（１バイト）、記録日時（１バイト）、先頭クラスタ（２バイト）、及びファイルサイズ（４バイト）を保持する。
【００４３】
但し、サブディレクトリエントリがルートディレクトリエントリ４４と異なるのは、当該サブディレクトリに含まれるディレクトリやファイルの情報の前に、上位ディレクトリ情報が１つのエントリを使って記録されている点である。図９の例であると、エントリ０の最初の１１バイトを用いて上位ディレクトリ情報が保持される。上位ディレクトリ情報についても、属性、予約、記録時刻、記録日が保持される。そしてその下のエントリ１〜３に、それぞれディレクトリ“ＢＢＢ”、及びファイル“ＦＩＬＥ１Ａ．ｊｐｇ”、“ＦＩＬＥ１Ｂ．ｊｐｇ”についての情報が保持される。これらの内容は、ルートディレクトリエントリ４４と同様である。
【００４４】
サブディレクトリエントリ４７の具体的な構成例について図１０を用いて説明する。図１０はサブディレクトリエントリ４７の模式図であり、各エントリとバイト位置におけるデータについて示している。データの各値は１６進数２桁で示されている。なお、図１０における値と、図９における具体的な名前や時間などは、必ずしも一致しているわけでは無い。
【００４５】
図示するように、エントリ０における０〜１０バイトの位置には、“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”なる値が保持されている。これが上位ディレクトリ情報であり、この値はいずれのサブディレクトリについても同じである。前述のパターン記憶部２３が保持するパターンとは、この“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”なる値である。これに対してエントリ１〜３における０〜１０バイトの位置には、ファイル名と拡張子とが保持される。なおディレクトリには拡張子が無いので、エントリ１の８〜１０バイトの位置には“０ｘ００００００”なる値が保持される。またエントリ０〜３の１１バイトの位置には、それぞれ属性を示す値が保持されている。図１０の例であると、属性はディレクトリであるかファイルであるかを示す値が保持され、ディレクトリである場合には“０ｘ１０”が、ファイルである場合には“０ｘ２０”が保持される。
【００４６】
つまり、サブディレクトリエントリにおいては、ルートディレクトリエントリと異なり、いずれかのエントリにおける０〜１０バイトの位置に、ファイル（ディレクトリ）名と拡張子の代わりに、上位ディレクトリ情報が保持される。この上位ディレクトリ情報は、当該ディレクトリよりも上位にディレクトリがあることを意味している。従って、ルートディレクトリ直下のディレクトリ＜ＡＡＡ＞の上位ディレクトリ情報も、サブディレクトリ直下のディレクトリ＜ＢＢＢ＞の上位ディレクトリ情報も、共に同じく“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”である。勿論、ファイルシステムによっては、上位ディレクトリ情報を示すデータの値が“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”で無い場合があっても良い。つまり、この値そのものは特に限定されるものでは無く、サブディレクトリエントリ内に、当該ディレクトリよりも上位にディレクトリがあることを示す情報がありさえすれば良い。
【００４７】
次に、上記構成のカードコントローラ１２におけるデータの書き込み動作について、特にルートディレクトリエントリ及びサブディレクトリエントリの更新時に着目しつつ説明する。図１１はデータの書き込み動作についてのフローチャートである。
【００４８】
図示するように、まずホストインタフェースモジュール２０がホスト機器２から書き込み命令を書き込みデータ及びアドレスと共に受け取る（ステップＳ１０）。するとホストインタフェースモジュール２０は、書き込み命令及びアドレスを命令・アドレス検出部２１へ出力し、書き込みデータをサブディレクトリエントリ検出部２２へ出力する。
【００４９】
次に、命令・アドレス検出部２１が、ルートディレクトリエントリ４４のアドレスＡ（ＲＯＯＴ）と、受信したアドレスとを比較する（ステップＳ１１）。前述の通り、アドレスＡ（ＲＯＯＴ）は既知の値であり、その値を命令・アドレス検出部２１は保持する。そして、比較結果と書き込み命令とをＭＰＵ２４へ出力する。またサブディレクトリエントリ検出部２２は、パターン記憶部２３から上位ディレクトリ情報を示すパターン（“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”）を読み出す。そしてホストインタフェースモジュール２０から受信した書き込みデータ内において、上位ディレクトリ情報を示すパターンが含まれているか否かを検索する（ステップＳ１２）。そして検索結果をＭＰＵ２４へ出力すると共に、書き込みデータをデータバッファ２６へ出力する。
【００５０】
ステップＳ１１においてアドレスが一致した場合（ステップＳ１３、ＹＥＳ）、ＭＰＵ２４は、当該書き込みデータはルートディレクトリエントリであり、ルートディレクトリエントリの更新命令が与えられたものと判断する（ステップＳ１４）。そしてＭＰＵ２４はデータバッファ２６及びフラッシュコントローラ２７に対して、受信したアドレスに対応する領域に、ホスト機器２から与えられたデータを書き込むよう命令する（ステップＳ１５）。
【００５１】
またステップＳ１１においてアドレスが一致せず（ステップＳ１３、ＮＯ）、且つステップＳ１２において上位ディレクトリ情報が含まれないと判断された場合（ステップＳ１６、ＮＯ）、ＭＰＵ２４は、当該書き込みデータはルートディレクトリでもサブディレクトリエントリでも無く、通常のデータファイルであると判断する。従ってステップＳ１５に進む。
【００５２】
他方、サブディレクトリエントリ検出部２２における検索の結果、上位ディレクトリ情報が発見された場合には（ステップＳ１６、ＹＥＳ）、ＭＰＵ２４は、当該書き込みデータがサブディレクトリエントリであると判断する（ステップＳ１７）。そしてＭＰＵ２４は、命令・アドレス検出部２１から受信した当該アドレスをアドレス保存部２５に保持させる（ステップＳ１８）。そしてメモリセルアレイ３０におけるいずれかの消去済みメモリブロックをキャッシュブロックとして確保し、確保したキャッシュブロックに当該データを書き込む（ステップＳ１９）。そして以後、同一のアドレスに書き込みアクセスがあった場合には、ステップＳ１９で確保したキャッシュブロックにデータを追記する（ステップＳ２０）。
【００５３】
同一のアドレスに書き込みアクセスであるか否かは、命令・アドレス検出部２１またはＭＰＵ２４において、ホスト機器２から受信したアドレスと、アドレス保存部２５に保持されるアドレスとを比較して、一致するか否かによって判断出来る。
【００５４】
上記動作について図１２を用いて説明する。図１２は、サブディレクトリ“ＡＡＡ”に関するサブディレクトリエントリ４７の更新時の様子を示し模式図であり、メモリ空間とメモリブロックを示している。図７で説明したように、サブディレクトリエントリ４７の先頭クラスタはクラスタ５である。このアドレスがＡ（ＡＡＡ）であり、メモリブロックＢＬＫ２の領域に対応していたとする。
【００５５】
まず、ホスト機器からアドレスＡ（ＡＡＡ）に対する書き込みアクセスが為される（ステップＳ１０、図１２の（１））。この書き込みアクセスはサブディレクトリエントリ４７の更新命令であるが、アクセスがあった時点ではそのことをカードコントローラ１２は認識していない。そこでカードコントローラ１２は、当該書き込みアクセスに関するアドレスの確認と、データ内部の検索を行う（ステップＳ１１、Ｓ１２）。すると、図１０におけるエントリ０の０〜１０バイトの位置に上位ディレクトリ情報が見つかる（ステップＳ１６、ＹＥＳ）。そこでＭＰＵ２４は、メモリブロックＢＬＫ２とは別に、消去済みメモリブロックＢＬＫ２０をキャッシュとして確保し、このメモリブロックＢＬＫ２０へデータを書き込む（ステップＳ１９、図１２の（２））。そしてＭＰＵ２４は、アドレスＡ（ＡＡＡ）に保持されるデータはサブディレクトリエントリであることを把握する。そして以後、アドレスＡ（ＡＡＡ）に対して書き込みアクセスがあった場合には、メモリブロックＢＬＫ２０に対してデータを追記する（ステップＳ２０、図１２の（３）、（４））。
【００５６】
上記のように、本実施形態に係るメモリシステムであると、サブディレクトリエントリ更新時においても高速アクセスが可能となる。本効果について、以下詳細に説明する。
【００５７】
ＮＡＮＤ型フラッシュメモリでは、同じファイルやフォルダを更新する場合、対応するディレクトリエントリへの書き込みアドレスは変わらない。このため、同じアドレスのデータを上書きする必要がある。しかしＮＡＮＤ型フラッシュメモリは、書き込み済みのページに対して上書きができない。上書きする際には、あらかじめ消去を行わなければならない。そして消去は、メモリブロック単位でしか行うことができない。そのため、データを更新する際には、消去メモリブロックに対して更新データを新規に書き込むと共に、更新前のデータが保持されているメモリブロックにおける他のデータを、消去メモリブロックにコピーする必要がある（これをデータの引っ越しと呼ぶ）。そのため、メモリブロックサイズよりもデータ量の小さいデータの更新が発生した際でも、消去メモリブロックに対してメモリブロック単位でデータを書き込まなければならない。すなわち、データサイズがいくら小さくとも、データの引っ越しが必要な場合にはデータの移動量が大きくなる。その結果、書き込み速度が低下し、メモリカード１に対する高速アクセスが困難となる。
【００５８】
そこで、データ量の小さい書き込みを行う際には、本来書き込むべきメモリブロックとは別のメモリブロックをキャッシュとして使用する。本方法であると、あるデータについて更新があった場合には、キャッシュとして使用するメモリブロックにデータを追記していく。つまり、あるデータが更新される度に、キャッシュとして確保されたメモリブロックにページ単位で次々に書き込まれていく。そして、例えばキャッシュとして使用するメモリブロックが一杯になった時点など、あるタイミングで最新の更新データのみにつき引っ越しを行う。これにより、データの引っ越し回数を低減出来る。
【００５９】
特に、更新が頻繁で且つデータサイズが小さいものとして、ルートディレクトリエントリやサブディレクトリエントリが挙げられる。これらが更新された場合には、キャッシュを設けることが望ましい。この点、ルートディレクトリエントリが保持される領域のアドレスは固定である。従って背景技術でも説明したように、書き込みアクセスがあった場合には、そのアドレスからルートディレクトリエントリであるか否かを判断することが出来る。しかし前述の通り、サブディレクトリエントリについてはアドレスは固定でなく、サブディレクトリが作成される度に、適宜、空きクラスタにサブディレクトリエントリが作成される。従って、アドレスからはサブディレクトリエントリであるか否かは判断出来ない。
【００６０】
そこで本実施形態では、サブディレクトリエントリの構成に着目して、データ中に上位ディレクトリ情報が含まれるか否かによって、サブディレクトリエントリか否かを判断している。より具体的には、図１０に示すような書き込みデータの内部を検索し、上位ディレクトリ情報である“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”なる値の有無を調べている。ここで一例としてＪＰＥＧ（Joint Photographic Experts Group）形式の画像ファイルと、ブート領域内のデータ構成を図１３及び図１４にそれぞれ示す。図示するように、画像ファイル及びブート領域内には、上位ディレクトリ情報である“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”なる値は含まれない。勿論、データによっては上位ディレクトリ情報と同じ値を含む可能性はあるが、その確率は非常に低い。従って、“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”なる値が含まれるデータは、ほぼサブディレクトリエントリであると考えて良い。
【００６１】
以上のように、本実施形態に係る方法であると、ルートディレクトリエントリだけでなくサブディレクトリエントリも効果的に検出することが出来る。従って、検出された際に当該データのためにキャッシュを用意することで、データの書き込み速度を向上出来、メモリカード１に対する高速アクセスを可能とする。
【００６２】
図１５は、サブディレクトリエントリ検出部２２の一構成例を示す回路図である。図示するようにサブディレクトリエントリ検出部２２は、８個のフリップフロップ５０−０〜５０−７、排他的論理和ゲート（以下ＥＸＯＲゲートと呼ぶ）５１−０〜５１−７、インバータ５２−０〜５２−７、及びＡＮＤゲート５３を備えている。フリップフロップ５０−７には、ホストインタフェースモジュール２０からデータが２進数により１ビットずつ入力される。そしてフリップフロップ５０−ｉ（ｉは０〜６の自然数）には、フリップフロップ５０−（ｉ＋１）のデータが転送される。図１５では、データ“０ｘ２Ｅ”＝“００１０１１１０”が入力された様子を示している。
【００６３】
ＥＸＮＯＲゲート５１−０〜５１−７はそれぞれ、フリップフロップ５０−０〜５１−７の出力と、検出すべき値（“Ｈ”レベルまたは“Ｌ”レベル）との排他的論理和演算を行う。つまり２つの入力が一致したときに“Ｌ”レベルを出力し、異なるときには“Ｈ”レベルを出力する。図１５の例では“０ｘ２Ｅ”を検出する場合について示している。従ってＥＸＯＲゲート５１−０、５１−１、５１−３、５１−７にはノードＬから“Ｌ”レベルが与えられ、その他のＥＸＯＲゲート５１−２、５１−４〜５１−６にはノードＨから“Ｈ”レベルが与えられる。インバータ５２−０〜５２−７はそれぞれ、ＥＸＯＲゲート５１−０〜５１−７の出力を反転する。ＡＮＤゲート５３はインバータ５２−０〜５２−７の出力の論理積演算を行う。
【００６４】
上記構成であると、フリップフロップ５０−０〜５０−７に入力された１６進数２桁（＝２進数８桁）のデータが、所定の値であるか否かを判定出来る。所定の値である場合には、ＡＮＤゲート５３の出力が“Ｈ”レベルとなる。“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”を検出する際には、まず図１５の時点で“０ｘ２Ｅ”であるか否かを判定する。引き続き、書き込みデータのうちの次の２進数８桁の値をフリップフロップ５０−０〜５０−７に転送して、“０ｘ２Ｅ”であるか否かを判定する。次に、書き込みデータのうちの次の２進数８桁の値をフリップフロップ５０−０〜５０−７に転送すると共に、ＥＸＮＯＲゲート５１−０〜５１−７にノードＬ、ノードＨからそれぞれ“Ｌ”、“Ｌ”、“Ｈ”、“Ｌ” 、“Ｌ” 、“Ｌ” 、“Ｌ” 、“Ｌ”レベルを入力する。これにより、入力データが“０ｘ２０”であるか否かを判定する。そしてこれを９回繰り返す。上記１１回の判定にて、全てＡＮＤゲート５３の出力が“Ｈ”レベルとなれば、“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”なる値がホスト機器から与えられたことが分かる。
【００６５】
［第２の実施形態］  
次に、この発明の第２の実施形態に係るメモリコントローラについて説明する。本実施形態は、上記第１の実施形態とは異なる方法によってサブディレクトリエントリを検出する方法に関する。従って、サブディレクトリエントリの検出方法以外は上記第１の実施形態と同じであるので、その点についての説明は省略する。図１６は、本実施形態に係るメモリシステムにおける、データの書き込み方法のフローチャートである。
【００６６】
図示するように、まず第１の実施形態と同様に、ホストインタフェースモジュール２０がホスト機器２から書き込み命令を書き込みデータ及びアドレスと共に受け取る（ステップＳ１０）。するとホストインタフェースモジュール２０は、書き込み命令及びアドレスを命令・アドレス検出部２１へ出力し、書き込みデータをサブディレクトリエントリ検出部２２へ出力する。
【００６７】
次に、命令・アドレス検出部２１が、ルートディレクトリエントリ４４のアドレスＡ（ＲＯＯＴ）と受信したアドレスとを比較し（ステップＳ１１）、比較結果と書き込み命令とをＭＰＵ２４へ出力する。またサブディレクトリエントリ検出部２２は、ホストインタフェースモジュール２０から受信した書き込みデータ内において、属性を示す値の周期性の有無を検索する（ステップＳ３０）。そして検索結果をＭＰＵ２４へ出力すると共に、書き込みデータをデータバッファ２６へ出力する。
【００６８】
ステップＳ１１においてアドレスが一致した場合（ステップＳ１３、ＹＥＳ）には、ステップＳ１４に進む。逆にステップＳ１１においてアドレスが一致せず（ステップＳ１３、ＮＯ）、且つステップＳ３０において周期性が検出されない場合（ステップＳ３１、ＮＯ）、ＭＰＵ２４は、当該書き込みデータはルートディレクトリでもサブディレクトリエントリでも無く、通常のデータファイルであると判断する。従ってステップＳ１５に進む。
【００６９】
他方、サブディレクトリエントリ検出部２２における検索の結果、属性を示す値の周期性が発見された場合には（ステップＳ３１、ＹＥＳ）、ＭＰＵ２４は、当該書き込みデータがサブディレクトリエントリであると判断する（ステップＳ１７）。そしてＭＰＵ２４は、命令・アドレス検出部２１から受信した当該アドレスをアドレス保存部２５に保持させる。以下、第１の実施形態と同様に、ステップＳ１９以降の処理を行う。
【００７０】
本実施形態によっても、上記第１の実施形態と同様にサブディレクトリエントリを検出出来、高速アクセスを実現出来る。この点につき図１７を用いて説明する。図１７はサブディレクトリエントリ４７の模式図であり、図１０と同じデータ構造のサブディレクトリエントリを示している。図１０と同様、各値は１６進数２桁で示されている。
【００７１】
第１の実施形態では、エントリ０における０〜１０バイトの位置の値に着目した。そして０〜１０バイトの位置の値が“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”であれば、当該データはサブディレクトリエントリであると判定した。
【００７２】
これに対して本実施形態では、各エントリ０〜３における１１バイトの位置に着目する。１１バイトの位置における値は、第１の実施形態で説明した通り属性を示す。このことはどのエントリでも同じである。図１７の例であると、属性を示す値として“０ｘ１０”と“０ｘ２０”が使用されている。これはディレクトリであるかファイルであるかを示している。勿論、この他にも読み取り専用であるか、隠しファイルであるか等を示す場合には別の値が用いられる。しかし、属性として使用される値は非常に限られている。従って、この属性として使用される値が一定間隔、すなわち３２バイト周期で繰り返されていれば、当該データはサブディレクトリエントリであると判断出来る。
【００７３】
図１７の場合には、“０ｘ１０”と“０ｘ２０”とが３２バイト周期で繰り返されている。勿論、１１バイトの位置以外であっても“１０”、“２０”の値が使用されている。しかし１１バイト以外の位置におけるこれらの値が周期性を有することは稀である。従って、本実施形態に係る手法であっても効果的にサブディレクトリエントリを検出出来る。
【００７４】
なお、本実施形態では各エントリにおける１１バイトの位置の値によりサブディレクトリエントリであるか否かを判定している。しかし、例えば予約を示す値により同様の判定を行っても良い。本例について図１８を用いて説明する。図１８はサブディレクトリエントリ４７の模式図であり、図１０と同じデータ構造のサブディレクトリエントリを示している。図１０と同様、各値は１６進数２桁で示されている。
【００７５】
図示するように、各エントリ０〜３における１２〜２１バイトの位置は予約を示す。そしてそのうちの先頭２バイト、すなわち１２〜１３バイトの位置は、ＦＡＴファイルシステムでは通常“０ｘ００００”である。つまり、データ内には３２バイト周期で“０ｘ００００”なる値が含まれる。よって、この値を検出することによってサブディレクトリエントリの検出を行っても良い。
【００７６】
また、図１７の方法と図１８の方法とを組み合わせても良い。つまり、各エントリにおける１１〜１３バイトの位置における値は“属性を示す値”＋“０ｘ００００”であるので、この値が３２バイト周期で繰り返されているか否かによって判定を行っても良い。
【００７７】
［第３の実施形態］  
次に、この発明の第３の実施形態に係るメモリコントローラについて説明する。本実施形態は、上記第１、第２の実施形態とは異なる手法によりサブディレクトリエントリを検出する方法に関する。従って、サブディレクトリエントリの検出方法以外は上記第１の実施形態と同じであるので、その点についての説明は省略する。図１９は、本実施形態に係るメモリシステムにおける、データの書き込み方法のフローチャートである。なお、カードコントローラ１２の構成としては、図３においてサブディレクトリエントリ検出部２２及びパターン記憶部２３を廃することが出来る。
【００７８】
図示するように、まずカードコントローラ１２のＭＰＵ２４は、フラッシュメモリ１１の管理領域４１におけるルートディレクトリエントリ４４を読み出す（ステップＳ４０）。そして、フラッシュメモリ１１におけるディレクトリ構造を把握し、サブディレクトリエントリのアドレスを把握する（ステップＳ４１）。すなわち、ルートディレクトリエントリ４４からルートディレクトリにディレクトリ“ＡＡＡ”と、ファイル“ＦＩＬＥ１．ｔｘｔ”、“ＦＩＬＥ２．ｔｘｔ”が存在することが分かる。またディレクトリ“ＡＡＡ”のスタートクラスタ番号から、“ＡＡＡ”に関するサブディレクトリエントリ４７のアドレスＡ（ＡＡＡ）を算出することが出来る。そして算出したアドレスにアクセスしてサブディレクトリエントリ４７を参照する。これにより、サブディレクトリ“ＡＡＡ”にはディレクトリ“ＢＢＢ”と、ファイル“ＦＩＬＥ１Ａ．ｊｐｇ”、“ＦＩＬＥ２Ａ．ｊｐｇ”が存在することが分かる。またディレクトリ“ＢＢＢ”のスタートクラスタ番号から、“ＢＢＢ”に関するサブディレクトリエントリ４８のアドレスＡ（ＢＢＢ）を算出することが出来る。そして算出したアドレスにアクセスしてサブディレクトリエントリ４８を参照する。これにより、サブディレクトリ“ＢＢＢ”にはファイル“ＦＩＬＥ１Ｂ．ｊｐｇ”、“ＦＩＬＥ２Ｂ．ｊｐｇ”が存在することが分かる。すなわち、ＭＰＵ２４は図６に示すディレクトリ構造を把握し、且つディレクトリ“ＡＡＡ”、“ＢＢＢ”に関するサブディレクトリエントリ４７、４８のアドレスを把握する。そして把握したアドレスをアドレス保存部２５に保持させる（ステップＳ４２）。
【００７９】
次に、ホストインタフェースモジュール２０がホスト機器２から書き込み命令を書き込みデータ及びアドレスと共に受け取る（ステップＳ４３）。するとホストインタフェースモジュール２０は、書き込み命令及びアドレスを命令・アドレス検出部２１へ出力し、書き込みデータをデータバッファ２６へ出力する。
【００８０】
次に、命令・アドレス検出部２１が、ルートディレクトリエントリ４４のアドレスＡ（ＲＯＯＴ）と、受信したアドレスとを比較する（ステップＳ４４）。そして、比較結果と書き込み命令とをＭＰＵ２４へ出力する。
【００８１】
ステップＳ４４においてアドレスが一致した場合（ステップＳ４５、ＹＥＳ）、ＭＰＵ２４は、当該書き込みデータはルートディレクトリエントリであり、ルートディレクトリエントリの更新命令が与えられたものと判断する（ステップＳ４６）。そしてＭＰＵ２４はデータバッファ２６及びフラッシュコントローラ２７に対して、受信したアドレスに対応する領域に、ホスト機器２から与えられたデータを書き込むよう命令する（ステップＳ４７）。
【００８２】
他方、ステップＳ４４においてアドレスが一致しなかった場合（ステップＳ４５、ＮＯ）、ＭＰＵ２４はアドレス保存部２５に保持されるサブディレクトリエントリのアドレスと、受信したアドレスとを比較する（ステップＳ４８）。
【００８３】
ステップＳ４８においてアドレスが一致しなかった場合には（ステップＳ４９、ＮＯ）、ＭＰＵ２４は、当該書き込みデータはルートディレクトリでもサブディレクトリエントリでも無く、通常のデータファイルであると判断する。従ってステップＳ４７に進む。逆に、ステップＳ４８においてアドレスが一致した場合（ステップＳ４９、ＹＥＳ）、ＭＰＵ２４は、当該書き込みデータがサブディレクトリエントリであると判断する（ステップＳ５０）。従ってＭＰＵ２４は、当該アドレスにつき、メモリセルアレイ３０におけるいずれかの消去済みメモリブロックをキャッシュブロックとして確保する（ステップＳ５１）。そしてＭＰＵ２４は、ステップＳ５１にて確保したキャッシュブロックに当該データを書き込む（ステップＳ５２）。そして以後、同一のアドレスに書き込みアクセスがあった場合には、ステップＳ１９で確保したキャッシュブロックにデータを追記する（ステップＳ５３）。
【００８４】
本実施形態に係る方法によってもサブディレクトリエントリを検出することが出来、第１の実施形態で説明した効果が得られる。
【００８５】
以上のように、この発明の第１乃至第３の実施形態に係るカードコントローラによれば、ルートディレクトリエントリのみならず、サブディレクトリエントリを検索することが出来る。従って、サブディレクトリエントリにつき効果的にキャッシュブロックを設けることが出来、メモリカード１への高速アクセスが可能となる。
【００８６】
なお上記第１の実施形態においては、上位ディレクトリ情報として“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”を検索する場合を例に挙げて説明した。しかし、必ずしもこの１１バイトの値全てを検索する必要は無く、例えば先頭の“０ｘ２Ｅ２Ｅ”のみや、または“０ｘ２Ｅ２Ｅ２０２０”のみを検索しても良い。この場合、検索精度は低下するが、一定程度の効果が得られる。また上位ディレクトリ情報の値が“０ｘ２Ｅ２Ｅ２０２０２０２０２０２０２０２０２０”である場合について説明した。しかしこの値はＦＡＴファイルシステムにおける一例に過ぎず、別のファイルシステムなどでは異なる値である可能性もあるが、同様の手法を採用出来る。すなわち、書き込みデータの内容を参照することで、上位ディレクトリの存在を検出する手法であれば、どのような値を検出するかについては限定されない。
【００８７】
また上記第１の実施形態では、例えば図９に示すように上位ディレクトリ情報は最初のエントリ０に保持されている場合を例に説明した。しかし最初のエントリである必要は無い。通常、ＦＡＴファイルシステムでは、最初のエントリにはカレントディレクトリ情報が保持され、次のエントリに上位ディレクトリ情報が保持されることが通常だからである。
【００８８】
更に上記第１乃至第３の実施形態において、書き込みデータがルートディレクトリエントリであった場合にも、消去済みメモリブロックのいずれかをキャッシュブロックとして使用することが望ましい。
【００８９】
また、上記第１、第２の実施形態では、サブディレクトリエントリの検出をサブディレクトリエントリ検出部２２で行っている。しかし、サブディレクトリエントリの検出は、ＭＰＵ２４においてソフトウェアを用いて行っても良い。ルートディレクトリエントリの検出も同様である。
【００９０】
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
【図面の簡単な説明】
【００９１】
【図１】この発明の第１の実施形態に係るメモリシステムのブロック図。
【図２】この発明の第１の実施形態に係るメモリカードにおける信号ピンに対する信号割り当てを示す図。
【図３】この発明の第１の実施形態に係るメモリカードの備えるカードコントローラのブロック図。
【図４】この発明の第１の実施形態に係るフラッシュメモリのブロック図。
【図５】この発明の第１の実施形態に係るフラッシュメモリのメモリ空間を示す概念図。
【図６】この発明の第１の実施形態に係るフラッシュメモリの有するディレクトリ構造を示す概念図。
【図７】この発明の第１の実施形態に係るフラッシュメモリの備えるルートディレクトリエントリの構成を示す概念図。
【図８】この発明の第１の実施形態に係るフラッシュメモリのメモリ空間を示す概念図。
【図９】この発明の第１の実施形態に係るフラッシュメモリの備えるサブディレクトリエントリの構成を示す概念図。
【図１０】この発明の第１の実施形態に係るフラッシュメモリの備えるサブディレクトリエントリの構成を示す概念図。
【図１１】この発明の第１の実施形態に係るフラッシュメモリのデータ書き込み方法を示すフローチャート。
【図１２】この発明の第１の実施形態に係るメモリシステムのメモリ空間とメモリブロックの概念図であり、データの更新時の様子を示す図。
【図１３】フラッシュメモリの備える画像データの内容を示す模式図。
【図１４】フラッシュメモリの備えるブート領域の内容を示す模式図。
【図１５】この発明の第１の実施形態に係るカードコントローラの備えるサブディレクトリエントリ検出部の回路図。
【図１６】この発明の第２の実施形態に係るフラッシュメモリのデータ書き込み方法を示すフローチャート。
【図１７】この発明の第２の実施形態に係るフラッシュメモリの備えるサブディレクトリエントリの構成を示す概念図。
【図１８】この発明の第２の実施形態に係るフラッシュメモリの備えるサブディレクトリエントリの構成を示す概念図。
【図１９】この発明の第３の実施形態に係るフラッシュメモリのデータ書き込み方法を示すフローチャート。
【符号の説明】
【００９２】
１…メモリカード、２…ホスト機器、１１…ＮＡＮＤ型フラッシュメモリ、１２…カードコントローラ、１３…信号ピン、２０…ホストインタフェースモジュール、２１…命令・アドレス検出部、２３…サブディレクトリ検出部、２４…ＭＰＵ、２５…アドレス保存部、２６…データバッファ、２７…フラッシュコントローラ、２８…ＲＯＭ、２９…ＲＡＭ、３０…メモリセルアレイ、３１…ページバッファ、４０…ユーザデータ領域、４１…管理領域、４２…ブート領域、４３…パーティション情報、４４…ルートディレクトリエントリ、４５、４６…ＦＡＴ、４７、４８…サブディレクトリエントリ、５０−０〜５０−７…フリップフロップ、５１−０〜５１−７…ＥＸＯＲゲート、５２−０〜５２−７…インバータ、５３…ＡＮＤゲート
【図１】
2008084184.tif 000003
【図２】
2008084184.tif 000004
【図３】
2008084184.tif 000005
【図４】
2008084184.tif 000006
【図５】
2008084184.tif 000007
【図６】
2008084184.tif 000008
【図７】
2008084184.tif 000009
【図８】
2008084184.tif 000010
【図９】
2008084184.tif 000011
【図１０】
2008084184.tif 000012
【図１１】
2008084184.tif 000013
【図１２】
2008084184.tif 000014
【図１３】
2008084184.tif 000015
【図１４】
2008084184.tif 000016
【図１５】
2008084184.tif 000017
【図１６】
2008084184.tif 000018
【図１７】
2008084184.tif 000019
【図１８】
2008084184.tif 000020
【図１９】
2008084184.tif 000021