(57)【要約】【課題】インタフェースコントローラにおいて、ホスト装置内クロックと転送クロックとの周波数差を吸収する。【解決手段】ブリッジ部は、データ送受部から第２のクロックに基づいて送信されたデータを第２のクロックに基づいて受信し、受信したデータを第１のクロックに基づいてデータ転送部に送信する。ブリッジ部は、データ転送部から第１のクロックに基づいて送信されたデータを第１のクロックに基づいて受信し、受信したデータを第２のクロックに基づいてデータ送受部へ送信する。【選択図】図１
2008282128.tif 000002
【特許請求の範囲】
【請求項１】
ホスト装置に備えられ、前記ホスト装置の外部に接続される外部機器に第１のクロックを出力し、前記第１のクロックを基準として規定される特定のインタフェースの仕様に従って、前記ホスト装置と前記外部機器との間のデータ転送を制御するインタフェースコントローラであって、
前記第１のクロックに基づいて動作するデータ転送部と、
前記第１のクロックとは異なる周波数の第２のクロックに基づいて動作するデータ送受部と、
前記データ送受部と前記データ転送部との間に設けられ、前記第１のクロックおよび前記第２のクロックに基づいて動作するブリッジ部と、
を備え、
前記第１のクロックと前記第２のクロックとは、周波数が高い方のクロックの周波数が、周波数が低い方のクロックの周波数の整数倍とはならない関係を有しており、
前記データ送受部が、前記外部機器へ送信すべきデータを、前記第２のクロックに基づいて前記インタフェースコントローラの外部から受信した場合において、
前記データ送受部は、前記インフェースコントローラの外部から受信したデータを、前記第２のクロックに基づいて前記ブリッジ部へ送信し、
前記ブリッジ部は、前記データ送受部から送信されたデータを前記第２のクロックに基づいて受信し、受信したデータを前記第１のクロックに基づいて前記データ転送部に送信し、
前記データ転送部は、前記ブリッジ部から送信されたデータを前記第１のクロックに基づいて受信し、受信したデータを前記第１のクロックに基づいて前記外部機器へ送信し、
前記データ転送部が、前記外部機器から送信されたデータを、前記第１のクロックに基づいて受信した場合において、
前記データ転送部は、前記外部機器から受信したデータを前記第１のクロックに基づいて前記ブリッジ部へ送信し、
前記ブリッジ部は、前記データ転送部から送信されたデータを前記第１のクロックに基づいて受信し、受信したデータを前記第２のクロックに基づいて前記データ送受部へ送信し、
前記データ送受部は、前記ブリッジ部から送信されたデータを前記第２のクロックに基づいて受信し、受信したデータを前記第２のクロックに基づいて前記インタフェースコントローラの外部へ送信する、
ことを特徴とするインタフェースコントローラ。
【請求項２】
請求項１に記載のインタフェースコントローラであって、
前記ブリッジ部は、データ送受部側バッファ部およびデータ転送部側バッファ部を備えており、
前記ブリッジ部が前記データ送受部から送信されるデータを受信する場合には、
前記データ送受部側バッファ部は、前記データ送受部から前記第２のクロックに基づいて送信されるデータを受信して蓄積し、
前記データ転送部側バッファ部は、前記第１のクロックに基づいて、前記データ送受部側バッファ部に蓄積されたデータを取得して蓄積するとともに、前記データ転送部へ送信し、
前記ブリッジ部が前記データ転送部から送信されるデータを受信する場合には、
前記データ転送部側バッファ部は、前記データ転送部から前記第１のクロックに基づいて送信されるデータを受信して蓄積し、
前記データ送受部側バッファ部は、前記第２のクロックに基づいて、前記データ転送部側バッファ部に蓄積されたデータを取得して蓄積するとともに、前記データ送受部へ送信する、
ことを特徴とするインタフェースコントローラ。
【請求項３】
請求項２に記載のインタフェースコントローラであって、
前記第２のクロックは前記第１のクロックよりも高い周波数のクロックであり、
前記ブリッジ部が前記データ転送部から送信されるデータを受信する場合には、
前記データ転送部側バッファ部は、前記第１のクロックに基づいて前記データ転送部からｎ（ｎは１以上の整数）バイト単位で送信されるデータを順次蓄積するとともに、蓄積したデータを２ｎバイト単位で前記データ送受部側バッファ部に出力し、
前記データ送受部側バッファ部は、前記データ転送部側バッファ部から出力されたデータを、前記第２のクロックに基づいて順次蓄積するとともに、蓄積したデータを、前記第２のクロックに基づいて、ｎバイト単位で前記データ送受部に送信する、
ことを特徴とするインタフェースコントローラ。
【請求項４】
請求項３に記載のインタフェースコントローラであって、
前記データ送受部側バッファ部は、あらかじめ定められているしきい値以上のデータが蓄積されたときに、前記データ転送部側バッファ部における前記データ転送部から送信されるデータの蓄積の停止の指示を実行し、
前記データ転送部側バッファ部は、前記停止の指示に従って前記データ転送部による前記外部機器からのデータの受信の停止を指示することにより、前記データ転送部からのデータの送信を停止させて、データの蓄積を停止する、
ことを特徴とするインタフェースコントローラ。
【請求項５】
請求項２ないし請求項４のいずれかに記載のインタフェースコントローラであって、
前記第２のクロックは前記第１のクロックよりも高い周波数のクロックであり、
前記ブリッジ部が前記データ送受部から送信されるデータを受信する場合には、
前記データ送受部側バッファ部は、前記第２のクロックに基づいて前記データ送受部からｎバイト単位で送信されるデータを順次蓄積するとともに、蓄積したデータを４ｎバイト単位で前記データ転送部側バッファ部に出力し、
前記データ転送部側バッファ部は、前記データ送受部側バッファ部から出力されたデータを前記第１のクロックに基づいて蓄積するとともに、蓄積したデータを、前記第１のクロックに基づいて、ｎバイト単位で前記データ転送部に送信する、
ことを特徴とするインタフェースコントローラ。
【請求項６】
請求項１ないし請求項４のいずれかに記載のインタフェースコントローラであって、
１つの半導体基板上に集積化された集積化回路であることを特徴とするインタフェースコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、ＭＭＣ（ＭｕｔｉＭｅｄｉａ  Ｃａｒｄ）、ＳＤ（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）カード等のメモリカードや、ＳＤカードのインタフェース仕様をベースとするＳＤＩ／Ｏに準拠したカード型のＩ／Ｏ機器（以下、「ＳＤＩ／Ｏカード」と呼ぶ。）、ＭＭＣのインタフェース仕様をベースとするＣＥ−ＡＴＡに準拠したＨＤＤなどのドライブ装置（以下、「ＣＥ−ＡＴＡドライブ装置」と呼ぶ。）等の電子機器（以下、便宜上「外部機器」と呼ぶ。）に転送クロックを出力し、転送クロックを基準として規定される特定のインタフェースの仕様に従って、外部機器との間のデータ転送を制御するインタフェースコントローラ、特に、インタフェースコントローラを備える電子機器（以下、便宜上「ホスト装置」とも呼ぶ。）内の他のブロックとの間でデータを送受する速度と、外部機器との間でデータを送受する速度との差を吸収する技術に関する。
【背景技術】
【０００２】
ＭＭＣやＳＤカードやなどの外部機器であるメモリカードは、通常、メモリカードへのアクセスを実行するホスト装置に備えられるインタフェースコントローラによって、それぞれのインタフェース仕様に従ってアクセスが制御され、データのリード／ライトが実行される。
【０００３】
ＳＤカードやＭＭＣ等のメモリカードのインタフェース仕様において、コマンドラインを介するデータ（以下、「コマンドラインデータ」とも呼ぶ。）の送受やデータラインを介するデータ（以下、「データラインデータ」とも呼ぶ。）の送受は、インタフェースコントローラからメモリカードへ供給される転送クロックに基づいて実行される。また、ＳＤＩ／ＯやＣＥ−ＡＴＡ等のインタフェース仕様においても、同様である。
【０００４】
上記のように、インタフェースコントローラは、これに接続される電子機器に対して、その動作の基準となる転送クロックを供給し、その動作を制御する。
【０００５】
【特許文献１】特開２００４−１９２４８８号公報
【特許文献２】特開２００６−１７８９１５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、インタフェースコントローラと外部機器との間のデータの送受、すなわちデータ転送速度の高速化のためには、転送クロックの周波数を、その外部機器が採用するインタフェースの仕様における最大周波数（例えば、ＳＤカードの高速モードの場合は５０ＭＨｚである。）とすることが好ましい。
【０００７】
一方、ホスト装置内の他のブロックから送信された外部機器へ送信するためのデータ（以下、「送信対象データ」とも呼ぶ。）のインタフェースコントローラにおける受信は、そのブロックで利用されるクロック（以下、説明の便宜上「ホスト装置内クロック」とも呼ぶ。）に基づいて実行される。また、インタフェースコントローラで受信した外部機器からのデータ（以下、「受信データ」とも呼ぶ。）のそのブロックへの送信も同様である。
【０００８】
ここで、上記ブロックとインタフェースコントローラとの間のデータの送受の基準となるホスト装置内クロックの周波数の転送クロックの周波数に対する比（周波数比）が整数、特に、２のべき乗で表される整数であるならば、インタフェースコントローラ内において新たな工夫を要することなく、ホスト装置内クロックに基づくデータの送受に同期して、転送クロックに基づくデータの送受を実行することができる。
【０００９】
しかしながら、例えば、ホスト装置内の他のブロックとして、ＵＳＢコントローラのＦＩＦＯバッファを想定すると、ホスト装置内クロックとして、周波数が例えば６０ＭＨｚのクロックの利用が想定される場合（ＵＳＢの仕様がＵＳＢ２．０の場合）がある。
【００１０】
ホスト装置内クロックの周波数が６０ＭＨｚで転送クロックの周波数が５０ＭＨｚの場合、周波数比は整数とはならないため、ホスト装置内クロックに基づくデータの送受と、転送クロックに基づくデータの送受とは非同期となってしまう。
【００１１】
例えば、転送クロックの周波数を３０ＭＨｚとして周波数比を整数（６０／３０＝２）とすれば、非同期の問題は解決することができるが、外部機器との間のデータ送受の速度を最大にすることができないことになる。
【００１２】
従って、外部機器との間のデータ送受の速度を最大とするためには、ホスト装置内クロックと転送クロックとの周波数差を吸収して、インタフェースコントローラの外部からホスト装置内クロックに基づいて受信したデータを転送クロックに基づいて外部機器へ送信し、また、転送クロックに基づいて外部機器から受信したデータをホスト装置内クロックに基づいてインタフェースコントローラの外部へ送信可能としなければならない、という問題が発生する。
【００１３】
本発明は、上記した課題を解決するためになされたものであり、ホスト装置に備えられ、ＭＭＣ、ＳＤカード、ＳＤＩ／Ｏカード、ＣＥ−ＡＴＡドライブ装置等の外部機器に転送クロックを出力し、転送クロックを基準として規定される特定のインタフェースの仕様に従って、ホスト装置と外部機器との間のデータ転送を制御するインタフェースコントローラにおいて、ホスト装置内クロックと転送クロックとの周波数差を吸収して、ホスト装置内クロックに基づいてインタフェースコントローラの外部から受信したデータを転送クロックに基づいて外部機器へ送信し、また、転送クロックに基づいて外部機器から受信したデータをホスト装置内クロックに基づいてインタフェースコントローラの外部へ送信可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記課題の少なくとも一部を解決するため、本発明は、次のようなインタフェースコントローラの態様とすることができる。すなわち、
ホスト装置に備えられ、前記ホスト装置の外部に接続される外部機器に第１のクロックを出力し、前記第１のクロックを基準として規定される特定のインタフェースの仕様に従って、前記ホスト装置と前記外部機器との間のデータ転送を制御するインタフェースコントローラであって、
前記第１のクロックに基づいて動作するデータ転送部と、
前記第１のクロックとは異なる周波数の第２のクロックに基づいて動作するデータ送受部と、
前記データ送受部と前記データ転送部との間に設けられ、前記第１のクロックおよび前記第２のクロックに基づいて動作するブリッジ部と、
を備え、
前記第１のクロックと前記第２のクロックとは、周波数が高い方のクロックの周波数が、周波数が低い方のクロックの周波数の整数倍とはならない関係を有しており、
前記データ送受部が、前記外部機器へ送信すべきデータを、前記第２のクロックに基づいて前記インタフェースコントローラの外部から受信した場合において、
前記データ送受部は、前記インフェースコントローラの外部から受信したデータを、前記第２のクロックに基づいて前記ブリッジ部へ送信し、
前記ブリッジ部は、前記データ送受部から送信されたデータを前記第２のクロックに基づいて受信し、受信したデータを前記第１のクロックに基づいて前記データ転送部に送信し、
前記データ転送部は、前記ブリッジ部から送信されたデータを前記第１のクロックに基づいて受信し、受信したデータを前記第１のクロックに基づいて前記外部機器へ送信し、
前記データ転送部が、前記外部機器から送信されたデータを、前記第１のクロックに基づいて受信した場合において、
前記データ転送部は、外部機器から受信したデータを前記第１のクロックに基づいて前記ブリッジ部へ送信し、
前記ブリッジ部は、前記データ転送部から送信されたデータを前記第１のクロックに基づいて受信し、受信したデータを前記第２のクロックに基づいて前記データ送受部へ送信し、
前記データ送受部は、前記ブリッジ部から送信されたデータを前記第２のクロックに基づいて受信し、受信したデータを前記第２のクロックに基づいて前記インタフェースコントローラの外部へ送信する、
ことを特徴とする。
【００１５】
上記インタフェースコントローラによれば、第１のクロックと第２のクロックとの周波数差を吸収して、第２のクロックに基づいてデータ送受部でインタフェースコントローラの外部から受信したデータを、第１のクロックに基づいてデータ転送部から外部機器へ送信し、また、第１のクロックに基づいてデータ転送部で受信した受信データを、ホスト装置内クロックに基づいてデータ送受部から送信することが可能である。
【００１６】
上記インタフェースコントローラにおいて、
前記ブリッジ部は、データ送受部側バッファ部およびデータ転送部側バッファ部を備えており、
前記ブリッジ部が前記データ送受部から送信されるデータを受信する場合には、
前記データ送受部側バッファ部は、前記データ送受部から前記第２のクロックに基づいて送信されるデータを受信して蓄積し、
前記データ転送部側バッファ部は、前記第１のクロックに基づいて、前記データ送受部側バッファ部に蓄積されたデータを取得して蓄積するとともに、前記データ転送部へ送信し、
前記ブリッジ部が前記データ転送部から送信されるデータを受信する場合には、
前記データ転送部側バッファ部は、前記データ転送部から前記第１のクロックに基づいて送信されるデータを受信して蓄積し、
前記データ送受部側バッファ部は、前記第２のクロックに基づいて、前記データ転送部側バッファ部に蓄積されたデータを取得して蓄積するとともに、前記データ送受部へ送信する、
構成とすることができる。
【００１７】
上記のようにブリッジ部を構成することにより、ブリッジ部は、ブリッジ部がデータ送受部から送信されるデータを受信する場合には、データ送受部から送信されたデータを第２のクロックに基づいて受信し、受信したデータを第１のクロックに基づいて前記データ転送部に送信し、ブリッジ部がデータ転送部から送信されるデータを受信する場合には、データ転送部から送信されたデータを第１のクロックに基づいて受信し、受信したデータを第２のクロックに基づいてデータ送受部へ送信することが可能となる。
【００１８】
ここで、前記第２のクロックは前記第１のクロックよりも高い周波数のクロックであり、
前記ブリッジ部が前記データ転送部から送信されるデータを受信する場合には、
前記データ転送部側バッファ部は、前記第１のクロックに基づいて前記データ転送部からｎ（ｎは１以上の整数）バイト単位で送信されるデータを順次蓄積するとともに、蓄積したデータを２ｎバイト単位で前記データ送受部側バッファ部に出力し、
前記データ送受部側バッファ部は、前記データ転送部側バッファ部から出力されたデータを、前記第２のクロックに基づいて順次蓄積するとともに、蓄積したデータを、前記第２のクロックに基づいて、ｎバイト単位で前記データ送受部に送信する、
ことが好ましい。
【００１９】
上記のようにすれば、第２のクロックが第１のクロックよりも高い周波数のクロックで、ブリッジ部がデータ転送部から送信されるデータを受信する場合において、データ転送部から第１のクロックに基づいて送信されるデータを、データ送受部に第２のクロックに基づいて送信するブリッジ部の動作を容易に実現することが可能となる。
【００２０】
さらに、前記データ送受部側バッファ部は、あらかじめ定められているしきい値以上のデータが蓄積されたときに、前記データ転送部側バッファ部における前記データ転送部から送信されるデータの蓄積の停止の指示を実行し、
前記データ転送部側バッファ部は、前記停止の指示に従って前記データ転送部による前記外部機器からのデータの受信の停止を指示することにより、前記データ転送部からのデータの送信を停止させて、データの蓄積を停止する、
ことが好ましい。
【００２１】
上記のようにすれば、ブリッジ部において外部機器から送信されるデータの受信が不可であるにもかかわらず、外部機器からデータの受信が実行されてしまうことを防止することが可能となる。
【００２２】
また、前記第２のクロックは前記第１のクロックよりも高い周波数のクロックであり、
前記ブリッジ部が前記データ送受部から送信されるデータを受信する場合には、
前記データ送受部側バッファ部は、前記第２のクロックに基づいて前記データ送受部からｎバイト単位で送信されるデータを順次蓄積するとともに、蓄積したデータを４ｎバイト単位で前記データ転送部側バッファ部に出力し、
前記データ転送部側バッファ部は、前記データ送受部側バッファ部から出力されたデータを前記第１のクロックに基づいて蓄積するとともに、蓄積したデータを、前記第１のクロックに基づいて、ｎバイト単位で前記データ転送部に送信する、
ことが好ましい。
【００２３】
上記のようにすれば、第２のクロックが第１のクロックよりも高い周波数のクロックで、ブリッジ部がデータ送受部から送信されるデータを受信する場合において、データ送受部から第２のクロックに基づいて送信されるデータを、データ転送部に第１のクロックに基づいて送信するブリッジ部の動作を容易に実現することが可能となる。
【００２４】
なお、本発明はインタフェースコントローラとしての態様だけでなく、インタフェースコントローラを集積化した集積化回路としての態様等、種々の態様で実現可能である。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の実施の形態を実施例に基づき以下の順序で説明する。
Ａ．インタフェースコントローラの概要：
Ｂ．ライト動作時のブリッジ部の動作：
Ｃ．リード動作時のブリッジ部の動作：
Ｄ．効果：
Ｅ．変形例：
【００２６】
Ａ．インタフェースコントローラの概要：
図１は、本発明の一実施例としてのインタフェースコントローラの構成を示すブロック図である。図１に示す本実施例のインタフェースコントローラとしてのＳＤＭＭＣコントローラ１０は、ホスト装置（不図示）に備えられ、ＳＤＭＭＣバスに接続されている外部機器としてのメモリカード（不図示）と、ホスト装置との間のコマンドやデータの転送を制御することにより、メモリカードのアクセス制御を実行する。ＳＤＭＭＣバスは、メモリカードの一例であるＳＤカードおよび他の一例であるＭＭＣの両方のインタフェースに対応するバスとして共用されるバスであり、接続されるメモリカードとしては、ＳＤカードまたはＭＭＣカードのいずれかである。
【００２７】
ＳＤＭＭＣコントローラ１０は、ＳＤＭＭＣバスの１本のクロックラインを介して、転送クロックＳＤＣＬＫをメモリカードに伝送する。また、ＳＤＭＭＣコントローラ１０は、ＳＤＭＭＣバスの１本のコマンドラインを介して、コマンドデータやレスポンスデータをメモリカードとの間で送受する。さらにまた、ＳＤＭＭＣコントローラ１０は、ＳＤＭＭＣバスの８本のデータラインを介して、リードデータやライトデータ、ステータスデータなどのデータをメモリカードとの間で送受する。ただし、メモリカードがＳＤカードの場合、規定されているデータラインは１ビットまたは４ビットであるので、８ビットのデータラインのうち、実際に有効なデータラインは変化する。なお、ＭＭＣの場合も、規定されているデータラインは１ビット、４ビット、８ビットのいずれかであり、同様に、８ビットのデータラインのうち、実際に有効なデータラインは変化する。
【００２８】
なお、以下では、コマンドラインを介して送受するコマンドデータやレスポンスデータを総称して「コマンドラインデータＣＭＤ」と呼び、コマンドラインデータを含む信号を「コマンドラインデータ信号ＣＭＤ」と呼ぶ場合もある。データラインを介して送受するリードデータやライトデータ、ステータスデータなどを総称して「データラインデータＤＡＴ」と呼び、データラインデータを含む信号を「データラインデータ信号ＤＡＴ」と呼ぶ場合もある。クロックラインを介して送信される転送クロックを含む信号を「転送クロック信号」と呼ぶ場合もある。
【００２９】
ＳＤＭＭＣコントローラ１０は、転送コントロール部２０と、転送クロック生成部３０と、ＣＰＵＩ／Ｆ部４０と、ＦＩＦＯＩ／Ｆ部５０と、ブリッジ部６０と、を備える。このＳＤＭＭＣコントローラ１０は、１つの半導体基板上に形成された半導体集積回路である。
【００３０】
転送コントロール部２０と転送クロック生成部３０とブリッジ部６０の一部とは、転送クロック生成部３０で生成される転送クロックＳＤＣＬＫに基づいて動作する転送クロック動作系に区分される。一方、ＣＰＵＩ／Ｆ部４０とＦＩＦＯＩ／Ｆ部５０とブリッジ部６０の残りの部分とは、システムクロックＳｙｓＣｌｋに基づいて動作するシステムクロック動作系に区分される。システムクロックＳｙｓＣｌｋは、ＦＩＦＯＩ／Ｆバスを介して接続されるホスト装置内のＦＩＦＯバッファ（不図示）の動作の基準となるクロックであり、ＦＩＦＯバッファとＦＩＦＯＩ／Ｆ部５０との間でＦＩＦＯＩ／Ｆバスを介して実行されるデータの送受の基準となるクロックである。このＦＩＦＯバッファは、例えば、ＵＳＢコントローラに備えられるＦＩＦＯバッファが利用される。なお、転送クロック動作系の各ブロック内で利用される実際のクロックは、転送クロックに等価な内部クロック（後述する内部転送クロックＩＳＤＣＬＫ）やこの内部クロックに同期する種々のクロックであるが、内部クロックは転送クロックに等価であり、他のクロックも内部クロックに同期するクロックであるので、転送クロック動作系の各ブロックの動作は、転送クロックＳＤＣＬＫに基づくとしても差し支えない。なお、転送クロックＳＤＣＬＫが本発明の第１のクロックに相当し、システムクロックＳｙｓＣｌｋが本発明の第２のクロックに相当する。
【００３１】
以下の説明では、説明の便宜上、ＳＤＭＭＣバスに接続されているメモリカードとして高速モードに対応するＳＤカードを例とし、転送クロックＳＤＣＬＫの周波数Ｆｃは、ＳＤカードのインタフェース仕様に規定されている最高値の５０ＭＨｚであるとする。また、システムクロックＳｙｓＣｌｋの周波数Ｆｓｙｓは、ＵＳＢ２．０に規定されている６０ＭＨｚであるとする。
【００３２】
ＣＰＵＩ／Ｆ部４０は、図示しないＣＰＵからＣＰＵＩ／Ｆバスを介して供給されるコマンドデータ等の各種制御データを、内部に備えるレジスタに格納する。レジスタに格納された各種制御データは、転送コントロール部２０に受け渡されて利用される。また、ＣＰＵＩ／Ｆ部４０は、転送コントロール部２０から受け渡されるレスポンスデータ等の各種制御データを格納し、ＣＰＵに受け渡す。
【００３３】
ＦＩＦＯＩ／Ｆ部５０は、図示しないＦＩＦＯバッファからＦＩＦＯＩ／Ｆバスを介して供給されるメモリカードへのライトデータを受信し、ブリッジ部６０に受け渡す。また、ＦＩＦＯＩ／Ｆ部５０は、メモリカードからのリードデータをブリッジ部６０から受け取り、ＦＩＦＯＩ／Ｆバスを介してＦＩＦＯバッファへ送信する。このＦＩＦＯＩ／Ｆバスを介して実行されるデータの送受は、３２ビット（４バイト）のデータ幅、すなわち、４バイト単位で行われる。また、ＦＩＦＯＩ／Ｆ部５０とブリッジ部６０との間のデータの受け渡しは、８ビット（１バイト）のデータ幅、すなわち、１バイト単位で行われる。なお、このＦＩＦＯＩ／Ｆ部５０が本発明のデータ送受部に相当する。
【００３４】
ブリッジ部６０は、システムクロックＳｙｓＣｌｋに基づいて動作するＦＩＦＯ側バッファ部６１と、転送クロックＳＤＣＬＫ（厳密には、内部転送クロックＩＳＤＣＬＫである）に基づいて動作するコントロール側バッファ部６２とを備えている。ＦＩＦＯ側バッファ部６１が本発明のデータ送受部側バッファ部に相当し、コントロール側バッファ部６２が本発明のデータ転送部側バッファ部に相当する。このブリッジ部６０は、システムクロックＳｙｓＣｌｋに基づいて動作するＦＩＦＯＩ／Ｆ部５０と、システムクロックＳｙｓＣｌｋとは異なる周波数の転送クロックＳＤＣＬＫに基づいて動作する転送コントロール部２０との間のデータの受け渡しを、ＦＩＦＯ側バッファ部６１およびコントロール側バッファ部６２により中継する。なお、ブリッジ部６０については、さらに後述する。
【００３５】
転送コントロール部２０は、転送クロック生成部３０で生成された内部転送クロックＩＳＤＣＬＫを転送クロックＳＤＣＬＫとしてメモリカードに伝送するとともに、ＣＰＵＩ／Ｆ部４０から受け取ったコマンドデータからメモリカードに送信する出力コマンドデータ（コマンドラインデータ）を生成し、転送クロックＳＤＣＬＫに基づいてメモリカードに送信する。また、転送コントロール部２０は、転送クロックＳＤＣＬＫをメモリカードに伝送するとともに、ＦＩＦＯＩ／Ｆ部５０からブリッジ部６０を介して受け取ったライトデータ（データラインデータ）を転送クロックＳＤＣＬＫに基づいてメモリカードに送信する。
【００３６】
また、転送コントロール部２０は、メモリカードからＳＤＭＭＣバスを介して受信するコマンドラインデータ信号を受け取って、これに含まれるレスポンスデータ（コマンドラインデータ）をＣＰＵＩ／Ｆ部４０に受け渡すとともに、メモリカードからＳＤＭＭＣバスを介して受信するデータラインデータ信号を受け取って、これに含まれるリードデータ（データラインデータ）を、ブリッジ部６０を中継してＦＩＦＯＩ／Ｆ部５０に受け渡す。転送コントロール部２０とブリッジ部６０との間のデータの受け渡しは８ビット(１バイト)のデータ幅、すなわち、１バイト単位で行われる。
【００３７】
なお、この転送コントロール部２０が、本発明のデータ転送部に相当する。
【００３８】
転送クロック生成部３０は、ソースクロックＳＣｌｋに基づいて転送クロックＳＤＣＬＫを生成する。このソースクロックＳＣｌｋは、接続されるメモリカードの最大転送速度に対応する周波数、例えば、ここでは、メモリカードとしてＳＤカードを例に説明しているので、高速モードにおける最大転送速度に対応する周波数に等しい周波数（Ｆｓ：５０ＭＨｚ）のクロックが利用される。ただし、ソースクロックＳＣｌｋとしては、必ずしも転送クロックＳＤＣＬＫの周波数と等しい周波数のクロックである必要はなく、転送クロックＳＤＣＬＫと異なる周波数のクロックであってもよい。
【００３９】
以上説明した本発明のインタフェースコントローラであるＳＤＭＭＣコントローラ１０の特徴は、ＦＩＦＯＩ／Ｆ部５０と転送コントロール部２０との間にブリッジ部６０を備え、システムクロックＳｙｓＣｌｋに基づいて動作するＦＩＦＯＩ／Ｆ部５０と、システムクロックＳｙｓＣｌｋとは非同期の転送クロックＳＤＣＬＫに基づいて動作する転送コントロール部２０との間のデータの受け渡しを中継する点にある。そこで、以下では、ブリッジ部６０の動作について、ライト動作時およびリード動作時に分けて、さらに説明を加える。
【００４０】
Ｂ．ライト動作時のブリッジ部の動作：
メモリカードへデータを書き込む場合には、ＣＰＵＩ／Ｆ部４０のレジスタにライト動作に対応して設定されている、ブリッジ部におけるデータの処理方向を示す処理方向データＤＩＲが、ブリッジ部６０に供給される。ブリッジ部６０は、ライト動作に対応して供給された処理方向データＤＩＲに応じて、ＦＩＦＯ側バッファ部６１およびコントロール側バッファ部６２を動作させる。
【００４１】
図２は、ライト動作時におけるブリッジ部６０のＦＩＦＯ側バッファ部６１およびコントロール側バッファ部６２を機能的に示す説明図である。
【００４２】
ライト動作時においては、ＦＩＦＯ側バッファ部６１は、ＦＩＦＯＩ／Ｆ部５０から送信されるライトデータを受信して蓄積しつつ、コントロール側バッファ部６２に受け渡す。また、コントロール側バッファ部６２は、ＦＩＦＯ側バッファ部６１から受け渡されたライトデータを蓄積しつつ、転送コントロール部２０に送信する。これにより、ブリッジ部６０は、ＦＩＦＯＩ／Ｆ部５０から転送コントロール部２０へのライトデータの受け渡しを中継する。
【００４３】
ここで、ＦＩＦＯ側バッファ部６１は、ＦＩＦＯ側バッファ６１２と、このバッファの動作を制御するＦＩＦＯ側バッファ制御部６１４と、で構成される。
【００４４】
ＦＩＦＯ側バッファ６１２は、１０バイトのバッファ領域を有している。ただし、ライト動作時においては、ＦＩＦＯ側バッファ６１２は、１０バイトのバッファ領域のうち８バイトのみを利用し、残りの２バイトは未使用領域とされる。また、有効に利用される８バイトのバッファ領域は４バイトを１組として、２組の領域に区分される。なお、後述するようにリード動作時においては、１０バイト分全てのバッファ領域を利用する。
【００４５】
バッファ制御部６１４は、システムクロックＳｙｓＣｌｋ（周波数Ｆｓｙｓ：６０ＭＨｚ）の周期Ｔｓｙｓ（＝１／Ｆｓｙｓ）を基準として、ＦＩＦＯＩ／Ｆ部５０から送信されてくるライトデータの受信およびＦＩＦＯ側バッファ６１２への格納を制御するとともに、コントロール側バッファ部６２への出力を制御する。
【００４６】
また、コントロール側バッファ部６２は、ＦＩＦＯ側バッファ部６１と同様に、コントロール側バッファ６２２と、このバッファの動作を制御するコントロール側バッファ制御部６２４と、で構成される。
【００４７】
コントロール側バッファ６２２は、４バイト、すなわち、ＦＩＦＯ側バッファ６１２の１組のバッファ領域に対応するバッファ領域を有している。
【００４８】
バッファ制御部６２４は、転送クロックＳＤＣＬＫ(厳密には等価なクロック，周波数Ｆｃ：５０ＭＨｚ)の周期Ｔｃ（＝１／Ｆｃ）を基準として、ＦＩＦＯ側バッファ部６１から出力されるライトデータの取り込みおよびコントロール側バッファ６２２への格納を制御するとともに、転送コントロール部２０への送信を制御する。
【００４９】
ライト動作時において、ＦＩＦＯ側バッファ部６１およびコントロール側バッファ部６２は、以下のように動作して、ＦＩＦＯＩ／Ｆ部５０から転送コントロール部２０へのライトデータの受け渡しの中継を実現する。
【００５０】
ＦＩＦＯ側バッファ部６１のＦＩＦＯ側バッファ制御部６１４は、ＦＩＦＯＩ／Ｆ部５０から送信レディＳ＿ＴＸＲｅａｄｙがアサートされると、システムクロックＳｙｓＣｌｋに基づいて送信バリッドＳ＿ＴＸＶａｌｉｄをＦＩＦＯＩ／Ｆ部５０に対してアサートする。
【００５１】
このとき、ＦＩＦＯ側バッファ制御部６１４は、ＦＩＦＯＩ／Ｆ部５０から送信レディＳ＿ＴＸＲｅａｄｙのアサートとともに、１バイト単位で送出されるライトデータＳ＿ＴＸＤａｔａ［７：０］を受け取り、ＦＩＦＯ側バッファ６１２に蓄積する。
【００５２】
ここで、ＦＩＦＯＩ／Ｆ部５０から送出される１バイト単位のライトデータの更新は、送信バリッドの変化に応じて実行される。また、送信バリッドの変化は、ＦＩＦＯ側バッファ６１２に複数バイトの空き領域がある場合には、連続してライトデータを蓄積することが可能であるので、転送クロックＳＤＣＬＫの周期Ｔｃごとに発生する。従って、ＦＩＦＯＩ／Ｆ部５０からのライトデータの送信は、通常、転送クロックＳＤＣＬＫの周期Ｔｃで、１バイト単位で順に実行される。なお、図は、５バイトのライトデータ［Ｄ−１］〜［Ｄ−５］が１バイトずつ順に蓄積された状態を示している。
【００５３】
そして、ＦＩＦＯ側バッファ制御部６１４は、ＦＩＦＯ側バッファ６１２の蓄積量を監視し、４バイト以上のライトデータが蓄積された状態になると、取り込みレディＧｅｔＲｅａｄｙをアサートするとともに、蓄積されたライトデータのうち、先に蓄積されたデータの順で４バイト分のライトデータをまとめて、コントロール側バッファ部６２へ出力する。ただし、ＦＩＦＯ側バッファ６１２に蓄積されているライトデータが４バイト未満であっても、総データ転送数が４バイト未満の端数を有しているライトデータのうちの、最後の４バイト未満のライトデータである場合には、ＦＩＦＯ側バッファ制御部６１４は、これら４バイト未満のライトデータをコントロール側バッファ部６２へ出力する。
【００５４】
コントロール側バッファ部６２のコントロール側バッファ制御部６２４は、ＦＩＦＯ側バッファ部６１から出力された４バイトのライトデータを受け取る毎に変化する取り込み通知ＲＣＶを出力するとともに、受け取ったライトデータをコントロール側バッファ６２２に蓄積する。
【００５５】
なお、ＦＩＦＯ側バッファ６１２から読み出されてＦＩＦＯ側バッファ部６１からコントロール側バッファ部６２へ出力されるライトデータの更新は、コントロール側バッファ部６２から出力される取り込み通知ＲＣＶの変化タイミングに基づいて、ＦＩＦＯ側バッファ制御部６１４によって実行される。具体的には、取り込み通知ＲＣＶの変化を、システムクロックＳｙｓＣｌｋに同期させることにより検出した変化タイミングに基づいて実行される。
【００５６】
そして、コントロール側バッファ部６２のコントロール側バッファ制御部６２４は、ＦＩＦＯ側バッファ部６１から出力された４バイト単位のライトデータをコントロール側バッファ６２２に蓄積すると、送信レディＣ＿ＴＸＲａｄｙを転送コントロール部２０に対してアサートするとともに、蓄積したライトデータを１バイト単位で送信データＣ＿ＴＸＤａｔａ［７：０］として出力する。図は、ＦＩＦＯ側バッファ６１２に順に蓄積された４バイトのライトデータ［Ｄ−１］〜［Ｄ−４］が、４バイト単位でコントロール側バッファ６２２に蓄積された状態を示している。転送コントロール部２０への出力は、［Ｄ−１］，［Ｄ−２］，［Ｄ−３］，［Ｄ−４］，・・・の順で実行される。
【００５７】
ここで、コントロール側バッファ制御部６２４は、転送コントロール部２０によって、ライトデータが受信されたことを示す送信バリッドＣ＿ＴＸＶａｌｉｄがアサートされると、送信データＣ＿ＴＸＤａｔａ［７：０］として出力するライトデータを、次のデータに更新する。これにより、コントロール側バッファ制御部６２４は、順次ライトデータを転送コントロール部２０に送信する。従って、通常は、送信レディＣ＿ＴＸＲｅａｄｙがアサートされている状態において、送信バリッドＣ＿ＴＸＶａｌｉｄが転送クロックＳＤＣＬＫの周期Ｔｃで変化して与えられることにより、転送クロックＳＤＣＬＫの周期Ｔｃで、送信データＣ＿ＴＸＤａｔａ［７：０］が転送コントロール部２０に送信される。
【００５８】
また、コントロール側バッファ制御部６２４は、コントロール側バッファ６２２に蓄積された４バイト単位のライトデータの４バイト目のライトデータを、送信データＣ＿ＴＸＤａｔａ［７：０］として出力すると、これに応じて、上記した取り込み通知ＲＣＶを変化させる。このとき、コントロール側バッファ制御部６２４は、上記したように、ＦＩＦＯ側バッファ部６１から既に出力されているライトデータを受け取ってコントロール側バッファ６２２に蓄積することができる。また、上記したように、ＦＩＦＯ側バッファ部６１では、ＦＩＦＯ側バッファ部６１が出力するライトデータが次の４バイト分のデータに更新されて出力される。ただし、この出力されたライトデータは、次の通知ＲＣＶの変化において、コントロール側バッファ６２２に蓄積される。
【００５９】
なお、連続してライト動作が実行される場合、取り込み通知ＲＣＶは、転送クロックＳＤＣＬＫの周期Ｔｃの４倍の間隔で反転するトグル信号となり、ＦＩＦＯ側バッファ部６１からコントロール側バッファ部６２へのライトデータの受け渡しは、転送クロックＳＤＣＬＫの周期Ｔｃの４倍の間隔で実行される。
【００６０】
また、ＦＩＦＯ側バッファ部６１は周波数Ｆｓｙｓ（６０ＭＨｚ）のシステムクロックＳｙｓＣｌｋに基づいて動作し、コントロール側バッファ部６２はシステムクロックＳｙｓＣｌｋよりも低い周波数Ｆｃ（５０ＭＨｚ）の転送クロックＳＤＣＬＫに基づいて動作する。従って、ライト動作時におけるＦＩＦＯ側バッファ部６１のＦＩＦＯ側バッファ６１２は、基本的には満状態または満状態に近い状態で動作する。ＦＩＦＯ側バッファ６１２が満状態の場合には、ＦＩＦＯ側バッファ制御部６１４は、送信バリッドＳ＿ＴＸＶａｌｉｄをネゲートすることにより、ＦＩＦＯＩ／Ｆ部５０からのライトデータの送信を停止することにより、容易にＦＩＦＯ側バッファ６１２の状態を制御することができる。
【００６１】
以上のことから、ＦＩＦＯ側バッファ部６１は、ＦＩＦＯＩ／Ｆ部５０からシステムクロックＳｙｓＣｌｋに基づいて１バイト単位で送信されるライトデータを順に蓄積する。そして、蓄積したライトデータを４バイト単位でコントロール側バッファ部６２に出力する。そして、コントロール側バッファ部６２は、４バイト単位でＦＩＦＯ側バッファ部６１から出力されるライトデータを蓄積し、蓄積した４バイト分のライトデータを１バイト単位で順に転送クロックＳＤＣＬＫに基づいて転送コントロール部２０へ送信することができる。すなわち、ライトデータの転送コントロール部２０への送信は、通常、転送クロックＳＤＣＬＫの周期Ｔｃで、１バイト単位で順に実行することができる。
【００６２】
また、ＦＩＦＯ側バッファ部６１から出力される４バイト単位のライトデータの、コントロール側バッファ部６２における蓄積は、先に蓄積された４バイト分のライトデータが転送コントロール部２０へ送信されるごとに実行することが可能となる。従って、４バイト単位のライトデータのＦＩＦＯ側バッファ部６１からの出力は、先に蓄積された４バイト分のライトデータが転送コントロール部２０へ送信されるのに応じて実行することが可能である。
【００６３】
なお、上記したように、ライトデータの転送コントロール部２０への送信は、通常は、転送クロックＳＤＣＬＫの周期Ｔｃで、１バイト単位で順に実行されるので、ＦＩＦＯ側バッファ部６１からの４バイト単位のライトデータの出力は、転送クロックＳＤＣＬＫの周期Ｔｃの４倍の周期で実行すればよく、システムクロックＳｙｓＣｌｋの周期Ｔｓｙｓ（約１６．７ｎｓ）で４バイト分のライトデータがＦＩＦＯ側バッファ６１２に蓄積される時間（約６６．７ｎｓ）よりも、転送クロックＳＤＣＬＫの周期Ｔｃ（２０ｎｓ）の４倍の周期（８０ｎｓ）のほうが、長くなる。
【００６４】
従って、ブリッジ部６０では、ライト動作時において、ＦＩＦＯＩ／Ｆ部５０から、周波数Ｆｓｙｓ（６０ＭＨｚ）のシステムクロックＳｙｓＣｌｋに基づいて１バイト単位で受信されるライトデータを、システムクロックＳｙｓＣｌｋに非同期である周波数Ｆｃ（５０ＭＨｚ）の転送クロックに基づいて、転送コントロール部２０に１バイト単位で送信することが可能となる。
【００６５】
なお、ＳＤＭＭＣコントローラの機能として、ＳＤＭＭＣコントローラの動作に起因して、メモリカードへのライトデータの書き込みが中断されないことが要求される。本実施例のＳＤＭＭＣコントローラ１０は、以下で説明するように上記要求を満足することができる。
【００６６】
上記したように、ＦＩＦＯ側バッファ部６１のＦＩＦＯ側バッファ６１２に４バイト以上のライトデータが蓄積された状態、すなわち、コントロール側バッファ部６２にライトデータを出力することができる状態では、ＦＩＦＯ側バッファ制御部６１４が取り込みレディＧｅｔＲｅａｄｙをコントロール側バッファ部６２に対してアサートすることにより、コントロール側バッファ制御部６２４が転送コントロール部２０に対して送信レディＣ＿ＴＸＲｅａｄｙをアサートし、転送コントロール部２０はメモリカードに対して転送クロックを供給する。これにより、メモリカードへのライトデータの書き込みが実行される。
【００６７】
また、ＦＩＦＯ側バッファ６１２にライトデータが４バイト未満のライトデータしか蓄積されていない状態、あるいは、ライトデータの蓄積が終了した状態、すなわち、コントロール側バッファ部６２にライトデータを出力することができない状態では、ＦＩＦＯ側バッファ制御部６１４が取り込みレディＧｅｔＲｅａｄｙをコントロール側バッファ部６２に対してネゲートすることにより、コントロール側バッファ制御部６２４が転送コントロール部２０に対して送信レディＣ＿ＴＸＲｅａｄｙをネゲートし、転送コントロール部２０はメモリカードに対して転送クロックの供給を停止する。これにより、メモリカードへのライトデータの書き込みが中断あるいは停止される。ただし、ＦＩＦＯ側バッファ６１２に蓄積されているライトデータが４バイト未満であっても、蓄積終了後のライトデータである場合には、ＦＩＦＯ側バッファ制御部６１４は、これら４バイト未満のライトデータをコントロール側バッファ部６２に出力し、出力したライトデータがコントロール側バッファ部６２のコントロール側バッファ６２２に蓄積された後で、取り込みレディＧｅｔＲｅａｄｙをネゲートする。
【００６８】
従って、ブリッジ部６０は、ＦＩＦＯバッファからライトデータが供給されており、メモリカードへ書き込むライトデータがＦＩＦＯ側バッファ６１２に蓄積されている状態では、蓄積されているライトデータを転送コントロール部２０へ出力する。これにより、ブリッジ部６０に起因してライトデータのメモリカードへの書き込みが停止されることはなく、ＳＤＭＭＣコントローラの動作に起因してメモリカードへのライトデータの書き込みが中断されないようにすることができる。
【００６９】
Ｃ．リード動作時のブリッジ部の動作：
メモリカードからデータを読み出す場合には、ＣＰＵＩ／Ｆ部４０のレジスタにリード動作に対応して設定されている処理方向データＤＩＲがブリッジ部６０に供給される。ブリッジ部６０は、リード動作に対応して供給された処理方向データＤＩＲに応じて、ＦＩＦＯ側バッファ部６１およびコントロール側バッファ部６２を動作させる。
【００７０】
図３は、リード動作時におけるブリッジ部６０のＦＩＦＯ側バッファ部６１およびコントロール側バッファ部６２を機能的に示す説明図である。
【００７１】
リード動作時においては、コントロール側バッファ部６２は、転送コントロール部２０から送信されるリードデータを受信して蓄積しつつ、ＦＩＦＯ側バッファ部６１に受け渡す。また、ＦＩＦＯ側バッファ部６１は、コントロール側バッファ部６２から受け渡されたリードデータを蓄積しつつ、ＦＩＦＯＩ／Ｆ部５０に送信する。これにより、ブリッジ部６０は、転送コントロール部２０からＦＩＦＯＩ／Ｆ部５０へのリードデータの受け渡しを中継する。
【００７２】
リード動作時においても、ライト動作時と同様に、ＦＩＦＯ側バッファ部６１は、ＦＩＦＯ側バッファ６１２と、このバッファの動作を制御するＦＩＦＯ側バッファ制御部６１４と、で構成される。また、コントロール側バッファ部６２は、コントロール側バッファ６２２と、このバッファの動作を制御するコントロール側バッファ制御部６２４と、で構成される。
【００７３】
ただし、コントロール側バッファ部６２において、コントロール側バッファ６２２は、ライト動作時の場合と違い、４バイトのバッファ領域が２バイトを１組として２組の領域に区分される。コントロール側バッファ制御部６２４も、ライト動作時の場合と違い、転送コントロール部２０から送信されるリードデータの受信およびコントロール側バッファ６２２への格納を制御するとともに、ＦＩＦＯ側バッファ部６１への出力を制御する。
【００７４】
また、ＦＩＦＯ側バッファ部６１において、ＦＩＦＯ側バッファ６１２は、ライト動作時の場合と違い、２バイトの領域を未使用とせず、かつ、４バイトを１組とする２組の領域に区分せずに、１０バイトのバッファ領域の全てが有効領域として利用される。ＦＩＦＯ側バッファ制御部６１４も、ライト動作時の場合と違い、コントロール側バッファ部６２から出力されるリードデータの受け取りおよびＦＩＦＯ側バッファ６１２への格納を制御するとともに、ＦＩＦＯＩ／Ｆ部５０への送信を制御する。
【００７５】
リード動作時において、ＦＩＦＯ側バッファ部６１およびコントロール側バッファ部６２は、以下のように動作して、転送コントロール部２０からＦＩＦＯＩ／Ｆ部５０へのリードデータの受け渡しの中継を実現する。
【００７６】
コントロール側バッファ部６２のコントロール側バッファ制御部６２４は、コントロール側バッファ６２２が満状態でなく、リードデータの蓄積が可能である場合には、転送コントロール部２０へ受信レディＣ＿ＲＸＲｅａｄｙをアサートする。このとき、コントロール側バッファ制御部６２４は、転送コントロール部２０から転送クロックＳＤＣＬＫに基づいて受信バリッドＣ＿ＲＸＶａｌｉｄがアサートされると、転送コントロール部２０から受信バリッドＣ＿ＲＸＶａｌｉｄとともに１バイト単位で送出されるリードデータＣ＿ＲＸＤａｔａ［７：０］を受け取り、コントロール側バッファ６２２に蓄積する。図は、３バイトのリードデータ［Ｄ−１］〜［Ｄ−３］がコントロール側バッファ６２２に蓄積された状態を示している。
【００７７】
なお、転送コントロール部２０から送出される１バイト単位のリードデータの変化は、受信レディＣ＿ＲＸＲｅａｄｙがアサートされている状態においては、転送クロックＳＤＣＬＫに基づいて、具体的には、転送クロックＳＤＣＬＫの周期Ｔｃで変化する受信バリッドＣ＿ＲＸＶａｌｉｄに基づいて実行される。
【００７８】
そして、バッファ制御部６２４は、コントロール側バッファ６２２に２バイト以上のリードデータが蓄積されると、取り込み指示ＧｅｔＤａｔｅを出力するとともに、蓄積されたリードデータのうち、先に蓄積されたデータの順で２バイト分のリードデータをまとめて、ＦＩＦＯ側バッファ部６１へ出力する。この取り込み指示ＧｅｔＤａｔａは、転送コントロール部２０から２バイトのデータを受信して、コントロール側バッファ６２２に蓄積される度に変化する信号、すなわち、転送クロックＳＤＣＬＫの周期Ｔｃの２倍の周期で反転を繰り返すトグル信号である。また、出力するリードデータの更新は、この取り込み指示ＧｅｔＤａｔａの変化に同期して実行される。ただし、コントロール側バッファ６２２に蓄積されているリードデータが２バイト未満であっても、総データ転送数が２バイト未満の端数を有しているライトデータのうちの、最後の２バイト未満のリードデータである場合には、コントロール側バッファ制御部６２４は、これら２バイト未満のリードデータをＦＩＦＯ側バッファ部６１へ出力する。
【００７９】
ＦＩＦＯ側バッファ部６１のＦＩＦＯ側バッファ制御部６１４は、コントロール側バッファ部６２から出力される取り込み指示ＧｅｔＤａｔａの変化を、システムクロックＳｙｓＣｌｋに同期させて検出し、検出した変化タイミングで、コントロール側バッファ部６２から出力される２バイト単位のリードデータを受け取り、ＦＩＦＯ側バッファ６１２に蓄積する。
【００８０】
ここで、コントロール側バッファ部６２からＦＩＦＯ側バッファ部６１へのリードデータの出力を２バイト単位とすることにより、取り込み指示ＧｅｔＤａｔａの変化は、上記したように転送クロックＳＤＣＬＫの周期Ｔｃの２倍の間隔（４０ｎｓ）とすることができる。この間隔は、システムクロックＳｙｓＣｌｋの周期Ｔｓｙｓ（約１６．７ｎｓ）の２倍以上の間隔であるため、取り込み指示ＧｅｔＤａｔａの変化を、システムクロックＳｙｓＣｌｋに同期させて検出することが可能となり、転送クロックＳＤＣＬＫとシステムクロックＳｙｓＣｌｋとの周波数の差を吸収することが可能となる。
【００８１】
そして、ＦＩＦＯ側バッファ制御部６１４は、ＦＩＦＯ側バッファ６１２にリードデータが蓄積された状態において、ＦＩＦＯＩ／Ｆ部５０から受信レディＳ＿ＲＸＲｅａｄｙがアサートされると、受信バリッドＳ＿ＲＸＶａｌｉｄをアサートするとともに、ＦＩＦＯ側バッファ６１２に蓄積したリードデータを１バイト単位で受信データＳ＿ＲＸＤａｔａ［７：０］として出力する。なお、図は、コントロール側バッファ６２２に最初に蓄積された２バイトのリードデータ［Ｄ−１］，［Ｄ−２］がＦＩＦＯ側バッファ６１２に蓄積された状態を示している。ＦＩＦＯＩ／Ｆ部５０へは、［Ｄ−１］，［Ｄ−２］，・・・の順で出力される。
【００８２】
ここで、受信バリッドＳ＿ＲＸＶａｌｉｄは、受信レディＳ＿ＲＸＲｅａｄｙのアサートが維持されている状態においては、通常、システムクロックＳｙｓＣｌｋに基づいて、具体的には、システムクロックＳｙｓＣｌｋの周期Ｔｓｙｓで、繰り返しアサートされる。これにより、ＦＩＦＯ側バッファ部６１からＦＩＦＯＩ／Ｆ部５０へのリードデータの送信は、システムクロックＳｙｓＣｌｋの周期Ｔｓｙｓで繰り返される。
【００８３】
ところで、ＦＩＦＯＩ／Ｆ部５０がリードデータを受信できない場合には、受信レディＳ＿ＲＸＲｅａｄｙがネゲートされ、ＦＩＦＯ側バッファ部６１では、コントロール側バッファ部６２から出力されるリードデータの蓄積のみが繰り返され、ＦＩＦＯＩ／Ｆ部５０への出力がされない。
【００８４】
ここで、ＦＩＦＯ側バッファ制御部６１４は、ＦＩＦＯ側バッファ６１２へのリードデータの蓄積量が、あらかじめ設定したしきい値Ｔｈｆｕｌｌを超えた場合には、満状態通知Ｆｕｌｌをコントロール側バッファ部６２のコントロール側バッファ制御部６２４に対してアサートする。このとき、コントロール側バッファ制御部６２４は、受信レディＣ＿ＲＸＲｅａｄｙを転送コントロール部２０に対してネゲートする。このとき、転送コントロール部２０は、転送クロックＳＤＣＬＫのメモリカードへの伝送を停止し、メモリカードからのデータの読み出しを停止する。従って、コントロール側バッファ制御部６２４は、転送コントロール部２０からのリードデータの送信を停止させることができる。この結果、コントロール側バッファ部６２からブリッジ部６０へのリードデータの出力が停止される。
【００８５】
なお、しきい値Ｔｈｆｕｌｌについては、以下の観点で設定される。すなわち、受信レディＣ＿ＲＸＲｅａｄｙがネゲートされた時点では、例えば、コントロール側バッファ６２２にリードデータが４バイト蓄積されており、タイムラグ等により、２バイトのリードデータがＦＩＦＯ側バッファ部６１へ出力され、新たに２バイト程度のリードデータが受信されてしまい、満状態通知Ｆｕｌｌがアサートされた後に６バイトのリードデータがコントロール側バッファ部６２からＦＩＦＯ側バッファ部６１へ出力される可能性もある。そこで、このタイムラグ等に起因してコントロール側バッファ部６２から出力されるリードデータに対応する領域をマージンとして確保する必要がある。例えば、マージンを６バイトとすると、しきい値Ｔｈｆｕｌｌの値は、バッファ領域のサイズが１０バイトの場合には、４バイトと設定される。
【００８６】
以上説明したように、ブリッジ部６０は、リード動作時において、転送コントロール部２０から、周波数Ｆｃ（５０ＭＨｚ）の転送クロックＳＤＣＬＫに基づいて１バイト単位で送信されるリードデータを、転送クロックＳＤＣＬＫに非同期である周波数Ｆｓｙｓ（６０ＭＨｚ）のシステムクロックＳｙｓＣｌｋに基づいて、ＦＩＦＯＩ／Ｆ部５０に１バイト単位で送信することができる。
【００８７】
なお、ＳＤＭＭＣコントローラの機能として、ＳＤＭＭＣコントローラの動作に起因して、メモリカードからのリードデータの読み出しが中断されないことが要求される。本実施例のＳＤＭＭＣコントローラ１０は、以下で説明するように上記要求を満足することができる。
【００８８】
ＦＩＦＯ側バッファ部６１は転送クロックＳＤＣＬＫよりも周波数の高いシステムクロックＳｙｓＣｌｋに基づいて動作しているので、基本的には、ＦＩＦＯバッファへのリードデータの送信が行われている間は、ＦＩＦＯ側バッファ６１２が満状態となることはなく、ＦＩＦＯバッファへのリードデータの送信が停止した場合にＦＩＦＯ側バッファ６１２が満状態となる可能性がある。
【００８９】
従って、ブリッジ部６０に起因して転送コントロール部２０からの転送クロックＳＤＣＬＫの伝送が停止されることにより、メモリカードからのリードデータの読み出しが停止されることはなく、ＳＤＭＭＣコントローラの動作に起因してメモリカードからのリードデータの読み出しが中断されないようにすることができる。
【００９０】
Ｄ．効果：
本発明のインタフェースコントローラとしてのＳＤＭＭＣコントローラ１０は、ＦＩＦＯＩ／Ｆ部５０と転送コントロール部２０との間に、上記したように動作するブリッジ部６０を備えることにより、ホスト装置内において、周波数Ｆｓｙｓ（６０ＭＨｚ）のシステムクロックＳｙｓＣｌｋに基づいて受信されるライトデータを、システムクロックＳｙｓＣｌｋとは異なるソースクロックＳＣｌｋ（周波数Ｆｓ：５０ＭＨｚ）に基づいて生成される非同期のクロックであり、システムクロックＳｙｓＣｌｋとは異なる周波数Ｆｃ（５０ＭＨｚ）の転送クロックＳＤＣＬＫに基づいてメモリカードに送信することができる。また、メモリカードから転送クロックＳＤＣＬＫに基づいて送信されたリードデータを、システムクロックＳｙｓＣｌｋに基づいてホスト装置内の他のブロックへ送信することができる。
【００９１】
ところで、単純には、ホスト装置内において、ＳＤＭＭＣコントローラのＦＩＦＯＩ／ＦとＦＩＦＯバッファとの間にブリッジ部を設けて、ＳＤＭＭＣコントローラは転送クロックに基づいて動作させることが考えられる。しかしながら、上記実施例で説明したように、ＦＩＦＯＩ／Ｆバスを介して接続されるＦＩＦＯバッファとしては、例えば、ＵＳＢコントローラのＦＩＦＯバッファが想定される。このＵＳＢコントローラのＦＩＦＯバッファでは、その内部側でのデータの処理単位は、必ずしも固定ではなく、１バイト，２バイト，４バイト，７バイト等の種々の単位である場合があるのに対し、出力される単位は、例えば、４バイト固定である。このため、ＳＤＭＭＣコントローラのＦＩＦＯＩ／Ｆ部とＦＩＦＯバッファとの間に設けるブリッジ部では、ＦＩＦＯバッファから出力される４バイトのデータを、上記処理単位に応じて正確に管理しなければならないため、その実現が非常に困難である。
【００９２】
一方、本発明のインタフェースコントローラであるＳＤＭＭＣコントローラ１０では、データの送受が１バイト単位で実行されるＦＩＦＯＩ／Ｆ部５０と転送コントロール部２０の間にブリッジ部６０を設けているので、上記問題は発生しない。
【００９３】
また、ＳＤＭＭＣコントローラ１０は、ブリッジ部６０の動作に起因しては、メモリカードへのライトデータの書き込みやメモリカードからのリードデータの読み出しが中断されないようにすることができる。
【００９４】
Ｅ．変形例：
なお、この発明は上記実施例や実施の形態に限られるものではなく、その要旨を逸脱しない範囲において種々の形態において実施することが可能である。
【００９５】
上記説明では、メモリカードとしてＳＤカードの場合を例に説明したが、ＭＭＣの場合にも適用可能である。また、ＳＤ−ＩＯカードやＣＥ−ＡＴＡドライブ装置のように、ＳＤカードやＭＭＣのインタフェース仕様をベースとするインタフェースに準拠した外部機器に対しても、同様に、適用可能である。
【００９６】
上記説明では、システムクロックＳｙｓＣｌｋを周波数Ｆｓｙｓ（６０ＭＨｚ）のクロックとし、システムクロックＳｙｓＣｌｋとは異なるソースクロックＳＣｌｋ（周波数Ｆｃ：５０ＭＨｚ）に基づいて生成される非同期のクロックであり、システムクロックＳｙｓＣｌｋとは異なる周波数Ｆｃ（５０ＭＨｚ）のクロックを転送クロックＳＤＣＬＫとした場合を例に説明しているが、これに限定されるものではなく、例えば、転送クロックＳＤＣＬＫの周波数Ｆｃを、ＭＭＣのインタフェースの仕様により規定される５２ＭＨｚや２６ＭＨｚの場合にも適用可能である。また、システムクロックＳｙｓＣｌｋの周波数Ｆｓｙｓも同様に種々の周波数とすることができる。すなわち、外部機器のインタフェースの仕様に従って決定される周波数のクロックを転送クロックとし、転送クロックの周波数とは異なる周波数のクロックをシステムクロックとし、転送クロックとシステムクロックとが、周波数が高い方のクロックの周波数が、周波数が低い方のクロックの周波数の整数倍とはならない関係を有している種々の場合にも適用可能である。なお、転送クロックとシステムクロックとが、周波数が高い方のクロックの周波数が、周波数が低い方のクロックの周波数の整数倍とはならない関係は、転送クロックとシステムクロックとが互いに異なる周波数で非同期であることを意味している。
【００９７】
上記説明では、ＦＩＦＯ側バッファ６１２のバッファ領域を１０バイト、コントロール側バッファ６２２のバッファ領域を４バイトとして説明したが、これに限定されるものではなく、種々のサイズとすることができる。
【００９８】
上記説明では、リード動作時において、コントロール側バッファ部６２では、転送コントロール部２０から１バイト単位で受信するリードデータをコントロール側バッファ６２２で順次蓄積するとともに、ＦＩＦＯ側バッファ部６１へ２バイト単位で出力している。また、ＦＩＦＯ側バッファ部６１では、コントロール側バッファ部６２から出力される２バイト単位のリードデータを順次蓄積するとともに、１バイト単位でＦＩＦＯＩ／Ｆ部５０へ送信している。しかしながら、これに限定されるものではなく、以下のようにすることができる。すなわち、コントロール側バッファ部６２では、転送コントロール部からｎバイト単位（ｎは整数）で受信するリードデータをコントロール側バッファで順次蓄積するとともに、ＦＩＦＯ側バッファ部へ２ｎバイト単位で出力してもよい。そして、ＦＩＦＯ側バッファ部では、リードデータを２ｎバイト単位で蓄積するとともに、ｎバイト単位でＦＩＦＯＩ／Ｆ部へ送信してもよい。
【００９９】
上記説明では、ライト動作時において、ＦＩＦＯ側バッファ部６１では、ＦＩＦＯＩ／Ｆ部５０から１バイト単位で受信するライトデータをＦＩＦＯ側バッファ６１２で順次蓄積するとともに、コントロール側バッファ部６２へ４バイト単位で出力している。また、コントロール側バッファ部６２では、ＦＩＦＯ側バッファ部６１から出力される４バイト単位のライトデータを順次蓄積するとともに、１バイト単位で転送コントロール部２０へ順次送信している。しかしながら、これに限定されるものではなく、以下のようにすることができる。すなわち、ＦＩＦＯ側バッファ部では、ＦＩＦＯＩ／Ｆ部からｎバイト単位で受信するライトデータをＦＩＦＯ側バッファで順次蓄積するとともに、コントロール側バッファ部へ４ｎバイト単位で出力してもよい。また、コントロール側バッファ部では、ＦＩＦＯバッファ部から出力される４ｎバイト単位のライトデータを順次蓄積するとともに、ｎバイト単位で転送コントロール部へ順次送信してもよい。
【０１００】
上記説明では、リード動作時において、コントロール側バッファ部６２からＦＩＦＯ側バッファ部６１へリードデータを２バイト単位で出力するようにしているが、２バイト以上の複数バイト単位で出力するようにしてもよい。同様に、上記説明では、ライト動作時において、ＦＩＦＯ側バッファ部６１からコントロール側バッファ部６２へライトデータを４バイト単位で出力するようにしているが、４バイト以上の複数バイト単位で出力するようにしてもよい。
【図面の簡単な説明】
【０１０１】
【図１】本発明の一実施例としてのインタフェースコントローラの構成を示すブロック図である。
【図２】ライト動作時におけるブリッジ部６０のＦＩＦＯ側バッファ部６１およびコントロール側バッファ部６２を機能的に示す説明図である。
【図３】リード動作時におけるブリッジ部６０のＦＩＦＯ側バッファ部６１およびコントロール側バッファ部６２を機能的に示す説明図である。
【符号の説明】
【０１０２】
１０…ＳＤＭＭＣコントローラ
２０…転送コントロール部
３０…転送クロック生成部
４０…ＣＰＵＩ／Ｆ部
５０…ＦＩＦＯＩ／Ｆ部
６０…ブリッジ部
６１…ＦＩＦＯ側バッファ部
６２…コントロール側バッファ部
６１２…ＦＩＦＯ側バッファ
６１４…ＦＩＦＯ側バッファ制御部
６２２…コントロール側バッファ
６２４…コントロール側バッファ制御部
【図１】
2008282128.tif 000003
【図２】
2008282128.tif 000004
【図３】
2008282128.tif 000005