(57)【特許請求の範囲】
【請求項１】
ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むセクタポインタ情報書込み手段と、
前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持する検索範囲保持手段と、
前記検索範囲保持手段に保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記検索範囲保持手段に保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記検索範囲保持手段に保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に変更するセクタ領域検索手段とを有する
ことを特徴とするメモリコントローラ。
【請求項２】
ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号に１を加えた番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むセクタポインタ情報書込み手段と、
前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持する検索範囲保持手段と、
前記検索範囲保持手段に保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記検索範囲保持手段に保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記検索範囲保持手段に保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値から１を減じた値に変更するセクタポインタ情報更新手段とを有する
ことを特徴とするメモリコントローラ。
【請求項３】
前記先頭位置情報が示す番号と前記末尾位置情報が示す番号との差が１となったときに、前記先頭位置情報が示す番号から前記ブロック内のデータが書き込まれているセクタ領域の末尾を判別する第１のセクタ領域判別手段を有することを特徴とする請求項１又は２に記載のメモリコントローラ。
【請求項４】
前記先頭位置情報が示す番号と前記末尾位置情報が示す番号との差が１となったときに、前記末尾位置情報が示す番号から前記ブロック内のデータが書き込まれていないセクタ領域の先頭を判別する第２のセクタ領域判別手段を有することを特徴とする請求項１又は２に記載のメモリコントローラ。
【請求項５】
ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号に１を加えた番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むセクタポインタ情報書込み手段と、
前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持する検索範囲保持手段と、
前記検索範囲保持手段に保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記検索範囲保持手段に保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記検索範囲保持手段に保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に変更するセクタポインタ情報更新手段とを有する
ことを特徴とするメモリコントローラ。
【請求項６】
ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むセクタポインタ情報書込み手段と、
前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持する検索範囲保持手段と、
前記検索範囲保持手段に保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記検索範囲保持手段に保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記検索範囲保持手段に保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に１を加えた値に変更するセクタポインタ情報更新手段とを有する
ことを特徴とするメモリコントローラ。
【請求項７】
前記先頭位置情報が示す番号と前記末尾位置情報が示す番号が一致したときに、該番号から前記ブロック内のデータが書き込まれていないセクタ領域の先頭を判別する第２のセクタ領域判別手段を有することを特徴とする請求項５又は６に記載のメモリコントローラ。
【請求項８】
請求項１〜７のいずれかに記載のメモリコントローラと、このメモリコントローラによりアクセスが制御されるフラッシュメモリとを備えることを特徴とするフラッシュメモリシステム。
【請求項９】
ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むステップと、
前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持するステップと、
前記保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に変更するステップとを有する
ことを特徴とするフラッシュメモリの制御方法。
【請求項１０】
ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号に１を加えた番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むステップと、
前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持するステップと、
前記保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値から１を減じた値に変更するステップとを有する
ことを特徴とするフラッシュメモリの制御方法。
【請求項１１】
前記先頭位置情報が示す番号と前記末尾位置情報が示す番号との差が１となったときに、前記先頭位置情報が示す番号から前記ブロック内のデータが書き込まれているセクタ領域の末尾を判別するステップを有することを特徴とする請求項９又は１０に記載のフラッシュメモリの制御方法。
【請求項１２】
前記先頭位置情報が示す番号と前記末尾位置情報が示す番号との差が１となったときに、前記末尾位置情報が示す番号から前記ブロック内のデータが書き込まれていないセクタ領域の先頭を判別するステップを有することを特徴とする請求項９又は１０に記載のフラッシュメモリの制御方法。
【請求項１３】
ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号に１を加えた番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むステップと、
前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持するステップと、
前記保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に変更するステップとを有する
ことを特徴とするフラッシュメモリの制御方法。
【請求項１４】
ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むステップと、
前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持するステップと、
前記保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に１を加えた値に変更するステップとを有する
ことを特徴とするフラッシュメモリの制御方法。
【請求項１５】
前記先頭位置情報が示す番号と前記末尾位置情報が示す番号が一致したときに、該番号から前記ブロック内のデータが書き込まれていないセクタ領域の先頭を判別するステップを有することを特徴とする請求項１３又は１４に記載のフラッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリに対するアクセスを制御するメモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法に係り、特に、フラッシュメモリに対する書き込み処理において、書き込み先の物理ブロックのデータが書き込まれていないセクタ領域の先頭を検索する機能を有するメモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法に関するものである。
【背景技術】
【０００２】
メモリカードやシリコンディスク等の記憶媒体である半導体メモリとして、ＮＡＮＤ型フラッシュメモリが多く用いられている。このフラッシュメモリは、複数のメモリセルを有し、各メモリセルが消去状態のとき論理値「１」とされ、書き込み状態のとき論理値「０」とされる。
【０００３】
ところで、これらのメモリセルを消去状態から書き込み状態に変化させる場合には、メモリセル単位で行うことができるが、メモリセルを書き込み状態から消去状態に変化させる場合には、メモリセル単位で行うことができず、所定数のメモリセルからなるブロック単位で一括消去することが行われる（ブロック消去）。
【０００４】
また、所定数のメモリセルからなるブロック（物理ブロック）は、書き込み及び読み出しのアクセス処理単位である複数のページで構成されている。すなわち、小ブロックでは３２ページ、大ブロックでは６４ページである。また、小ブロックでは、１個のページが１セクタ（５１２バイト）のユーザ領域と１６バイトの冗長領域とによって構成されている。
【０００５】
また、大ブロックでは、１個のページが、４セクタ（２０４８バイト）のユーザ領域（以下、５１２バイト単位のユーザ領域をセクタ領域という）と、６４バイトの冗長領域とで構成され、ユーザ領域と冗長領域とがそれぞれ４分割して使用される（以下、大ブロックでは、冗長領域を４分割したものを部分冗長領域という）。よって、小ブロックでは１個のページが１個のセクタ領域に対応し、大ブロックでは１個のページが４個のセクタ領域に対応している。
【０００６】
このようなフラッシュメモリに対する書き込み処理を制御するメモリコントローラは、ホストシステムから与えられるコマンド等に従って、ホストシステムから与えられるデータをフラッシュメモリに書き込む。ここで、ホストシステムから与えられるコマンド等が、複数セクタのデータを書き込む指示するものであった場合、ホストシステムから与えられる複数セクタのデータが一連データとして取り扱われ、この一連データがフラッシュメモリに連続的に書き込まれる。
【０００７】
また、一連データの書き込み処理を開始するときに、その一連データの書き込み先の物理ブロックに既にデータが存在する場合には、その物理ブロックのデータが書き込まれていないセクタ領域の先頭を検索する検索処理が行われ、検出されたセクタ領域が一連データの書き込みを開始するセクタ領域より前であれば、その物理ブロックに対して一連データの書き込み処理を開始する。一方、検出されたセクタ領域が一連データの書き込みを開始するセクタ領域より後であれば、別のブロック消去されている物理ブロックに一連データが書き込まれる。つまり、データが書き込まれていないセクタ領域の先頭を検索する検索処理は、既にデータが存在する物理ブロックに対して、一連データを書き込むことができるかどうかを判別するために行われる。
【０００８】
このようなデータが書き込まれていないセクタ領域の先頭を検索する方法として、たとえば特許文献１に示されているようなスタートページ情報を用いた検索方法がある。この検索方法を、たとえば図９に示すような１ブロック分の書き込み状態を示す概略図を用いて説明する。なお、図９は、１個の物理ブロックが２５６個のセクタ領域で構成されているとみなすことができる大ブロックの場合を示している。
【０００９】
また、図９に示すＳ＃０〜Ｓ＃２５５はセクタ領域に付けられた通番であり（以下、セクタ番号ＳＮという）、ＳＰ＃１６，ＳＰ＃３３，ＳＰ＃８３・・・はスタートページ情報である。このスタートページ情報は、一連データが最後に書き込まれるセクタ領域のセクタ番号ＳＮに１を加えた番号を示すものである。なお、特許文献１においては、１個のページが１個のセクタ領域に対応する小ブロックのフラッシュメモリを想定して記述されているため、スタートページ情報は、一連データが最後に書き込まれるページのページ番号に１を加えた番号を示していたが、ここでは大ブロックに適用するためにページをセクタ領域に置換えている。
【００１０】
同図においては、セクタ番号ＳＮがＳ＃０〜Ｓ＃１５のセクタ領域には第１の一連データが書き込まれ、セクタ番号ＳＮがＳ＃１６〜Ｓ＃３２のセクタ領域には第２の一連データが書き込まれ、以下同様に、セクタ番号ＳＮがＳ＃１７８〜Ｓ＃２００のセクタ領域には第７の一連データが書き込まれている。
【００１１】
また、セクタ番号ＳＮがＳ＃０〜Ｓ＃１５のセクタ領域に対応する部分冗長領域にはスタートページ情報としてＳＰ＃１６が書き込まれ、セクタ番号ＳＮがＳ＃１６〜Ｓ＃３２のセクタ領域に対応する部分冗長領域にはスタートページ情報としてＳＰ＃３３が書き込まれ、以下同様に、セクタ番号ＳＮのＳ＃１７８〜Ｓ＃２００のセクタ領域に対応する部分冗長領域にはスタートページ情報としてＳＰ＃２０１が書き込まれている。
【００１２】
そして、データが書き込まれていないセクタ領域の先頭を検索する検索処理では、部分冗長領域に書き込まれているスタートページ情報が参照され、スタートページ情報が書き込まれているか否かで、その部分冗長領域と対応するセクタ領域にデータが書き込まれているか否かを判断する。検索処理では、図１０に示すように、まず、セクタ番号ＳＮがＳ＃０のセクタ領域に対応する部分冗長領域のスタートページ情報を参照する（検索回数：１）。次に、セクタ番号ＳＮがＳ＃０のセクタ領域に対応する部分冗長領域にスタートページ情報が書き込まれていた場合は、そのスタートページ情報のＳＰ＃１６に基づいて、セクタ番号ＳＮがＳ＃１６のセクタ領域に対応する部分冗長領域のスタートページ情報を参照する（検索回数：２）。次に、セクタ番号ＳＮがＳ＃１６のセクタ領域に対応する部分冗長領域にスタートページ情報が書き込まれていた場合は、そのスタートページ情報のＳＰ＃３３に基づいて、セクタ番号ＳＮがＳ＃３３のセクタに対応する部分冗長領域のスタートページ情報を参照する（検索回数：３）。
【００１３】
このように、部分冗長領域に書き込まれているスタートページ情報に基づいて、部分冗長領域を順次参照していき、参照した部分冗長領域にスタートページ情報が書き込まれていない場合は、その部分冗長領域に対応するセクタ領域が、データが書き込まれていないセクタ領域の先頭であると判断する。したがって、図１０に示した例では、セクタ番号ＳＮがＳ＃１６、Ｓ＃３３、Ｓ＃８３、Ｓ＃１２５、Ｓ＃１５０、Ｓ＃１７８及びＳ＃２０１のセクタ領域に対応する部分冗長領域を順次参照していき、セクタ番号ＳＮがＳ＃２０１のセクタ領域に対応する部分冗長領域にスタートページ情報が書き込まれていないので、セクタ番号ＳＮがＳ＃２０１のセクタ領域が、データが書き込まれていないセクタ領域の先頭であると判断する（検索回数：８）。
【００１４】
また、データが書き込まれていないセクタ領域の先頭を検索する方法として、二分木検索を用いた検索方法がある。この二分木検索について、図９及び図１１を用いて説明する。なお、以下においては、セクタ領域を検索する範囲の先頭を示す先頭位置情報をスタートポインタＸとし、その末尾を示す末尾位置情報をエンドポインタＹとして説明する。
【００１５】
この検索処理では、まずスタートポインタＸに最初のセクタ領域のセクタ番号ＳＮに対応する０が設定され、エンドポインタＹに最後のセクタ領域のセクタ番号ＳＮに１を加えた２５６が設定される。続いて、スタートポインタＸに設定されている値（０）とエンドポインタＹに設定されている値（２５６）の中間点のセクタ番号ＳＮがＳ＃１２８のセクタ領域に対応する部分冗長領域に書き込まれている付加情報（セクタ領域にデータが書き込まれているか否かを判断することができる付加情報）を参照し、セクタ番号ＳＮがＳ＃１２８のセクタ領域にデータが書き込まれているか否かを判断する（検索回数：１）。ここで、データが書き込まれていると判断した場合には、スタートポインタＸの設定値を参照したセクタ領域のセクタ番号ＳＮの値に変更する。一方、データが書き込まれていないと判断した場合には、エンドポインタＹの設定値を参照したセクタ領域のセクタ番号ＳＮの値に変更する。この例では、セクタ番号ＳＮがＳ＃１２８のユーザ領域にデータが書き込まれているので、スタートポインタＸの設定値を１２８に変更する。
【００１６】
次に、スタートポインタＸに設定されている値（１２８）とエンドポインタＹに設定されている値（２５６）の中間点のセクタ番号ＳＮがＳ＃１９２のセクタ領域に対応する部分冗長領域に書き込まれている付加情報（セクタ領域にデータが書き込まれているか否かを判断することができる付加情報）を参照し、セクタ番号ＳＮがＳ＃１９２のセクタ領域にデータが書き込まれているか否かを判断する（検索回数：２）。この例では、セクタ番号ＳＮがＳ＃１９２のユーザ領域にデータが書き込まれているので、スタートポインタＸの設定値を１９２に変更する。
【００１７】
次に、スタートポインタＸに設定されている値（１９２）とエンドポインタＹに設定されている値（２５６）の中間点のセクタ番号ＳＮがＳ＃２２４のセクタ領域に対応する部分冗長領域に書き込まれている付加情報（セクタ領域にデータが書き込まれているか否かを判断することができる付加情報）を参照し、セクタ番号ＳＮがＳ＃２２４のセクタ領域にデータが書き込まれているか否かを判断する（検索回数：３）。この例では、セクタ番号ＳＮがＳ＃２２４のユーザ領域にデータが書き込まれていないので、エンドポインタＹの設定値を２２４に変更する。
【００１８】
以下同様に、スタートポインタＸに設定されている値とエンドポインタＹに設定されている値の中間点に対応する部分冗長領域に書き込まれている付加情報（セクタ領域にデータが書き込まれているか否かを判断することができる付加情報）の参照と、スタートポインタＸ又はエンドポインタＹの更新を順次行っていき、スタートポインタＸに設定されている値とエンドポインタＹに設定されている値の差が１になったときにエンドポインタＹに設定されている値を、データが書き込まれていないセクタ領域の先頭のセクタ番号ＳＮであると判断する。
【特許文献１】特開２００２−１９６９７７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１９】
ところが、上述した特許文献１のようなスタートページ情報を用いた検索処理では、一連データが書き込まれているセクタ領域に対応する部分冗長領域に書き込まれているスタートページ情報に基づいて、一連データの先頭データが書き込まれているセクタ領域に対応する部分冗長領域を順次参照していくため、書き込まれている一連データの数が多くなると検索回数が多くなってしまうという問題があった。
【００２０】
一方、二分木検索を用いた検索処理では、検索回数がセクタ領域の数によって決まってしまい、たとえば、セクタ領域の数が２ｎ個の場合には常にｎ回の検索を行わなければならないという問題があった。
【００２１】
本発明は、このような状況に鑑みてなされたものであり、上記問題点を解決することができるメモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法を提供することを目的とする。
【課題を解決するための手段】
【００２２】
本発明のメモリコントローラは、ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むセクタポインタ情報書込み手段と、前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持する検索範囲保持手段と、前記検索範囲保持手段に保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記検索範囲保持手段に保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記検索範囲保持手段に保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に変更するセクタ領域検索手段とを有することを特徴とする。
本発明のメモリコントローラは、ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号に１を加えた番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むセクタポインタ情報書込み手段と、前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持する検索範囲保持手段と、前記検索範囲保持手段に保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記検索範囲保持手段に保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記検索範囲保持手段に保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値から１を減じた値に変更するセクタポインタ情報更新手段とを有することを特徴とする。
また、前記先頭位置情報が示す番号と前記末尾位置情報が示す番号との差が１となったときに、前記先頭位置情報が示す番号から前記ブロック内のデータが書き込まれているセクタ領域の末尾を判別する第１のセクタ領域判別手段を有するようにすることができる。
また、前記先頭位置情報が示す番号と前記末尾位置情報が示す番号との差が１となったときに、前記末尾位置情報が示す番号から前記ブロック内のデータが書き込まれていないセクタ領域の先頭を判別する第２のセクタ領域判別手段を有するようにすることができる。
本発明のメモリコントローラは、ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号に１を加えた番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むセクタポインタ情報書込み手段と、前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持する検索範囲保持手段と、前記検索範囲保持手段に保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記検索範囲保持手段に保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記検索範囲保持手段に保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に変更するセクタポインタ情報更新手段とを有することを特徴とする。
本発明のメモリコントローラは、ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むセクタポインタ情報書込み手段と、前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持する検索範囲保持手段と、前記検索範囲保持手段に保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記検索範囲保持手段に保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記検索範囲保持手段に保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に１を加えた値に変更するセクタポインタ情報更新手段とを有することを特徴とする。
また、前記先頭位置情報が示す番号と前記末尾位置情報が示す番号が一致したときに、該番号から前記ブロック内のデータが書き込まれていないセクタ領域の先頭を判別する第２のセクタ領域判別手段を有するようにすることができる。
本発明のフラッシュメモリシステムは、請求項１〜７のいずれかに記載のメモリコントローラと、このメモリコントローラによりアクセスが制御されるフラッシュメモリとを備えることを特徴とする。
本発明のフラッシュメモリの制御方法は、ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むステップと、前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持するステップと、前記保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に変更するステップとを有することを特徴とする。
本発明のフラッシュメモリの制御方法は、ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号に１を加えた番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むステップと、前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持するステップと、前記保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値から１を減じた値に変更するステップとを有することを特徴とする。
また、前記先頭位置情報が示す番号と前記末尾位置情報が示す番号との差が１となったときに、前記先頭位置情報が示す番号から前記ブロック内のデータが書き込まれているセクタ領域の末尾を判別するステップを有するようにすることができる。
また、前記先頭位置情報が示す番号と前記末尾位置情報が示す番号との差が１となったときに、前記末尾位置情報が示す番号から前記ブロック内のデータが書き込まれていないセクタ領域の先頭を判別するステップを有するようにすることができる。
本発明のフラッシュメモリの制御方法は、ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号に１を加えた番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むステップと、前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持するステップと、前記保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に変更するステップとを有することを特徴とする。
本発明のフラッシュメモリの制御方法は、ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示すセクタポインタ情報を、前記一連データの書き込み処理でデータが書き込まれるセクタ領域に対応する冗長領域に書き込むステップと、前記ブロック内の検索範囲を特定する情報として、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と検索範囲の末尾セクタ領域の番号を示す末尾位置情報とを保持するステップと、前記保持されている先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、前記保持されている末尾位置情報を前記中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、前記保持されている先頭位置情報を前記中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に１を加えた値に変更するステップとを有することを特徴とする。
また、前記先頭位置情報が示す番号と前記末尾位置情報が示す番号が一致したときに、該番号から前記ブロック内のデータが書き込まれていないセクタ領域の先頭を判別するステップを有するようにすることができる。
以上のように、本発明のメモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法では、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と、検索範囲の末尾セクタ領域の番号を示す末尾位置情報を設定し、その中間点のセクタ領域にデータが書き込まれているか否かを判断することにより検索対象のセクタ領域を検出する検索処理で、その中間点のセクタ領域にデータが書き込まれていないと判断した場合は、末尾位置情報が示す値をその中間点のセクタ領域の番号に変更し、その中間点のセクタ領域にデータが書き込まれていると判断した場合は、先頭位置情報が示す値をその中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報ＳＰに基づいた値に変更する。
ここで、セクタポインタ情報に基づいた値は、一連データの末尾データが書き込まれたセクタ領域に対応する番号、又は一連データの末尾データが書き込まれたセクタ領域の次のセクタ領域に対応する番号のいずれであってもよい。
また、セクタポインタ情報が示す値は、一連データの末尾データが書き込まれたセクタ領域に対応する番号、又は一連データの末尾データが書き込まれたセクタ領域の次のセクタ領域に対応する番号のいずれであってもよい。
また、セクタポインタ情報に基づいた値を、一連データの末尾データが書き込まれたセクタ領域に対応する番号とした場合は、先頭位置情報が示す番号と末尾位置情報が示す番号との差が１となったときに、先頭位置情報が示す番号からブロック内のデータが書き込まれているセクタ領域の末尾を判別し、末尾位置情報が示す番号からブロック内のデータが書き込まれていないセクタ領域の先頭を判別する。
また、セクタポインタ情報に基づいた値を、一連データの末尾データが書き込まれたセクタ領域の次のセクタ領域に対応する番号とした場合は、先頭位置情報が示す番号と末尾位置情報が示す番号が一致したときに、先頭位置情報及び末尾位置情報が示す番号からブロック内のデータが書き込まれていないセクタ領域の先頭を判別する。
【発明の効果】
【００２３】
本発明のメモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法によれば、先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれていると判断した場合、先頭位置情報を中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に変更するようにしたので、物理ブロック内でのデータが書き込まれていないセクタ領域の先頭を検索する平均的な検索速度を向上させることができる。たとえば、セクタ領域の数が２ｎ個の場合、通常の二分木検索であれば、常にｎ回の検索を行わなければならないが、本発明のメモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法によれば、ｎ回以下の検索回数で、検索対象のセクタ領域を検出することができる。また、検索対象のセクタ領域を検出するまでの検索回数は、一連データの書き込み状況によって変化するが、書き込まれている一連データの数が多くなった場合でも、検索回数がｎ回より多くなることはない。
【発明を実施するための最良の形態】
【００２４】
本実施形態では、検索範囲の先頭セクタ領域の番号を示す先頭位置情報と、検索範囲の末尾セクタ領域の番号を示す末尾位置情報に基づいて参照するセクタ領域を決定し、参照したセクタ領域にデータが書き込まれていた場合は、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の次のセクタ領域の番号を示すセクタポインタ情報に基づいて先頭位置情報を更新することにより、物理ブロック内でのデータが書き込まれていないセクタ領域の先頭を検索するようにした。つまり、先頭位置情報が示す番号と末尾位置情報が示す番号の中間点のセクタ領域にデータが書き込まれているか否かを判断し、データが書き込まれていないと判断した場合は、末尾位置情報を中間点のセクタ領域の番号に変更し、データが書き込まれていると判断した場合は、先頭位置情報を中間点のセクタ領域と対応する冗長領域に書き込まれているセクタポインタ情報が示す番号の値に変更するといった手順を繰り返すことで、物理ブロック内でのデータが書き込まれていないセクタ領域の先頭を検索するようにした。
【００２５】
これにより、たとえばセクタ領域の数が２ｎ個の場合には、一連データの数に関わらず、ｎ回以下の検索回数で物理ブロックのデータが書き込まれていないセクタ領域の先頭を検出することができる。
【実施例】
【００２６】
以下、本発明の詳細を図面に基づいて説明する。図１は、本発明のフラッシュメモリシステムの一実施例の概略を説明するためのブロック図である。図１に示すように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するメモリコントローラ３で構成されている。また、フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続される。
【００２７】
ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等とから構成される。ホストシステム４は、たとえば文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２８】
フラッシュメモリ２は、不揮発性メモリであり、レジスタとメモリセルとの間でデータの複写を行って、データの書き込み又は読み出しを行う。
【００２９】
メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。各メモリセル群は、複数のメモリセルが直列に接続されたものである。ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、データの複写、すなわち、レジスタから選択されたメモリセルへの複写又は選択されたメモリセルから後述の各種レジスタへのデータの複写が行われる。つまり、メモリコントローラ３から与えられたデータは、レジスタを介してメモリセルアレイに書き込まれ、メモリセルアレイに記憶されているデータはレジスタを介してメモリコントローラ３に供給される。
【００３０】
メモリセルアレイを構成するメモリセルは、上下にゲートを備えたＭＯＳトランジスタによって構成される。ここで、上側のゲートはコントロールゲート、下側のゲートはフローティングゲートとそれぞれ呼ばれている。フローティングゲートに電荷（電子）を注入若しくはフローティングゲートから電荷（電子）を排出することによって、データの書き込み若しくはデータの消去が行われる。
【００３１】
このフローティングゲートは、周囲が絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。なお、フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧がコントロールゲートとフローティングゲートとの間に印加される。また、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧がコントロールゲートとフローティングゲートとの間に印加される。
【００３２】
ここで、フローティングゲートに電子が注入されている状態が書き込み状態であり、論理値「０」に対応する。また、フローティングゲートから電子が排出されている状態が消去状態であり、論理値「１」に対応する。
【００３３】
このようなフラッシュメモリ２のアドレス空間は、“ページ”及び“ブロック（物理ブロック）”で構成されている。ページは、フラッシュメモリ２にて行われるデータ読み出し動作及びデータ書き込み動作における処理単位である。物理ブロックは、フラッシュメモリ２にて行われるデータ消去動作における処理単位であり、複数個のページで構成されている。
【００３４】
ここで、図２は、フラッシュメモリ２のアドレス空間の構造を概略的に示すものであり、１個のページが、４セクタ（２０４８バイト）のユーザ領域２５と、６４バイトの冗長領域２６とで構成され、１個の物理ブロックは６４個のページで構成されている。またここでは、１バイトがビットｂ０〜ｂ７からなる８ビットである場合を示している。また、ユーザ領域２５と冗長領域２６とはそれぞれ４分割して使用される（以下、ユーザ領域２５を４分割した５１２バイトの領域をセクタ領域といい、冗長領域２６を４分割した１６バイトの領域を部分冗長領域という）。また、１個のセクタ領域には１個の部分冗長領域がそれぞれ割り当てられている。つまり、このフラッシュメモリ２は、１ブロックあたり、２５６個のセクタ領域（図９参照）と各セクタ領域に割り当てられた２５６個の部分冗長領域とで構成されているとみなすことができる。
【００３５】
また、物理ブロックには、図３（ｃ）に示したように、それぞれに固有の物理ブロックアドレス（ＰＢＡ）が割り当てられている。さらに、記憶領域を複数のゾーンに分割して管理する場合には、複数個の物理ブロックで物理ゾーンを構成し、各物理ゾーンに固有の物理ゾーン番号（ＰＺＮ）を割り当てている。各物理ゾーンに含まれる物理ブロックの、各物理ゾーン内での通番を物理ゾーン内ブロック番号（ＰＺＩＢＮ）と呼んでいる。
【００３６】
一方、ホストシステム４側のアドレス空間は、図３（ａ）に示したようにセクタ（５１２バイト）単位で分割した領域に付けた通番であるＬＢＡ（Logical Block Address）で管理されている。さらに、複数個のセクタをまとめたものを論理ブロックと呼び、複数個の論理ブロックをまとめたものを論理ゾーンと呼んでいる。また、図３（ｂ）に示したように論理ブロックに付けられた通番を論理ブロック番号（ＬＢＮ）と呼び、論理ゾーンに付けられた通番を論理ゾーン番号（ＬＺＮ）と呼んでいる。また、各論理ゾーンに含まれる論理ブロックの、各論理ゾーン内での通番を論理ゾーン内ブロック番号（ＬＺＩＢＮ）と呼んでいる。
【００３７】
また、各論理ゾーンにはそれぞれ１個の物理ゾーンが割り当てられ、論理ゾーンに含まれる各論理ブロックに対応するデータは、その論理ゾーンに割り当てられた物理ゾーンに含まれる物理ブロックに書き込まれる。したがって、１個の論理ブロックに含まれるセクタ数は、１個の物理ブロックに含まれるセクタ領域の個数に応じて設定される。但し、１個の論理ブロックを複数個の物理ブロックに割り当てる場合には、その複数個の物理ブロックを１個の物理ブロックとみなして１個の論理ブロックに含まれるセクタ数を設定する。
【００３８】
図３に示した例では、１個の物理ブロックが２５６個のセクタ領域で構成されたフラッシュメモリを想定しているため、２５６セクタが１個の論理ブロックに対応している。したがって、ＬＢＮ＃０〜＃４９９の５００個の論理ブロックで構成されたＬＺＮ＃０の論理ゾーンは、ＬＢＡ＃０〜＃１２７９９９の１２８０００セクタの領域に対応している。  
【００３９】
以下同様に、ＬＺＮ＃１の論理ゾーンは、ＬＢＡ＃１２８０００〜＃２５５９９９の１２８０００セクタの領域に対応し、ＬＺＮ＃２の論理ゾーンは、ＬＢＡ＃２５６０００〜＃３８３９９９の１２８０００セクタの領域に対応し、ＬＺＮ＃３の論理ゾーンは、ＬＢＡ＃３８４０００〜＃５１１９９９の１２８０００セクタの領域に対応している。
【００４０】
また、ＬＢＮ＃０〜＃４９９の５００個の論理ブロックで構成されたＬＺＮ＃０の論理ゾーンは、ＰＢＡ＃０〜＃５１１の５１２個の物理ブロックで構成されたＰＺＮ＃０の物理ゾーンに割り当てられている。以下同様に、ＬＺＮ＃１の論理ゾーンは、ＰＺＮ＃１の物理ゾーンに割り当てられ、ＬＺＮ＃２の論理ゾーンは、ＰＺＮ＃２の物理ゾーンに割り当てられ、ＬＺＮ＃３の論理ゾーンは、ＰＺＮ＃３の物理ゾーンに割り当てられている。  
【００４１】
ここで、物理ゾーンに含まれる物理ブロックの個数を、論理ゾーンに含まれる論理ブロックの個数より多くしているのは、同一の論理ブロックに対応する新データと旧データが別々の物理ブロックに並存する場合や、データを正常に書き込むことができない不良ブロックが発生した場合等を考慮したものである。
【００４２】
また、各物理ブロックには、その物理ブロックに割り当てられた論理ブロックのデータがＬＢＡの順番で書き込まれるので、物理ブロックと論理ブロックとの対応関係を管理することにより、ホストシステム４から与えられるＬＢＡとフラッシュメモリ２内のアクセス領域の対応関係を管理することができる。
【００４３】
なお、物理ブロックと論理ブロックとの対応関係は、データの書き込みや消去が行われる毎に変化する。このため、個々の時点における両者の対応関係を管理するためアドレス変換テーブルが作成され、対応関係が変化する毎にアドレス変換テーブルが更新される。また、論理ゾーンと物理ゾーンとの対応関係は予め設定されており、アドレス変換テーブルは論理ゾーン毎に作成することができる。
【００４４】
このアドレス変換テーブルは、物理ブロックの先頭ページの冗長領域２６に書き込まれる論理ブロックを示す情報（以下、論理アドレス情報という）に基づいて作成される。冗長領域２６に書き込まれる論理アドレス情報としては、ＬＢＮ等の論理ブロックを特定する情報が用いられる。なお、論理ゾーンと物理ゾーンとの対応関係は予め設定されている場合は、ＬＺＩＢＮに基づいてアドレス変換テーブルを作成することができるので、ＬＢＮよりデータ量の少ないＬＺＩＢＮを用いることが好ましい。
【００４５】
また、物理ブロックの先頭ページの冗長領域２６には、その物理ブロックが不良ブロックであるか否かを示すブロックステータス（フラグ）が書き込まれる。各セクタ領域に対応する部分冗長領域には、それぞれ対応するセクタ領域に書き込まれたユーザデータのエラーコレクションコード（ＥＣＣ）と、セクタポインタ情報ＳＰとが書き込まれる。
【００４６】
次に、フラッシュメモリ２に対してアクセス処理を行うメモリコントローラ３について説明する。メモリコントローラ３は、フラッシュメモリ２にデータ、アドレス情報、内部コマンド等を供給することにより読み出し処理、書き込み処理、ブロック消去処理等の各処理を行う。
【００４７】
ここで、内部コマンドとは、メモリコントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２はメモリコントローラ３から与えられる内部コマンドに従って動作する。一方、ホストシステム４からメモリコントローラ３に与えられるコマンドを外部コマンドという。
【００４８】
メモリコントローラ３は、図１に示すように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣ（エラー・コレクション・コード）ブロック１１と、ＲＯＭ（Read Only Memory）１２とを備えている。これら機能ブロックによって構成されるメモリコントローラ３は、一つの半導体チップ上に集積される。
【００４９】
マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムに従って、メモリコントローラ３の全体の動作を制御する。
【００５０】
また、マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムを読み込むことで、セクタポインタ情報書込み手段、検索範囲保持手段、セクタ領域検索手段、セクタポインタ情報更新手段、第１のセクタ領域判別手段、第２のセクタ領域判別手段を実現している。
【００５１】
また、マイクロプロセッサ６は、各種処理等を定義したコマンドセット（以下、シーケンスコマンドという）をＲＯＭ１２から読み出し、このシーケンスコマンドに従ってフラッシュメモリインターフェースブロック１０に処理を実行させる。
【００５２】
ＲＯＭ１２は、不揮発性の記憶素子であり、上記のシーケンスコマンド等を記憶している。ワークエリア８は、フラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成される。上述のアドレス変換テーブルは、このワークエリア８上に作成される。
【００５３】
バッファ９は、フラッシュメモリ２から読み出されたデータ及びフラッシュメモリ２に書き込むべきデータを一時的に蓄積する。すなわち、フラッシュメモリ２から読み出されたデータは、ホストシステム４が受け取り可能な状態となるまでバッファ９に保持され、フラッシュメモリ２に書き込むべきデータは、フラッシュメモリ２が書き込み可能な状態となるまでバッファ９に保持される。
【００５４】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加されるエラーコレクションコードを生成するとともに、読み出しデータに付加されたエラーコレクションコードに基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００５５】
ホストインターフェースブロック７は、ホストシステム４との間で、外部バス１３を介し、データ、アドレス情報、外部コマンド等の授受を行う。ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてフラッシュメモリシステム１の内部（たとえば、バッファ９）に取り込まれる。  
【００５６】
また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。フラッシュメモリインターフェースブロック１０は、内部バス１４を介して、フラッシュメモリ２とデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。
【００５７】
ホストインターフェースブロック７及びフラッシュメモリインターフェースブロック１０は、図４に示すような各種レジスタを備える。すなわち、ホストインターフェースブロック７は、コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３等を備えている。また、フラッシュメモリインターフェースブロック１０は、物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２、カウンタＲ１３、セクタポインタレジスタＲ１４等を備えている。
【００５８】
コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３には、ホストシステム４から与えられる情報が書き込まれる。コマンドレジスタＲ１には、書き込みコマンド、読み出しコマンド等の外部コマンドが書き込まれる。セクタ数レジスタＲ２にはアクセス対象領域のセクタ数が書き込まれる。ＬＢＡレジスタＲ３には、アクセス対象領域の先頭のＬＢＡが書き込まれる。
【００５９】
物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２、カウンタＲ１３には、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３に書き込まれた情報に基づく、フラッシュメモリ２内のアクセス対象領域を指示する情報が書き込まれる。
【００６０】
たとえば、ＬＢＡが連続する２５６セクタの領域を、フラッシュメモリ２（１ブロックが６４ページで、１ページが４セクタの場合）の１個の物理ブロックに割り当てた場合、図３で説明したＬＢＡの下位８ビットがセクタ番号ＳＮに対応し、この下位８ビットを除いた上位側のビットが論理ブロック番号（ＬＢＮ）に対応する。
【００６１】
つまり、ＬＢＡが連続する２５６セクタの領域を１個の論理ブロックとした場合、ＬＢＡの下位８ビットが論理ブロック内の各セクタに付けた通番であるセクタ番号ＳＮ（０〜２５５）を示し、このＬＢＡの下位８ビットを除いた上位側のビットが論理ブロック番号（ＬＢＮ）を示している。なお、ＬＢＡ、論理ブロック番号（ＬＢＮ）及びセクタ番号ＳＮのビット数については、フラッシュメモリ２の容量や仕様等に応じて決定される。
【００６２】
次に、物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２、カウンタＲ１３に設定される情報について説明する。セクタ番号レジスタＲ１２には、ＬＢＡレジスタＲ３に書き込まれたＬＢＡのセクタ番号ＳＮに対応する部分が書き込まれる。
【００６３】
ここで、各物理ブロックにはＬＢＡの順番でユーザデータが書き込まれるので、上記のセクタ番号ＳＮは、各物理ブロックに含まれるセクタ領域に付けられた通番に対応する。一方、物理ブロックアドレスレジスタＲ１１には、ＬＢＡレジスタＲ３に書き込まれたＬＢＡの論理ブロック番号（ＬＢＮ）を示す部分に基づいて特定された論理ブロックと対応する物理ブロックの物理ブロックアドレス（ＰＢＡ）又は空きブロックの物理ブロックアドレス（ＰＢＡ）が書き込まれる。
【００６４】
つまり、特定された論理ブロックに対応する物理ブロックからユーザデータを読み出す場合、又は、その物理ブロックに追加書き込みをする場合には、特定された論理ブロックと対応する物理ブロックの物理ブロックアドレス（ＰＢＡ）が物理ブロックアドレスレジスタＲ１１に書き込まれる。また、特定された論理ブロックに対応するユーザデータを空きブロックに書き込む場合には、その空きブロックの物理ブロックアドレス（ＰＢＡ）が物理ブロックアドレスレジスタＲ１１に書き込まれる。カウンタＲ１３には、セクタ数レジスタＲ２に設定されたセクタ数が書き込まれる。
【００６５】
なお、ＬＢＡレジスタＲ３及びセクタ数レジスタＲ２に設定された情報に基づいて特定されるアクセス対象領域が複数の論理ブロックに跨っている場合、アクセス対象領域の物理ブロックも複数の物理ブロックに跨っているので、物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２、カウンタＲ１３に対する情報の設定は論理ブロック毎に行い、カウンタＲ１３には各論理ブロックに書き込まれるユーザデータのセクタ数を設定する。
【００６６】
したがって、ＬＢＡレジスタＲ３及びセクタ数レジスタＲ２に設定された情報に基づいて特定されるアクセス対象領域が複数の論理ブロックに跨っている場合、ホストシステム４から与えられる１回の書き込みコマンドに基づいて複数回（たとえば、２個の論理ブロックに跨っている場合は２回）のシーケンス書き込み処理が実行される。
【００６７】
書き込み処理の場合には、セクタポインタレジスタＲ１４にそのシーケンス書き込み処理で最後にユーザデータが書き込まれるセクタ領域の次のセクタ領域の番号が設定される。つまり、セクタポインタレジスタＲ１４には、セクタ番号レジスタＲ１２に設定された値にカウンタＲ１３に設定された値を加えた値が設定される。
【００６８】
また、シーケンス書き込み処理では、１セクタのユーザデータがバッファ９からフラッシュメモリ２に供給される毎にセクタ番号レジスタＲ１２に設定されている値がインクリメント（１ずつ増加）され、カウンタＲ１３に設定されている値がデクリメント（１ずつ減少）される。カウンタＲ１３に設定されている値が０になったときにシーケンス書き込み処理が終了する。
【００６９】
たとえば、セクタ番号レジスタＲ１２に「１０」を設定し、カウンタＲ１３に「８」を設定してシーケンス書き込み処理を開始した場合、ＳＮ＃１０〜＃１７のセクタ領域にユーザデータが書き込まれる。また、セクタポインタレジスタＲ１４には「１８（１０＋８）」が設定されるので、このシーケンス書き込み処理でユーザデータが書き込まれたセクタ領域に対応する部分冗長領域にはセクタポインタ情報ＳＰとして「１８」が書き込まれる。
【００７０】
また、シーケンス書き込み処理で連続的に書き込まれるデータを、一連データと呼んでいる。したがって、一連データのセクタ数はカウンタＲ１３に設定された数値によって決まり、一連データが書き込まれたセクタ領域に対応する部分冗長領域には、同一のセクタポインタ情報ＳＰが書き込まれる。
【００７１】
また、一連データの書き込み処理を開始するときに、その一連データの書き込み先の物理ブロックに既にデータが存在する場合には、一連データを書き込むことができるかどうかを判別する。つまり、一連データの先頭データの書き込み先に対応するセクタ領域が、その物理ブロックのデータが書き込まれていないセクタ領域の先頭より前であれば一連データを書き込むことができないと判断し、前でなければ一連データを書き込むことができると判断する。この判断をするため、データが書き込まれていないセクタ領域の先頭を検索する検索処理が行われる。
【００７２】
次に、このようなデータが書き込まれていないセクタ領域の先頭を検索する検索処理を、図５、図６及び図９を用いて説明する。なお、図９は、上述したように、１個の物理ブロックが２５６個のセクタ領域で構成されているとみなすことができる大ブロックの場合を示している。また、以下では、セクタ領域を検索する範囲の先頭を示す先頭位置情報をスタートポインタＸとし、その末尾を示す末尾位置情報をエンドポインタＹとして説明する。
【００７３】
まず、スタートポインタＸに最初のセクタ領域のセクタ番号ＳＮに対応する０を設定し、エンドポインタＹに最後のセクタ領域のセクタ番号ＳＮに１を加えた２５６を設定する（ステップＳ１）。続いて、スタートポインタＸに設定されている値とエンドポインタＹに設定されている値の中間点のセクタ番号ＳＮの値ｎを算出する（ステップＳ２）。このｎを算出するときは、エンドポインタＹの値からスタートポインタＸの値を引いて得られた値を２で割り、小数点以下を切り捨てる。
【００７４】
次に、セクタ番号ＳＮがｎのセクタ領域にデータが書き込まれているかどうかを判断する。本実施例では、セクタ番号ＳＮがｎのセクタ領域に対応する部分冗長領域を参照し、セクタポインタ情報ＳＰが書き込まれていた場合は、セクタ番号ＳＮがｎのセクタ領域にデータが書き込まれていると判断し、セクタポインタ情報ＳＰが書き込まれていない場合は、セクタ番号ＳＮがｎのセクタ領域にデータが書き込まれていないと判断する（ステップＳ３）。
【００７５】
セクタ番号ＳＮがｎのセクタ領域に対応する部分冗長領域にセクタポインタ情報ＳＰが書き込まれていた場合（ステップＳ３：Ｙｅｓ）、スタートポインタＸの値をそのセクタポインタ情報ＳＰが示す値から１を減じた値に変更する（ステップＳ４）。
【００７６】
セクタ番号ＳＮがｎのセクタ領域に対応する部分冗長領域にセクタポインタ情報ＳＰが書き込まれていない場合（ステップＳ３：Ｎｏ）、エンドポインタＹの値をそのセクタ領域のセクタ番号ＳＮであるｎに変更する（ステップＳ５）。
【００７７】
ステップＳ４又はステップＳ５で、スタートポインタＸの値又はエンドポインタＹの値を変更した後に、エンドポインタＹの値とスタートポインタＸの値の差が１であるかどうかを判断する（ステップＳ６）。エンドポインタＹの値とスタートポインタＸの値の差が１より大きい場合（ステップＳ６：Ｎｏ）、ステップＳ３に戻り検索を続行し、エンドポインタＹの値とスタートポインタＸの値の差が１の場合（ステップＳ６：Ｙｅｓ）、検索を終了する。
【００７８】
ここで、検索を終了したときにスタートポインタＸに設定されている値を、データが書き込まれているセクタ領域の末尾と判断し、エンドポインタＹに設定されている値を、データが書き込まれていないセクタ領域の先頭と判断する。
【００７９】
なお、上述の説明では、セクタポインタ情報は、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の次のセクタ領域の番号を示す情報であるが、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示す情報であってもよい。セクタポインタ情報が、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示す情報の場合は、ステップＳ４でセクタポインタ情報ＳＰが示す値をそのままスタートポインタＸに設定すればよい。
【００８０】
次に、図９に示したように一連データが書き込まれている場合の検索について図６を参照して具体的に説明する。
【００８１】
まず、スタートポインタＸに最初のセクタ領域のセクタ番号ＳＮに対応する０を設定し、エンドポインタＹに最後のセクタ領域のセクタ番号ＳＮに１を加えた２５６を設定する（ステップＳ１）。続いて、スタートポインタＸに設定されている値（０）とエンドポインタＹに設定されている値（２５６）の中間点のセクタ番号ＳＮがＳ＃１２８のセクタ領域に対応する部分冗長領域を参照する（検索回数：１）。参照した部分冗長領域にセクタポインタ情報ＳＰ（ＳＰ＃１５０）が書き込まれているので、スタートポインタＸの値をそのセクタポインタ情報ＳＰ（ＳＰ＃１５０）の値から１を減じた１４９に変更する。
【００８２】
スタートポインタＸに設定されている値（１４９）とエンドポインタＹに設定されている値（２５６）の差が１より大きいので、その中間点のセクタ番号ＳＮがＳ＃２０３のセクタ領域に対応する部分冗長領域を参照する（検索回数：２）。参照した部分冗長領域にセクタポインタ情報ＳＰが書き込まれていないので、エンドポインタＹの値を参照した部分冗長領域に対応するセクタ番号ＳＮ（Ｓ＃２０３）の値である２０３に変更する。
【００８３】
スタートポインタＸに設定されている値（１４９）とエンドポインタＹに設定されている値（２０３）の差が１より大きいので、その中間点のセクタ番号ＳＮがＳ＃１７６のセクタ領域に対応する部分冗長領域を参照する（検索回数：３）。参照した部分冗長領域にセクタポインタ情報ＳＰ（ＳＰ＃１７８）が書き込まれているので、スタートポインタＸの値をそのセクタポインタ情報ＳＰ（ＳＰ＃１７８）の値から１を減じた１７７に変更する。
【００８４】
スタートポインタＸに設定されている値（１７７）とエンドポインタＹに設定されている値（２０３）の差が１より大きいので、その中間点のセクタ番号ＳＮがＳ＃１９０のセクタ領域に対応する部分冗長領域を参照する（検索回数：４）。参照した部分冗長領域にセクタポインタ情報ＳＰ（ＳＰ＃２０１）が書き込まれているので、スタートポインタＸの値をそのセクタポインタ情報ＳＰ（ＳＰ＃２０１）の値から１を減じた２００に変更する。
【００８５】
スタートポインタＸに設定されている値（２００）とエンドポインタＹに設定されている値（２０３）の差が１より大きいので、その中間点のセクタ番号ＳＮがＳ＃２０１のセクタ領域に対応する部分冗長領域を参照する（検索回数：５）。参照した部分冗長領域にセクタポインタ情報ＳＰが書き込まれていないので、エンドポインタＹの値を参照した部分冗長領域に対応するセクタ番号ＳＮ（Ｓ＃２０１）の値である２０１に変更する。
【００８６】
スタートポインタＸに設定されている値（２００）とエンドポインタＹに設定されている値（２０１）の差が１になったので検索を終了し、スタートポインタＸに設定されている値に対応するセクタ番号ＳＮがＳ＃２００のセクタ領域を、データが書き込まれているセクタ領域の末尾と判断し、エンドポインタＹに設定されている値に対応するセクタ番号ＳＮがＳ＃２０１のセクタ領域を、データが書き込まれていないセクタ領域の先頭と判断する。
【００８７】
次に、エンドポインタＹの値とスタートポインタＸの値が一致したときに検索を終了する検索処理について図７、図８及び図９を用いて説明する。
【００８８】
まず、スタートポインタＸに最初のセクタ領域のセクタ番号ＳＮに対応する０を設定し、エンドポインタＹに最後のセクタ領域のセクタ番号ＳＮに１を加えた２５６を設定する（ステップＳ７）。続いて、スタートポインタＸに設定されている値とエンドポインタＹに設定されている値の中間点のセクタ番号ＳＮの値ｎを算出する（ステップＳ８）。このｎを算出するときは、エンドポインタＹの値からスタートポインタＸの値を引いて得られた値を２で割り、小数点以下を切り捨てる。
【００８９】
次に、セクタ番号ＳＮがｎのセクタ領域にデータが書き込まれているかどうかを判断する。本実施例では、セクタ番号ＳＮがｎのセクタ領域に対応する部分冗長領域を参照し、セクタポインタ情報ＳＰが書き込まれていた場合は、セクタ番号ＳＮがｎのセクタ領域にデータが書き込まれていると判断し、セクタポインタ情報ＳＰが書き込まれていない場合は、セクタ番号ＳＮがｎのセクタ領域にデータが書き込まれていないと判断する（ステップＳ９）。
【００９０】
セクタ番号ＳＮがｎのセクタ領域に対応する部分冗長領域にセクタポインタ情報ＳＰが書き込まれていた場合（ステップＳ９：Ｙｅｓ）、スタートポインタＸの値をそのセクタポインタ情報ＳＰが示す値に変更する（ステップＳ１０）。
【００９１】
セクタ番号ＳＮがｎのセクタ領域に対応する部分冗長領域にセクタポインタ情報ＳＰが書き込まれていない場合（ステップＳ９：Ｎｏ）、エンドポインタＹの値をそのセクタ領域のセクタ番号ＳＮであるｎに変更する（ステップＳ１１）。
【００９２】
ステップＳ１０又はステップＳ１１で、スタートポインタＸの値又はエンドポインタＹの値を変更した後に、スタートポインタＸの値とエンドポインタＹの値が一致しているかどうかを判断する（ステップＳ１２）。スタートポインタＸの値とエンドポインタＹの値が一致していない場合（ステップＳ１２：Ｎｏ）、スタートポインタＸの値とエンドポインタＹの値が一致している場合（ステップＳ１２：Ｙｅｓ）、検索を終了する。
【００９３】
ここで、検索を終了したときにスタートポインタＸ及びエンドポインタＹに設定されている値を、データが書き込まれていないセクタ領域の先頭と判断する。
【００９４】
なお、上述の説明では、セクタポインタ情報は、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の次のセクタ領域の番号を示す情報であるが、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示す情報であってもよい。セクタポインタ情報が、一連データの書き込み処理でデータが最後に書き込まれるセクタ領域の番号を示す情報の場合は、ステップＳ１０でセクタポインタ情報ＳＰが示す値に１を加えた値をスタートポインタＸに設定すればよい。
【００９５】
次に、図９に示したように一連データが書き込まれている場合の検索について図８を参照して具体的に説明する。
【００９６】
まず、スタートポインタＸに最初のセクタ領域のセクタ番号ＳＮに対応する０を設定し、エンドポインタＹに最後のセクタ領域のセクタ番号ＳＮに１を加えた２５６を設定する。続いて、スタートポインタＸに設定されている値（０）とエンドポインタＹに設定されている値（２５６）の中間点のセクタ番号ＳＮがＳ＃１２８のセクタ領域に対応する部分冗長領域を参照する（検索回数：１）。参照した部分冗長領域にセクタポインタ情報ＳＰ（ＳＰ＃１５０）が書き込まれているので、スタートポインタＸの値をそのセクタポインタ情報ＳＰ（ＳＰ＃１５０）の値である１５０に変更する。
【００９７】
スタートポインタＸに設定されている値（１５０）とエンドポインタＹに設定されている値（２５６）が一致していないので、その中間点のセクタ番号ＳＮがＳ＃２０３のセクタ領域に対応する部分冗長領域を参照する（検索回数：２）。参照した部分冗長領域にセクタポインタ情報ＳＰが書き込まれていないので、エンドポインタＹの値を参照した部分冗長領域に対応するセクタ番号ＳＮ（Ｓ＃２０３）の値である２０３に変更する。
【００９８】
スタートポインタＸに設定されている値（１５０）とエンドポインタＹに設定されている値（２０３）が一致していないので、その中間点のセクタ番号ＳＮがＳ＃１７６のセクタ領域に対応する部分冗長領域を参照する（検索回数：３）。参照した部分冗長領域にセクタポインタ情報ＳＰ（ＳＰ＃１７８）が書き込まれているので、スタートポインタＸの値をそのセクタポインタ情報ＳＰ（ＳＰ＃１７８）の値である１７８に変更する。
【００９９】
スタートポインタＸに設定されている値（１７８）とエンドポインタＹに設定されている値（２０３）が一致していないので、その中間点のセクタ番号ＳＮがＳ＃１９０のセクタ領域に対応する部分冗長領域を参照する（検索回数：４）。参照した部分冗長領域にセクタポインタ情報ＳＰ（ＳＰ＃２０１）が書き込まれているので、スタートポインタＸの値をそのセクタポインタ情報ＳＰ（ＳＰ＃２０１）の値である２０１に変更する。
【０１００】
スタートポインタＸに設定されている値（２０１）とエンドポインタＹに設定されている値（２０３）が一致していないので、その中間点のセクタ番号ＳＮがＳ＃２０２のセクタ領域に対応する部分冗長領域を参照する（検索回数：５）。参照した部分冗長領域にセクタポインタ情報ＳＰが書き込まれていないので、エンドポインタＹの値を参照した部分冗長領域に対応するセクタ番号ＳＮ（Ｓ＃２０２）の値である２０２に変更する。
【０１０１】
スタートポインタＸに設定されている値（２０１）とエンドポインタＹに設定されている値（２０２）が一致していないので、その中間点のセクタ番号ＳＮがＳ＃２０１のセクタ領域に対応する部分冗長領域を参照する（検索回数：６）。参照した部分冗長領域にセクタポインタ情報ＳＰが書き込まれていないので、エンドポインタＹの値を参照した部分冗長領域に対応するセクタ番号ＳＮ（Ｓ＃２０１）の値である２０１に変更する。
【０１０２】
スタートポインタＸに設定されている値（２０１）とエンドポインタＹに設定されている値（２０１）が一致したので、スタートポインタＸ及びエンドポインタＹに設定されている値に対応するセクタ番号ＳＮがＳ＃２０１のセクタ領域を、データが書き込まれていないセクタ領域の先頭と判断する。
【０１０３】
以上に説明したように、本実施例では二分木検索に基づいて参照したセクタ領域にデータが書き込まれていた場合、つまり、そのセクタ領域に対応する部分冗長領域にセクタポインタ情報ＳＰが書き込まれていた場合、そのセクタポインタ情報ＳＰに基づいてスタートポインタＸの値を変更するようにしたので、通常の二分木検索で検索を行った場合よりも平均的な検索回数を少なくすることができる。
【０１０４】
たとえば、１個の物理ブロックに含まれるセクタ領域が２５６（２８）個の場合、通常の二分木検索であれば、常に８回の検索を行わなければ検索対象のセクタ領域を検出することができなかったが、本実施例では８回以下の検索回数で検索対象のセクタ領域を検出することができる。
【０１０５】
なお、参照したセクタ領域にデータが書き込まれていた場合にスタートポインタＸに設定する値は、そのセクタ領域に書き込まれているデータが属する一連データの末尾データが書き込まれたセクタ領域に対応するセクタ番号ＳＮの値、又はその末尾データが書き込まれたセクタ領域の次のセクタ領域に対応するセクタ番号ＳＮの値のいずれであってもよい。
【０１０６】
また、セクタポインタ情報ＳＰが示す値は、一連データの末尾データが書き込まれたセクタ領域に対応するセクタ番号ＳＮの値、又は一連データの末尾データが書き込まれたセクタ領域の次のセクタ領域に対応するセクタ番号ＳＮの値を求めることができる情報であれば特に限定されることはない。
【０１０７】
また、上記の実施例では、各物理ブロックに、その物理ブロックに割り当てられた論理ブロックのデータをＬＢＡの順番で書き込むため、一連データの書き込み処理を開始するときに、一連データを書き込むことができるかどうかを判別したが、データをランダムに書き込む場合には、データが書き込まれていないセクタ領域の先頭を検出した後、そのセクタ領域以降のセクタ領域に順次データを書込んでいってもよい。
【図面の簡単な説明】
【０１０８】
【図１】本発明のフラッシュメモリシステムの一実施例の概略を説明するためのブロック図である。
【図２】図１のフラッシュメモリのアドレス空間の構造を概略的に示す図である。
【図３】図１のフラッシュメモリシステムにおけるアドレス変換の概要を説明するための図である。
【図４】図１のホストインターフェースブロック及びフラッシュメモリインターフェースブロックの詳細を示すブロック図である。
【図５】図１のフラッシュメモリシステムにおける物理ブロック内での複数の一連データが書き込まれていないセクタ領域の先頭の検索方法を説明するためのフローチャートである。
【図６】図１のフラッシュメモリシステムにおける物理ブロック内での複数の一連データが書き込まれていないセクタ領域の先頭の検索方法を説明するための図である。
【図７】図１のフラッシュメモリシステムにおける物理ブロック内での複数の一連データが書き込まれていないセクタ領域の先頭の他の検索方法を説明するためのフローチャートである。
【図８】図１のフラッシュメモリシステムにおける物理ブロック内での複数の一連データが書き込まれていないセクタ領域の先頭の他の検索方法を説明するための図である。
【図９】従来のフラッシュメモリにおける１ブロック分の書き込み状態を示す概略図である。
【図１０】従来のスタートページ情報を用いた物理ブロック内での複数の一連データが書き込まれていないセクタ領域の先頭の他の検索方法を説明するための図である。
【図１１】従来の二分木検索を用いた物理ブロック内での複数の一連データが書き込まれていないセクタ領域の先頭の他の検索方法を説明するための図である。
【符号の説明】
【０１０９】
１  フラッシュメモリシステム
２  フラッシュメモリ
３  メモリコントローラ
４  ホストシステム
６  マイクロプロセッサ（セクタポインタ情報書込み手段、検索範囲保持手段、セク        タ領域検索手段、セクタポインタ情報更新手段、第１のセクタ領域判別手段、第        ２のセクタ領域判別手段）
７  ホストインターフェースブロック
８  ワークエリア
９  バッファ
１０  フラッシュメモリインターフェースブロック
１１  ＥＣＣブロック
１３  外部バス
１４  内部バス
２５  ユーザ領域
２６  冗長領域
Ｒ１  コマンドレジスタ
Ｒ２  セクタ数レジスタ
Ｒ３  ＬＢＡレジスタ
Ｒ１１  物理ブロックアドレスレジスタ
Ｒ１２  セクタ番号レジスタ
Ｒ１３  カウンタ
Ｒ１４  セクタポインタレジスタ
【図１】
0004497124.tif 000002
【図２】
0004497124.tif 000003
【図３】
0004497124.tif 000004
【図４】
0004497124.tif 000005
【図５】
0004497124.tif 000006
【図６】
0004497124.tif 000007
【図７】
0004497124.tif 000008
【図８】
0004497124.tif 000009
【図９】
0004497124.tif 000010
【図１０】
0004497124.tif 000011
【図１１】
0004497124.tif 000012