説明

ホストコントローラ、電子機器、及び、エラー判定方法

【課題】処理速度を向上させること等が可能なホストコントローラ等を提供する。
【解決手段】カードスロット6に装着されたカードが実行可能な所望のコマンドをカードに発行する旨の指示情報及びカードの様式と所望のコマンドとの組み合わせに関連付けられたチェックパターンを特定するためのルックアップ値を受け取るレジスタ制御部22と、カードに所望のコマンドを発行し、カードから所望のコマンドに対する応答を受け取るSDMMC制御部23と、テーブル記憶部31に記憶されたレスポンスチェックビットテーブルの中からルックアップ値によって特定されるチェックパターンを取得し、当該チェックパターン及びカードのレスポンスのカードステータスに基づいて、応答におけるエラーの有無を判定するカードステータスエラー判定部32とを含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置とデバイスとの間の媒介を行うホストコントローラ、そのようなホストコントローラを含む電子機器、及び、そのようなホストコントローラが実行するエラー判定方法に関する。
【背景技術】
【0002】
パーソナルコンピュータや多機能端末機などの外部記憶メディアの1つとして、標準化団体であるMMCA(MultiMedia Card Association)が標準化したマルチメディアカード(登録商標)やSDA(SD Card Association)が標準化したSD(Secure Digital)カード(登録商標)などが広く知られており、デジタルビデオカメラの静止画像記録、携帯電話装置のデータ記録、携帯音楽プレーヤの音楽記録などに用いられている。
【0003】
なお、関連する技術として、下記の非特許文献1には、上記カードのホストコントローラ技術が記載されている。
【非特許文献1】Interface編集部 編,TECH I シリーズ vol.14 PCカード/メモリカードの徹底研究,初版,CQ出版社,2002年10月,p.216−256
【発明の開示】
【発明が解決しようとする課題】
【0004】
上記したように、現在、種々のカードが用いられており、また、これらのカードの仕様の各々には、複数のバージョンが存在している。さらに、カードの仕様、バージョンの各々において、多数のコマンドが規定されている。そのため、上記したカードを装着可能な電子機器等において、カードの種類、バージョン、コマンド等の組み合わせに応じたレスポンスのエラー判定処理をCPUとプログラム(ソフトウェア)で行っていた。しかしながら、カードの種類、バージョン、コマンド等の組み合わせは多岐にわたるため、判定箇所も多くなり、CPUの処理負荷が大きく、エラー判定に時間がかかってしまうという問題があった。
【0005】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、上記したカードを装着可能な電子機器等における処理速度を向上させること等が可能なホストコントローラ、電子機器、及び、エラー判定方法を提供することにある。
【課題を解決するための手段】
【0006】
上記課題を解決するために本発明は、情報処理装置と、様式が異なる複数のデバイスを装着可能なデバイス装着部に装着されたデバイスと、の間の媒介を行うホストコントローラであって、デバイス装着部に装着可能な複数のデバイスの複数の様式とデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、デバイス装着部に装着可能な複数のデバイスの複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含むエラー判定情報テーブルを記憶する第1の回路と、情報処理装置からデバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドをデバイス装着部に装着されたデバイスに発行する旨の指示情報及びデバイス装着部に装着されたデバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報を特定するためのエラー判定情報特定情報を受け取る第2の回路と、情報処理装置からの所望のコマンドをデバイス装着部に装着されたデバイスに発行する旨の指示情報に基づいて、デバイス装着部に装着されたデバイスに所望のコマンドを発行し、デバイス装着部に装着されたデバイスから所望のコマンドに対する応答を受け取る第3の回路と、エラー判定情報テーブル内の複数のエラー判定情報の中からエラー判定情報特定情報によって特定されるエラー判定情報を取得し、当該エラー判定情報及びデバイス装着部に装着されたデバイスの所望のコマンドに対する応答の内容に関する応答内容情報に基づいて、応答におけるエラーの有無を判定する第4の回路と、を含むホストコントローラに関係する。
【0007】
本発明によれば、デバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報及び所望のコマンドに対する応答の内容に関する応答内容情報に基づいて、応答におけるエラーの有無をハードウェアにより容易に判定することができるようになる。これにより、処理速度を向上させることができる。
【0008】
また本発明に係るホストコントローラでは、エラー判定情報が、応答内容情報内のエラーに関する1つ又は複数の部分を特定する情報であり、第4の回路が、応答内容情報内のエラー判定情報によって特定される1つ又は複数の部分に基づいて、応答におけるエラーの有無を判定するようにしても良い。
【0009】
本発明によれば、応答内容情報内のエラーに関係する部分に対して処理を行うことで、エラーの有無を確実に判定することができる。
【0010】
また本発明に係るホストコントローラでは、デバイス装着部が、複数の種類、仕様、規格、及び/又は、バージョンのデバイスを装着可能であり、第1の回路に記憶されているエラー判定情報テーブルが、デバイス装着部に装着可能な複数のデバイスの種類、仕様、規格、及び/又は、バージョンとデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、デバイス装着部に装着可能な複数のデバイスの複数のコマンドに対する複数の応答におけるエラーの有無の判定にそれぞれ利用するための複数のエラー判定情報を含み、情報処理装置が、デバイス装着部に装着されたデバイスの種類、仕様、規格、及び/又は、バージョンと所望のコマンドとの組み合わせに関連付けられたエラー判定情報をエラー判定情報テーブルの中から取得するようにしても良い。
【0011】
本発明によれば、複数の種類、仕様、規格、及び/又は、バージョンのデバイスに関してもエラー判定を容易に行うことができ、幅広い用途に対応可能となる。
【0012】
また本発明に係るホストコントローラでは、第1の回路に記憶されているエラー判定情報テーブルに含まれている複数のエラー判定情報の内の少なくとも1つが、デバイス装着部に装着可能な複数のデバイスの複数の様式とデバイス装着部に装着可能な複数のデバイスとの複数の組み合わせに関連付けられていることとしてもよい。
【0013】
本発明によれば、複数の様式及び/又はコマンド間でエラー判定情報を共通化でき、エラー判定情報テーブルのサイズを小さくすることができ、回路規模を削減することができる。
【0014】
また本発明に係るホストコントローラでは、エラー判定情報がビットパターンであり、第4の回路が、エラー判定情報と応答内容情報とに論理積演算処理を行い、その結果がゼロであるか否かによって、応答におけるエラーの有無を判定することとしてもよい。
【0015】
本発明によれば、簡易な演算処理でエラーの有無を判定することができ、処理速度を向上させることができる。
【0016】
また本発明に係るホストコントローラでは、第2の回路が、情報処理装置からデバイス装着部に装着されたデバイスに複数のコマンドが発行される場合に複数のコマンドの内の1つのコマンドに対する応答における複数のコマンドの内の1つのコマンドの直前に発行されるコマンドに対するエラーの有無の判定に利用するための直前コマンドエラー判定情報を更に受け取り、第4の回路が、デバイス装着部に装着されたデバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報、応答内容情報、直前コマンドエラー判定情報、及び、デバイス装着部に装着されたデバイスの様式と所望のコマンドの直前に発行されたコマンドとの組み合わせに関連付けられたエラー判定情報に基づいて、所望のコマンドに対する応答におけるエラーの有無を判定するようにしても良い。
【0017】
本発明によれば、所望のコマンドの直前に発行されたコマンドに対するエラーが所望のコマンドに対する応答内にセットされ得る場合であっても、エラーの有無を迅速且つ容易に判定することができる。
【0018】
また本発明に係るホストコントローラでは、第4の回路が、所望のコマンドの直前に発行されたコマンドに対する応答におけるエラーの有無を判定した後に、所望のコマンドの直前に発行されたコマンドのエラー判定情報を記憶し、デバイス装着部に装着されたデバイスの所望のコマンドに対する応答の内容に関する応答内容情報をホストコントローラから取得した後に、デバイス装着部に装着されたデバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報、応答内容情報、所望のコマンドの直前に発行されたコマンドのエラー判定情報、及び、直前コマンドエラー判定情報に基づいて、所望のコマンドに対する応答におけるエラーの有無を判定するようにしても良い。
【0019】
本発明によれば、所望のコマンドの直前に発行されたコマンドに対するエラーが所望のコマンドに対する応答内にセットされ得る場合に、エラーの有無を迅速且つ容易に判定することができる実装を実現することができる。
【0020】
また本発明に係るホストコントローラでは、直前コマンドエラー判定情報が、応答内容情報内の所望のコマンドの直前に発行されたコマンドに対するエラーに関する1つ又は複数の部分を特定するビットパターンであり、第4の回路が、所望のコマンドの直前に発行されたコマンドのエラー判定情報と直前コマンドエラー判定情報とに論理積演算処理を行い、その結果とエラー判定情報とに論理和演算処理を行い、その結果と応答内容情報とに論理積演算処理を行い、その結果がゼロであるか否かによって、応答におけるエラーの有無を判定するようにしても良い。
【0021】
本発明によれば、所望のコマンドの直前に発行されたコマンドに対するエラーが所望のコマンドに対する応答内にセットされ得る場合に、簡易な演算処理でエラーの有無を判定することができ、処理速度を向上させることができる。
【0022】
また本発明は、情報処理装置と、様式が異なる複数のデバイスを装着可能なデバイス装着部と、情報処理装置とデバイス装着部に装着されたデバイスとの間の媒介を行うホストコントローラと、を含む電子機器であって、ホストコントローラが、デバイス装着部に装着可能な複数のデバイスの複数の様式とデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、デバイス装着部に装着可能な複数のデバイスの複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含むエラー判定情報テーブルを記憶する第1の回路と、情報処理装置からデバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドをデバイス装着部に装着されたデバイスに発行する旨の指示情報及びデバイス装着部に装着されたデバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報を特定するためのエラー判定情報特定情報を受け取る第2の回路と、情報処理装置からの所望のコマンドをデバイス装着部に装着されたデバイスに発行する旨の指示情報に基づいて、デバイス装着部に装着されたデバイスに所望のコマンドを発行し、デバイス装着部に装着されたデバイスから所望のコマンドに対する応答を受け取る第3の回路と、エラー判定情報テーブル内の複数のエラー判定情報の中からエラー判定情報特定情報によって特定されるエラー判定情報を取得し、当該エラー判定情報及びデバイス装着部に装着されたデバイスの所望のコマンドに対する応答の内容に関する応答内容情報に基づいて、応答におけるエラーの有無を判定する第4の回路と、を含むことを特徴とする電子機器に関係する。
【0023】
また本発明に係る電子機器では、デバイス装着部に装着可能な複数のデバイスの複数の様式をそれぞれ特定する複数の様式特定情報とデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドをそれぞれ特定する複数のコマンド特定情報との組み合わせに関連付けて、エラー判定情報テーブル内の複数のエラー判定情報を特定するための複数のエラー判定情報特定情報を含むエラー判定情報特定情報テーブルを記憶する記憶回路を更に含み、情報処理装置が、デバイス装着部に装着されたデバイスの様式を特定する様式特定情報と所望のコマンドを特定するコマンド特定情報との組み合わせに関連付けられたエラー判定情報特定情報をエラー判定情報特定情報テーブルの中から取得して、ホストコントローラに送ることとしてもよい。
【0024】
本発明によれば、様式特定情報とコマンド特定情報との組み合わせに関連付けられたエラー判定情報を迅速且つ容易に取得することができるので、処理速度を更に向上させることができる。
【0025】
また本発明に係る電子機器では、情報処理装置が、ホストコントローラの第4の回路が応答におけるエラーが有ったものと判定した場合に、応答におけるエラーの内容を特定する処理を実行するようにしても良い。
【0026】
本発明によれば、まずエラーの有無をハードウェアで判定し、エラーが有った場合にエラーの内容をCPUとプログラム(ソフトウェア)で特定することができるので、エラーが無い場合にCPUが無駄な処理を行わずに済ませることができ、処理速度を向上させることができる。
【0027】
また本発明に係る電子機器では、通信回路を更に含み、通信回路を介してエラー判定情報テーブル及び/又はエラー判定情報特定情報テーブルを更新及び/又は書き換え可能であることとしても良い。
【0028】
本発明によれば、デバイスの様式の追加・変更や、コマンドの追加・変更や、エラー判定情報テーブル及び/又はエラー判定情報特定情報テーブルのデバッグ等に柔軟に対応可能となる。
【0029】
また、本発明は、情報処理装置と、様式が異なる複数のデバイスを装着可能なデバイス装着部に装着されたデバイスと、の間の媒介を行うホストコントローラが実行する方法であって、情報処理装置からデバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドをデバイス装着部に装着されたデバイスに発行する旨の指示情報及びデバイス装着部に装着されたデバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報を特定するためのエラー判定情報特定情報を受け取る工程と、情報処理装置からの所望のコマンドをデバイス装着部に装着されたデバイスに発行する旨の指示情報に基づいて、デバイス装着部に装着されたデバイスに所望のコマンドを発行し、デバイス装着部に装着されたデバイスから所望のコマンドに対する応答を受け取る工程と、デバイス装着部に装着可能な複数のデバイスの複数の様式とデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けてデバイス装着部に装着可能な複数のデバイスの複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための可能な複数のエラー判定情報を含むエラー判定情報テーブルの中から、エラー判定情報特定情報によって特定されるエラー判定情報を取得し、当該エラー判定情報及びデバイス装着部に装着されたデバイスの所望のコマンドに対する応答の内容に関する応答内容情報に基づいて、応答におけるエラーの有無を判定する工程と、を含むエラー判定方法に関係する。
【発明を実施するための最良の形態】
【0030】
以下、本発明の実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成のすべてが本発明の必須構成要件であるとは限らない。
【0031】
1. コマンド及びレスポンス
1.1 コマンド
まず、SDカード(登録商標)の仕様におけるコマンドについて説明する。
図1(a)は、SDカード(登録商標)の仕様におけるコマンドのフォーマットを示す図である。図1(a)に示すように、コマンドは、スタートビット(1ビット)、転送方向ビット(1ビット)、コマンドインデックス(6ビット)、アーギュメント(32ビット)、CRC(7ビット)、及び、エンドビット(1ビット)を含み、計48ビットである。この48ビットのコマンドが、CMD信号線を介して、ホスト側回路からカードにシリアル転送される。
【0032】
転送方向ビットは、コマンドのようにホスト側回路からカードへ転送される場合には「1」であり、後述するレスポンスのようにカードからホスト側回路へ転送される場合には「0」である。
【0033】
コマンドインデックスは、6ビットであり、0(0x00)〜63(0x3F)までの値をとり得る。このコマンドインデックスにより特定されるコマンドが、カードにおいて実行される。
【0034】
アーギュメントは、32ビットであり、コマンドインデックスにより特定されるコマンドの実行に必要な各種の情報を含む。
【0035】
CRC(Cyclic Redundancy Code)は、ホスト側回路とカードとの間の転送エラーをチェックするために、スタートビット、転送方向ビット、コマンドインデックス、及び、アーギュメントの計40ビットに基づいて算出され、アーギュメントの後ろに付加される。
【0036】
なお、MMC(MultiMedia Card)(登録商標)規格におけるコマンドのフォーマットも、図1(a)に示すフォーマットと同様である。但し、コマンドインデックスにより特定されるコマンドの処理内容がSDカード(登録商標)と異なるものもある。
【0037】
1.2 レスポンス
次に、SDカード(登録商標)の仕様におけるレスポンスについて説明する。
図1(b)は、SDカード(登録商標)の仕様におけるレスポンスの内の「R1」というタイプのレスポンスのフォーマットを示す図である。図1(b)に示すように、レスポンスは、スタートビット(1ビット)、転送方向ビット(1ビット)、コマンドインデックス(6ビット)、カードステータス(32ビット)、CRC(7ビット)、及び、エンドビット(1ビット)を含み、計48ビットである。この48ビットのレスポンスが、CMD信号線を介して、カードからホスト側回路にシリアル転送される。
【0038】
転送方向ビットは、レスポンスのようにカードからホスト側回路へ転送される場合には「0」である。
【0039】
コマンドインデックスは、6ビットであり、ホスト側回路からカードに転送されたコマンド内のコマンドインデックスを復唱したものである。
【0040】
カードステータスは、32ビットであり、コマンドインデックスにより特定されるコマンドを実行したカード内のステータスに関する情報を含む。
【0041】
CRCは、カードとホスト側回路との間の転送エラーをチェックするために、スタートビット、転送方向ビット、コマンドインデックス、及び、カードステータスの計40ビットに基づいて算出され、カードステータスの後ろに付加される。
【0042】
SDカード(登録商標)の仕様において、コマンドのフォーマットは上記した1つ(図1(a)参照)が規定されているが、レスポンスのタイプは、上記した「R1」というタイプのほか、「R1b」、「R2」、「R3」、「R6」、及び、「R7」というタイプが規定されている。そして、これら6種類のタイプの内のどのタイプのレスポンスが返されるかは、コマンド毎に規定されている。多数のコマンドに対しては、「R1」というタイプのレスポンスが返されることとして規定されており、少数のコマンドに対して、「R1b」、「R2」、「R3」、「R6」、「R7」というタイプのレスポンスが返されることとして規定されている。なお、レスポンスが返されないこととして規定されているコマンドもある。
【0043】
「R1b」というタイプのレスポンスは、そのフォーマットは上記した「R1」というタイプのレスポンスのフォーマット(図1(b)参照)と同様であるが、オプショナルのビジー信号がデータ線D0上に出力される点で、「R1」というタイプのレスポンスと異なっている。
【0044】
「R2」というタイプのレスポンスは、カード内部のCIDレジスタ(128ビット)又はCSDレジスタ(128ビット)を読み出すためのコマンドに対して返されるレスポンスであり、そのフォーマットは、計136ビット長である。
【0045】
「R3」というタイプのレスポンスは、カード内部のOCRレジスタ(32ビット)を読み出すためのコマンドに対して返されるレスポンスであり、そのフォーマットは、計48ビット長である。
【0046】
「R6」というタイプのレスポンスは、新たに発行されたRCA(Relative Card Address)を返すためのレスポンスであり、そのフォーマットは、計48ビット長である。
【0047】
「R7」というタイプのレスポンスは、カードがサポートする電圧の情報を返すためのレスポンスであり、そのフォーマットは、計48ビット長である。
【0048】
なお、MMC(MultiMedia Card)(登録商標)規格におけるレスポンスのフォーマットも、SDカード(登録商標)規格におけるフォーマットと同様である。
【0049】
1.3 エラー判定
図1(b)に示すカードステータス(32ビット)の内の幾つかのビットは、未使用又はリザーブ(将来の使用のために確保)されているが、他のビットは、カード内の各種のステータスをそれぞれ表すものとして規定されている。そして、コマンドの実行によりカード内に1つ又は複数のエラー(以下、「カードステータスエラー」という。)が発生した場合には、発生したエラーに対応する1つ又は複数のビットが「1」にセットされる。コマンドの実行によりどのようなカードステータスエラーが発生し得て、その結果としてどのビットが「1」にセットされ得るのかは、コマンド毎に異なっており、全てのコマンドで同一ではない。そのため、ホスト側回路は、カードに発行したコマンドに応じた数及び位置のビット(以下、「エラービット」という。)を逐次チェックすることでカードステータスエラーの判定を行う必要があり、判定箇所も多くなるため、処理が複雑となり、処理速度が遅くなってしまっていた。特に、種類やバージョンの異なるカードを装着可能な電子機器の場合、種類やバージョンによってエラービットの位置が異なることが多いため、処理が更に複雑となり、処理負荷が更に重く、処理時間が更に掛かってしまっていた。
【0050】
2. 構成
図2に、以上のような問題を解決できる本実施形態の電子機器1の構成例を示す。図2に示すように、この電子機器1は、各種コマンドの発行指示やデータの転送指示やプログラムの実行を行うメインCPU(広義には、情報処理装置)2と、プログラムやデータを記憶するROM3と、データを記憶するRAM(広義には、記憶回路)4と、複数の様式(種類、仕様、規格、及び/又は、バージョンを含む。)のカード(広義には、デバイス)を挿入可能なカードスロット(広義には、デバイス装着部)6と、メインCPU2からの指示に応じてカードスロット6に装着されたカードへのコマンド発行やデータ転送等を行うカードコントローラ5と、外部機器との間で有線又は無線通信を行うための通信回路7とを含む。メインCPU2、ROM3、RAM4、カードコントローラ5、及び、通信回路7は、バスB1によって接続されている。
【0051】
ROM3は、例えば、リアルタイムOS(オペレーティングシステム)プログラムや、各種のアプリケーションプログラムや、カードコントローラ5を操作するためのドライバプログラム等を記憶しており、メインCPU2は、これらのプログラムを適宜実行する。
【0052】
RAM4は、メインCPU2がワークエリアとして使用する作業領域や、カードスロット6に挿入されたカードとの間のデータのDMA転送のために用いられるDMA転送領域や、カードスロット6に装着可能な複数の様式のカードの複数のコマンドに対するカードステータスエラーの判定に利用可能な複数のチェックパターン(広義には、エラー判定情報)を格納したレスポンスチェックビットテーブル(広義には、エラー判定情報テーブル。カードコントローラ5内に記憶されており、後述する。)内の所要のチェックパターンを、カードスロット6に装着されたカードの様式及びカードスロット6に装着されたカードに発行するコマンドに基づいて迅速に決定するための複数のルックアップ値(広義には、エラー判定情報特定情報)を含むルックアップテーブル(広義には、エラー判定情報特定情報テーブル)等を記憶するテーブル記憶領域を有する。なお、ルックアップテーブルについても、後で詳細に説明する。
【0053】
カードスロット6は、MMC(MultiMedia Card)(登録商標)のバージョン1.0〜1.2又は1.4の仕様に準拠したカード(以下、「第1の様式のカード」という。)C1、MMC(登録商標)のバージョン2.0〜2.2の仕様に準拠したカード(以下、「第2の様式のカード」という。)C2、MMC(登録商標)のバージョン3.0〜3.31の仕様に準拠したカード(以下、「第3の様式のカード」という。)C3、MMC(登録商標)のバージョン4.0〜4.2の仕様に準拠したカード(以下、「第4の様式のカード」という。)C4、SD(登録商標)のバージョン1.01の仕様に準拠したカード(以下、「第5の様式のカード」という。)C5、SD(登録商標)のバージョン1.10又は2.00の仕様に準拠したカード(以下、「第6の様式のカード」という。)C6を装着可能である。なお、本願においては、これらのカードを総称する場合に、SDMMCカードと言う。
【0054】
本実施形態においては、上記第1〜第6の様式のカードC1〜C6を装着可能としているが、更に他の種類、仕様、規格、及び/又は、バージョンのデバイス(例えば、SDIOデバイス、CE−ATAデバイス等)を装着可能とすることも可能である。
【0055】
なお、カードスロット6に装着されたカードの様式は、イニシエートで得られる情報やカード内部のレジスタ(CIDレジスタ、CSDレジスタ等)を読み出して得られる情報に基づいて、特定可能である。メインCPU2は、イニシエート時又は初期時において、そのようにして特定したカードの様式を表すデータを、RAM4に書き込む。例えば、第6の様式のカードC6がカードスロット6に装着されている場合には、メインCPU2は、初期時において、コマンド「CMD2」(コマンドインデックス2(0x02))等を第6の様式のカードC6に発行することで、CIDレジスタ等を読み出すことができる。このようなカードの様式の特定はそれぞれの仕様に基づいて可能であるので、ここでは詳細な説明を省略する。
【0056】
カードコントローラ5は、メインCPU2からの指示に応じて、メインCPU2とカードスロット6に装着されたカードとの間の媒介を行う。カードコントローラ5とカードスロット6との間は、CLK線(クロック供給用信号線)、CMD線(コマンド用信号線)、及び、DAT線(データ用信号線)によって接続されている。
【0057】
CLK線は、カードコントローラ5から第1〜第6の様式のカードC1〜C6へクロック信号を送信するための信号線である。カードコントローラ5から第1〜第6の様式のカードC1〜C6へのコマンドの転送、及びカードコントローラ5と第1〜第6の様式のカードC1〜C6との間のデータ転送等は、このクロック信号に同期して実行される。
【0058】
CMD線は、カードコントローラ5から第1〜第6の様式のカードC1〜C6へのコマンドの転送、及び第1〜第6の様式のカードC1〜C6からカードコントローラ5へのレスポンスの転送に使用される1ビット幅の信号線である。
DAT線は、カードコントローラ5と第1〜第6の様式のカードC1〜C6のDAT端子との間のデータ転送に使用される双方向信号線である。なお、カードのDAT端子の数(ビット幅)は、第1〜第4の様式のカードC1〜C4の場合、1、4、又は、8個であり、第5〜第6の様式のカードC5〜C6の場合、1又は4個である。
【0059】
なお、電子機器1が、入力装置、表示装置(LCD、有機ELディスプレイ等)、DMAコントローラ等を更に含んでいても良い。
【0060】
図3は、カードコントローラ5の内部構成を示すブロック図である。図3に示すように、カードコントローラ5は、SDMMCホストコントローラ(広義には、ホストコントローラ)10と、SDMMCホストコントローラ10とメインCPU2(図2参照)との間の信号の送受信を行うCPUインタフェース11と、SDMMCホストコントローラ10とRAM4(図2参照)との間の信号の送受信を行うDMAインタフェース12と、SDMMCホストコントローラ10とカードスロット6(図2参照)に装着されたカードとの間の信号の送受信を行うカードインタフェース13とを含む。
【0061】
SDMMCホストコントローラ10は、クロック出力部21と、レジスタ制御部22と、SDMMC制御部23(広義には、第3の回路)と、DMA制御部24とを含んでいる。なお、SDMMCホストコントローラ10を半導体チップ上に集積して、半導体集積回路としても良い。
【0062】
クロック出力部21は、クロック信号SDCLKをカードインタフェース13を介してカードスロット6に装着されたカードに供給する。カードに供給するクロック信号SDCLKは、例えば、発振回路(図示せず)によって発生され或いは外部から供給されるシステムクロック信号をそのまま或いは分周して取得することができる。なお、クロック出力部21のクロック信号SDCLKのカードへの出力の供給開始及び供給停止を、メインCPU2やSDMMC制御部23等から制御可能としても良い。
【0063】
レジスタ制御部22は、メインCPU2から書き込み及び/又は読み出し可能な複数のレジスタを有しており、これらのレジスタの制御を行う。メインCPU2は、これらのレジスタにCPUインタフェース11を介して情報を書き込むことにより、カードへのコマンド発行をSDMMCコントローラ10に行わせることができる。また、メインCPU2は、これらのレジスタからCPUインタフェース11を介して情報を読み出すことにより、発行したコマンドに対するカードからのレスポンスを取得することができる。なお、レジスタ制御部22内のレジスタは、SDMMCホストコントローラ10内の他の回路ブロックから書き込み及び/又は読み出し可能としても良い。
【0064】
さらに、レジスタ制御部22は、カードスロット6に装着可能なカードの様式及びカードスロット6に装着可能なカードが実行可能な複数のコマンドに関連付けて、カードスロット6に装着可能なカードの複数のコマンドに対するカードステータスエラーの判定に利用可能な複数のチェックパターンを格納したレスポンスチェックビットテーブルを記憶するテーブル記憶部31(広義には、第1の回路)と、レスポンスチェックビットテーブルに基づいてカードステータスエラーの有無を判定するカードステータスエラー判定部32(広義には、第4の回路)とを含む。なお、テーブル記憶部31は、オンチップROM、オンチップRAM等で構成可能である。
【0065】
図4は、レジスタ制御部22内のレジスタマップの一例を示す図である。図4に示す複数のレジスタの内のレジスタ22a〜22j(広義には、第2の回路)は、メインCPU2によって書き込まれ、SDMMCホストコントローラ10内の回路によって読み出されるレジスタであり、レジスタ22k〜22oは、SDMMCホストコントローラ10内の回路によって書き込まれ、メインCPU2によって読み出されるレジスタである。
【0066】
レジスタ22aは、発行するコマンドのコマンドインデックス(広義には、コマンド特定情報又は指示情報)を書き込むためのレジスタであり、レジスタ22bは、発行するコマンドのアーギュメント(広義には、指示情報)を書き込むためのレジスタである。
【0067】
レジスタ22cは、発行するコマンドのタイプ(Normal、Suspend、Resume、Abort等)(広義には、指示情報)を書き込むためのレジスタであり、レジスタ22dは、発行するコマンドに対するレスポンスのタイプ(レスポンス無し、136ビットレスポンス(前述した「R2」タイプに相当)、48ビットレスポンス(前述した「R1」、「R3」等のタイプに相当)、RespBusy(前述した「R1b」等のタイプに相当)等)(広義には、指示情報)を書き込むためのレジスタである。
【0068】
レジスタ22e〜22hは、発行するコマンドがデータ転送を伴うコマンドである場合に用いられるレジスタである。レジスタ22eは、データ転送タイプ(Single、Infinite、Multiple、Stream等)(広義には、指示情報)を書き込むためのレジスタであり、レジスタ22fは、データ転送のためにDAT線を使用することを表すフラグ(以下、「DAT線使用フラグ」という)(広義には、指示情報)を書き込むためのレジスタであり、レジスタ22gは、転送ブロックサイズ(広義には、指示情報)を書き込むためのレジスタであり、レジスタ22hは、転送ブロック数(広義には、指示情報)を書き込むためのレジスタである。
【0069】
レジスタ22iは、カードステータスエラー以外のエラー(インデックスエラー、エンドビットエラー、CRCエラー、タイムアウトエラー等。以下、「伝送エラー」という。)のチェックを行うか否かを指定するデータ(広義には、指示情報)を書き込むためのレジスタである。
【0070】
レジスタ22jは、レスポンスチェックビットテーブル(レジスタ制御部22のテーブル記憶部31内に記憶されており、後述する。)内の所要のチェックパターンを決定するためのカードステータスエラー選択情報(ルックアップ値、広義には、エラー判定情報特定情報)を書き込むためのレジスタである。レジスタ22jに書き込まれたカードステータスエラー選択情報(ルックアップ値)は、カードステータスエラー判定部32(図3参照)において、カードステータスエラーの有無の判定に用いられる。
【0071】
レジスタ22kは、コマンドが完了したことを表すフラグ(以下、「コマンド完了フラグ」という)を書き込むためのレジスタである。
レジスタ22kは、カードステータスエラーの有無を表すカードステータスエラー有無情報をカードステータスエラー判定部32が書き込むためのレジスタである。
【0072】
レジスタ22mは、レスポンスのカードステータス(広義には、応答内容情報)を書き込むためのレジスタである。なお、先に説明したように、レスポンスのカードステータス長は、レスポンスのタイプ即ちコマンドによって異なる。例えば、レスポンスのタイプが「R1」(48ビット)の場合、レスポンスのカードステータスは32ビットであり、レスポンスのタイプが「R2」(136ビット)の場合、レスポンスのカードステータスは120ビットである。そこで、例えば、レジスタ22mを長め(例えば、128ビット程度)に確保しておき、その中の所定位置にレスポンスのカードステータスを書き込むようにしても良い。
【0073】
レジスタ22nは、伝送エラーのチェックを行うことを指定するデータがレジスタ22iに書き込まれている場合に、指定されたエラーのチェックの結果を表すデータを書き込むためのレジスタである。なお、伝送エラーのチェックの結果を表すデータは、伝送エラーの種類に応じた位置のビットがセットされるようにしても良いし、伝送エラーの種類がコード化されるようにしても良い。メインCPU2は、伝送エラーのチェックを行うことを指定した場合に、このレジスタ22nを読み出すことで、伝送エラーの発生の有無を取得することができる。
【0074】
レジスタ22oは、CMD線を使用中であるか否かを表すフラグ(以下、「CMD線使用中フラグ」という)を書き込むためのレジスタである。CMD線使用中フラグは、SDMMCホストコントローラ10がコマンドの発行を開始するとセットされ、SDMMCホストコントローラ10がレスポンスの受信を完了するとクリアされる。メインCPU2は、このレジスタ22oを読み出すことで、コマンドの実行中か否か、すなわち、次のコマンドの発行を指示することが可能か否かを判断することができる。
【0075】
なお、図4に示すレジスタマップは一例であり、種々の変形実施も可能である。例えば、全レジスタのビット幅を32ビット長とし、32ビットに満たないビット長を有する複数のデータを結合して1つのレジスタに格納するようにしても良い。また、例えば、クロック信号SDCLKの出力又は停止をクロック出力部21に行わせるためのフラグを格納するためのレジスタを設けて、メインCPU2がクロック信号SDCLKの出力又は停止をクロック出力部21に行わせるようにしても良い。また、例えば、カードステータスエラー、伝送エラーが発生した場合に、割り込み信号をメインCPU2に出力するか否かを指示するためのデータを格納するためのレジスタを設けて、カードステータスエラー、伝送エラーが発生した場合に割り込み信号がメインCPU2に出力されるようにしても良い。
【0076】
次に、レジスタ制御部22(図3参照)のテーブル記憶部31内のレスポンスチェックビットテーブルCheckBit[k](0≦k≦49)、RAM4(図2参照)のテーブル記憶領域内のルックアップテーブルLookup[m][n](0≦m6、0≦n≦63)、及び、これらのテーブルに基づいてカードステータスエラーの有無を判定するカードステータスエラー判定部32(図3参照)について説明する。
【0077】
まず、レジスタ制御部22のテーブル記憶部31内のレスポンスチェックビットテーブル及びRAM4のテーブル記憶領域内のルックアップテーブルについて説明し、その後に、カードステータスエラー判定部32について説明する。
【0078】
図5は、レスポンスチェックビットテーブルを示す図であり、図6〜図7は、ルックアップテーブルを示す図である。
先に説明したように、レスポンスのカードステータス内のエラービットの位置は、全てのコマンドで同一ではない。しかしながら、本発明者は、以下の事柄を見出した。
【0079】
第1に、本発明者は、コマンドを実行したときにカード内においてエラーが発生する場合はエラーが発生じない場合よりも少なく、従って、どのようなエラーが発生したかを判定するよりも、まず、何らかのエラーが発生したのか否かを判定することが、処理速度の点で好適であることを見出した。そして、必要であれば、何らかのエラーが発生したと判定した後に、どのようなエラーが発生したかを判定することが、処理速度の点で好適であることを見出した。
【0080】
第2に、本発明者は、レスポンスのカードステータス内のエラービットの位置は全てのコマンドで同一ではないものの、レスポンスのカードステータス内のエラービットの位置が共通するコマンドが存在することを見出した。
【0081】
例えば、第6の様式のカードC6におけるコマンド「CMD7」(コマンドインデックス「7」(0x07))に対するレスポンスのカードステータス内のエラービットの位置は、カードステータスのMSB(Most Significant Bit)を第31ビットとし、LSB(Least Significant Bit)を第0ビットとすると、第27ビット、第26ビット、及び、第24〜第16ビットの計11ビットである。すなわち、第6の様式のカードC6において、コマンド「CMD7」を実行したときにカード内において何らかのエラーが発生したのか否かは、上記11ビットの1つ以上が「1」にセットされているか否かによって判定できる。そして、第6の様式のカードC6におけるコマンド「CMD7」に対するカードステータス内の第27ビット、第26ビット、及び、第24〜第16ビットの1つ以上が「1」にセットされているか否かは、後述するように、第6の様式のカードC6におけるコマンド「CMD7」に対するカードステータス(32ビット)とチェックパターン(ビットパターン)「0x0DFF0000」(32ビット)との論理積(AND)演算処理(広義には、演算処理)を行い、その結果が「0」(0x0000)であるか否かによって容易且つ迅速に判定可能である。
【0082】
また、第6の様式のカードC6におけるコマンド「CMD26」(コマンドインデックス「26」(0x1A))に対するレスポンスのカードステータス内のエラービットも、上記した第6の様式のカードC6におけるコマンド「CMD7」に対するレスポンスのカードステータス内のエラービットの位置と共通する。すなわち、第6の様式のカードC6において、コマンド「CMD26」を実行したときにカード内において何らかのエラーが発生したのか否かは、第6の様式のカードC6におけるコマンド「CMD26」に対するカードステータス(32ビット)とチェックパターン「0x0DFF0000」(上記第6の様式のカードC6におけるコマンド「CMD7」に対するレスポンスのカードステータスのチェックパターンと同一)との論理積(AND)演算処理を行い、その結果が「0」(0x0000)であるか否かによって容易且つ迅速に判定可能である。
【0083】
また、第5の様式のカードC5におけるコマンド「CMD7」(コマンドインデックス「7」(0x07))に対するレスポンスのカードステータス内のエラービットも、上記した第6の様式のカードC6におけるコマンド「CMD7」に対するレスポンスのカードステータス内のエラービットの位置と共通する。すなわち、第5の様式のカードC5において、コマンド「CMD7」を実行したときにカード内において何らかのエラーが発生したのか否かは、第5の様式のカードC5におけるコマンド「CMD7」に対するカードステータス(32ビット)とチェックパターン「0x0DFF0000」(上記第6の様式のカードC6におけるコマンド「CMD7」に対するレスポンスのカードステータスのチェックパターンと同一)との論理積(AND)演算処理を行い、その結果が「0」(0x0000)であるか否かによって容易且つ迅速に判定可能である。
【0084】
また、第6の様式のカードC6においては、コマンド「CMD55」(コマンドインデックス「55」(0x37))に引き続いて発行される複数の拡張コマンド「ACMD」が規定されている。そして、そのような複数の拡張コマンドの内の1つである拡張コマンド「ACMD13」(コマンドインデックス「13」(0x0D))に対するレスポンスのカードステータス内のエラービットも、上記した第6の様式のカードC6におけるコマンド「CMD7」(コマンドインデックス「7」(0x07))に対するレスポンスのカードステータス内のエラービットの位置と共通する。すなわち、第6の様式のカードC6において、拡張コマンド「ACMD13」を実行したときにカード内において何らかのエラーが発生したのか否かは、第6の様式のカードC6における拡張コマンド「ACMD13」に対するカードステータス(32ビット)とチェックパターン「0x0DFF0000」(上記第6の様式のカードC6におけるコマンド「CMD7」に対するレスポンスのカードステータスのチェックパターンと同一)との論理積(AND)演算処理を行い、その結果が「0」(0x0000)であるか否かによって容易且つ迅速に判定可能である。
【0085】
そして、本発明者は、第1〜第6の様式のカードC1〜C6における全コマンドのレスポンスのカードステータス内のエラービットの位置を調べたところ、図5に示す50個のチェックパターンを用意すれば、何れの様式のカードにおいて何れのコマンドを実行した場合であっても、何らかのエラーが発生したのか否かを、レスポンスのカードステータスとチェックパターンとの論理積演算処理を行うことにより、容易且つ迅速に判定可能であることを見出した。
【0086】
そこで、本実施形態では、レジスタ制御部22(図2参照)のテーブル記憶部31内に、図5に示す50通りのチェックパターン(広義には、エラー判定情報)を含むレスポンスチェックビットテーブル(広義には、エラー判定情報テーブル)を配することで、何れかのカードにおいて何れかのコマンドを実行したときにカード内において何らかのエラーが発生したのか否かを容易且つ迅速に判定できるようにした。これにより、処理を簡素化でき、CPUとプログラム(ソフトウェア)ではなくハードウェアによるエラーの有無の判定を実現でき、エラー判定処理をCPUとプログラム(ソフトウェア)で行った場合と比較して非常に高速にすることができる。
【0087】
また、本実施形態では、或る様式のカードにおいて或るコマンドを実行させた場合に図5に示すレスポンスチェックビットテーブル内の50個のチェックパターンの内の何れのチェックパターンを用いれば良いかということを迅速に決定可能とするために、RAM4(図2参照)のテーブル記憶領域内に、図6〜図7に示すルックアップテーブル(広義には、エラー判定情報特定情報テーブル)を配することとした。これにより、処理速度を更に向上させることができる。
【0088】
次に、レジスタ制御部22のテーブル記憶部31内のレスポンスチェックビットテーブルに基づいてカードステータスエラーの有無を判定するカードステータスエラー判定部32について説明する。
【0089】
図8は、カードステータスエラー判定部32の内部構成を示す図である。
図8に示すように、カードステータスエラー判定部32は、セレクタ32aと、論理積(AND)演算器32b(広義には、演算器)とを含む。
【0090】
例えば、先に挙げたカードの様式が第6の様式であり且つカードに発行したコマンドがコマンド「CMD7」である例の場合には、メインCPU2(図2参照)が、RAM4(図2参照)のテーブル記憶領域内のルックアップテーブルの第6番目の列(列方向の要素番号「0d5」)且つ第8番目の行(行方向の要素番号「0d07」)を参照することで、ルックアップ値「0d41」を取得し、レジスタ22jに書き込む。そして、カードステータスエラー判定部32のセレクタ32aが、レジスタ22j内のルックアップ値が「0d41」であるので、レジスタ制御部22のテーブル記憶部31内のレスポンスチェックビットテーブルの第42番目の行(行方向の要素番号「0d41」)を選択することで、チェックパターン「0x0DFF0000」を迅速に取得することができる。
【0091】
また、先に挙げたカードの様式が第6の様式であり且つカードに発行したコマンドがコマンド「CMD26」である例の場合には、メインCPU2が、RAM4のテーブル記憶領域内のルックアップテーブルの第6番目の列(列方向の要素番号「0d5」)且つ第27番目の行(行方向の要素番号「0d26」)を参照することで、ルックアップ値「0d41」を取得し、レジスタ22jに書き込む。そして、カードステータスエラー判定部32のセレクタ32aが、レジスタ22j内のルックアップ値が「0d41」であるので、レジスタ制御部22のテーブル記憶部31内のレスポンスチェックビットテーブルの第42番目の行(行方向の要素番号「0d41」)を選択することで、チェックパターン「0x0DFF0000」を迅速に取得することができる。
【0092】
また、先に挙げたカードの様式が第5の様式であり且つカードに発行したコマンドがコマンド「CMD7」である例の場合には、メインCPU2が、RAM4のテーブル記憶領域内のルックアップテーブルの第5番目の列(列方向の要素番号「0d4」)且つ第8番目の行(行方向の要素番号「0d07」)を参照することで、ルックアップ値「0d41」を取得し、レジスタ22jに書き込む。そして、カードステータスエラー判定部32のセレクタ32aが、レジスタ22j内のルックアップ値が「0d41」であるので、レジスタ制御部22のテーブル記憶部31内のレスポンスチェックビットテーブルの第42番目の行(行方向の要素番号「0d41」)を選択することで、チェックパターン「0x0DFF0000」を迅速に取得することができる。
【0093】
また、先に挙げたカードの様式が第6の様式であり且つカードに発行したコマンドが拡張コマンド「ACMD13」である例の場合には、メインCPU2が、RAM4のテーブル記憶領域内のルックアップテーブルの第7番目の列(列方向の要素番号「0d6」)且つ第14番目の行(行方向の要素番号「0d13」)を参照することで、ルックアップ値「0d41」を取得し、レジスタ22jに書き込む。そして、カードステータスエラー判定部32のセレクタ32aが、レジスタ22j内のルックアップ値が「0d41」であるので、レスポンスチェックビットテーブルの第42番目の行(行方向の要素番号「0d41」)を選択することで、チェックパターン「0x0DFF0000」を迅速に取得することができる。
【0094】
なお、ルックアップテーブルをROM3(フラッシュメモリ等の書き換え可能なROMであっても良い。)内に作成しても良い。また、レスポンスチェックビットテーブル及びルックアップテーブルの一方又は両方をROM3内に作成しておき、初期時等において、メインCPU2やDMAコントローラ(図示せず)等がレジスタ制御部22のテーブル記憶部31内又はRAM4のテーブル記憶領域内に転送するようにしても良い。
【0095】
また、通信回路7を用いて、レスポンスチェックビットテーブル及び/又はルックアップテーブルを参照したり、これらのテーブルの一部又は全部を適宜更新するようにしても良い。このようにすれば、カードやデバイスの様式(例えば、SDIOデバイス、CE−ATAデバイス等)の追加・変更や、コマンドの追加・変更や、これらのテーブルのデバッグ等に柔軟に対応可能となる。なお、様式やコマンドの追加の場合には、テーブルの要素数を増やすことで対応可能である。
【0096】
例えば、第6の様式のカードC6において、現在はリザーブとされているコマンド「CMD1」(コマンドインデックス「1」(0x01))の処理内容が仕様上新たに規定された場合に、当該コマンドを実行したときに第6の様式のカードC6内において何らかのエラーが発生したのか否かを判定するためのチェックパターンが図5に示すレスポンスチェックビットテーブル内の50通りのチェックパターンの何れとも合致しないときには、当該コマンドを実行したときに第6の様式のカードC6内において何らかのエラーが発生したのか否かを判定するための新たなチェックパターンをレスポンスチェックビットテーブルに第51番目のテーブル要素として追加すれば良い。そして、このようなテーブル要素の追加を通信回路7を介して行うことにより、カードの仕様のバージョンアップ等に柔軟に対応可能となる。
【0097】
カードやデバイス(例えば、SDIOデバイス、CE−ATAデバイス等)の様式を追加する場合には、ルックアップテーブルの列を増やすとともに、必要であればレスポンスチェックビットテーブルに新たなテーブル要素を追加すれば良い。
【0098】
通信回路7をインターネットに接続することとすれば、テーブルの更新をインターネットを介して行うことが可能となる。
また、通信回路7をデバッガに接続することとすれば、これらのテーブルのデバッグを容易に行うことが可能となる。
【0099】
再び図3を参照すると、SDMMC制御部23は、コマンド・レスポンス送受信部23aと、データ送受信部23bとを含む。
コマンド・レスポンス送受信部23aは、メインCPU2によってレジスタ22a〜22iに書き込まれた情報に基づいてコマンドをカードに発行し、当該コマンドに対するレスポンスをカードから受け取って、レスポンスに基づく情報をレジスタ22k〜22oに書き込む。
【0100】
なお、本実施形態においては、コマンド・レスポンス送受信部23aは、コマンドを発行する信号線CMD_outとレスポンスを受信する信号線CMD_inとを別個に有している。そして、カードインタフェース13は、コマンド発行時には、コマンド・レスポンス送受信部23aによって信号線CMD_out上に供給されるコマンドをカードとの間のCMD線に出力し、レスポンス受信時には、カードとの間のCMD線上に供給されるレスポンスを信号線CMD_inに出力する。
【0101】
データ送受信部23bは、レジスタ22aに書き込まれたインデックスで表されるコマンドがデータ転送を伴うコマンドである場合に動作を行い、レジスタ22aに書き込まれたインデックスで表されるコマンドがデータ転送を伴わないコマンドである場合には動作を行わない。
【0102】
レジスタ22aに書き込まれたインデックスで特定されるコマンドがカードへのデータ書き込みを伴うコマンドである場合には、コマンド・レスポンス送受信部23aが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスの受信完了後に、カードへのデータ書き込みの開始をデータ送受信部23bに指示する。また、レジスタ22aに書き込まれたインデックスで特定されるコマンドがカードからのデータ読み出しを伴うコマンドである場合には、コマンド・レスポンス送受信部23aが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスを受信するとともに、カードからのデータ読み出しの開始をデータ送受信部23bに指示する。
【0103】
DMA制御部24は、レジスタ22aに書き込まれたコマンドインデックスで特定されるコマンドがデータ転送を伴うコマンドである場合に動作を行い、レジスタ22aに書き込まれたコマンドインデックスで特定されるコマンドがデータ転送を伴わないコマンドである場合には動作を行わない。
【0104】
メインCPU2は、カードへのデータ書き込みを伴うコマンドの実行を指示する場合には、まず、カードに書き込むためのデータをRAM4(図2参照)のDMA転送領域内に書き込み、その後、レジスタ22a〜22hに当該コマンドのインデックス等を書き込む。これを受けて、SDMMCホストコントローラ10のSDMMC制御部23内のコマンド・レスポンス送受信部23aが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスの受信完了後に、カードへのデータ書き込みの開始をデータ送受信部23bに指示する。データ送受信部23bは、コマンド・レスポンス送受信部23aからの指示を受けると、DMA制御部24にRAM4のDMA転送領域内のデータのDMA転送を指示する。DMA制御部24は、FIFOバッファ24aを有しており、データ送受信部23bからの指示を受けると、RAM4のDMA転送領域内のデータをFIFOバッファ24aに順次DMA転送する。そして、データ送受信部23bが、FIFOバッファ24a内のデータを順次読み出し、カードインタフェース13を介してカードに順次書き込む。
【0105】
一方、メインCPU2は、カードからのデータ読み出しを伴うコマンドの実行を指示する場合には、レジスタ22a〜22hに当該コマンドのインデックス等を書き込む。これを受けて、SDMMCホストコントローラ10のSDMMC制御部23内のコマンド・レスポンス送受信部23aが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスを受信するとともに、カードからのデータ読み出しの開始をデータ送受信部23bに指示する。データ送受信部23bは、コマンド・レスポンス送受信部23aからの指示を受けると、カードインタフェース13を介してカードからデータを順次読み出してFIFOバッファ24aに順次書き込むとともに、DMA制御部24にFIFOバッファ24a内のデータのDMA転送を指示する。DMA制御部24は、データ送受信部23bからの指示を受けると、FIFOバッファ24a内のデータをRAM4のDMA転送領域に順次DMA転送する。
【0106】
なお、本実施形態においては、データ送受信部23bは、カードに書き込むデータを出力する8ビット幅の信号線DAT_out[7:0]とカードからデータを読み出す信号線DAT_in[7:0]とを別個に有している。そして、カードインタフェース13は、カードへのデータ書き込み時には、データ送受信部23bによって信号線DAT_out[7:0]上に供給されるデータをカードとの間のDAT線(1、4、又は、8ビット幅)に出力し、カードからのデータ読み出し時には、カードとの間のDAT線上に供給されるデータを信号線DAT_in[7:0]に出力する。なお、カードのDAT端子のビット幅が8ビット幅ではない場合には、カードインタフェース13が、データのビット幅を適宜変換する。
【0107】
3. 動作
次に、本実施形態の動作について説明する。
図9は、コマンドをカードに発行する場合における本実施形態の動作を示すフローチャートである。ここでは、第6の様式のカードC6がカードスロット6に装着されており、カードC6にコマンド「CMD7」(コマンドインデックス「7」(0x07))を発行するものとする。
【0108】
まず、メインCPU2が、ROM3内のドライバプログラムを実行し、カードの様式(ここでは、第6の様式)及び発行しようとするコマンドのコマンドインデックス(ここでは、「7」(0x07))に基づいてカードステータスエラー選択情報(ルックアップ値)を取得し、取得したカードステータスエラー選択情報(ルックアップ値)をレジスタ22jに書き込む(ステップS11)。具体的には、メインCPU2は、ルックアップテーブル(図6〜図7参照)の第6番目の列(列方向の要素番号「0d5」)且つ第8番目の行(行方向の要素番号「0d07」)を参照して、カードステータスエラー選択情報(ルックアップ値)「0d41」を取得することができる。
【0109】
なお、上記のようなカードステータスエラー選択情報(ルックアップ値)の取得処理は、C言語においては、例えば、
Lookup[CMDindex][ver]
のように記述することができる。
【0110】
ここで、「Lookup」は、ルックアップテーブル(図6〜図7参照)のテーブル名であり、「ver」は、ルックアップテーブルにおいてカードの様式を表す列方向の要素番号(広義には、様式特定情報、ここでは、「0d5」)を表す変数であり、「CMDindex」は、ルックアップテーブルにおいてコマンドインデックスを表す行方向の要素番号(ここでは、「0x07」)を表す変数である。なお、変数「ver」が0〜5となる場合、カードの様式に応じて、初期時に変数「ver」の値を決定可能である。変数「ver」が6となる場合、カードスロット6に装着されているカードが第6の様式のカードC6であり且つ第6の様式のカードC6に発行しようとしているコマンドが「ACMD」(拡張コマンド)であることが判明したときに変数「ver」の値を決定可能である。
【0111】
また、メインCPU2は、コマンドインデックス(ここでは、「7」(0x07))、アーギュメント、コマンドタイプ、レスポンスタイプ、データ転送タイプ、DAT線使用フラグ、転送ブロックサイズ、転送ブロック数、及び、レスポンスチェックをレジスタ22a〜22iに書き込む。以上のような複数のレジスタへの複数のデータの書き込みにより、メインCPU2は、コマンドの発行をSDMMCホストコントローラ10に指示する(ステップS12)。
【0112】
なお、メインCPU2は、発行しようとするコマンドがカードC6へのデータ書込みを伴うコマンドである場合には、コマンド発行の指示に先立って、カードC6へ書き込むデータをRAM4のDMA転送領域内に準備する。
【0113】
SDMMC制御部23内のコマンド・レスポンス送受信部23aは、レジスタ制御部22からの信号及びデータに従って、カードC6にコマンドを発行する(ステップS21)。具体的には、コマンド・レスポンス送受信部23aは、スタートビットを「0」、転送方向ビットを「1」とする。次に、コマンド・レスポンス送受信部23aは、これらのスタートビット及び転送方向ビット、レジスタ22a内に格納されているコマンドインデックス(6ビット、ここでは、「7」(0x07))、並びに、レジスタ22b内に格納されているアーギュメント(32ビット)の計40ビットに基づいて、CRC(7ビット)を算出する。そして、コマンド・レスポンス送受信部23aは、スタートビット(ここでは、「0」)、転送方向ビット(ここでは、「1」)、コマンドインデックス(6ビット)、アーギュメント(32ビット)、CRC(7ビット)、及び、エンドビット(ここでは、「1」)を結合した計48ビットのコマンドを、カードインタフェース13を介してカードC6に送信する。
【0114】
カードC6は、受信したコマンド(ここでは、コマンド「CMD7」)を実行して、レスポンス(ここでは、タイプ「R1」(48ビット))をコマンド・レスポンス送受信部23aに送信する(ステップS31)。
【0115】
コマンド・レスポンス送受信部23aは、レスポンス(ここでは、タイプ「R1」(48ビット))をカードインタフェース13を介してカードC6から受信すると、受信したレスポンスのカードステータス(ここでは、32ビット)をレジスタ22mに書き込む。このとき、コマンド・レスポンス送受信部23aは、伝送エラーが発生していた場合に、伝送エラーのエラー情報をレジスタ22nに書き込む。なお、この場合に、SDMMCホストコントローラ10が、伝送エラーが発生したことを表す割込み信号をメインCPU2に送信するようにしても良い(ステップS22)。
【0116】
ところで、このとき、カードステータスエラー判定部32内のセレクタ32aは、メインCPU2がステップS11にてレジスタ22jに書き込んだカードステータスエラー選択情報(ルックアップ値)が「0d41」であるので、レジスタ制御部22のテーブル記憶部31内のレスポンスチェックビットテーブルの第42番目の行(行方向の要素番号「0d41」)を参照し、チェックパターン「0x0DFF0000」を選択している。
【0117】
そこで、カードステータスエラー判定部32内の論理積演算器32bは、チェックパターン「0x0DFF0000」と、コマンド・レスポンス送受信部23aによってレジスタ22mに書き込まれたカードステータスとの論理積演算(広義には、演算処理)を実行し、その演算結果としてのカードステータスエラー有無情報をレジスタ22lに書き込む(ステップS23)。
【0118】
なお、コマンド「CMD7」を実行したカードC6内において何らのエラーも発生していない場合には、カードステータスとチェックパターン(ここでは、「0x0DFF0000」)との論理積演算の結果は「0」(0x00000000)となる。
一方、コマンド「CMD7」を実行したカードC6内において何らかのエラーが発生している場合には、カードステータスとチェックパターンとの論理積演算の結果は「0」以外となる。なお、この場合に、SDMMCホストコントローラ10が、カードステータスエラーが発生したことを表す割込み信号をメインCPU2に送信するようにしても良い(ステップS24)。
【0119】
そして、レジスタ制御部22は、コマンド完了フラグをレジスタ22kにセットして、コマンドの完了をメインCPU2に通知する(ステップS25)。このとき、レジスタ制御部22が、コマンドの完了を通知するための割込み信号をメインCPU2に出力するようにしても良い。
【0120】
なお、コマンド・レスポンス送受信部23aは、カードC6に発行したコマンドがカードC6へのデータ書込みを伴うコマンドである場合には、カードC6からレスポンスを受信したときに、カードC6へのデータ書込みの開始をデータ送受信部23bに指示する。また、コマンド・レスポンス送受信部23aは、カードC6に発行した通常コマンドがカードC6からのデータ読出しを伴うコマンドである場合には、カードC6からレスポンスを受信したときに、カードC6からのデータ読出しの開始をデータ送受信部23bに指示する。
【0121】
メインCPU2は、SDMMCホストコントローラ10からコマンドの完了の通知を受けると、レジスタ制御部22のレジスタ22l内に格納されているカードステータスエラー有無情報を読み出す。
【0122】
先に説明したように、コマンド「CMD7」を実行したカードC6内において何らのエラーも発生していない場合には、カードステータスとチェックパターン(ここでは、「0x0DFF0000」)との論理積演算の結果は「0」となる。一方、コマンド「CMD7」を実行したカードC6内において何らかのエラーが発生している場合には、カードステータスとチェックパターンとの論理積演算の結果は「0」以外となる。
【0123】
そこで、メインCPU2は、レジスタ制御部22内のレジスタ22lから読み出したカードステータスエラー有無情報が「0」である場合には、処理を終了する(ステップS13)。
【0124】
一方、メインCPU2は、レジスタ制御部22内のレジスタ22lから読み出したカードステータスエラー有無情報が「0」以外である場合(ステップS13)には、エラー処理を実行する(ステップS14)。エラー処理としては、例えば、コマンド「CMD7」を実行したカードC6内においてどのようなエラーが発生したのかというエラーの内容を特定する処理を含むことが考えられる。これは、カードステータスの第27ビット、第26ビット、及び、第24〜第16ビットの計11ビットを順次調べることで実現可能である。
【0125】
なお、ステップS13のような条件分岐処理は、アセンブラ言語においては、例えば、
LD $reg_22l,r1
BNZ $error_routine
のように記述することができる。
【0126】
ここで、「LD」は、CPUにおいて広く一般に実装されているデータ読み込み命令であり、「$reg_22l」は、レジスタ制御部22内のレジスタ22lのアドレスであり、「r1」は、メインCPU2の内部レジスタである。また、「BNZ」は、CPUにおいて広く一般に実装されている条件分岐命令であり、CPU内部のゼロフラグ(一般に、直前の命令(ここでは、「LD」)の結果によりセット又はクリアされる)がセットされていない場合に分岐する命令である。また、「$error_routine」は、エラー処理(ステップS14)の先頭アドレスを示すラベルである。
【0127】
また、ステップS13において、カードステータスエラー有無情報が「0」であるか否かを判定するのに代えて、カードステータスエラーがあったことを表す割込み信号をSDMMCホストコントローラ10から受信したか否かを判定するようにしても良い。
【0128】
以上説明したように、本実施形態によれば、様式特定情報とコマンド特定情報との組み合わせに関連付けられたエラー判定情報を取得し、エラー判定情報及び応答内容情報に基づいて、応答におけるエラーの有無をハードウェアで判定することができるようになる。これにより、ソフトウェアでエラー判定を行う場合に比べて処理速度を大幅に向上させることができる。
【0129】
また、本実施形態によれば、応答内容情報内のエラーに関係する部分に対して処理を行うことで、エラーの有無を確実に判定することができる。
【0130】
また、本実施形態によれば、複数の種類、仕様、規格、及び/又は、バージョンのデバイスに関してもエラー判定を容易に行うことができ、幅広い用途に対応可能となる。
【0131】
また、本実施形態によれば、複数の様式特定情報と複数のコマンド特定情報との組み合わせに関連付けて、複数のエラー判定情報を特定するための複数のエラー判定情報特定情報を含むエラー判定情報特定情報テーブルを用いることで、様式特定情報とコマンド特定情報との組み合わせに関連付けられたエラー判定情報を迅速且つ容易に取得することができ、処理速度を向上させることができる。また、エラー判定情報特定情報の取得をCPUとプログラム(ソフトウェア)で、エラー判定をハードウェアでそれぞれ分担することにより、コード量及びCPU負荷とハードウェア量とのバランスを適切にしながら、処理速度を向上させることができる。
【0132】
また、本実施形態によれば、まずエラーの有無を判定し、エラーが有った場合にエラーの内容を特定することができるので、エラーが無い場合に無駄な処理を行わずに済ませることができ、処理速度を向上させることができる。
【0133】
また、本実施形態によれば、簡易な演算処理でエラーの有無を判定することができ、ハードウェアの増加量を抑えながら、処理速度を向上させることができる。
【0134】
4. 変形例
次に、本実施形態の変形例について説明する。
第1〜第6の様式のカードC1〜C6に対して或るコマンドを発行し、当該コマンドの実行によりカードC1〜C6内においてエラーが発生した場合に、当該エラーを表すエラービットが当該コマンドに対するレスポンス内のカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンス内のカードステータスにセットされる場合がある。そして、そのような場合が起こり得るビットは、カードの様式によって異なる。本変形例は、このような場合においても迅速にエラーの有無を判定することを可能とするものである。
【0135】
本変形例では、RAM4(図2参照)のテーブル記憶領域内に、図6〜図7に示すルックアップテーブルLookupに加えて、図10に示す直前コマンドレスポンスチェックマスクビットテーブルMask[m](0≦m≦6)(広義には、直前コマンドエラー判定情報テーブル)を更に記憶する。
【0136】
例えば、第1の様式のカードC1において、或るコマンドに対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、カードステータスのMSBを第31ビットとし、LSBを第0ビットとすると、エラービットが第30ビット、第27ビット、第26ビット、及び、第21〜第17ビットの場合である。これらのビットの位置は、チェックパターン「0x4C3E0000」(広義には、直前コマンドエラー判定情報、図10の第1番目の列参照)で表すことができる。
【0137】
また、第2の様式のカードC2において、或るコマンドに対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第30ビット、第27ビット、第26ビット、第24ビット、及び、第21〜第16ビットの場合である。これらのビットの位置は、チェックパターン「0x4D3F0000」(広義には、直前コマンドエラー判定情報、図10の第2番目の列参照)で表すことができる。
【0138】
また、第3の様式のカードC3において、或るコマンドに対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第30ビット、第27ビット、第26ビット、第24ビット、及び、第21〜第16ビットの場合である。これらのビットの位置は、チェックパターン「0x4D3F0000」(広義には、直前コマンドエラー判定情報、図10の第3番目の列参照)で表すことができる。
【0139】
また、第4の様式のカードC4において、或るコマンドに対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第31ビット、第30ビット、第27ビット、第26ビット、第24ビット、及び、第21ビット、第19〜第15ビット、及び、第6ビットの場合である。これらのビットの位置は、チェックパターン「0xCD2F8040」(広義には、直前コマンドエラー判定情報、図10の第4番目の列参照)で表すことができる。
【0140】
また、第5の様式のカードC5において、或るコマンドに対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第31ビット、第27ビット、第26ビット、第24ビット、及び、第21〜第19ビット、及び、第16ビットの場合である。これらのビットの位置は、チェックパターン「0x8D390000」(広義には、直前コマンドエラー判定情報、図10の第5番目の列参照)で表すことができる。
【0141】
また、第6の様式のカードC6において、或る通常コマンド(CMD)に対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第31〜第29ビット、第27ビット、第26ビット、第24ビット、及び、第21〜第19ビット、第16ビット、及び、第15ビットの場合である。これらのビットの位置は、チェックパターン「0xED398000」(広義には、直前コマンドエラー判定情報、図10の第6番目の列参照)で表すことができる。
【0142】
また、第6の様式のカードC6において、或る拡張コマンド(ACMD)に対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第31〜第29ビット、第27ビット、第26ビット、第24ビット、及び、第21〜第19ビット、第16ビット、及び、第15ビットの場合である。これらのビットの位置は、チェックパターン「0xED398000」(広義には、直前コマンドエラー判定情報、図10の第7番目の列参照)で表すことができる。
【0143】
図10に示す直前コマンドレスポンスチェックマスクビットテーブルは、カードの様式に関連付けて上記のチェックパターンを記憶したものである。なお、直前コマンドレスポンスチェックビットマスクテーブルをROM3内に作成しておき、初期時等において、メインCPU2やDMAコントローラ(図示せず)等が、直前コマンドレスポンスチェックマスクビットテーブルをRAM4内に転送するようにしても良い。また、通信回路7を用いて、直前コマンドレスポンスチェックマスクビットテーブルを参照したり、その一部又は全部を適宜更新するようにしても良い。
【0144】
図11は、本変形例が、先に説明したレジスタ制御部22(図8参照)に代えて含むレジスタ制御部41を示す図である。
このレジスタ制御部41は、レジスタ制御部22と同様に、先に説明したレジスタ22j、22l、22m、及び、テーブル記憶部31を含む。
【0145】
また、レジスタ制御部41は、レジスタ制御部22におけるカードステータスエラー判定部32に代えて、カードステータスエラー判定部42を含む。
さらに、レジスタ制御部41は、レジスタ22pを更に含む。
【0146】
レジスタ22pには、イニシエート時又は初期時において、直前コマンドレスポンスチェックマスクビットテーブルの中のカードスロット6(図2参照)に装着されたカードの様式に応じたマスクパターン(チェックパターン)である直前コマンドマスク情報(広義には、直前コマンドエラー判定情報)が、メインCPU2(図2参照)により書き込まれる。例えば、カードスロット6(図2参照)に装着されたカードが第1の様式のカードC1である場合には、レジスタ22pには、イニシエート時又は初期時において、マスクビットパターン「0x4C3E0000」(図10の第1番目の列参照)が、メインCPU2により書き込まれる。
【0147】
カードステータスエラー判定部42は、カードステータスエラー判定部32と同様に、先に説明したセレクタ32a、及び、論理積演算着32bを含む。
【0148】
また、カードステータスエラー判定部42は、直前コマンドチェックパターン記憶部42a(広義には、直前コマンドチェック情報記憶部)、論理積演算器42b、及び、論理和演算器42cを更に含む。
【0149】
直前コマンドチェックパターン記憶部42aは、後に詳細に説明するようにカードステータスのエラー判定後のタイミングで、セレクタ32aから出力されるチェックパターンを記憶する。すなわち、直前コマンドチェックパターン記憶部42aには、現在発行している(又はこれから発行しようとしている)コマンド(以下、「今回コマンド」という。)の直前に発行されたコマンド(以下、「直前コマンド」という。)のチェックパターンが記憶されていることになる。また、直前コマンドチェックパターン記憶部42aの初期値は、初期時には直前コマンドが存在しないため、「0x00000000」とされる。さらにまた、直前発行コマンドチェックパターンは、システムリセット時等にも、ゼロクリアされる。
【0150】
論理積演算器42bは、直前コマンドチェックパターン記憶部42aに記憶されている直前コマンドのチェックパターンとレジスタ22pに記憶されているマスクパターンとの論理積演算を行う。この論理積演算の演算結果(以下、直前発行コマンドチェックパターンという。)は、直前コマンドのエラービットの内の今回コマンドに対するカードステータスにセットされ得るエラービットを表すことになる。
【0151】
論理和演算器42cは、セレクタ32aから出力される今回コマンドのチェックパターンと論理積演算器42bから出力される直前発行コマンドチェックパターンとの論理和演算を行う。この論理和演算の結果は、今回コマンドのエラービット及び直前コマンドのエラービットの内の今回コマンドに対するカードステータスにセットされ得るエラービットを表すことになる。
【0152】
論理積演算器32bは、論理和演算器42cから出力されるチェックパターンとカードステータス22mに書き込まれる今回コマンドに対するカードステータスとの論理積演算を行う。
本変形例のその他の部分は、図2〜図4と同様である。
【0153】
図12は、今回コマンドをカードに発行する場合における本変形例の動作を示すフローチャートである。ここでは、第1の様式のカードC1がカードスロット6に装着されているものとする。なお、この場合には、先に説明したように、レジスタ22pには、イニシエート時又は初期時において、チェックパターン「0x4C3E0000」(図10の直前コマンドレスポンスチェックビットマスクテーブルMaskの第1番目の列参照)が、メインCPU2により書き込まれている。
【0154】
まず、メインCPU2(図2参照)が、ROM3(図2参照)内のドライバプログラムを実行し、カードの様式(ここでは、第1の様式)及び今回コマンドのコマンドインデックスに基づいてカードステータスエラー選択情報(ルックアップ値)を取得し、取得したカードステータスエラー選択情報(ルックアップ値)をレジスタ22jに書き込む(ステップS41)。
【0155】
次に、メインCPU2は、コマンドインデックス、アーギュメント、コマンドタイプ、レスポンスタイプ、データ転送タイプ、DAT線使用フラグ、転送ブロックサイズ、転送ブロック数、及び、レスポンスチェックをレジスタ22a〜22iに書き込むことにより、今回コマンドの発行をSDMMCホストコントローラ10に指示する(ステップS42)。
【0156】
なお、メインCPU2は、今回コマンドがカードC1へのデータ書込みを伴うコマンドである場合には、今回コマンドの発行の指示に先立って、カードC1へ書き込むデータをRAM4のDMA転送領域内に準備する。
【0157】
SDMMC制御部23内のコマンド・レスポンス送受信部23a(図3参照)は、レジスタ制御部22からの信号及びデータに従って、カードC1に今回コマンドを発行する(ステップS51)。
【0158】
カードC1は、受信した今回コマンドを実行して、レスポンス(以下、「今回レスポンス」という。)をコマンド・レスポンス送受信部23aに送信する(ステップS61)。
【0159】
コマンド・レスポンス送受信部23aは、今回レスポンスをカードインタフェース13を介してカードC1から受信すると、受信した今回レスポンスのカードステータスをレジスタ22m(図11参照)に書き込む。このとき、コマンド・レスポンス送受信部23aは、伝送エラーが発生していた場合に、伝送エラーのエラー情報をレジスタ22n(図4参照)に書き込む。なお、この場合に、SDMMCホストコントローラ10が、伝送エラーが発生したことを表す割込み信号をメインCPU2に送信するようにしても良い(ステップS52)。
【0160】
ところで、このとき、カードステータスエラー判定部42(図11参照)内のセレクタ32aは、メインCPU2がステップS41にてレジスタ22jに書き込んだカードステータスエラー選択情報(ルックアップ値)に基づいて、テーブル記憶部31内のレスポンスチェックビットテーブルの中の今回コマンドに応じた1つのチェックパターンを選択する。
【0161】
また、論理積演算器42bは、直前コマンドチェックパターン記憶部42aに記憶されている直前コマンドのチェックパターンとレジスタ22pに記憶されているマスクパターンとの論理積演算を行い、直前発行コマンドチェックパターンを出力している。また、論理和演算器42cは、セレクタ32aから出力される今回コマンドのチェックパターンと論理積演算器42bから出力される直前発行コマンドチェックパターンとの論理和演算を行い、コマンドチェックパターンを出力する。
【0162】
そして、論理積演算器32bは、コマンドチェックパターンと、コマンド・レスポンス送受信部23aによってレジスタ22mに書き込まれたカードステータスとの論理積演算を行い、その演算結果としてのカードステータスエラー有無情報をレジスタ22lに書き込む(ステップS53)。
【0163】
なお、直前コマンド及び今回コマンドを実行したカードC1内において何らのエラーも発生していない場合には、コマンドチェックパターンとカードステータスとの論理積演算の結果は「0」(0x00000000)となる。
一方、直前コマンド及び今回コマンドを実行したカードC1内において何らかのエラーが発生している場合には、コマンドチェックパターンとカードステータスとの論理積演算の結果は「0」以外となる。なお、この場合に、SDMMCホストコントローラ10が、カードステータスエラーが発生したことを表す割込み信号をメインCPU2に送信するようにしても良い(ステップS54)。
【0164】
その後、レジスタ制御部22は、セレクタ32aが出力している今回コマンドのチェックパターンを直前コマンドチェックパターン42aに格納する(ステップS55)。このチェックパターンは、今回コマンドの次のコマンドの発行時に利用されることになる。
【0165】
そして、レジスタ制御部22は、コマンド完了フラグをレジスタ22k(図4参照)にセットして、コマンドの完了をメインCPU2に通知する(ステップS56)。このとき、レジスタ制御部22が、コマンドの完了を通知するための割込み信号をメインCPU2に出力するようにしても良い。
【0166】
なお、コマンド・レスポンス送受信部23aは、カードC1に発行したコマンドがカードC1へのデータ書込みを伴うコマンドである場合には、カードC1からレスポンスを受信したときに、カードC1へのデータ書込みの開始をデータ送受信部23bに指示する。また、コマンド・レスポンス送受信部23aは、カードC1に発行した通常コマンドがカードC1からのデータ読出しを伴うコマンドである場合には、カードC1からレスポンスを受信したときに、カードC1からのデータ読出しの開始をデータ送受信部23b(図3参照)に指示する。
【0167】
メインCPU2は、SDMMCホストコントローラ10からコマンドの完了の通知を受けると、レジスタ制御部22のレジスタ22l内に格納されているカードステータスエラー有無情報を読み出す。
【0168】
先に説明したように、直前コマンド及び今回コマンドを実行したカードC1内において何らのエラーも発生していない場合には、コマンドチェックパターンとカードステータスとの論理積演算の結果は「0」となる。一方、直前コマンド及び今回コマンドを実行したカードC1内において何らかのエラーが発生している場合には、コマンドチェックパターンとカードステータスとの論理積演算の結果は「0」以外となる。
【0169】
そこで、メインCPU2は、レジスタ制御部22内のレジスタ22lから読み出したカードステータスエラー有無情報が「0」である場合には、処理を終了する(ステップS43)。
【0170】
一方、メインCPU2は、レジスタ制御部22内のレジスタ22lから読み出したカードステータスエラー有無情報が「0」以外である場合(ステップS43)には、エラー処理を実行する(ステップS44)。エラー処理としては、例えば、直前コマンド及び今回コマンドを実行したカードC1内においてどのようなエラーが発生したのかというエラーの内容を特定する処理を含むことが考えられる。これは、カードステータス内のビットを順次調べることで実現可能である。
【0171】
また、ステップS43において、カードステータスエラー有無情報が「0」であるか否かを判定するのに代えて、カードステータスエラーがあったことを表す割込み信号をSDMMCホストコントローラ10から受信したか否かを判定するようにしても良い。
【0172】
以上説明したように、本変形例によれば、直前コマンドに対するエラービットが今回レスポンスにセットされた場合であっても、エラーの有無を迅速且つ容易に判定することが可能である。
【0173】
また、本変形例によれば、簡易な演算処理で直前コマンドのエラーの有無を判定することができ、ハードウェアの増加量を抑えながら、処理速度を向上させることができる。
【0174】
なお、本発明は上述した実施の形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。また図2〜図4、図8、及び、図11の各図において、すべてのブロックを含める必要はなく、その一部のブロックを省略する構成にしてもよい。
【0175】
例えば、電子機器、ホストコントローラの構成は、図2〜図4、図8、及び、図11等で説明した構成に限定されず、種々の変形実施が可能である。また本発明のエラー判定手法も本実施形態で説明したものに限定されるものではなく、種々の変形実施が可能である。
【0176】
また、明細書又は図面中の記載において広義な用語(電子機器、ホストコントローラ、デバイス、情報処理装置、記憶回路、第1の回路等)として引用された用語(SDMMCホストコントローラ、SDカード(登録商標)、CPU、RAM等)は、明細書又は図面中の他の記載においても広義な用語に置き換えることができる。
【0177】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の1の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【0178】
また、本発明は、MMC(登録商標)及びSDカード(登録商標)を発展した仕様やこれらのカードと同様の思想に基づく種類、仕様、規格、及び/又は、バージョンに準拠したカードのエラー判定にも適用できる。
【図面の簡単な説明】
【0179】
【図1】コマンド及びレスポンスのフォーマットの一例を示す図。
【図2】本実施形態の電子機器の構成例の図。
【図3】図1のカードコントローラの内部構成のブロック図。
【図4】図2のレジスタ制御部内のレジスタマップを示す図。
【図5】図2のRAM内に記憶されるレスポンスチェックビットテーブルを示す図。
【図6】図2のRAM内に記憶されるルックアップテーブルを示す図。
【図7】図2のRAM内に記憶されるルックアップテーブルを示す図。
【図8】図3のカードステータスエラー判定部の内部構成のブロック図。
【図9】本実施形態の動作例のフロー図。
【図10】図2のRAM内に記憶される直前コマンドレスポンスチェックマスクビッ トテーブルを示す図。
【図11】本実施形態の変形例に含まれるレジスタ制御部の内部構成のブロック図。
【図12】本実施形態の変形例の動作例のフロー図。
【符号の説明】
【0180】
1 電子機器、2 メインCPU、3 ROM、4 RAM、5 カードコントローラ、6 カードスロット、7 通信回路、10 SDMMCホストコントローラ、11 CPUインタフェース、12 DMAインタフェース、13 カードインタフェース、21 クロック出力部、22 レジスタ制御部、22a〜22p レジスタ、23 SDMMC制御部、23a コマンド・レスポンス送受信部、23b データ送受信部、24 DMA制御部、24a FIFOバッファ、31 テーブル記憶領域、32、42 カードステータスエラー判定部、32a セレクタ、32b、42b 論理積演算器、42a 直前コマンドチェックパターン記憶部、42c 論理和演算器、C1〜C6 カード

【特許請求の範囲】
【請求項1】
情報処理装置と、様式が異なる複数のデバイスを装着可能なデバイス装着部に装着されたデバイスと、の間の媒介を行うホストコントローラであって、
前記デバイス装着部に装着可能な複数のデバイスの複数の様式と前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、前記デバイス装着部に装着可能な複数のデバイスの前記複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含むエラー判定情報テーブルを記憶する第1の回路と、
前記情報処理装置から前記デバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドを前記デバイス装着部に装着されたデバイスに発行する旨の指示情報及び前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報を特定するためのエラー判定情報特定情報を受け取る第2の回路と、
前記情報処理装置からの前記所望のコマンドを前記デバイス装着部に装着されたデバイスに発行する旨の指示情報に基づいて、前記デバイス装着部に装着されたデバイスに前記所望のコマンドを発行し、前記デバイス装着部に装着されたデバイスから前記所望のコマンドに対する応答を受け取る第3の回路と、
前記エラー判定情報テーブル内の前記複数のエラー判定情報の中から前記エラー判定情報特定情報によって特定される前記エラー判定情報を取得し、当該エラー判定情報及び前記デバイス装着部に装着されたデバイスの前記所望のコマンドに対する応答の内容に関する応答内容情報に基づいて、前記応答におけるエラーの有無を判定する第4の回路と、
を含むホストコントローラ。
【請求項2】
請求項1において、
前記エラー判定情報が、前記応答内容情報内のエラーに関する1つ又は複数の部分を特定する情報であり、
前記第4の回路が、前記応答内容情報内の前記エラー判定情報によって特定される前記1つ又は複数の部分に基づいて、前記応答におけるエラーの有無を判定することを特徴とするホストコントローラ。
【請求項3】
請求項1又は2において、
前記デバイス装着部が、
複数の種類、仕様、規格、及び/又は、バージョンのデバイスを装着可能であり、
前記第1の回路に記憶されている前記エラー判定情報テーブルが、
前記デバイス装着部に装着可能な複数のデバイスの種類、仕様、規格、及び/又は、バージョンと前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、前記デバイス装着部に装着可能な複数のデバイスの前記複数のコマンドに対する複数の応答におけるエラーの有無の判定にそれぞれ利用するための複数のエラー判定情報を含み、
前記情報処理装置が、
前記デバイス装着部に装着されたデバイスの種類、仕様、規格、及び/又は、バージョンと前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報を前記エラー判定情報テーブルの中から取得することを特徴とするホストコントローラ。
【請求項4】
請求項1乃至3のいずれかにおいて、
前記第1の回路に記憶されている前記エラー判定情報テーブルに含まれている前記複数のエラー判定情報の内の少なくとも1つが、前記デバイス装着部に装着可能な複数のデバイスの複数の様式と前記デバイス装着部に装着可能な複数のデバイスとの複数の組み合わせに関連付けられていることを特徴とするホストコントローラ。
【請求項5】
請求項1乃至4のいずれかにおいて、
前記エラー判定情報がビットパターンであり、
前記第4の回路が、
前記エラー判定情報と前記応答内容情報とに論理積演算処理を行い、その結果がゼロであるか否かによって、前記応答におけるエラーの有無を判定することを特徴とするホストコントローラ。
【請求項6】
請求項1乃至5のいずれかにおいて、
前記第2の回路が、
前記情報処理装置から前記デバイス装着部に装着されたデバイスに複数のコマンドが発行される場合に前記複数のコマンドの内の1つのコマンドに対する応答における前記複数のコマンドの内の前記1つのコマンドの直前に発行されるコマンドに対するエラーの有無の判定に利用するための直前コマンドエラー判定情報を更に受け取り、
前記第4の回路が、
前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報、前記応答内容情報、前記直前コマンドエラー判定情報、及び、前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドの直前に発行されたコマンドとの組み合わせに関連付けられた前記エラー判定情報に基づいて、前記所望のコマンドに対する応答におけるエラーの有無を判定することを特徴とするホストコントローラ。
【請求項7】
請求項6において、
前記第4の回路が、
前記所望のコマンドの直前に発行されたコマンドに対する応答におけるエラーの有無を判定した後に、前記所望のコマンドの直前に発行されたコマンドの前記エラー判定情報を記憶し、前記デバイス装着部に装着されたデバイスの前記所望のコマンドに対する応答の内容に関する応答内容情報を前記ホストコントローラから取得した後に、前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報、前記応答内容情報、前記所望のコマンドの直前に発行されたコマンドの前記エラー判定情報、及び、前記直前コマンドエラー判定情報に基づいて、前記所望のコマンドに対する応答におけるエラーの有無を判定することを特徴とするホストコントローラ。
【請求項8】
請求項6又は7のいずれかにおいて、
前記直前コマンドエラー判定情報が、前記応答内容情報内の前記所望のコマンドの直前に発行されたコマンドに対するエラーに関する1つ又は複数の部分を特定するビットパターンであり、
前記第4の回路が、
前記所望のコマンドの直前に発行されたコマンドの前記エラー判定情報と前記直前コマンドエラー判定情報とに論理積演算処理を行い、その結果と前記エラー判定情報とに論理和演算処理を行い、その結果と前記応答内容情報とに論理積演算処理を行い、その結果がゼロであるか否かによって、前記応答におけるエラーの有無を判定することを特徴とするホストコントローラ。
【請求項9】
情報処理装置と、
様式が異なる複数のデバイスを装着可能なデバイス装着部と、
前記情報処理装置と前記デバイス装着部に装着されたデバイスとの間の媒介を行うホストコントローラと、
を含む電子機器であって、
前記ホストコントローラが、
前記デバイス装着部に装着可能な複数のデバイスの複数の様式と前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、前記デバイス装着部に装着可能な複数のデバイスの前記複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含むエラー判定情報テーブルを記憶する第1の回路と、
前記情報処理装置から前記デバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドを前記デバイス装着部に装着されたデバイスに発行する旨の指示情報及び前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報を特定するためのエラー判定情報特定情報を受け取る第2の回路と、
前記情報処理装置からの前記所望のコマンドを前記デバイス装着部に装着されたデバイスに発行する旨の指示情報に基づいて、前記デバイス装着部に装着されたデバイスに前記所望のコマンドを発行し、前記デバイス装着部に装着されたデバイスから前記所望のコマンドに対する応答を受け取る第3の回路と、
前記エラー判定情報テーブル内の前記複数のエラー判定情報の中から前記エラー判定情報特定情報によって特定される前記エラー判定情報を取得し、当該エラー判定情報及び前記デバイス装着部に装着されたデバイスの前記所望のコマンドに対する応答の内容に関する応答内容情報に基づいて、前記応答におけるエラーの有無を判定する第4の回路と、
を含むことを特徴とする電子機器。
【請求項10】
請求項9において、
前記デバイス装着部に装着可能な複数のデバイスの複数の様式をそれぞれ特定する複数の様式特定情報と前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドをそれぞれ特定する複数のコマンド特定情報との組み合わせに関連付けて、前記エラー判定情報テーブル内の前記複数のエラー判定情報を特定するための複数のエラー判定情報特定情報を含むエラー判定情報特定情報テーブルを記憶する記憶回路を更に含み、
前記情報処理装置が、
前記デバイス装着部に装着されたデバイスの様式を特定する前記様式特定情報と前記所望のコマンドを特定する前記コマンド特定情報との組み合わせに関連付けられた前記エラー判定情報特定情報を前記エラー判定情報特定情報テーブルの中から取得して、前記ホストコントローラに送ることを特徴とする電子機器。
【請求項11】
請求項9又は10において、
前記情報処理装置が、
前記ホストコントローラの前記第4の回路が前記応答におけるエラーが有ったものと判定した場合に、前記応答におけるエラーの内容を特定する処理を実行することを特徴とする電子機器。
【請求項12】
請求項9乃至11のいずれかにおいて、
通信回路を更に含み、
前記通信回路を介して前記エラー判定情報テーブル及び/又は前記エラー判定情報特定情報テーブルを更新及び/又は書き換え可能であることを特徴とする電子機器。
【請求項13】
情報処理装置と、様式が異なる複数のデバイスを装着可能なデバイス装着部に装着されたデバイスと、の間の媒介を行うホストコントローラが実行する方法であって、
前記情報処理装置から前記デバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドを前記デバイス装着部に装着されたデバイスに発行する旨の指示情報及び前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドとの組み合わせに関連付けられたエラー判定情報を特定するためのエラー判定情報特定情報を受け取る工程と、
前記情報処理装置からの前記所望のコマンドを前記デバイス装着部に装着されたデバイスに発行する旨の指示情報に基づいて、前記デバイス装着部に装着されたデバイスに前記所望のコマンドを発行し、前記デバイス装着部に装着されたデバイスから前記所望のコマンドに対する応答を受け取る工程と、
前記デバイス装着部に装着可能な複数のデバイスの複数の様式と前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて前記デバイス装着部に装着可能な複数のデバイスの前記複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための可能な複数のエラー判定情報を含むエラー判定情報テーブルの中から、前記エラー判定情報特定情報によって特定される前記エラー判定情報を取得し、当該エラー判定情報及び前記デバイス装着部に装着されたデバイスの前記所望のコマンドに対する応答の内容に関する応答内容情報に基づいて、前記応答におけるエラーの有無を判定する工程と、
を含むエラー判定方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate