(57)【要約】【課題】処理速度の向上等が可能なエラー判定プログラム等を提供する。【解決手段】メインＣＰＵ２は、カードスロット６に装着されたカードが実行可能な複数のコマンドの中の所望のコマンドをカードに発行することをＳＤＭＭＣホストコントローラ１０に指示し、カードのデバイスの様式と所望のコマンドとの組み合わせに関連付けられたチェックパターンをレスポンスチェックビットテーブルの中から取得し、カードの所望のコマンドに対するレスポンス内のカードステータスをＳＤＭＭＣホストコントローラ１０から取得し、チェックパターン及びカードステータスに基づいて、レスポンスにおけるエラーの有無を判定する。【選択図】図８
2008293076.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置と、
様式が異なる複数のデバイスを装着可能なデバイス装着部と、
前記情報処理装置と前記デバイス装着部に装着されたデバイスとの間の媒介を行うホストコントローラと、
前記デバイス装着部に装着可能な複数のデバイスの複数の様式と前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、前記デバイス装着部に装着可能な複数のデバイスの前記複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含むエラー判定情報テーブルを記憶する記憶回路と、
を含む電子機器において前記情報処理装置に実行させるためのプログラムであって、
前記デバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドを前記デバイス装着部に装着されたデバイスに発行することを前記ホストコントローラに指示する手順と、
前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報を前記エラー判定情報テーブルの中から取得する手順と、
前記デバイス装着部に装着されたデバイスの前記所望のコマンドに対する応答の内容に関する応答内容情報を前記ホストコントローラから取得する手順と、
前記エラー判定情報及び前記応答内容情報に基づいて、前記応答におけるエラーの有無を判定する手順と、
を前記情報処理装置に実行させるためのエラー判定プログラム。
【請求項２】
請求項１において、
前記エラー判定情報が、前記応答内容情報内のエラーに関する１つ又は複数の部分を特定する情報であり、
前記情報処理装置が、前記応答内容情報内の前記エラー判定情報によって特定される前記１つ又は複数の部分に基づいて、前記応答におけるエラーの有無を判定することを特徴とするエラー判定プログラム。
【請求項３】
請求項１又は２において、
前記デバイス装着部が、
複数の種類、仕様、規格、及び／又は、バージョンのデバイスを装着可能であり、
前記記憶回路に記憶されている前記エラー判定情報テーブルが、
前記デバイス装着部に装着可能な複数のデバイスの種類、仕様、規格、及び／又は、バージョンと前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、前記デバイス装着部に装着可能な複数のデバイスの前記複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含み、
前記情報処理装置が、
前記デバイス装着部に装着されたデバイスの種類、仕様、規格、及び／又は、バージョンと前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報を前記エラー判定情報テーブルの中から取得することを特徴とするエラー判定プログラム。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記記憶回路に記憶されている前記エラー判定情報テーブルに含まれている前記複数のエラー判定情報の内の少なくとも１つが、前記デバイス装着部に装着可能な複数のデバイスの様式と前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの複数の組み合わせに関連付けられていることを特徴とするエラー判定プログラム。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記記憶回路が、
前記デバイス装着部に装着可能な複数のデバイスの複数の様式をそれぞれ特定する複数の様式特定情報と前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドをそれぞれ特定する複数のコマンド特定情報との組み合わせに関連付けて、前記エラー判定情報テーブル内の前記複数のエラー判定情報を特定するための複数のエラー判定情報特定情報を含むエラー判定情報特定情報テーブルを更に記憶し、
前記情報処理装置が、
前記デバイス装着部に装着されたデバイスの様式を特定する前記様式特定情報と前記所望のコマンドを特定する前記コマンド特定情報との組み合わせに関連付けられた前記エラー判定情報特定情報を前記エラー判定情報特定情報テーブルの中から取得し、当該エラー判定情報特定情報によって特定される前記エラー判定情報を前記エラー判定情報テーブルの中から取得することを特徴とするエラー判定プログラム。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記応答におけるエラーが有ったものと判定された場合に、前記エラー判定情報及び前記応答内容情報に基づいて、前記応答におけるエラーの内容を特定する手順を前記情報処理装置に更に実行させることを特徴とするエラー判定プログラム。
【請求項７】
請求項１乃至６のいずれかにおいて、
前記エラー判定情報がビットパターンであり、
前記情報処理装置が、
前記エラー判定情報と前記応答内容情報とに論理積演算処理を行い、その結果がゼロであるか否かによって、前記応答におけるエラーの有無を判定することを特徴とするエラー判定プログラム。
【請求項８】
請求項１乃至３のいずれかにおいて、
前記記憶回路が、前記デバイス装着部に装着可能な複数のデバイスの複数の様式にそれぞれ対応し、前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報をそれぞれ含む複数のエラー判定情報テーブルを記憶し、
前記情報処理装置が、
前記複数のエラー判定情報テーブルの中から前記デバイス装着部に装着されたデバイスの様式に対応するエラー判定情報テーブルを選択し、当該エラー判定情報テーブルの中から前記所望のコマンドに対する応答におけるエラーの有無の判定に利用するための前記エラー判定情報を取得し、当該エラー判定情報及び前記応答内容情報に基づいて、前記応答におけるエラーの有無を判定することを特徴とするエラー判定プログラム。
【請求項９】
請求項１乃至８のいずれかにおいて、
前記記憶回路が、前記デバイス装着部に装着可能な複数のデバイスの複数の様式に関連付けて、前記デバイス装着部に装着可能な複数のデバイスに複数のコマンドが発行される場合に前記複数のコマンドの内の１つのコマンドに対する応答における前記複数のコマンドの内の前記１つのコマンドの直前に発行されるコマンドに対するエラーの有無の判定に利用するための複数の直前コマンドエラー判定情報を含む直前コマンドエラー判定情報テーブルを更に記憶し、
前記情報処理装置が、
前記デバイス装着部に装着されたデバイスの様式に関連付けられた前記直前コマンドエラー判定情報を前記直前コマンドエラー判定情報テーブルの中から取得し、前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報、前記応答内容情報、前記直前コマンドエラー判定情報、及び、前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドの直前に発行されたコマンドとの組み合わせに関連付けられた前記エラー判定情報に基づいて、前記所望のコマンドに対する応答におけるエラーの有無を判定することを特徴とするエラー判定プログラム。
【請求項１０】
請求項９において、
前記情報処理装置が、
前記所望のコマンドの直前に発行されたコマンドに対する応答におけるエラーの有無を判定した後に、前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドの直前に発行されたコマンドとの組み合わせに関連付けられた前記エラー判定情報と前記デバイス装着部に装着されたデバイスの様式に関連付けられた前記直前コマンドエラー判定情報とに基づいて前記所望のコマンドに対する応答における前記所望のコマンドの直前に発行されたコマンドに対するエラーの有無の判定に利用するための直前発行コマンドチェック情報を作成又は更新して記憶し、前記デバイス装着部に装着されたデバイスの前記所望のコマンドに対する応答の内容に関する応答内容情報を前記ホストコントローラから取得した後に、前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報、前記応答内容情報、及び、前記直前発行コマンドチェック情報に基づいて、前記所望のコマンドに対する応答におけるエラーの有無を判定することを特徴とするエラー判定プログラム。
【請求項１１】
情報処理装置と、
様式が異なる複数のデバイスを装着可能なデバイス装着部と、
前記情報処理装置と前記デバイス装着部に装着されたデバイスとの間の媒介を行うホストコントローラと、
前記デバイス装着部に装着可能な複数のデバイスの複数の様式と前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、前記デバイス装着部に装着可能な複数のデバイスの前記複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含むエラー判定情報テーブルを記憶する記憶回路と、
を含む電子機器において前記情報処理装置が実行する方法であって、
前記デバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドを前記デバイス装着部に装着されたデバイスに発行することを前記ホストコントローラに指示する工程と、
前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報を前記エラー判定情報テーブルの中から取得する工程と、
前記デバイス装着部に装着されたデバイスからの前記所望のコマンドに対する応答の内容に関する応答内容情報を前記ホストコントローラから取得する工程と、
前記エラー判定情報及び前記応答内容情報に基づいて、前記応答におけるエラーの有無を判定する工程と、
を含むエラー判定方法。
【請求項１２】
情報処理装置と、
様式が異なる複数のデバイスを装着可能なデバイス装着部と、
前記情報処理装置と前記デバイス装着部に装着されたデバイスとの間の媒介を行うホストコントローラと、
前記デバイス装着部に装着可能な複数のデバイスの複数の様式と前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、前記デバイス装着部に装着可能な複数のデバイスの前記複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用可能な複数のエラー判定情報を含むエラー判定情報テーブルを記憶する記憶回路と、
を含む電子機器であって、
前記情報処理装置が、
前記デバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドを前記デバイス装着部に装着されたデバイスに発行することを前記ホストコントローラに指示する工程と、
前記デバイス装着部に装着されたデバイスの様式と前記所望のコマンドとの組み合わせに関連付けられた前記エラー判定情報を前記エラー判定情報テーブルの中から取得する工程と、
前記デバイス装着部に装着されたデバイスからの前記所望のコマンドに対する応答の内容に関する応答内容情報を前記ホストコントローラから取得する工程と、
前記エラー判定情報及び前記応答内容情報に基づいて、前記応答におけるエラーの有無を判定する工程と、
を実行することを特徴とする電子機器。
【請求項１３】
請求項１２において、
前記記憶回路が、
前記デバイス装着部に装着可能な複数のデバイスの複数の様式をそれぞれ特定する複数の様式特定情報と前記デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドをそれぞれ特定する複数のコマンド特定情報との組み合わせに関連付けて、前記エラー判定情報テーブル内の前記複数のエラー判定情報を特定するための複数のエラー判定情報特定情報を含むエラー判定情報特定情報テーブルを更に記憶し、
前記情報処理装置が、
前記デバイス装着部に装着されたデバイスの様式を特定する前記様式特定情報と前記所望のコマンドを特定する前記コマンド特定情報との組み合わせに関連付けられた前記エラー判定情報特定情報を前記エラー判定情報特定情報テーブルの中から取得し、当該エラー判定情報特定情報によって特定される前記エラー判定情報を前記エラー判定情報テーブルの中から取得することを特徴とする電子機器。
【請求項１４】
請求項１２又は１３において、
通信回路を更に含み、
前記通信回路を介して前記エラー判定情報テーブル及び／又は前記エラー判定情報特定情報テーブルを更新及び／又は書き換え可能であることを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、様式が異なる複数のデバイスを装着可能な電子機器、そのような電子機器において実行されるエラー判定プログラム、及び、エラー判定方法に関する。
【背景技術】
【０００２】
パーソナルコンピュータや多機能端末機などの外部記憶メディアの１つとして、標準化団体であるＭＭＣＡ（MultiMedia Card Association）が標準化したマルチメディアカード（登録商標）やＳＤＡ（SD Card Association）が標準化したＳＤ（Secure Digital）カード（登録商標）などが広く知られており、デジタルビデオカメラの静止画像記録、携帯電話装置のデータ記録、携帯音楽プレーヤの音楽記録などに用いられている。
【０００３】
なお、関連する技術として、下記の特許文献１には、インタフェース制御対象機器のコマンド仕様などに代表されるインタフェース仕様の追加・変更に対して対処が容易なデータプロセッサ等が開示されている。
【特許文献１】特開２００２−３４２２５６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記したように、現在、種々のカードが用いられており、また、これらのカードの仕様の各々には、複数のバージョンが存在している。さらに、カードの仕様、バージョンの各々において、多数のコマンドが規定されている。そのため、上記したカードを装着可能な電子機器等において、カードの種類、バージョン、コマンド等の組み合わせに応じてレスポンスのエラー判定処理を行わなければならず、判定箇所も多くなるため、処理が複雑となり、処理速度が遅くなるという問題があった。
【０００５】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、上記したカードを装着可能な電子機器等における処理を簡素化するとともに、処理負荷を軽減すること等が可能なエラー判定プログラム、エラー判定方法、及び、電子機器を提供することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために本発明は、情報処理装置と、様式が異なる複数のデバイスを装着可能なデバイス装着部と、情報処理装置と前記デバイス装着部に装着されたデバイスとの間の媒介を行うホストコントローラと、デバイス装着部に装着可能な複数のデバイスの複数の様式とデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、デバイス装着部に装着可能な複数のデバイスの複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含むエラー判定情報テーブルを記憶する記憶回路と、を含む電子機器において情報処理装置に実行させるためのプログラムであって、デバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドをデバイス装着部に装着されたデバイスに発行することをホストコントローラに指示する手順と、デバイス装着部に装着されたデバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報をエラー判定情報テーブルの中から取得する手順と、デバイス装着部に装着されたデバイスの所望のコマンドに対する応答の内容に関する応答内容情報をホストコントローラから取得する手順と、エラー判定情報及び応答内容情報に基づいて、応答におけるエラーの有無を判定する手順と、を情報処理装置に実行させるためのエラー判定プログラムに関係する。
【０００７】
本発明によれば、デバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報及び所望のコマンドに対する応答の内容に関する応答内容情報に基づいて、応答におけるエラーの有無を容易に判定することができるようになる。これにより、処理を簡素化でき、コード量を減らすことができ、プログラムの可読性を向上させることができ、処理速度を向上させることができる。
【０００８】
また本発明に係るエラー判定プログラムでは、エラー判定情報が、応答内容情報内のエラーに関する１つ又は複数の部分を特定する情報であり、情報処理装置が、応答内容情報内のエラー判定情報によって特定される１つ又は複数の部分に基づいて、応答におけるエラーの有無を判定するようにしても良い。
【０００９】
本発明によれば、応答内容情報内のエラーに関係する部分に対して処理を行うことで、エラーの有無を確実に判定することができる。
【００１０】
また本発明に係るエラー判定プログラムでは、デバイス装着部が、複数の種類、仕様、規格、及び／又は、バージョンのデバイスを装着可能であり、記憶回路に記憶されているエラー判定情報テーブルが、デバイス装着部に装着可能な複数のデバイスの種類、仕様、規格、及び／又は、バージョンとデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、デバイス装着部に装着可能な複数のデバイスの複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含み、情報処理装置が、デバイス装着部に装着されたデバイスの種類、仕様、規格、及び／又は、バージョンと所望のコマンドとの組み合わせに関連付けられたエラー判定情報をエラー判定情報テーブルの中から取得するようにしても良い。
【００１１】
本発明によれば、複数の種類、仕様、規格、及び／又は、バージョンのデバイスに関してもエラー判定を容易に行うことができ、幅広い用途に対応可能となる。
【００１２】
また本発明に係るエラー判定プログラムでは、記憶回路に記憶されているエラー判定情報テーブルに含まれている複数のエラー判定情報の内の少なくとも１つが、デバイス装着部に装着可能な複数のデバイスの様式とデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの複数の組み合わせに関連付けられているようにしても良い。
【００１３】
本発明によれば、複数の様式及び／又はコマンド間でエラー判定情報を共通化でき、エラー判定情報テーブルのサイズを小さくすることができ、記憶回路の回路規模を削減することができる。
【００１４】
また本発明に係るエラー判定プログラムでは、記憶回路が、デバイス装着部に装着可能な複数のデバイスの様式をそれぞれ特定する複数の様式特定情報とデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドをそれぞれ特定する複数のコマンド特定情報との組み合わせに関連付けて、エラー判定情報テーブル内の複数のエラー判定情報を特定するための複数のエラー判定情報特定情報を含むエラー判定情報特定情報テーブルを更に記憶し、情報処理装置が、デバイス装着部に装着されたデバイスの様式を特定する様式特定情報と所望のコマンドを特定するコマンド特定情報との組み合わせに関連付けられたエラー判定情報特定情報をエラー判定情報特定情報テーブルの中から取得し、当該エラー判定情報特定情報によって特定されるエラー判定情報をエラー判定情報テーブルの中から取得するようにしても良い。
【００１５】
本発明によれば、様式特定情報とコマンド特定情報との組み合わせに関連付けられたエラー判定情報を迅速且つ容易に取得することができるので、処理速度を向上させることができる。
【００１６】
また本発明に係るエラー判定プログラムでは、応答におけるエラーが有ったものと判定された場合に、エラー判定情報及び応答内容情報に基づいて、応答におけるエラーの内容を特定する手順を情報処理装置に更に実行させるようにしても良い。
【００１７】
本発明によれば、まずエラーの有無を判定し、エラーが有った場合にエラーの内容を特定することができるので、エラーが無い場合に無駄な処理を行わずに済ませることができ、処理速度を向上させることができる。
【００１８】
また本発明に係るエラー判定プログラムでは、エラー判定情報がビットパターンであり、情報処理装置が、エラー判定情報と応答内容情報とに論理積演算処理を行い、その結果がゼロであるか否かによって、応答におけるエラーの有無を判定するようにしても良い。
【００１９】
本発明によれば、簡易な演算処理でエラーの有無を判定することができ、処理速度を向上させることができる。
【００２０】
また本発明に係るエラー判定プログラムでは、記憶回路が、デバイス装着部に装着可能な複数のデバイスの複数の様式にそれぞれ対応し、デバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報をそれぞれ含む複数のエラー判定情報テーブルを記憶し、情報処理装置が、複数のエラー判定情報テーブルの中からデバイス装着部に装着されたデバイスの様式に対応するエラー判定情報テーブルを選択し、当該エラー判定情報テーブルの中から所望のコマンドに対する応答におけるエラーの有無の判定に利用するためのエラー判定情報を取得し、当該エラー判定情報及び応答内容情報に基づいて、応答におけるエラーの有無を判定するようにしても良い。
【００２１】
本発明によれば、少ないテーブル参照回数、時間、及び、コード量で、応答におけるエラーの有無を判定することができる。
【００２２】
また本発明に係るエラー判定プログラムでは、記憶回路が、デバイス装着部に装着可能な複数のデバイスの複数の様式に関連付けて、デバイス装着部に装着可能な複数のデバイスに複数のコマンドが発行される場合に複数のコマンドの内の１つのコマンドに対する応答における複数のコマンドの内の１つのコマンドの直前に発行されるコマンドに対するエラーの有無の判定に利用するための複数の直前コマンドエラー判定情報を含む直前コマンドエラー判定情報テーブルを更に記憶し、情報処理装置が、デバイス装着部に装着されたデバイスの様式に関連付けられた直前コマンドエラー判定情報を直前コマンドエラー判定情報テーブルの中から取得し、デバイス装着部に装着されたデバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報、応答内容情報、直前コマンドエラー判定情報、及び、デバイス装着部に装着されたデバイスの様式と所望のコマンドの直前に発行されたコマンドとの組み合わせに関連付けられたエラー判定情報に基づいて、所望のコマンドに対する応答におけるエラーの有無を判定するようにしても良い。
【００２３】
本発明によれば、所望のコマンドの直前に発行されたコマンドに対するエラーが所望のコマンドに対する応答にセットされた場合であっても、エラーの有無を迅速且つ容易に判定することができる。
【００２４】
また本発明に係るエラー判定プログラムでは、情報処理装置が、所望のコマンドの直前に発行されたコマンドに対する応答におけるエラーの有無を判定した後に、デバイス装着部に装着されたデバイスの様式と所望のコマンドの直前に発行されたコマンドとの組み合わせに関連付けられたエラー判定情報とデバイス装着部に装着されたデバイスの様式に関連付けられた直前コマンドエラー判定情報とに基づいて所望のコマンドに対する応答における所望のコマンドの直前に発行されたコマンドに対するエラーの有無の判定に利用するための直前発行コマンドチェック情報を作成又は更新して記憶し、デバイス装着部に装着されたデバイスの所望のコマンドに対する応答の内容に関する応答内容情報をホストコントローラから取得した後に、デバイス装着部に装着されたデバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報、応答内容情報、及び、直前発行コマンドチェック情報に基づいて、所望のコマンドに対する応答におけるエラーの有無を判定するようにしても良い。
【００２５】
本発明によれば、所望のコマンドの直前に発行されたコマンドに対するエラーの有無をより迅速に判定することができる。
【００２６】
また本発明は、情報処理装置と、様式が異なる複数のデバイスを装着可能なデバイス装着部と、情報処理装置とデバイス装着部に装着されたデバイスとの間の媒介を行うホストコントローラと、デバイス装着部に装着可能な複数のデバイスの様式とデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、デバイス装着部に装着可能な複数のデバイスの複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含むエラー判定情報テーブルを記憶する記憶回路と、を含む電子機器において情報処理装置が実行する方法であって、デバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドをデバイス装着部に装着されたデバイスに発行することをホストコントローラに指示する工程と、デバイス装着部に装着されたデバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報をエラー判定情報テーブルの中から取得する工程と、デバイス装着部に装着されたデバイスからの所望のコマンドに対する応答の内容に関する応答内容情報をホストコントローラから取得する工程と、エラー判定情報及び応答内容情報に基づいて、応答におけるエラーの有無を判定する工程と、を含むエラー判定方法に関係する。
【００２７】
また本発明は、情報処理装置と、様式が異なる複数のデバイスを装着可能なデバイス装着部と、情報処理装置とデバイス装着部に装着されたデバイスとの間の媒介を行うホストコントローラと、デバイス装着部に装着可能な複数のデバイスの複数の様式とデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドとの組み合わせに関連付けて、デバイス装着部に装着可能な複数のデバイスの複数のコマンドに対する複数の応答におけるエラーの有無の判定に利用するための複数のエラー判定情報を含むエラー判定情報テーブルを記憶する記憶回路と、を含む電子機器であって、情報処理装置が、デバイス装着部に装着されたデバイスが実行可能な複数のコマンドの中の所望のコマンドをデバイス装着部に装着されたデバイスに発行することをホストコントローラに指示する工程と、デバイス装着部に装着されたデバイスの様式と所望のコマンドとの組み合わせに関連付けられたエラー判定情報をエラー判定情報テーブルの中から取得する工程と、デバイス装着部に装着されたデバイスからの所望のコマンドに対する応答の内容に関する応答内容情報をホストコントローラから取得する工程と、エラー判定情報及び応答内容情報に基づいて、応答におけるエラーの有無を判定する工程と、を実行することを特徴とする電子機器に関係する。
【００２８】
また本発明に係る電子機器では、記憶回路が、デバイス装着部に装着可能な複数のデバイスの複数の様式をそれぞれ特定する複数の様式特定情報とデバイス装着部に装着可能な複数のデバイスが実行可能な複数のコマンドをそれぞれ特定する複数のコマンド特定情報との組み合わせに関連付けて、エラー判定情報テーブル内の複数のエラー判定情報を特定するための複数のエラー判定情報特定情報を含むエラー判定情報特定情報テーブルを更に記憶し、情報処理装置が、デバイス装着部に装着されたデバイスの様式を特定する様式特定情報と所望のコマンドを特定するコマンド特定情報との組み合わせに関連付けられたエラー判定情報特定情報をエラー判定情報特定情報テーブルの中から取得し、当該エラー判定情報特定情報によって特定されるエラー判定情報をエラー判定情報テーブルの中から取得するようにしても良い。
【００２９】
また本発明に係る電子機器では、通信回路を更に含み、通信回路を介して記憶回路に記憶されているエラー判定情報テーブル及び／又はエラー判定情報特定情報テーブルを更新及び／又は書き換え可能としても良い。
【００３０】
本発明によれば、デバイスの様式の追加・変更や、コマンドの追加・変更や、エラー判定情報テーブル及び／又はエラー判定情報特定情報テーブルのデバッグ等に柔軟に対応可能となる。
【発明を実施するための最良の形態】
【００３１】
以下、本発明の実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成のすべてが本発明の必須構成要件であるとは限らない。
【００３２】
１．  コマンド及びレスポンス
１．１  コマンド
まず、ＳＤカード（登録商標）の仕様におけるコマンドについて説明する。
図１（ａ）は、ＳＤカード（登録商標）の仕様におけるコマンドのフォーマットを示す図である。図１（ａ）に示すように、コマンドは、スタートビット（１ビット）、転送方向ビット（１ビット）、コマンドインデックス（６ビット）、アーギュメント（３２ビット）、ＣＲＣ（７ビット）、及び、エンドビット（１ビット）を含み、計４８ビットである。この４８ビットのコマンドが、ＣＭＤ信号線を介して、ホスト側回路からカードにシリアル転送される。
【００３３】
転送方向ビットは、コマンドのようにホスト側回路からカードへ転送される場合には「１」であり、後述するレスポンスのようにカードからホスト側回路へ転送される場合には「０」である。
【００３４】
コマンドインデックスは、６ビットであり、０（０ｘ００）〜６３（０ｘ３Ｆ）までの値をとり得る。このコマンドインデックスにより特定されるコマンドが、カードにおいて実行される。
【００３５】
アーギュメントは、３２ビットであり、コマンドインデックスにより特定されるコマンドの実行に必要な各種の情報を含む。
【００３６】
ＣＲＣ（Cyclic Redundancy Code）は、ホスト側回路とカードとの間の転送エラーをチェックするために、スタートビット、転送方向ビット、コマンドインデックス、及び、アーギュメントの計４０ビットに基づいて算出され、アーギュメントの後ろに付加される。
【００３７】
なお、ＭＭＣ（MultiMedia Card）（登録商標）規格におけるコマンドのフォーマットも、図１（ａ）に示すフォーマットと同様である。但し、コマンドインデックスにより特定されるコマンドの処理内容がＳＤカード（登録商標）と異なるものもある。
【００３８】
１．２  レスポンス
次に、ＳＤカード（登録商標）の仕様におけるレスポンスについて説明する。
図１（ｂ）は、ＳＤカード（登録商標）の仕様におけるレスポンスの内の「Ｒ１」というタイプのレスポンスのフォーマットを示す図である。図１（ｂ）に示すように、レスポンスは、スタートビット（１ビット）、転送方向ビット（１ビット）、コマンドインデックス（６ビット）、カードステータス（３２ビット）、ＣＲＣ（７ビット）、及び、エンドビット（１ビット）を含み、計４８ビットである。この４８ビットのレスポンスが、ＣＭＤ信号線を介して、カードからホスト側回路にシリアル転送される。
【００３９】
転送方向ビットは、レスポンスのようにカードからホスト側回路へ転送される場合には「０」である。
【００４０】
コマンドインデックスは、６ビットであり、ホスト側回路からカードに転送されたコマンド内のコマンドインデックスを復唱したものである。
【００４１】
カードステータスは、３２ビットであり、コマンドインデックスにより特定されるコマンドを実行したカード内のステータスに関する情報を含む。
【００４２】
ＣＲＣは、カードとホスト側回路との間の転送エラーをチェックするために、スタートビット、転送方向ビット、コマンドインデックス、及び、カードステータスの計４０ビットに基づいて算出され、カードステータスの後ろに付加される。
【００４３】
ＳＤカード（登録商標）の仕様において、コマンドのフォーマットは上記した１つ（図１（ａ）参照）が規定されているが、レスポンスのタイプは、上記した「Ｒ１」というタイプのほか、「Ｒ１ｂ」、「Ｒ２」、「Ｒ３」、「Ｒ６」、及び、「Ｒ７」というタイプが規定されている。そして、これら６種類のタイプの内のどのタイプのレスポンスが返されるかは、コマンド毎に規定されている。多数のコマンドに対しては、「Ｒ１」というタイプのレスポンスが返されることとして規定されており、少数のコマンドに対して、「Ｒ１ｂ」、「Ｒ２」、「Ｒ３」、「Ｒ６」、「Ｒ７」というタイプのレスポンスが返されることとして規定されている。なお、レスポンスが返されないこととして規定されているコマンドもある。
【００４４】
「Ｒ１ｂ」というタイプのレスポンスは、そのフォーマットは上記した「Ｒ１」というタイプのレスポンスのフォーマット（図１（ｂ）参照）と同様であるが、オプショナルのビジー信号がデータ線Ｄ０上に出力される点で、「Ｒ１」というタイプのレスポンスと異なっている。
【００４５】
「Ｒ２」というタイプのレスポンスは、カード内部のＣＩＤレジスタ（１２８ビット）又はＣＳＤレジスタ（１２８ビット）を読み出すためのコマンドに対して返されるレスポンスであり、そのフォーマットは、計１３６ビット長である。
【００４６】
「Ｒ３」というタイプのレスポンスは、カード内部のＯＣＲレジスタ（３２ビット）を読み出すためのコマンドに対して返されるレスポンスであり、そのフォーマットは、計４８ビット長である。
【００４７】
「Ｒ６」というタイプのレスポンスは、新たに発行されたＲＣＡ（Relative Card Address）を返すためのレスポンスであり、そのフォーマットは、計４８ビット長である。
【００４８】
「Ｒ７」というタイプのレスポンスは、カードがサポートする電圧の情報を返すためのレスポンスであり、そのフォーマットは、計４８ビット長である。
【００４９】
なお、ＭＭＣ（MultiMedia Card）（登録商標）規格におけるレスポンスのフォーマットも、ＳＤカード（登録商標）規格におけるフォーマットと同様である。
【００５０】
１．３  エラー判定
図１（ｂ）に示すカードステータス（３２ビット）の内の幾つかのビットは、未使用又はリザーブ（将来の使用のために留保）されているが、他のビットは、カード内の各種のステータスをそれぞれ表すものとして規定されている。そして、コマンドの実行によりカード内に１つ又は複数のエラー（以下、「カードステータスエラー」という。）が発生した場合には、発生したエラーに対応する１つ又は複数のビットが「１」にセットされる。コマンドの実行によりどのようなカードステータスエラーが発生し得て、その結果としてどのビットが「１」にセットされ得るのかは、コマンド毎に異なっており、全てのコマンドで同一ではない。そのため、ホスト側回路は、カードに発行したコマンドに応じた数及び位置のビット（以下、「エラービット」という。）を逐次チェックすることでカードステータスエラーの判定を行う必要があり、判定箇所も多くなるため、処理が複雑となり、処理速度が遅くなってしまっていた。特に、種類やバージョンの異なるカードを装着可能な電子機器の場合、種類やバージョンによってエラービットの位置が異なることが多いため、処理が更に複雑となり、処理負荷が更に重く、処理時間が更に掛かってしまっていた。
【００５１】
２．  構成
図２に、以上のような問題を解決できる本実施形態の電子機器１の構成例を示す。図２に示すように、この電子機器１は、各種コマンドの発行指示やデータの転送指示やプログラムの実行を行うメインＣＰＵ（広義には、情報処理装置）２と、プログラムやデータを記憶するＲＯＭ３と、データを記憶するＲＡＭ（広義には、記憶回路）４と、複数の様式（種類、仕様、規格、及び／又は、バージョンを含む。）のカード（広義には、デバイス）を挿入可能なカードスロット（広義には、デバイス装着部）６と、メインＣＰＵ２からの指示に応じてカードスロット６に装着されたカードへのコマンド発行やデータ転送等を行うカードコントローラ５と、外部機器との間で有線又は無線通信を行うための通信回路７とを含む。メインＣＰＵ２、ＲＯＭ３、ＲＡＭ４、カードコントローラ５、及び、通信回路７は、バスＢ１によって接続されている。
【００５２】
ＲＯＭ３は、例えば、リアルタイムＯＳ（オペレーティングシステム）プログラムや、各種のアプリケーションプログラムや、カードコントローラ５を操作するためのドライバプログラム等を記憶しており、メインＣＰＵ２は、これらのプログラムを適宜実行する。
【００５３】
ＲＡＭ４は、メインＣＰＵ２がワークエリアとして使用する作業領域や、カードスロット６に挿入されたカードとの間のデータのＤＭＡ転送のために用いられるＤＭＡ転送領域や、カードスロット６に装着可能なカードの様式及びカードスロット６に装着可能なカードが実行可能な複数のコマンドに関連付けて、カードスロット６に装着可能なカードの複数のコマンドに対するカードステータスエラーの判定に利用可能な複数のチェックパターン（広義には、エラー判定情報）を格納したレスポンスチェックビットテーブル（広義には、エラー判定情報テーブル）や、レスポンスチェックビットテーブル内の所要のテーブル要素を迅速に決定するためのルックアップテーブル（広義には、エラー判定情報特定情報テーブル）等を記憶するテーブル記憶領域を有する。なお、これらのテーブルについては、後で詳細に説明する。
【００５４】
カードスロット６は、ＭＭＣ（MultiMedia Card）（登録商標）のバージョン１．０〜１．２又は１．４の仕様に準拠したカード（以下、「第１の様式のカード」という。）Ｃ１、ＭＭＣ（登録商標）のバージョン２．０〜２．２の仕様に準拠したカード（以下、「第２の様式のカード」という。）Ｃ２、ＭＭＣ（登録商標）のバージョン３．０〜３．３１の仕様に準拠したカード（以下、「第３の様式のカード」という。）Ｃ３、ＭＭＣ（登録商標）のバージョン４．０〜４．２の仕様に準拠したカード（以下、「第４の様式のカード」という。）Ｃ４、ＳＤ（登録商標）のバージョン１．０１の仕様に準拠したカード（以下、「第５の様式のカード」という。）Ｃ５、ＳＤ（登録商標）のバージョン１．１０又は２．００の仕様に準拠したカード（以下、「第６の様式のカード」という。）Ｃ６を装着可能である。なお、本願においては、これらのカードを総称する場合に、ＳＤＭＭＣカードと言う。
【００５５】
本実施形態においては、上記第１〜第６の様式のカードＣ１〜Ｃ６を装着可能としているが、更に他の種類、仕様、規格、及び／又は、バージョンのデバイス（例えば、ＳＤＩＯデバイス、ＣＥ−ＡＴＡデバイス等）を装着可能とすることも可能である。
【００５６】
なお、カードスロット６に装着されたカードの様式は、イニシエートで得られる情報やカード内部のレジスタ（ＣＩＤレジスタ、ＣＳＤレジスタ等）を読み出して得られる情報に基づいて、特定可能である。メインＣＰＵ２は、イニシエート時又は初期時において、そのようにして特定したカードの様式を表すデータを、ＲＡＭ４に書き込む。例えば、第６の様式のカードＣ６がカードスロット６に装着されている場合には、メインＣＰＵ２は、初期時において、コマンド「ＣＭＤ２」（コマンドインデックス２（０ｘ０２））等を第６の様式のカードＣ６に発行することで、ＣＩＤレジスタ等を読み出すことができる。このようなカードの様式の特定はそれぞれの仕様に基づいて可能であるので、ここでは詳細な説明を省略する。
【００５７】
カードコントローラ５は、メインＣＰＵ２からの指示に応じて、メインＣＰＵ２とカードスロット６に装着されたカードとの間の媒介を行う。カードコントローラ５とカードスロット６との間は、ＣＬＫ線（クロック供給用信号線）、ＣＭＤ線（コマンド用信号線）、及び、ＤＡＴ線（データ用信号線）によって接続されている。
【００５８】
ＣＬＫ線は、カードコントローラ５から第１〜第６の様式のカードＣ１〜Ｃ６へクロック信号を送信するための信号線である。カードコントローラ５から第１〜第６の様式のカードＣ１〜Ｃ６へのコマンドの転送、及びカードコントローラ５と第１〜第６の様式のカードＣ１〜Ｃ６との間のデータ転送等は、このクロック信号に同期して実行される。
【００５９】
ＣＭＤ線は、カードコントローラ５から第１〜第６の様式のカードＣ１〜Ｃ６へのコマンドの転送、及び第１〜第６の様式のカードＣ１〜Ｃ６からカードコントローラ５へのレスポンスの転送に使用される１ビット幅の信号線である。
ＤＡＴ線は、カードコントローラ５と第１〜第６の様式のカードＣ１〜Ｃ６のＤＡＴ端子との間のデータ転送に使用される双方向信号線である。なお、カードのＤＡＴ端子の数（ビット幅）は、第１〜第４の様式のカードＣ１〜Ｃ４の場合、１、４、又は、８個であり、第５〜第６の様式のカードＣ５〜Ｃ６の場合、１又は４個である。
【００６０】
なお、電子機器１が、入力装置、表示装置（ＬＣＤ、有機ＥＬディスプレイ等）、ＤＭＡコントローラ等を更に含んでいても良い。
【００６１】
図３は、カードコントローラ５の内部構成を示すブロック図である。図３に示すように、カードコントローラ５は、ＳＤＭＭＣホストコントローラ（広義には、ホストコントローラ）１０と、ＳＤＭＭＣホストコントローラ１０とメインＣＰＵ２（図２参照）との間の信号の送受信を行うＣＰＵインタフェース１１と、ＳＤＭＭＣホストコントローラ１０とＲＡＭ４（図２参照）との間の信号の送受信を行うＤＭＡインタフェース１２と、ＳＤＭＭＣホストコントローラ１０とカードスロット６（図２参照）に装着されたカードとの間の信号の送受信を行うカードインタフェース１３とを含む。
【００６２】
ＳＤＭＭＣホストコントローラ１０は、クロック出力部２１と、レジスタ制御部２２と、ＳＤＭＭＣ制御部２３と、ＤＭＡ制御部２４とを含んでいる。なお、ＳＤＭＭＣホストコントローラ１０を半導体チップ上に集積して、半導体集積回路としても良い。
【００６３】
クロック出力部２１は、クロック信号ＳＤＣＬＫをカードインタフェース１３を介してカードスロット６に装着されたカードに供給する。カードに供給するクロック信号ＳＤＣＬＫは、例えば、発振回路（図示せず）によって発生され或いは外部から供給されるシステムクロック信号をそのまま或いは分周して取得することができる。なお、クロック出力部２１のクロック信号ＳＤＣＬＫのカードへの出力の供給開始及び供給停止を、メインＣＰＵ２やＳＤＭＭＣ制御部２３等から制御可能としても良い。
【００６４】
レジスタ制御部２２は、メインＣＰＵ２から書き込み及び／又は読み出し可能な複数のレジスタを有しており、これらのレジスタの制御を行う。メインＣＰＵ２は、これらのレジスタにＣＰＵインタフェース１１を介して情報を書き込むことにより、カードへのコマンド発行をＳＤＭＭＣコントローラ１０に行わせることができる。また、メインＣＰＵ２は、これらのレジスタからＣＰＵインタフェース１１を介して情報を読み出すことにより、発行したコマンドに対するカードからのレスポンスを取得することができる。なお、レジスタ制御部２２内のレジスタは、ＳＤＭＭＣホストコントローラ１０内の他の回路ブロックから書き込み及び／又は読み出し可能としても良い。
【００６５】
図４は、レジスタ制御部２２内のレジスタマップの一例を示す図である。図４に示す複数のレジスタの内のレジスタ２２ａ〜２２ｉは、メインＣＰＵ２によって書き込まれ、ＳＤＭＭＣホストコントローラ１０内の回路によって読み出されるレジスタであり、レジスタ２２ｌ〜２２ｏは、ＳＤＭＭＣホストコントローラ１０内の回路によって書き込まれ、メインＣＰＵ２によって読み出されるレジスタである。
【００６６】
レジスタ２２ａは、発行するコマンドのコマンドインデックス（広義には、コマンド特定情報又は指示情報）を書き込むためのレジスタであり、レジスタ２２ｂは、発行するコマンドのアーギュメント（広義には、指示情報）を書き込むためのレジスタである。
【００６７】
レジスタ２２ｃは、発行するコマンドのタイプ（Ｎｏｒｍａｌ、Ｓｕｓｐｅｎｄ、Ｒｅｓｕｍｅ、Ａｂｏｒｔ等）（広義には、指示情報）を書き込むためのレジスタであり、レジスタ２２ｄは、発行するコマンドに対するレスポンスのタイプ（レスポンス無し、１３６ビットレスポンス（前述した「Ｒ２」タイプに相当）、４８ビットレスポンス（前述した「Ｒ１」、「Ｒ３」等のタイプに相当）、ＲｅｓｐＢｕｓｙ（前述した「Ｒ１ｂ」等のタイプに相当）等）（広義には、指示情報）を書き込むためのレジスタである。
【００６８】
レジスタ２２ｅ〜２２ｈは、発行するコマンドがデータ転送を伴うコマンドである場合に用いられるレジスタである。レジスタ２２ｅは、データ転送タイプ（Ｓｉｎｇｌｅ、Ｉｎｆｉｎｉｔｅ、Ｍｕｌｔｉｐｌｅ、Ｓｔｒｅａｍ等）（広義には、指示情報）を書き込むためのレジスタであり、レジスタ２２ｆは、データ転送のためにＤＡＴ線を使用することを表すフラグ（以下、「ＤＡＴ線使用フラグ」という）（広義には、指示情報）を書き込むためのレジスタであり、レジスタ２２ｇは、転送ブロックサイズ（広義には、指示情報）を書き込むためのレジスタであり、レジスタ２２ｈは、転送ブロック数（広義には、指示情報）を書き込むためのレジスタである。
【００６９】
レジスタ２２ｉは、カードステータスエラー以外のエラー（インデックスエラー、エンドビットエラー、ＣＲＣエラー、タイムアウトエラー等。以下、「伝送エラー」という。）のいずれか又は全部のチェックを行うか否かを指定するデータ（広義には、指示情報）を書き込むためのレジスタである。
【００７０】
レジスタ２２ｌは、コマンドが完了したことを表すフラグ（以下、「コマンド完了フラグ」という）を書き込むためのレジスタである。
【００７１】
レジスタ２２ｍは、レスポンスのカードステータス（広義には、応答内容情報）を書き込むためのレジスタである。なお、先に説明したように、レスポンスのカードステータス長は、レスポンスのタイプ即ちコマンドによって異なる。例えば、レスポンスのタイプが「Ｒ１」（４８ビット）の場合、レスポンスのカードステータスは３２ビットであり、レスポンスのタイプが「Ｒ２」（１３６ビット）の場合、レスポンスのカードステータスは１２０ビットである。そこで、例えば、レジスタ２２ｍを長め（例えば、１２８ビット程度）に確保しておき、その中の所定位置にレスポンスのカードステータスを書き込むようにしても良い。
【００７２】
レジスタ２２ｎは、伝送エラーのチェックを行うことを指定するデータがレジスタ２２ｉに書き込まれている場合に、指定されたエラーのチェックの結果を表すデータを書き込むためのレジスタである。なお、伝送エラーのチェックの結果を表すデータは、伝送エラーの種類に応じた位置のビットがセットされるようにしても良いし、伝送エラーの種類がコード化されるようにしても良い。メインＣＰＵ２は、伝送エラーのチェックを行うことを指定した場合に、このレジスタ２２ｎを読み出すことで、伝送エラーの発生の有無を取得することができる。
【００７３】
レジスタ２２ｏは、ＣＭＤ線を使用中であるか否かを表すフラグ（以下、「ＣＭＤ線使用中フラグ」という）を書き込むためのレジスタである。ＣＭＤ線使用中フラグは、ＳＤＭＭＣホストコントローラ１０がコマンドの発行を開始するとセットされ、ＳＤＭＭＣホストコントローラ１０がレスポンスの受信を完了するとクリアされる。メインＣＰＵ２は、このレジスタ２２ｏを読み出すことで、コマンドの実行中か否か、すなわち、次のコマンドの発行を指示することが可能か否かを判断することができる。
【００７４】
なお、図４に示すレジスタマップは一例であり、種々の変形実施も可能である。例えば、全レジスタのビット幅を３２ビット長とし、３２ビットに満たないビット長を有する複数のデータを結合して１つのレジスタに格納するようにしても良い。また、例えば、クロック信号ＳＤＣＬＫの出力又は停止をクロック出力部２１に行わせるためのフラグを格納するためのレジスタを設けて、メインＣＰＵ２がクロック信号ＳＤＣＬＫの出力又は停止をクロック出力部２１に行わせるようにしても良い。また、例えば、カードステータスエラー、伝送エラーが発生した場合に、割り込み信号をメインＣＰＵ２に出力するか否かを指示するためのデータを格納するためのレジスタを設けて、カードステータスエラー、伝送エラーが発生した場合に割り込み信号がメインＣＰＵ２に出力されるようにしても良い。
【００７５】
再び図３を参照すると、ＳＤＭＭＣ制御部２３は、コマンド・レスポンス送受信部２３ａと、データ送受信部２３ｂとを含む。
コマンド・レスポンス送受信部２３ａは、メインＣＰＵ２によってレジスタ２２ａ〜２２ｉに書き込まれた情報に基づいてコマンドをカードに発行し、当該コマンドに対するレスポンスをカードから受け取って、レスポンスに基づく情報をレジスタ２２ｌ〜２２ｏに書き込む。
【００７６】
なお、本実施形態においては、コマンド・レスポンス送受信部２３ａは、コマンドを発行する信号線ＣＭＤ＿ｏｕｔとレスポンスを受信する信号線ＣＭＤ＿ｉｎとを別個に有している。そして、カードインタフェース１３は、コマンド発行時には、コマンド・レスポンス送受信部２３ａによって信号線ＣＭＤ＿ｏｕｔ上に供給されるコマンドをカードとの間のＣＭＤ線に出力し、レスポンス受信時には、カードとの間のＣＭＤ線上に供給されるレスポンスを信号線ＣＭＤ＿ｉｎに出力する。
【００７７】
データ送受信部２３ｂは、レジスタ２２ａに書き込まれたインデックスで表されるコマンドがデータ転送を伴うコマンドである場合に動作を行い、レジスタ２２ａに書き込まれたインデックスで表されるコマンドがデータ転送を伴わないコマンドである場合には動作を行わない。
【００７８】
レジスタ２２ａに書き込まれたインデックスで特定されるコマンドがカードへのデータ書き込みを伴うコマンドである場合には、コマンド・レスポンス送受信部２３ａが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスの受信完了後に、カードへのデータ書き込みの開始をデータ送受信部２３ｂに指示する。また、レジスタ２２ａに書き込まれたインデックスで特定されるコマンドがカードからのデータ読み出しを伴うコマンドである場合には、コマンド・レスポンス送受信部２３ａが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスを受信するとともに、カードからのデータ読み出しの開始をデータ送受信部２３ｂに指示する。
【００７９】
ＤＭＡ制御部２４は、レジスタ２２ａに書き込まれたコマンドインデックスで特定されるコマンドがデータ転送を伴うコマンドである場合に動作を行い、レジスタ２２ａに書き込まれたコマンドインデックスで特定されるコマンドがデータ転送を伴わないコマンドである場合には動作を行わない。
【００８０】
メインＣＰＵ２は、カードへのデータ書き込みを伴うコマンドの実行を指示する場合には、まず、カードに書き込むためのデータをＲＡＭ４（図２参照）のＤＭＡ転送領域内に書き込み、その後、レジスタ２２ａ〜２２ｈに当該コマンドのインデックス等を書き込む。これを受けて、ＳＤＭＭＣホストコントローラ１０のＳＤＭＭＣ制御部２３内のコマンド・レスポンス送受信部２３ａが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスの受信完了後に、カードへのデータ書き込みの開始をデータ送受信部２３ｂに指示する。データ送受信部２３ｂは、コマンド・レスポンス送受信部２３ａからの指示を受けると、ＤＭＡ制御部２４にＲＡＭ４のＤＭＡ転送領域内のデータのＤＭＡ転送を指示する。ＤＭＡ制御部２４は、ＦＩＦＯバッファ２４ａを有しており、データ送受信部２３ｂからの指示を受けると、ＲＡＭ４のＤＭＡ転送領域内のデータをＦＩＦＯバッファ２４ａに順次ＤＭＡ転送する。そして、データ送受信部２３ｂが、ＦＩＦＯバッファ２４ａ内のデータを順次読み出し、カードインタフェース１３を介してカードに順次書き込む。
【００８１】
一方、メインＣＰＵ２は、カードからのデータ読み出しを伴うコマンドの実行を指示する場合には、レジスタ２２ａ〜２２ｈに当該コマンドのインデックス等を書き込む。これを受けて、ＳＤＭＭＣホストコントローラ１０のＳＤＭＭＣ制御部２３内のコマンド・レスポンス送受信部２３ａが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスを受信するとともに、カードからのデータ読み出しの開始をデータ送受信部２３ｂに指示する。データ送受信部２３ｂは、コマンド・レスポンス送受信部２３ａからの指示を受けると、カードインタフェース１３を介してカードからデータを順次読み出してＦＩＦＯバッファ２４ａに順次書き込むとともに、ＤＭＡ制御部２４にＦＩＦＯバッファ２４ａ内のデータのＤＭＡ転送を指示する。ＤＭＡ制御部２４は、データ送受信部２３ｂからの指示を受けると、ＦＩＦＯバッファ２４ａ内のデータをＲＡＭ４のＤＭＡ転送領域に順次ＤＭＡ転送する。
【００８２】
なお、本実施形態においては、データ送受信部２３ｂは、カードに書き込むデータを出力する８ビット幅の信号線ＤＡＴ＿ｏｕｔ［７：０］とカードからデータを読み出す信号線ＤＡＴ＿ｉｎ［７：０］とを別個に有している。そして、カードインタフェース１３は、カードへのデータ書き込み時には、データ送受信部２３ｂによって信号線ＤＡＴ＿ｏｕｔ［７：０］上に供給されるデータをカードとの間のＤＡＴ線（１、４、又は、８ビット幅）に出力し、カードからのデータ読み出し時には、カードとの間のＤＡＴ線上に供給されるデータを信号線ＤＡＴ＿ｉｎ［７：０］に出力する。なお、カードのＤＡＴ端子のビット幅が８ビット幅ではない場合には、カードインタフェース１３が、データのビット幅を適宜変換する。
【００８３】
次に、ＲＡＭ４（図２参照）のテーブル記憶領域内のレスポンスチェックビットテーブル及びルックアップテーブルについて説明する。
図５は、レスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ［ｋ］（０≦ｋ≦４９）を示す図であり、図６〜図７は、ルックアップテーブルＬｏｏｋｕｐ［ｍ］［ｎ］（０≦ｍ≦６、０≦ｎ≦６３）を示す図である。
【００８４】
先に説明したように、レスポンスのカードステータス内のエラービットの位置は、全てのコマンドで同一ではない。しかしながら、本発明者は、以下の事柄を見出した。
【００８５】
第１に、本発明者は、コマンドを実行したときにカード内においてエラーが発生する場合はエラーが発生じない場合よりも少なく、従って、どのようなエラーが発生したかを判定するよりも、まず、何らかのエラーが発生したのか否かを判定することが、処理速度の点で好適であることを見出した。そして、必要であれば、何らかのエラーが発生したと判定した後に、どのようなエラーが発生したかを判定することが、処理速度の点で好適であることを見出した。
【００８６】
第２に、本発明者は、レスポンスのカードステータス内のエラービットの位置は全てのコマンドで同一ではないものの、レスポンスのカードステータス内のエラービットの位置が共通するコマンドが存在することを見出した。
【００８７】
例えば、第６の様式のカードＣ６におけるコマンド「ＣＭＤ７」（コマンドインデックス「７」（０ｘ０７））に対するレスポンスのカードステータス内のエラービットの位置は、カードステータスのＭＳＢ（Most Significant Bit）を第３１ビットとし、ＬＳＢ（Least Significant Bit）を第０ビットとすると、第２７ビット、第２６ビット、及び、第２４〜第１６ビットの計１１ビットである。すなわち、第６の様式のカードＣ６において、コマンド「ＣＭＤ７」を実行したときにカード内において何らかのエラーが発生したのか否かは、上記１１ビットの１つ以上が「１」にセットされているか否かによって判定できる。そして、第６の様式のカードＣ６におけるコマンド「ＣＭＤ７」に対するカードステータス内の第２７ビット、第２６ビット、及び、第２４〜第１６ビットの１つ以上が「１」にセットされているか否かは、後述するように、第６の様式のカードＣ６におけるコマンド「ＣＭＤ７」に対するカードステータス（３２ビット）とチェックパターン（ビットパターン）「０ｘ０ＤＦＦ００００」（３２ビット）との論理積（ＡＮＤ）演算処理（広義には、演算処理）を行い、その結果が「０」（０ｘ００００）であるか否かによって容易且つ迅速に判定可能である。
【００８８】
また、第６の様式のカードＣ６におけるコマンド「ＣＭＤ２６」（コマンドインデックス「２６」（０ｘ１Ａ））に対するレスポンスのカードステータス内のエラービットも、上記した第６の様式のカードＣ６におけるコマンド「ＣＭＤ７」に対するレスポンスのカードステータス内のエラービットの位置と共通する。すなわち、第６の様式のカードＣ６において、コマンド「ＣＭＤ２６」を実行したときにカード内において何らかのエラーが発生したのか否かは、第６の様式のカードＣ６におけるコマンド「ＣＭＤ２６」に対するカードステータス（３２ビット）とチェックパターン「０ｘ０ＤＦＦ００００」（上記第６の様式のカードＣ６におけるコマンド「ＣＭＤ７」に対するレスポンスのカードステータスのチェックパターンと同一）との論理積（ＡＮＤ）演算処理を行い、その結果が「０」（０ｘ００００）であるか否かによって容易且つ迅速に判定可能である。
【００８９】
また、第５の様式のカードＣ５におけるコマンド「ＣＭＤ７」（コマンドインデックス「７」（０ｘ０７））に対するレスポンスのカードステータス内のエラービットも、上記した第６の様式のカードＣ６におけるコマンド「ＣＭＤ７」に対するレスポンスのカードステータス内のエラービットの位置と共通する。すなわち、第５の様式のカードＣ５において、コマンド「ＣＭＤ７」を実行したときにカード内において何らかのエラーが発生したのか否かは、第５の様式のカードＣ５におけるコマンド「ＣＭＤ７」に対するカードステータス（３２ビット）とチェックパターン「０ｘ０ＤＦＦ００００」（上記第６の様式のカードＣ６におけるコマンド「ＣＭＤ７」に対するレスポンスのカードステータスのチェックパターンと同一）との論理積（ＡＮＤ）演算処理を行い、その結果が「０」（０ｘ００００）であるか否かによって容易且つ迅速に判定可能である。
【００９０】
また、第６の様式のカードＣ６においては、コマンド「ＣＭＤ５５」（コマンドインデックス「５５」（０ｘ３７））に引き続いて発行される複数の拡張コマンド「ＡＣＭＤ」が規定されている。そして、そのような複数の拡張コマンドの内の１つである拡張コマンド「ＡＣＭＤ１３」（コマンドインデックス「１３」（０ｘ０Ｄ））に対するレスポンスのカードステータス内のエラービットも、上記した第６の様式のカードＣ６におけるコマンド「ＣＭＤ７」（コマンドインデックス「７」（０ｘ０７））に対するレスポンスのカードステータス内のエラービットの位置と共通する。すなわち、第６の様式のカードＣ６において、拡張コマンド「ＡＣＭＤ１３」を実行したときにカード内において何らかのエラーが発生したのか否かは、第６の様式のカードＣ６における拡張コマンド「ＡＣＭＤ１３」に対するカードステータス（３２ビット）とチェックパターン「０ｘ０ＤＦＦ００００」（上記第６の様式のカードＣ６におけるコマンド「ＣＭＤ７」に対するレスポンスのカードステータスのチェックパターンと同一）との論理積（ＡＮＤ）演算処理を行い、その結果が「０」（０ｘ００００）であるか否かによって容易且つ迅速に判定可能である。
【００９１】
そして、本発明者は、第１〜第６の様式のカードＣ１〜Ｃ６における全コマンドのレスポンスのカードステータス内のエラービットの位置を調べたところ、図５に示す５０個のチェックパターンを用意すれば、何れの様式のカードにおいて何れのコマンドを実行した場合であっても、何らかのエラーが発生したのか否かを、レスポンスのカードステータスとチェックパターンとの論理積演算処理を行うことにより、容易且つ迅速に判定可能であることを見出した。
【００９２】
そこで、本実施形態では、ＲＡＭ４（図２参照）のテーブル記憶領域内に、図５に示す５０通りのチェックパターン（広義には、エラー判定情報）を含むレスポンスチェックビットテーブル（広義には、エラー判定情報テーブル）を配することで、何れかの様式のカードにおいて何れかのコマンドを実行したときに当該カード内において何らかのエラーが発生したのか否かを容易且つ迅速に判定できるようにした。これにより、処理を簡素化でき、コード量を減らすことができ、プログラムの可読性を向上させることができ、処理速度を向上させることができる。
【００９３】
また、本実施形態では、或る様式のカードにおいて或るコマンドを実行させた場合に図５に示すレスポンスチェックビットテーブル内の５０個のチェックパターンの内の何れのチェックパターンを用いれば良いかということを迅速に決定可能とするために、ＲＡＭ４（図２参照）のテーブル記憶領域内に、図６〜図７に示すルックアップテーブル（広義には、エラー判定情報特定情報テーブル）を更に配することとした。これにより、処理速度を更に向上させることができる。
【００９４】
例えば、先に挙げたカードの様式が第６の様式であり且つカードに発行したコマンドがコマンド「ＣＭＤ７」である例の場合には、メインＣＰＵ２（図２参照）は、ＲＡＭ４（図２参照）のテーブル記憶領域内のルックアップテーブルの第６番目の列（列方向の要素番号「０ｄ５」）且つ第８番目の行（行方向の要素番号「０ｄ０７」）を参照することで、ルックアップ値（広義には、エラー判定情報特定情報）「０ｄ４１」を取得することができる。そして、メインＣＰＵ２は、ルックアップ値が「０ｄ４１」であるので、レスポンスチェックビットテーブルの第４２番目の行（行方向の要素番号「０ｄ４１」）を参照することで、チェックパターン「０ｘ０ＤＦＦ００００」を迅速に取得することができる。
【００９５】
また、先に挙げたカードの様式が第６の様式であり且つカードに発行したコマンドがコマンド「ＣＭＤ２６」である例の場合には、メインＣＰＵ２は、ＲＡＭ４のテーブル記憶領域内のルックアップテーブルの第６番目の列（列方向の要素番号「０ｄ５」）且つ第２７番目の行（行方向の要素番号「０ｄ２６」）を参照することで、ルックアップ値「０ｄ４１」を取得することができる。そして、メインＣＰＵ２は、ルックアップ値が「０ｄ４１」であるので、ＲＡＭ４のテーブル記憶領域内のレスポンスチェックビットテーブルの第４２番目の行（行方向の要素番号「０ｄ４１」）を参照することで、チェックパターン「０ｘ０ＤＦＦ００００」を迅速に取得することができる。
【００９６】
また、先に挙げたカードの様式が第５の様式であり且つカードに発行したコマンドがコマンド「ＣＭＤ７」である例の場合には、メインＣＰＵ２は、ＲＡＭ４のテーブル記憶領域内のルックアップテーブルの第５番目の列（列方向の要素番号「０ｄ４」）且つ第８番目の行（行方向の要素番号「０ｄ０７」）を参照することで、ルックアップ値「０ｄ４１」を取得することができる。そして、メインＣＰＵ２は、ルックアップ値が「０ｄ４１」であるので、ＲＡＭ４のテーブル記憶領域内のレスポンスチェックビットテーブルの第４２番目の行（行方向の要素番号「０ｄ４１」）を参照することで、チェックパターン「０ｘ０ＤＦＦ００００」を迅速に取得することができる。
【００９７】
また、先に挙げたカードの様式が第６の様式であり且つカードに発行したコマンドが拡張コマンド「ＡＣＭＤ１３」である例の場合には、メインＣＰＵ２は、ＲＡＭ４のテーブル記憶領域内のルックアップテーブルの第７番目の列（列方向の要素番号「０ｄ６」）且つ第１４番目の行（行方向の要素番号「０ｄ１３」）を参照することで、ルックアップ値「０ｄ４１」を取得することができる。そして、メインＣＰＵ２は、ルックアップ値が「０ｄ４１」であるので、ＲＡＭ４のテーブル記憶領域内のレスポンスチェックビットテーブルの第４２番目の行（行方向の要素番号「０ｄ４１」）を参照することで、チェックパターン「０ｘ０ＤＦＦ００００」を迅速に取得することができる。
【００９８】
レスポンスチェックビットテーブルの各テーブル要素（チェックパターン）は、カードステータスが３２ビットであるため、３２ビットとすると好適である。ルックアップテーブルの各テーブル要素（ルックアップ値）は、レスポンスチェックビットテーブルのテーブル要素数が「５０」であるため、最低６ビットで実現可能であるが、データとしての扱いやすさを考慮すると、１バイト（８ビット）とすると好適である。
【００９９】
なお、レスポンスチェックビットテーブル及びルックアップテーブルの一方又は両方をＲＯＭ３（フラッシュメモリ等の書き換え可能なＲＯＭであっても良い）内に作成しても良い。また、レスポンスチェックビットテーブル及びルックアップテーブルの一方又は両方をＲＯＭ３内に作成しておき、初期時等において、メインＣＰＵ２やＤＭＡコントローラ（図示せず）等がＲＡＭ４内に転送するようにしても良い。
【０１００】
また、通信回路７を用いて、レスポンスチェックビットテーブル及び／又はルックアップテーブルを参照したり、これらのテーブルの一部又は全部を適宜更新するようにしても良い。このようにすれば、カードやデバイスの様式（例えば、ＳＤＩＯデバイス、ＣＥ−ＡＴＡデバイス等）の追加・変更や、コマンドの追加・変更や、これらのテーブルのデバッグ等に柔軟に対応可能となる。なお、様式やコマンドの追加の場合には、テーブルの要素数を増やすことで対応可能である。
【０１０１】
例えば、第６の様式のカードＣ６において、現在はリザーブとされているコマンド「ＣＭＤ１」（コマンドインデックス「１」（０ｘ０１））の処理内容が仕様上新たに規定された場合に、当該コマンドを実行したときに第６の様式のカードＣ６内において何らかのエラーが発生したのか否かを判定するためのチェックパターンが図５に示すレスポンスチェックビットテーブル内の５０通りのチェックパターンの何れとも合致しないときには、当該コマンドを実行したときに第６の様式のカードＣ６内において何らかのエラーが発生したのか否かを判定するための新たなチェックパターンをレスポンスチェックビットテーブルに第５１番目のテーブル要素として追加すれば良い。そして、このようなテーブル要素の追加を通信回路７を介して行うことにより、カードの仕様のバージョンアップ等に柔軟に対応可能となる。
【０１０２】
カードやデバイスの様式（例えば、ＳＤＩＯデバイス、ＣＥ−ＡＴＡデバイス等）を追加する場合には、ルックアップテーブルの列を増やすとともに、必要であればレスポンスチェックビットテーブルに新たなテーブル要素を追加すれば良い。
【０１０３】
通信回路７をインターネットに接続することとすれば、テーブルの更新をインターネットを経由して行うことが可能となる。
また、通信回路７をデバッガに接続することとすれば、これらのテーブルのデバッグを容易に行うことが可能となる。
【０１０４】
３．  動作
次に、本実施形態の動作について説明する。
図８は、コマンドをカードに発行する場合における本実施形態の動作を示すフローチャートである。ここでは、第６の様式のカードＣ６がカードスロット６に装着されており、カードＣ６にコマンド「ＣＭＤ７」（コマンドインデックス「７」（０ｘ０７））を発行するものとする。
【０１０５】
まず、メインＣＰＵ２が、ＲＯＭ３内のドライバプログラムを実行し、コマンドインデックス（ここでは、「７」（０ｘ０７））、アーギュメント、コマンドタイプ、レスポンスタイプ、データ転送タイプ、ＤＡＴ線使用フラグ、転送ブロックサイズ、転送ブロック数、及び、レスポンスチェックをレジスタ２２ａ〜２２ｉに書き込むことにより、コマンドの発行をＳＤＭＭＣホストコントローラ１０に指示する（ステップＳ１１）。
【０１０６】
なお、メインＣＰＵ２は、発行しようとするコマンドがカードＣ６へのデータ書込みを伴うコマンドである場合には、コマンド発行の指示に先立って、カードＣ６へ書き込むデータをＲＡＭ４のＤＭＡ転送領域内に準備する。
【０１０７】
ＳＤＭＭＣ制御部２３内のコマンド・レスポンス送受信部２３ａは、レジスタ制御部２２からの信号及びデータに従って、カードＣ６にコマンドを発行する（ステップＳ２１）。具体的には、コマンド・レスポンス送受信部２３ａは、スタートビットを「０」、転送方向ビットを「１」とする。次に、コマンド・レスポンス送受信部２３ａは、これらのスタートビット及び転送方向ビット、レジスタ２２ａ内に格納されているコマンドインデックス（６ビット、ここでは、「７」（０ｘ０７））、並びに、レジスタ２２ｂ内に格納されているアーギュメント（３２ビット）の計４０ビットに基づいて、ＣＲＣ（７ビット）を算出する。そして、コマンド・レスポンス送受信部２３ａは、スタートビット（ここでは、「０」）、転送方向ビット（ここでは、「１」）、コマンドインデックス（６ビット）、アーギュメント（３２ビット）、ＣＲＣ（７ビット）、及び、エンドビット（ここでは、「１」）を結合した計４８ビットのコマンドを、カードインタフェース１３を介してカードＣ６に送信する。
【０１０８】
カードＣ６は、受信したコマンド（ここでは、コマンド「ＣＭＤ７」）を実行して、レスポンス（ここでは、タイプ「Ｒ１」（４８ビット））をコマンド・レスポンス送受信部２３ａに送信する（ステップＳ３１）。
【０１０９】
コマンド・レスポンス送受信部２３ａは、レスポンス（ここでは、タイプ「Ｒ１」（４８ビット））をカードインタフェース１３を介してカードＣ６から受信すると、受信したレスポンスのカードステータス（ここでは、３２ビット）をレジスタ２２ｍに書き込むとともに、コマンド完了フラグをレジスタ２２ｌにセットして、コマンドの完了をメインＣＰＵ２に通知する（ステップＳ２２）。このとき、レジスタ制御部２２が、コマンドの完了を通知するための割込み信号をメインＣＰＵ２に出力するようにしても良い。また、このとき、コマンド・レスポンス送受信部２３ａは、伝送エラーが発生していた場合に、伝送エラーのエラー情報をレジスタ２２ｎに書き込む。
【０１１０】
なお、コマンド・レスポンス送受信部２３ａは、カードＣ６に発行したコマンドがカードＣ６へのデータ書込みを伴うコマンドである場合には、カードＣ６からレスポンスを受信したときに、カードＣ６へのデータ書込みの開始をデータ送受信部２３ｂに指示する。また、コマンド・レスポンス送受信部２３ａは、カードＣ６に発行した通常コマンドがカードＣ６からのデータ読出しを伴うコマンドである場合には、カードＣ６からレスポンスを受信したときに、カードＣ６からのデータ読出しの開始をデータ送受信部２３ｂに指示する。
【０１１１】
一方、メインＣＰＵ２は、ステップＳ１１においてコマンドの発行をＳＤＭＭＣホストコントローラ１０に指示した後に、カードの様式（ここでは、第６の様式）及びコマンドインデックス（ここでは、「７」（０ｘ０７））に基づいて、チェックパターンを取得する（ステップＳ１２）。具体的には、メインＣＰＵ２は、ルックアップテーブルの第６番目の列（列方向の要素番号「０ｄ５」）且つ第８番目の行（行方向の要素番号「０ｄ０７」）を参照し、ルックアップ値「０ｄ４１」を取得することができる。そして、ルックアップ値が「０ｄ４１」であるので、レスポンスチェックビットテーブルの第４２番目の行（行方向の要素番号「０ｄ４１」）を参照し、チェックパターン「０ｘ０ＤＦＦ００００」を取得することができる。
【０１１２】
なお、上記のようなチェックパターンの取得処理は、Ｃ言語においては、例えば、
ＣｈｅｃｋＢｉｔ［Ｌｏｏｋｕｐ［ＣＭＤｉｎｄｅｘ］［ｖｅｒ］］
のように少ないコードで簡単に記述することができる。
【０１１３】
ここで、「ＣｈｅｃｋＢｉｔ」は、レスポンスチェックビットテーブル（図５参照）のテーブル名であり、「Ｌｏｏｋｕｐ」は、ルックアップテーブル（図６〜図７参照）のテーブル名であり、「ｖｅｒ」は、カードの様式を表す列方向の要素番号（広義には、様式特定情報、ここでは、「０ｄ５」）を表す変数であり、「ＣＭＤｉｎｄｅｘ」は、コマンドインデックスと同値の行方向の要素番号（ここでは、「０ｘ０７」）を表す変数である。なお、変数「ｖｅｒ」が０〜５となる場合、カードの様式に応じて、初期時に変数「ｖｅｒ」の値を決定可能である。変数「ｖｅｒ」が６となる場合、カードスロット６に装着されているカードが第６の様式のカードＣ６であり且つ第６の様式のカードＣ６に発行しようとしているコマンドが「ＡＣＭＤ」（拡張コマンド）であることが判明したときに変数「ｖｅｒ」の値を決定可能である。
【０１１４】
そして、メインＣＰＵ２は、ＳＤＭＭＣホストコントローラ１０からコマンドの完了の通知を受けると、レジスタ制御部２２のレジスタ２２ｍ内に格納されているカードステータスを読み出し、カードステータスとステップＳ１２にて取得したチェックパターン（ここでは、「０ｘ０ＤＦＦ００００」）との論理積（ＡＮＤ）演算処理（広義には、演算処理）を行う（ステップＳ１３）。
【０１１５】
先に説明したように、コマンド「ＣＭＤ７」を実行したカードＣ６内において何らのエラーも発生していない場合には、カードステータスとチェックパターン（ここでは、「０ｘ０ＤＦＦ００００」）との論理積演算の結果は「０」（０ｘ００００００００）となる。一方、コマンド「ＣＭＤ７」を実行したカードＣ６内において何らかのエラーが発生している場合には、カードステータスとチェックパターンとの論理積演算の結果は「０」以外となる。
【０１１６】
そこで、メインＣＰＵ２は、カードステータスとチェックパターン（ここでは、「０ｘ０ＤＦＦ００００」）との論理積演算の結果が「０」である場合には、処理を終了する（ステップＳ１４）。
【０１１７】
一方、メインＣＰＵ２は、カードステータスとチェックパターンとの論理積演算の結果が「０」以外である場合（ステップＳ１４）には、エラー処理を実行する（ステップＳ１５）。エラー処理としては、例えば、コマンド「ＣＭＤ７」を実行したカードＣ６内においてどのようなエラーが発生したのかというエラーの内容を特定する処理を含むことが考えられる。これは、カードステータスの第２７ビット、第２６ビット、及び、第２４〜第１６ビットの計１１ビットを順次調べることで実現可能である。
【０１１８】
なお、ステップＳ１４のような条件分岐処理は、アセンブラ言語においては、例えば、
ＡＮＤ    ｒ１，ｒ２
ＢＮＺ    ＄ｅｒｒｏｒ＿ｒｏｕｔｉｎｅ
のように少ないコードで簡単に記述することができる。
【０１１９】
ここで、「ＡＮＤ」は、ＣＰＵにおいて広く一般に実装されている論理積演算処理命令であり、「ｒ１」は、レジスタ制御部２２（図３参照）内のレジスタ２２ｍ（図４参照）から読み出したカードステータスを格納したメインＣＰＵ２の内部レジスタであり、「ｒ２」は、ステップＳ１２にて取得したチェックパターンを格納したメインＣＰＵ２の内部レジスタである。また、「ＢＮＺ」は、ＣＰＵにおいて広く一般に実装されている条件分岐命令であり、ＣＰＵ内部のゼロフラグ（一般に、直前の命令（ここでは、「ＡＮＤ」）の結果によりセット又はクリアされる）がセットされていない場合に分岐する命令である。また、「＄ｅｒｒｏｒ＿ｒｏｕｔｉｎｅ」は、エラー処理（ステップＳ１５）の先頭アドレスを示すラベルである。
【０１２０】
以上説明したように、本実施形態によれば、様式特定情報とコマンド特定情報との組み合わせに関連付けられたエラー判定情報を取得し、エラー判定情報及び応答内容情報に基づいて、応答におけるエラーの有無を容易に判定することができるようになる。これにより、処理を簡素化でき、コード量を減らすことができ、プログラムの可読性を向上させることができ、処理速度を向上させることができる。
【０１２１】
また、本実施形態によれば、応答内容情報内のエラーに関係する部分に対して処理を行うことで、エラーの有無を確実に判定することができる。
【０１２２】
また、本実施形態によれば、複数の種類、仕様、規格、及び／又は、バージョンのデバイスに関してもエラー判定を容易に行うことができ、幅広い用途に対応可能となる。
【０１２３】
また、本実施形態によれば、複数の様式特定情報と複数のコマンド特定情報との組み合わせに関連付けて、複数のエラー判定情報を特定するための複数のエラー判定情報特定情報を含むエラー判定情報特定情報テーブルを用いることで、様式特定情報とコマンド特定情報との組み合わせに関連付けられたエラー判定情報を迅速且つ容易に取得することができ、処理速度を向上させることができる。
【０１２４】
また、本実施形態によれば、まずエラーの有無を判定し、エラーが有った場合にエラーの内容を特定することができるので、エラーが無い場合に無駄な処理を行わずに済ませることができ、処理速度を向上させることができる。
【０１２５】
また、本実施形態によれば、簡易な演算処理でエラーの有無を判定することができ、コード量を減らすことができ、プログラムの可読性を向上させることができ、処理速度を向上させることができる。
【０１２６】
４．  第１変形例
次に、本実施形態の第１変形例について説明する。
カード内部のＣＳＤレジスタのＳＰＥＣ＿ＶＥＲＳフィールドの値に基づいて、ＭＭＣ（登録商標）を、（１）ＭＭＣ（登録商標）バージョン１．０〜１．２、（２）ＭＭＣ（登録商標）バージョン１．４、（３）ＭＭＣ（登録商標）バージョン２．０〜２．２、（４）ＭＭＣ（登録商標）バージョン３．０〜３．３１、（５）ＭＭＣ（登録商標）バージョン４．０〜４．２の５バージョンに分類することができる。そして、上記（１）〜（５）のカードの各々において、最大で６４種類のコマンドが発行され得る。
【０１２７】
また、カード内部のＣＳＤレジスタのＳＰＥＣ＿ＶＥＲＳフィールドの値に基づいて、ＳＤカード（登録商標）を、（６）ＳＤカード（登録商標）バージョン１．０１、（７）ＳＤカード（登録商標）バージョン１．１０、（８）ＳＤカード（登録商標）バージョン２．００の３バージョンに分類することができる。そして、上記（６）〜（８）のカードの各々において、最大で６４種類のコマンド「ＣＭＤ」が発行され得る。さらに、上記（６）〜（８）のカードの各々においては、拡張コマンド「ＡＣＭＤ」が発行され得る。
【０１２８】
そこで、先に説明した図５に示すレスポンスチェックビットテーブル及び図６〜図７に示すルックアップテーブルに代えて、図９〜図１７に示すレスポンスチェックビットテーブルがＲＡＭ４（図２参照）のテーブル記憶領域に記憶されるようにしても良い。
【０１２９】
図９は、カードスロット６に装着されているカードが上記（１）のカードである場合に用いられるレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１［ｋ］（０≦ｋ≦６３）を示す図である。このレスポンスチェックビットテーブルは、上記（１）のカードに発行され得る最大で６４種類のコマンド（「ＣＭＤ０」〜「ＣＭＤ６３」）に関連付けて６４個のチェックパターン（各４バイト）を格納している。メインＣＰＵ２（図２参照）は、カードスロット６に装着されているカードが上記（１）のカードである場合に、カードコントローラ５（図２参照）に発行を指示するコマンドのコマンドインデックスに基づいて、このレスポンスチェックビットテーブルの中からチェックパターンを読み出す。なお、このレスポンスチェックビットテーブルのサイズは、６４（コマンドの種類の数）×４（バイト）＝２５６（バイト）である。
【０１３０】
図１０は、カードスロット６に装着されているカードが上記（２）のカードである場合に用いられるレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ２［ｋ］（０≦ｋ≦６３）を示す図である。このレスポンスチェックビットテーブルは、上記（２）のカードに発行され得る最大で６４種類のコマンド（「ＣＭＤ０」〜「ＣＭＤ６３」）に関連付けて６４個のチェックパターン（各４バイト）を格納している。メインＣＰＵ２は、カードスロット６に装着されているカードが上記（２）のカードである場合に、カードコントローラ５に発行を指示するコマンドのコマンドインデックスに基づいて、このレスポンスチェックビットテーブルの中からチェックパターンを読み出す。なお、このレスポンスチェックビットテーブルのサイズは、６４（コマンドの種類の数）×４（バイト）＝２５６（バイト）である。
【０１３１】
図１１は、カードスロット６に装着されているカードが上記（３）のカードである場合に用いられるレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ３［ｋ］（０≦ｋ≦６３）を示す図である。このレスポンスチェックビットテーブルは、上記（３）のカードに発行され得る最大で６４種類のコマンド（「ＣＭＤ０」〜「ＣＭＤ６３」）に関連付けて６４個のチェックパターン（各４バイト）を格納している。メインＣＰＵ２は、カードスロット６に装着されているカードが上記（３）のカードである場合に、カードコントローラ５に発行を指示するコマンドのコマンドインデックスに基づいて、このレスポンスチェックビットテーブルの中からチェックパターンを読み出す。なお、このレスポンスチェックビットテーブルのサイズは、６４（コマンドの種類の数）×４（バイト）＝２５６（バイト）である。
【０１３２】
図１２は、カードスロット６に装着されているカードが上記（４）のカードである場合に用いられるレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ４［ｋ］（０≦ｋ≦６３）を示す図である。このレスポンスチェックビットテーブルは、上記（４）のカードに発行され得る最大で６４種類のコマンド（「ＣＭＤ０」〜「ＣＭＤ６３」）に関連付けて６４個のチェックパターン（各４バイト）を格納している。メインＣＰＵ２は、カードスロット６に装着されているカードが上記（４）のカードである場合に、カードコントローラ５に発行を指示するコマンドのコマンドインデックスに基づいて、このレスポンスチェックビットテーブルの中からチェックパターンを読み出す。なお、このレスポンスチェックビットテーブルのサイズは、６４（コマンドの種類の数）×４（バイト）＝２５６（バイト）である。
【０１３３】
図１３は、カードスロット６に装着されているカードが上記（５）のカードである場合に用いられるレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ５［ｋ］（０≦ｋ≦６３）を示す図である。このレスポンスチェックビットテーブルは、上記（５）のカードに発行され得る最大で６４種類のコマンド（「ＣＭＤ０」〜「ＣＭＤ６３」）に関連付けて６４個のチェックパターン（各４バイト）を格納している。メインＣＰＵ２は、カードスロット６に装着されているカードが上記（５）のカードである場合に、カードコントローラ５に発行を指示するコマンドのコマンドインデックスに基づいて、このレスポンスチェックビットテーブルの中からチェックパターンを読み出す。なお、このレスポンスチェックビットテーブルのサイズは、６４（コマンドの種類の数）×４（バイト）＝２５６（バイト）である。
【０１３４】
図１４は、カードスロット６に装着されているカードが上記（６）のカードである場合に用いられるレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ６［ｋ］（０≦ｋ≦６３）を示す図である。このレスポンスチェックビットテーブルは、上記（６）のカードに発行され得る最大で６４種類のコマンド（「ＣＭＤ０」〜「ＣＭＤ６３」）に関連付けて６４個のチェックパターン（各４バイト）を格納している。メインＣＰＵ２は、カードスロット６に装着されているカードが上記（６）のカードである場合に、カードコントローラ５に発行を指示するコマンドのコマンドインデックスに基づいて、このレスポンスチェックビットテーブルの中からチェックパターンを読み出す。なお、このレスポンスチェックビットテーブルのサイズは、６４（コマンドの種類の数）×４（バイト）＝２５６（バイト）である。
【０１３５】
図１５は、カードスロット６に装着されているカードが上記（７）のカードである場合に用いられるレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ７［ｋ］（０≦ｋ≦６３）を示す図である。このレスポンスチェックビットテーブルは、上記（７）のカードに発行され得る最大で６４種類のコマンド（「ＣＭＤ０」〜「ＣＭＤ６３」）に関連付けて６４個のチェックパターン（各４バイト）を格納している。メインＣＰＵ２は、カードスロット６に装着されているカードが上記（７）のカードである場合に、カードコントローラ５に発行を指示するコマンドのコマンドインデックスに基づいて、このレスポンスチェックビットテーブルの中からチェックパターンを読み出す。なお、このレスポンスチェックビットテーブルのサイズは、６４（コマンドの種類の数）×４（バイト）＝２５６（バイト）である。
【０１３６】
図１６は、カードスロット６に装着されているカードが上記（８）のカードである場合に用いられるレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ８［ｋ］（０≦ｋ≦６３）を示す図である。このレスポンスチェックビットテーブルは、上記（８）のカードに発行され得る最大で６４種類のコマンド（「ＣＭＤ０」〜「ＣＭＤ６３」）に関連付けて６４個のチェックパターン（各４バイト）を格納している。メインＣＰＵ２は、カードスロット６に装着されているカードが上記（８）のカードである場合に、カードコントローラ５に発行を指示するコマンドのコマンドインデックスに基づいて、このレスポンスチェックビットテーブルの中からチェックパターンを読み出す。なお、このレスポンスチェックビットテーブルのサイズは、６４（コマンドの種類の数）×４（バイト）＝２５６（バイト）である。
【０１３７】
図１７は、カードスロット６に装着されているカードが上記（６）〜（８）の内のいずれかのカードであり、これらのカードに拡張コマンド「ＡＣＭＤ」が発行される場合に用いられるレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ９［ｋ］（０≦ｋ≦１）を示す図である。なお、拡張コマンドの種類は最大６４種類まであり得るが、現時点においては、拡張コマンド「ＡＣＭＤ６」以外の拡張コマンドに対するレスポンスのカードステータス内のエラービットの位置は同じである。そのため、現時点においては、拡張コマンド「ＡＣＭＤ６」に対するレスポンスのカードステータスのチェックパターン（図１７に示すレスポンスチェックビットテーブルの第１レコード（４バイト））と、拡張コマンド「ＡＣＭＤ６」以外の拡張コマンドに対するレスポンスのカードステータスのチェックパターン（図１７に示すレスポンスチェックビットテーブルの第２レコード（４バイト））との２つのチェックパターンを用意すれば足りる。メインＣＰＵ２は、カードスロット６に装着されているカードが上記（８）のカードであり、カードコントローラ５に発行を指示する拡張コマンドのコマンドインデックスが「６」の場合には、このレスポンスチェックビットテーブルの第１レコードをチェックパターンとして読み出し、カードコントローラ５に発行を指示する拡張コマンドのコマンドインデックスが「６」以外の場合には、このレスポンスチェックビットテーブルの第２レコードをチェックパターンとして読み出す。このレスポンスチェックビットテーブルのサイズは、８バイトである。
【０１３８】
なお、図９〜図１７に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１〜ＣｈｅｃｋＢｉｔ９を１個のテーブルに纏めても良い。
【０１３９】
図９〜図１６に示す８個のレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１〜ＣｈｅｃｋＢｉｔ８のサイズの総和は、２５６（バイト）×８＝２０４８（バイト）である。また、図１７に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ９のサイズは、８（バイト）である。従って、図９〜図１７に示す９個のレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１〜ＣｈｅｃｋＢｉｔ９のサイズの総和は、２０４８（バイト）＋８（バイト）＝２０５６（バイト）である。
【０１４０】
一方、先に説明した図５に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔのサイズは、５０（行数）×４（バイト）＝２００（バイト）である。また、図６〜図７に示すルックアップテーブルＬｏｏｋｕｐのサイズは、６４（行数）×７（列数）×１（ルックアップ値１つ当たりのバイト数）＝４４８（バイト）となる。従って、図５に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔと図６〜図７に示すルックアップテーブルＬｏｏｋｕｐとのサイズの総和は、２００（バイト）＋４４８（バイト）＝６４８（バイト）となる。
【０１４１】
このように、図５に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ及び図６〜図７に示すルックアップテーブルＬｏｏｋｕｐのサイズの総和は、図９〜図１７に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１〜ＣｈｅｃｋＢｉｔ９のサイズの総和よりも小さい。そこで、ＲＡＭ４（図２参照）のテーブル記憶領域の容量を減らしたい場合には、図５に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ及び図６〜図７に示すルックアップテーブルＬｏｏｋｕｐを用いるようにすれば良い。
【０１４２】
一方、図５に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ及び図６〜図７に示すルックアップテーブルＬｏｏｋｕｐを用いる場合には、まずルックアップテーブルＬｏｏｋｕｐの中からルックアップ値を取得し、そのルックアップ値を用いてレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔの中からビットパターンを取得する必要がある。すなわち、テーブルを２回参照する必要がある。そこで、テーブルを参照する回数を減らし、ビットパターンを取得する時間及びコード量を減らしたい場合には、図５に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ及び図６〜図７に示すルックアップテーブルＬｏｏｋｕｐに代えて、図９〜図１７に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１〜ＣｈｅｃｋＢｉｔ９を用いるようにすれば良い。
【０１４３】
図５に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ及び図６〜図７に示すルックアップテーブルＬｏｏｋｕｐと、図９〜図１７に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１〜ＣｈｅｃｋＢｉｔ９とのいずれを用いるかは、電子機器１のハードウェア的又はソフトウェア的要求に応じて決定すれば良い。
【０１４４】
また、図５に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ、図６〜図７に示すルックアップテーブルＬｏｏｋｕｐ、及び、図９〜図１７に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１〜ＣｈｅｃｋＢｉｔ９をＲＯＭ３内に作成しておき、初期時等において、メインＣＰＵ２やＤＭＡコントローラ（図示せず）等が、図５に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ及び図６〜図７に示すルックアップテーブルＬｏｏｋｕｐか、図９〜図１７に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１〜ＣｈｅｃｋＢｉｔ９かのいずれかをＲＡＭ４内に転送するようにしても良い。また、通信回路７を用いて、レスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１〜ＣｈｅｃｋＢｉｔ９を参照したり、これらのテーブルの一部又は全部を適宜更新するようにしても良い。
【０１４５】
なお、本変形例の動作は、先に説明した本実施形態が様式特定情報とコマンドインデックスとに基づいてルックアップテーブルからルックアップ値を取得し、取得したルックアップ値を用いてレスポンスチェックビットテーブルからチェックパターンを取得していたのに対し、様式特定情報とコマンドインデックスとに基づいてレスポンスチェックビットテーブルからチェックパターンを取得する点で異なり、他の点は同じであるので、説明を省略する。
【０１４６】
以上説明したように、本変形例によれば、少ないテーブル参照回数、時間、及び、コード量で、レスポンスにおけるエラーの有無を判定することができる。
【０１４７】
５．  第２変形例
次に、本実施形態の第２変形例について説明する。
第１〜第６の様式のカードＣ１〜Ｃ６に対して或るコマンドを発行し、当該コマンドの実行によりカードＣ１〜Ｃ６内においてエラーが発生した場合に、当該エラーを表すエラービットが当該コマンドに対するレスポンス内のカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンス内のカードステータスにセットされる場合がある。そして、そのような場合が起こり得るビットは、カードの様式によって異なる。本変形例は、このような場合においても迅速にエラーの有無を判定することを可能とするものである。
【０１４８】
本変形例では、ＲＡＭ４（図２参照）のテーブル記憶領域内に、図５に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ及び図６〜図７に示すルックアップテーブルＬｏｏｋｕｐ（又は、これらに代えて図９〜図１７に示すレスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ１〜ＣｈｅｃｋＢｉｔ９）に加えて、図１８に示す直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋ［ｍ］（０≦ｍ≦６）（広義には、直前コマンドエラー判定情報テーブル）を更に記憶する。
【０１４９】
例えば、第１の様式のカードＣ１において、或るコマンドに対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、カードステータスのＭＳＢを第３１ビットとし、ＬＳＢを第０ビットとすると、エラービットが第３０ビット、第２７ビット、第２６ビット、及び、第２１〜第１７ビットの場合である。これらのビットの位置は、ビットパターン「０ｘ４Ｃ３Ｅ００００」（広義には、直前コマンドエラー判定情報、図１８の直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋの第１番目の列参照）で表すことができる。
【０１５０】
また、第２の様式のカードＣ２において、或るコマンドに対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第３０ビット、第２７ビット、第２６ビット、第２４ビット、及び、第２１〜第１６ビットの場合である。これらのビットの位置は、ビットパターン「０ｘ４Ｄ３Ｆ００００」（広義には、直前コマンドエラー判定情報、図１８の直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋの第２番目の列参照）で表すことができる。
【０１５１】
また、第３の様式のカードＣ３において、或るコマンドに対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第３０ビット、第２７ビット、第２６ビット、第２４ビット、及び、第２１〜第１６ビットの場合である。これらのビットの位置は、ビットパターン「０ｘ４Ｄ３Ｆ００００」（広義には、直前コマンドエラー判定情報、図１８の直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋの第３番目の列参照）で表すことができる。
【０１５２】
また、第４の様式のカードＣ４において、或るコマンドに対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第３１ビット、第３０ビット、第２７ビット、第２６ビット、第２４ビット、及び、第２１ビット、第１９〜第１５ビット、及び、第６ビットの場合である。これらのビットの位置は、ビットパターン「０ｘＣＤ２Ｆ８０４０」（広義には、直前コマンドエラー判定情報、図１８の直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋの第４番目の列参照）で表すことができる。
【０１５３】
また、第５の様式のカードＣ５において、或るコマンドに対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第３１ビット、第２７ビット、第２６ビット、第２４ビット、及び、第２１〜第１９ビット、及び、第１６ビットの場合である。これらのビットの位置は、ビットパターン「０ｘ８Ｄ３９００００」（広義には、直前コマンドエラー判定情報、図１８の直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋの第５番目の列参照）で表すことができる。
【０１５４】
また、第６の様式のカードＣ６において、或る通常コマンド（ＣＭＤ）に対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第３１〜第２９ビット、第２７ビット、第２６ビット、第２４ビット、及び、第２１〜第１９ビット、第１６ビット、及び、第１５ビットの場合である。これらのビットの位置は、ビットパターン「０ｘＥＤ３９８０００」（広義には、直前コマンドエラー判定情報、図１８の直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋの第６番目の列参照）で表すことができる。
【０１５５】
また、第６の様式のカードＣ６において、或る拡張コマンド（ＡＣＭＤ）に対するエラービットが当該コマンドに対するレスポンスのカードステータスではなく当該コマンドの次に発行されるコマンドに対するレスポンスのカードステータスにセットされ得るのは、エラービットが第３１〜第２９ビット、第２７ビット、第２６ビット、第２４ビット、及び、第２１〜第１９ビット、第１６ビット、及び、第１５ビットの場合である。これらのビットの位置は、チェックパターン「０ｘＥＤ３９８０００」（広義には、直前コマンドエラー判定情報、図１８の直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋの第７番目の列参照）で表すことができる。
【０１５６】
図１８に示す直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋは、カードの様式に関連付けて上記のチェックパターンを記憶したものである。なお、直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋをＲＯＭ３内に作成しておき、初期時等において、メインＣＰＵ２やＤＭＡコントローラ（図示せず）等が、直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋをＲＡＭ４内に転送するようにしても良い。また、通信回路７を用いて、直前コマンドレスポンスチェックビットマスクテーブルＭａｓｋを参照したり、その一部又は全部を適宜更新するようにしても良い。
【０１５７】
図１９は、コマンドをカードに発行する場合における本変形例の動作を示すフローチャートである。ここでは、第１の様式のカードＣ１がカードスロット６に装着されているものとする。
【０１５８】
まず、メインＣＰＵ２が、ＲＯＭ３内のドライバプログラムを実行し、コマンドインデックス、アーギュメント、コマンドタイプ、レスポンスタイプ、データ転送タイプ、ＤＡＴ線使用フラグ、転送ブロックサイズ、転送ブロック数、及び、レスポンスチェックをレジスタ２２ａ〜２２ｉに書き込むことにより、コマンド（以下、「今回コマンド」という。）の発行をＳＤＭＭＣホストコントローラ１０に指示する（ステップＳ４１）。
【０１５９】
なお、メインＣＰＵ２は、今回コマンドがカードＣ１へのデータ書込みを伴うコマンドである場合には、今回コマンドの発行の指示に先立って、カードＣ１へ書き込むデータをＲＡＭ４のＤＭＡ転送領域内に準備する。
【０１６０】
ＳＤＭＭＣ制御部２３内のコマンド・レスポンス送受信部２３ａは、レジスタ制御部２２からの信号及びデータに従って、カードＣ１に今回コマンドを発行する（ステップＳ５１）。
【０１６１】
カードＣ１は、受信した今回コマンドを実行して、レスポンス（以下、「今回レスポンス」という。）をコマンド・レスポンス送受信部２３ａに送信する（ステップＳ６１）。
【０１６２】
コマンド・レスポンス送受信部２３ａは、今回レスポンスをカードインタフェース１３を介してカードＣ１から受信すると、受信した今回レスポンスのカードステータスをレジスタ２２ｍに書き込むとともに、コマンド完了フラグをレジスタ２２ｌにセットして、今回コマンドの完了をメインＣＰＵ２に通知する（ステップＳ５２）。このとき、レジスタ制御部２２が、今回コマンドの完了を通知するための割込み信号をメインＣＰＵ２に出力するようにしても良い。また、このとき、コマンド・レスポンス送受信部２３ａは、伝送エラーが発生していた場合に、伝送エラーのエラー情報をレジスタ２２ｎに書き込む。
【０１６３】
なお、コマンド・レスポンス送受信部２３ａは、カードＣ１に発行した今回コマンドがカードＣ１へのデータ書込みを伴うコマンドである場合には、カードＣ１から今回レスポンスを受信したときに、カードＣ１へのデータ書込みの開始をデータ送受信部２３ｂに指示する。また、コマンド・レスポンス送受信部２３ａは、カードＣ１に発行した今回コマンドがカードＣ１からのデータ読出しを伴うコマンドである場合には、カードＣ１から今回レスポンスを受信したときに、カードＣ１からのデータ読出しの開始をデータ送受信部２３ｂに指示する。
【０１６４】
一方、メインＣＰＵ２は、ステップＳ４１においてコマンドの発行をＳＤＭＭＣホストコントローラ１０に指示した後に、カードの様式（ここでは、第１の様式）及びコマンドインデックスに基づいて、レスポンスチェックビットテーブルＣｈｅｃｋＢｉｔ（図５参照）の中からチェックパターンを取得する（ステップＳ４２）。
【０１６５】
先に説明したように、今回レスポンスのカードステータスには、今回コマンドのエラービットの他、直前コマンドのエラービットがセットされ得る。そこで、メインＣＰＵ２は、ステップＳ４２にて取得した今回コマンドに対するエラービットの位置を表すチェックパターンと、今回コマンドの直前に発行を指示したコマンド（以下、「直前コマンド」という。）に対するエラービットの位置を表す直前発行コマンドチェックパターン（広義には、直前発行コマンドチェック情報）との論理和演算を実行する（ステップＳ４３）。この論理和演算によって得られたチェックパターンは、今回コマンドに対するエラービットと直前コマンドに対するエラービットの両方を表すことになる。なお、直前発行コマンドチェックパターンは、後で詳細に説明するステップＳ４７〜Ｓ４８において更新され、次のコマンド発行時に利用される。直前発行コマンドチェックパターンは、ＲＡＭ４（図２参照）のワーク領域やメインＣＰＵ２の内部レジスタ等に記憶するようにしても良い。また、直前発行コマンドチェックパターンの初期値は、初期時には直前コマンドが存在しないため、「０ｘ００００００００」とされる。さらにまた、直前発行コマンドチェックパターンは、システムリセット時等にも、ゼロクリアされる。
【０１６６】
そして、メインＣＰＵ２は、ＳＤＭＭＣホストコントローラ１０からコマンドの完了の通知を受けると、レジスタ制御部２２のレジスタ２２ｍ内に格納されているカードステータスを読み出し、カードステータスとステップＳ４３にて取得したチェックパターンとの論理積演算処理を行う（ステップＳ４４）。
【０１６７】
直前コマンドを実行し、続いて今回コマンドを実行したカードＣ１内において何らのエラーも発生していない場合には、カードステータスとステップＳ４３にて取得したチェックパターンとの論理積演算の結果は「０」（０ｘ００００００００）となる。一方、直前コマンドを実行し、続いて今回コマンドを実行したカードＣ１内において何らかのエラーが発生している場合には、カードステータスとステップＳ４３にて取得したチェックパターンとの論理積演算の結果は「０」以外となる。
【０１６８】
そこで、メインＣＰＵ２は、カードステータスとステップＳ４３にて取得したチェックパターンとの論理積演算の結果が「０」以外である場合（ステップＳ４５）には、エラー処理を実行する（ステップＳ４６）。エラー処理としては、例えば、直前コマンド及び今回コマンドを実行したカードＣ１内においてどのようなエラーが発生したのかというエラーの内容を特定する処理を含むことが考えられる。これは、カードステータス内のビットを調べること等で実現可能である。
【０１６９】
次に、メインＣＰＵ２は、カードの様式（ここでは、第１の様式）及び今回コマンドのコマンドインデックスに基づいて、今回コマンドの次にカードＣ１に発行されるコマンド（以下、「次回コマンド」という。）に対するレスポンスにおける今回コマンドに対するエラーの有無を判定するための直前発行コマンドチェックパターンを更新して記憶する（ステップＳ４７〜Ｓ４８）。
【０１７０】
具体的には、メインＣＰＵ２は、直前コマンドレスポンスチェックビットマスクテーブル（図１８参照）からカードの様式（ここでは、第１の様式）に関連付けられたチェックパターン（ここでは、「０ｘ４Ｃ３Ｅ００００」）を取得し、このチェックパターンとステップＳ４２にて取得したチェックパターン（今回コマンドのエラービットの位置を表す）との論理積演算を行う（ステップＳ４７）。そして、メインＣＰＵ２は、ステップＳ４７にて得られた論理積演算結果（チェックパターン）を新たな直前発行コマンドチェックパターンとして記憶する（ステップＳ４８）。なお、先に説明したように、直前発行コマンドチェックパターンは、ＲＡＭ４（図２参照）のワーク領域やメインＣＰＵ２の内部レジスタ等に記憶するようにしても良い。また、直前発行コマンドチェックパターンの初期値は、初期時には直前コマンドが存在しないため、「０ｘ００００００００」とされる。さらにまた、直前発行コマンドチェックパターンは、システムリセット時等にも、ゼロクリアされる。
【０１７１】
以上説明したように、本変形例によれば、直前コマンドに対するエラービットが今回レスポンスにセットされた場合であっても、エラーの有無を迅速且つ容易に判定することが可能である。
【０１７２】
なお、本発明は上述した実施の形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。また図２〜図４の各図において、すべてのブロックを含める必要はなく、その一部のブロックを省略する構成にしてもよい。
【０１７３】
例えば、電子機器、ホストコントローラの構成は、図２〜図４等で説明した構成に限定されず、種々の変形実施が可能である。また本発明のエラー判定手法も本実施形態で説明したものに限定されるものではなく、種々の変形実施が可能である。
【０１７４】
また、明細書又は図面中の記載において広義な用語（電子機器、ホストコントローラ、デバイス、情報処理装置等）として引用された用語（ＳＤＭＭＣホストコントローラ、ＳＤカード（登録商標）、ＣＰＵ等）は、明細書又は図面中の他の記載においても広義な用語に置き換えることができる。
【０１７５】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【０１７６】
また、本発明は、ＭＭＣ（登録商標）及びＳＤカード（登録商標）を発展した仕様やこれらのカードと同様の思想に基づく種類、仕様、規格、及び／又は、バージョンに準拠したカードのエラー判定にも適用できる。
【図面の簡単な説明】
【０１７７】
【図１】コマンド及びレスポンスのフォーマットの一例を示す図。
【図２】本実施形態の電子機器の構成例の図。
【図３】図１のカードコントローラの内部構成のブロック図。
【図４】図２のレジスタ制御部内のレジスタマップを示す図。
【図５】図２のＲＡＭに記憶されるレスポンスチェックビットテーブルを示す図。
【図６】図２のＲＡＭに記憶されるルックアップテーブルを示す図。
【図７】図２のＲＡＭに記憶されるルックアップテーブルを示す図。
【図８】本実施形態の動作例のフロー図。
【図９】図２のＲＡＭに記憶されるレスポンスチェックビットテーブルを示す図。
【図１０】図２のＲＡＭに記憶されるレスポンスチェックビットテーブルを示す図。
【図１１】図２のＲＡＭに記憶されるレスポンスチェックビットテーブルを示す図。
【図１２】図２のＲＡＭに記憶されるレスポンスチェックビットテーブルを示す図。
【図１３】図２のＲＡＭに記憶されるレスポンスチェックビットテーブルを示す図。
【図１４】図２のＲＡＭに記憶されるレスポンスチェックビットテーブルを示す図。
【図１５】図２のＲＡＭに記憶されるレスポンスチェックビットテーブルを示す図。
【図１６】図２のＲＡＭに記憶されるレスポンスチェックビットテーブルを示す図。
【図１７】図２のＲＡＭに記憶されるレスポンスチェックビットテーブルを示す図。
【図１８】図２のＲＡＭに記憶される直前コマンドレスポンスチェックビットマスク      テーブルを示す図。
【図１９】本実施形態の変形例の動作例のフロー図。
【符号の説明】
【０１７８】
１  電子機器、２  メインＣＰＵ、３  ＲＯＭ、４  ＲＡＭ、５  カードコントローラ、６  カードスロット、７  通信回路、１０  ＳＤＭＭＣホストコントローラ、１１  ＣＰＵインタフェース、１２  ＤＭＡインタフェース、１３  カードインタフェース、２１  クロック出力部、２２  レジスタ制御部、２２ａ〜２２ｏ  レジスタ、２３  ＳＤＭＭＣ制御部、２３ａ  コマンド・レスポンス送受信部、２３ｂ  データ送受信部、２４  ＤＭＡ制御部、２４ａ  ＦＩＦＯバッファ、Ｃ１〜Ｃ６  カード
【図１】
2008293076.tif 000003
【図２】
2008293076.tif 000004
【図３】
2008293076.tif 000005
【図４】
2008293076.tif 000006
【図５】
2008293076.tif 000007
【図６】
2008293076.tif 000008
【図７】
2008293076.tif 000009
【図８】
2008293076.tif 000010
【図９】
2008293076.tif 000011
【図１０】
2008293076.tif 000012
【図１１】
2008293076.tif 000013
【図１２】
2008293076.tif 000014
【図１３】
2008293076.tif 000015
【図１４】
2008293076.tif 000016
【図１５】
2008293076.tif 000017
【図１６】
2008293076.tif 000018
【図１７】
2008293076.tif 000019
【図１８】
2008293076.tif 000020
【図１９】
2008293076.tif 000021