(57)【特許請求の範囲】
【請求項１】
物理アドレスが割り当てられた複数のメモリブロックを含む記憶手段（１）と、
前記記憶手段の記憶データをメモリブロック単位で一括して消去する消去手段（１ｅ）と、
書き込み対象のデータと論理アドレスを入力し、該データの前記記憶手段内の記憶位置を定め、該データを該記憶位置に書き込む書込手段（４Ｘ，４Ｂ，５，２０）と、
から構成され、
前記記憶手段は、前記データを記憶していない空きブロックを表す空きブロック情報を記憶しており、
前記空きブロック情報は、各空きブロックの一部に記憶され、他の１つの空きブロックを示すように連鎖的に登録された連鎖情報から構成され、
前記書込手段は、前記空きブロック情報が示す空きブロックに、新たなデータが、前記連鎖情報により定義される空きブロックの論理的な順番に従い、最後に他のデータが書き込まれた空きブロック以降の空きブロックに順次書き込まれ、ただし後続のブロックに空きブロックがないときは、先頭のブロック以降の空きブロックに順次書き込まれるような態様で前記データを書き込むものであって、
前記記憶手段は、前記論理アドレスと前記記憶手段の物理アドレスとの対応関係を表す情報を格納するアドレス変換テーブルを記憶しており、
前記書込手段は、
前記連鎖情報に従って、空きブロックを判別し、該空きブロックに前記データを書き込む手段（４Ｘ，４Ｂ，５，２０）と、
前記書込手段が空きブロックに前記データを書き込んだ後、前記アドレス変換テーブルを記憶しているブロックが連鎖の末尾に登録されるように前記連鎖情報を追加する手段（４Ｘ，４Ｂ，５，２０）と、を備え、
前記消去手段は、前記書込手段が前記アドレス変換テーブルを記憶しているブロックを連鎖の末尾に登録した後、当該ブロックの記憶データを消去する手段（１ｅ）を備える、
ことを特徴とする記憶装置。
【請求項２】
前記記憶手段は、データ領域と冗長領域から構成され、前記連鎖情報は、前記冗長領域に格納されている、
ことを特徴とする請求項１に記載の記憶装置。
【請求項３】
ブロック単位でデータの消去が可能で、予めデータが消去された空きブロックにデータの書き込みが可能なブロック消去型のメモリへのアクセス方法であって、
前記メモリに、該メモリの空きブロックを示す空きブロック情報を記憶させ、
書き込み対象データが供給された時に、前記空きブロック情報に基づいて空きブロックを判別し、判別した空きブロックに該データを書き込むと共に前記空きブロック情報に基づいて空きブロックを新たに判別し、新たに判別した前記空きブロックに更新された空きブロック情報を書き込む、
ことを特徴とするアクセス方法。
【請求項４】
ブロック単位でデータの消去が可能で、予めデータが消去された空きブロックにデータの書き込みが可能なブロック消去型のメモリへのアクセス方法であって、
前記メモリが備えるブロックに、該メモリの空きブロックを示す空きブロック情報を記憶させ、
書き込み対象データが供給された時に、前記空きブロック情報に基づいて空きブロックを判別し、判別した空きブロックに該データを書き込むと共に、前記空きブロック情報に基づいて空きブロックを新たに判別し、前記空きブロック情報を記憶する前記ブロックの記憶内容を消去すると共に、新たに判別した前記空きブロックに更新された空きブロック情報を書き込む、
ことを特徴とするアクセス方法。
【発明の詳細な説明】
技術分野
この発明は、記憶装置及びアクセス方法に関し、特にブロック消去型記憶装置とそのアクセス方法に関する。
背景技術
フラッシュメモリ等のブロック消去型記憶媒体を備え、中央処理装置（ＣＰＵ）や専用コントローラの制御の下に情報を読み書きするブロック消去型記憶装置が知られている。
ブロック消去型記憶媒体とは、データを書き込むためには、書き込みの対象となる領域の記憶内容が予め消去されていなければならず、消去の処理が、書込処理により扱われる最小記憶容量の単位（一般に、ページ、セグメント等と呼ばれる）に等しい大きさであるか又はより大きな単位（一般に、ブロックと呼ばれる）でしか行えない記憶媒体を指す。
ブロック消去型記憶装置は、外部からのアクセスを管理するために、空きブロックの位置を表す情報を格納する空きブロックテーブルや論理アドレスと物理アドレスとの対応関係を表す情報を格納するアドレス変換テーブルを記憶するＳＲＡＭ（スタティック型ランダムアクセスメモリ）等を備えている。
ブロック消去型記憶装置は、書き込み要求を受信すると、空きブロックテーブルに登録されている空ブロックを検索し、索出したブロックにデータを書き込み、そのブロックの物理アドレスと論理アドレスとの対応関係をアドレス変換テーブルに追加し、さらに、そのブロックを空きブロックテーブルから削除する。
また、ブロック消去型記憶装置は、読み出し要求を受信すると、読み出し対象のデータの論理アドレスをキーとして、アドレス変換テーブルを検索して、読み出し対象のデータが記憶されている位置の物理アドレスを判別し、その位置からデータを読み出していた。
このような記憶装置では、ＳＲＡＭ等が占める容積の分だけ、記憶装置全体の容積も増大する。このため、このような記憶装置は、ＪＥＩＤＡ／ＰＣＭＣＩＡカード等、低容積が要求される用途に用いる場合には、容積を抑えるための工夫が必要であった。
また、ＳＲＡＭは消費電力が大きく、各種テーブルを格納するためにＳＲＡＭを使用すると、記憶装置全体としての消費電力も増加してしまい、ＪＥＩＤＡ／ＰＣＭＣＩＡカード等、低消費電力が要求される用途に適さなくなってしまうという問題があった。
発明の開示
この発明は上記実状に鑑みてなされたもので、小容積及び低消費電力のブロック消去型記憶装置とそのアクセス方法とを提供することを目的とする。
上記目的を達成するため、この発明の第１の観点にかかる記憶装置は、
物理アドレスが割り当てられた複数のメモリブロックを含む記憶手段（１）と、
前記記憶手段の記憶データをメモリブロック単位で一括して消去する消去手段（１ｅ）と、
データと論理アドレスを入力し、該データの前記記憶手段内の記憶位置を定め、該データを該記憶位置に書き込む書込手段（４Ｘ，４Ｂ，５，２０）と、
から構成され、
前記記憶手段は、前記論理アドレスと前記記憶手段の物理アドレスとの対応関係を表す情報を格納するアドレス変換テーブルを記憶し、
前記書込手段は、前記データを書き込んだ位置の物理アドレスと入力した論理アドレスとの対応付けを表す情報を前記アドレス変換テーブルに追加し、又は前記アドレス変換テーブルを更新する手段（４Ｘ，４Ｂ，５，２０）を備える、
ことを特徴とする。
この構成の記憶装置では、アドレス変換テーブルは、ブロック消去型記憶媒体である記憶手段に記憶されている。このため、前記記憶手段の他にアドレス変換テーブル記憶用のＳＲＡＭ等の記憶媒体を配置する必要がない。従って、比較的小容積で低消費電力のブロック消去型の記憶装置を提供することができる。
前記記憶装置は、
前記アドレス変換テーブルが書き込まれているブロックの物理アドレスを記憶する手段（２０）と、
前記アドレス変換テーブルが格納されているブロックをアクセスし、読み出し対象のデータの論理アドレスに対応する物理アドレスを読み出す物理アドレス読出手段（４Ｘ，４Ｂ，５，２０）と、
前記物理アドレス読出手段により読み出された物理アドレスに格納されているデータを読み出して出力する手段（４Ｘ，４Ｂ，５，２０）と、
から構成される読出手段（４Ｘ，４Ｂ，５，２０）をさらに配置してもよい。
この読出手段により、読み出し対象データの物理アドレスを、記憶手段に格納されたアドレス変換テーブルから判別して、読み出すことができる。
前記記憶手段は、データを記憶していない空きブロックを示す情報を格納する空きブロックテーブルを記憶してもよい。
このような構成とすれば、記憶手段の他に使用するＳＲＡＭなどのメモリの使用量をさらに低減し、小容積化、低消費電力化を進めることができる。
そして、前記空きブロックに前記情報が書き込まれる前に存在した前記空きブロックの情報を格納する前記空きブロックテーブルは除去され、そして、前記空きブロック書込手段により前記空きブロックに前記情報が書き込まれた後に残存する前記空きブロックの情報を格納する前記空きブロックテーブルを前記記憶手段に記憶させるようにすれば、空きブロックテーブルに含まれる空きブロックの情報は更新され、随時最新の空きブロックの情報を得ることができる。
また、前記記憶手段は、例えば、複数チップのフラッシュメモリによって構成されたものとすることができる。この場合、前記アドレス変換テーブル（及び前記空きブロックテーブル）は、いずれかのチップのフラッシュメモリの任意の１つのブロックに記憶すればよい。そして、アドレス変換テーブル及び空きブロックテーブルがどのチップのどのブロックに記憶されているかを示す情報を記憶する手段を設ければよい。
前記記憶手段は、例えば、前記アドレス変換テーブルと前記空きブロックテーブルを１つのブロック内に記憶する。
このような構成とすれば、アドレス変換テーブルと空きブロックテーブルの格納のために使用するブロックを１つに抑え、記憶手段の記憶容量を有効に使用することができる。また、これらのテーブルの記憶位置の管理などが容易になる。
また、この発明の第２の観点にかかる記憶装置は、
物理アドレスが割り当てられた複数のメモリブロックを含む記憶手段（１）と、
前記記憶手段の記憶データをメモリブロック単位で一括して消去する消去手段（１ｅ）と、
書き込み対象のデータと論理アドレスを入力し、該データの前記記憶手段内の記憶位置を定め、該データを該記憶位置に書き込む書込手段（４Ｘ，４Ｂ，５，２０）と、
から構成され、
前記記憶手段は、前記データを記憶していない空きブロックを表す空きブロック情報を記憶しており、
前記書込手段は、前記空きブロック情報が示す空きブロックに前記データを書き込む、
ことを特徴とする。
この構成によれば、空きブロック情報は、ブロック消去型記憶媒体である記憶手段に記憶されている。このため、前記記憶手段の他に空きブロック情報記憶用のＳＲＡＭ等の他の記憶媒体を配置する必要がない。従って、比較的小容積で低消費電力のブロック消去型の記憶装置を提供することができる。
また、前記書込手段は、前記記憶手段に記憶された前記空きブロック情報を、前記書込手段により前記空きブロックに前記データが書き込まれた後に残存する前記空きブロックの情報を表す前記空きブロック情報に更新する手段（１ｅ，４Ｘ，４Ｂ，５，２０）を更に備えるようにすれば、前記空きブロック情報は更新され、随時最新の空きブロックの情報を得ることができる。
前記空きブロック情報は、各空きブロックの一部に記憶され、他の１つの空きブロックを示すように連鎖的に登録された連鎖情報から構成されるものとすることができる。この場合、前記書込手段は、前記連鎖情報に従って、空きブロックを判別し、該空きブロックに前記データを書き込む手段（４Ｘ，４Ｂ，５，２０）を備えるものとすることができる。
この構成によれば、空きブロックテーブルを格納するために１つのブロックを使用する必要がなく、記憶媒体の使用効率が高い。また、空きブロックの連鎖情報に基づいて、書き込み対象のブロックを特定するので、各ブロックの使用頻度を均一化することができる。
前記空きブロック情報を連鎖情報から構成する場合、最初の空きブロックのアドレスを記憶する先頭空きブロック記憶手段（２０）等を配置し、ここに記憶された物理アドレスが付された空きブロックにデータを書き込み、先頭空きブロック記憶手段の内容をデータを書き込んだブロックに登録されている連鎖情報で更新してもよい。
記憶手段をフラッシュメモリ等から構成する場合、記憶領域はデータ領域と冗長領域から構成される。この場合、連鎖情報を前記冗長領域に格納しておくことができる。
このような記憶装置においては、連鎖情報は、空きブロックの前記冗長領域に書き込まれ、前記データは、既に連鎖情報が書き込まれている空きブロックに上書きされる。
このとき、前記データ領域と前記冗長領域は前記記憶領域の中で互いに重複しないように配置されることにより、前記データの上書きによっても前記連鎖情報は破壊されない。
なお、この第２の観点にかかる記憶装置においても、前記記憶手段は、例えば、複数チップのフラッシュメモリによって構成されたものとすることができる。この場合、前記連鎖情報は、次の空きブロックがどのチップのどのブロックに記憶されているかを示す情報によって構成すればよい。
また、この発明の第３の観点に係るアクセス方法は、
ブロック単位でデータの消去が可能で、予めデータが消去された空きブロックにデータの書き込みが可能なブロック消去型のメモリへのアクセス方法であって、
前記メモリに付された物理アドレスとデータの論理アドレスとの対応関係を示すアドレス変換テーブルを前記メモリ自身に記憶させ、
書き込み対象データとその論理アドレスが供給された時は、該論理アドレスに既にデータが書き込まれているか否かを前記アドレス変換テーブルにより判別し、存在すると判別したときは、前記空きブロックを判別して前記データを該空きブロックに書き込むと共に旧データを持つブロックを消去し、存在しないと判別したときは、前記空きブロックを判別して前記データを該空きブロックに書き込み、次に、
前記データが書き込まれた前記ブロックの物理アドレスと前記論理アドレスとの対応を示す情報を前記メモリ内の前記アドレス変換テーブルに追加するか又はその情報を更新し、
読み出し対象データの論理アドレスが供給された時は、前記メモリ内の前記アドレス変換テーブルをアクセスして、該当データが格納された位置の物理アドレスを判別して、該物理アドレスからデータを読み出して出力する、
ことを特徴とする。
また、この発明の第４の観点に係るアクセス方法は、
ブロック単位でデータの消去が可能で、予めデータが消去された空きブロックにデータの書き込みが可能なブロック消去型のメモリへのアクセス方法であって、
前記メモリに、空きブロックを示す空きブロックテーブルを記憶させておき、書き込み対象データが供給された時に、前記メモリ内の空きブロックテーブルに基づいて空きブロックを判別して、判別した空きブロックに該データを書き込む、
ことを特徴とする。
第３及び第４の観点に係るアクセス方法によれば、メモリの一部をアドレス変換テーブルや空きブロックテーブルとして使用でき、これらのテーブルを格納するためのＳＲＡＭ等の他のメモリを配置する必要がなく、小容量化、低消費電力化に寄与する。
また、この発明の第５の観点に係るアクセス方法は、
ブロック単位でデータの消去が可能で、予めデータが消去された空きブロックにデータの書き込みが可能なブロック消去型のメモリへのアクセス方法であって、
前記メモリが備えるブロックに、該メモリの空きブロックを示す空きブロック情報を記憶させ、
書き込み対象データが供給された時に、前記空きブロック情報に基づいて空きブロックを判別し、判別した空きブロックに該データを書き込むと共に、前記空きブロック情報に基づいて空きブロックを新たに判別し、前記空きブロック情報を記憶する前記ブロックの記憶内容を消去すると共に、新たに判別した前記空きブロックに更新された空きブロック情報を書き込む、
ことを特徴とする。
第５の観点に係るアクセス方法によれば、メモリの一部をアドレス変換テーブルや空きブロックテーブルとして使用でき、小容量化、低消費電力化を図り得る上、前記空きブロックの情報が更新されることにより、随時最新の空きブロックの情報を得ることができる。
また、この発明の第６の観点に係るアクセス方法は、
ブロック単位でデータの消去が可能で、予めデータが消去された空きブロックにデータの書き込みが可能なブロック消去型のメモリへのアクセス方法であって、
前記メモリの各空きブロックの一部に、順次他の空きブロックを示す情報からなる空きブロック連鎖情報を格納し、
書き込み対象データが供給された時に、空きブロック連鎖情報により定義される空きブロックの連鎖の先頭の空きブロックを判別し、判別した空きブロックに該データを書き込む、
ことを特徴とする。
第６の観点に係るアクセス方法によれば、メモリの一部を空きブロックテーブルとして使用できる。
また、データが書き込まれるブロックが連鎖情報より定義される連鎖の順となるので、書き込み頻度をメモリ全体で均一化することができる。
【図面の簡単な説明】
図１は、この発明の実施の形態にかかる記憶装置の基本構成を示すブロック図である。
図２は、メモリセルアレイの構成を示す図である。
図３は、記憶領域の論理的構造を示す図である。
図４は、空きブロックテーブルの構成の一例を示す図である。
図５は、アドレス変換テーブルの構成の一例を示す図である。
図６は、データを読み出す処理を示すフローチャートである。
図７は、物理アドレス決定の処理を示すフローチャートである。
図８は、書き込み処理を示すフローチャートである。
図９は、旧データ消去の処理を示すフローチャートである。
図１０は、空きブロックテーブル及びアドレス変換テーブルを更新する処理を示すフローチャートである。
図１１は、第２の実施の形態の記憶装置における空きブロックの連鎖を示す概念図である。
図１２は、第２の実施の形態の記憶装置における、データ書き込み処理のフローチャートである。
図１３は、第２の実施の形態の記憶装置における、空きブロック情報及びアドレス変換テーブルを更新する処理を示すフローチャートである。
発明を実施するための最良の形態
以下、この発明を実施するための最良の形態にかかる記憶装置を説明する。
（第１の実施の形態）
この実施の形態にかかる記憶装置は、アドレス変換テーブル等をフラッシュメモリユニット自身に記憶するものであり、図１に示すように、フラッシュメモリユニット１０と、コントローラ２０とより構成される。
フラッシュメモリユニット１０は、メモリセルアレイ１と、Ｉ／Ｏバッファ２と、Ｘアドレスバッファ３Ｘと、ブロックアドレスバッファ３Ｂと、Ｘアドレスデコーダ４Ｘと、ブロックアドレスデコーダ４Ｂと、制御回路５と、グローバルバッファ６とより構成される。
メモリセルアレイ１は、複数のメモリセルから構成されている。各メモリセルは、例えばＮＡＮＤ型のものであって、１バイトの記憶容量を有する。これらのメモリセルは、論理的には、図２に示すように、縦１６３８４行、横５２８列のマトリクス状に配置されている。従って、メモリセルアレイ１は全体としては８．６５メガバイトの記憶容量を有する。
メモリセルアレイ１は、８個のデータ入出力端Ｔdataと、対応する行のメモリセルに共通に接続された１６３８４個の行制御入力端Ｔrowcontと、すべてのメモリセルに共通の読出制御端Ｔreadcont及び書込制御端Ｔwritecontと、データ消去用の消去制御回路１ｅとを備える。
メモリセルアレイ１の読出制御端Ｔreadcontに制御信号が入力されているとき、行制御入力端Ｔrowcontに制御信号が供給されると、制御信号を供給された行のメモリセルは、その記憶内容を、先頭からメモリセル１個分（すなわち、１バイト）ずつ、５２８回に分けて、データ入出力端Ｔdataに出力する。
一方、書込制御端Ｔwritecontに制御信号が入力されているときは、データ入出力端Ｔdataから入力されるデータを、１バイトずつ５２８回に分けて、先頭のメモリセルから記憶する。
ただし、各メモリセルはＮＡＮＤ型であるため、データの記録は、記憶値を「１」から「０」にする方向にしか行うことができず、いったん記憶値が「０」となったメモリセルは、記憶内容がリセットされるまで、記憶値が「０」の状態を維持する。
図２に示すように、メモリセルのマトリクスの各行は５２８バイトの記憶容量を有するページを構成する。ページには連続的に１から１６３８４までのページアドレスが付与され、各ページに含まれるメモリセルには、連続的に１から５２８までの番地が与えられている。
図２及び図３に示すように、各ページは、先頭から１６ページ単位で１つのブロックを構成する。各ブロックは８キロバイトの記憶容量を有し、記憶領域全体は、１０２４個のブロックから構成されている。
また、各ページは、図３に示すように、先頭から５１２バイトの領域を占めるデータ領域と、末尾１６バイトを占める冗長部とから構成される。データ領域には、本来のデータが格納され、冗長部にはエラーチェックコード等が格納される。
そして、データ消去用の消去制御回路１ｅに、特定のブロックのデータを消去するよう指示する制御信号が入力されると、当該ブロックに含まれるすべてのメモリセルの記憶内容がリセットされる（すなわち、各メモリセルの記憶値が「１」になる）。
メモリセルアレイ１には、このメモリセルアレイ１にアクセスするための空きブロックテーブル及びアドレス変換テーブルが格納されている。
空きブロックテーブルは、メモリセルアレイ１の任意のブロックの先頭ページに記憶されており、メモリセルアレイ１の各ブロックのいずれが空きブロック（すなわち、リセットされた状態にあり、データ「０」を記憶したメモリセルを含んでいないブロック）であるかを表す情報を格納する。空きブロックテーブルが格納されているブロックの情報は、後述するように、制御回路５に記憶される。
メモリセルアレイ１のブロックの総数が１０２４個であるときの、空きブロックテーブルの構造の一例を図４に示す。この空きブロックテーブルは、特定のブロックの先頭の１２８バイトのメモリセル（すなわち、先頭から１０２４ビット）から構成され、先頭のビットから順に、ブロック１からブロック１０２４に１対１に対応し、対応するブロックが空きブロックであるとき「１」、空きブロックでないとき「０」を格納する。
アドレス変換テーブルは、空きブロックテーブルが格納されているブロックの第２ページ以降に記憶され、メモリセルアレイ１の各ブロックに割り当てられている論理アドレスを表す情報を格納する。
論理アドレスは、この記憶装置が後述する動作により読み書きされるときに、後述する外部のコンピュータ１１が備えるＣＰＵ（中央処理ユニット）１２や、コントローラ２０等により、データ読み書きの単位として認識される単位である。
論理アドレスが割り当てられている領域の総量は、メモリセルアレイ１の記憶容量より小さい所定の値、例えば１６０００ページ分であり、各論理アドレスの占める記憶領域は、例えば、１ページの占める記憶領域に一致する。
論理アドレスは、具体的には、例えば、メモリセルアレイ１の記憶容量より小さい所定の値に相当する大きさ（例えば１６０００ページ分）の仮想の記憶領域を５１２バイト毎の区画に分け、各区画に０から始まる連番を付した場合の当該連番、すなわちＬＢＡ（Logic Block Address）から構成されている。
アドレス変換テーブルの構造の一例を図５に示す。アドレス変換テーブルは複数のレコードからなり、各レコードの先頭には論理アドレスが格納され、続いて、該論理アドレスに対応付けられている領域の先頭のページが位置するブロックの番号（ブロックアドレス）と、その先頭のページの番号とが格納されている。
Ｉ／Ｏバッファ２は、図１に示すように、グローバルバッファ６と、メモリセルアレイ１のデータ入出力端Ｔdataと、制御回路５とに接続されている。
Ｉ／Ｏバッファ２は、制御回路５の指示に従い、グローバルバッファ６が記憶するデータをメモリセルアレイ１のデータ入出力端Ｔdataに１バイトずつ出力する動作と、データ入出力端Ｔdataから出力されるデータをグローバルバッファ６に１バイトずつ出力する動作とを行う。
Ｘアドレスバッファ３Ｘは、グローバルバッファ６より、メモリセルアレイ１の行アドレス（すなわち、ページアドレス）を示す行アドレス信号を入力して、Ｘアドレスデコーダ４Ｘに出力する。
Ｘアドレスデコーダ４Ｘは、行アドレス信号が示す行、又は、制御回路５が指示する行の行制御入力端Ｔrowcontに、アクティブレベルの制御信号を供給する。
ブロックアドレスバッファ３Ｂは、グローバルバッファ６より、メモリセルアレイ１の各ブロックのアドレスを示すブロックアドレス信号を入力して、ブロックアドレスデコーダ４Ｂに出力する。
ブロックアドレスデコーダ４Ｂは、ブロックアドレス信号が示すブロック、又は、制御回路５が指示するブロックのデータを消去するよう指示する信号を、消去制御回路１ｅに供給する。
制御回路５は、グローバルバッファ６よりコマンドを入力して解析し、解析結果に従って、Ｘアドレスバッファ３Ｘ、Ｘアドレスデコーダ４Ｘ、ブロックアドレスデコーダ４Ｂ及びＩ／Ｏバッファ２を制御する。
また、制御回路５は、コントローラ２０より、書込信号Ｓwrite及びラッチ信号Ｓlatchの供給を受ける。そして、これらの信号に従って、メモリセルアレイ１及びグローバルバッファ６を後述のように制御する。また、制御回路５は、コントローラ２０に、後述するタイミングでビジー信号Ｓbusy及びレディ信号Ｓreadyを供給する。
また、制御回路５は、グローバルバッファ６に格納されたデータが後述するセットアップコマンドや消去コマンド等の所定のコマンドを表すとき、そのコマンドが指示する処理を、後述するように実行する。
なお、ビジー信号Ｓbusy及びレディ信号Ｓreadyとは同一の信号線を介して伝送されるようにしてよい。従って、例えば、制御回路５が所定の信号線に２値論理値”１”を表す電圧を印加しているときは、制御回路５がビジー信号Ｓbusyを供給しているものとし、２値論理値”０”を表す電圧を印加しているときは、レディ信号Ｓreadyを供給しているものとしてもよい。
グローバルバッファ６は、Ｉ／Ｏバッファ２と、制御回路５と、コントローラ２０とに接続されている。そして、制御回路５から出力される制御信号に従い、バスライン１３上の信号及びＩ／Ｏバッファ２の記憶内容のうち、当該制御信号が供給された時点で自己に供給されているものを記憶し、記憶した内容を、Ｘアドレスバッファ３Ｘ又は制御回路５に出力する。
コントローラ２０は、ＣＰＵ等からなり、フラッシュメモリユニット１０の制御回路５に接続されており、また、バスライン１３を介して、フラッシュメモリユニット１０のグローバルバッファ６及びコンピュータ１１のＣＰＵ１２に接続されている。ただし、コントローラ２０を構成するＣＰＵは、コンピュータ１１のＣＰＵ１２と同一のものであってもよい。
コントローラ２０は、外部のコンピュータ１１が備えるＣＰＵ１２等より供給されるコマンドに従い、後述するように、制御回路５に書込信号Ｓwriteやラッチ信号Ｓlatchを供給し、グローバルバッファ６には、物理アドレス、書き込み対象のデータ、コマンド等を供給して、フラッシュメモリユニット１０を制御する。
また、コントローラ２０は、アドレス変換テーブル及び空きブロックテーブルの位置と、最後に書き込みがなされたブロックの位置とを表すデータを記憶し、ＣＰＵ１２から供給されたコマンドに従った後述の処理を実行する際に、自己が記憶しているデータを参照する。また、コントローラ２０は、ＣＰＵ１２から、読み出す対象のデータをバイト単位で表した量（すなわち、バイト数）を供給されると、これを記憶し、後述する処理において参照する。
（第１の実施の形態の動作）
次に、この記憶装置にデータを書き込む処理を、図６〜図１０を参照して説明する。
図６は、データを読み出す処理を示すフローチャートである。
図７は、物理アドレス決定の処理を示すフローチャートである。
図８は、書き込み処理を示すフローチャートである。
図９は、旧データ消去の処理を示すフローチャートである。
図１０は、空きブロックテーブル及びアドレス変換テーブルを更新する処理を示すフローチャートである。
（データ読み出し）
コンピュータ１１内のＣＰＵ１２は、この記憶装置からデータを読み出す場合、図６に示す、データ読み出しの処理を実行する。
処理が開始されると、ＣＰＵ１２は、読み出す対象のデータが格納されている論理アドレスをバスライン１３上に出力し、コントローラ２０に、データの読み出しを指示するコマンドと、読み出すデータが格納されている記憶領域のページ数とを供給する（図６、ステップＳ１０１）。
コントローラ２０は、ＣＰＵ１２からのコマンドに応答し、バスライン１３を介して供給された論理アドレス及びページ数を取得し、両者を記憶する（ステップＳ１０２）。
そして、コントローラ２０は、アドレス変換テーブルの先頭ページの物理アドレスをグローバルバッファ６に供給し、制御回路５にラッチ信号Ｓlatchを送出して、制御回路５からレディ信号Ｓreadyが供給されるのを待機する（ステップＳ１０３）。
制御回路５は、コントローラ２０からのラッチ信号Ｓlatchに応答し、コントローラ２０へのビジー信号Ｓbusyの供給を開始し、コントローラ２０が供給している物理アドレスをラッチする指示を、グローバルバッファ６に送る。この指示に応答し、グローバルバッファ６はコントローラ２０が供給している物理アドレスをラッチする（ステップＳ１０４）。グローバルバッファ６にラッチされた物理アドレスのうち、ブロックアドレスに当たる部分はブロックアドレスバッファ３Ｂを介してブロックアドレスデコーダ４Ｂに供給され、ページアドレスに当たる部分はＸアドレスバッファ３Ｘを介してＸアドレスデコーダ４Ｘに供給される。
制御回路５は、アドレス変換テーブルの読み出しを行うため、グローバルバッファ６よりページアドレスを供給されたＸアドレスデコーダ４Ｘに、当該ページアドレスが示すページを選択するよう指示する。
Ｘアドレスデコーダ４Ｘは、制御回路５からの指示に応答して、アドレス変換テーブルが格納されているページの行制御入力端Ｔrowcontにアクティブレベルの制御信号を出力する。これにより、アドレス変換テーブルのうち、コントローラ２０が指示するページが選択される。
次に、制御回路５は、メモリセルアレイ１の読出制御端Ｔreadcontにデータ読み出しの指示を送り、ビジー信号Ｓbusyの供給を停止して、コントローラ２０にレディ信号Ｓreadyを供給する。一方、メモリセルアレイ１は、制御回路５より送られた指示に応答し、アドレス変換テーブルのある当該ページの記憶内容を、Ｉ／Ｏバッファ２及びグローバルバッファ６を介してコントローラ２０に１バイトずつ順次出力する。
一方、コントローラ２０は、グローバルバッファ６から供給される情報を順次読み取ることにより、当該ページに記憶されている各論理アドレスと、各論理アドレスに対応付けられた物理アドレスとを読み取る（ステップＳ１０５）。
そして、コントローラ２０は、アドレス変換テーブルから読み出した論理アドレスの中に、ステップＳ１０２でＣＰＵ１２から取得した論理アドレスと一致するものがあるか否かを判別する（ステップＳ１０６）。
ステップＳ１０６において、一致する論理アドレスがないと判別したとき、コントローラ２０は、グローバルバッファ６に、アドレス変換テーブルの次のページの物理アドレスを供給し、制御回路５にラッチ信号Ｓlatchを送出し（ステップＳ１０７）、この記憶装置は、処理をステップＳ１０４に戻す。
一方、ステップＳ１０６において、一致する論理アドレスがあると判別したときは、処理をＳ１０８へ移す。
ステップＳ１０８において、コントローラ２０は、ステップＳ１０６で一致すると判別した論理アドレスが示す物理アドレス（すなわち、読み出す対象のデータのあるページのうち先頭のページの物理アドレス）の値をグローバルバッファ６に供給し、制御回路５にラッチ信号Ｓlatchを送出する。
すると、フラッシュメモリユニット１０は、コントローラ２０がステップＳ１０３で供給したラッチ信号Ｓlatchに応答した場合の処理と実質的に同一の処理を行い、コントローラ２０がグローバルバッファ６に供給した物理アドレスの記憶内容（すなわち、読み出す対象のデータのうち未だ読み出されていない部分の先頭のページの内容）を、グローバルバッファ６を介してコントローラ２０に１バイトずつ順次供給する（ステップＳ１０９）。
一方、コントローラ２０は、ステップＳ１０９でグローバルバッファ６が供給する情報を順次読み取ることにより、読み出す対象のデータを読み取り、読み取ったデータを、バスライン１３を介してＣＰＵ１２に供給する（ステップＳ１１０）。
そして、コントローラ２０は、ステップＳ１０８の処理を開始して以降に読み出したページ数が、ＣＰＵ１２から供給されてステップＳ１０２で自己が記憶したページ数に達しているか否かを判別する（ステップＳ１１１）。
そして、達していないと判別したとき、コントローラ２０は、制御回路５がビジー信号Ｓbusyの供給を停止したタイミングで、読み出す対象のデータのある次の物理アドレスをグローバルバッファ６に供給し、制御回路５にラッチ信号Ｓlatchを送出する（ステップＳ１１２）。そしてこの記憶装置は、処理をステップＳ１０９に戻す。
一方、達していると判別すると、コントローラ２０は、例えば、バスライン１３を介してＣＰＵ１２に終了コードを送出したり、図示しない制御信号をＣＰＵ１２に出力することにより、ＣＰＵ１２に読み出しの終了を通知する（ステップＳ１１３）。
ＣＰＵ１２は、読み出しの終了を検知すると（ステップＳ１１４）、データ読み出しの処理を終了する。
ステップＳ１０１〜Ｓ１１４の処理により、メモリセルアレイ１自体に格納されたアドレス変換テーブルを用いて、論理アドレスに対応する物理アドレスの位置が検索され、その位置にあるデータが順次読み出される。
読み出し対象の論理アドレスが複数あるときは、ステップＳ１０１〜Ｓ１１４の処理を、読み出し対象の論理アドレスの数だけ繰り返して行う。
（データ書き込み：新たな物理アドレスの決定）
メモリセルアレイ１にデータを書き込む場合、この記憶装置はまず、図７に示す物理アドレス決定の処理を行い、データ書き込み対象の物理アドレスを決定する処理を実行する。
ＣＰＵ１２は、例えばまず、書き込み対象のデータの大きさから、１ページの記憶容量を５１２バイトとして、書き込みに要するページ数を算出し、書き込みの対象とする論理アドレスを決定する。
そして、ＣＰＵ１２は、書き込み対象の論理アドレスのうち最も番号が若いものをバスライン１３上に出力し、コントローラ２０に、データの書き込みを指示するコマンドを送る（ステップＳ２０１）。
コントローラ２０は、ステップＳ２０１でＣＰＵ１２から送られたコマンドに応答して、図６の処理におけるステップＳ１０３〜Ｓ１０７の処理と実質的に同一の処理を行う（ステップＳ２０２）。
すなわち、フラッシュメモリユニット１０から、アドレス変換テーブルの内容を読み出し、読み出した内容のうち、ステップＳ２０１でＣＰＵ１２から取得した論理アドレスと一致するものがあるか否かを順次判別することにより、ＣＰＵ１２から取得した当該論理アドレスに対応付けられている物理アドレスを特定する。
ステップＳ２０２で、物理アドレスが特定されると、コントローラ２０は、特定された物理アドレスを記憶する（ステップＳ２０３）。そして、空きブロックテーブルを読み出すため、グローバルバッファ６に空きブロックテーブルの物理アドレスを供給し、制御回路５にラッチ信号Ｓlatchを送る（ステップＳ２０４）。
制御回路５は、ステップＳ１０３でラッチ信号Ｓlatchを供給された場合と同様にして、Ｘアドレスデコーダ４Ｘに、空きブロックテーブルのあるページを選択させる。
そして、制御回路５は、ページが選択されると、メモリセルアレイ１の読出制御端Ｔreadcontにデータ読み出しの指示を送る。メモリセルアレイ１は、指示を受けると、空きブロックテーブルのある当該ページの記憶内容を、Ｉ／Ｏバッファ２及びグローバルバッファ６を介して、コントローラ２０に１バイトずつ順次出力する。
そして、コントローラ２０は、グローバルバッファ６から供給される情報を順次読み取ることにより、空きブロックテーブルを取得する（ステップＳ２０５）。
次に、コントローラ２０は、取得した空きブロックテーブルの内容に基づき、任意の空きブロックに属する物理アドレスを特定し（ステップＳ２０６）、以後、ステップＳ２０６で特定した物理アドレスを、書き込み対象の論理アドレスが示す物理アドレスであるものとして扱うことと決定する。
ただし、ステップＳ２０６においては、図７の処理を開始して以降、既にステップＳ２０６で特定された物理アドレスを再度特定しないようにするものとする。
また、ステップＳ２０６においては、図７の処理を開始して以降にステップＳ２０６で特定された物理アドレスが属するブロックは、当該物理アドレスにデータが書き込まれた後でも、空きブロックであるものとして扱う。
また、データの書き込み対象の物理アドレスとして、論理アドレスが割り当てられていない物理アドレスが選択されてもよい。
（データ書き込み：フラッシュメモリへの書き込み）
ステップＳ２０６の処理を終えると、コントローラ２０は、図８に示す書き込み処理を実行する。
すなわち、コントローラ２０は、ステップＳ２０６の処理により物理アドレスを特定すると、グローバルバッファ６に特定した物理アドレスを供給し、制御回路５にラッチ信号Ｓlatchを送る（ステップＳ２１１）。
制御回路５は、ラッチ信号Ｓlatchに応答して、ビジー信号Ｓbusyの供給を停止し、コントローラ２０へのレディ信号Ｓreadyの供給を開始する。そして、Ｘアドレスデコーダ４Ｘに、ステップＳ２０６で特定された物理アドレスを選択させる。
一方、コントローラ２０は、レディ信号Ｓreadyに応答して、ＣＰＵ１２に書き込み対象のデータの供給を要求し（ステップＳ２１２）、ＣＰＵ１２は、この要求に応答して、書き込み対象のデータのうち先頭の１バイト分を、バスライン１３を介してコントローラ２０に供給する。
そして、コントローラ２０は、バスライン１３を介してＣＰＵ１２から供給された書き込み対象のデータを記憶してグローバルバッファ６に供給し、制御回路５に書込信号Ｓwriteを送る（ステップＳ２１３）。
制御回路５は、書込信号Ｓwriteに応答して、グローバルバッファ６に供給された書き込み対象のデータをラッチするようグローバルバッファ６に指示し、レディ信号Ｓreadyの供給を停止して、コントローラ２０へのビジー信号Ｓbusyの供給を再開する。グローバルバッファ６は、バスライン１３上のデータをラッチして、Ｉ／Ｏバッファ２に格納する。
次に、制御回路５は、Ｉ／Ｏバッファ２に、Ｉ／Ｏバッファ２が格納しているデータをデータ入出力端Ｔdataに出力するよう指示する。指示に応答し、Ｉ／Ｏバッファ２は、グローバルバッファ６により自己に格納されたデータを、データ入出力端Ｔdataに出力する。
次に、制御回路５は、メモリセルアレイ１に、データ入出力端Ｔdataに現在入力されているデータを記憶させるために、書込制御端Ｔwritecontにアクティブレベルの書込制御信号を出力する。書込制御信号に応答して、メモリセルアレイ１は、データ入出力端Ｔdataに入力されているデータを、現在選択されているページの先頭のメモリセルに記録する。
メモリセルアレイ１の書込制御端Ｔwritecontにアクティブレベルの書込制御信号を出力した後、制御回路５は、ビジー信号Ｓbusyの供給を停止、コントローラ２０へのレディ信号Ｓreadyの供給を再開する。コントローラ２０は、レディ信号Ｓreadyの供給の再開を検知すると、ステップＳ２１４に処理を移す。
ステップＳ２１４において、コントローラ２０は、後続データを要求する信号を送った後、バイトカウンタの値を参照して、現在選択中のページに５１２バイトのデータが書き込まれたか否かを判別する。
そして、５１２バイト書き込まれたと判別すると、コントローラ２０は、ＣＰＵ１２に、次の論理アドレスを送ることを要求する（ステップＳ２１５）。
そして、ＣＰＵ１２が、次の論理アドレスをバスライン１３上に送出し、コントローラ２０がその論理アドレスを取得すると、コントローラ２０は、その論理アドレスをステップＳ２０１で取得したものとして扱うこととし、処理を図７の処理におけるステップＳ２０２に戻す。
一方、５１２バイト書き込まれていないと判別すると、コントローラ２０は、ＣＰＵ１２に、書き込み対象の後続データを要求する信号を送る（ステップＳ２１６）。
ＣＰＵ１２は、この信号に応答して、書き込み対象の後続のデータがあるか否かを判別し、後続のデータがないと判別すると、バスライン１３に書込終了を表す制御コードを供給する。一方、後続のデータがあると判別すると、ＣＰＵ１２は、バスライン１３に後続の１バイトのデータを供給する。
コントローラ２０は、ステップＳ２１６で後続データを要求する信号を送った後、ＣＰＵ１２から、後続のデータ又は書き込み終了を表す制御コードを供給されると、供給されたものが、書き込み終了を表す制御コードであるか否かを判別する（ステップＳ２１７）。
そして、当該制御コードではないと判別すると、コントローラ２０は処理をステップＳ２１３に戻し、当該制御コードであると判別すると、図９に示す旧データ消去の処理に移る。
なお、ＣＰＵ１２が、書き込み対象のデータがないことをコントローラ２０に通知する手法は任意であり、制御コードをバスライン１３を介して供給する手法に限らず、例えば他の任意の制御線を介して、書き込み対象のデータがないことを表す制御信号をコントローラに送出するようにしてもよい。
（データ書き込み：旧データの消去）
書込終了の制御コードを取得したコントローラ２０は、図９に示す旧データ消去の処理を実行する。
図９の処理を開始すると、コントローラ２０は、まず、既に読み出したアドレス変換テーブルの内容に基づき、ステップＳ２０３で自己が記憶した物理アドレス（すなわち、ステップＳ２０６で新たに物理アドレスが対応付けられるまで書き込み対象の論理アドレスに対応付けられていた古い物理アドレス）と同一のブロックに属する物理アドレスを特定する（ステップＳ２２１）。
そして、この記憶装置は、ステップＳ２２１で特定した物理アドレスの各々を、読み出す対象のデータの先頭ページを表すものとし、これらの物理アドレスの各々につき、図６のステップＳ１０８〜Ｓ１１４の処理に従ってデータ読み出しを行う（ステップＳ２２２）。そして、コントローラ２０は更に、ステップＳ２０４〜Ｓ２０６の処理と実質的に同一の処理を行い、ステップＳ２２２で読み出したデータを格納する物理アドレスを特定する（ステップＳ２２３）。
ただし、ステップＳ２２３においては、データを格納する物理アドレスとして、読み出したデータが格納されていたブロックと同一のブロックに属する物理アドレスを特定しないようにする。
次に、この記憶装置は、ステップＳ２２２で読み出したデータを、ステップＳ２２３で特定した物理アドレスに、図８の処理に従って書き込む（ステップＳ２２４）。
次に、コントローラ２０は、グローバルバッファ６に、記憶内容を消去する対象のブロックの指定を行うための所定のセットアップコマンドを供給して、制御回路５にラッチ信号Ｓlatchを送る（ステップＳ２２５）。
制御回路５は、ステップＳ２２５でラッチ信号Ｓlatchが供給されたとき、グローバルバッファ６に供給されたデータがセットアップコマンドであることを検知して、次にグローバルバッファ６に供給されるデータを、消去する対象のブロックのブロックアドレスとして扱うことを決定する。
次に、コントローラ２０は、グローバルバッファ６に、記憶内容を消去する対象のブロック（すなわち、ステップＳ２０３で自己が記憶した物理アドレスが属するブロック）のブロックアドレスを供給して、制御回路５にラッチ信号Ｓlatchを送る（ステップＳ２２６）。
制御回路５は、ステップＳ２２６で供給されたラッチ信号Ｓlatchに応答して、グローバルバッファ６に指示を送り、コントローラ２０が供給しているブロックアドレスを、グローバルバッファ６にラッチさせる。グローバルバッファ６にラッチされたブロックアドレスはブロックアドレスバッファ３Ｂを介してブロックアドレスデコーダ４Ｂに供給され、これにより、記憶内容を消去する対象のブロックが選択される。
次に、コントローラ２０は、グローバルバッファ６に、記憶内容を消去するための所定の消去コマンドを供給して、制御回路５にラッチ信号Ｓlatchを送る（ステップＳ２２７）。
制御回路５は、ステップＳ２２７でラッチ信号Ｓlatchが供給されたとき、グローバルバッファ６に供給されたデータが消去コマンドであることを検知して、ブロックアドレスデコーダ４Ｂに、選択されているブロックの記憶内容を消去するよう指示する。
指示を受けたブロックアドレスデコーダ４Ｂは、消去の対象として選択されているブロックのデータを消去するよう指示する信号を、消去制御回路１ｅに送る。これにより、当該ブロックの記録内容は消去される。
ステップＳ２２１〜Ｓ２２７の処理により、メモリセルアレイ１に記録されたデータは消去され、消去されたデータと同じブロックに記憶されていたデータは、他のページに退避される。
なお、旧データ消去の処理は、書き込み処理の後に行われるものである必要はない。従って、例えば、データを書き込む対象の物理アドレスを決定した後、その物理アドレスに新たに対応付けられた論理アドレスに対応付けられていた古い物理アドレスがあるブロックの記録内容をまず消去し、次いで、データを書き込む対象の物理アドレスに新たなデータを書き込むようにしてもよい。
また、データの消去が行われる場面は、上述のステップＳ２２１〜Ｓ２２７の場合のような、データの書き込みの処理の一環としてなされる場面に限られない。
従って、データの消去は、新たなデータの書き込みを伴わずに行われてもよい。
具体的には、例えばまずＣＰＵ１２が、データの消去を指示するコマンドをコントローラ２０に送り、消去対象の論理アドレスをバスライン１３を介してコントローラ２０に供給する。
コントローラ２０は、コマンドに応答して、図７の処理のステップＳ２０１〜Ｓ２０３における処理と同様の処理を行い、消去対象の論理アドレスが示す物理アドレス（つまり、消去対象の物理アドレス）を特定する。
そして、コントローラ２０は、特定された消去対象の物理アドレスを、ステップＳ２０３で特定された物理アドレスであるものとして扱い、上述したステップＳ２２１〜Ｓ２２７の処理を行う。これにより、消去対象の物理アドレスが属するブロックの記録内容が消去される。
なお、上述のデータ書き込み処理において、コントローラ２０は、新たに書き込み対象の物理アドレスを指定する際、データが、最後にデータが書き込まれた空きブロック以降のブロックに順次書き込まれ、後続のブロックに空きブロックがないときは、先頭のブロック以降の空きブロックに順次書き込まれるように指定してもよい。
これにより、空きブロックへの書き込みはサイクリックになされるので、特定のブロックのみのデータ更新の頻度が高くなることがなく、従って特定のブロックの性能が集中的に劣化する事態が防止される。
（空きブロックテーブル及びアドレス変換テーブル更新）
以上の処理により、データの消去やデータの書き込みが完了すると、コントローラ２０は、空きブロックテーブル及びアドレス変換テーブルを更新するため、図１０に示す処理を開始する。
図１０に示す処理において、まず、コントローラ２０は、空きブロックテーブルを更新するため、図７のステップＳ２０１〜２０５の処理と実質的に同一の処理を行って、フラッシュメモリユニット１０から空きブロックテーブルを取得し、その空きブロックテーブルを一時記憶する（ステップＳ３０１）。
次に、コントローラ２０は、一時記憶した空きブロックテーブルの内容に基づき、新たに空きブロックテーブル及びアドレス変換テーブルを書き込むための空きブロックを１個特定し、そのブロックの先頭のページを記憶する（ステップＳ３０２）。
そして、コントローラ２０は、一時記憶した空きブロックテーブルのうち、データの書き込みがなされた空きブロック及びステップＳ３０２で特定された空きブロックを示すビットや、ステップＳ２０６及びＳ２２３で特定された物理アドレスが属するブロックを示すビットを、「１」から「０」に変換する。また、コントローラ２０は、空きブロックテーブル及びアドレス変換テーブルが現在あるブロックを表すビットや、ステップＳ２２７で記録内容を消去されたブロックを示すビットを、「０」から「１」に変換する（ステップＳ３０３）。
次に、コントローラ２０は、ステップＳ３０２で特定した空きブロックの先頭ページの物理アドレスをグローバルバッファ６に供給し、制御回路５にラッチ信号Ｓlatchを送る（ステップＳ３０４）。
制御回路５は、ラッチ信号Ｓlatchに応答して、ビジー信号Ｓbusyの供給を停止し、コントローラ２０へのレディ信号Ｓreadyの供給を開始する。そして、Ｘアドレスデコーダ４Ｘに、コントローラ２０からグローバルバッファ６に供給された物理アドレスを選択させる。
一方、コントローラ２０は、レディ信号Ｓreadyに応答して、ステップＳ３０３で変換済みの空きブロックテーブルのうち先頭の１バイト分をグローバルバッファ６に供給し（ステップＳ３０５）、制御回路５に書込信号Ｓwriteを送る（ステップＳ３０６）。
制御回路５は、書込信号Ｓwriteに応答して、コントローラ２０からグローバルバッファ６に供給されたデータをグローバルバッファ６にラッチさせ、レディ信号Ｓreadyの供給を停止し、コントローラ２０へのビジー信号Ｓbusyの供給を再開する。グローバルバッファ６は、バスライン１３上のデータをラッチして、Ｉ／Ｏバッファ２に格納する。
次に、制御回路５は、Ｉ／Ｏバッファ２に、Ｉ／Ｏバッファ２が格納しているデータをデータ入出力端Ｔdataに供給させ、書込制御端Ｔwritecontにアクティブレベルの書込制御信号を供給して、データ入出力端Ｔdataに供給されているデータを、現在選択されているページの先頭のメモリセルに記録させる。
そして、制御回路５は、ビジー信号Ｓbusyの供給を停止し、コントローラ２０へのレディ信号Ｓreadyの供給を再開する。
コントローラ２０は、レディ信号Ｓreadyの供給の再開を検知すると、自己が一時記憶する空きブロックテーブルのうち未だフラッシュメモリユニット１０に供給していない部分が残っているか否かを判別する（ステップＳ３０７）。
そして、残っていると判別すると、コントローラ２０は、自己が一時記憶する空きブロックテーブルの後続の１バイトをグローバルバッファ６に供給して（ステップＳ３０８）、処理をステップＳ３０６に移す。
一方、残っていないと判別すると、コントローラ２０は、アドレス変換テーブルを更新するため、アドレス変換テーブルの先頭ページの物理アドレスをグローバルバッファ６に供給し、制御回路５にラッチ信号Ｓlatchを供給して、制御回路５からレディ信号Ｓreadyが供給されるのを待機する（ステップＳ３０９）。
すると、フラッシュメモリユニット１０は、ステップＳ１０３でラッチ信号を供給された場合と同様にして、ビジー信号Ｓbusyの供給を停止して、コントローラ２０にレディ信号Ｓreadyを供給し、アドレス変換テーブルのうち、コントローラ２０が指示するページの記憶内容を、コントローラ２０に供給する。
一方、コントローラ２０は、ステップＳ１０５と同様にして、フラッシュメモリユニット１０から、自己が供給した物理アドレスにあたるページに記憶されている各論理アドレスと、各論理アドレスに対応付けられた物理アドレスとを読み取って一時記憶する（ステップＳ３１０）。
次に、コントローラ２０は、一時記憶した各論理アドレスの中に、物理アドレスの割り当てを変更されるべき対象として自らが記憶している論理アドレスと一致するものがあるか否かを判別する（ステップＳ３１１）。
一致するものがないと判別したとき、コントローラ２０は、処理をステップＳ３１３へ移す。一致するものがあると判別したとき、コントローラ２０は、自己が一時記憶している物理アドレスのうち、一致すると判別した論理アドレスに対応付けられているものを、その論理アドレスに新たに対応付けられるべき物理アドレスへと変換し（ステップＳ３１２）、処理をステップＳ３１３に移す。
例えば、データ書き込みの対象としてＣＰＵ１２がコントローラ２０に供給した論理アドレスは、ステップＳ３１１において、物理アドレスの割り当てを変更されるべき対象としてコントローラ２０が記憶する論理アドレスと一致すると判別される。そして、ステップＳ３１２で、当該論理アドレスが示す物理アドレスは、ステップＳ２０２で特定された古い物理アドレスから、ステップＳ２０６で特定された新たな物理アドレスへと変換される。
次に、この記憶装置は、ステップＳ３０１〜Ｓ３０８の処理と実質的に同一の処理を行うことにより、メモリセルアレイ１のうち、図１０の処理を開始して以降で最新の書き込みがなされたページの次のページに、アドレス変換テーブルのうち自己が一時記憶する１ページ分の部分を書き込む（ステップＳ３１３）。
書き込むが完了すると、コントローラ２０は、ステップＳ３１３で書き込んだページの数が、アドレス変換テーブルの総ページ数に等しいか否かを判定することにより、アドレス変換テーブルの書き込みを完了したか否かを判別する（ステップＳ３１４）。
そして、完了したと判別したときは処理をステップＳ３１６へ移す。完了していないと判別したときは、グローバルバッファ６に、アドレス変換テーブルの次のページの物理アドレスを供給し、制御回路５にラッチ信号Ｓlatchを送出して（ステップＳ３１５）、処理をステップＳ３１０へ戻す。
ステップＳ３１６において、コントローラ２０は、更新後の空きブロックテーブル及びアドレス変換テーブルの位置を記憶する。
そして、この記憶装置は、上述したステップＳ２２１〜Ｓ２２７と同様の処理に従って、更新前の空きブロックテーブル及びアドレス変換テーブルがある論理アドレスの記憶内容を消去する（ステップＳ３１７）。
なお、この記憶装置では、データの書き込み順にそのデータの論理アドレスと物理アドレスとの対応関係をアドレス変換テーブルに書き込んでいた。そして、データの読み出し時には、アドレス変換テーブルを順次調べて論理アドレスと物理アドレスとの対応関係を読み出していた。これに対し、論理アドレスと物理アドレスとの対応関係の読み出しに次のような高速化手法を用いてもよい。
例えば、コントローラ２０は、データの書き込み時にＣＰＵ１２から送られた論理アドレスから所定のハッシュ関数を使用して論理アドレスと物理アドレスとの対応関係のアドレス変換テーブル内での記憶位置を求め、求めた記憶位置に論理アドレスと物理アドレスとの対応関係を記憶するように、フラッシュメモリユニット１０を制御してもよい。そして、コントローラ２０は、データの読み出し時にも同じハッシュ関数を使用してＣＰＵ１２から送られた論理アドレスから論理アドレスと物理アドレスとの対応関係の記憶位置を求め、フラッシュメモリユニット１０のうち、自己が求めた記憶位置から物理アドレスを読み出せばよい。
この場合、ＣＰＵ１２から送られた論理アドレスから求めた記憶位置の衝突が起こる場合が生じるが、このときは求めた記憶位置の次の記憶位置に論理アドレスと物理アドレスとの対応関係を記憶しても、衝突したものを記憶する領域を特別に設けてもよい。
以上説明したように、この記憶装置では、メモリセルアレイ１自身にアドレス変換テーブルと空きブロックテーブルを格納し、且つ、これらのテーブルを用いてデータの読み出し及び書き込みが可能となる。
なお、各ブロックの大きさは上述の大きさに限られない。例えば、各ブロックは１６ページから構成される必要はなく、例えば、各ページの大きさの整数倍であればよい。
また、この記憶装置が、例えばＪＥＩＤＡ／ＰＣＭＣＩＡインターフェースを備えたフラッシュメモリである場合、各ページの大きさは、コンピュータ１１上で実行されるＯＳ（オペレーティングシステム）により決定されるのが一般であるが、必ずしもＯＳにより決定される必要はない。
また各ブロックの大きさは、この記憶装置に固有の値であるのが一般的であるが、この記憶装置における各ブロックの大きさは、外部からの制御により指定できるものであってもよい。
（第２の実施の形態）
第１の実施の形態の記憶装置では、空きブロックの位置を表す情報が特定の領域に集中して格納されていた。しかし、空きブロックの位置を表す情報は集中して保存される必要はなく、例えば、各空きブロックに、他の空きブロックの位置を表す情報を順次格納することにより、空きブロックを連鎖させる形態をとって空きブロックの管理を行うことができる。
以下、そのような連鎖した空きブロックを備える第２の実施の形態の記憶装置及びその空きブロックの管理の処理を、図１１〜図１３を参照して説明する。
この実施の形態の記憶装置の基本構成は、第１の実施の形態の記憶装置の基本構成と実質的に同一である。ただし、この実施の形態では、アドレス変換テーブルは、任意のブロックの先頭領域に格納されている。
また、各空きブロックの冗長部の所定位置には、図１１に示すように、その空きブロックよりも、論理的に後ろにある空きブロックのうちの最も近い空きブロックの番号を示す空きブロック情報が記憶されている。
この空きブロック情報により定義される空きブロックの連鎖は、物理的な空きブロックの配置とは、異なった順番で連鎖されている。
また、制御回路５は、空きブロックの連鎖のうちの最初の空きブロックの空きブロック番号を記憶している。
この実施の形態の記憶装置では、上述のように、データ領域と冗長部が各ページの中で互いに重複しないように配置されている。
このため、既に空きブロック情報が書き込まれている空きブロックにデータを書き込む処理を、データを単に上書きすることにより実行しても、空きブロックの冗長部に書き込まれた空きブロック情報が破壊されることはない。
（第２の実施の形態の動作）
この記憶装置にデータを書き込む処理は、データ書き込みの処理と、空きブロック情報及びアドレス変換テーブルの更新の処理とを除き、第１の実施の形態の処理と同一である。そこで、データ書き込みの処理と、空きブロック情報及びアドレス変換テーブルを更新する処理とを中心に、図１２〜図１３を参照してこの記憶装置の動作を説明する。
（データ書き込み）
この記憶装置において、データを書き込むときは、図１２に示すステップＳ５０１から処理を開始する。
ステップＳ５０１において、ＣＰＵ１２は、書き込み対象の論理アドレスを特定した後、その論理アドレスのうち最も番号が若いものの値をバスライン１３上に供給し、コントローラ２０にデータの書き込みを指示するコマンドを供給する。
コントローラ２０は、ステップＳ５０１で供給されたコマンドに応答し、バスライン１３を介してＣＰＵ１２から供給された論理アドレスを、書き込み対象の論理アドレスとして記録する（ステップＳ５０２）。
次いで、コントローラ２０は、前に述べたステップＳ２０２の処理と実質的に同一の処理を行うことにより、自己が記憶する書き込み対象の論理アドレスに対応付けられている物理アドレスを特定する（ステップＳ５０３）。
次に、コントローラ２０は、自己が記憶するデータを参照し、先頭の空きブロックの先頭ページを特定する（ステップＳ５０４）。そして、以後、ステップＳ５０３で特定した物理アドレスと、ステップＳ５０４で特定したページにあたる物理アドレスとを互いに入れ替えて扱うことと決定する（ステップＳ５０５）。これにより、書き込み対象の物理アドレスは、ステップＳ５０４で特定された、連鎖の先頭の空きブロックにあたる物理アドレスとなる。
次に、コントローラ２０は、グローバルバッファ６に、ステップＳ５０５で書き込み対象として決定された物理アドレスを供給し、制御回路５に、当該物理アドレスが示すページの先頭から５１３バイト目以降を読み出すことを指示する（ステップＳ５０６）。
制御回路５は、ステップＳ５０４で特定されたページを選択するようＸアドレスデコーダ４Ｘに指示し、次いで、メモリセルアレイ１の読出制御端Ｔreadcontにデータ読み出しの指示を送る。メモリセルアレイ１は、当該ページの冗長部に記憶されている空きブロック情報を、Ｉ／Ｏバッファ２及びグローバルバッファ６を介して、コントローラ２０に１バイトずつ順次供給する。
コントローラ２０は、フラッシュメモリユニット１０から供給された空きブロック情報を読み取ると、その空きブロック情報を、先頭の空きブロックの位置の情報として記憶する（ステップＳ５０７）。ステップＳ５０７で記憶された空きブロック情報は、図１２に示す処理を経た後に新たに連鎖の先頭となる空きブロックを表す。
続いてこの記憶装置は、ステップＳ５０５で書き込み対象として決定したページに当たる物理アドレスを、第１の実施の形態におけるステップＳ２０６で特定された物理アドレスとして扱い、上述のステップＳ２１１〜Ｓ２１７の処理と実質的に同一の処理を行ってデータを書き込む（ステップＳ５０８）。
そして、ステップＳ５０８の処理のうち、ステップＳ２１７にあたる処理において、ＣＰＵ１２から書き込み終了を表す制御コードが供給されたと判別すると、コントローラ２０は、データ書込の処理を終了する。
また、ステップＳ２１４にあたる処理において、現在選択中のページに５１２バイトのデータが書き込まれたと判別すると、コントローラ２０は、ＣＰＵ１２に、次の論理アドレスの供給を要求する信号を送り、ＣＰＵ１２はこの信号に応答して、次の論理アドレスをバスライン１３上に送出する。そして、コントローラ２０は、バスライン１３を介してＣＰＵ１２から次の論理アドレスを取得すると、その論理アドレスを、書き込み対象の論理アドレスとして、従前記憶していた論理アドレスに上書きして記憶し、処理をステップＳ５０３に戻す。
以上説明したステップＳ５０１〜Ｓ５０８の処理により、書き込み対象の論理アドレスが示す物理アドレスが、空きブロックの連鎖の先頭から順次特定され、特定された空きブロックにデータの書き込みが行われる。
（空きブロック情報及びアドレス変換テーブル更新）
コントローラ２０は、空きブロック情報及びアドレス変換テーブルを更新するとき、図１３のステップＳ６０１より処理を開始する。
図１３に示す処理において、まず、コントローラ２０は、自己が記憶するデータを参照し、先頭の空きブロックの先頭ページを特定する（ステップＳ６０１）。
次に、コントローラ２０は、ステップＳ６０１で特定したページの物理アドレスをグローバルバッファ６に供給し、制御回路５にラッチ信号Ｓlatchを送る（ステップＳ６０２）。
制御回路５は、ラッチ信号Ｓlatchに応答し、グローバルバッファ６に供給された物理アドレスが示すページを選択するようＸアドレスデコーダ４Ｘに指示し、ページが選択されると、メモリセルアレイ１の読出制御端Ｔreadcontにデータ読み出しの指示を送る。メモリセルアレイ１は、当該ページの記憶内容を、Ｉ／Ｏバッファ２及びグローバルバッファ６を介してコントローラ２０に１バイトずつ順次出力する。
そして、コントローラ２０は、グローバルバッファ６から供給される当該記憶内容のうち、先頭から５１３バイト目以降を順次読み取ることにより、読み取られたページの冗長部に記憶されている空きブロック情報を取得する（ステップＳ６０３）。
コントローラ２０は、空きブロック情報を読み取ると、その空きブロック情報を、ステップＳ６０１で特定した先頭の空きブロックの先頭ページの情報に上書きする。すなわち、先頭の空きブロックの位置の情報を、その次の空きブロックの位置の情報に更新する（ステップＳ６０４）。
次に、コントローラ２０は、前に述べたステップＳ３０９〜Ｓ３１５の処理を実行してアドレス変換テーブルを更新し（ステップＳ６０５）、更新後のアドレス変換テーブルの位置を記憶する（ステップＳ６０６）。
ただし、更新後のアドレス変換テーブルは、ステップＳ６０１で特定され、現在選択されているページにあたる論理アドレスに書き込む。また、更新されるべき情報には、論理アドレスが新たに割り当てられた物理ブロックの情報の他、前に述べたステップＳ５０５における物理アドレスの交換の結果の情報が含まれる。
次に、コントローラ２０は、空きブロック情報を追加するため、自己が記憶するデータを参照し、先頭の空きブロックの先頭ページを特定する（ステップＳ６０７）。
次に、コントローラ２０は、自己が現在特定しているページの物理アドレスをグローバルバッファ６に供給し、制御回路５にはラッチ信号Ｓlatchを送る（ステップＳ６０８）。
制御回路５は、ラッチ信号Ｓlatchに応答し、グローバルバッファ６に供給された物理アドレスが示すページをＸアドレスデコーダ４Ｘに選択させ、メモリセルアレイ１の読出制御端Ｔreadcontにデータ読み出しの指示を送って、メモリセルアレイ１に、当該ページの記憶内容を、Ｉ／Ｏバッファ２及びグローバルバッファ６を介してコントローラ２０に順次供給させる。
そして、コントローラ２０は、グローバルバッファ６から供給される情報のうち、先頭から５１３バイト目以降を順次読み取ることにより、当該ページの冗長部に記憶されている情報を取得する（ステップＳ６０９）。
次に、コントローラ２０は、ステップＳ６０９で読み取った情報の中に、空きブロック情報があるか否かを判別する（ステップＳ６１０）。
空きブロック情報があるとき、コントローラ２０は、その空きブロック情報が示す次の空きブロックの先頭ページを特定し（ステップＳ６１１）、処理をステップＳ６０８に戻す。
空きブロック情報がないとき、現在特定されているページは、末尾の空きブロックの先頭ページである。
このとき、コントローラ２０は、上述のステップＳ３０１〜Ｓ３０８の処理と実質的に同様の処理を行い、先頭の５１２バイトが空白で、５１３バイト目以降に、空きブロック情報として更新前の古いアドレス変換テーブルが現在格納されているブロックの情報を含んでいるデータを、現在特定されているページに書き込ませるよう、フラッシュメモリユニット１０を制御する（ステップＳ６１２）。
これにより、古いアドレス変換ブロックが現在格納されているブロックは、空きブロックの連鎖の末尾に組み込まれる。
次に、この記憶装置は、上述したステップＳ２２１〜Ｓ２２７と同様の処理に従って、更新前のアドレス変換テーブルがあるブロックの記憶内容を消去する（ステップＳ６１３）。これにより、古いアドレス変換ブロックが格納されていたブロックは、空きブロックとなる。
以上説明したステップＳ６０１〜Ｓ６１３の処理により、空きブロック情報及びアドレス変換テーブルは更新される。
なお、メモリセルアレイ１を初期化する場合、コントローラ２０は、一旦、メモリセルアレイ１の全ブロックの内容を消去した後、各ブロックの冗長部に空きブロック連鎖情報を書き込むよう、フラッシュメモリユニット１０を制御する。
この際、コントローラ２０は、図１１に示すように、空きブロックがとびとびに連鎖されるように、連鎖情報を書き込む。連鎖情報をこのような構成として、データの書き込み位置を分散させれば、一部の領域のみに繰り返してデータが書き込まれる事態を防止できる。
なお、この発明は、上記実施の形態に限定されず、種々の変形及び応用が可能である。
例えば、上記実施の形態では、理解を容易にするため、ＣＰＵ１２と記憶装置との間のデータの授受を１バイト単位で行ったが、２バイト、４バイト単位で行う等、データの転送単位は任意である。同様に、メモリセルの容量も１バイトに限定されず、２バイト等でもよい。
また、上記の実施の形態の記憶装置に使用されているメモリセルアレイ１は、１チップだけであった。しかしながら、複数チップのフラッシュメモリを有する記憶装置に本発明を適用することもできる。この場合、アドレス変換テーブル（及び空きブロックテーブル）をいずれか１チップのフラッシュメモリのいずれか１つのブロック内に記憶し、更にコントローラ２０が、アドレス変換テーブル（及び空きブロックテーブル）を記憶するチップの情報を記憶すればよい。また、上記の第２の実施の形態のように空きブロック情報を連鎖情報によって構成する場合には、次の空きブロックのあるチップとブロック番号とを示す連鎖情報を冗長領域に書き込めばよい。
また、上記実施の形態では、メモリセルアレイ１は、ＮＡＮＤ型のものによって構成されていたが、ＮＯＲ型のものによって構成することができる。
また、上記実施の形態では、記憶装置内に制御回路５を配置したが、制御回路５が実行する動作をコントローラ２０やＣＰＵ１２に行わせることにより、制御回路５を使用せずに、メモリセルアレイ１へのアクセスを制御することも可能である。また、コントローラ２０が実行する動作をＣＰＵ１２に行わせることにより、コントローラ２０を使用せずに、メモリセルアレイ１へのアクセスを制御することも可能である。
制御回路５やコントローラ２０の動作をＣＰＵ１２が実行する場合、上述の制御動作を実行するためのプログラムを格納した媒体（フロッピーディスク、ＣＤ−ＲＯＭ等）から該プログラムをコンピュータ１１にインストールし、ＯＳ（オペレーティングシステム）上で動作させることにより、上述の処理を実行させる。
以上説明したように、この発明によれば、空きブロックの位置を表す情報や論理アドレスと物理アドレスとの対応関係を表す情報等が、ブロック消去型記憶媒体に記憶される。このため、空きブロックの位置を表す情報や論理アドレスや物理アドレスとの対応関係を表す情報等を記憶する記憶媒体を別に用意する必要がない。
【図１】
0003680142.tif 000002
【図２】
0003680142.tif 000003
【図３】
0003680142.tif 000004
【図４】
0003680142.tif 000005
【図５】
0003680142.tif 000006
【図６】
0003680142.tif 000007
【図７】
0003680142.tif 000008
【図８】
0003680142.tif 000009
【図９】
0003680142.tif 000010
【図１０】
0003680142.tif 000011
【図１１】
0003680142.tif 000012
【図１２】
0003680142.tif 000013
【図１３】
0003680142.tif 000014