(57)【要約】【課題】メモリカードが必要に応じて挿抜されるシステムにおいて、データ転送時におけるビット間スキューを調整し、データ転送の信頼性を向上させる。【解決手段】ホストにメモリカードが挿入され、通信が正常に行われると、該メモリカードに書き込まれたテストデータライトを読み出し、その際にビット間スキュー検出回路２４が検出したビット間スキューの検出データをビット間スキュー表示レジスタ２５から読み出し、問題がない場合、あるいは、タイミング選択レジスタ２３によるビット間スキューの調整で問題がないと判断するとメモリカードに対するリード／ライト動作を行う。また、ビット間スキュー値、またはタイミング選択レジスタ２３によるビット間スキューの調整に問題がある場合、ビット間スキューの調整、またはビット幅の縮小などの処理を行う。【選択図】  図２
2007249753.tif 000002
【特許請求の範囲】
【請求項１】
データ転送におけるビット数とデータ転送に用いられるクロック信号の周波数が切り替え可能なメモリカードが外部接続される情報処理装置であって、
前記情報処理装置は、前記メモリカードを管理するコントローラを備え、
前記コントローラは、
前記メモリカードが前記情報処理装置に接続された際に、前記メモリカードに書き込まれたテストデータを読み出してビット間スキューを検出し、その検出結果に基づいてビット間スキューの調整を行うことを特徴とする情報処理装置。
【請求項２】
請求項１記載の情報処理装置において、
前記コントローラは、
前記メモリカードからテストデータを読み出した際のビット間スキューを検出するビット間スキュー検出部と、
前記ビット間スキュー検出部が検出したビット間スキューの検出結果を格納するビット間スキュー検出結果格納部と、
前記ビット間スキュー検出結果格納部の格納された検出結果から、選択制御信号を生成するスキュー制御部と、
選択制御信号に基づいて、データの入出力信号を任意に遅延させてビット間スキューを調整する遅延時間調整部とを備えたことを特徴とする情報処理装置。
【請求項３】
請求項１または２記載の情報処理装置において、
前記コントローラは、
データの入力信号によるビット間スキューと、データの出力信号によるビット間スキューとを個別に調整することを特徴とする情報処理装置。
【請求項４】
請求項１〜３のいずれか１項に記載の情報処理装置において、
前記コントローラは、
ビット間スキューの調整が不可の際にデータ転送のビット幅を縮小することを特徴とする情報処理装置。
【請求項５】
請求項１〜４のいずれか１項に記載の情報処理装置において、
前記コントローラは、
ビット間スキューを検出する前に、前記メモリカードの種類、動作モード、およびデータ転送に用いられるクロック信号の周波数に応じて、データ転送に用いられるすべてのビットにおけるデータ入出力タイミングを一律して調整することを特徴とする情報処理装置。
【請求項６】
請求項５記載の情報処理装置において、
前記コントローラは、
データ転送用のクロック信号を任意に遅延させるクロック遅延時間調整部を備え、
前記クロック遅延時間調整部は、
データ転送に用いられるクロック信号を任意に遅延させることによってデータ転送に用いられるすべてのビットのデータ入出力のタイミングを一律して調整することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置におけるデータ転送技術に関し、特に、メモリカードを用いたデータ転送時におけるデータ通信の信頼性の向上に有効な技術に関する。
【背景技術】
【０００２】
パーソナルコンピュータや多機能端末機などの外部記憶メディアとして、たとえば、マルチメディアカード（登録商標）やＳＤ（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）カード（登録商標）などのメモリカードが広く知られている。
【０００３】
マルチメディアカード（以下、ＭＭＣという）／ＳＤカードでは、データバスのビット幅、データ転送のクロック周波数を変更可能な複数のモードを持っている。たとえば、ＭＭＣでは、１ビットのビット幅で約２０ＭＨｚのクロック周波数によりデータ転送を行うモードと、８ビットのビット幅で約５２ＭＨｚのクロック周波数によりデータ転送を行うモードとがある。
【０００４】
また、ＭＭＣとＳＤカードとでは、データ転送に用いられるバス幅、セットアップタイム／ホールドタイムに相違がある。異なる規格のメモリカードを共通のインタフェースを介してホスト装置に接続することは通常行われないが、ＳＤカード規格は、ＭＭＣ規格から派生したメモリカード規格であることから、両規格のメモリカードは共通のインタフェースを介してホスト装置に接続されることも多い。
【０００５】
このような場合、メモリカードが接続されているホストシステムとしては、すべてのメモリカードでのデータ転送を可能とするために、最も厳しい規格値に基づいて設計を行うことが通常である。
【０００６】
また、複数のビットバスでのデータ転送を行う場合には、ビット間でのスキューをも考慮することが必要となり、このようなビット間のスキューを調整する技術として、たとえば、特許文献１〜３を始めとする技術が開示されている。
【特許文献１】特開２００２−１８９６８９号公報
【特許文献２】特開２００５−３０３７５３号公報
【特許文献３】特開２００４−１２７１４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところが、上記のようなメモリカードにおけるデータ転送技術では、次のような問題点があることが本発明者により見い出された。
【０００８】
本発明者が検討したところによれば、最も厳しい規格値に基づいて設計を行う場合、メモリカードの動作制御を行う半導体集積回路装置で規格を満足するだけでは足りず、半導体集積回路装置とメモリカードとが接続されるコネクタと、その間を接続するバスとを有するシステム全体として最も厳しい規格値に基づいて規格を満足することが必要であり、データ転送のクロック周波数が高速化するに伴い、設計が困難になっていることが判明した。
【０００９】
また、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）メモリモジュールのように、一旦装着された後は固定的に装着された状態であることが通常の場合、コネクタとＤＲＡＭメモリモジュール間の接続状態により接触抵抗が大きく変化することは通常ないが、ＭＭＣ／ＳＤカードのような必要に応じて挿抜されるメモリカードの場合は、挿入状態により接触抵抗が大きく変化することも明らかとなった。
【００１０】
本発明の目的は、ＭＭＣ／ＳＤカードのようなメモリカードを必要に応じて挿抜されるシステムにおいて、一定の規格値を満足するような設計を行った後、メモリカードとのデータ転送のモードに応じて満足する必要のある規格値でデータ転送が行われることが可能な調整機能を持った半導体集積回路装置を提供することにある。
【００１１】
また、本発明の他の目的は、そのような半導体集積回路装置を用いたシステムにおけるシステム設計方法を提供することにある。
【００１２】
本発明の前記ならびにそのほかの目的と新規な特徴については、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１３】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
【００１４】
本発明は、データ転送におけるビット数とデータ転送に用いられるクロック信号の周波数が切り替え可能なメモリカードが外部接続される情報処理装置であって、該情報処理装置は、メモリカードを管理するコントローラを備え、該コントローラは、メモリカードが情報処理装置に接続された際に、メモリカードに書き込まれたテストデータを読み出してビット間スキューを検出し、その検出結果に基づいてビット間スキューの調整を行うものである。
【００１５】
また、本願のその他の発明の概要を簡単に示す。
【００１６】
本発明は、前記コントローラが、メモリカードからテストデータを読み出した際のビット間スキューを検出するビット間スキュー検出部と、該ビット間スキュー検出部が検出したビット間スキューの検出結果を格納するビット間スキュー検出結果格納部と、該ビット間スキュー検出結果格納部の格納された検出結果から、選択制御信号を生成するスキュー制御部と、選択制御信号に基づいて、データの入出力信号を任意に遅延させてビット間スキューを調整する遅延時間調整部とを備えたものである。
【００１７】
また、本発明は、前記コントローラが、データの入力信号によるビット間スキューと、データの出力信号によるビット間スキューとを個別に調整するものである。
【００１８】
さらに、本発明は、前記コントローラが、ビット間スキューの調整が不可の際にデータ転送のビット幅を縮小するものである。
【００１９】
また、本発明は、前記コントローラが、ビット間スキューを検出する前に、メモリカードの種類、動作モード、およびデータ転送に用いられるクロック信号の周波数に応じて、データ転送に用いられるすべてのビットにおけるデータ入出力タイミングを一律して調整するものである。
【００２０】
さらに、本発明は、前記コントローラが、データ転送用のクロック信号を任意に遅延させるクロック遅延時間調整部を備え、該クロック遅延時間調整部は、データ転送に用いられるクロック信号を任意に遅延させることによってデータ転送に用いられるすべてのビットのデータ入出力のタイミングを一律して調整するものである。
【発明の効果】
【００２１】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。
【００２２】
（１）接続されたメモリカード毎にデータ転送タイミングを最適に調整することができるので、情報処理装置におけるデータ転送を安定して行うことができる。
【００２３】
（２）また、上記（１）により、情報処理装置における高品質なデータ転送の高速化を図るとともに、該情報処理装置の信頼性を大幅に向上させることができる。
【発明を実施するための最良の形態】
【００２４】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００２５】
図１は、本発明の一実施の形態によるホストに設けられたホストコントローラ、およびメモリカードの接続例を示す説明図、図２は、図１のホストコントローラに設けられた入出力回路の一例を示す説明図、図３は、図１のホストコントローラに設けられた遅延時間選択回路の構成例を示す説明図、図４は、図３の遅延時間選択回路における選択制御データによる遅延時間の変化例を示した説明図、図５は、図１のホストコントローラに設けられたタイミング選択レジスタの構成例を示した説明図、図６は、図１のホストコントローラに設けられたビット間スキュー検出回路の構成例を示す説明図、図７は、図６のビット間スキュー検出回路の動作タイミングを示すタイミングチャート、図８は、図１のホストコントローラによるソフトウェア処理の一例を示すフローチャート、図９は、図２の入出力回路におけるクロック信号ＣＬＫの出力回路とデータＤＡＴ（０）の入出力回路とに注目した説明図、図１０は、図９の遅延時間選択回路によるタイミング調整の一例を示すタイミングチャート、図１１は、図９の遅延時間選択回路によるタイミング調整の他の例を示すタイミングチャート、図１２は、本発明の一実施の形態によるビット間スキュー調整におけるタイミングチャート、図１３は、図２のホストコントローラに設けられたビット間スュー検出回路の検出結果を示す説明図、図１４は、ビット間スキュー表示レジスタに格納されたサンプリング結果に基づく入力側の遅延時間選択回路の調整例を示す説明図、図１５は、ビット間スキュー表示レジスタに格納されたサンプリング結果に基づく出力側の遅延時間選択回路の調整例を示す説明図である。
【００２６】
本実施の形態において、図１は、ホスト（情報処理装置）に設けられたホストコントローラ（コントローラ）１、およびメモリカード２の接続例を示す説明図である。ホストは、パーソナルコンピュータや多機能端末機などの情報処理装置からなり、ホストコントローラ１は、コマンド送信、レスポンス受信、およびデータ送受信などの制御を行う。メモリカード２は、たとえば、ホストの外部記憶メディアとして用いられる。
【００２７】
メモリカード２は、ホストに設けられたカードソケット３を介してホストコントローラ２に接続されている。カードソケット３とホストコントローラ２とは、ホストコントローラ２、およびカードソケット３が実装されたプリント配線基板４に形成された配線５を介して接続されている。
【００２８】
この場合、メモリカード２におけるデータバスのビット幅は、８ビットのビット幅となっており、配線５は、データＤＡＴ（０）〜ＤＡＴ（７）を伝達するデータバス、メモリカード２との通信用クロック信号として用いられるクロック信号ＣＬＫを伝達するクロック信号線、コマンドＣＭＤを伝達するコマンド線、およびメモリカード２に供給する電源電圧ＶＤＤ，基準電位ＶＳＳ１，ＶＳＳ２のそれぞれを供給する電源線から構成されている。
【００２９】
図２は、ホストコントローラ２に設けられた入出力回路６の一例を示す説明図である。
【００３０】
入出力回路６は、フリップフロップ７〜９，１０1 〜１０8 ，１１1 〜１１8 、バッファ１２〜１４，１５1 〜１５8 ，１６1 〜１６8 、遅延時間選択回路１７〜２０，２１1 〜２１8 ，２２1 〜２２8 、タイミング選択レジスタ２３、スキュー検出回路（ビット間スキュー検出部）２４、ならびにビット間スキュー表示レジスタ（ビット間スキュー結果格納部）２５から構成されている。
【００３１】
フリップフロップ７のデータ入力端子には、クロック信号ＣＬＫが入力されるように接続されており、該フリップフロップ７のデータ出力端子には、バッファ１２の入力部、および遅延時間選択回路（クロック遅延時間調整部）１７，１８の入力部がそれぞれ接続されている。そして、バッファ１２の出力部からクロック信号ＣＬＫがメモリカード２に出力される。
【００３２】
フリップフロップ８のデータ入力端子には、コマンドＣＭＤが入力されるように接続されており、該フリップフロップ８のデータ出力端子には、遅延時間選択回路（遅延時間調整部）１９の入力部が接続されている。
【００３３】
遅延時間選択回路１９の出力部には、バッファ１３の入力部が接続されている。このバッファ１３の出力部からコマンドＣＭＤがメモリカード２に出力される。バッファ１４の入力部には、メモリカード２からのコマンドＣＭＤが入力されるように接続されている。
【００３４】
バッファ１４の出力部には、遅延時間選択回路２０の入力部が接続されており、該遅延時間選択回路２０の出力部には、フリップフロップ９のデータ入力端子が接続されている。
【００３５】
フリップフロップ１０1 のデータ入力端子には、データＤＡＴ（０）が入力されるように接続されており、該フリップフロップ１０1 のデータ出力端子には、遅延時間選択回路２１1 の入力部が接続されている。遅延時間選択回路２１1 の出力部には、バッファ１５1 の入力部が接続されている。バッファ１５1 の出力部からデータＤＡＴ（０）がメモリカード２に出力される。
【００３６】
バッファ１６1 の入力部には、メモリカード２からのデータＤＡＴ（０）が入力されるように接続されている。バッファ１６1 の出力部には、遅延時間選択回路２２1 の入力部が接続されている。この遅延時間選択回路２２1 の出力部には、フリップフロップ１１1 のデータ入力端子が接続されている。
【００３７】
以下、同様に、フリップフロップ１０2 〜１０8 のデータ入力端子には、データＤＡＴ（１）〜ＤＡＴ（７）が入力されるようにそれぞれ接続されている。これらフリップフロップ１０2 〜１０8 のデータ出力端子には、遅延時間選択回路２１2 〜２１8 の入力部がそれぞれ接続されている。
【００３８】
遅延時間選択回路２１2 〜２１8 の出力部には、バッファ１５2 〜１５8 の入力部がそれぞれ接続されている。バッファ１５2 〜１５8 の出力部からデータＤＡＴ（１）〜ＤＡＴ（７）がメモリカード２にそれぞれ出力される。
【００３９】
バッファ１６2 〜１６8 の入力部には、メモリカード２からのデータＤＡＴ（１）〜ＤＡＴ（７）が入力されるようにそれぞれ接続されている。バッファ１６2 〜１６8 の出力部には、遅延時間選択回路２２2 〜２２8 の入力部がそれぞれ接続されている。この遅延時間選択回路２２2 〜２２8 の出力部には、フリップフロップ１１2 〜１１8 のデータ入力端子がそれぞれ接続されている。
【００４０】
また、フリップフロップ９，１１1 〜１１8 のクロック端子には、遅延時間選択回路１７の出力部がそれぞれ接続されており、フリップフロップ８，１０1 〜１０8 のクロック端子には、遅延時間選択回路１８の出力部がインバータＩｖを介してそれぞれ接続されている。
【００４１】
ビット間スキュー検出回路２４の入力部ｄｉｎ（０）〜ｄｉｎ（７）には、バッファ１６1 〜１６8 の出力部がそれぞれ接続されている。ビット間スキュー検出回路２４には、基準クロック信号ｃｌｋｓ、ビットタイミング信号ｂｔ、およびサンプリングタイミング信号ｓｔが入力されるようにそれぞれ接続されている。
【００４２】
遅延時間選択回路１７，１８は、タイミング選択レジスタ（スキュー制御部）２３に格納された選択制御データｓｅｌに基づいてクロック信号ＣＬＫを任意に遅延させ、データＤＡＴ（０）〜ＤＡＴ（７）の入力側のフリップフロップ１１1 〜１１8 、ならびに出力側のフリップフロップ１０1 〜１０8 のクロックタイミングをそれぞれ調整する。
【００４３】
遅延時間選択回路１９は、タイミング選択レジスタ２３に格納された選択制御データｓｅｌに基づいてコマンドＣＭＤの信号を任意に遅延させ、フリップフロップ８からバッファ１３までのコマンドＣＭＤの出力タイミングを任意に調整する。
【００４４】
遅延時間選択回路（遅延時間調整部）２０は、タイミング選択レジスタ２３に格納された選択制御データｓｅｌに基づいてコマンドＣＭＤの信号を任意に遅延させ、バッファ１４から出力された該コマンドＣＭＤがフリップフロップ９に入力されるまでの出力タイミングを調整する。
【００４５】
遅延時間選択回路（遅延時間調整部）２１1 〜２１8 は、タイミング選択レジスタ２３に格納されたｓｅｌに基づいて、データＤＡＴ（０）〜ＤＡＴ（７）の信号を任意に遅延させ、フリップフロップ１０1 〜１０8 からバッファ１５1 〜１５8 までのデータＤＡＴ（０）〜ＤＡＴ（７）の出力タイミングを任意にそれぞれ調整する。
【００４６】
遅延時間選択回路（遅延時間調整部）２２1 〜２２8 は、タイミング選択レジスタ２３に格納された選択制御データｓｅｌに基づいてデータＤＡＴ（０）〜ＤＡＴ（７）の信号を任意に遅延させ、バッファ１６1 〜１６8 から出力されたデータＤＡＴ（０）〜ＤＡＴ（７）がフリップフロップ１１1 〜１１8 に入力されるまでの出力タイミングをそれぞれ調整する。
【００４７】
タイミング選択レジスタ２３は、たとえば、ホストコントローラ１に設けられ、スキュー制御部を構成するＣＰＵ（Ｃｅｎｔａｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の制御により選択制御データｓｅｌを格納する。
【００４８】
ビット間スキュー検出回路２４は、データＤＡＴ（０）〜ＤＡＴ（７）を伝達するデータ線におけるビット間スキューを検出する。ビット間スキュー表示レジスタ２５は、ビット間スキュー検出回路２４が検出したビット間スキューの検出結果を格納する。ビット間スキュー検出回路２４は、前述したＣＰＵによりアクセス可能であり、該ＣＰＵが検出結果を読み出すことができる。
【００４９】
図３は、遅延時間選択回路１７の構成例を示す説明図である。この図３では、遅延時間選択回路１７の構成例を示しているが、その他の遅延時間選択回路１８〜２０，２１1 〜２１8 ，２２1 〜２２8 についても、遅延時間選択回路１７と同様の構成である。
【００５０】
遅延時間選択回路１７は、バッファ１７ａ〜１７ｄ、およびセレクタ１７ｅから構成されている。セレクタ１７ｅは、第１〜第５の入力部を備えており、タイミング選択レジスタ２３に格納された選択制御データｓｅｌに基づいて、これら第１〜第５の入力部に入力された信号のいずれか１つを選択して出力する。
【００５１】
バッファ１７ａ〜１７ｄは、遅延時間選択回路１７の入力部とセレクタ１７ｅの第５の入力部との間に直列接続されている。
セレクタ１７ｅにおける第１の入力部には、バッファ１７ａの入力部が接続されている。
【００５２】
また、第２の入力部には、バッファ１７ａの出力部とバッファ１７ｂの入力部とが接続された接続部が接続されており、第３の入力部には、バッファ１７ｂの出力部とバッファ１７ｃの入力部とが接続された接続部が接続されている。
【００５３】
第４の入力部には、バッファ１７ｃの出力部とバッファ１７ｄの入力部とが接続された接続部が接続されており、第５の入力部には、前述したようにバッファ１７ｄの出力部が接続されている。
【００５４】
図４は、遅延時間選択回路１７における選択制御データｓｅｌによる遅延時間の変化例を示した図である。
【００５５】
たとえば、選択制御データｓｅｌが’０００’の場合、セレクタ１７ｅは、第５の入力部に入力された信号を出力するように選択する。よって、入力信号は、バッファ１７ａ〜７７ｄを介した信号が出力されることになり、その場合の遅延時間は、図４に示すように、約５ｎｓとなる。
【００５６】
また、選択制御データｓｅｌが’０１０’の場合には、バッファ１７ａ，１７ｂを介した信号がセレクタ１７ｅから出力される。その場合の遅延時間は、約３ｎｓとなる。
【００５７】
図５は、タイミング選択レジスタ２３の構成例を示した説明図である。
【００５８】
図５においては、左から右にかけて、’タイミング選択レジスタ２３のビット’、および’ビット機能’をそれぞれ示している。
【００５９】
タイミング選択レジスタ２３は、前述したように、選択制御データｓｅｌによって遅延時間選択回路１７〜２０，２１1 〜２１8 ，２２1 〜２２8 の遅延時間を制御するレジスタである。
【００６０】
たとえば、タイミング選択レジスタ２３のビット６３−６１が’０１０’に設定されると、遅延時間選択回路１７が選択され、該遅延時間選択回路１７の遅延時間が約３ｎｓ（図４）となる。
【００６１】
これにより、コマンドＣＭＤ、およびデータＤＡＴ（０）〜ＤＡＴ（７）の入力側におけるフリップフロップ９，１１1 〜１１8 のクロックタイミングが一律して約３ｎｓに設定されることになる。
【００６２】
図６は、ビット間スキュー検出回路２４の構成例を示す説明図である。
【００６３】
ビット間スキュー検出回路２４は、シフトレジスタ２４ａ1 〜２４ａ8 、サンプリングクロック生成部２４ｂ、ならびにインバータ２４ｄから構成されている。
【００６４】
サンプリングクロック生成部２４ｂは、サンプリングクロック信号ｓｃｌｋを生成する。このサンプリングクロック生成部２４ｂは、２つの論理積回路ＡＮＤ１，ＡＮＤ２から構成されている。
【００６５】
論理積回路ＡＮＤ１の一方の入力部には、基準クロック信号ｃｌｋｓが入力されるように接続されており、該論理積回路ＡＮＤ１の他方の入力部には、論理積回路ＡＮＤ２の出力部が接続されている。
【００６６】
論理積回路ＡＮＤ２の一方の入力部には、ビットタイミング信号ｂｔが入力されるように接続されており、該論理積回路ＡＮＤ２の他方の入力部には、サンプリングタイミング信号ｓｔが入力されるように接続されている。
【００６７】
そして、論理積回路ＡＮＤ１の出力部から、サンプリングクロック信号ｓｃｌｋが出力される。サンプリングクロック信号ｓｃｌｋは、シフトレジスタ２４ａ1 を構成するフリップフロップｄ０（１），ｄ０（３），ｄ０（５），ｄ０（７），ｄ０（９），ｄ０（１１），ｄ０（１３），ｄ０（１５），ｄ０（１７），ｄ０（１９）のクロック端子にそれぞれ供給されている。
【００６８】
同様に、サンプリングクロック信号ｓｃｌｋは、シフトレジスタ２４ａ2 〜２４ａ8 を構成するフリップフロップｄ１（１）〜ｄ７（１），ｄ１（３）〜ｄ７（３），ｄ１（５）〜ｄ７（５），ｄ１（７）〜ｄ７（７），ｄ１（９）〜ｄ７（９），ｄ１（１１）〜ｄ７（１１），ｄ１（１３）〜ｄ７（１３），ｄ１（１５）〜ｄ７（１５），ｄ１（１７）〜ｄ７（１７），ｄ１（１９）〜ｄ７（１９）のクロック端子にそれぞれ供給されている。
【００６９】
また、シフトレジスタ２４ａ1 を構成するフリップフロップｄ０（０），ｄ０（２），ｄ０（４），ｄ０（６），ｄ０（８），ｄ０（１０），ｄ０（１２），ｄ０（１４），ｄ０（１６），ｄ０（１８）のクロック端子には、インバータ２４ｄを介してサンプリングクロック信号ｓｃｌｋの反転信号が供給されている。
【００７０】
同様に、シフトレジスタ２４ａ2 〜２４ａ8 を構成するフリップフロップｄ１（０）〜ｄ７（０），ｄ１（２）〜ｄ７（２），ｄ１（４）〜ｄ７（４），ｄ１（６）〜ｄ７（６），ｄ１（８）〜ｄ７（８），ｄ１（１０）〜ｄ７（１０），ｄ１（１２）〜ｄ７（１２），ｄ１（１４）〜ｄ７（１４），ｄ１（１６）〜ｄ７（１６），ｄ１（１８）〜ｄ７（１８）のクロック端子には、インバータ２４ｃを介してサンプリングクロック信号ｓｃｌｋの反転信号が供給されている。
【００７１】
基準クロック信号ｃｌｋｓは、メモリカード２に対して供給するクロック信号ＣＬＫよりも高い周波数のクロック信号であり、ビット間スキューの検出する刻み幅から周波数が決定される。
【００７２】
シフトレジスタ２４ａ1 （〜２４ａ8 ）は、サンプリングクロック信号ｓｃｌｋの立ち上がりに同期してバッファ１６1 （〜１６8 ）から出力されるデータＤＡＴ（０）（〜ＤＡＴ（７））の信号値を取り込み、シフトするものと、サンプリングクロック信号ｓｃｌｋの立ち下がりに同期してバッファ１５1 （〜１５8 ）に入力されるデータＤＡＴ（０）（〜ＤＡＴ（７））の信号値を取り込み、シフトするものとからなる。
【００７３】
シフトレジスタ２４ａ1 （〜２４ａ8 ）は、サンプリング回数分の段数を必要とし、図６では、たとえば、１０段となっている。
【００７４】
サンプリングクロック生成部２４ｂには、前述したように基準クロック信号ｃｌｋｓ、ビットタイミング信号ｂｔ、およびサンプリングタイミング信号ｓｔがそれぞれ入力される。
【００７５】
ビットタイミング信号ｂｔは、メモリコントローラ１に設けられた受信制御回路から出力される信号であり、サンプリングするビットを受信したときに’１’となる。サンプリングタイミング信号ｓｔは、ビットタイミング信号ｂｔが’１’のときに基準クロック信号ｃｌｋｓをカウントし、そのカウント値をデコードすることによって生成され、サンプリングの開始からシフトレジスタ２４ａ1 〜２４ａ8 のシフト期間中’１’となる。
【００７６】
たとえば、クロック信号ＣＬＫの周期が４０ｎｓ、サンプリングクロック信号ｓｃｌｋの周期が２ｎｓの場合におけるビット間スキュー検出回路２４の動作タイミングは、図７に示すようなタイミングチャートとなる。
【００７７】
図７においては、上方から下方にかけて、クロック信号ＣＬＫ、バッファ１６1 （バッファ１６2 〜１６7 ）から出力されるデータＤＡＴ（０）、バッファ１６8 から出力されるＤＡＴ（７）、基準クロック信号ｃｌｋｓ、ビットタイミング信号ｂｔ、サンプリングクロック信号ｓｃｌｋ、およびシフトレジスタ２４ａ1 ，２４ａ8 における信号のタイミングをそれぞれ示している。
【００７８】
この場合、ビット間スキュー検出回路２４は、サンプリングクロック信号ｓｃｌｋの信号立ち上がりと立ち下がりタイミングにおいて、データＤＡＴ（０）〜ＤＡＴ（７）をそれぞれサンプリングし、シフトする。
【００７９】
図７におけるデータＤＡＴ（０），ＤＡＴ（７）のサンプリング結果は、以下に示すように、
ｄ（０）＝００００１１１１１１１１１１００００００  （２進数）
ｄ（７）＝００００００１１１１１１１１１１００００  （２進数）
となる。
【００８０】
よって、図７では、ＤＡＴ（０）の信号に対してＤＡＴ（７）の信号が２ｎｓ遅延していると判断することができる。なお、ビット間スキュー検出回路２４が検出したデータＤＡＴ（０）〜ＤＡＴ（７）のサンプリング値は、ビット間スキュー表示レジスタ２５に格納され、ＣＰＵによって読み出すことが可能となる。
【００８１】
次に、本実施の形態によるホストコントローラ１における作用について説明する。
【００８２】
図８は、ホストコントローラ１のソフトウェア処理の一例を示すフローチャートである。
【００８３】
まず、ホストコントローラ１が、ホストのカードソケット３にメモリカードが挿入されたことを該カードソケット３からの信号により検出すると（ステップＳ１０１）、ホストコントローラ１は、初期化を行うコマンドであるコマンドＣＭＤ５５とコマンドＣＭＤ４１を発行する。
【００８４】
メモリカード２からレスポンスを正しく受信した場合、ホストコントローラ１は、ＳＤメモリカードと識別し、該メモリカード２からレスポンスを受信しない場合にはＭＭＣと認識する（ステップＳ１０２）。
【００８５】
続いて、識別したメモリカードに見合った初期化を実行し（ステップＳ１０３）、メモリカード２をＤａｔａ  Ｔｒａｎｓｆｅｒ  Ｓｔａｔｅに移行させる。ＭＭＣの場合、最低でも、初期化用のコマンドとしてコマンドＣＭＤ１→コマンドＣＭＤ２→コマンドＣＭＤ３→コマンドＣＭＤ７の発行が必要となる。
【００８６】
続いて、ホストコントローラ１は、テストデータライトを行う。このテストデータライトは、データ転送のビット幅を１ビットに設定し、低周波数のクロック信号ＣＬＫによりテストデータ（たとえば、０ｘ５５ＡＡなど）をメモリカード２に書き込む（ステップＳ１０４）。
【００８７】
なお、テストデータをライトせずに、すでに書き込まれているファイルシステムにおけるＦＡＴ（Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅｓ）のＭａｓｔｅｒ  Ｂｏｏｔ  ＲｅｃｏｒｄのＳｉｇｎａｔｕｒｅ  Ｗｏｒｄなどを利用するようにしてもよい。
【００８８】
そして、ホストコントローラ１は、挿入されたメモリカード２に応じてモード設定（たとえば、通常モード（Ｄｅｆａｕｌｔ  Ｍｏｄｅ）／高速モード（Ｈｉｇｈ  Ｓｐｅｅｄ  Ｍｏｄｅ）など）を行い、データ転送のビット幅を１ビットに維持したまま（ＭＭＣの場合には、コマンドＣＭＤ６を発行して設定を行う）、該メモリカード２の動作モードに応じたデータ転送用のクロック信号ＣＬＫの周波数を設定する（ステップＳ１０５）。
【００８９】
続いて、ホストコントローラ１は、挿入されたメモリカード２、設定したモード、クロック信号ＣＬＫの周波数に応じてタイミング選択レジスタ２３を設定し（ステップＳ１０６）、クロック信号ＣＬＫ、コマンドＣＭＤ、およびデータＤＡＴ（０）の入出力タイミングを調整する。
【００９０】
このステップＳ１０６では、挿入されたメモリカード２、設定したモード、およびクロック信号ＣＬＫの周波数に応じて規定される入力セットアップタイム、入力ホールドタイム、および出力遅延時間に対応するのにホストコントローラ１がタイミング選択レジスタ２３を設定する。
【００９１】
ホストコントローラ１は、テストデータをリード（ＭＭＣの場合には、コマンドＣＭＤ１７を発行）し（ステップＳ１０７）、通信エラーがなく期待通りに受信ができていることを確認する（ステップＳ１０８）。
【００９２】
通信エラーが発生している場合には、ステップＳ１０５の処理に戻り、クロック信号ＣＬＫの周波数を下げるか、タイミング選択レジスタ２３の設定値を見直すかして、通信エラーがなくなるまで、ステップＳ１０５〜Ｓ１０８の処理を繰り返し実行する。
【００９３】
また、ステップＳ１０８の処理において、通信が正常に行われている場合、ホストコントローラ２は、挿入されているメモリカード２に応じてビット幅（たとえば、８ビット）を設定（ＭＭＣではコマンドＣＭＤ６を発行）する（ステップＳ１０９）。
【００９４】
続いて、後述するステップＳ１１２の判定結果に基づいて、タイミング選択レジスタ２３によるビット間スキューの調整を行う（ステップＳ１１０）。なお、初回の場合には、ステップＳ１１０の処理はスルーされることになる。
【００９５】
そして、メモリカード２のテストデータをリード（ＭＭＣではコマンドＣＭＤ１７を発行）し、その際にビット間スキュー検出回路２４が検出したビット間スキューの検出データをビット間スキュー表示レジスタ２５から読み出す（ステップＳ１１１）。
【００９６】
ホストコントローラ１は、ビット間スキュー値に問題がない場合、あるいは、タイミング選択レジスタ２３によるビット間スキューの調整で問題がないと判断すると（ステップＳ１１２）、コマンドＣＭＤ１８やコマンドＣＭＤ２５などのデータ転送用コマンドを使用してメモリカード２に対するリード／ライト動作を行う（ステップＳ１１３）。
【００９７】
また、ステップＳ１１２の処理において、ビット間スキュー値、またはタイミング選択レジスタ２３によるビット間スキューの調整に問題がある場合、ステップＳ１０９の処理に戻り、ステップＳ１０９〜Ｓ１１２の処理により、ビット間スキューの調整、またはビット幅の縮小などの処理を行う。
【００９８】
なお、ステップＳ１０１〜Ｓ１０３の処理は、低クロック周波数（たとえば、約４００ｋＨｚ）で、データのビット幅を１ビットに設定して処理を行い、ステップＳ１０４〜Ｓ１１２の処理後に、挿入されたメモリカード２に応じて最適なクロック周波数、および最適なビット幅により、ステップＳ１１３によるデータ転送が行われる。
【００９９】
次に、入出力回路６によるモード、およびクロック信号ＣＬＫに関するタイミング調整について、図９、および図１０を用いて説明する。
【０１００】
図９は、入出力回路６（図２）におけるクロック信号ＣＬＫの出力回路とデータＤＡＴ（０）の入出力回路とに注目した説明図である。また、図１０は、入出力回路６によるモード、およびクロック信号ＣＬＫに関するタイミング調整の一例を示すタイミングチャートである。
【０１０１】
図１０においては、上方から下方にかけて、クロック信号ＣＬＫ、入力されるデータＤＡＴ（０）、フリップフロップ９と遅延時間選択回路２０とが接続されるノードｎｄ０ｉ（図９）、フリップフロップ９のクロック端子と遅延時間選択回路１７とが接続されるノードｎｃｌｋｉ、フリップフロップ８のクロック端子と遅延時間選択回路１８とがインバータＩｖを介して接続されるノードｎｃｌｋｏ、ならびに出力されるデータＤＡＴ（０）の信号タイミングについてそれぞれ示している。
【０１０２】
ここでは、クロック信号ＣＬＫを出力するフリップフロップ７からメモリカード２までの信号遅延時間を、たとえば、２ｎｓと仮定する。また、データＤＡＴ（０）が入出力される遅延時間選択回路２１1 ，２２1 の信号遅延時間が３ｎｓに設定されているものと仮定する。
【０１０３】
図８のステップＳ１０６処理において、クロック信号ＣＬＫの周波数が５０ＭＨｚ、データＤＡＴ（０）における入力セットアップタイムが６ｎｓ、入力ホールドタイムが２ｎｓ、データＤＡＴ（０）の出力遅延時間が０ｎｓ〜４ｎｓとなるメモリカード２のモードに対応する場合、図９に示すように、入力タイミングに関しては遅延時間選択回路１７をマージンを考慮して３ｎｓに設定するように調整する。また、出力遅延に関しては遅延時間選択回路１８を１ｎｓ（図５の最小値）に設定するように調整する。
【０１０４】
また、図８のステップＳ１０６の処理にて、クロック信号ＣＬＫの周波数が２０ＭＨｚ、入力セットアップタイムが５ｎｓ、入力ホールドタイムが５ｎｓとなるメモリカード２のモードに対応する場合、図１１に示すように、入力タイミングに関して遅延時間選択回路１７をマージンを考慮して５ｎｓに設定する。
【０１０５】
次に、ビット間スキューの調整技術について説明する。
【０１０６】
図１２は、入力側ビット間スキューの調整例を示したタイミングチャートである。図１２において、上方から下方にかけて、クロック信号ＣＬＫ、入力されるデータＤＡＴ（０）〜ＤＡＴ（７）、ならびにサンプリングクロック信号ｓｃｌｋ（周期＝２ｎｓ）における信号タイミングをそれぞれ示している。
【０１０７】
また、図１３は、図１２の信号タイミングにおいて、ビット間スキュー検出回路２４がサンプリングした結果をビット間スキュー表示レジスタ２５に格納したサンプリング結果例を示したものである。
【０１０８】
図１２、および図１３より、ビット間スキュー検出回路２４のサンプリング結果を、ＣＰＵがビット間スキュー表示レジスタ２５から読み出すことにより、データＤＡＴ（０）に対して、データＤＡＴ（２）とデータＤＡＴ（３）とが約２ｎｓ早く変化しており、入力のホールドタイムマージンが減少していることを確認することができる。
【０１０９】
また、データＤＡＴ（０）に対して、データＤＡＴ（６）とデータＤＡＴ（７）とが約２ｎｓ遅く変化しているので、入力のセットアップマージンが減少することを確認することができる。
【０１１０】
よって、ビット間スキュー表示レジスタ２５に格納されたサンプリング結果（図１３）に基づいて、データＤＡＴ（０）〜ＤＡＴ（７）の入力側の遅延時間選択回路２２1 〜２２8 を、図１４に示すように変更することによって、入力側ビット間スキューを調整することが可能となる。
【０１１１】
また、ホストコントローラ１とメモリカード２との通信が双方向通信であることから、出力側に関しても同様のビット間スキューが発生することが予想される。よって、データＤＡＴ（０）〜ＤＡＴ（７）の出力側の遅延時間選択回路２１1 〜２１8 を、図１５に示すように設定することにより、出力側ビット間スキューを調整することが可能となる。
【０１１２】
それにより、本実施の形態によれば、メモリカード２をカードソケット３に挿入した後にタイミング調整を行うことができるので、最適なバスタイミングを実現することが可能となり、データ送受信の信頼性を向上させることができる。
【０１１３】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【０１１４】
本発明は、情報処理システムにおけるデータ転送の高速、消費電力の低減、および高信頼性化を実現する技術に適している。
【図面の簡単な説明】
【０１１５】
【図１】本発明の一実施の形態によるホストに設けられたホストコントローラ、およびメモリカードの接続例を示す説明図である。
【図２】図１のホストコントローラに設けられた入出力回路の一例を示す説明図である。
【図３】図１のホストコントローラに設けられた遅延時間選択回路の構成例を示す説明図である。
【図４】図３の遅延時間選択回路における選択制御データによる遅延時間の変化例を示した説明図である。
【図５】図１のホストコントローラに設けられたタイミング選択レジスタの構成例を示した説明図である。
【図６】図１のホストコントローラに設けられたビット間スキュー検出回路の構成例を示す説明図である。
【図７】図６のビット間スキュー検出回路の動作タイミングを示すタイミングチャートである。
【図８】図１のホストコントローラによるソフトウェア処理の一例を示すフローチャートである。
【図９】図２の入出力回路におけるクロック信号の出力回路とデータＤＡＴ（０）の入出力回路とに注目した説明図である。
【図１０】図９の遅延時間選択回路によるタイミング調整の一例を示すタイミングチャートである。
【図１１】図９の遅延時間選択回路によるタイミング調整の他の例を示すタイミングチャートである。
【図１２】本発明の一実施の形態によるビット間スキュー調整におけるタイミングチャートである。
【図１３】図２のホストコントローラに設けられたビット間スキュー検出回路の検出結果を示す説明図である。
【図１４】ビット間スキュー表示レジスタに格納されたサンプリング結果に基づく入力側の遅延時間選択回路の調整例を示す説明図である。
【図１５】ビット間スキュー表示レジスタに格納されたサンプリング結果に基づく出力側の遅延時間選択回路の調整例を示す説明図である。
【符号の説明】
【０１１６】
１  ホストコントローラ（コントローラ）
２  メモリカード
３  カードソケット
４  プリント配線基板
５  配線
６  入出力回路
７〜９  フリップフロップ
１０1 〜１０8   フリップフロップ
１１1 〜１１8   フリップフロップ
１２〜１４  バッファ
１５1 〜１５8   バッファ
１６1 〜１６8   バッファ
１７  遅延時間選択回路（クロック遅延時間調整部）
１７ａ〜１７ｄ  バッファ
１７ｅ  セレクタ
１８  遅延時間選択回路（クロック遅延時間調整部）
１９  遅延時間選択回路（遅延時間調整部）
２０  遅延時間選択回路（遅延時間調整部）
２１1 〜２１8   遅延時間選択回路（遅延時間調整部）
２２1 〜２２8   遅延時間選択回路（遅延時間調整部）
２３  タイミング選択レジスタ（スキュー制御部）
２４  スキュー検出回路（ビット間スキュー検出部）
２４ａ1 〜２４ａ8   シフトレジスタ
２４ｂ  サンプリングクロック生成部
２４ｄ  インバータ
２５  ビット間スキュー表示レジスタ（ビット間スキュー結果格納部）
Ｉｖ  インバータ
ＡＮＤ１，ＡＮＤ２  論理積回路
【図１】
2007249753.tif 000003
【図２】
2007249753.tif 000004
【図３】
2007249753.tif 000005
【図４】
2007249753.tif 000006
【図５】
2007249753.tif 000007
【図６】
2007249753.tif 000008
【図７】
2007249753.tif 000009
【図８】
2007249753.tif 000010
【図９】
2007249753.tif 000011
【図１０】
2007249753.tif 000012
【図１１】
2007249753.tif 000013
【図１２】
2007249753.tif 000014
【図１３】
2007249753.tif 000015
【図１４】
2007249753.tif 000016
【図１５】
2007249753.tif 000017