(57)【要約】【課題】ホスト或いはメモリカードにおける既存の回路変更を少なくしてＥＣＣの機能強化を可能とする。【解決手段】ホストとメモリとの間に接続されたＥＣＣ制御装置であって、前記ホストとの間でデータの入力及び出力を行う第１入出力回路と、前記第１入出力回路に入力された所定データ長を有する書き込みデータのうち、保護対象である保護領域とそれ以外の冗長領域とを検出する検出回路と、前記保護領域のデータに対してエラー訂正符号を生成する生成回路と、前記冗長領域に前記訂正符号を挿入する訂正符号挿入回路と、前記メモリとの間でデータの入力及び出力を行う第２入出力回路とを有する。【選択図】      図３
2004280790.tif 000002
【特許請求の範囲】
【請求項１】
ホストとメモリとの間に接続されたＥＣＣ制御装置であって、
前記ホストとの間でデータの入力及び出力を行う第１入出力回路と、
前記第１入出力回路に入力された所定データ長を有する書き込みデータのうち、保護対象である保護領域とそれ以外の冗長領域とを検出する検出回路と、
前記保護領域のデータに対してエラー訂正符号を生成する生成回路と、
前記冗長領域に前記訂正符号を挿入する訂正符号挿入回路と、
前記メモリとの間でデータの入力及び出力を行う第２入出力回路と、
前記第２入出力回路に入力された前記所定データ長を有する読み出しデータに対し、当該読み出しデータが有する前記エラー訂正符号を用いてシンドローム演算を行い且つシンドローム信号を生成するシンドローム回路と、
前記シンドローム信号に基づいてエラーの訂正を行う訂正回路と
を具備することを特徴とするＥＣＣ制御装置。
【請求項２】
前記ホストから入力された前記メモリにデータを書き込み中であることを示すライトイネーブル信号のパルス数と、前記ホストから入力された前記メモリからデータを読み出し中であることを示すリードイネーブル信号のパルス数とを夫々カウントするカウンタと、
前記ライトイネーブル信号と前記リードイネーブル信号とに基づいてクロックを生成し、且つ前記カウンタによりカウントされたパルス数が所定パルス数になった場合に前記ライトイネーブル信号及び前記リードイネーブル信号を前記メモリに出力しないクロック生成回路とをさらに具備することを特徴とする請求項１記載のＥＣＣ制御装置。
【請求項３】
前記ホストが前記メモリにアクセス中であることを示すチップイネーブル信号と同じ信号であるダミーチップイネーブル信号を記憶するレジスタと、
前記ホストから入力された前記チップイネーブル信号を前記メモリに出力する第１モードと、前記ダミーチップイネーブル信号を前記メモリに出力する第２モードとを有し、前記第１モードと第２モードとを切り替えることにより前記チップイネーブル信号或いは前記ダミーチップイネーブル信号を前記メモリに供給するチップイネーブル信号生成回路とをさらに具備することを特徴とする請求項１記載のＥＣＣ制御装置。
【請求項４】
前記ホストから第１コマンドが入力された場合に、以後前記ホストから入力されるコマンドを前記メモリに出力しないよう制御し、一方前記ホストから第２コマンドが入力された場合に、以後前記ホストから入力されるコマンドを前記メモリに出力するよう制御する専用コマンド回路をさらに具備することを特徴とする請求項１記載のＥＣＣ制御装置。
【請求項５】
前記ホストから入力された前記メモリにデータを書き込み中であることを示すライトイネーブル信号に基づいて前記書き込みデータをラッチする第１ラッチ回路と、
前記ホストから入力され且つ前記ライトイネーブル信号を含む複数の制御信号の遅延時間を当該装置の配線遅延に基づいて夫々調整する複数の遅延調整回路と、
前記遅延調整回路により遅延時間を調整された前記ライトイネーブル信号に基づいて前記訂正符号が挿入された前記書き込みデータをラッチする第２ラッチ回路と
をさらに具備することを特徴とする請求項１記載のＥＣＣ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホストから出力されたデータをメモリに記憶し、或いはメモリに記憶したデータをホストが読み出す際に用いられるＥＣＣ（Error Check and Correct)制御装置に係り、特にホストとメモリとの間のバスを中断して挿入されるＥＣＣ制御装置に関する。
【背景技術】
【０００２】
１つのメモリセルが記憶できる情報（値）の数を２値から多値（３値以上）に変更することで、記憶素子としてメモリセルを有する例えばメモリカードの大容量化が可能となる。しかし、メモリセルに多値を用いたメモリカードでは、セル保持データの経年劣化や、データの書き込み及び消去の繰り返し等により、メモリセルが劣化してしまう。これにより、記憶データの信頼性が２値メモリカードに比べて低下してしまう。
【０００３】
このようなメモリセルの信頼性の低下を防止するための方法として、新たなエラー訂正手段を備えた記憶装置が提案されている（特許文献１参照）。
【０００４】
ところが、新たなエラー訂正手段を追加するには、メモリカード或いはメモリカードにデータの書き込み等を行うホストの回路変更等を行う必要がある。また、上記ホストの回路変更を行った場合、新たなエラー訂正手段を制御するためにホストの処理負担が増大してしまう。
【特許文献１】特開２０００−３４９６５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、上記のような事情に鑑みてなされたもので、ホスト或いはメモリにおける既存の回路変更を少なくし、且つホストの処理負担を増やすことなくＥＣＣの機能強化が可能なＥＣＣ制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するために本発明の第１の視点に係るＥＣＣ制御装置は、ホストとメモリとの間に接続されたＥＣＣ制御装置であって、前記ホストとの間でデータの入力及び出力を行う第１入出力回路と、前記第１入出力回路に入力された所定データ長を有する書き込みデータのうち、保護対象である保護領域とそれ以外の冗長領域とを検出する検出回路と、前記保護領域のデータに対してエラー訂正符号を生成する生成回路と、前記冗長領域に前記訂正符号を挿入する訂正符号挿入回路と、前記メモリとの間でデータの入力及び出力を行う第２入出力回路と、前記第２入出力回路に入力された前記所定データ長を有する読み出しデータに対し、当該読み出しデータが有する前記エラー訂正符号を用いてシンドローム演算を行い且つシンドローム信号を生成するシンドローム回路と、前記シンドローム信号に基づいてエラーの訂正を行う訂正回路とを有する。
【発明の効果】
【０００７】
本発明によれば、ホスト或いはメモリにおける既存の回路変更を少なくし、且つホストの処理負担を増やすことなくＥＣＣの機能強化が可能なＥＣＣ制御装置を提供することができる。
【発明を実施するための最良の形態】
【０００８】
以下、このような知見に基づいて構成された本発明の実施の形態について図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する構成要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
【０００９】
図１は、この実施形態の全体構成を示すブロック図である。  
本実施形態では、メモリカードとして例えばＮＡＮＤフラッシュメモリを用いている。また本実施形態では、例えば４個のＮＡＮＤフラッシュメモリからなるＮＡＮＤフラッシュメモリモジュール２を実装している。ホスト３は、ＮＡＮＤメモリインタフェース回路を備えたＮＡＮＤメモリ制御装置等により構成される。またホスト３は、例えばパーソナルコンピュータからなり、ＮＡＮＤフラッシュメモリモジュール２に対してデータの書き込み、或いはデータの読み出し等を行うものであってもよい。さらに、ホスト３とＮＡＮＤフラッシュメモリモジュール２との間に、ＥＣＣコントローラ１を備えている。このＥＣＣコントローラ１は、例えばホスト３が備えるＮＡＮＤメモリインタフェース回路とＮＡＮＤフラッシュメモリモジュール２との間のバスを中断して挿入されている。
【００１０】
ホスト３とＥＣＣコントローラ１とは、例えば８ビットからなる双方向データバスFDH［7:0］（以後、バスFDHと称す）と、４ビットのチップイネーブル（CE［3:0］）信号（以後、CE信号と称す）の信号線５と、リードイネーブル（RE）信号及びライトイネーブル（WE）信号の信号線６と、アドレスラッチイネーブル（ALE）信号及びコマンドラッチイネーブル（CLE）信号の信号線７と、割り込み（INTN）信号の信号線１３とにより接続されている。
【００１１】
ホスト３は、上記モジュール２に対するコマンド、アドレス及びライトデータをバスFDHに出力する。またホスト３は、上記モジュール２から出力されたリードデータ及び上記モジュール２のステータス情報等をバスFDHを介して読み出す。またホスト３は、上記ＥＣＣコントローラ１から出力されるエラー訂正情報等をバスFDHを介して読み出す。
【００１２】
CE信号は、ホスト３が上記モジュール２にアクセス中であることを示す信号である。RE信号は、ホスト３が上記モジュール２からデータを読み出し中であることを示す信号である。WE信号は、ホスト３が上記モジュール２にデータを書き込み中であることを示す信号である。ALE信号は、ホスト３が上記モジュール２にアドレスデータを転送中であることを示す信号である。CLE信号は、ホスト３が上記モジュール２にコマンドデータを転送中であることを示す信号である。CE、RE及びWE信号は、例えばローレベルでアクティブとなる。ALE及びCLE信号は、例えばハイレベルがアクティブとなる。
【００１３】
ＥＣＣコントローラ１と上記モジュール２とは、８ビットの双方向データバスFDN［7:0］（以後、バスFDNと称す）と、４ビットのチップイネーブル（CEo［3:0］）信号（以後、CEo信号と称す）の信号線８と、リードイネーブル（REo）信号及びライトイネーブル（WEo）信号の信号線９と、アドレスラッチイネーブル（ALEo）信号及びコマンドラッチイネーブル（CLEo）信号の信号線１０により接続されている。上記ＥＣＣコントローラ１から出力される各イネーブル信号は、ホスト３から出力される各イネーブル信号に基づいて生成される。この生成処理については後述する。
【００１４】
上記モジュール２とホスト３とは、レディー／ビジー（Ｒ／Ｂ）信号の信号線１１と、その他信号を転送する信号線１２とにより接続されている。なお、ＥＣＣコントローラ１を挿入する場合と挿入しない場合とで変更のない信号は、図１中のその他信号として表示している。Ｒ／Ｂ信号は、上記モジュール２のレディー状態（ハイレベル）或いはビジー状態（ローレベル）を表す信号である。上記モジュール２からデータを読み出す場合、ホスト３はリードコマンドを発行した後、上記モジュール２がレディーになった時点でデータの読み出しが可能となる。
【００１５】
一方上記モジュール２へのデータの書き込む場合、ホスト３は、WE信号を使って上記モジュール２が内蔵するデータバッファへデータを書き込んだ後、プログラムコマンド（上記データバッファからセルへデータを書き込むためのコマンド）を実行する。プログラムコマンドが実行されると、上記モジュール２は、Ｒ／Ｂ信号をビジーにすることで、プログラム実行中であることをホスト３に通知する。さらに、上記モジュール２は、Ｒ／Ｂ信号をレディーにすることで、次のデータ書き込みが可能であることをホスト３に通知する。
【００１６】
図２は、図１に示したＮＡＮＤフラッシュメモリモジュール２の内部構成を示すブロック図である。ＮＡＮＤフラッシュメモリモジュール２は、例えば４個のＮＡＮＤフラッシュメモリ２Ａ，２Ｂ，２Ｃ，２Ｄを備えている。８ビット双方向データバスFDN[7:0]と、ALEo，CLEo，WEo，REo信号の信号線９，１０と、その他信号の信号線１２とは、４個のＮＡＮＤフラッシュメモリ２Ａ〜２Ｄに共通に接続される。４ビットのCEo[3:0]信号の信号線８は、CEo[0]がＮＡＮＤフラッシュメモリ２Ａに、CEo[1]がＮＡＮＤフラッシュメモリ２Ｂに、CEo[2]がＮＡＮＤフラッシュメモリ２Ｃに、CEo[3]がＮＡＮＤフラッシュメモリ２Ｄにそれぞれ接続される。またＮＡＮＤフラッシュメモリ２Ａ〜２Ｄから出力されるＲ／Ｂ信号の信号線１１は、ワイアードロジックによりＮＡＮＤフラッシュメモリモジュール２共通の１ビットのＲ／Ｂ信号としてホスト３に接続される。
【００１７】
なお、ＮＡＮＤフラッシュメモリの個数はこれに限定されず、CEo信号のビット数によって変更可能である。本実施形態では、４ビットのCEo信号を用いている。例えば４ビットのCEo信号のうち、０ビット目はＮＡＮＤフラッシュメモリ２Ａに、１ビット目はＮＡＮＤフラッシュメモリ２Ｂに、２ビット目はＮＡＮＤフラッシュメモリ２Ｃに、３ビット目はＮＡＮＤフラッシュメモリ２Ｄに夫々割り当てられる。各ＮＡＮＤフラッシュメモリは、各自割り当てられたビットがアクティブになることで動作する。なお、ＮＡＮＤフラッシュメモリ２Ａ〜２Ｄの動作は同じである。よって、重複説明を避けるため、以後ＮＡＮＤフラッシュメモリ（以後、ＮＡＮＤメモリと称す）２Ａの動作について説明する。
【００１８】
図３は、ＥＣＣコントローラ１の内部構成を示すブロック図である。ＥＣＣコントローラ１は、データパス／ＥＣＣ回路１００と、イネーブルインターフェース／クロック回路２００と、制御回路３００と、カウンタ４００と、Ｉ／Ｏレジスタ５００とから構成されている。データパス／ＥＣＣ回路（以後、ＤＰ／ＥＣＣ回路と称す）１００は、ライトデータ及びリードデータのデータパス処理と、ＥＣＣコードの生成及びエラー訂正等の処理とを行う。イネーブルインターフェース／クロック回路（以後、ＥＩ／Ｃ回路と称す）２００は、各イネーブル信号の遅延時間調整や、クロック生成等を行う。カウンタ４００は、ライトデータ或いはリードデータのバイト数のカウントと、RE信号或いはWE信号のパルス数のカウントとを行う。Ｉ／Ｏレジスタ５００は、ホスト３から入力されたデータを記憶する。
【００１９】
図４は、制御回路３００の内部構成を示すブロック図である。制御回路３００は、ＤＰ／ＥＣＣ回路１００及びＥＩ／Ｃ回路２００が行う処理に必要な制御信号を生成し、この生成した制御信号を上記２つの回路に夫々出力する。また制御回路３００は、バス監視回路３０１と、コマンド／アドレス出力回路３０２と、書き込み回路３０３と、読み出し回路３０４とを備えている。
【００２０】
バス監視回路３０１は、バスFDH及びFDNの入出力データの監視を行う。ＥＣＣコントローラ１の入出力データがない時は、バスFDH及びFDNにデータを出力しない。これは、バス監視回路３０１が、制御信号NOUTE及びHOUTEを生成し、これらの制御信号を後述するＤＰ／ＥＣＣ回路１００内のトライステートバッファ１０６及び１１１に入力することにより行う。これにより、バスを中断して挿入されたＥＣＣコントローラ１から余分なデータが出力されず、ホスト３或いはＮＡＮＤメモリ２Ａの誤動作を防止することが可能となる。
【００２１】
コマンド／アドレス出力回路３０２は、ホスト３が出力したコマンド及びアドレスの検出及びコマンド及びアドレスをＮＡＮＤメモリ２Ａに転送するための制御を行う。また、各制御信号を生成してＤＰ／ＥＣＣ回路１００に出力する。
【００２２】
書き込み回路３０３は、ライトデータ及びＥＣＣコードの書き込み制御を行う。またカウンタ４００を使用してブロックデータのバイト数をカウントし、厳密なタイミングでＥＣＣコードの挿入を行う。また書き込み回路３０３は、各制御信号を生成してＤＰ／ＥＣＣ回路１００に出力する。
【００２３】
読み出し回路３０４は、リードデータの読み出し制御を行う。また、訂正回路１１４等を使用してエラー訂正を実行し、訂正回路１１４が生成した各情報をホスト３に転送する。また読み出し回路３０４は、各制御信号を生成してＤＰ／ＥＣＣ回路１００に出力する。
【００２４】
さらに制御回路３００は、クロック生成回路３０５と、ＣＥ信号生成回路３０６と、割り込み回路３０７と、ＥＣＣ領域変更回路３０９と、専用コマンド回路３１０とを備えている。
【００２５】
クロック生成回路３０５は、WE／REクロック代用モードの切り替えを行う。またクロック生成回路３０５は、WE／REクロック代用モード時のクロック生成制御を行う。ＥＣＣコントローラ１は、ホスト３から取得したクロック（ＤＣＬＫ）を使用する通常のクロックモードと、RE信号或いはWE信号を使用してＥＣＣコントローラ１の動作に必要なクロック（CLK）を生成するWE／REクロック代用モードとを備える。さらにクロック生成回路３０５は、WE／REクロック代用モードが選択された場合には、カウンタ４００によるカウント値を使用して、ＮＡＮＤメモリ２Ａに不要なRE信号及びWE信号を厳密なタイミングでマスクする機能を備えている。
【００２６】
ＣＥ信号生成回路３０６は、ダイナミックＣＥモードとスタティックＣＥモードとを制御する。ＥＣＣコントローラ１は、チップイネーブル信号の出力方法として、ホスト３から入力されるCE信号に基づいてCEo信号を出力するダイナミックＣＥモードと、Ｉ／Ｏレジスタ５００に書き込んだチップイネーブル信号を出力するスタティックＣＥモードとを備えている。ＣＥ信号生成回路３０６は、上記２つのモードの切り替えを行う。またＣＥ信号生成回路３０６は、スタティックＣＥモードが選択された場合に、スタティックＣＥ信号をＮＡＮＤメモリ２Ａに出力する。
【００２７】
割り込み回路３０７は、割り込み信号をアクティブにし、ホスト３に対して割り込み制御を行う。また割り込み回路３０７は、エラー情報出力回路３０８を備えている。エラー情報出力回路３０８は、上記割り込み信号のアクティブ時、後述する訂正回路１１４が生成したエラー訂正処理の結果を表す各情報を、上記割り込み信号のアクティブと同時にホスト３に出力する。
【００２８】
ＥＣＣ領域変更回路３０９は、ＥＣＣコントローラ１が生成したＥＣＣコードをブロックデータに挿入する位置を、後述する各データフォーマットに基づいて変更する。またＥＣＣ領域変更回路３０９は、ＥＣＣコードを挿入するタイミングを制御し、このタイミングに基づいて制御信号NDOSを生成する。
【００２９】
専用コマンド回路３１０は、ホスト３から入力されるＥＣＣコントローラ１用の命令として定義された専用コマンドを検出すると、以後ホスト３から入力されるコマンドをＮＡＮＤメモリ２Ａに出力しないように制御する。
【００３０】
図５は、ＥＩ／Ｃ回路２００の回路構成を示すブロック図である。  
ＥＩ／Ｃ回路２００に入力されたCE信号は、４入力ＮＡＮＤ回路２０１とセレクタ２０２に入力される。なお前述したように、当該ＥＣＣコントローラ１は、チップイネーブルのモードとしてダイナミックＣＥモードとスタティックＣＥモードとを備えている。通常、ＥＣＣコントローラ１はダイナミックＣＥモードで動作する。このダイナミックＣＥモードでは、セレクタ２０２はホスト３から入力されるCE信号をスルー出力する。スタティックＣＥモードについては後述する。セレクタ２０２から出力された信号は、遅延回路２０３により所定時間遅延され、バッファ２０４を介して信号線８からCEo信号として出力される。４入力ＮＡＮＤ回路２０１から出力された信号（CEiN）は、ＮＡＮＤ回路２０７とＮＡＮＤ回路２１５とに入力される。
【００３１】
ＥＩ／Ｃ回路２００に入力されたWE信号は、遅延回路２０５とＮＡＮＤ回路２０７とセレクタ２０８とＡＮＤ回路２２１とに入力される。遅延回路２０５に入力されたWE信号は、所定時間遅延され、バッファ２０６を介してクロックWE_CLKとして出力される。ＮＡＮＤ回路２０７から出力された信号は、セレクタ２０８に入力される。セレクタ２０８は、ダイナミックＣＥモードではWE信号を選択する。セレクタ２０８から出力された信号は、ＮＯＲ回路２０９に入力される。またＮＯＲ回路２０９には、制御回路３００から出力されるマスク信号MSK_WEが入力される。ＮＯＲ回路２０９から出力された信号は、遅延回路２１０により所定時間遅延され、インバータ回路２１１に入力される。インバータ回路２１１から出力された信号は、WEo信号として出力される。またインバータ回路２１１から出力された上記信号は、バッファ２１２を介してクロックWEo_CLKとして出力される。
【００３２】
ＥＩ／Ｃ回路２００に入力されたRE信号は、遅延回路２１３とＮＡＮＤ回路２１５とセレクタ２１６と上記ＡＮＤ回路２２１とに入力される。遅延回路２１３に入力されたRE信号は、所定時間遅延され、バッファ２１４を介してクロックRE_CLKとして出力される。ＮＡＮＤ回路２１５から出力された信号は、セレクタ２１６に入力される。セレクタ２１６は、ダイナミックＣＥモードではRE信号を選択する。セレクタ２１６から出力された信号は、ＮＯＲ回路２１７に入力される。またＮＯＲ回路２１７には、制御回路３００から出力されるマスク信号MSK_REが入力される。ＮＯＲ回路２１７から出力された信号は、遅延回路２１８により所定時間遅延され、インバータ回路２１９に入力される。インバータ回路２１９から出力された信号は、REo信号として出力される。またインバータ回路２１９から出力された上記信号は、バッファ２２０を介してクロックREo_CLKとして出力される。
【００３３】
ＡＮＤ回路２２１から出力された信号は、セレクタ２２２に入力される。セレクタ２２２は、ＡＮＤ回路２２１から入力された信号とダイレクトクロック（DCLK）とのいずれかを、制御回路３００から入力される制御信号DCLKSELに基づいて選択する。セレクタ２２２から出力された信号は、遅延回路２２３により所定時間遅延され、バッファ２２４を介してクロックCLKとして出力される。クロックCLKは、当該ＥＣＣコントローラ１のクロックとして使用される。
【００３４】
ＥＩ／Ｃ回路２００に入力されたCLE信号は、遅延回路２２５により所定時間遅延され、バッファ２２６を介してCLEo信号として出力される。上記ＥＩ／Ｃ回路２００に入力されたALE信号は、遅延回路２２７により所定時間遅延され、バッファ２２８を介してALEo信号として出力される。
【００３５】
遅延回路２０３，２０５，２１０，２１３，２１８，２２３，２２５，２２７の遅延時間は、ＥＣＣコントローラ１内部の配線遅延を同一に揃え、かつホスト３のバスタイミングを保つことができる値に設定される。これにより、ＥＣＣコントローラ１を挿入したことにより、ＥＣＣコントローラ１内の各配線の長さの違いによる信号遅延を統一することができる。よって、ホスト３から入力された各イネーブル信号の相互間のタイミングが保持されてＮＡＮＤメモリ２Ａに出力される。
【００３６】
図６は、ＤＰ／ＥＣＣ回路１００の回路構成を示す図である。  
バスFDHから入力されたデータは、バッファ１０１に入力される。バッファ１０１から出力されたデータは、信号線FDHIを介してセレクタ１０５とフリップフロップ１０２に入力される。フリップフロップ１０２は、クロックWE_CLKに基づいて入力データのラッチを行う。フリップフロップ１０２から出力されたデータは、８ビットからなる信号線HDI_WEi［7:0］を介してセレクタ１０３とセレクタ１１２とに入力される。セレクタ１１２に入力されたデータは、制御回路３００から入力される制御信号DINSにより選択され、８ビットからなる信号線DIN［7:0］を介してＥＣＣ回路１２０内の訂正符号／シンドローム回路１１３に入力される。なお、ＥＣＣ回路１２０は、訂正符号／シンドローム回路１１３と訂正回路１１４とを含む。
【００３７】
訂正符号／シンドローム回路１１３は、ホスト３からＮＡＮＤメモリ２Ａに書き込むライトデータに対して、ＥＣＣコード（誤り訂正符号として、例えばリードソロモン（Reed−Solomon）符号を用いる）を生成する。この生成されたＥＣＣコードは、８ビットからなる信号線CODE［7:0］を介してセレクタ１０３に入力される。セレクタ１０３は、制御回路３００から入力される制御信号NDOSに基づいて、上記ライトデータに上記ＥＣＣコードを挿入する。セレクタ１０３から出力されたデータは、フリップフロップ１０４に入力される。
【００３８】
フリップフロップ１０４は、クロックWEo_CLKに基づいて入力データのラッチを行う。フリップフロップ１０４から出力されたデータは、８ビットからなる信号線NDO_WEoN［7:0］を介してセレクタ１０５に入力される。セレクタ１０５は、制御回路３００から入力される制御信号FDHISに基づいて、８ビットからなる信号線FDHI［7:0］のデータを出力するか、或いは８ビットからなる信号線NDO_WEoN［7:0］のデータを出力するかを選択する。セレクタ１０５から出力されたデータは、８ビットからなる信号線NDHO［7:0］を介してトライステートバッファ１０６に入力される。トライステートバッファ１０６は、制御回路３００から入力される制御信号NOUTEに基づいてデータの出力を行う。トライステートバッファ１０６から出力されたデータは、上記バスFDNからＮＡＮＤメモリ２Ａへ出力される。
【００３９】
一方、バスFDNから入力された読み出しデータは、バッファ１０７に入力される。なお、バッファ１０１，１０７は、外部回路との相互作用防止等のために用いられている。バッファ１０７から出力されたデータは、８ビットからなる信号線NDHI［7:0］を介してフリップフロップ１０８に入力される。フリップフロップ１０８は、クロックRE_CLKに基づいて入力データのラッチを行う。フリップフロップ１０８から出力されたデータは、８ビットからなる信号線NDI_REo［7:0］を介してセレクタ１０９とセレクタ１１２に入力される。セレクタ１１２に入力されたデータは、制御回路３００から入力される制御信号DINSにより選択され、８ビットからなる信号線DIN［7:0］を介して訂正符号／シンドローム回路１１３に入力される。
【００４０】
訂正符号／シンドローム回路１１３は、ホスト３がＮＡＮＤメモリ２Ａから読み出すリードデータに対して、ＥＣＣコードを用いてシンドローム演算を行う。このシンドローム演算の結果生成されたシンドロームは、訂正回路１１４に入力される。訂正回路１１４は、上記シンドロームを基に、エラーデータの有無を判定する。エラーデータがなければ、正常に読み出しが行われた旨の正常終了情報を生成し、この正常終了情報を出力する。
【００４１】
一方、エラーデータがあった場合は、訂正回路１１４は訂正情報を生成する。さらに、訂正回路１１４は、訂正処理が正常に終了した旨の訂正終了情報を生成し、上記訂正終了情報及び訂正情報を出力する。ところで、エラーデータがあった場合において、訂正回路１１４は、５シンボル以上のエラーデータを検出した場合には訂正不可能であると判定する。そして訂正回路１１４は、上記訂正不可能である旨の異常終了情報を生成し、この異常終了情報を出力する。
【００４２】
訂正回路１１４から出力されたデータは、８ビットからなる信号線ADRS/EDATA［7:0］を介してセレクタ１０９に入力される。セレクタ１０９は、制御回路３００から入力される制御信号HDOSにより選択されたデータを出力する。セレクタ１０９から出力されたデータはフリップフロップ１１０に入力される。フリップフロップ１１０は、入力されたデータをクロックREo_CLKでラッチする。フリップフロップ１１０から出力されたデータは、８ビットからなる信号線HDO_REiN［7:0］を介してトライステートバッファ１１１に入力される。トライステートバッファ１１１は、制御回路３００から入力される制御信号HOUTEに基づいてデータの出力を行う。トライステートバッファ１１１から出力されたデータは、バスFDHからホスト３へ出力される。
【００４３】
図７は、本実施形態で採用するブロックデータのフォーマットを示す図である。本実施形態において、データは所定のバイト数を有するブロック単位で取り扱われる。１ブロックは、例えば５２８バイトで構成される。この１ブロックは、ユーザ領域５１２バイトと冗長領域１６バイトとに分けられる。例えば、ユーザ領域が１６Ｍバイトのメモリカードは、上記ブロックを３２Ｋ個備える。ＥＣＣの符号化方式は、例えばリードソロモン符号を使用し、４シンボル（１シンボルが１０ビット）のエラー訂正を行う。ユーザ領域５１２バイトのデータに対しては、８シンボル（８０ビット）、すなわち１０バイトのＥＣＣコードを生成する。
【００４４】
図７において、フォーマット０は、ユーザ領域の直後にＥＣＣコードを挿入する形式である。フォーマット１は、ユーザ領域の後に１バイトの冗長領域を設け、その後にＥＣＣコードを挿入する形式である。フォーマット２は、ユーザ領域の後に２バイトの冗長領域を設け、その後にＥＣＣコードを挿入する形式である。フォーマット３は、ユーザ領域の後に３バイトの冗長領域を設け、その後にＥＣＣコードを挿入する形式である。フォーマット４は、ユーザ領域の後に４バイトの冗長領域を設け、その後にＥＣＣコードを挿入する形式である。フォーマット５は、ユーザ領域の後に５バイトの冗長領域を設け、その後にＥＣＣコードを挿入する形式である。フォーマット６は、ユーザ領域の後に６バイトの冗長領域を設け、その後にＥＣＣコードを挿入する形式である。
【００４５】
なお、フォーマット６において、ユーザ領域５１２バイトに更に冗長領域６バイトをユーザに割り当てることも可能である。この場合は、ユーザ領域５１２バイトに上記冗長領域６バイトを加えた保護対象データ５１８バイトに対して、１０バイトのＥＣＣコードを生成する。これにより、５１８バイトをユーザ領域として使用可能となる。フォーマットの種類と保護対象データの選択（５１２バイト／５１８バイト）は、例えばＩ／Ｏレジスタ５００内のモードレジスタ５０１にホスト３が予め設定する。なお、本実施形態では、５１８バイトを保護対象データとしたフォーマット６を使用する。
【００４６】
以下、図３のように構成されたＥＣＣコントローラ１の動作を説明する。  
先ず、ホスト３から入力されるコマンド及びアドレスの出力動作を説明する。図８は、コマンド及びアドレスの出力動作のタイミングチャートを表す図である。  
ホスト３は、コマンドＣＭＤ（例えばブロックライトコマンド）をＮＡＮＤメモリ２Ａに転送するため、WE信号をアクティブ（ローレベル）及びCLE信号をアクティブ（ハイレベル）にし、続いてコマンドＣＭＤをバスFDHに出力する。するとＥＩ／Ｃ回路２００は、WEo信号及びCLEo信号をＮＡＮＤメモリ２Ａに出力する。さらにＤＰ／ＥＣＣ回路１００は、コマンドＣＭＤをラッチせずにバスFDNへ出力する。これは、コマンド／アドレス出力回路３０２が、信号線FDHIのデータを選択する旨の制御信号FDHISを生成してセレクタ１０５の制御端子に入力することにより行う。ＮＡＮＤメモリ２Ａは、WEo信号の立上がりエッジでコマンドＣＭＤを読み取る。後述する各データの読み込みは、同様の方法で行われる。
【００４７】
次に、ホスト３は、WE信号をアクティブ及びALE信号をアクティブ（ハイレベル）にし、続いてアドレス（ＡＤＲＳ１及びＡＤＲＳ２）をバスFDHに出力する。すると、ＥＩ／Ｃ回路２００は、ＮＡＮＤメモリ２Ａに対してALEo信号を出力する。さらにＤＰ／ＥＣＣ回路１００は、ＡＤＲＳ１及びＡＤＲＳ２をラッチせずにバスFDNへ出力する。これでデータの書き込みが可能となる。ＮＡＮＤメモリ２Ａからデータの読み出しを行う場合も同様である。なお、本実施形態では、アドレスは例えば４バイト（ＡＤＲＳ１〜ＡＤＲＳ４）で構成される。また、コマンドＣＭＤ及びアドレスＡＤＲＳ１〜ＡＤＲＳ４は、夫々１バイトで構成される。
【００４８】
次に、データの書き込み動作を説明する。図９は、データの書き込み動作のタイミングチャートを表す図である。  
ホスト３がバスFDHにライトデータＷＤ１（１バイトからなる）を出力すると、ＥＣＣコントローラ１はこのライトデータＷＤ１をＤＰ／ＥＣＣ回路１００に入力する。次にＤＰ／ＥＣＣ回路１００は、ライトデータＷＤ１をクロックWE_CLKの立上がりでラッチして８ビットからなる信号線HDI_WEi［7:0］に出力する。このように、各ライトデータをクロックWE_CLKに同期させることで、制御回路３００の同期設計を容易にすることができる。
【００４９】
次にＤＰ／ＥＣＣ回路１００は、ライトデータＷＤ１をクロックWEo_CLKの立ち下がりでラッチして８ビットからなる信号線NDO_WEoN［7:0］に出力する。このように、各ライトデータをクロックWEo_CLKでラッチすることで、ＥＣＣコントローラ１内の配線遅延を考慮する必要が無いため、レイアウト設計が容易になる。そしてＥＣＣコントローラ１は、ライトデータＷＤ１をバスFDNからＮＡＮＤメモリ２Ａに出力する。後続のライトデータＷＤ２及びＷＤ３についても同様の処理を行う。
【００５０】
なおＥＣＣコントローラ１は、ライトデータを、８ビットからなる信号線FDHI［7:0］を使用してラッチせずに出力させることも可能である。この場合、書き込み回路３０３は、信号線FDHIにより転送されるデータを選択する旨の制御信号FDHISを生成してセレクタ１０５に入力する。これにより、ホスト３から出力されたライトデータが、ラッチされずにＮＡＮＤメモリ２Ａへ出力される。
【００５１】
次に、データの読み出し動作を説明する。図１０は、データの読み出し動作のタイミングチャートを表す図である。  
ＮＡＮＤメモリ２ＡがバスFDNにリードデータＲＤ１（１バイトからなる）を出力すると、ＥＣＣコントローラ１はこのリードデータＲＤ１をＤＰ／ＥＣＣ回路１００に入力する。ＤＰ／ＥＣＣ回路１００は、リードデータＲＤ１をクロックRE_CLKの立ち上がりでラッチして８ビットからなる信号線NDI_REo［7:0］に出力する。次にＤＰ／ＥＣＣ回路１００は、リードデータＲＤ１をクロックREo_CLKの立下りでラッチして８ビットからなる信号線HDO_REiN［7:0］に出力する。そしてＥＣＣコントローラ１は、リードデータＲＤ１をバスFDHからホスト３に出力する。後続のリードデータＲＤ２及びＲＤ３についても同様の処理を行う。
【００５２】
なお、ＥＣＣコントローラ１がリードデータをラッチせずに出力すると、ＥＣＣコントローラ１内部の配線遅延により、ホスト３でのリードデータ読み取り時のセットアップマージンが減少する。ＥＣＣコントローラ１が行うリードデータのラッチ処理は、これを回避するために有効である。なお、上記セットアップマージンを確保するためにラッチを行った場合、図１０に示すようにホスト３が出力するRE信号に対してリードデータが１サイクル遅れてホスト３に出力される。この場合、予めホスト３に対して最初のRE信号がアクティブ時には、リードデータが出力されない旨を通知しておく。
【００５３】
次に、保護対象データが５１８バイトである上記フォーマット６のブロックデータから構成されるライトデータの書き込み動作を説明する。図１１は、上記ライトデータの書き込み動作のフローを示す図である。図１２は、上記ライトデータの書き込み動作におけるタイミングチャートを示す図である。
【００５４】
ホスト３がライトデータの書き込みを行うための命令であるブロックライトコマンドを実行したとする。書き込み回路３０３は、上記ブロックライトコマンドを検知してデータ書き込み処理を開始する。書き込み回路３０３は、例えば上記ブロックライトコマンドを検知してカウンタ４００によりバスFDHから入力されたライトデータＷＤ１〜５１８（ライトデータＷＤ１〜ＷＤ５１２と、冗長部ライトデータＷＤ５１３〜ＷＤ５１８とからなる）のバイト数のカウントを開始する。なお、バスFDHから入力されたライトデータＷＤ１〜５１８は、クロックWE_CLKによりラッチされる。そして書き込み回路３０３は、上記ライトデータＷＤ１〜５１８を選択する旨の制御信号NDOSを生成し、セレクタ１０３の制御端子に入力する。また書き込み回路３０３は、上記ライトデータＷＤ１〜５１８を選択する旨の制御信号DINSを生成し、セレクタ１１２の制御端子に入力する。
【００５５】
訂正符号／シンドローム回路１１３は、セレクタ１１２から入力されたライトデータＷＤ１〜５１８に対するＥＣＣコード（１０バイトからなる）を生成する。なおホスト３は、保護対象データを出力した後、WE信号と共にダミーライトデータＤＭＹ１〜１０を出力する。このダミーライトデータＤＭＹ１〜１０は、どんなデータでもかまわない。次に書き込み回路３０３は、上記生成したＥＣＣコードＣＯＤＥ１〜１０を保護対象データの後ろに挿入するために、制御信号NDOSを生成してセレクタ１０３に入力する。これにより、セレクタ１０３は、ダミーライトデータＤＭＹ１〜１０に替えてＥＣＣコードＣＯＤＥ１〜１０を出力する。
【００５６】
ＤＰ／ＥＣＣ回路１００は、セレクタ１０３から出力されたＥＣＣコードが挿入されたブロックデータをクロックWEo_CLKでラッチする。この際、書き込み回路３０３は、ライトデータＷＤ５１８の直後のWE信号を１パルス分マスクするため、マスク信号MSK_WE（ハイレベル）を生成してＮＯＲ回路２０９に入力する。WE信号をマスクするタイミングは、カウンタ４００のカウント値を使用して決定する。これにより、ＮＡＮＤメモリ２Ａは、ダミーライトデータＤＭＹ１を書き込まない。
【００５７】
次に書き込み回路３０３は、上記ラッチされたライトデータ及びＥＣＣコードを選択する旨の制御信号FDHISを生成してセレクタ１０５の制御端子に入力する。ＥＣＣコントローラ１は、セレクタ１０５から出力されたデータをＮＡＮＤメモリ２Ａに順次転送する。
【００５８】
一方ホスト３は、プログラムコマンドを実行してCLE信号及びWE信号をアクティブにする。なお、ＮＡＮＤメモリ２Ａは、ＥＣＣコントローラ１から入力されたデータをデータバッファに記憶している。そして、ＮＡＮＤメモリ２Ａは、上記プログラムコマンドが実行されると、データバッファに記憶しているデータをメモリセルに書き込む。次にホスト３は、ＮＡＮＤメモリ２Ａのステータスを検出するためのステータスリードコマンドを実行し、Ｒ／Ｂ信号をポーリング（polling）する。そして、Ｒ／Ｂ信号がレディーになるのを検出した時点で、当該ライトデータの書き込みを完了し、必要に応じて次のブロックライトコマンドを実行する。
【００５９】
次に、ＮＡＮＤメモリ２Ａからのリードデータの読み出し動作を説明する。図１３は、上記リードデータの読み出し動作のフローを示す図である。  
ホスト３がリードデータの読み出しを行うための命令であるブロックリードコマンドを実行したとする。ＥＣＣコントローラ１は、バスFDHを介して上記ブロックリードコマンドを検知してデータ読み出し処理を開始すると共に、このブロックリードコマンドをＮＡＮＤメモリ２Ａに出力する。次にＥＣＣコントローラ１は、ホスト３が出力したアドレスをＮＡＮＤメモリ２Ａに出力する。次にホスト３は、Ｒ／Ｂ信号をポーリングし、レディーを検出すると、ＮＡＮＤメモリ２Ａからリードデータの転送を開始する。
【００６０】
ＤＰ／ＥＣＣ回路１００は、バスFDNから入力されたリードデータ５２８バイト（リードデータＲＤ１〜ＲＤ５１２と、冗長部リードデータＲＤ５１３〜ＲＤ５１８と、ＥＣＣコードＣＯＤＥ１〜ＣＯＤＥ１０とからなる）をクロックRE_CLKによりラッチする。次に読み出し回路３０４は、このリードデータを選択する旨の制御信号HDOSを生成してセレクタ１０９の制御端子に入力する。また読み出し回路３０４は、上記ラッチされたリードデータを選択する旨の制御信号DINSを生成してセレクタ１１２の制御端子に入力する。
【００６１】
次に訂正符号／シンドローム回路１１３は、セレクタ１１２から入力されたリードデータＲＤ１〜５１８に対し、ＥＣＣコードＣＯＤＥ１〜１０を用いてシンドローム信号を生成する。判定回路１１５は、上記シンドローム信号に基づいてエラーデータの有無を判定する。判定回路１１５によりエラーデータが検出されなかった場合、情報生成回路１１６は上記正常終了情報を生成する。そして訂正回路１１４は、処理結果通知として上記正常終了情報を出力する。読み出し回路３０４は、この正常終了情報を選択する旨の制御信号HDOSを生成してセレクタ１１２の制御端子に入力する。
【００６２】
一方、訂正回路１１４は、エラーデータを検出した場合には、訂正処理を実行する。すなわち、判定回路１１５によりエラーデータが検出された場合、情報生成回路１１６はエラーデータのアドレスと訂正に必要なエラー差分情報とからなる訂正情報を生成する。エラー差分情報とは、ホスト３が読み込んだリードデータと当該エラー差分情報との排他的論理和を演算することで期待値（エラーが発生していないデータ）を得ることができる情報である。
【００６３】
訂正処理が終了した場合、情報生成回路１１６は上記訂正終了情報を生成する。そして訂正回路１１４は、上記訂正終了情報及び訂正情報を出力する。読み出し回路３０４は、上記訂正終了情報及び訂正情報を選択する旨の制御信号HDOSを生成してセレクタ１０９の制御端子に入力する。また情報生成回路１１６は、エラーの有無を表すエラー有無情報及びエラーデータの数を表すエラー数情報を生成する。そして、訂正回路１１４は、エラー有無情報及びエラー数情報を訂正情報に含めて出力するようにしてもよい。
【００６４】
なお、訂正回路１１４は、エラーデータを検出した場合において、５シンボル以上のエラーデータを検出すると、エラー訂正が不可能であると判定する。すなわち、判定回路１１５は、エラーデータを検出した場合、さらにエラーデータ数が５シンボル以上であるか否かを判定する。判定回路１１５により５シンボル以上であると判定された場合、情報生成回路１１６は上記異常終了情報を作成する。なお、上記５シンボルは一例であり、回路によって任意に設定可能である。そして訂正回路１１４は、上記異常終了情報を出力する。読み出し回路３０４は、上記異常終了情報を選択する旨の制御信号HDOSを生成してセレクタ１０９の制御端子に入力する。
【００６５】
ＤＰ／ＥＣＣ回路１００は、セレクタ１０９から出力された各データをクロックREo_CLKによりラッチする。そして、ＥＣＣコントローラ１は、リードデータ及び各情報をホスト３に出力する。同様に、ＥＣＣコントローラ１は、次のリードデータの読み出し処理を実行する。
【００６６】
次に、クロック生成回路３０５によるWE／REクロック代用モードの動作について説明する。  
ＮＡＮＤメモリ２ＡとしてクロックDCLKを持たないバスプロトコルを使用するメモリカードが用いられる場合には、ＥＣＣコントローラ１を駆動するための上記クロックDCLKが得られない。ここで上記クロックDCLKとは、ホスト３から入力されるデータにより得られるクロック、或いはホスト３から直接入力されるクロックである。このため、ＥＣＣコントローラ１は、WE／REクロック代用モードを実行する。WE／REクロック代用モードへの切り替えは、ユーザが例えば外部入力手段から設定してもよいし、ホスト３を経由して設定するようにしてもよい。また、ＥＣＣコントローラ１がクロックを持たないメモリカードを検出する機能を備え、自動的に設定するようにしてもよい。なお、WE／REクロック代用モードでは、ホスト３はデータの書き込み及び読み出しを行っていない場合でもＥＣＣコントローラ１の内部処理のためにWE信号或いはRE信号を余分に出力している。
【００６７】
クロック生成回路３０５は、WE／REクロック代用モードが選択されると、WE信号とRE信号とのＡＮＤ信号をクロックCLKとして選択する旨の制御信号DCLKSELを生成し、セレクタ２２２の制御端子に入力する。これにより、ＥＣＣコントローラ１は、WE信号とRE信号とのＡＮＤ信号をクロックCLKとして使用可能となる。次にクロック生成回路３０５は、例えばホスト３からブロックライトコマンドとアドレスとが入力されたのを検出すると、カウンタ４００を起動する。カウンタ４００は、この時点からWE信号のパルスのカウントを開始する。
【００６８】
次にクロック生成回路３０５は、カウンタ４００のカウント値が上記データフォーマットに基づいた所定の値（本実施形態では、１ブロックが５２８バイトなので、カウント値は５２８）になるのを検出すると、パルスをマスクするためにマスク信号MSK_WE（ハイレベル）を生成して、ＮＯＲ回路２０９に入力する。そして、ＮＯＲ回路２０９を介して出力されるWEo信号は、厳密なタイミングでマスクされる。例えば１ブロックのライトデータをＮＡＮＤメモリ２Ａに書き込む場合、WE信号のパルスを５２８個出力し、その後のWE信号をマスクする。RE信号においても同様である。
【００６９】
これにより、ホスト３がＥＣＣコントローラ１の内部処理のためにWE信号或いはRE信号を余分に出力してもＮＡＮＤメモリ２Ａに不要なWE信号或いはRE信号はマスクされる。よって、ＮＡＮＤメモリ２Ａが誤動作するのを防止できる。
【００７０】
次に、ＣＥ信号生成回路３０６によるスタティックＣＥモードの動作について説明する。ＥＣＣコントローラ１が４個のＮＡＮＤメモリ２Ａ〜２Ｄを制御するものとする。ホスト３が４個のＮＡＮＤメモリ２Ａ〜２Ｄに対して４つのチップイネーブル（ＣＥ）信号を独立に割り当てることが可能なシステムでは、通常のダイナミックＣＥモードを使用する。このダイナミックＣＥモードにおいて、ＥＣＣコントローラ１はホスト３から入力されたCE［3:0］信号を、指定されたＮＡＮＤメモリにCEo［3:0］信号として出力する。なお、本実施形態ではCE［3:0］信号は４ビットからなるため、４個のメモリを同時に制御可能である。
【００７１】
一方、ホスト３がＮＡＮＤフラッシュメモリモジュール２に対して１つのＣＥ信号しかアクティブにできないシステムであり、４個のＮＡＮＤメモリ２Ａ〜２Ｄに対して１つのＣＥ信号しか割り当てがない場合には、ＥＣＣコントローラ１はスタティックＣＥモードを実行することで、４個のＮＡＮＤメモリ２Ａ〜２Ｄを制御可能になる。
【００７２】
通常、ＥＣＣコントローラ１は、ホスト３からのCE信号をそのままスルーでCEo信号としてＮＡＮＤメモリ２Ａに出力するが、ホスト３がモードレジスタ５０１を設定することで、スタティックＣＥモードで動作する。スタティックCEモードでは、ＥＣＣコントローラ１はスタティックCEレジスタ５０２に設定されたデータをCEo信号として出力する。
【００７３】
ＮＡＮＤメモリ２Ａのページデータプログラム期間（ＮＡＮＤメモリ２Ａが内蔵するデータバッファからセルへのデータ書き込み期間）は数msecオーダーかかり、ページデータリードビジー期間(ＮＡＮＤメモリ２Ａが内蔵するデータバッファへのセル保持データ書き込み期間)は数百μsecオーダーかかる。この期間中、ホスト３がＮＡＮＤメモリ２ＡへのCE信号をアクティブにし続けると、ホストはホストバス上の他の周辺デバイスへのアクセスができず、システム全体の処理効率が低下する。これを回避したい場合は、ホスト３がＥＣＣコントローラ１をスタティックＣＥモードにする。
【００７４】
するとＣＥ信号生成回路３０６は、スタティックCEレジスタ５０２に設定されたスタティックＣＥ信号をセレクタ２０２に入力する。またＣＥ信号生成回路３０６は、スタティックＣＥ選択信号（STATIC_CE_MODE）を生成し、セレクタ２０２，２０８，２１６の制御端子に入力する。スタティックＣＥ信号は、セレクタ２０２から出力される。さらにこのスタティックＣＥ信号は、CEo信号としてＮＡＮＤメモリ２Ａに出力される。これにより、ホスト３は、ＮＡＮＤメモリ２ＡへのCE信号はアクティブにし続け、上記ページデータプログラム及びページデータリードビジー状態を維持しつつ、ホストバス上のＮＡＮＤメモリ２ＡへのCE信号はインアクティブにして、他の周辺デバイスのCE信号をアクティブにすることができる。
【００７５】
なおＥＣＣコントローラ１は、スタティックCEモードにおいて、WEo或いはREo信号をCE信号（４ビット）のいずれかがアクティブでなければマスクしてアクティブにしない回路を備えている。これは、ＮＡＮＤメモリ２Ａがビジー期間中のみ、外部CE信号に拠らずCEo信号をアクティブにして、ビジー状態を維持するが、ＮＡＮＤメモリ２ＡへのWEo或いはREo信号を使ったＮＡＮＤメモリ２Ａへのアクセスを禁止したい意図で設けた機能である。
【００７６】
セレクタ２０８／２１６は、STATIC_CE_MODE信号が入力されると、それぞれＮＡＮＤ回路２０７／２１５が出力した信号を選択する。スタティックCEモードでのCE[3:0]信号に基づくWEo／REoマスク処理は、CE[3:0]信号を入力とする４入力ＮＡＮＤ回路２０１の出力信号をＮＡＮＤ回路２０７／２１５にそれぞれ入力することで実行する。すなわち、CE[3:0]信号の４ビット全てがハイレベルならば、ＮＡＮＤ回路２０１の出力信号はローレベルになり、ＮＡＮＤ回路２０７及び２１５の出力はWE／RE信号の値に関わらずハイレベルになる。ＮＯＲ回路２０９／２１７への入力信号がハイレベルでそれぞれWE／RE信号がマスクされる。これにより、CE信号がインアクティブ時は、ＮＡＮＤメモリ２Ａに対してデータの書き込み或いは読み出しが行われない。
【００７７】
次に、割り込み回路３０７による割り込み処理の動作について説明する。ＥＣＣコントローラ１は、割り込み処理を行う割り込み回路３０７を備えている。割り込み通知は、割り込み（INTN）信号をアクティブにすることにより行う。
【００７８】
ＮＡＮＤメモリ２Ａからホスト３へのリードデータの読み出しが終了すると、エラー情報出力回路３０８は、ＥＣＣコントローラ１がエラー検出処理中であることを表すデータ“ｆｆ”ｈ（hexadecimal notation）をセレクタ１０９に入力する。また割り込み回路３０７は、上記データ“ｆｆ”を選択する旨の制御信号HDOSを生成してセレクタ１０９の制御端子に入力する。これにより、上記データ“ｆｆ”がホスト３へ出力される。ホスト３は、上記データ“ｆｆ”により、ＥＣＣコントローラ１がエラー検出処理中であると判断する。エラー検出処理中である旨を表すデータは上記“ｆｆ”でなくてもよい。
【００７９】
次にエラー情報出力回路３０８は、所定サイクル（１サイクルは、RE信号のハイレベルとローレベル）後、ホスト３に対して上記エラー有無情報を１サイクル出力後、再びデータ“ｆｆ”をホスト３に出力し続ける。次にエラー情報出力回路３０８は、所定サイクル後、ホスト３に対して上記エラー数情報を１サイクル出力後、再びデータ“ｆｆ”をホスト３に出力し続ける。
【００８０】
次にエラー情報出力回路３０８は、所定サイクル後、訂正処理の結果に応じて、上記正常終了情報、訂正終了情報又は異常終了情報をホスト３に対して１サイクル出力する。なおエラー情報出力回路３０８が出力する上記各情報は、前述したように訂正回路１１４により生成される。エラー情報出力回路３０８は、訂正回路１１４を制御することにより、上記タイミングで上記各情報を出力させる。また割り込み回路３０７から出力される各データは、当該割り込み回路３０７が制御信号HDOSを生成してセレクタ１０９の制御端子に入力することにより行う。以下、割り込み回路３０７が出力するデータについても同様である。
【００８１】
ここで、非割り込みモードで訂正処理が終了した場合、上記正常終了情報ならば、処理を終了する。また上記訂正終了情報ならば、エラー情報出力回路３０８は訂正情報をホスト３に出力し、処理を終了する。また上記異常終了情報ならば、処理を終了する。
【００８２】
一方、割り込みモードで訂正処理が終了した場合について説明する。上記正常終了情報ならば、割り込み回路３０７は割り込み（INTN）信号をアクティブにする。そしてエラー情報出力回路３０８は、上記正常終了情報をバスFDNに出力し続ける。ホスト３は、割り込みを受け付けると、割り込み内容を取得し、ＥＣＣコントローラ１に対して割り込み許可である旨のアクノリッジコマンドを出力する。割り込み回路３０７は、上記アクノリッジコマンドをマスクして、ＮＡＮＤメモリ２Ａに出力しない。上記アクノリッジコマンドのマスクは、割り込み回路３０７がマスク信号MSK_WE（ハイレベル）を生成してＮＯＲ回路２０９に入力することにより行う。割り込み回路３０７は、上記アクノリッジコマンドが入力されると、上記INTN信号をインアクティブにし、処理を終了する。
【００８３】
また訂正終了情報ならば、割り込み回路３０７は、上記アクノリッジコマンドが入力されると、上記INTN信号をインアクティブにする。続いてエラー情報出力回路３０８は、RE信号に同期して上記訂正情報を出力し、処理を終了する。
【００８４】
また異常終了情報ならば、上記アクノリッジコマンドが入力されると、上記INTN信号をインアクティブにし、処理を終了する。このような割り込み処理を行うことにより、ホスト３は割り込み通知と同時に割り込み内容を取得することができる。よってホスト３の割り込み内容を読み込むためのＩ／Ｏレジスタ５００へのアクセスを省くことができる。
【００８５】
次に、ＥＣＣ領域変更回路３０９によるＥＣＣコード格納領域可変動作について説明する。  
上記ＥＣＣコントローラ１は、上記図７に示したブロックデータの各フォーマットのうち、ＥＣＣコードを挿入する領域を冗長領域内の任意の場所に指定できる機能を備えている。フォーマット情報の選択方法としては、ユーザが選択したフォーマット情報をホスト３がＥＣＣコントローラ１に設定するようにしてもよいし、ＥＣＣコントローラ１に入力手段を設け、ユーザが設定するようにしてもよい。
【００８６】
例えばホスト３が、ＥＣＣコントローラ１内のモードレジスタ５０１にフォーマット情報を書き込んだとする。すると、ＥＣＣ領域変更回路３０９は、上記カウンタ４００がカウントする値が、上記設定されたフォーマットにより決められる値になった時点で、上記訂正符号／シンドローム回路１１３が作成したＥＣＣコードを順次挿入する。例えば上記図７に示したフォーマット１の場合について説明する。ＥＣＣ領域変更回路３０９は、カウント値が５１３になった時点で訂正符号／シンドローム回路１１３から出力されるＥＣＣコードを選択する旨の制御信号NDOSを生成してセレクタ１０３の制御端子に入力する。これにより、フォーマット１で決められている所定の位置にＥＣＣコードを挿入することができる。
【００８７】
次に、専用コマンド回路３１０による専用コマンド実行モードの動作について説明する。  
ＥＣＣコントローラ１の専用コマンドを定義する場合、メモリカードのコマンドセットの中の未使用コードを専用コマンドとして割り当てる必要がある。この場合、ＥＣＣコントローラ１の専用コマンド数が制限されるため、ＥＣＣコントローラ１の多機能化の弊害となる。この実施形態では、専用コマンドを２つ使用するだけで、ＥＣＣコントローラ１の専用命令を実行する。
【００８８】
例えばＥＣＣコントローラ１の専用コマンドとして、コマンド９０（ＣＭＤ９０）とコマンド９１（ＣＭＤ９１）を定義する。ホスト３がＣＭＤ９０を実行すると専用コマンド実行モードに入り、ＣＭＤ９１を実行すると専用コマンド実行モードから抜ける。ＥＣＣコントローラ１は、このモード中、ホスト３から入力されたコマンドをマスクしてＮＡＮＤメモリ２Ａに上記コマンドを出力しない機能を備える。
【００８９】
具体的には、専用コマンド回路３１０は、マスク信号MSK_WE（ハイレベル）を生成し、このマスク信号MSK_WEをＮＯＲ回路２０９に入力する。これにより、ＮＡＮＤメモリ２Ａに出力されるWEo信号を、ホスト３が出力するWE信号に関わらずインアクティブにする。また専用コマンド回路３１０は、マスク信号MSK_RE（ハイレベル）を生成し、このマスク信号MSK_REをＮＯＲ回路２１７に入力する。これにより、ＮＡＮＤメモリ２Ａに出力されるREo信号を、ホスト３が出力するRE信号に関わらずインアクティブにする。これにより、ＣＭＤ９０が実行されると、以後ＮＡＮＤメモリ２Ａにはコマンドが書き込まれない。
【００９０】
したがって、ホスト３によりＣＭＤ９０が実行されると、ホスト３はＥＣＣコントローラ１に対してメモリカードのコマンドセットと同一のコードを使用して、ＥＣＣコントローラ１に命令を実行することが可能となる。よって、多くのＥＣＣコントローラ１専用コマンドを定義して、ＥＣＣコントローラ１の多機能化を実現できる。
【００９１】
以上詳述したようにこの実施形態では、ホスト３とＮＡＮＤメモリ２Ａ間のバスをＥＣＣコントローラ１が中断するアーキテクチャにしている。よって、例えば多値化データに対応して機能を強化したＥＣＣ回路を追加する場合に、ホスト３及びＮＡＮＤメモリ２Ａの設計変更等が不要になる。
【００９２】
ＥＣＣコントローラ１は、ホスト３から入力されるWE信号に基づいてライトデータをラッチしている。これにより、制御回路３００でライトデータの同期を取る必要ないため、同期設計を容易にすることができる。また、ＥＣＣコントローラ１は、各イネーブル信号の内部配線遅延を各遅延回路によりを等しく揃えるようにしている。これにより、ＮＡＮＤメモリ２Ａに対して正確なタイミングで各イネーブル信号を供給することができる。またＥＣＣコントローラ１がライトデータを出力する際、遅延調整されたWEo信号によりラッチするようにしている。これにより、ホスト３或いはＮＡＮＤメモリ２Ａは、データ受信時のタイミングマージンを確保することができる。またＥＣＣコントローラ１は、ホスト３から入力されたデータをラッチするか、スルー出力するかを選択することができるので、データの種類により自由に対応することが可能である。
【００９３】
また、クロックを持たないメモリカードなどに用意されたバスプロトコルにＥＣＣコントローラ１を適用する場合でも、例えばライトイネーブル信号或いはリードイネーブル信号をクロックとして代用することができるため、クロックが無いシステムにもＥＣＣコントローラ１を追加することができる。また、メモリカードに必要なライトイネーブル信号或いはリードイネーブル信号のみをメモリカードに出力するようにしているので、不要なライトイネーブル信号或いはリードイネーブル信号がメモリカードに入力され、メモリカードが誤動作することを防止できる。
【００９４】
また、ホスト３が例えばＩＯデバイスに対して１つのチップイネーブル信号しかアサートできないシステムにおいて、ＥＣＣコントローラ１がホスト３に代わってチップイネーブル信号をアクティブにする機能を備えている。これによりホスト３は、ＮＡＮＤメモリ２Ａのチップイネーブル信号をアクティブにし、且つ他のデバイスにアクセスして並列処理を行うことが可能となる。
【００９５】
またＥＣＣコントローラ１は、割り込み信号をアクティブにし、同時に割り込み内容をバスに出力し続ける機能を備えている。よって、割り込み通知と割り込み内容を同時にホスト３に通知することができる。これにより、ホスト３はＮＡＮＤメモリ２ＡのＩ／Ｏレジスタ５００へのアクセスを省くことができ、高速処理及び処理の簡素化が可能となる。
【００９６】
またＥＣＣコントローラ１は、ＥＣＣコードを挿入する領域を変更する機能を備えている。よって、ＮＡＮＤメモリ２Ａの多種類のデータフォーマットに柔軟に対応することができる。
【００９７】
またＥＣＣコントローラ１は、ホスト３から入力された所定の専用コマンドをマスクしてＮＡＮＤメモリ２Ａに出力しない機能を備えている。よってホスト３は、ＮＡＮＤメモリ２Ａのコマンドセットと同一のコードを使用して、ＥＣＣコントローラ１に命令を実行することが可能となる。これにより、多くのＥＣＣコントローラ１専用コマンドを定義して、ＥＣＣコントローラ１の多機能化を実現できる。
【００９８】
なお、上記実施形態では、ホスト３或いはＮＡＮＤメモリ２Ａとは別にＥＣＣコントローラ１を構成している。しかし、ホスト３がＥＣＣコントローラ１を備える構成であってもよい。また、ＮＡＮＤメモリ２ＡがＥＣＣコントローラ１を備える構成であってもよい。このように構成しても同様に実施可能である。
【００９９】
この発明は、上記実施形態に限定されるものではなく、その他、本発明の要旨を変更しない範囲において種々変形して実施可能である。
【図面の簡単な説明】
【０１００】
【図１】本発明の一実施形態における全体構成を示すブロック図。
【図２】図１に示したＮＡＮＤフラッシュメモリモジュール２の内部構成を示すブロック図。
【図３】図１に示したＥＣＣコントローラ１の内部構成を示すブロック図。
【図４】図３に示した制御回路３００の回路構成を示すブロック図。
【図５】図３に示したイネーブルインターフェース／クロック回路２００の回路構成を示すブロック図。
【図６】図３に示したデータパス／ＥＣＣ回路１００の回路構成を示すブロック図。
【図７】本実施形態で採用するブロックデータのフォーマットを示す図。
【図８】図３に示したＥＣＣコントローラ１におけるコマンド及びアドレスの出力動作のタイミングチャートを示す図。
【図９】図３に示したＥＣＣコントローラ１におけるデータの書き込み動作のタイミングチャートを示す図。
【図１０】図３に示したＥＣＣコントローラ１におけるデータの読み出し動作のタイミングチャートを示す図。
【図１１】図３に示したＥＣＣコントローラ１におけるブロックライトデータの書き込み動作のフローを示す図。
【図１２】図３に示したＥＣＣコントローラ１におけるブロックライトデータの書き込み動作のタイミングチャートを示す図。
【図１３】図３に示したＥＣＣコントローラ１におけるブロックリードデータの読み出し動作のフローを示す図。
【符号の説明】
【０１０１】
１…ＥＣＣコントローラ、２…ＮＡＮＤフラッシュメモリモジュール、２Ａ，２Ｂ，２Ｃ，２Ｄ…ＮＡＮＤフラッシュメモリ、３…ホスト、５〜１３…信号線、１００…データパス／ＥＣＣ回路、１０１，１０７…バッファ、１０２，１０４，１０８，１１０…フリップフロップ、１０３，１０５，１０９、１１２…セレクタ、１０６，１１１…トライステートバッファ、１１３…訂正符号／シンドローム回路、１１４…訂正回路、１１５…判定回路、１１６…情報生成回路、１２０…ＥＣＣ回路、２００…イネーブルインターフェース／クロック回路、２０１，２０７，２１５…ＮＡＮＤ回路、２０２，２０８，２１６，２２２…セレクタ、２０３，２０５，２１０，２１３，２１８，２２３，２２５，２２７…遅延回路、２０４，２０６，２１２，２１４，２２０，２２４，２２６，２２８…バッファ、２０９，２１７…ＮＯＲ回路、２１１，２１９…インバータ回路、２２１…ＡＮＤ回路、３００…制御回路、３０１…バス監視回路、３０２…コマンド／アドレス出力回路、３０３…書き込み回路、３０４…読み出し回路、３０５…クロック生成回路、３０６…ＣＥ信号生成回路、３０７…割り込み回路、３０８…エラー情報出力回路、３０９…ＥＣＣ領域変更回路、３１０…専用コマンド回路、４００…カウンタ、５００…Ｉ／Ｏレジスタ、５０１…モードレジスタ、５０２…スタティックCEレジスタ。
【図１】
2004280790.tif 000003
【図２】
2004280790.tif 000004
【図３】
2004280790.tif 000005
【図４】
2004280790.tif 000006
【図５】
2004280790.tif 000007
【図６】
2004280790.tif 000008
【図７】
2004280790.tif 000009
【図８】
2004280790.tif 000010
【図９】
2004280790.tif 000011
【図１０】
2004280790.tif 000012
【図１１】
2004280790.tif 000013
【図１２】
2004280790.tif 000014
【図１３】
2004280790.tif 000015