(57)【要約】【課題】小さな容量のデータ、特に読み出し・書き込み単位よりも小さな容量のデータを良好に読み出すことができるメモリコトローラを提供する。【解決手段】ホストとのデータの入出力を制御するホストインタフェースと、前記メモリとのデータの入出力を制御するメモリインタフェースと、２以上のセクターからなるページ単位のデータを記憶可能な揮発性メモリの複数からなるバッファと、前記バッファのそれぞれの揮発性メモリを前記ホストインタフェースに接続するか、前記メモリインタフェースに接続するかを制御するバッファ制御部と、を備えたメモリコントローラであって、前記バッファ制御部は、前記メモリから揮発性メモリへの前記セクター単位のデータの転送が終了した時に、前記ホストへの読み出しデータがなければ、前記揮発性メモリの接続を前記ホストインタフェースに切り替える。【選択図】図４
2010026584.tif 000002
【特許請求の範囲】
【請求項１】
ホストからのデータの読み出し要求に対して、メモリから対応するデータを読み出して前記ホストに固定容量のセクター単位で転送すると共に、前記ホストからのデータの書き込み要求に対して前記メモリに対応するデータを書き込み転送するメモリコントローラであって、
前記ホストとのデータの入出力を制御するホストインタフェースと、
前記メモリとのデータの入出力を制御するメモリインタフェースと、
２以上のセクターからなるページ単位のデータを記憶可能な複数の揮発性メモリからなるバッファと、
前記バッファのそれぞれの揮発性メモリを前記ホストインタフェースに接続するか、前記メモリインタフェースに接続するかを制御するバッファ制御部と、
を備え、
前記ホストインタフェースに接続した前記バッファの前記揮発性メモリを第１の揮発性メモリとし、前記メモリインタフェースに接続した前記バッファの前記揮発性メモリを第２の揮発性メモリとして、
前記バッファ制御部は、前記メモリから前記第２の揮発性メモリへの前記セクター単位のデータの転送が終了した時に、前記第１の揮発性メモリに前記ホストへの読み出しデータがない場合に、前記第２の揮発性メモリの接続を前記ホストインタフェースに切り替えることを特徴とするメモリコントローラ。
【請求項２】
前記バッファ制御部は、前記ホストからの読み出し要求に対する最初のページ以降のセクターのデータを前記メモリから読み出す際に、前記メモリから前記第２の揮発性メモリへの前記ページ単位のデータの転送が終了した時に、その時点において、前記ホストインタフェースに接続した前記バッファの前記揮発性メモリを第１の揮発性メモリとし、前記メモリインタフェースに接続した前記バッファの前記揮発性メモリを第２の揮発性メモリとして、前記第２の揮発性メモリの接続を前記ホストインタフェースに切り替えることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記バッファ制御部は、前記ホストからの読み出し要求に対する最初のセクター以降のセクターのデータを前記メモリから読み出す際に、前記メモリから前記第２の揮発性メモリへの前記ページ単位のデータの転送が終了した時に、その時点において、前記ホストインタフェースに接続した前記バッファの前記揮発性メモリを第１の揮発性メモリとし、前記メモリインタフェースに接続した前記バッファの前記揮発性メモリを第２の揮発性メモリとして、前記第２の揮発性メモリの接続を前記ホストインタフェースに切り替えることを特徴とする請求項１に記載のメモリコントローラ。
【請求項４】
前記メモリコントローラは、さらに前記ホストからのデータの書き込み要求に対して前記メモリに対応するデータを書き込み転送し、
前記バッファ制御部は、前記ホストから前記第１の揮発性メモリへの前記セクター単位のデータの転送が終了した時に、その時点において、前記ホストインタフェースに接続した前記バッファの前記揮発性メモリを第１の揮発性メモリとし、前記メモリインタフェースに接続した前記バッファの前記揮発性メモリを第２の揮発性メモリとして、前記第２の揮発性メモリに前記メモリへの書き込みデータがない場合に、前記第１の揮発性メモリの接続を前記メモリインタフェースに切り替えることを特徴とする請求項１に記載のメモリコントローラ。
【請求項５】
前記バッファの前記揮発性メモリの数が２個であることを特徴とする請求項１に記載のメモリコントローラ。
【請求項６】
前記バッファの前記第１の揮発性メモリと前記第２の揮発性メモリは、一方が前記ホストインタフェースと接続している場合は、他方が前記メモリインタフェースに接続しており、
前記バッファ制御部によって、前記第１の揮発性メモリと前記第２の揮発性メモリの接続先を前記ホストインタフェースと前記メモリインタフェースとの間でトグルさせることを特徴とする請求項１に記載のメモリコントローラ。
【請求項７】
不揮発性メモリと、
請求項１から６のいずれか一項に記載のメモリコントローラと、
を備えた不揮発性記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリ等の不揮発性メモリを用いた不揮発性記憶装置、および、不揮発性メモリを制御するメモリコントローラに関する。
【背景技術】
【０００２】
近年、半導体の不揮発性メモリであるフラッシュメモリを搭載したメモリカードはデジタルカメラや携帯電話の記憶媒体としてその市場を拡大している。そして半導体プロセスの進化に伴いメモリカード容量が増加し、ビット単価は低下していることから、データファイルや静止画等の小容量の記録から、より大容量が必要となる動画記録へとその用途は広がっている。
【０００３】
このように大容量化は、不揮発性メモリの市場を拡げる要素ではあるが、容量が大きくなると共に、読み出し・書き込み単位が大きくなっている。より大容量のリッチなコンテンツをストレスなく取り扱うためには読み出し・書き込み性能を向上させる必要があり、その読み出し・書き込み性能を向上させるために、読み出し・書き込み単位を大きくしているためである。
【０００４】
それによって従来は容易に取り扱うことができた小さな容量のデータ、特に読み出し・書き込み単位よりも小さな容量のデータを取り扱う際の性能が低下することになっている。
【０００５】
書き込み単位が大きなフラッシュメモリについて、特許文献１には、書き込み単位を複数のバンクで構成して、バンク毎に対応するバッファメモリを設けることにより、転送時間を削減し、高速化する方法が開示されている。こういったバッファメモリの分割を行わない場合の、一般的な不揮発性記憶装置の構成と読み出しの動作について説明する。
【０００６】
○従来の構成
図１２は、従来の不揮発性記憶装置の一実施形態であるメモリカードとホストの構成を示すブロック図である。不揮発性記憶装置であるメモリカード１２０１は、コントローラ１２０２と不揮発性メモリであるフラッシュメモリ１０３からなる。ホスト１０４ではメモリカード１２０１に対してデータの読み出し・書き込みを行う。データの読み出し・書き込みの最小単位はセクター（５１２バイト）である。ホスト１０４は、電源線・接地線やクロック線・コマンド線・データ線を介してメモリカード１２０１と接続される。メモリカード１２０１はホスト１０４から着脱可能であっても、着脱出来ない構成でもよい。
【０００７】
ＭＰＵ１２０５は、コントローラ１２０２の内部にありコントローラ１２０２全体を制御する。ホストＩ／Ｆ１２０６は、ホスト１０４からのメモリカード制御コマンドを受け取り、ホスト１０４に対してレスポンスを返すと共に読み出し・書き込みのデータの転送を行う。フラッシュメモリＩ／Ｆ１２０７は、フラッシュメモリ１０３に対してフラッシュメモリ制御コマンドを発行すると共に、フラッシュメモリ１０３に対してデータの読み出し・書き込みを行う。ここでのフラッシュメモリ１０３は、例えばＮＡＮＤタイプのフラッシュメモリであり、汎用的なインタフェースとしてのフラッシュメモリ制御コマンドで読み出し・書き込み・消去の動作を行う。
【０００８】
バッファメモリ１２０８では、ホスト１０４からフラッシュメモリ１０３間のデータをコントローラ１２０２内部で一時的に保持する。バッファメモリ１２０８については図１３で説明する。ＥＣＣ１２０９は、バッファメモリ１２０８とフラッシュメモリＩ／Ｆ１２０７双方に接続され、バッファメモリ１２０８からフラッシュメモリ１０３にデータを書き込みする際に、データとともにフラッシュメモリ１０３に書き込むＥＣＣ符号を生成する。またさらに、フラッシュメモリ１０３からバッファメモリ１２０８にデータを読み出しする際に、データとともにフラッシュメモリから読み出したＥＣＣ符号を使用して誤りを検出し、バッファメモリ１２０８に転送されたデータを訂正する。
【０００９】
図１３は、図１２のバッファメモリ１２０８の内部の構成を示した図である。バッファメモリ１２０８には容量がそれぞれ４ＫＢの２面の揮発性メモリであるバッファＡ１３０１とバッファＢ１３０２がある。ホスト１０４が取り扱うデータの単位をセクター（５１２バイト）とすると、バッファＡ１３０１およびバッファＢ１３０２にはそれぞれ８セクター分のデータが格納できることになる。それぞれのセクターのデータの格納は、そのアドレスに対応するオフセットをつけてバッファＡ１３０１またはバッファＢ１３０２に格納する。具体的には、バッファＡ１３０１およびバッファＢ１３０２の先頭の５１２バイトにはセクタードレスの下位３ビットが０のセクターが格納され、次の５１２バイトにはセクタードレスの下位３ビットが１のセクターが格納され、以降同様に割り当てて、最後の５１２バイトにはセクタードレスの下位３ビットが７のセクターを格納される。
【００１０】
バッファＡ１３０１とバッファＢ１３０２は、セレクタ１３０３を介してホストＩ／Ｆ１２０６につながる。また同様にバッファＡ１３０１とバッファＢ１３０２は、セレクタ１３０４とセレクタ１３０５を介してフラッシュメモリＩ／Ｆ１２０７またはＥＣＣ１２０９につながる。ホストＩ／Ｆ１２０６側をフロントエンド側、フラッシュメモリＩ／Ｆ１２０７およびＥＣＣ１２０９側をバックエンド側として、バッファＡ１３０１およびバッファＢ１３０２はそれぞれ異なる接続先と接続される。つまり、バッファＡ１３０１がフロントエンドと接続されているときにはバッファＢ１３０２がバックエンド側と接続され、バッファＡ１３０１がバックエンド側と接続されているときにはバッファＢ１３０２がフロントエンド側と接続される。この接続を切り替えることを「バッファをトグルする」と表現する。バッファをトグルすると、バッファＡ１３０１またはバッファＢ１３０２からみると接続先のフロントエンドとバックエンドが切り替わり、フロントエンドまたはバックエンドからみると接続先のメモリがバッファＡ１３０１とバッファＢ１３０２とで切り替わる。１３０６は制御回路でありバッファメモリ１２０８内のバッファのトグルを含む動作の制御を行う。
【００１１】
図３は、不揮発性メモリであるフラッシュメモリ１０３の内部のメモリの構成を示した図である。フラッシュメモリ１０３は複数の物理ブロック３０１からなる。物理ブロック３０１はフラッシュメモリ１０３におけるデータの消去単位である。一般的には１０２４〜４０９６個程度の物理ブロックがフラッシュメモリ１０３に含まれる。物理ブロック３０１はそれぞれ複数の物理ページ３０２からなる。物理ページ３０２はフラッシュメモリ１０３におけるデータの書き込み単位であり、かつ読み出し単位でもある。一般的には３２〜１２８ページの物理ページが物理ブロックに含まれる。物理ページ３０２の容量はデータを格納する用途の４Ｋバイトと、データに付随する管理データやデータに対応するＥＣＣ符号を格納するための領域とからなる約４Ｋバイトの容量を持つ。フラッシュメモリ１０３はこの物理ページ単位でコントローラ１２０２とのデータの読み出し・書き込みを行う。つまり４Ｋバイト単位でデータの書き込みが行われる。ホスト１０４が４Ｋバイト以下のデータの書き込みを行う場合でも、コントローラ１２０２はフラッシュメモリ１０３にデータを書き込むためには４Ｋバイトのデータを準備する必要がある。そのためには、コントローラ１２０２内部に４Ｋバイトの揮発性メモリを持ち、フラッシュメモリ１０３から読み出したデータとホスト１０４から転送されるデータを合わせてフラッシュメモリ１０３に書き込む。この４Ｋバイトの揮発性メモリがバッファＡ１３０１およびバッファＢ１３０２のことである。
【００１２】
○従来の動作
図１４に従来の不揮発性記憶装置からデータを読み出す際のタイミングチャートを示す。図１４は、誤り訂正が発生しない場合の、従来の概念を理解するための簡単なタイミングチャートである。図１４において“フラッシュからの読み出し”はフラッシュメモリ１０３からコントローラ１２０２への読み出しデータの転送を示す。“バッファＡへのアクセス”はバッファＡ１３０１へのフラッシュメモリＩ／Ｆ１２０７からのデータの書き込み転送と、バッファＡ１３０１からホストＩ／Ｆ１２０６へのデータの読み出し転送（ハッチングで表記）を示す。“バッファＢへのアクセス”はバッファＢ１３０２へのフラッシュメモリＩ／Ｆ１２０７からのデータの書き込み転送と、バッファＢ１３０２からホストＩ／Ｆ１２０６へのデータの読み出し転送（ハッチングで表記）を示す。“ホストへの出力”はホストＩ／Ｆ１２０６からホスト１０４へのデータの出力転送を示す。“バッファのトグルタイミング”は制御回路１３０６によるセレクタ１３０３，１３０４を切り替えてのバッファＡ１３０１とバッファＢ１３０２の接続状態を切り替えるタイミングを示す。
【００１３】
図１４に示されるタイミングチャートの前にホスト１０４からメモリカード１２０１にデータの読み出しコマンドが発行される。ここでは簡単のためにセクター０からの読み出しコマンドが発行されたとする。ＭＰＵ１２０５は、読み出しコマンドを理解して、セクター０からのデータが格納されたフラッシュメモリ１０３の物理アドレスを決定し、フラッシュメモリ１０３に対して読み出しコマンドを発行する。フラッシュメモリ１０３はコントローラ１２０２からの読み出しコマンドに対応して対応する物理アドレスの物理ページ３０２からデータを読み出してコントローラ１２０２に対してデータの転送を開始する。図１４のタイミングチャートはここからのタイミングを示している。なお、最初の状態としてバッファＡ１３０１はフラッシュメモリＩ／Ｆ１２０７側に、バッファＢ１３０２はホストＩ／Ｆ１０６側と接続されているとする。
【００１４】
まず時間ｔ１４０１にフラッシュメモリ１０３からフラッシュメモリＩ／Ｆ１２０７を介してバッファＡ１３０１にセクター０から順にデータの転送が開始される。時間ｔ１４０２までの間にセクター０からセクター７のデータの転送が終了する。これでバッファＡ１３０１にはセクター０からセクター７までの８セクター分のデータが格納されたことになる。時間ｔ１４０２では制御回路１３０６はバッファのトグルを行う。これによりセクター０〜７のデータが格納されたバッファＡ１３０１はホストＩ／Ｆ１２０６側と接続され、バッファＢ１３０２はフラッシュメモリＩ／Ｆ１２０７側と接続される。時間ｔ１４０２からは、フラッシュメモリ１０３から読み出したデータはフラッシュメモリＩ／Ｆ１２０７を介してバッファＢ１３０２に転送される。時間ｔ１４０２から時間ｔ１４０３までの時間でセクター８からセクター１５のデータが転送される。また時間ｔ１４０２からは、ホスト１０４に対してバッファＡ１３０１のデータがホストＩ／Ｆ１２０６を介して出力される。ここで注目したいのはフラッシュメモリ１０３からのデータの読み出しが開始される時間ｔ１４０１から、ホスト１０４に対するデータの出力が開始されるタイミングｔ１４０２までは、フラッシュメモリＩ／Ｆ１２０７を介した８セクター分のデータの転送時間を必要とすることである。つまり最初のセクターが出力されるまでの時間が長いということである。
【００１５】
時間ｔ１４０４で、ホストＩ／Ｆ１２０６に接続されたバッファＡ１３０１には格納されたセクター０〜セクター７のデータホスト１０４への読み出し転送は終了する。フラッシュメモリ１０３からバッファＢ１３０２へのセクター８〜セクター１５までのデータの転送は既に時間ｔ１４０３までに完了している。そこで制御回路１３０６はバッファのトグルを行う。この結果、バッファＡ１３０１はフラッシュメモリＩ／Ｆ１２０７側と、セクター８〜セクター１５のデータが格納されたバッファＢ１３０２はホストＩ／Ｆ１２０６側と接続される。以降同様に、８セクター単位でバッファＡ１３０１とバッファＢ１３０２をトグルしながらフラッシュメモリ１０３からホスト１０４にデータを読み出す。
【００１６】
以上、図１４のタイミングチャートで特に説明をしていないがコントローラ１２０２はフラッシュメモリ１０３に対してセクター０に続く連続データを読み出すために適宜フラッシュメモリ１０３に対して読み出しコマンドを発行する必要がある。
【００１７】
図１５、図１６、図７に、図１４で示したタイミングチャートを実現するための制御回路１３０６における処理のフローチャートを示す。制御回路１３０６内部は主に３つの機能部分からなる。“対ホストＩ／Ｆフロー”と“対フラッシュメモリＩ／Ｆフロー”と“バッファトグルフロー”である。図１５は“対ホストＩ／Ｆフロー”を示したフローチャートである。
（ａ）最初にデータの書き込みや読み出しが行われる前は状態１５０１ではスタンバイ状態をとる。ホスト１０４からメモリカード１２０１への読み出しコマンドを受けて、状態１５０２へと遷移する。
（ｂ）状態１５０２はトグル許可状態である。“バッファトグルフロー”部に対してトグルを許可する。そして状態１５０３に遷移する。
（ｃ）状態１５０３はバッファ待ちの状態である。
（ｄ）判定１５０４でバッファがトグルされたかどうかを判定し、トグルされれば状態１５０５に遷移し、トグルされていなければ状態１５０３に戻る。
ホスト１０４からメモリカードに読み出しコマンドが発行されると状態１５０１から状態１５０３までは直ぐに遷移する。図１４の時間ｔ１４０１では既に状態１５０３の状態である。
【００１８】
ここで“対ホストＩ／Ｆフロー”の説明を中断し、図１６の“対フラッシュメモリＩ／Ｆフロー”の説明を行う。
（ａ）最初にデータの書き込みや読み出しが行われる前は状態１６０１ではスタンバイ状態をとる。ホスト１０４からメモリカード１２０１への読み出しコマンドを受けて、状態１６０２へと遷移する。
（ｂ）状態１６０２は転送許可状態である。フラッシュメモリＩ／Ｆ１２０７からのデータの転送を許可する。そして状態１６０３に遷移する。
（ｃ）状態１６０３は転送待ち状態である。フラッシュメモリＩ／Ｆ１２０７からのデータの転送が完了するのを待つ。
（ｄ）判定１６０４でページ単位の転送が終了したかどうかを判定し、終了していなければ状態１６０３に戻り、終了していれば判定１６０５に遷移する。ページ単位の終了までの期間が図１４の時間ｔ１４０１〜ｔ１４０２の期間に相当する。時間ｔ１４０２はちょうどページ単位の転送が終了するタイミングであり、判定１６０４でページ単位の転送が終了したと判定し状態１６０５へと遷移する。
（ｅ）状態１６０５はトグル許可状態である。“バッファトグルフロー”部に対してトグルを許可する。そして状態１６０６に遷移する。
（ｆ）状態１６０６はバッファ待ちの状態である。
（ｇ）判定１６０７でバッファがトグルされたかどうかを判定し、トグルされれば状態１６０２に遷移し、トグルされていなければ状態１６０６に戻る。
【００１９】
このように時間ｔ１４０２で“対ホストＩ／Ｆフロー”も“対フラッシュメモリＩ／Ｆフロー”もバッファ待ちの状態になる。ここで、“対フラッシュメモリＩ／Ｆフロー”の説明を中断し、図７の“バッファトグルフロー”の説明を行う。
（ａ）最初にデータの書き込みや読み出しが行われる前は状態７０１ではスタンバイ状態をとる。ホスト１０４からメモリカード１２０１への読み出しコマンドを受けて、状態７０２へと遷移する。
（ｂ）状態７０２はトグル許可待ち状態である。
（ｃ）“対ホストＩ／Ｆフロー”および“対フラッシュメモリＩ／Ｆフロー”双方がトグル許可したかどうかを判定７０３で判定し、双方とも許可していれば状態７０４に遷移し、どちらか一方でも許可していなければ状態７０２へ戻る。図１５および図１６で説明したように“対ホストＩ／Ｆフロー”も“対フラッシュメモリＩ／Ｆフロー”も時間ｔ１４０２ではトグル許可をしているので、時間ｔ１４０２で状態７０４へと遷移する。
（ｄ）状態７０４ではバッファをトグルする。つまりバッファＡ１３０１とバッファＢ１３０２の接続状態を切り替える。そして状態７０２のトグル許可待ち状態に遷移する。なお、状態７０４でバッファをトグルすることによって“対ホストＩ／Ｆフロー”および“対フラッシュメモリＩ／Ｆフロー”でトグル許可を行ったという情報を一旦リセットされる。つまり２回目以降の判定７０３で行われるトグル許可されたかどうかの判定はその前の状態７０４でのバッファのトグル以降に許可されたかどうかを判定する。
【００２０】
以上、図１５，図１６、図７を用いて説明した制御回路１３０６のフローチャートを使用して、誤り訂正が発生する場合の動作の説明を行う。誤り訂正がある場合のタイミングチャートを図１７に示す。
【００２１】
図１７において“バッファＡへのアクセス”“バッファＢへのアクセス”“ホストへの出力”は図１４と同様の意味を示す。“ＥＣＣ検出回路”はＥＣＣ１２０９において誤りを検出する機能部分が動作している期間を示し、フラッシュメモリ１０３からデータおよびＥＣＣ符号を読み出す際に動作する。“ＥＣＣ誤り位置演算回路”はＥＣＣ１２０９において誤りの発生したアドレスを演算する期間を示す。“ＥＣＣ訂正回路”はＥＣＣ１２０９がフラッシュメモリ１０３から読み出したデータが格納されたバッファメモリ１２０８に対して誤りの訂正を行う期間を示す。“ホスト側制御ステート”は図１５で説明した“対ホストＩ／Ｆフロー”の状態を、“フラッシュ側制御ステート”は図１６で説明した“対フラッシュメモリＩ／Ｆフロー”の状態を示す。
【００２２】
最初に時間ｔ１７００にホスト１０４からメモリカード１２０１にデータの読み出しコマンドが発行される。ここでは簡単のためにセクター０からの読み出しコマンドが発行されたとする。“対ホストＩ／Ｆフロー”は図１５で説明したように時間ｔ１７００に状態１５０２でトグル許可を行った後、状態１５０３でバッファ待ちの状態になる。“対フラッシュメモリＩ／Ｆフロー”は、状態１６０３の転送待ちの状態である。ＭＰＵ１２０５は読み出しコマンドを理解して、セクター０からのデータが格納されたフラッシュメモリ１０３の物理アドレスを決定し、フラッシュメモリ１０３に対して読み出しコマンドを発行する。フラッシュメモリ１０３はコントローラ１２０２からの読み出しコマンドに対応して対応する物理アドレスの物理ページ３０２からデータを読み出してコントローラ１２０２に対してデータの転送を開始する。なお、最初の状態としてバッファＡ１３０１はフラッシュメモリＩ／Ｆ１２０７側と、バッファＢ１３０２はホストＩ／Ｆ１２０６側と接続されているとする。
【００２３】
時間ｔ１７０１ではフラッシュメモリ１０３からフラッシュメモリＩ／Ｆ１２０７を介してバッファＡ１３０１にセクター０から順にデータが転送される。この時、ＥＣＣ１２０９で、誤りの検出と誤り位置の演算と誤りの訂正を順番に行うと処理時間が長くなるので、平行してパイプライン方式で処理する。具体的には、誤りの検出と平行して誤り位置の演算を行いその後に、誤り訂正を行う。つまり誤り位置の演算を行うときには平行して１セクター後の誤りの検出が行われる。図１７より分かるようにセクター０の誤り位置の演算とセクター１の誤りの検出は平行して行われる。またバッファに着目したときに、誤り訂正のためのＥＣＣ１２０９からバッファメモリ１２０８へのアクセスはデータ転送後に１セクター前の誤り訂正が行われる。図１７より分かるようにフラッシュメモリ１０３からセクター１のデータを転送した後にセクター０の誤り訂正を行う。このようにして、誤り訂正を行いつつデータの転送を行う。時間ｔ１７０１から時間ｔ１７０２の間にセクター０〜セクター７のデータの転送および誤り訂正が終了する。“対フラッシュメモリＩ／Ｆフロー”は判定１６０４を経て状態１６０５へと遷移する。状態１６０５はでトグル許可を行う。従って時間ｔ１７０２では“バッファトグルフロー”は状態７０４でバッファのトグルを行い、バッファＡ１３０１とバッファＢ１３０２の接続状態を切り替える。“対ホストＩ／Ｆフロー”は状態１５０５でセクター指定転送許可としてホストＩ／Ｆ１２０６に対してセクター０のデータの転送を許可し、状態１５０６で転送待ち状態となる。“対フラッシュメモリＩ／Ｆフロー”は状態１６０２でフラッシュメモリＩ／Ｆ１２０７に転送許可を行い、状態１６０３で転送待ち状態になる。
【００２４】
時間ｔ１７０２からはバッファＡ１３０１のセクター０からセクター７のデータはホストＩ／Ｆ１２０６を経由してホスト１０４に出力される。ここで注目したいのはフラッシュメモリ１０３からのデータの読み出しが開始される時間ｔ１７０１から、ホスト１０４に対するデータの出力が開始されるタイミングｔ１７０２までは、フラッシュメモリＩ／Ｆ１２０７を介した８セクター分のデータの転送時間と誤りを訂正する時間と１セクター分の誤り位置を演算する時間を要することである。つまり最初のセクターが出力されるまでの時間が長いということである。
【００２５】
以上説明してきた構成および方法に特許文献１で示されたバッファの分割を適用することにより、最初のセクターの出力を速くすることは可能である。例えばバッファメモリ１２０８の内部の構成として図１８に示すように１セクター単位の揮発性メモリを複数備えることで実現できる。
【００２６】
しかしながら、大きな容量の揮発性メモリを複数の小さな容量の揮発性メモリで置き換えた場合にはデメリットがある。例えばコントローラを１つの半導体チップに集積している場合にはチップ面積の増加および、検査項目の増加につながる。チップ面積の増加も検査項目の増加もコストの増加につながる。揮発性メモリはメモリセルアレイと周辺回路からなるが、メモリ容量が倍になっても周辺回路は倍にはならない。逆にメモリ容量を半分にしても周辺回路は半分にならない。従って、大きな容量の揮発性メモリを、その和が等しくなるように複数個の小さな容量の揮発性メモリで置き換えると相対的に周辺回路の占める割合が大きくなり、チップ面積が増加する。また、別の観点で考えると、ひとつの揮発性メモリを複数個の揮発性メモリで置き換えるという行為はＩ／Ｆである入出力信号の数を増やすことに他ならない。入出力信号の数の増加は信号配線の増加につながり、やはりチップ面積の増加につながる。
【００２７】
図１９と図２０に、図１３と図１８に対応するメモリの構成における半導体チップ上のレイアウトの概念図を示す。図１９は、４Ｋバイトの揮発性メモリが２つとセレクタからなる構成で、揮発性メモリの総容量は８Ｋバイトである。図２０は、５１２バイトのメモリが１６個とセレクタからなる構成で、図１９と同じく揮発性メモリの総容量は８Ｋバイトである。図１９と図２０ともに配線を斜線の網掛けパターンで、メモリの周辺回路をハッチングパターンで表記している。メモリセルアレイは５１２Ｂと書いた白の四角で表記している。図１９における４Ｋバイトの揮発性メモリのメモリセルアレイは４Ｋバイトのメモリセルアレイであるが、図２０との比較のために５１２バイト単位の集合として表現している。総容量は８Ｋバイトで同じであるが、メモリの周辺回路部分や配線部分が、より小さな容量のメモリで構成した（図２０）ほうが面積が増えていることがわかる。
【００２８】
つまり、半導体チップのコストアップを許容出来ない場合において特許文献１に示されるバッファの分割を適用できない。
【００２９】
また、別の考え方として特許文献２に示されるように小サイズのバッファメモリ２個でのみバッファメモリを構成する手法もあるが、このようにフラッシュメモリの書き込みサイズ未満の容量のバッファメモリしか備えない場合には別の課題が発生する。フラッシュメモリの書き込みサイズのデータのコピーを行うためには、例えばメモリカード外部などに書き込みサイズに相当するバッファを備える必要がある。
【００３０】
【特許文献１】特開２００３−８５０３４号公報
【特許文献２】特開２００２−２８８０３４号公報
【特許文献３】特表２００７−５２８０７９号公報
【発明の開示】
【発明が解決しようとする課題】
【００３１】
以上述べてきたように、不揮発性メモリの大容量化に伴い、従来は容易に取り扱うことができた小さな容量のデータ、特に読み出し・書き込み単位よりも小さな容量のデータを読み出す際の性能が低下することになる。
【００３２】
本発明の目的は、小さな容量のデータ、特に読み出し・書き込み単位よりも小さな容量のデータを良好に読み出すことができるメモリコントローラを提供することである。
【課題を解決するための手段】
【００３３】
本発明に係るメモリコントローラは、ホストからのデータの読み出し要求に対して、メモリから対応するデータを読み出して前記ホストに固定容量のセクター単位で転送し、
前記ホストとのデータの入出力を制御するホストインタフェースと、前記メモリとのデータの入出力を制御するメモリインタフェースと、２以上のセクターからなるページ単位のデータを記憶可能な複数の揮発性メモリからなるバッファと、前記バッファのそれぞれの揮発性メモリを前記ホストインタフェースに接続するか、前記メモリインタフェースに接続するかを制御するバッファ制御部と、を備え、
前記ホストインタフェースに接続した前記バッファの前記揮発性メモリを第１の揮発性メモリとし、前記メモリインタフェースに接続した前記バッファの前記揮発性メモリを第２の揮発性メモリとして、
前記バッファ制御部は、前記メモリから前記第２の揮発性メモリへの前記セクター単位のデータの転送が終了した時に、前記第１の揮発性メモリに前記ホストへの読み出しデータがない場合に、前記第２の揮発性メモリの接続を前記ホストインタフェースに切り替える。
【００３４】
また、本発明の不揮発性記憶装置は、本発明のメモリコントローラと不揮発性メモリとからなる。
【発明の効果】
【００３５】
本発明のメモリコントローラによれば、小さな容量のデータのメモリからホストへの読み出し転送の開始を速く行うことができる。
【発明を実施するための最良の形態】
【００３６】
以下、添付の図面を参照し、本発明の実施形態について説明する。
【００３７】
○本発明の構成
図１は、本発明の不揮発性記憶装置の一実施形態であるメモリカードとホストの構成を示すブロック図である。不揮発性記憶装置であるメモリカード１０１は、コントローラ１０２と不揮発性メモリであるフラッシュメモリ１０３からなる。ホスト１０４では、メモリカード１０１に対してデータの読み出し・書き込みを行う。データの読み出し・書き込みの最小単位はセクター（５１２バイト）である。ホスト１０４は、電源線・接地線やクロック線・コマンド線・データ線を介してメモリカード１０１と接続される。メモリカード１０１はホスト１０４から着脱可能であっても、着脱出来ない構成でもよい。
【００３８】
コントローラ１０２の内部にありコントローラ１０２全体を制御するのはＭＰＵ１０５である。ホストＩ／Ｆ１０６はホスト１０４からのメモリカード制御コマンドを受け取りホスト１０４に対してレスポンスを返すと共に読み出し・書き込みのデータの転送を行う。フラッシュメモリＩ／Ｆ１０７はフラッシュメモリ１０３に対してフラッシュメモリ制御コマンドを発行すると共にフラッシュメモリ１０３に対してデータの読み出し・書き込みを行うメモリＩ／Ｆである。ここでのフラッシュメモリ１０３は例えばＮＡＮＤタイプのフラッシュメモリであり、汎用的なインタフェースとしてのフラッシュメモリ制御コマンドで読み出し・書き込み・消去の動作を行うことが出来る。
【００３９】
バッファメモリ１０８によってホスト１０４からフラッシュメモリ１０３間のデータをコントローラ１０２内部で一時的に保持する。バッファメモリ１０８については図２で詳しく説明する。ＥＣＣ１０９は、バッファメモリ１０８とフラッシュメモリＩ／Ｆ１０７双方に接続され、バッファメモリ１０８からフラッシュメモリ１０３にデータを書き込みする際に、データとともにフラッシュメモリ１０３に書き込むＥＣＣ符号を生成する。またさらに、フラッシュメモリ１０３からバッファメモリ１０８にデータを読み出しする際に、データとともにフラッシュメモリから読み出したＥＣＣ符号を使用して誤りを検出し、バッファメモリ１０８に転送されたデータを訂正する。
【００４０】
図２は、図１のバッファメモリ１０８の内部の構成を示した図である。バッファメモリ１０８には容量がそれぞれ４ＫＢの２面の揮発性メモリであるバッファＡ２０１とバッファＢ２０２がある。ホスト１０４が取り扱うデータの単位をセクター（５１２バイト）とすると、バッファＡ２０１およびバッファＢ２０２にはそれぞれ８セクター分のデータが格納できる。それぞれのセクターのデータの格納は、そのアドレスに対応するオフセットをつけてバッファＡ２０１またはバッファＢ２０２に格納する。具体的には、バッファＡ２０１およびバッファＢ２０２の先頭の５１２バイトにはセクタードレスの下位３ビットが０のセクターが格納され、次の５１２バイトにはセクタードレスの下位３ビットが１のセクターが格納され、以降同様に割り当てて、最後の５１２バイトにはセクタードレスの下位３ビットが７のセクターを格納する。
【００４１】
バッファＡ２０１とバッファＢ２０２は、セレクタ２０３を介してホストＩ／Ｆ１０６につながる。また同様にバッファＡ２０１とバッファＢ２０２は、セレクタ２０４とセレクタ２０５を介してフラッシュメモリＩ／Ｆ１０７またはＥＣＣ１０９につながる。ホストＩ／Ｆ１０６側をフロントエンド側、フラッシュメモリＩ／Ｆ１０７およびＥＣＣ１０９側をバックエンド側として、バッファＡ２０１およびバッファＢ２０２はそれぞれ異なる接続先と接続される。つまり、バッファＡ２０１がフロントエンドと接続されているときにはバッファＢ２０２がバックエンド側と接続され、バッファＡ２０１がバックエンド側と接続されているときにはバッファＢ２０２がフロントエンド側と接続される。この接続を切り替えることを「バッファをトグルする」と表現する。バッファをトグルすると、バッファＡ２０１またはバッファＢ２０２からみると接続先のフロントエンドとバックエンドが切り替わり、フロントエンドまたはバックエンドからみると接続先のメモリがバッファＡ２０１とバッファＢ２０２とで切り替わる。
【００４２】
制御回路２０６では、バッファメモリ１０８内のバッファのトグルを含む動作のバッファ制御を行う。セクター情報格納部２０７では、バッファＡ２０１およびバッファＢ２０２に格納されたセクターのアドレス情報を格納する。データ出力状況認識部２０８では、ホストＩ／Ｆ１０６からホスト１０４に出力されるデータのアドレス情報を認識する。
【００４３】
図３は、不揮発性メモリであるフラッシュメモリ１０３の内部のメモリの構成を示した図である。フラッシュメモリ１０３は複数の物理ブロック３０１からなる。物理ブロック３０１はフラッシュメモリ１０３におけるデータの消去単位である。一般的には１０２４〜４０９６個程度の物理ブロックがフラッシュメモリ１０３に含まれる。物理ブロック３０１はそれぞれ複数の物理ページ３０２からなる。物理ページ３０２はフラッシュメモリ１０３におけるデータの書き込み単位であり、かつ読み出し単位でもある。一般的には３２〜１２８ページの物理ページが物理ブロックに含まれる。物理ページ３０２の容量は、データを格納する用途の４Ｋバイトと、データに付随する管理データやデータに対応するＥＣＣ符号を格納するための領域とからなる約４Ｋバイトの容量を持つ。フラッシュメモリ１０３は、この物理ページ単位でコントローラ１０２とのデータの読み出し・書き込みを行う。つまり４Ｋバイト単位でデータの書き込みが行われる。ホスト１０４が４Ｋバイト以下のデータの書き込みを行う場合でも、コントローラ１０２はフラッシュメモリ１０３にデータを書き込むためには４Ｋバイトのデータを準備する必要がある。そのためには、コントローラ１０２内部に４Ｋバイトの揮発性メモリを持ち、フラッシュメモリ１０３から読み出したデータとホスト１０４から転送されるデータを合わせてフラッシュメモリ１０３に書き込む。この４Ｋバイトの揮発性メモリがバッファＡ２０１およびバッファＢ２０２のことである。
【００４４】
○本発明の動作
図４に本発明の不揮発性記憶装置からデータを読み出す際のタイミングチャートを示す。図４は誤り訂正が発生しない場合の、本発明の概念を理解するための簡単なタイミングチャートである。図４において“フラッシュからの読み出し”はフラッシュメモリ１０３からコントローラ１０２への読み出しデータの転送を示す。“バッファＡへのアクセス”はバッファＡ２０１へのフラッシュメモリＩ／Ｆ１０７からのデータの書き込み転送と、バッファＡ２０１からホストＩ／Ｆ１０６へのデータの読み出し転送（ハッチングで表記）を示す。“バッファＢへのアクセス”はバッファＢ２０２へのフラッシュメモリＩ／Ｆ１０７からのデータの書き込み転送と、バッファＢ２０２からホストＩ／Ｆ１０６へのデータの読み出し転送（ハッチングで表記）を示す。“ホストへの出力”はホストＩ／Ｆ１０６からホスト１０４へのデータの出力転送を示す。“バッファのトグルタイミング”は制御回路２０６によるセレクタ２０３，２０４を切り替えてのバッファＡ２０１とバッファＢ２０２の接続状態を切り替えるタイミングを示す。
【００４５】
図４に示されるタイミングチャートの前に、ホスト１０４からメモリカード１０１にデータの読み出しコマンドが発行される。ここでは簡単のためにセクター０からの読み出しコマンドが発行されたとする。ＭＰＵ１０５は読み出しコマンドを理解して、セクター０からのデータが格納されたフラッシュメモリ１０３の物理アドレスを決定し、フラッシュメモリ１０３に対して読み出しコマンドを発行する。フラッシュメモリ１０３はコントローラ１０２からの読み出しコマンドに対応して対応する物理アドレスの物理ページ３０２からデータを読み出してコントローラ１０２に対してデータの転送を開始する。図４のタイミングチャートはここからのタイミングを示している。なお、最初の状態としてバッファＡ２０１はフラッシュメモリＩ／Ｆ１０７側に、バッファＢ２０２はホストＩ／Ｆ１０６側と接続されているとする。
【００４６】
まず、時間ｔ４０１ではフラッシュメモリ１０３からフラッシュメモリＩ／Ｆ１０７を介してバッファＡ２０１にセクター０のデータが転送される。時間ｔ４０１から時間ｔ４０２の間にセクター０のデータの転送が終了する。時間ｔ４０２はフラッシュメモリＩ／Ｆ１０７からのデータの転送におけるセクター境界のタイミングであるが、この時にホスト１０４がデータの転送待ち状態にあればバッファのトグルを行う。ホスト１０４がデータの転送待ちにあるかどうかはホスト１０４とホストＩ／Ｆ１０６とセレクタ２０３によって接続されているバッファ（今はバッファＢ２０２）にホスト１０４が未読み出しのデータが残っているかどうかで判定する。もちろん最初なのでホストへの未読み出しのデータはバッファＢ２０２には存在しない。従って時間ｔ４０２ではバッファのトグルが行われる。これによりセクター０のデータが格納されたバッファＡ２０１は、ホストＩ／Ｆ１０６側と接続され、バッファＢ２０２はフラッシュメモリＩ／Ｆ１０７側と接続される。時間ｔ４０２からは、フラッシュメモリ１０３から読み出したデータはフラッシュメモリＩ／Ｆ１０７を介してバッファＢ２０２に転送される。時間ｔ４０２から時間ｔ４０４までの時間でセクター１とセクター２のデータが転送される。また時間ｔ４０２からは、ホスト１０４に対してバッファＡ２０１のデータがホストＩ／Ｆ１０６を介して出力される。ここで注目したいのはフラッシュメモリ１０３からのデータの読み出しが開始される時間ｔ４０１から、ホスト１０４に対するデータの出力が開始されるタイミングｔ４０２までは、フラッシュメモリＩ／Ｆ１０７を介した１セクター分のデータの転送時間しかかからないことである。
【００４７】
時間ｔ４０４では、これもフラッシュメモリＩ／Ｆ１０７からのデータ転送におけるセクター境界のタイミングである。この時にホストＩ／Ｆ１０６に接続されたバッファＡ２０１には格納されたセクター０のデータは既に時間ｔ４０３までに転送を完了しており、ホスト１０４に対する未読み出しのデータは存在しないので制御回路２０６はバッファのトグルを行う。この結果、ホスト１０４へのデータの出力が完了したバッファＡ２０１はフラッシュメモリＩ／Ｆ１０７側と接続され、セクター１とセクター２のデータが格納されたバッファＢ２０２はホストＩ／Ｆ１０６側と接続される。時間ｔ４０４からは、フラッシュメモリ１０３から読み出したデータはフラッシュメモリＩ／Ｆ１０７を介してバッファＡ２０１に転送される。時間ｔ４０４から時間ｔ４０５までの時間でセクター３からセクター５のデータが転送される。また時間ｔ４０４からは、ホスト１０４に対してバッファＢ２０２のデータがホストＩ／Ｆ１０６を介して出力される。時間ｔ４０４から時間ｔ４０５までの時間でセクター１とセクター２のデータがホスト１０４に出力される。
【００４８】
時間ｔ４０５はこれまでの同様にバッファのトグルを行うタイミングに相当するので制御回路２０６はバッファのトグルを行う。時間ｔ４０６ではフラッシュメモリＩ／Ｆ１０７からセクター７までのデータの転送を完了する。セクター７のデータの転送はバッファＢ２０２の最後の５１２バイトに転送されるので、ここでバッファＢ２０２へのデータの書き込み転送は一旦終了する。つまり、バッファＢ２０２（またはバッファＡ２０１）の中に同時にセクタードレスの下位３ビットを除くアドレスが異なるアドレスのセクターのデータは格納しないように制御する。セクター８の下位３ビットを除くとアドレスは１であり、セクター７の下位３ビットを除いたアドレスである０とは異なるので、既にセクター７データが格納されたバッファＢ２０２にはセクター８のデータは書き込まれない。
【００４９】
時間ｔ４０７で、バッファＡ２０１に格納されたセクター３〜５のデータのホストＩ／Ｆ１０６への出力は完了し、バッファのトグルが行われる。そして時間ｔ４０７以降は従来と同様のバッファの制御である、バッファサイズである４Ｋバイト（８セクター）単位のバッファの切り替えを行う。
【００５０】
読み出しの最初のページのみ、本発明のバッファの切り替えを行い、以降は従来のバッファの切り替えを行うのは、本発明の効果が最初のページでより顕著であるが、以降はその効果が小さくなるので、より制御が容易な従来の手法を適用するためである。
【００５１】
なお、このバッファ切り替えの制御を切り替えるタイミングは特に先頭ページに限る必要が無く、最初は本発明で説明した制御フローを用いて、その後従来の制御フローに切り替えるのであれば、先頭ページに限る必要は無く、先頭を含む複数ページであっても構わない。
【００５２】
なお、図４のタイミングチャートで特に説明をしていないが、コントローラ１０２はフラッシュメモリ１０３に対してセクター０に続く連続データを読み出すために適宜フラッシュメモリ１０３に対して読み出しコマンドを発行する必要がある。
【００５３】
図５〜図７に図４で示したタイミングチャートを実現するための制御回路２０６における処理のフローチャートを示す。制御回路２０６内部は、主に３つの機能部分、すなわち“対ホストＩ／Ｆフロー”と“対フラッシュメモリＩ／Ｆフロー”と“バッファトグルフロー”からなる。図５は“対ホストＩ／Ｆフロー”を示したフローチャートである。
（ａ）最初にデータの書き込みや読み出しが行われる前は状態５０１ではスタンバイ状態をとる。
（ｂ）ホスト１０４からメモリカード１０１への読み出しコマンドを受けて、状態５０２へと遷移する。状態５０２はトグル許可状態である。“バッファトグルフロー”部に対してトグルを許可する。そして状態５０３に遷移する。
（ｃ）状態５０３はバッファ待ちの状態である。
（ｄ）判定５０４でバッファがトグルされたかどうかを判定し、トグルされれば状態５０５に遷移し、トグルされていなければ状態５０３に戻る。ホスト１０４からメモリカードに読み出しコマンドが発行されると状態５０１から状態５０３までは直ぐに遷移する。図４の時間ｔ４０１では既に状態５０３の状態である。
【００５４】
ここで“対ホストＩ／Ｆフロー”の説明を中断し、図６の“対フラッシュメモリＩ／Ｆフロー”の説明を行う。
（ａ）最初にデータの書き込みや読み出しが行われる前は状態６０１ではスタンバイ状態をとる。
（ｂ）ホスト１０４からメモリカード１０１への読み出しコマンドを受けて、状態６０２へと遷移する。状態６０２は転送許可状態である。フラッシュメモリＩ／Ｆ１０７からのデータの転送を許可する。
（ｃ）そして状態６０３に遷移する。状態６０３は転送待ち状態である。フラッシュメモリＩ／Ｆ１０７からのデータの転送が完了するのを待つ。
（ｄ）判定６０４でセクター単位の転送が終了したかどうかを判定し、終了していなければ状態６０３に戻り、終了していれば判定６０５に遷移する。セクター単位の終了までの期間が図４の時間ｔ４０１〜ｔ４０２の期間に相当する。時間ｔ４０２はちょうどセクター０の転送が終了するタイミングであり判定６０４でセクター単位の転送が終了したと判定し判定６０５へと遷移する。
（ｅ）判定６０５では直前に転送を完了したセクターがバッファの境界にあるかどうかの判定を行う。これは直前に転送を行ったデータがバッファの最後のセクターであるかどうか、つまりセクタードレスの下位３ビットが７かどうかを判定する。最後のセクターであれば状態６１０に遷移する。最後のセクターでなければ（時間ｔ４０２ではセクター０の転送終了後なので最後のセクターではない）判定６０６に遷移する。
（ｆ）判定６０６では、直前の転送セクターが先頭ページに含まれるセクターかどうかと、ホスト側のバッファが待ち状態であるかどうかを判定する。ここでの先頭ページとは先頭の物理ページである４Ｋバイト（８セクター）に含まれているデータであるかどうかということであり、読み出しの先頭のセクターと下位３ビットを除いたセクタードレスが同一かどうかで判定する。これは図４で説明した先頭ページのみ、新しいバッファ切り替えフローを適用するという判定基準に相当する。先頭ページではないかホスト側がバッファ待ちでなければ状態６０２に遷移する。時間ｔ４０２では“対ホストＩ／Ｆフロー”はまだ状態５０３にありバッファ待ち状態なので、状態６０７へと遷移する。
（ｇ）状態６０７ではＥＣＣ１０９に直前に転送し他セクターの訂正指示を行う。そして状態６０８へと遷移する。この際に直前に転送したセクターに誤りが無ければＥＣＣ１０９は訂正指示を受けた後に直ぐに終了する。
（ｈ）状態６０８は訂正終了待ちの状態であり、ＥＣＣ１０９の訂正処理が完了するのを待つ。
（ｉ）判定６０９でＥＣＣ１０９の訂正処理が完了したかどうかを判定し、完了していなければ状態６０８に戻り、完了していれば状態６１０に遷移する。誤りがない場合にはＥＣＣ１０９の処理は直ぐに終了するので、この場合も判定６０９で訂正処理が完了と判定し、状態６１０に遷移する。
図４では誤りがない場合のタイミングチャートを示しているので時間ｔ４０２では状態６０３から判定６０４、判定６０５、判定６０６、状態６０７、状態６０８、判定６０９を経て直ぐに状態６１０に遷移する。
（ｊ）状態６１０ではセクター情報を取得してセクター情報格納部２０７に格納する。
図４では時間ｔ４０２でバッファＡ２０１にセクター０のデータのみが格納されているので、バッファＡ２０１にセクター０が格納されているという情報をセクター情報格納部２０７に格納する。このセクター情報取得はバッファがトグルされた後に、ホストＩ／Ｆ１０６に対してどのセクターに対応するデータが出力可能なのかを示すために必要な情報である。そして状態６１１に遷移する。
（ｋ）状態６１１はトグル許可状態である。“バッファトグルフロー”部に対してトグルを許可する。そして状態６１２に遷移する。
（ｌ）状態６１２はバッファ待ちの状態である。判定６１３でバッファがトグルされたかどうかを判定し、トグルされれば状態６０２に遷移し、トグルされていなければ状態６１２に戻る。
【００５５】
このように時間ｔ４０２で“対ホストＩ／Ｆフロー”も“対フラッシュメモリＩ／Ｆフロー”もバッファ待ちの状態５０３，６１２になる。ここで、“対フラッシュメモリＩ／Ｆフロー”の説明を中断し、図７の“バッファトグルフロー”の説明を行う。
（ａ）最初にデータの書き込みや読み出しが行われる前は状態７０１ではスタンバイ状態をとる。ホスト１０４からメモリカード１０１への読み出しコマンドを受けて、状態７０２へと遷移する。
（ｂ）状態７０２はトグル許可待ち状態である。
（ｃ）“対ホストＩ／Ｆフロー”および“対フラッシュメモリＩ／Ｆフロー”双方がトグル許可したかどうかを判定７０３で判定し、双方とも許可していれば状態７０４に遷移し、どちらか一方でも許可していなければ状態７０２へ戻る。図５および図６で説明したように“対ホストＩ／Ｆフロー”も“対フラッシュメモリＩ／Ｆフロー”も時間ｔ４０２ではトグル許可をしているので、時間ｔ４０２で状態７０４へと遷移する。
（ｄ）状態７０４ではバッファをトグルする。つまりバッファＡ２０１とバッファＢ２０２の接続状態を切り替える。そして状態７０２のトグル許可待ち状態に遷移する。なお、状態７０４でバッファとトグルすることによって“対ホストＩ／Ｆフロー”および“対フラッシュメモリＩ／Ｆフロー”でトグル許可を行ったという情報を一旦リセットされる。つまり２回目以降の判定７０３で行われるトグル許可されたかどうかの判定はその前の状態７０４でのバッファのトグル以降に許可されたかどうかを判定する。
【００５６】
以上、図５〜７を用いて説明した制御回路２０６のフローチャートを使用して、誤り訂正が発生する場合の動作の説明を行う。誤り訂正がある場合のタイミングチャートを図８に示す。
【００５７】
図８において“バッファＡへのアクセス”“バッファＢへのアクセス”“ホストへの出力”は図４と同様の意味を示す。“ＥＣＣ検出回路”はＥＣＣ１０９において誤りを検出する機能部分が動作している期間を示し、フラッシュメモリ１０３からデータおよびＥＣＣ符号を読み出す際に動作する。“ＥＣＣ誤り位置演算回路”はＥＣＣ１０９において誤りの発生したアドレスを演算する期間を示す。“ＥＣＣ訂正回路”はＥＣＣ１０９がフラッシュメモリ１０３から読み出したデータが格納されたバッファメモリ１０８に対して誤りの訂正を行う期間を示す。“ホスト側制御ステート”は図５で説明した“対ホストＩ／Ｆフロー”の状態を、“フラッシュ側制御ステート”は図６で説明した“対フラッシュメモリＩ／Ｆフロー”の状態を示す。
【００５８】
最初に時間ｔ８００にホスト１０４からメモリカード１０１にデータの読み出しコマンドが発行される。ここでは簡単のためにセクター０からの読み出しコマンドが発行されたとする。“対ホストＩ／Ｆフロー”は図５で説明したように時間ｔ８００に状態５０２でトグル許可を行った後、状態５０３でバッファ待ちの状態になる。“対フラッシュメモリＩ／Ｆフロー”は、状態６０３の転送待ちの状態である。ＭＰＵ１０５は読み出しコマンドを理解して、セクター０からのデータが格納されたフラッシュメモリ１０３の物理アドレスを決定し、フラッシュメモリ１０３に対して読み出しコマンドを発行する。フラッシュメモリ１０３はコントローラ１０２からの読み出しコマンドに対応して対応する物理アドレスの物理ページ３０２からデータを読み出してコントローラ１０２に対してデータの転送を開始する。なお、最初の状態としてバッファＡ２０１はフラッシュメモリＩ／Ｆ１０７側と接続され、バッファＢ２０２はホストＩ／Ｆ１０６側と接続されているとする。
【００５９】
時間ｔ８０１ではフラッシュメモリ１０３からフラッシュメモリＩ／Ｆ１０７を介してバッファＡ２０１にセクター０のデータが転送される。時間ｔ８０１から時間ｔ８０２の間にセクター０のデータの転送が終了する。時間ｔ８０２ではフラッシュメモリＩ／Ｆ１０７からセクター単位のデータの転送が終了する。セクター単位の転送終了時かつ、バッファの最終セクターでも無く、先頭ページで、ホスト側がバッファ待ち状態なので“対フラッシュメモリＩ／Ｆフロー”は判定６０４、判定６０５、判定６０６を経て状態６０７へと遷移する。状態６０７で制御回路２０６からＥＣＣ１０９に訂正指示がでるのを受けて時間ｔ８０２から時間ｔ８０３の期間にＥＣＣ１０９が誤り位置の演算を行い、時間ｔ８０３から時間ｔ８０４の期間にＥＣＣ１０９はバッファＡ２０１に格納されたセクター０のデータにある誤りを訂正する。またこの時間ｔ８０２から時間ｔ８０４の期間は“対フラッシュメモリＩ／Ｆフロー”は訂正待ちの状態６０８をとる。時間ｔ８０４でＥＣＣ１０９による訂正が終了したことを受けて、“対フラッシュメモリＩ／Ｆフロー”は、状態６１０でセクター情報格納部２０７に、バッファＡ２０１にセクター０のデータが書き込まれているという情報を格納し、状態６１１でトグル許可を行う。従って時間ｔ８０４では“バッファトグルフロー”は、状態７０４でバッファのトグルを行い、バッファＡ２０１とバッファＢ２０２の接続状態を切り替える。“対ホストＩ／Ｆフロー”は状態５０５でセクター指定転送許可として、ホストＩ／Ｆ１０６に対してセクター０のデータの転送を許可し、状態５０６で転送待ち状態となる。“対フラッシュメモリＩ／Ｆフロー”は状態６０２でフラッシュメモリＩ／Ｆ１０７に転送許可を行い、状態６０３で転送待ち状態になる。
【００６０】
時間ｔ８０４からはバッファＡ２０１のセクター０のデータはホストＩ／Ｆ１０６を経由してホスト１０４に出力される。ここで注目したいのは、フラッシュメモリ１０３からのデータの読み出しが開始される時間ｔ８０１から、ホスト１０４に対するデータの出力が開始されるタイミングｔ８０４までは、フラッシュメモリＩ／Ｆ１０７を介した１セクター分のデータの転送時間と、誤り位置を演算する時間と、誤りを訂正する時間と、しかかからないことである。
【００６１】
以降説明を省略するが、基本的な手順は図４のタイミングチャートに対して、実際に使用するために必要となる誤り訂正の処理を加えたものである。
【００６２】
○本発明の別の動作
従来との比較において注意した点から分かるように、本発明では最初のセクターの読み出しまでの時間を高速化することができる。逆に本発明は連続したセクタードレスからなる大きな容量のデータを読み出す際において相対的に効果は小さくなる。しかしながら、不揮発性記憶装置を取り扱うホスト自身が備える揮発性メモリの容量の制限等がある。そのため、大きな容量のデータを読み出す際に複数回の少ないセクターの読み出しに分割して読み出すホストも少なくはない。特許文献３にはそういったホストの読み出しシーケンスに対応するためにバッファメモリをキャッシュとして使用することで、性能を向上させる方法が示されている。しかし、不揮発性記憶装置内に大きな容量の揮発性メモリを備える必要がある。
【００６３】
本発明では制御回路２０６における処理のフローを切り替えることによって、最初のセクターだけを、速く出力することも可能である。そうすることで単一セクターからなるセクタードレスが連続する読み出しにおいて性能を向上させることができる。先頭セクターのみを高速に出力するための制御回路２０６の“対フラッシュメモリＩ／Ｆフロー”を図９に示す。
【００６４】
図９は、図６のフローチャートと比較して、判定６０６が判定９０６に置き換わっている点で相違する。判定６０６では、先頭ページかつ、ホストがバッファ待ちであることを判定していたが、判定９０６では、先頭セクターであるかどうかを判定している。なお、先頭セクターの時にはホストは先頭セクター以前にデータの出力を行わないためバッファ待ち状態であることが保障される。図９の“対フラッシュメモリＩ／Ｆフロー”を適用した場合のタイミングチャートを図１０に示す。ここでもやはり、フラッシュメモリ１０３からのデータの読み出しが開始される時間ｔ１００１から、ホスト１０４に対するデータの出力が開始されるタイミングｔ１００４までは、フラッシュメモリＩ／Ｆ１０７を介した１セクター分のデータの転送時間と、誤り位置を演算する時間と、誤りを訂正する時間と、しかかからない。
【００６５】
また、ここまではホストからメモリカードへの読み出しコマンドがセクター数を指定しない読み出しコマンドを前提とした動作であった。ホストはメモリカードに対して読み出し開始時に発行する読み出しコマンドと、必要なセクター数を読み出した後に発行する停止コマンドを使用してデータの読み出しを行う。この場合メモリカード内部のコントローラはホストが読み出しを行うセクター数が分からないために最終アドレスのセクターまでデータが読み出されることを前提に動作を開始する必要がある。しかし、ホストがメモリカードに対して読み出しセクター数指定読み出しコマンドを発行することで、メモリカード内部のコントローラの動作をより最適に行うことが出来る。
【００６６】
例えばホストがセクター０とセクター１の２セクターしか読み出さない場合を考える。ホストが読み出しセクター数を指定することなく読み出しコマンドを発行した場合には図８のタイミングチャートのようになる。ただし、時間ｔ８０８でホストは必要なセクターの読み出しを終えて停止コマンドを発行することになる。それに対してホストが読み出しセクター数指定読み出しコマンドを発行する場合のタイミングチャートを図１２に示す。セクター２のデータをフラッシュメモリから読み出し転送する必要がないので、セクター１の誤り訂正の処理が図８に比べては速く行うことが可能である。その結果ホストへのデータの読み出しを高速に行うことが出来る。
【００６７】
なお、本発明を説明するためにバッファメモリ内に揮発性メモリが２面ある構成で説明を行った。しかし、メモリは揮発性である必要はなく、また２面である必要もない。本発明の効果はバッファメモリの接続状態の切り替えを、メモリにデータが埋まってから行うのではなく、ホストへのデータの出力状況と、フラッシュメモリから読み出されたデータの状況から適切にバッファを切り替えることにより高速化を図るものである。またそういった考えから本発明の効果は読み出しに限定されるものではなく、書き込みにおいても適用可能であることは容易に想到可能である。
【産業上の利用可能性】
【００６８】
本発明は、不揮発性半導体装置の書き込みの高速化技術に適用でき、特に、今後書き込み単位が増大していく大容量の不揮発性メモリを使用して不揮発性記憶装置の書き込み性能向上に有用である。
【図面の簡単な説明】
【００６９】
【図１】本発明の不揮発性記憶装置のブロック図
【図２】本発明の不揮発性記憶装置内のバッファメモリのブロック図
【図３】本発明の不揮発性記憶装置内のフラッシュメモリのブロック図
【図４】本発明の不揮発性記憶装置の動作を示すタイミングチャート
【図５】本発明の不揮発性記憶装置のバッファメモリのホスト側制御フローチャート
【図６】本発明の不揮発性記憶装置のバッファメモリのフラッシュメモリ側制御フローチャート
【図７】本発明の不揮発性記憶装置のバッファメモリのトグル制御フローチャート
【図８】本発明の不揮発性記憶装置の動作を示すタイミングチャート
【図９】本発明の不揮発性記憶装置のバッファメモリのフラッシュメモリ側制御フロ
【図１０】本発明の不揮発性記憶装置の動作を示すタイミングチャート
【図１１】本発明の不揮発性記憶装置の動作を示すタイミングチャート
【図１２】従来の不揮発性記憶装置のブロック図
【図１３】従来の不揮発性記憶装置内のバッファメモリのブロック図
【図１４】従来の不揮発性記憶装置の動作を示すタイミングチャート
【図１５】従来の不揮発性記憶装置のバッファメモリのホスト側制御フローチャート
【図１６】従来の不揮発性記憶装置のバッファメモリのフラッシュメモリ側制御フローチャート
【図１７】従来の不揮発性記憶装置の動作を示すタイミングチャート
【図１８】従来の不揮発性記憶装置内のバッファメモリのブロック図
【図１９】小サイズの揮発性メモリで構成したバッファメモリのレイアウト
【図２０】大サイズの揮発性メモリで構成したバッファメモリのレイアウト
【符号の説明】
【００７０】
１０１  メモリカード
１０２  コントローラ
１０３  フラッシュメモリ
１０４  ホスト
１０５  ＭＰＵ
１０６  ホストＩ／Ｆ
１０７  フラッシュメモリＩ／Ｆ
１０８  バッファメモリ
１０９  ＥＣＣ
２０１  バッファＡ
２０２  バッファＢ
２０３  セレクタ
２０４  セレクタ
２０５  セレクタ
２０６  制御回路
２０７  セクター情報格納部
２０８  データ出力情報認識部
３０１  物理ブロック
３０２  物理ページ
１２０１  メモリカード
１２０２  コントローラ
１２０５  ＭＰＵ
１２０６  ホストＩ／Ｆ
１２０７  フラッシュメモリＩ／Ｆ
１２０８  バッファメモリ
１２０９  ＥＣＣ
１３０１  バッファＡ
１３０２  バッファＢ
１３０３  セレクタ
１３０４  セレクタ
１３０５  セレクタ
１３０６  制御回路
【図１】
2010026584.tif 000003
【図２】
2010026584.tif 000004
【図３】
2010026584.tif 000005
【図４】
2010026584.tif 000006
【図５】
2010026584.tif 000007
【図６】
2010026584.tif 000008
【図７】
2010026584.tif 000009
【図８】
2010026584.tif 000010
【図９】
2010026584.tif 000011
【図１０】
2010026584.tif 000012
【図１１】
2010026584.tif 000013
【図１２】
2010026584.tif 000014
【図１３】
2010026584.tif 000015
【図１４】
2010026584.tif 000016
【図１５】
2010026584.tif 000017
【図１６】
2010026584.tif 000018
【図１７】
2010026584.tif 000019
【図１８】
2010026584.tif 000020
【図１９】
2010026584.tif 000021
【図２０】
2010026584.tif 000022