以下、図を参照して本発明の実施の形態について説明する。
図1は本発明を適用したNFC通信システム1の一実施の形態の構成を表している。この実施の形態においては、NFC通信システム1は、NFCデバイス51と外部NFCデバイス52とにより構成されている。
NFCデバイス51は、例えばIC(Integrated Circuit)カード、携帯電話機、PDA(Personal Digital Assistant)、腕時計、ペン、パーソナルコンピュータなどの、主に携帯自在の装置で構成され、外部NFCデバイス52は、例えばリーダ/ライタで構成されるが、もちろんこれらに限定されるものではない。これらは、例えばISM(Industrial Scientific Medical)バンドの13.56MHzの周波数の搬送波用いて、数10cm以内(接触している場合を含む)の距離で、近接通信を行う。
NFCデバイス51は、ベースバンドコントローラ61、セキュアエレメント62−0,62−1,62−2、およびフロントエンド63を、1つの筺体内に収容している。セキュアエレメント62−0はNFCデバイス51の製造時に予め組み込まれ、固定される。これに対してセキュアエレメント62−1,62−2は、NFCデバイス51の管理者(NFCデバイス51をユーザに提供する者)により必要に応じて着脱される。ベースバンドコントローラ61とフロントエンド63、並びにセキュアエレメント62−0,62−1,62−2とフロントエンド63は、図1および図2に示されるように、バスあるいはコードといった有線で相互に接続されている。
ベースバンドコントローラ61は、セキュアエレメント62−0,62−1,62−2(以下、これらを個々に区別する必要がない場合、単にセキュアエレメント62と称する)の動作を制御する。特に、ベースバンドコントローラ61は、製造時に、セキュアエレメント62−0に対して通信のためのタイムスロットを割り当てる処理を行うとともに、起動時に、複数のセキュアエレメント62−0,62−1,62−2に対して通信のための異なるタイムスロットを割り当てる処理を行う。起動時とは、電力が供給されたとき、またはセキュアエレメント62が取り外されるか、もしくは追加されたときである。
セキュアエレメント62−0,62−1,62−2は、それぞれ異なるアプリケーションで動作し、独立した処理をセキュアに行う。各アプリケーションにはそれぞれを識別する識別情報としてのシステムコードが割り当てられている。例えば、セキュアエレメント62−0は、システムコードSC0が割り当てられている鉄道用の定期券として機能し、セキュアエレメント62−1は、システムコードSC1が割り当てられ、所定の加盟店での支払いに使用されるプリペイドカードとして機能し、セキュアエレメント62−2は、システムコードSC2が割り当てられているユーザの勤務先のID(Identification)カードとして機能する。例えば、NFCデバイス51が所定のシステムコードのアプリケーションで動作する外部NFCデバイス52に近接配置されたとき、各セキュアエレメント62のうち、そのシステムコードのアプリケーションに対応するものが外部NFCデバイス52と通信する。
また、セキュアエレメント62−0,62−1,62−2には、各セキュアエレメントを識別する識別情報としての識別番号ID0,ID1,ID2が、それぞれ割り当てられている。
各アプリケーションの管理者は、自分自身が管理するアプリケーションのシステムコードは知っているが、他の管理者が管理するアプリケーションのシステムコードは知らない。各セキュアエレメント62は、システムコードを指定することで対応するアプリケーションの他のセキュアエレメント62の存在を把握し、把握した各セキュアエレメント62のIDを個々に取得して、そのIDに基づいて、個々のセキュアエレメント62と通信する。
フロントエンド63は、NFCデバイス51として外部NFCデバイス52と近接通信する。すなわち、フロントエンド63は、ベースバンドコントローラ61、およびセキュアエレメント62−0,62−1,62−2に共通に使用され、外部NFCデバイス52と近接通信する機能を有する。このため、フロントエンド63は、ベースバンドコントローラ61からの信号を、セキュアエレメント62−0,62−1,62−2と外部NFCデバイス52に供給し、外部NFCデバイス52からの信号を、ベースバンドコントローラ61、およびセキュアエレメント62−0,62−1,62−2に供給する。また、セキュアエレメント62−0,62−1,62−2のいずれか1つからの信号は残りの2つ、ベースバンドコントローラ61および外部NFCデバイス52に供給される。なお、信号は、パケット単位で授受される。
図3は、ベースバンドコントローラ61の一実施の形態の機能的構成を表している。ベースバンドコントローラ61は送信部81、受信部82、設定部83、判定部84、および選択部85を有している。
送信部81は、フロントエンド63に信号を送信し、受信部82は、フロントエンド63からの信号を受信する。設定部83は、変数に値を設定する。判定部84は各種の判定を行い、選択部85は各種の選択を行う。
図4は、セキュアエレメント62の一実施の形態の機能的構成を表している。セキュアエレメント62は、判定部101、受信部102、送信部103、記憶部104、およびモード設定部105を有している。
判定部101は、各種の判定を行う。受信部102は、フロントエンド63からの信号を受信する。送信部103は、フロントエンド63に信号を送信する。送信部103は、タイムスロットが割り当てられるまでは、ランダムなタイミングのタイムスロットで通信を行う機能を有する。
記憶部104は、各アプリケーションのシステムコードと、各セキュアエレメント62を識別する識別情報としての識別番号を不揮発状態で記憶する。また、セキュアエレメント62のうち、NFCデバイス51に製造時に予め組み込まれ、固定されるセキュアエレメント62−0は、設定されたタイムスロット番号を不揮発的に記憶する。製造後に装着されるセキュアエレメント62−1,62−2は、設定されたタイムスロット番号を揮発的に記憶する。
モード設定部105は、セキュアエレメント62のモードを、ノーマルモードとスリープモードのいずれかに設定する。
次に、図5と図6のフローチャートを参照して、NFCデバイス51の製造時におけるタイムスロット設定処理について説明する。なお、図5はNFCデバイス51の製造時に、ベースバンドコントローラ61により行われる処理であり、図6はNFCデバイス51の電源をオンしたとき、セキュアエレメント62により行われる処理である。
NFCデバイス51の製造時において、製造者は、NFCデバイス51の電源をオンし、工場の外部NFCデバイス52を操作して、タイムスロット番号の書き込みを指示する。図5のステップS101において、NFCデバイス51のベースバンドコントローラ61の送信部81は、この指示に基づいて、ポーリングリクエストを送信する。このポーリングリクエストのシステムコードは、すべて(All)とされるので、このコマンドにより全てのセキュアエレメント62がレスポンスを返すことが要求される。ただし、いまの場合、NFCデバイス51に取り付けられているのはセキュアエレメント62−0だけである。
セキュアエレメント62の受信部102はベースバンドコントローラ61からの信号を受信する。図6のステップS121において、判定部101は信号を受信したかを判定し、受信していなければ受信するまで待機する。信号が受信された場合、ステップS122において、判定部101は、その受信した信号が自分宛の信号であるかを判定する。いまの場合、自分自身のシステムコードが、ポーリングリクエストで指定されたシステムコードと一致するかが判定される。自分宛の信号でない場合には、その信号は無視され、処理はステップS121に戻る。
受信した信号が自分宛である場合(いまの場合、すべてのシステムコードが指定されているので、自分自身のシステムコードと一致する)、ステップS123において判定部101は、その信号がポーリングリクエストであるかを判定する。受信したのがポーリングリクエストである場合、すなわち、自分自身のシステムコードが指定され、かつポーリングリクエストが受信された場合、ステップS126において判定部101は、自分自身にタイムスロット番号は設定されているかを判定する。タイムスロット番号が設定されている場合、ステップS128において、送信部103は、設定されているタイムスロット番号のタイミングで、自分自身の識別番号を付加してレスポンスを送信する。いままでの処理では、まだタイムスロット番号は設定されていないので、ステップS127において、送信部103は、ランダムなタイムスロット番号のタイミングで、識別番号を付加してレスポンスを送信する。
図5のステップS102において、ベースバンドコントローラ61の受信部82はセキュアエレメント62から送信されてきたポーリングレスポンスを受信する。いまの場合、NFCデバイス51にはセキュアエレメント62−0しか取り付けられていないので、このレスポンスは識別番号がID0のセキュアエレメント62−0からしか送信されてこない。
ステップS103において送信部81は、セットタイムスロットリクエスト(ID0,TSN0)を送信する。すなわち、識別番号がID0のセキュアエレメント62−0に対して、スロット番号TSN0の設定が要求される。また、このとき、記憶方式として不揮発の記憶方式がパラメータにより指定される。
このセットタイムスロットリクエストは識別番号ID0が指定されているため、セキュアエレメント62−0においてのみ取得され、セキュアエレメント62−1,62−2が存在していたとしても無視される。すなわち、セキュアエレメント62−0の判定部101は、ステップS121で信号を受信したと判定すると、ステップS122で受信したのが自分宛の信号であるかを判定する。いまの場合、識別番号ID0が指定されているためセキュアエレメント62−0宛の信号であると判定される。さらに判定部101は、ステップS123でその信号はポーリングリクエストではないと判定した後、ステップS124において、その信号がセットタイムスロットリクエストかを判定する。
受信した信号がセットタイムスロットリクエストであると判定された場合、ステップS129において判定部101は、セットタイムスロットの記憶方式のパラメータに基づいて、記憶方式として、不揮発的な記憶が指定されたかを判定する。不揮発的な記憶が指定されていない場合(すなわち、揮発的な記憶が指定された場合)、ステップS131において記憶部104は、受信したタイムスロット番号を、自己のタイムスロット番号として揮発的に記憶する。揮発的な記憶なので、この記憶は電力の供給が中止されると消去される。
これに対して、セットタイムスロットの記憶方式として、パラメータにより不揮発的な記憶が指定された場合、ステップS130において記憶部104は受信したタイムスロット番号を不揮発的に記憶する。このタイムスロット番号は不揮発的に記憶されるので、NFCデバイス51に電力が供給されない状態になったとしても保持される。タイムスロット番号がすでに記憶されている場合でもステップS130の処理は実行され、新しいタイムスロット番号が上書きされる。
ステップS130またはS131の記憶処理の後、ステップS132において送信部103は、自分自身の識別番号を付加してレスポンスを送信する。いまの場合、セキュアエレメント62−0が識別番号ID0を付加してレスポンスを送信する。
セキュアエレメント62は図7に示されるように、ノーマルモードとスリープモードの2つのモードを有しており、初期状態においてはノーマルモードが設定されている。セキュアエレメント62は、ノーマルモードにおいてはポーリングリクエスト、セットタイムスロットリクエスト、その他のコマンドに応答可能であるが、スリープモードにおいてはリセットリクエストのみに応答可能とされる。モード設定部105はノーマルモードにおいてタイムスロットを設定するときは、モードをスリープモードに遷移させ、スリープモードでリセットリクエストを受信したときは、モードをノーマルモードに遷移させる。いまの場合、ノーマルモードでセットタイムスロットリクエストが受信されたため、ステップS133においてモード設定部105はスリープモードを設定する。
ステップS132でセットタイムスロットレスポンスが送信されると、ベースバンドコントローラ61の受信部82は、ステップS104において、そのセットタイムスロットレスポンス(ID0)を受信する。すなわち、識別番号ID0が付加されたセキュアエレメント62−0からのこのレスポンスを受信して、ベースバンドコントローラ61はセキュアエレメント62−0にタイムスロット番号TSN0が記憶されたことを確認することができる。なおステップS132とステップS133の処理は、順番が逆であってもよい。
図6のステップS124において受信したのがセットタイムスロットリクエストではないと判定された場合、ステップS125乃至S136の処理が実行されるのであるが、この処理については、次の図9と図10の通常起動時におけるタイムスロット設定処理に関連して説明する。
製造時におけるタイムスロットの設定処理に関する、ベースバンドコントローラ61、セキュアエレメント62−0、およびフロントエンド63の相互の関係を、図8を参照してさらに説明する。
ステップS201において、ベースバンドコントローラ61の送信部81はポーリングリクエストを全てのシステムコードのセキュアエレメント62を対象に送信する。フロントエンド63はステップS221においてこのリクエストを受信すると、ステップS222において、このリクエストを全セキュアエレメント62にブロードキャスト送信または経路制御して送信する。ただし、いまの場合、セキュアエレメント62−0のみが取り付けられているので、セキュアエレメント62−0の受信部102がステップS211でこれを受信する。
ステップS212でセキュアエレメント62−0の送信部103は、このリクエストに対して、自分自身の識別番号であるID0を付加してポーリングレスポンスを返す。このレスポンスはリクエストの送信元であるベースバンドコントローラ61に対して、ランダムなタイムスロット番号のタイミングで送信される。ステップS223でこのレスポンスを受信したフロントエンド63は、ステップS224においてこのレスポンスを、ベースバンドコントローラ61に送信する。
ステップS202において、ベースバンドコントローラ61は、その受信部102でこのレスポンスを受信すると、応答したセキュアエレメント62−0の識別番号ID0を知ることができる。従って、以後、ベースバンドコントローラ61はセキュアエレメント62−0と直接通信することが可能となる。
そこでステップS203においてベースバンドコントローラ61の送信部81は、セットタイムスロットリクエストを識別番号がID0であるセキュアエレメント62−0に対して送信する。このリクエストには、タイムスロット番号TSNとして、最小の値TSN0が設定される。
ステップS225でこのリクエストを受信したフロントエンド63はステップS226において、このリクエストをセキュアエレメント62−0に送信する。ステップS213において、識別番号がID0であるセキュアエレメント62−0は、その受信部102でこのリクエストを受信すると、記憶部104はそのタイムスロット番号TSN0を不揮発的に記憶する。その結果、以後、セキュアエレメント62−0は、記憶したタイムスロット番号TSN0のタイミングで通信する。このタイムスロット番号TSN0は最も早いタイミングの値なので、セキュアエレメント62−0は、他のセキュアエレメント62より時間的に優先して通信することができる。
ステップS214においてセキュアエレメント62−0の送信部101は、セットタイムスロットレスポンスを、リクエストの送信元であるベースバンドコントローラ61に送信する。このレスポンスには、送信者の識別番号としてID0が付加されるとともに、確認のため、設定、記憶したタイムスロット番号TSN0が付加されている。
ステップS227でこのレスポンスを受信すると、ステップS228においてフロントエンド63は、このレスポンスをベースバンドコントローラ61に送信する。ベースバンドコントローラ61の受信部82は、ステップS204でこのレスポンスを受信することで、タイムスロット番号がセキュアエレメント62−0に記憶されたことを確認することができる。
以上のようにしてNFCデバイス51に製造時に取り付けられているセキュアエレメント62−0については、タイムスロット番号が予め不揮発的に記憶される。なお、予め取り付けられるセキュアエレメント62が複数個存在する場合には、それぞれにタイムスロット番号が不揮発的に記憶される。
セキュアエレメント62−0が固定されたNFCデバイス51には、図1と図2に示されるように、さらに着脱自在のセキュアエレメント62−1,62−2が取り付けられて使用される。
このように、セキュアエレメント62−0,62−1,62−2を有するNFCデバイス51を使用する場合、NFCデバイス51に電力が供給されたとき、図9と図10の通常起動時におけるタイムスロット設定処理が実行される。
NFCデバイス51の電源が投入されたとき、あるいはNFCデバイス51からデータを読み取ったり、データを書き込んだりするのに充分な時間をかけることができる場合には、外部NFCデバイス52に近接配置され、電力が供給されたとき、NFCデバイス51のベースバンドコントローラ61は、図9と図10の通常起動時におけるタイムスロット設定処理を自ら実行する。すなわち、固定されたセキュアエレメント62−0に、最先のタイミングのタイムスロットが割り当てられているのに対して、着脱が可能なセキュアエレメント62−1,62−2には、固定されたセキュアエレメント62−0より遅いタイミングのタイムスロットが次のように割り当てられる。
ステップS301において、ベースバンドコントローラ61の送信部81は、ポーリングリクエスト(All,TSNmax)を送信する。このリクエストの対象は全て(All)のシステムコードのセキュアエレメント62とされる。また、このときのタイムスロット番号TSNは最大値TSNmax(例えば15)とされる。すなわち、セキュアエレメント62は最大の番号までの任意の番号のタイミングにレスポンスを返すことができる。
各セキュアエレメント62の受信部102は、このリクエストを受信すると、タイムスロット番号が設定されているかを判定する(図6のステップS126)。セキュアエレメント62−0は上述した製造時の処理によりすでにタイムスロット番号が設定され、不揮発的に記憶されている。そこで、セキュアエレメント62−0の送信部103は、タイムスロット番号TSN0のタイミングでポーリングレスポンスをベースバンドコントローラ61に送信する(図6のステップS128)。これに対してセキュアエレメント62−1,62−2は、まだタイムスロット番号が設定されていないので、ランダムなタイムスロット番号のタイミングでレスポンスを返す(図6のステップS127)。
セキュアエレメント62−0のタイムスロット番号は最も早いタイミングに設定されているので、ステップS302でベースバンドコントローラ61の受信部82は各セキュアエレメント62のうちの、ID0のセキュアエレメント62−0からのポーリングレスポンスを受信する。ステップS303においてベースバンドコントローラ61の送信部81は、セットタイムスロットリクエストを送信する。このリクエストには、送信先の識別番号としてセキュアエレメント62−0のID0が、タイムスロット番号としてTSN0が、設定されている。
セキュアエレメント62−0の受信部102がこのリクエストを受信すると、セキュアエレメント62−0の識別番号はID0であり、すでにタイムスロット番号は記憶されているので、送信部103がレスポンスを返し(図6のステップS132)、モード設定部105はモードをスリープモードに設定する(図6のステップS133)。従って、以後、セキュアエレメント62−0は、リセットリクエスト以外のリクエストには応答しなくなる。従って、他のセキュアエレメント62の応答が妨げられることが防止される。
ステップS304においてベースバンドコントローラ61の受信部82は、識別番号がID0であるセキュアエレメント62−0からのこのレスポンスを受信し、スリープモードに遷移したことを確認する。
ステップS305においてベースバンドコントローラ61の設定部83は、タイムスロット番号TSNをTSN1に設定する。すなわち、セキュアエレメント62−0に割り当てられた番号TSN0の次に早いタイミングの番号TSN1が設定される。
ステップS306において、ベースバンドコントローラ61の判定部84は、他にも有効なレスポンスがあるかを判定する。すなわち、セキュアエレメント62−1,62−2は、ランダムなタイムスロットの番号のタイミングでポーリングリクエストに対するレスポンスを返してくる。タイムスロットの番号が衝突しなければ、ベースバンドコントローラ61はそのレスポンスを受信することができる。衝突があったことは、パケットに付加されているエラーチェックコードが誤っていることで確認することができる。エラーチェックコードが正しければ、衝突は発生しなかったことになる。
他にも有効なレスポンスが存在する場合には、ステップS307において選択部85は、1つの有効なレスポンスを選択する。ステップS308において送信部81は、選択したレスポンスを送信したセキュアエレメント62に、セットタイムスロットリクエストを送信する。このとき、タイムスロット番号TSNはステップS305で設定された値TSN1とされる。また、セキュアエレメントは着脱可能であるため、記憶方式は揮発記憶とされる。そのため、この設定処理は、起動時、すなわち、電力が供給されたとき、またはセキュアエレメント62が取り外されるか、もしくは追加されたときに実行される。
このリクエストを受信したセキュアエレメント62はランダムなタイムスロットの番号のタイミングでレスポンスを返す(図6のステップS127)。ベースバンドコントローラ61の受信部82はこのセットタイムスロットレスポンスをステップS309で受信する。ステップS310で設定部83は、タイムスロット番号TSNを1だけインクリメントする。いまの場合、TSN2とされる。
その後、処理はステップS306に戻り、再び他にも有効なレスポンスがあるかが判定される。さらに他にも有効なレスポンスがある場合には、ステップS307でそのレスポンスが選択され、同様の処理が行われる。
他に有効なレスポンスがないと判定された場合、ステップS311において、ベースバンドコントローラ61の送信部81はポーリングリクエストを送信する。このとき全てのシステムコードが指定され、タイムスロット番号は最大値TSNmaxが設定される。
各セキュアエレメント62はこのリクエストに対してレスポンスを返す(図6のステップS127)。ただし、すでにタイムスロットが設定されているセキュアエレメント62は、スリープモードが設定されているため(図6のステップS133)、レスポンスを返してこない。その結果、すでにタイムスロット番号が設定されているセキュアエレメント62からのレスポンスに邪魔されることなく、まだタイムスロット番号が設定されていないセキュアエレメント62からのレスポンスだけを受信することができ、タイムスロット番号の設定処理を迅速に実行することができる。
ステップS312でベースバンドコントローラ61の受信部82はセキュアエレメント62からのポーリングレスポンスを受信する。判定部84はステップS313において、有効なレスポンスがあるかを判定する。有効なレスポンスがある場合には、ステップS314において設定部83は、レスポンスがなかったポーリングの回数を表す変数Nを0に設定する。
その後、ステップS307乃至ステップS310、ステップS306において、有効なレスポンスが選択され、そのレスポンスを送信したセキュアエレメント62に対してセットタイムスロットリクエストを送信し、タイムスロットを設定させる処理が実行される。
有効なレスポンスがない場合にはステップS315において、設定部83は変数Nを1だけインクリメントする。ステップS316において、判定部84は変数Nが予め設定されている最大値Nmaxに達したかを判定する。変数Nが最大値Nmaxに達していない場合、すなわち、レスポンスがなかったポーリング回数がまだ最大値Nmaxに達していない場合、処理はステップS311に戻り、それ以降の処理が繰り返される。
レスポンスがなかったポーリング回数が最大値Nmaxに達した場合、すべてのセキュアエレメント62に対してタイムスロットが設定されたものと考えられる。そこで、次に、スリープモードに設定されているセキュアエレメント62を、ノーマルモードに遷移させる処理が実行される。
すなわち、ステップS317において判定部84は、確認された全てのセキュアエレメント62にリセットリクエストを送信したかを判定する。識別番号を確認したセキュアエレメント62の中に、まだリセットリクエストを送信していないセキュアエレメント62が存在する場合、ステップS318において、選択部85はその中から1つのセキュアエレメント62を選択する。ステップS319において、送信部320は選択したセキュアエレメント62に対してリセットリクエストを送信する。
セキュアエレメント62の判定部101は図6のステップS125において、受信したのがリセットリクエストであるかを判定する。受信したのがリセットリクエストである場合、ステップS134において送信部103は、自分自身の識別番号を付加してレスポンスを送信する。ステップS135において、モード設定部105は、ノーマルモードを設定する。これにより、セキュアエレメント62は、以後、全てのリクエストなどを受信し、処理することができるようになる。なおステップS134とステップS135の処理は、順番が逆であってもよい。その後、処理はステップS121に戻り、それ以降の処理が繰り返される。
ステップS125において、受信したのがリセットリクエストではないと判定された場合、受信されたのはポーリングリクエスト、セットタイムスロットリクエスト、リセットリクエスト以外の信号であるから、ステップS136において、セキュアエレメント62はその信号に対応する処理を実行する。その後、処理はステップS121に戻り、それ以降の処理が繰り返される。
図10に戻って、ベースバンドコントローラ61の受信部82は、ステップS320でセキュアエレメント62が図6のステップS134で送信したリセットレスポンスを受信する。これによりそのセキュアエレメント62がノーマルモードに設定されたので、以後、通常の処理が可能となる。
その後、ステップS317において判定部84は、再び確認された全てのセキュアエレメント62にリセットリクエストを送信したかを判定する。識別番号を確認したセキュアエレメント62の中に、まだリセットリクエストを送信していないセキュアエレメント62が存在する場合、ステップS318において、その中から1つのセキュアエレメント62を選択し、ステップS319でそのセキュアエレメント62に対してリセットリクエストを送信する処理が実行され、ステップS320でそのレスポンスを受信する処理が行われる。
以上のようにして、ステップS317において、確認された全てのセキュアエレメント62にリセットリクエストを送信したと判定されるまで同様の処理が繰り返され、全てのセキュアエレメント62がノーマルモードに遷移したとき、処理は終了する。
次に、図11乃至図14を参照して、ベースバンドコントローラ61、セキュアエレメント62、およびフロントエンド63の相互の間における、通常起動時におけるタイムスロット設定処理に関して説明する。
ステップS401において、ベースバンドコントローラ61の送信部81はポーリングリクエストを全てのシステムコードのセキュアエレメント62を対象に送信する。フロントエンド63はステップS541においてこのリクエストを受信すると、ステップS542において、このリクエストを全セキュアエレメント62にブロードキャスト送信または経路制御して送信する。いまの場合、セキュアエレメント62−0だけでなく、セキュアエレメント62−1,62−2が取り付けられているので、セキュアエレメント62−0,62−1,62−2の受信部102が,それぞれステップS451,S481,S511でこれを受信する。
なお、ポーリングリクエストはその送信元にも送信されるが、ここでは便宜上、図示とその説明は省略する。
ステップS452でセキュアエレメント62−0の送信部103は、このリクエストに応答する。すなわちセキュアエレメント62−0は、自分自身の識別番号であるID0を付加して、リクエストの送信元であるベースバンドコントローラ61に対してポーリングレスポンスを、記憶されている最先のタイムスロット番号TSN0で送信する。ステップS543でこのレスポンスを受信したフロントエンド63は、ステップS544においてこのレスポンスを、ベースバンドコントローラ61に送信する。
ステップS402において、ベースバンドコントローラ61は、その受信部82でこのレスポンスを受信すると、応答したセキュアエレメント62−0の識別番号ID0を知ることができる。従って、以後、ベースバンドコントローラ61はセキュアエレメント62−0と直接通信することが可能となる。
ポーリングリクエストに対する応答はセキュアエレメント62−1,62−2においても行われる。ただし、セキュアエレメント62−1,62−2にはタイムスロット番号がまだ設定されていないので、応答はランダムなスロット番号のタイミングで行われる。
例えばセキュアエレメント62−2がセキュアエレメント62−0の次に早いタイムスロットの番号のタイミングで応答したとすると、ステップS512において、セキュアエレメント62−2の送信部103は、自分自身の識別番号ID2を付加してポーリングレスポンスを、リクエストの送信元であるベースバンドコントローラ61に返す。フロントエンド63はステップS545でこのポーリングレスポンスを受信すると、ステップS546でこのポーリングレスポンスを、ポーリングリクエストの送信元であるベースバンドコントローラ61に送信する。
ステップS403において、ベースバンドコントローラ61はその受信部82でこのレスポンスを受信すると、応答したセキュアエレメント62−2の識別番号ID2を知ることができる。従って、以後、ベースバンドコントローラ61はセキュアエレメント62−2と直接通信することが可能となる。
セキュアエレメント62−1がセキュアエレメント62−2の次に早いタイムスロットの番号のタイミングで応答したとすると、ステップS482において、セキュアエレメント62−1の送信部103は、自分自身の識別番号ID1を付加してポーリングレスポンスを、リクエストの送信元であるベースバンドコントローラ61に返す。フロントエンド63はステップS547でこのポーリングレスポンスを受信すると、ステップS548でこのポーリングレスポンスを、ポーリングリクエストの送信元であるベースバンドコントローラ61に送信する。
ステップS404において、ベースバンドコントローラ61はその受信部82でこのレスポンスを受信すると、応答したセキュアエレメント62−1の識別番号ID1を知ることができる。従って、以後、ベースバンドコントローラ61はセキュアエレメント62−1と直接通信することが可能となる。
以上のようにして識別番号を知ったベースバンドコントローラ61は、レスポンスを受信した順番に、各セキュアエレメント62に対して、タイムスロット番号の割り当て処理を実行する。ただし、以下においては、衝突が発生し、セキュアエレメント62−1,62−2にはまだタイムスロット番号が設定されていないものとする。
ステップS405において、ベースバンドコントローラ61の送信部81は、識別番号がID0であるセキュアエレメント62−0に対して、タイムスロット番号TSN0のセットタイムスロットリクエストを送信する。ただし、上述したようにセキュアエレメント62−0に対しては、タイムスロット番号TSN0が製造時に既に設定、記憶されており、このリクエストはセキュアエレメント62−0をスリープ状態にするために行われる。
ステップS549でセットタイムスロットリクエストを受信したフロントエンド63は、ステップS550でそのリクエストをセキュアエレメント62−0に送信する。もちろん信号はセキュアエレメント62−1,62−2にも送信されるが、宛先が一致しないのでそこでは無視される。
ステップS453でセキュアエレメント62−0の受信部102はセットタイムスロットリクエストを受信すると、記憶部104は既にタイムスロット番号TSN0を記憶しているので、新たな記憶処理を行われず(図6のステップS130のYES)、送信部103はステップS454でセットタイムスロットレスポンスを返す(図6のステップS132)。そしてモード設定部105はスリープモードを設定する(図6のステップS133)。
ステップS551でこのセットタイムスロットレスポンスを受信したフロントエンド63は、ステップS552でこのレスポンスをリクエストの送信元であるベースバンドコントローラ61に送信する。受信部82がステップS406でこのレスポンスを受信したベースバンドコントローラ61は、これによりセキュアエレメント62−0がスリープモードに遷移したことを知ることができる。
いまの場合、セキュアエレメント62−1,62−2の識別番号をまだ識別していないので、ステップS407において、ベースバンドコントローラ61の送信部81はポーリングリクエストを全てのシステムコードのセキュアエレメント62を対象に送信する。フロントエンド63はステップS553においてこのリクエストを受信すると、ステップS554において、このリクエストを全セキュアエレメント62にブロードキャスト送信または経路制御して送信する。セキュアエレメント62−0,62−1,62−2の受信部102が,それぞれステップS455,S483,S513でこれを受信する。ただしいまの場合、セキュアエレメント62−0は既にスリープモードに遷移しており、セキュアエレメント62−1,62−2のみがランダムなタイムスロット番号のタイミングで応答を返す。
例えばセキュアエレメント62−2が先に応答したとすると、ステップS514においてその送信部103は、このリクエストに対して、自分自身の識別番号であるID2を付加して、リクエストの送信元であるベースバンドコントローラ61に対してポーリングレスポンスを送信する。ステップS555でこのレスポンスを受信したフロントエンド63は、ステップS556においてこのレスポンスを、ベースバンドコントローラ61に送信する。ステップS408でベースバンドコントローラ61の受信部82は、このレスポンスを受信する。
次に、セキュアエレメント62−1が応答したとすると、ステップS484においてその送信部103は、ポーリングリクエストに対して、自分自身の識別番号であるID1を付加して、リクエストの送信元であるベースバンドコントローラ61に対してポーリングレスポンスを送信する。ステップS557でこのレスポンスを受信したフロントエンド63は、ステップS558においてこのレスポンスを、ベースバンドコントローラ61に送信する。ステップS409でベースバンドコントローラ61の受信部82は、このレスポンスを受信する。
ベースバンドコントローラ61はレスポンスを受信した順番にタイムスロット番号の設定処理を実行する。すなわち、ステップS410においてベースバンドコントローラ61の送信部81は、セットタイムスロットリクエストを識別番号がID2であるセキュアエレメント62−2に対して送信する。このリクエストには、タイムスロット番号TSNとして、最小の値TSN0の次に早いタイミングの番号TSN1が設定される。
ステップS559でこのリクエストを受信したフロントエンド63はステップS560において、このリクエストを識別番号がID2であるセキュアエレメント62−2に送信する。ステップS515でセキュアエレメント62−2の受信部102はこのリクエストを受信する。もちろんリクエストはセキュアエレメント62−0,62−1にも送信され、ステップS456,S485でそれぞれ受信されるが、宛先が一致しないのでそこでは無視される。
ステップS515において、セキュアエレメント62−2は、その受信部102でこのリクエストを受信すると、記憶部104はそのタイムスロット番号TSN1を揮発的に記憶する。その結果、以後、セキュアエレメント62−2は、記憶したタイムスロット番号TSN1のタイミングで通信する。
ステップS516においてセキュアエレメント62−2の送信部101は、セットタイムスロットレスポンスを、リクエストの送信元であるベースバンドコントローラ61に送信する。(図6のステップS132)このレスポンスには、送信者の識別番号としてID2が付加されるとともに、確認のため、設定、記憶したタイムスロット番号TSN1が付加されている。このレスポンスを出力すると、スリープモードが設定される(図6のステップS133)。
ステップS561でこのレスポンスを受信すると、ステップS562においてフロントエンド63は、このレスポンスをベースバンドコントローラ61に送信する。ベースバンドコントローラ61の受信部82は、ステップS411でこのレスポンスを受信することで、タイムスロット番号がセキュアエレメント62−2に記憶されたことを確認することができる。
ステップS484で送信されたセキュアエレメント62−1からのレスポンスを衝突で正しく受信できなかった場合には、ベースバンドコントローラ61はステップS412において、再びポーリングリクエストを全てのシステムコードのセキュアエレメント62を対象に送信する。フロントエンド63はステップS563においてこのリクエストを受信すると、ステップS564において、このリクエストを全セキュアエレメント62にブロードキャスト送信または経路制御して送信する。セキュアエレメント62−0,62−1,62−2の受信部102が,それぞれステップS457,S486,S517でこれを受信する。ただしいまの場合、セキュアエレメント62−0,62−2は既にスリープモードに遷移しており、セキュアエレメント62−1のみがランダムなタイムスロット番号のタイミングで応答を返す。
セキュアエレメント62−1の送信部103は、ステップS487において、ポーリングリクエストに対して、自分自身の識別番号であるID1を付加して、リクエストの送信元であるベースバンドコントローラ61に対してポーリングレスポンスを送信する。ステップS565でこのレスポンスを受信したフロントエンド63は、ステップS566においてこのレスポンスを、ベースバンドコントローラ61に送信する。ステップS413でベースバンドコントローラ61の受信部82は、このレスポンスを受信する。
次にベースバンドコントローラ61はタイムスロット番号の設定処理を実行する。すなわち、ステップS414においてベースバンドコントローラ61の送信部81は、セットタイムスロットリクエストを識別番号がID1であるセキュアエレメント62−1に対して送信する。このリクエストには、タイムスロット番号TSN2が設定される。
ステップS567でこのリクエストを受信したフロントエンド63はステップS568において、このリクエストを識別番号がID1であるセキュアエレメント62−1に送信する。ステップS488でセキュアエレメント62−1の受信部102はこのリクエストを受信する。もちろんリクエストはセキュアエレメント62−0,62−2にも送信され、ステップS458,S518でそれぞれ受信されるが、宛先が一致しないのでそこでは無視される。
ステップS488において、セキュアエレメント62−1は、その受信部102でこのリクエストを受信すると、記憶部104はそのタイムスロット番号TSN2を揮発的に記憶する。その結果、以後、セキュアエレメント62−1は、記憶したタイムスロット番号TSN2のタイミングで通信する。
ステップS489においてセキュアエレメント62−1の送信部101は、セットタイムスロットレスポンスを、リクエストの送信元であるベースバンドコントローラ61に送信する。このレスポンスには、送信者の識別番号としてID1が付加されるとともに、確認のため、設定、記憶したタイムスロット番号TSN2が付加されている。このレスポンスを出力したとき、セキュアエレメント62−1のモードはスリープモードに遷移する(図6のステップS133)。
ステップS569でこのレスポンスを受信すると、ステップS570においてフロントエンド63は、このレスポンスをベースバンドコントローラ61に送信する。ベースバンドコントローラ61の受信部82は、ステップS415でこのレスポンスを受信することで、タイムスロット番号がセキュアエレメント62−1に記憶されたことを確認することができる。
以上のようにしてタイムスロット番号の設定が完了したので、セキュアエレメント62のモードをノーマルモードに戻す処理が次のように行われる。
ステップS416においてベースバンドコントローラ61の送信部81は、リセットリクエストを識別番号がID0であるセキュアエレメント62−0に対して送信する。
ステップS571でこのリクエストを受信したフロントエンド63はステップS572において、このリクエストを識別番号がID0であるセキュアエレメント62−0に送信する。ステップS459でセキュアエレメント62−0の受信部102はこのリクエストを受信する。もちろんリクエストはセキュアエレメント62−1,62−2にも送信され、ステップS490,S519でそれぞれ受信されるが、宛先が一致しないのでそこでは無視される。
ステップS459において、セキュアエレメント62−0は、その受信部102でこのリクエストを受信すると、ステップS460において送信部103は、識別番号ID0を付加したレスポンスを、リクエストの送信元のベースバンドコントローラ61に送信し(図6のステップS134)、モード設定部105はノーマルモードを設定する(図6のステップS135)。その結果、以後、セキュアエレメント62−0は、通常の処理が可能となる。
ステップS573でこのレスポンスを受信すると、ステップS574においてフロントエンド63は、このレスポンスをベースバンドコントローラ61に送信する。ベースバンドコントローラ61の受信部82は、ステップS417でこのレスポンスを受信することで、セキュアエレメント62−0がノーマルモードに遷移したことを確認することができる。
同様に、他のセキュアエレメント62をノーマルモードに遷移させるための処理が実行される。
ステップS418においてベースバンドコントローラ61の送信部81は、リセットリクエストを識別番号がID2であるセキュアエレメント62−2に対して送信する。
ステップS575でこのリクエストを受信したフロントエンド63はステップS576において、このリクエストを識別番号がID2であるセキュアエレメント62−2に送信する。ステップS520でセキュアエレメント62−2の受信部102はこのリクエストを受信する。もちろんリクエストはセキュアエレメント62−0,62−1にも送信され、ステップS461,S491でそれぞれ受信されるが、宛先が一致しないのでそこでは無視される。
ステップS520において、セキュアエレメント62−2は、その受信部102でこのリクエストを受信すると、ステップS521において送信部103は、識別番号ID2を付加したレスポンスを、リクエストの送信元のベースバンドコントローラ61に送信し(図6のステップS134)、モード設定部105はノーマルモードを設定する(図6のステップS135)。その結果、以後、セキュアエレメント62−2は、通常の処理が可能となる。
ステップS577でこのレスポンスを受信すると、ステップS578においてフロントエンド63は、このレスポンスをベースバンドコントローラ61に送信する。ベースバンドコントローラ61の受信部82は、ステップS419でこのレスポンスを受信することで、セキュアエレメント62−2がノーマルモードに遷移したことを確認することができる。
さらにステップS420においてベースバンドコントローラ61の送信部81は、リセットリクエストを識別番号がID1であるセキュアエレメント62−1に対して送信する。
ステップS579でこのリクエストを受信したフロントエンド63はステップS580において、このリクエストを識別番号がID1であるセキュアエレメント62−1に送信する。ステップS492でセキュアエレメント62−1の受信部102はこのリクエストを受信する。もちろんリクエストはセキュアエレメント62−0,62−2にも送信され、ステップS462,S522でそれぞれ受信されるが、宛先が一致しないのでそこでは無視される。
ステップS492において、セキュアエレメント62−1は、その受信部102でこのリクエストを受信すると、ステップS493において送信部103は、識別番号ID1を付加したレスポンスを、リクエストの送信元のベースバンドコントローラ61に送信し(図6のステップS134)、モード設定部105はノーマルモードを設定する(図6のステップS135)。その結果、以後、セキュアエレメント62−1は、通常の処理が可能となる。
ステップS581でこのレスポンスを受信すると、ステップS582においてフロントエンド63は、このレスポンスをベースバンドコントローラ61に送信する。ベースバンドコントローラ61の受信部82は、ステップS420でこのレスポンスを受信することで、セキュアエレメント62−1がノーマルモードに遷移したことを確認することができる。
なお、以上においては、各セキュアエレメント62を個々に指定してリセットリクエストを出力するようにしたが、全てのセキュアエレメント62をまとめて対象として指定することも可能である。
以上のようにしてタイムスロット番号が重ならないように割り当てられるので、以後、衝突は発生しない。例えば外部NFCデバイス52からポーリングがかけられた場合の処理は図15に示されるようになる。
ステップS601において外部NFCデバイス52は、NFCデバイス51に対してポーリングリクエストを出力する。このとき通信先のシステムコードは全てAllとされ、タイムスロット番号は設定可能な最大の番号TSNmaxとされる。
NFCデバイス51のフロントエンド63はステップS611でこのリクエストを受信すると、ステップS612において、これをそのNFCデバイス51内の各部に供給する。各セキュアエレメント62−2,62−1,62−0とベースバンドコントローラ61は、ステップS631,S641,S651,S661において、それぞれこのリクエストを受信する。
各セキュアエレメント62は、このリクエストに対してそれぞれ設定されたタイムスロット番号のタイミングで応答する。すなわち、ステップS652において、最も早いタイムスロット番号TSN0が設定されているセキュアエレメント62−0が自分自身の識別番号ID0を付加してポーリングレスポンスを返す。フロントエンド63はステップS613においてこのレスポンスを受信すると、ステップS614において、それを外部NFCデバイス52と、各セキュアエレメント62に供給する。
外部NFCデバイス52はステップS602においてこのレスポンスを受信する。これにより外部NFCデバイス52は、セキュアエレメント62−0の識別番号を知ることができる。セキュアエレメント62−2,62−1,62−0とベースバンドコントローラ61は、それぞれステップS632,S642,S653,S662において、このレスポンスを受信するが、リクエストを出力していないので、それを無視する。
次に、ステップS633において、次に早いタイムスロット番号TSN1が設定されているセキュアエレメント62−2が自分自身の識別番号ID2を付加してポーリングレスポンスを返す。フロントエンド63はステップS615においてこのレスポンスを受信すると、ステップS616において、それを外部NFCデバイス52と、各セキュアエレメント62に供給する。
外部NFCデバイス52はステップS603においてこのレスポンスを受信する。これにより外部NFCデバイス52は、セキュアエレメント62−2の識別番号を知ることができる。セキュアエレメント62−2,62−1,62−0とベースバンドコントローラ61はステップS634,S643,S654,S663において、それぞれこのレスポンスを受信するが、リクエストを出力していないので、それを無視する。
さらにステップS644において、最も遅いタイムスロット番号TSN2が設定されているセキュアエレメント62−1が自分自身の識別番号ID1を付加してポーリングレスポンスを返す。フロントエンド63はステップS617においてこのレスポンスを受信すると、ステップS618において、それを外部NFCデバイス52と、各セキュアエレメント62に供給する。
外部NFCデバイス52はステップS604においてこのレスポンスを受信する。これにより外部NFCデバイス52は、セキュアエレメント62−1の識別番号を知ることができる。セキュアエレメント62−2,62−1,62−0とベースバンドコントローラ61はステップS635,S645,S655,S664において、それぞれこのレスポンスを受信するが、リクエストを出力していないので、それを無視する。
このように、タイムスロット番号が重ならないように設定されているので、各番号のタイムスロットに割り当てられている時間が短い場合でも、衝突が発生せず、迅速な通信が可能となる。
次に、NFCデバイス51が外部NFCデバイス52からデータを読み出す場合の処理について、図16を参照して説明する。
ステップS671においてNFCデバイス51のベースバンドコントローラ61は、NFCデバイス51に対してポーリングリクエストを出力する。このとき通信先のシステムコードは外部NFCデバイス52のシステムコードSCEとされ、タイムスロット番号は設定可能な最大の番号TSNmaxとされる。
NFCデバイス51のフロントエンド63はステップS721でこのリクエストを受信すると、ステップS722において、それをNFCデバイス51内の各部と外部NFCデバイス52に供給する。各セキュアエレメント62−2,62−1,62−0とベースバンドコントローラ61は、ステップS711,S691,S681,S672において、それぞれこのリクエストを受信し、外部NFCデバイス52はステップS741でこのリクエストを受信する。
各セキュアエレメント62とベースバンドコントローラ61は、システムコードが一致しないので応答はしない。外部NFCデバイス52は、システムコードが自分自身のシステムコードSCEと一致するため、このリクエストに対してランダムなタイムスロット番号のタイミングで応答する。すなわち、ステップS742において、自分自身の識別番号IDEを付加してポーリングレスポンスを返す。フロントエンド63はステップS723においてこのレスポンスを受信すると、ステップS724において、それを各セキュアエレメント62とベースバンドコントローラ61に供給する。
セキュアエレメント62−2,62−1,62−0は、それぞれステップS712,S692,S682において、このレスポンスを受信するが、ポーリングリクエストを出力していないのでこれを無視する。ポーリングリクエストを出力したベースバンドコントローラ61はステップS673においてこのレスポンスを受信することで、外部NFCデバイス52の識別番号を知ることができる。
次に、ステップS674において、ベースバンドコントローラ61は相手の識別番号IDEを指定して、リードリクエストを送信する。フロントエンド63はステップS725でこのリクエストを受信すると、ステップS726において、それをNFCデバイス51内の各部と外部NFCデバイス52に供給する。各セキュアエレメント62−2,62−1,62−0とベースバンドコントローラ61は、ステップS713,S693,S683,S675において、それぞれこのリクエストを受信するが、識別番号が一致しないので、それを無視する。外部NFCデバイス52はステップS743でこのリクエストを受信する。
ステップS743でリードリクエストを受信した外部NFCデバイス52は、ステップS744で、自分自身の識別番号IDEを付加してリードレスポンスを返す。フロントエンド63はステップS727においてこのレスポンスを受信すると、ステップS728において、それを各セキュアエレメント62とベースバンドコントローラ61に供給する。
セキュアエレメント62−2,62−1,62−0はステップS714,S694,S684において、それぞれこのレスポンスを受信するが、リードリクエストを出力していないのでそれを無視する。ベースバンドコントローラ61はステップS676でこのレスポンスを受信する。従って、以後、ベースバンドコントローラ61は外部NFCデバイス52からデータを読み出すことができる。
逆に外部NFCデバイス52がNFCデバイス51の例えばセキュアエレメント62−1からデータを読み出す場合の処理は、図17に示されるようになる。
ステップS801において外部NFCデバイス52は、NFCデバイス51に対してポーリングリクエストを出力する。このとき通信先のシステムコードはセキュアエレメント62−1のシステムコードSC1とされ、タイムスロット番号は設定可能な最大の番号TSNmaxとされる。
NFCデバイス51のフロントエンド63はステップS811でこのリクエストを受信すると、ステップS812において、それをNFCデバイス51内の各部に供給する。各セキュアエレメント62−2,62−1,62−0とベースバンドコントローラ61は、ステップS831,S841,S861,S871において、それぞれこのリクエストを受信する。
セキュアエレメント62−0,62−2とベースバンドコントローラ61は、システムコードが一致しないので応答はしない。セキュアエレメント62−1は、システムコードが自分自身のシステムコードSC1と一致するため、このリクエストに対して、設定されているタイムスロット番号TSN2のタイミングで応答する。すなわち、ステップS842において、自分自身の識別番号ID1を付加してポーリングレスポンスを返す。フロントエンド63はステップS813においてこのレスポンスを受信すると、ステップS814において、それを各セキュアエレメント62、ベースバンドコントローラ61、並びに外部NFCデバイス52に供給する。
セキュアエレメント62−2,62−1,62−0とベースバンドコントローラ61は、それぞれステップS832,S843,S862,S872において、このレスポンスを受信するが、リクエストは出力していないのでこれを無視する。リクエストを出力した外部NFCデバイス52はステップS802においてこのレスポンスを受信することで、セキュアエレメント62−1の識別番号ID1を知ることができる。
次に、ステップS803において、外部NFCデバイス52は相手の識別番号ID1を指定して、リードリクエストを送信する。フロントエンド63はステップS815でこのリクエストを受信すると、ステップS816において、それをNFCデバイス51内の各部に供給する。各セキュアエレメント62−2,62−0とベースバンドコントローラ61は、ステップS833,S863,S873において、それぞれこのリクエストを受信するが、識別番号が一致しないので、それを無視する。セキュアエレメント62−1はステップS844でこのリクエストを受信する。
ステップS844でリードリクエストを受信したセキュアエレメント62−1は、ステップS845で、自分自身の識別番号ID1を付加してリードレスポンスを返す。フロントエンド63はステップS817においてこのレスポンスを受信すると、ステップS818において、それを各セキュアエレメント62、ベースバンドコントローラ61、並びに外部NFCデバイス52に供給する。
セキュアエレメント62−2,62−1,62−0とベースバンドコントローラ61はステップS834,S846,S864,S874において、それぞれこのレスポンスを受信するが、リクエストを出力していないので、これを無視する。外部NFCデバイス52はステップS804でこのレスポンスを受信する。従って、以後、外部NFCデバイス52はセキュアエレメント62−1からデータを読み出すことができる。
上述した一連の処理は、ハードウエアにより実行させることもできるし、ソフトウエアにより実行させることもできる。一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム記録媒体からインストールされる。
なお、本明細書において、プログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。