(57)【要約】【課題】複数のリーダライタどうしが混信を生じる環境下にあっても、ICカードとの通信を、容易に行う。【解決手段】リーダライタ１は、ICカード３に対して、コマンドパケットを送信した後、タイムアウト時間が経過する前は、受信パケットにエラーがあっても、コマンドパケットの再送を行わずに、受信待機状態となって、パケットが送信されてくるのを待ち、タイムアウト時間内に受信された受信パケットにエラーがない場合には、その受信パケットを、コマンドパケットに対する正常なレスポンスパケットとして、そのレスポンスパケットに応じた処理を行い、タイムアウト時間が経過したときのみ、コマンドパケットの再送を行う。本発明は、例えば、ICカードシステムに適用できる。【選択図】図４
2006211518.tif 000002
【特許請求の範囲】
【請求項１】
非接触で通信を行う通信装置において、
コマンドを送信させる送信制御手段と、
前記コマンドに対するレスポンスを待つタイムアウト時間が経過したか否かをチェックするタイムアウト時間チェック手段と、
前記タイムアウト時間が経過したときのみ、前記コマンドを再送させる再送制御手段と、
前記タイムアウト時間内に受信された受信データにエラーがあるか否かをチェックするエラーチェック手段と、
前記タイムアウト時間内に受信された受信データにエラーがない場合、その受信データを、前記コマンドに対する正常なレスポンスとして、そのレスポンスに応じた処理を行う処理手段と
を備え、
前記タイムアウト時間内に受信された受信データにエラーがある場合、
前記再送制御手段は、前記コマンドを再送させず、
前記タイムアウト時間チェック手段は、前記タイムアウト時間が経過したか否かのチェックを続行する
ことを特徴とする通信装置。
【請求項２】
前記受信データは、その受信データのデータ長、エラーチェック用のコード、または前記受信データの種別を表すコードを含み、
前記エラーチェック手段は、前記データ長、エラーチェック用のコード、または種別を表すコードに基づき、前記受信データにエラーがあるか否かをチェックする
ことを特徴とする請求項１に記載の通信装置。
【請求項３】
非接触で通信を行う通信装置の通信方法において、
コマンドを送信させる送信制御ステップと、
前記コマンドに対するレスポンスを待つタイムアウト時間が経過したか否かをチェックするタイムアウト時間チェックステップと、
前記タイムアウト時間が経過したときのみ、前記コマンドを再送させる再送制御ステップと、
前記タイムアウト時間内に受信された受信データにエラーがあるか否かをチェックするエラーチェックステップと、
前記タイムアウト時間内に受信された受信データにエラーがない場合、その受信データを、前記コマンドに対する正常なレスポンスとして、そのレスポンスに応じた処理を行う処理ステップと
を含み、
前記タイムアウト時間内に受信された受信データにエラーがある場合、
前記再送制御ステップでは、前記コマンドを再送させず、
前記タイムアウト時間チェックステップでは、前記タイムアウト時間が経過したか否かのチェックを続行する
ことを特徴とする通信方法。
【請求項４】
非接触で通信を行う通信装置を制御するコンピュータに実行させるプログラムにおいて、
コマンドを送信させる送信制御ステップと、
前記コマンドに対するレスポンスを待つタイムアウト時間が経過したか否かをチェックするタイムアウト時間チェックステップと、
前記タイムアウト時間が経過したときのみ、前記コマンドを再送させる再送制御ステップと、
前記タイムアウト時間内に受信された受信データにエラーがあるか否かをチェックするエラーチェックステップと、
前記タイムアウト時間内に受信された受信データにエラーがない場合、その受信データを、前記コマンドに対する正常なレスポンスとして、そのレスポンスに応じた処理を行う処理ステップと
を含み、
前記タイムアウト時間内に受信された受信データにエラーがある場合、
前記再送制御ステップでは、前記コマンドを再送させず、
前記タイムアウト時間チェックステップでは、前記タイムアウト時間が経過したか否かのチェックを続行する
処理をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信方法、およびプログラムに関し、特に、例えば、IC(Integrated Circuit)カードと非接触で通信を行うリーダライタが、他のリーダライタとの間で混信を生じる場合であっても、ICカードとの通信を、容易に行うことができるようにする通信装置、通信方法、およびプログラムに関する。
【背景技術】
【０００２】
近年、ICカードとリーダライタとが電磁波により非接触で通信を行う非接触式ICカードシステムが急速に普及している。
【０００３】
非接触式ICカードシステムでは、例えば、リーダライタは、電磁波を出力しており、リーダライタにICカードをかざすと、ICカードは、リーダライタが出力する電磁波により生じる相互誘導によって、電源を得て動作し、リーダライタとの通信を開始する。そして、リーダライタからICカードへのデータの送信は、リーダライタにおいて、自身が出力する電磁波を変調することによって行われ、ICカードからリーダライタへのデータの送信は、ICカードにおいて、リーダライタが出力する無変調の電磁波を、いわゆる負荷変調することによって行われる。
【０００４】
このように、非接触式ICカードシステムでは、ICカードとリーダライタとの通信が非接触で行われるため、その利便性は高く、現在、例えば、駅の自動改札機等で広く利用されている。
【０００５】
ところで、自動改札機では、短時間に、多くの人の入退場を処理する必要があるため、多くのリーダライタを設置することが要請される。しかしながら、自動改札機としてのリーダライタは、駅の改札口という限られた空間の中に設置しなければならず、多くのリーダライタを設置しようとすれば、リーダライタどうしは、必然的に、近接して設置されることになる。
【０００６】
このように、リーダライタどうしが近接して設置されている場合において、近接している複数のリーダライタが、同一周波数のキャリア（搬送波）を使用しているときには、その複数のリーダライタが出力する電磁波が、相互干渉を起こして混信し、リーダライタが、そこにかざされたICカードと通信することができなくなることがある。
【０００７】
即ち、図１は、複数のリーダライタどうしが混信を起こしている状態を示している。
【０００８】
図１においては、ICカードCが、リーダライタAにかざされており、従って、リーダライタAは、ICカードCとのみ通信を行うべきである。
【０００９】
しかしながら、図１に示すように、リーダライタAに近接して他のリーダライタBが設置されている場合、リーダライタAが出力する電磁波と、他のリーダライタBが出力する電磁波とが相互干渉を起こし、リーダライタAにおいて、相互干渉を起こした電磁波が、ICカードCによって負荷変調された電磁波として受信される。これにより、リーダライタAと、本来の通信相手であるICカードCとの通信が妨げられる。
【００１０】
そこで、このような、リーダライタAとICカードCとの通信が妨げられることを防止する方法として、リーダライタAとBを、それら（の電磁波）が相互干渉を起こさないように、ある程度の距離をおいて設置する第１の方法がある。
【００１１】
しかしながら、第１の方法では、例えば、改札口に設置することができるリーダライタの数が少なくなり、その結果、短時間に、多くの入退場者を処理することが困難となる。
【００１２】
そこで、例えば、リーダライタに、干渉を検出する干渉検出手段を設け、干渉が生じる状態では、データ通信を行わないようにする第２の方法（例えば、特許文献１参照）や、隣接するリーダライタどうしでは、放射電磁界の位相が反転するようにする第３の方法（例えば、特許文献２参照）、リーダライタにキャリアの周波数を変更する機能を備える第４の方法（例えば、特許文献３参照）がある。
【００１３】
しかしながら、第２の方法では、その干渉検出手段としての新たなハードウェアを、リーダライタに設ける必要があり、リーダライタのコストが大になる。
【００１４】
また、隣接するリーダライタどうしにおいて放射電磁界の位相を反転させる第３の方法では、やはり、位相の反転を行うための新たなハードウェアを設ける必要がある。さらに、第３の方法では、リーダライタを設置する設置者が、隣接して配置されるリーダライタは必ず放射電磁界が反転するという設置条件を満たすように、リーダライタの設置位置を設計（計画）して、リーダライタを設置する必要があり、面倒である。
【００１５】
また、第４の方法では、リーダライタを設置する設置者が、リーダライタのキャリアの周波数を管理する必要があり、特に、リーダライタを新たに増設するときや、リーダライタの配置位置を変更するときの設置者の負担が大になる。
【００１６】
そこで、リーダライタが、ICカードから、正しいレスポンスパケットを受信することができない受信エラーが発生した場合は、リーダライタにおいて、ICカードに対し、コマンドパケットを再送する（コマンドパケットの送信のリトライを行う）第５の方法がある。
【００１７】
即ち、非接触式ICカードシステムを構成するリーダライタとICカードとの間では、非接触通信によって、パケットがやりとりされるが、リーダライタは、所定の処理の実行を指示するコマンドの情報が含まれるパケットであるコマンドパケットをICカードに送信し、ICカードは、リーダライタからのコマンドパケットに対する応答（レスポンス）のパケットであるレスポンスパケットをリーダライタに送信する。
【００１８】
第５の方法では、リーダライタが、コマンドパケットの送信後、パケット（レスポンスパケット）が送信されてくるのを待って受信し、そのパケットにエラーがあるか否かをチェックするエラーチェックを行う。そして、リーダライタが受信したパケットにエラーがある場合、リーダライタは、コマンドパケットを、即座に再送する。その後、リーダライタは、パケット（レスポンスパケット）の受信、そのパケットのエラーチェック、およびコマンドパケットの再送を、ICカードからの正常なレスポンスパケットを受信することができるまで繰り返す。
【００１９】
第５の方法は、例えば、１台のリーダライタにかざされたICカードの近くに、他のICカードが偶然に存在し、リーダライタが送信したコマンドパケットに対して、そのリーダライタにかざされたICカードと、そのICカードの近くに存在する他のICカードとの両方が反応して、その両方のICカードが、リーダライタからのコマンドパケットに対するレスポンスパケットを送信することにより生じる干渉（混信）には有効である。
【００２０】
しかしながら、図１で説明したように、近接して設置された２つのリーダライタAとBの間で混信（干渉）が生じている場合、上述のようなコマンドパケットの再送を行う第５の方法によって、リーダライタAと、それにかざされたICカードCとの間の通信性能を向上させることができるとは限らず、むしろ劣化させることがある。
【００２１】
即ち、図２および図３は、近接して設置された２つのリーダライタAとBのうちの一方であるリーダライタAに対して、ICカードCがかざされた場合の、リーダライタAおよびB、並びにICカードCの動作を示している。
【００２２】
図２において、リーダライタAは、ステップＳ１において、コマンドコードが0x10（0xは、その後に続く文字（列）が１６進数であることを表す）のコマンドパケットPA1を送信して、ステップＳ２に進み、その後、コマンドパケットPA1に対するレスポンスパケットの受信を待機する受信待機状態となる。
【００２３】
ここで、リーダライタAやBとICカードCとの間でやりとりされるパケットには、そのパケットの種別を表すコマンドコードまたはレスポンスコードが含まれている。コマンドまたはレスポンスコードは、それぞれ、例えば、パケットが、コマンドパケットまたはレスポンスパケットであることを表す。
【００２４】
図２では、リーダライタAが、ステップＳ１において、コマンドコードが0x10のコマンドパケットPA1を送信しているが、いま、コマンドコードが0x10のコマンドパケットに対するレスポンスパケットのレスポンスコードが、例えば、0x11であるとすると、リーダライタAは、ステップＳ２において、レスポンスコードが0x11のパケット（レスポンスパケット）の受信を待機する受信待機状態となる。
【００２５】
また、ICカードCは、ステップＳ１１において、リーダライタAが送信した、コマンドコードが0x10のコマンドパケットPA1を受信し、そのコマンドパケットに応じた処理を開始する。なお、ICカードCは、リーダライタAからのコマンドパケットPA1に応じた処理を行った後は、そのコマンドパケットPA1に対するレスポンスパケットとして、レスポンスコードが0x11のパケットを送信する。
【００２６】
一方、リーダライタBは、ICカードがかざされた（ICカードが近接する位置にある）ことを検出するためのポーリングを行っており、具体的には、例えば、コマンドコードが0x80のコマンドパケットを周期的に送信している。
【００２７】
図２では、リーダライタBは、ステップＳ２１において、コマンドコードが0x80のコマンドパケットPB1を送信し、以下、周期的に、コマンドコードが0x80のコマンドパケットを送信する。
【００２８】
リーダライタBがステップＳ２１においてパケットPB1を送信したときには、リーダライタAは、ステップＳ２において受信待機状態となっているので、ステップＳ３において、リーダライタBからのパケットPB1を受信する。
【００２９】
しかしながら、リーダライタBからのパケットPB1は、コマンドコードが0x80のコマンドパケットであり、リーダライタAが受信を待機している、コマンドパケットPA1に対するレスポンスパケット、つまり、レスポンスコードが0x11のパケットではないので、リーダライタAは、ステップＳ３で受信したパケットPB1にエラーがあるとして、ステップＳ３からステップＳ４に進み、コマンドパケットを再送する。即ち、リーダライタAは、コマンドコードが0x10のパケットとして、コマンドパケットPA2を送信する。
【００３０】
従って、リーダライタAが、コマンドコードが0x10のパケット（コマンドパケット）の再送中に、ICカードCが、先のコマンドパケットPA1に対するレスポンスパケットを送信してきた場合には、リーダライタAは、ICカードCからのレスポンスパケットを受信することができない。
【００３１】
また、非接触式ICカードシステムを構成するリーダライタとICカードとの間でやりとりされるパケットには、シーケンスID(Identification)が含まれる場合がある。シーケンスIDは、正規のリーダライタとICカードとの通信が行われている場合に、不正なリーダライタまたはICカードが、その通信に割り込んで、正規のリーダライタまたはICカードになりすます、いわゆるなりすましを防止するために、正規のリーダライタとICカードによって、例えば、１ずつインクリメントされる値である。
【００３２】
図３は、リーダライタとICカードとの間で、シーケンスIDを含むパケットがやりとりされる場合の、リーダライタAおよびB、並びにICカードCの動作を示している。
【００３３】
リーダライタAは、ステップＳ３１において、例えば、シーケンスIDが11のパケット（コマンドパケット)PA1を送信し、図２における場合と同様に、そのパケットPA1に対するレスポンスパケットの受信を待機する受信待機状態となる。
【００３４】
リーダライタAにかざされたICカードCは、ステップＳ４１において、リーダライタAからのパケットPA1を受信し、そのパケットPA1に応じた処理を開始する。
【００３５】
一方、リーダライタBは、図２で説明した場合と同様に、ポーリングを行っており、図３では、ステップＳ５１において、パケット（コマンドパケット）PBを送信している。
【００３６】
リーダライタBがステップＳ５１においてパケットPBを送信したときには、リーダライタAは、受信待機状態となっており、ステップＳ３２において、リーダライタBからのパケットPBを受信する。
【００３７】
リーダライタBからのパケットPBは、コマンドパケットであり、リーダライタAが受信を待機している、コマンドパケットPA1に対するレスポンスパケットではない。
【００３８】
このため、リーダライタAは、図２における場合と同様に、ステップＳ３２で受信したパケットPBにエラーがあるとして、ステップＳ３２からステップＳ３３に進み、パケット（コマンドパケット）を再送する。即ち、リーダライタAは、パケットPA1を再送するパケットとして、パケットPA2を送信する。
【００３９】
このとき、リーダライタAは、前回送信したパケットPA1のシーケンスIDが11であったので、今回送信するパケットPA2のシーケンスIDを、11に1を加算した12にする。
【００４０】
ICカードCは、ステップＳ４２において、リーダライタAからのパケットPA2を受信する。
【００４１】
また、ICカードCは、ステップＳ４１で受信した、シーケンスIDが11のパケットPA1に応じた処理が終了すると、そのパケットPA1に対するレスポンスパケットとしてのパケットPCを送信する。
【００４２】
パケットPCは、リーダライタAからのシーケンスIDが11のパケットPA1に対するレスポンスパケットであるので、ICカードCは、パケットPCのシーケンスIDを、11に1を加算した12にする。
【００４３】
リーダライタAは、ステップＳ３４において、ICカードCからのパケットPCを受信するが、このパケットPCのシーケンスIDは12になっており、リーダライタAが直前に送信したパケットPA2のシーケンスIDである12を１だけインクリメントした値(13)になっていない。
【００４４】
このため、リーダライタAは、ステップＳ３４で受信したパケットPCにエラーがあるとして（この場合は、パケットPCが不正なパケットであるとして）、ステップＳ３４からステップＳ３５に進み、パケットを再送する。即ち、リーダライタAは、パケットPA1を再送するパケットとして、パケットPA3を送信する。
【００４５】
なお、このとき、リーダライタAは、前回送信したパケットPA2のシーケンスIDが12であったので、今回送信するパケットPA3のシーケンスIDを、12に1を加算した13にする。
【００４６】
リーダライタAがステップＳ３４で受信したパケットPCは、リーダライタAがステップＳ３１で送信したパケットPA1に対する正常なレスポンスパケットではあるが、リーダライタAがステップＳ３３で、パケットPA1を再送するパケットとしてのパケットPA2を送信した後に、ICカードCから送信されてきたため、リーダライタAでは、パケットPA1に対しては正常なレスポンスパケットPCが、パケットPA2に対する正常なレスポンスパケットではなく、エラーが生じているとして扱われ、パケットの再送が再度行われる。
【００４７】
【特許文献１】特開平10-293824号公報
【特許文献２】特開平11-345294号公報
【特許文献３】特開2000-20651号公報
【発明の開示】
【発明が解決しようとする課題】
【００４８】
以上のように、リーダライタAが受信したパケットにエラーがある場合に、リーダライタAにおいて、パケットを、即座に再送すると、リーダライタAとBとの間で生じた混信に起因して、リーダライタAが受信したパケットにエラーがあるとして、パケットの再送が頻繁に行われる。そして、これにより、リーダライタAと、そのリーダライタAにかざされたICカードCとの間の通信が妨げられ、通信性能（ICカードCの応答性）が劣化し、ひいては、非接触式ICカードシステム全体の信頼性が低くなる課題があった。
【００４９】
本発明は、このような状況に鑑みてなされたものであり、例えば、複数のリーダライタどうしが混信を生じる環境下にあっても、ICカードとの通信を、容易に行うことができるようにするものである。
【課題を解決するための手段】
【００５０】
本発明の通信装置は、コマンドを送信させる送信制御手段と、コマンドに対するレスポンスを待つタイムアウト時間が経過したか否かをチェックするタイムアウト時間チェック手段と、タイムアウト時間が経過したときのみ、コマンドを再送させる再送制御手段と、タイムアウト時間内に受信された受信データにエラーがあるか否かをチェックするエラーチェック手段と、タイムアウト時間内に受信された受信データにエラーがない場合、その受信データを、コマンドに対する正常なレスポンスとして、そのレスポンスに応じた処理を行う処理手段とを備え、タイムアウト時間内に受信された受信データにエラーがある場合、再送制御手段は、コマンドを再送させず、タイムアウト時間チェック手段は、タイムアウト時間が経過したか否かのチェックを続行することを特徴とする。
【００５１】
本発明の通信方法は、コマンドを送信させる送信制御ステップと、コマンドに対するレスポンスを待つタイムアウト時間が経過したか否かをチェックするタイムアウト時間チェックステップと、タイムアウト時間が経過したときのみ、コマンドを再送させる再送制御ステップと、タイムアウト時間内に受信された受信データにエラーがあるか否かをチェックするエラーチェックステップと、タイムアウト時間内に受信された受信データにエラーがない場合、その受信データを、コマンドに対する正常なレスポンスとして、そのレスポンスに応じた処理を行う処理ステップとを含み、タイムアウト時間内に受信された受信データにエラーがある場合、再送制御ステップでは、コマンドを再送させず、タイムアウト時間チェックステップでは、タイムアウト時間が経過したか否かのチェックを続行することを特徴とする。
【００５２】
本発明のプログラムは、コマンドを送信させる送信制御ステップと、コマンドに対するレスポンスを待つタイムアウト時間が経過したか否かをチェックするタイムアウト時間チェックステップと、タイムアウト時間が経過したときのみ、コマンドを再送させる再送制御ステップと、タイムアウト時間内に受信された受信データにエラーがあるか否かをチェックするエラーチェックステップと、タイムアウト時間内に受信された受信データにエラーがない場合、その受信データを、コマンドに対する正常なレスポンスとして、そのレスポンスに応じた処理を行う処理ステップとを含み、タイムアウト時間内に受信された受信データにエラーがある場合、再送制御ステップでは、コマンドを再送させず、タイムアウト時間チェックステップでは、タイムアウト時間が経過したか否かのチェックを続行することを特徴とする。
【００５３】
本発明においては、コマンドが送信され、コマンドに対するレスポンスを待つタイムアウト時間が経過したか否かがチェックされる。そして、タイムアウト時間が経過したときのみ、コマンドが再送される。また、タイムアウト時間内に受信された受信データにエラーがあるか否かがチェックされ、タイムアウト時間内に受信された受信データにエラーがない場合、その受信データを、コマンドに対する正常なレスポンスとして、そのレスポンスに応じた処理が行われる。一方、タイムアウト時間内に受信された受信データにエラーがある場合、コマンドは再送されず、タイムアウト時間が経過したか否かのチェックが続行される。
【発明の効果】
【００５４】
本発明によれば、例えば、混信が生じている環境下において、非接触での通信を、容易に行うことができる。具体的には、例えば、例えば、ICカードと非接触で通信を行うリーダライタが、他のリーダライタとの間で混信を生じる環境下にあっても、ICカードとの通信を、容易に行うことができる。
【発明を実施するための最良の形態】
【００５５】
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
【００５６】
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
【００５７】
請求項１に記載の通信装置は、
非接触で通信を行う通信装置（例えば、図４のリーダライタ１）において、
コマンドを送信させる送信制御手段（例えば、図６のステップＳ１０２の処理を行う図４のマイコン１１）と、
前記コマンドに対するレスポンスを待つタイムアウト時間が経過したか否かをチェックするタイムアウト時間チェック手段（例えば、図６のステップＳ１０４の処理を行う図４のマイコン１１）と、
前記タイムアウト時間が経過したときのみ、前記コマンドを再送させる再送制御手段（例えば、図６のステップＳ１１０の処理を行う図４のマイコン１１）と、
前記タイムアウト時間内に受信された受信データにエラーがあるか否かをチェックするエラーチェック手段（例えば、図６のステップＳ１０６，Ｓ１０７、またはＳ１０８の処理を行う図４のマイコン１１）と、
前記タイムアウト時間内に受信された受信データにエラーがない場合、その受信データを、前記コマンドに対する正常なレスポンスとして、そのレスポンスに応じた処理を行う処理手段（例えば、図６のステップＳ１０９の処理を行う図４のマイコン１１）と
を備え、
前記タイムアウト時間内に受信された受信データにエラーがある場合、
前記再送制御手段は、前記コマンドを再送させず、
前記タイムアウト時間チェック手段は、前記タイムアウト時間が経過したか否かのチェックを続行する
ことを特徴とする。
【００５８】
請求項３に記載の通信方法は、
非接触で通信を行う通信装置（例えば、図４のリーダライタ１）の通信方法において、
コマンドを送信させる送信制御ステップ（例えば、図６のステップＳ１０２）と、
前記コマンドに対するレスポンスを待つタイムアウト時間が経過したか否かをチェックするタイムアウト時間チェックステップ（例えば、図６のステップＳ１０４）と、
前記タイムアウト時間が経過したときのみ、前記コマンドを再送させる再送制御ステップ（例えば、図６のステップＳ１１０）と、
前記タイムアウト時間内に受信された受信データにエラーがあるか否かをチェックするエラーチェックステップ（例えば、図６のステップＳ１０６，Ｓ１０７、またはＳ１０８）と、
前記タイムアウト時間内に受信された受信データにエラーがない場合、その受信データを、前記コマンドに対する正常なレスポンスとして、そのレスポンスに応じた処理を行う処理ステップ（例えば、図６のステップＳ１０９）と
を含み、
前記タイムアウト時間内に受信された受信データにエラーがある場合、
前記再送制御ステップでは、前記コマンドを再送させず、
前記タイムアウト時間チェックステップでは、前記タイムアウト時間が経過したか否かのチェックを続行する
ことを特徴とする。
【００５９】
請求項４に記載のプログラムは、
非接触で通信を行う通信装置（例えば、図４のリーダライタ１）を制御するコンピュータ（例えば、図４のマイコン１１（CPU１１Ａ））に実行させるプログラムにおいて、
コマンドを送信させる送信制御ステップ（例えば、図６のステップＳ１０２）と、
前記コマンドに対するレスポンスを待つタイムアウト時間が経過したか否かをチェックするタイムアウト時間チェックステップ（例えば、図６のステップＳ１０４）と、
前記タイムアウト時間が経過したときのみ、前記コマンドを再送させる再送制御ステップ（例えば、図６のステップＳ１１０）と、
前記タイムアウト時間内に受信された受信データにエラーがあるか否かをチェックするエラーチェックステップ（例えば、図６のステップＳ１０６，Ｓ１０７、またはＳ１０８）と、
前記タイムアウト時間内に受信された受信データにエラーがない場合、その受信データを、前記コマンドに対する正常なレスポンスとして、そのレスポンスに応じた処理を行う処理ステップ（例えば、図６のステップＳ１０９）と
を含み、
前記タイムアウト時間内に受信された受信データにエラーがある場合、
前記再送制御ステップでは、前記コマンドを再送させず、
前記タイムアウト時間チェックステップでは、前記タイムアウト時間が経過したか否かのチェックを続行する
ことを特徴とする。
【００６０】
以下、図面を参照して、本発明の実施の形態について説明する。
【００６１】
図４は、本発明を適用したICカードシステムの一実施の形態の構成例を示している。
【００６２】
図１のICカードシステムにおいては、リーダライタ１が、ホストコンピュータ２の制御にしたがって動作し、ICカード３との間で、非接触での通信を行う。
【００６３】
リーダライタ１は、マイコン１１、I/F(Interface)１２、送信回路１３、変調回路１４、アンテナ１５、復調回路１６、外部回路１７、およびタイマ１８などで構成されている。
【００６４】
マイコン１１は、CPU(Central Processing Unit)１１Ａ，RAM(Random Access Memory)１１Ｂ、およびEEPROM(Electrically Erasable Programmable Read Only Memory)１１Ｃなどで構成され、プログラムを実行することにより、リーダライタ１の各部の制御、その他の各種の処理を行う。
【００６５】
即ち、CPU１１Ａは、EEPROM１１Ｃに記憶されたプログラムを（必要に応じてRAM１１Ｂにロードして）実行する。これにより、CPU１１Ａは、例えば、ICカード３に送信するパケット（コマンドパケット）の生成や、パケットを電磁波により送信させる送信制御、後述するタイムアウト時間が経過したか否かのチェック、パケットを電磁波により再送させる再送制御を行う。さらに、CPU１１Ａは、アンテナ１５で受信され、復調回路１６から供給されるパケット（受信データ）にエラーがあるか否かのチェックや、エラーがないパケット、つまり、ICカード３からの正常なレスポンスパケットに応じた処理なども行う。
【００６６】
なお、CPU１１Ａは、ICカード３に送信するパケットを生成し、電磁波により送信させるため、そのパケットを、変調回路１４に供給するが、その際、変調回路１４に供給するパケットを、マンチェスタ符号等にエンコードするエンコード処理も行う。さらに、CPU１１Ａは、アンテナ１５で受信され、復調回路１６から供給されるパケットを受信するが、そのパケットはマンチェスタ符号等にエンコードされているので、そのマンチェスタ符号等をデコードするデコード処理も行う。
【００６７】
RAM１１Ｂは、CPU１１Ａが実行するプログラムや、CPU１１Ａの動作上必要なデータ等を一時記憶する。EEPROM１１Ｃには、CPU１１Ａが実行するプログラムがインストールされる。その他、EEPROM１１Ｃには、必要なデータが記憶される。
【００６８】
I/F１２は、ホストコンピュータ２とマイコン１１との間のインタフェースであり、ホストコンピュータ２は、I/F１２を介して、マイコン１１を制御する。また、マイコン１１は、ホストコンピュータ２に供給すべきデータを、I/F１２を介して、ホストコンピュータ２に転送する。
【００６９】
なお、マイコン１１（CPU１１Ａ）が実行するプログラムは、あらかじめ、EEPROM１１Ｃにインストールしておくことができる他、ホストコンピュータ２からI/F１２を介して、EEPROM１１Ｃにインストールすることができる。その他、プログラムは、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory)，MO(Magneto Optical)ディスク，DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブルな記録媒体に記録し、その記録媒体を、図示せぬドライブで駆動して、EEPROM１１にインストールすることができる。
【００７０】
また、プログラムは、ダウンロードサイトから、ディジタル衛星放送用の人工衛星を介して、リーダライタ１に無線で転送したり、LAN(Local Area Network)、インターネットといったネットワークを介して、リーダライタ１に有線で転送し、リーダライタ１では、そのようにして転送されてくるプログラムを、I/F１２で受信し、EEPROM１１Ｃにインストールすることができる。
【００７１】
送信回路１３は、アンテナ１５から、所定の単一の周波数のキャリアを発生し、変調回路１４に供給する。
【００７２】
変調回路１４は、送信回路１３からのキャリアを、マイコン１１から供給されるパケット（コマンドパケット）にしたがって変調（例えば、振幅変調(ASK(Amplitude Shift Keying))）し、その結果得られる変調信号を、アンテナ１５に供給する。これにより、アンテナ１５からは、マイコン１１が変調回路１４に供給したパケットにしたがってキャリアを変調した変調信号に対応する電磁波が放射される。
【００７３】
なお、リーダライタ１は、パケット（コマンドパケット）を送信した後、そのパケットに対するレスポンスパケットの受信を待機する受信待機状態となるが、受信待機状態においては、変調回路１４は、送信回路１３からのキャリアを変調せずに、そのままアンテナ１５に供給する。従って、受信待機状態においては、アンテナ１５からは、キャリアに対応する電磁波が放射される。
【００７４】
即ち、ICカード３は、例えば、リーダライタ１からICカード３を見たインピーダンスを変化させることにより、リーダライタ１が放射する電磁波（キャリア）を変調する、いわゆる負荷変調を行うことにより、パケット（レスポンスパケット）を、その電磁波を出力しているリーダライタ１に送信するようになっており、このため、リーダライタ１は、ICカード３からのレスポンスパケットの受信を待機する受信待機状態では、キャリアに対応する電磁波を放射する。
【００７５】
アンテナ１５は、閉ループのコイルを構成しており、このコイルに流れる電流（信号）が変化することで、電磁波を放射する。また、ICカード３がリーダライタ１にかざされ、アンテナ１５とICカード３とが近接した状態になり、ICカード３が、リーダライタ１から見たインピーダンスを変化させると、アンテナ１５に流れる電流（信号）が変化する。
【００７６】
復調回路１６は、アンテナ１５に流れる電流（信号）を受信して復調し、その結果得られるパケット（のマンチェスタ符号等）を、マイコン１１に供給する。
【００７７】
外部回路１７は、例えば、耐タンパ性のあるセキュアなICチップで、マイコン１１の制御にしたがい、ICカード３に送信するデータの暗号化や、復調回路１６から供給される、ICカード３からのパケットに配置されたデータの暗号の復号等を行う。
【００７８】
タイマ（回路）１８は、マイコン１１の制御にしたがい、タイムアウト時間を計時する。
【００７９】
なお、ここでは、ICカード３において、リーダライタ１が出力する電磁波（キャリア）を変調する負荷変調を行うことにより、パケットを送信するようにしたが、ICカード３では、自身がキャリアを出力し、そのキャリアを変調することにより、パケットを送信するようにすることもできる。この場合、リーダライタ１は、受信待機状態において、キャリアの出力を停止する。
【００８０】
また、ICカード３は、リーダライタ１が放射する電磁波から電源を得るICカードであってもよいし、バッテリを内蔵しているICカードであてもよい。
【００８１】
次に、図５は、図４のリーダライタ１やICカード３が送信するパケット（コマンドパケットとレスポンスパケット）のフォーマットを示している。
【００８２】
パケットは、その先頭から、ヘッダ、パケット長、コマンドコード／レスポンスコード、シーケンスID、実データ、パケットチェックコードが順次配置されて構成される。
【００８３】
ヘッダは、所定の情報（ヘッダ情報）で構成される。パケット長は、パケット全体の長さ（データ長）を表す。
【００８４】
コマンドコード／レスポンスコードは、前述したように、パケットの種別、即ち、例えば、パケットが、コマンドパケットまたはレスポンスパケットのうちのいずれであるのか等を表す。
【００８５】
シーケンスIDは、前述したように、いわゆるなりすましを防止するために用いられ、リーダライタ１やICカード３において、例えば、１ずつインクリメントされる値である。即ち、リーダライタ１は、パケットを送信するとき、そのパケットのシーケンスIDを、前回送信したパケットのシーケンスIDとは異なる値にセットする。そして、ICカード３は、リーダライタ１からのパケットを受信し、そのパケットに対するレスポンスパケットを送信するとき、レスポンスパケットのシーケンスIDを、リーダライタ１からのパケットのシーケンスIDに1を加算した値にセットする。リーダライタ１は、ICカード３からのレスポンスパケットを受信し、さらに、ICカード３にパケットを送信するとき、そのパケットのシーケンスIDを、ICカード３からのレスポンスパケットのシーケンスIDに1を加算した値にセットする。以下、同様に、リーダライタ１とICカード３は、通信を終了するまで、直前に受信したパケットのシーケンスIDを１だけインクリメントした値を、これから送信しようとするパケットのシーケンスIDとする。
【００８６】
従って、リーダライタ１とICカード３では、いま受信したパケットのシーケンスIDが、直前に送信したパケットのシーケンスIDに1を加算した値になっているか否かをチェックすることにより、そのような値になっていない場合には、いま受信したパケットが、不正なパケットであることを認識することができる。
【００８７】
実データは、リーダライタ１またはICカード３のうちの一方が他方に送信する本来のデータである。ここで、実データには、コマンドが、適宜含まれる。即ち、例えば、リーダライタ１がICカード３に対してデータの読み出しを要求する場合、リーダライタ１は、データの読み出しを要求する読み出しコマンドを含むコマンドパケットを送信するが、その読み出しコマンドは、実データとして、コマンドパケットに配置される。また、例えば、リーダライタ１がICカード３に対してデータの書き込みを要求する場合、リーダライタ１は、データの書き込みを要求する書き込みコマンドを含むコマンドパケットを送信するが、その書き込みコマンドと、書き込み対象のデータとは、実データとして、コマンドパケットに配置される。
【００８８】
パケットチェックコードは、パケットの整合性をチェックするためのエラーチェック（誤り検出）用のコードである。
【００８９】
次に、図６のフローチャートを参照して、図４のリーダライタ１の動作について説明する。
【００９０】
マイコン１１（のCPU１１Ａ）は、ステップＳ１０１において、図５に示したフォーマットのコマンドパケットを生成して、ステップＳ１０２に進み、そのコマンドパケットを電磁波により送信させる送信制御を行う。即ち、マイコン１１は、コマンドパケットを、変調回路１４に供給するとともに、そのコマンドパケットを送信するように、変調回路１４を制御する。
【００９１】
変調回路１４は、マイコン１１からの制御にしたがい、送信回路１３から供給されるキャリアを、マイコン１１から供給されるコマンドパケットにしたがって変調し、その結果得られる変調信号を、アンテナ１５に供給する。これにより、アンテナ１５からは、マイコン１１が変調回路１４に供給したパケットにしたがってキャリアを変調した変調信号に対応する電磁波が放射され、コマンドパケットが、ICカード３に送信される。
【００９２】
その後、ステップＳ１０２からＳ１０３に進み、マイコン１１は、直前のステップＳ１０２で送信されたコマンドパケットに対するレスポンスパケットを待つ時間であるタイムアウト時間を求め、その計時を開始するように、タイマ１８を制御する。これにより、タイマ１８は、タイムアウト時間の計時を開始し、リーダライタ１は受信待機状態となる。
【００９３】
ここで、マイコン１１は、ICカードシステムの用途（例えば、自動改札機など）や、コマンドパケットに含ませるコマンドに応じて、例えば、数ミリ秒から数十ミリ秒程度のタイムアウト時間を求める。但し、タイムアウト時間は、一定の時間とすることも可能である。
【００９４】
ステップＳ１０３において、タイマ１８がタイムアウト時間の計時を開始すると、ステップＳ１０４に進み、マイコン１１は、タイマ１８が計時する時刻を参照し、タイマ１８がタイムアウト時間の計時を開始してから、そのタイムアウト時間が経過したか否かをチェック（判定）する。
【００９５】
ステップＳ１０４において、タイムアウト時間が経過していないと判定された場合、ステップＳ１０５に進み、マイコン１１は、外部からのパケットを受信したか否かを判定する。ステップＳ１０５において、パケットを受信していないと判定された場合、ステップＳ１０４に戻り、以下、同様の処理が繰り返される。
【００９６】
また、ステップＳ１０５において、パケットを受信したと判定された場合、即ち、外部から送信されてきたパケットが、アンテナ１５で受信され、復調回路１６で復調されて、マイコン１１に供給された場合、ステップＳ１０６に進み、以下、ステップＳ１０６乃至Ｓ１０８において、そのパケット、即ち、復調回路１６からマイコン１１に供給されたパケット（以下、適宜、受信パケットという）にエラーがあるか否かをチェック（判定）するエラーチェックが行われる。
【００９７】
具体的には、まず、ステップＳ１０６において、マイコン１１は、受信パケットのパケット長（図５）を参照し、そのパケット長に基づき、受信パケットにエラーがあるか否かを判定する。
【００９８】
即ち、リーダライタ１が、直前のステップＳ１０２で送信したコマンドパケットに対するレスポンスパケットには、そのレスポンスパケットとして期待されるパケット長がある。
【００９９】
具体的には、例えば、データの読み出しを要求する読み出しコマンドが配置されたコマンドパケットに対するレスポンスパケットには、その読み出しコマンドに応じて読み出されたデータが配置されるから、そのパケット長は、ある程度長くなる。一方、例えば、データの書き込みを要求する書き込みコマンドが配置されたコマンドパケットに対するレスポンスパケットには、読み出しコマンドにおける場合のようなデータは配置されないから、そのパケット長は短くなる。
【０１００】
従って、読み出しコマンドが配置されたコマンドパケットに対するレスポンスパケットのパケット長は、ある程度長いことが期待され、書き込みコマンドが配置されたコマンドパケットに対するレスポンスパケットのパケット長は短いことが期待される。
【０１０１】
ステップＳ１０６では、受信パケットのパケット長が、直前のステップＳ１０２で送信されたコマンドパケットに対するレスポンスパケットに期待されるパケット長であるか否かによって、受信パケットにエラーがあるか否かを判定する。
【０１０２】
ステップＳ１０６において、受信パケットのパケット長に基づき、その受信パケットにエラーがあると判定された場合、即ち、受信パケットのパケット長が、直前のステップＳ１０２で送信されたコマンドパケットに対するレスポンスパケットに期待されるパケット長でない場合、マイコン１１は、受信パケットを廃棄してステップＳ１０４に戻り、タイムアウト時間が経過したか否かのチェックを続行する。
【０１０３】
即ち、タイムアウト時間内に受信された受信パケットにエラーがある場合、マイコン１１は、後述する再送処理を行わず、従って、コマンドパケットを再送させずに、タイムアウト時間が経過したか否かのチェックを続行する。
【０１０４】
また、ステップＳ１０６において、受信パケットに、そのパケット長に基づくエラーがないと判定された場合、即ち、受信パケットのパケット長が、直前のステップＳ１０２で送信されたコマンドパケットに対するレスポンスパケットに期待されるパケット長である場合、ステップＳ１０７に進み、マイコン１１は、受信パケットのパケットチェックコード（図５）を参照し、そのパケットチェックコードに基づき、受信パケットにエラーがあるか否かを判定する。
【０１０５】
ステップＳ１０７において、受信パケットのパケットチェックコードに基づき、その受信パケットにエラーがあると判定された場合、マイコン１１は、受信パケットを廃棄してステップＳ１０４に戻り、タイムアウト時間が経過したか否かのチェックを続行する。
【０１０６】
即ち、タイムアウト時間内に受信された受信パケットにエラーがある場合、マイコン１１は、上述したように、コマンドパケットを再送させずに、タイムアウト時間が経過したか否かのチェックを続行する。
【０１０７】
また、ステップＳ１０７において、受信パケットに、そのパケットチェックコードに基づくエラーがないと判定された場合、ステップＳ１０８に進み、マイコン１１は、受信パケットのコマンドコード／レスポンスコード（図５）を参照し、そのコマンドコード／レスポンスコードに基づき、受信パケットにエラーがあるか否かを判定する。
【０１０８】
ステップＳ１０８において、受信パケットのコマンドコード／レスポンスコードに基づき、その受信パケットにエラーがあると判定された場合、即ち、受信パケットのコマンドコード／レスポンスコードが、直前のステップＳ１０２で送信されたコマンドパケットに対するレスポンスパケットに期待されるレスポンスコードに一致しない場合、マイコン１１は、受信パケットを廃棄してステップＳ１０４に戻り、タイムアウト時間が経過したか否かのチェックを続行する。
【０１０９】
即ち、タイムアウト時間内に受信された受信パケットにエラーがある場合、マイコン１１は、上述したように、コマンドパケットを再送させずに、タイムアウト時間が経過したか否かのチェックを続行する。
【０１１０】
また、ステップＳ１０８において、受信パケットに、そのコマンドコード／レスポンスコードに基づくエラーがないと判定された場合、即ち、受信パケットのコマンドコード／レスポンスコードが、直前のステップＳ１０２で送信されたコマンドパケットに対するレスポンスパケットに期待されるレスポンスコードに一致する場合、ステップＳ１０９に進み、マイコン１１は、受信パケットを、直前のステップＳ１０２で送信されたコマンドパケットに対する正常なレスポンスパケットとして、そのレスポンスパケットに応じた処理を行い、処理を終了する。
【０１１１】
即ち、例えば、ICカード３が、定期券としての機能を有し、直前のステップＳ１０２で送信されたコマンドパケットが、定期券の期限と乗車（可能）区間のデータの読み出しを要求する読み出しコマンドが配置されたものであり、そのコマンドパケットに対するレスポンスパケットとして、定期券の期限と乗車区間のデータが配置された正常なレスポンスパケットが得られた場合には、マイコン１１は、そのレスポンスパケットに応じた処理として、定期券の期限と乗車区間が適正であるか否かのチェック等を行う。
【０１１２】
一方、ステップＳ１０４において、タイムアウト時間が経過したと判定された場合、即ち、マイコン１１において、タイムアウト時間内に、エラーのない（正常な）レスポンスパケットを受信することができなかった場合、ステップＳ１１０に進み、マイコン１１は、直前のステップＳ１０２で送信させたコマンドパケットを再送させる再送処理を行い、処理を終了する。
【０１１３】
即ち、ステップＳ１１０では、図６のフローチャートに示したステップＳ１０１乃至Ｓ１１０の処理が再帰的に行われ、これにより、コマンドパケットが再送される。
【０１１４】
以上のように、リーダライタ１では、タイムアウト時間内に受信された受信パケットにエラーがある場合には、コマンドパケットの再送をせずに、タイムアウト時間が経過したか否かのチェックを続行し、即ち、タイムアウト時間が経過する前は、受信パケットにエラーがあっても、コマンドパケットの再送を行わずに、受信待機状態となって、パケットが送信されてくるのを待ち、タイムアウト時間内に受信された受信パケットにエラーがない場合には、その受信パケットを、コマンドパケットに対する正常なレスポンスパケットとして、そのレスポンスパケットに応じた処理を行う。さらに、リーダライタ１は、タイムアウト時間が経過したときのみ、コマンドパケットの再送を行う。従って、リーダライタ１に近接して他のリーダライタが設置されている場合であっても、後述する図７や図８で説明するように、リーダライタ１は、他のリーダライタに起因する混信の影響を抑えて、リーダライタにかざされたICカード３と通信を行うことができる。
【０１１５】
また、リーダライタ１は、受信パケットにエラーがあっても、即座に、コマンドパケットを再送せずに、タイムアウト時間が経過したときのみ、コマンドパケットを再送するので、コマンドパケットの送信（再送）の頻度が低下し、その結果、リーダライタ１に近接して設置された他のリーダライタにICカード３がかざされた場合に、リーダライタ１がコマンドパケットの再送を頻繁に行うことによる、他のリーダライタとICカード３との通信の妨害の程度を低減することができる。
【０１１６】
次に、図７および図８を参照して、リーダライタ１に近接して他のリーダライタが設置されている場合において、リーダライタ１にICカード３がかざされたときの、リーダライタ１、ICカード３、他のリーダライタの動作について説明する。
【０１１７】
なお、他のリーダライタは、図４に示したリーダライタ１と同様に構成されているものとする。
【０１１８】
まず、図７を参照して、リーダライタ１が、そこにかざされたICカード３からのレスポンスパケットを、タイムアウト時間内に受信することができる場合の、リーダライタ１、ICカード３、他のリーダライタの動作について説明する。
【０１１９】
図７では、リーダライタ１は、ステップＳ１２１において、コマンドコードが0x10のコマンドパケットP1を送信して、ステップＳ１２２に進み、タイムアウト時間の計時を開始して、受信待機状態となる。
【０１２０】
ここで、コマンドコードが0x10のコマンドパケットに対するレスポンスパケットのレスポンスコードが、例えば、0x11であるとすると、リーダライタ１は、ステップＳ１２２において、レスポンスコードが0x11のレスポンスパケットの受信を待機する受信待機状態となる。
【０１２１】
ICカード３は、ステップＳ１３１において、リーダライタ１が送信した、コマンドコードが0x10のコマンドパケットP1を受信し、そのコマンドパケットP1に応じた処理を開始する。
【０１２２】
一方、他のリーダライタは、ICカードがかざされた（ICカードが近接する位置にある）ことを検出するためのポーリングを行っており、具体的には、例えば、コマンドコードが0x80のコマンドパケットを周期的に送信している。
【０１２３】
図７では、他のリーダライタは、ステップＳ１４１において、コマンドコードが0x80のコマンドパケットP1'を送信し、以下、周期的に、コマンドコードが0x80のコマンドパケットを送信する。
【０１２４】
リーダライタ１は、ステップＳ１２２において受信待機状態となった後のステップＳ１２３において、他のリーダライタからのパケットP1'を受信する。
【０１２５】
他のリーダライタからのパケットP1'は、コマンドコードが0x80のコマンドパケットであり、リーダライタ１が受信を待機（期待）している、コマンドパケットP1に対するレスポンスパケット、つまり、レスポンスコードが0x11のパケットではないので、リーダライタ１は、ステップＳ１２３で受信したパケットP1'にエラーがあるとして、そのパケットP1'を廃棄する。さらに、リーダライタ１は、まだ、タイムアウト時間が経過していないため、タイムアウト時間の計時（および受信待機状態）を続行する。
【０１２６】
その後、他のリーダライタは、ステップＳ１４２において、コマンドコードが0x80のパケットであるコマンドパケットP2'を送信し、ステップＳ１２４において、リーダライタ１は、他のリーダライタからのパケットP2'を受信する。
【０１２７】
他のリーダライタからのパケットP2'も、リーダライタ１が前回（ステップＳ１２３において）受信したパケットP1'と同様に、コマンドコードが0x80のコマンドパケットであり、リーダライタ１が受信を待機（期待）している、レスポンスコードが0x11のパケットではないので、リーダライタ１は、ステップＳ１２４で受信したパケットP2'も、エラーがあるとして廃棄する。さらに、リーダライタ１は、まだ、タイムアウト時間が経過していないため、タイムアウト時間の計時（および受信待機状態）を続行する。
【０１２８】
一方、ICカード３は、リーダライタ１からのコマンドパケットP1に応じた処理を終了すると、ステップＳ１３２において、そのコマンドパケットP1に対するレスポンスパケットとして、レスポンスコードが0x11のパケットP2を送信する。
【０１２９】
このとき、リーダライタ１は、タイムアウト時間の計時をしており、受信待機状態にあるので、ステップＳ１２５において、ICカード３からのパケットP2を受信する。
【０１３０】
ICカードからのパケットP2は、レスポンスコードが0x11のレスポンスパケットであり、リーダライタ１が受信を待機（期待）しているパケットであるから、リーダライタ１は、ステップＳ１２５で受信したパケットP2が、エラーがない正常なレスポンスパケットであるとして、タイムアウト時間の計時を終了し、そのレスポンスパケットP2に応じた処理を行う。
【０１３１】
以上のように、リーダライタ１は、タイムアウト時間内では、受信パケットにエラーがあっても、コマンドパケットの再送をせずに、パケットの受信を待機し、エラーのない受信パケットを受信した場合には、タイムアウト時間内に受信した他の受信パケットにエラーがあっても、エラーのない受信パケットを、コマンドパケットに対する正常なレスポンスパケットとして、そのレスポンスに応じた処理を行う。
【０１３２】
従って、図２で説明した、受信パケットにエラーがあると、即座に、コマンドパケットを再送する場合のように、その再送によって、リーダライタ１によるICカード３からのレスポンスパケットの受信が妨げられる頻度を低減することができる。
【０１３３】
次に、図８を参照して、リーダライタ１が、そこにかざされたICカード３からのレスポンスパケットを、タイムアウト時間内に受信することができない場合の、リーダライタ１、ICカード３、他のリーダライタの動作について説明する。
【０１３４】
図８では、リーダライタ１は、ステップＳ１５１において、コマンドコードが0x10のコマンドパケットP1を送信して、ステップＳ１５２に進み、タイムアウト時間の計時を開始して、受信待機状態となる。
【０１３５】
即ち、リーダライタ１は、図７のステップＳ１５２における場合と同様に、コマンドコードが0x10のコマンドパケットに対するレスポンスパケットである、レスポンスコードが0x11のレスポンスパケットの受信を待機する受信待機状態となる。
【０１３６】
ICカード３は、ステップＳ１６１において、リーダライタ１が送信した、コマンドコードが0x10のコマンドパケットP1を受信し、そのコマンドパケットP1に応じた処理を開始する。
【０１３７】
一方、他のリーダライタは、図７における場合と同様に、コマンドコードが0x80のコマンドパケットを周期的に送信している。
【０１３８】
図８では、他のリーダライタは、ステップＳ１７１において、コマンドコードが0x80のコマンドパケットP1'を送信し、以下、周期的に、コマンドコードが0x80のコマンドパケットを送信する。
【０１３９】
リーダライタ１は、ステップＳ１５２において受信待機状態となった後のステップＳ１５３において、他のリーダライタからのパケットP1'を受信する。
【０１４０】
他のリーダライタからのパケットP1'は、コマンドコードが0x80のコマンドパケットであり、リーダライタ１が受信を待機（期待）している、レスポンスコードが0x11のパケットではないので、リーダライタ１は、ステップＳ１５３で受信したパケットP1'にエラーがあるとして、そのパケットP1'を廃棄する。さらに、リーダライタ１は、まだ、タイムアウト時間が経過していないため、タイムアウト時間の計時（および受信待機状態）を続行する。
【０１４１】
その後、他のリーダライタは、ステップＳ１７２において、コマンドコードが0x80のパケットであるコマンドパケットP2'を送信し、ステップＳ１５４において、リーダライタ１は、他のリーダライタからのパケットP2'を受信する。
【０１４２】
他のリーダライタからのパケットP2'も、リーダライタ１が前回（ステップＳ１５３において）受信したパケットP1'と同様に、リーダライタ１が受信を待機（期待）している、レスポンスコードが0x11のパケットではないので、リーダライタ１は、ステップＳ１５４で受信したパケットP2'も、エラーがあるとして廃棄する。さらに、リーダライタ１は、まだ、タイムアウト時間が経過していないため、タイムアウト時間の計時（および受信待機状態）を続行する。
【０１４３】
一方、ICカード３は、リーダライタ１からのコマンドパケットP1に応じた処理を終了し、ステップＳ１６２において、そのコマンドパケットP1に対するレスポンスパケットとして、レスポンスコードが0x11のパケットP2を送信するが、そのパケットP2の送信が、リーダライタ１において、他のリーダライタからのパケットP2'をステップＳ１５４で受信しているときに行われ、その結果、リーダライタ１が、ICカード３からのパケットP2を受信することができなかったとする。
【０１４４】
この場合、ICカード３は、ステップＳ１６２において、コマンドパケットP1に対するレスポンスパケットP2を送信したから、そのレスポンスパケットP2を再送することはない。
【０１４５】
一方、リーダライタ１は、コマンドパケットP1に対するレスポンスパケットの受信を待機しているが、ICカード３は、既に（ステップＳ１６２において）、コマンドパケットP1に対するレスポンスパケットP2を送信し、その再送も行わないから、リーダライタ１が、コマンドパケットP1に対するレスポンスパケットを受信することができないまま、タイムアウト時間が経過する。
【０１４６】
タイムアウト時間が経過すると、リーダライタ１は、ステップＳ１５５において、コマンドパケットを再送する。即ち、リーダライタ１は、コマンドコードが0x10のパケットとして、コマンドパケットP3を送信する。
【０１４７】
ICカード３は、ステップＳ１６３において、リーダライタ１からのコマンドパケットP3を受信し、その後、そのコマンドパケットP3に応じた処理を行って、コマンドパケットP3に対するレスポンスパケットを送信する。
【０１４８】
以上のように、リーダライタ１は、タイムアウト時間が経過したときのみ、コマンドパケットの再送するので、コマンドパケットの再送が頻繁に行われることを防止するのと同時に、何からの原因によって、ICカード３からのレスポンスパケットを受信し損ねても、タイムアウト時間の経過後に行われるコマンドパケットの再送によって、ICカード３からのレスポンスパケットを受信することが可能となる。
【０１４９】
なお、図６のフローチャートにおいては、受信パケットのパケット長（データ長）、パケットチェックコード（エラーチェック用のコード）、コマンドコード／レスポンスコード（受信パケットの種別を表すコード）に基づき、受信パケットにエラーがあるか否かをチェックするようにしたが、その他、受信パケットにエラーがあるか否かのチェックは、受信パケットのシーケンスID（図５）に基づいて行うことができる。
【０１５０】
また、図６のフローチャートにおいては、受信パケットにエラーがあるか否かのチェックを、その受信パケットのパケット長、パケットチェックコード、コマンド／レスポンスコードの順に参照して行うようにしたが、パケット長、パケットチェックコード、コマンド／レスポンスコードを、その他の順番で参照して、受信パケットにエラーがあるか否かのチェックを行うことも可能である。
【０１５１】
さらに、図６のフローチャートに示した処理は、マイコン１１にプログラムを実行させることによって行う他、専用のハードウェアによって行うことも可能である。
【０１５２】
以上のように、リーダライタ１においては、タイムアウト時間が経過する前は、受信パケットにエラーがあっても、コマンドパケットの再送を行わずに、受信待機状態となって、パケットが送信されてくるのを待ち、タイムアウト時間内に受信された受信パケットにエラーがない場合には、その受信パケットを、コマンドパケットに対する正常なレスポンスパケットとして、そのレスポンスパケットに応じた処理を行い、タイムアウト時間が経過したときのみ、コマンドパケットの再送を行うので、図２や図３で説明したように、受信パケットにエラーがあると、即座に、コマンドパケットを再送する場合に比較して、コマンドパケットが再送される頻度が低減し、その結果、リーダライタ１が、他のリーダライタに近接して設置され、混信が生じる環境下においても、ICカード３がかざされたリーダライタ１は、混信の影響を抑えて、ICカード３と通信を行うことができる。
【０１５３】
また、受信パケットにエラーがあると、即座に、コマンドパケットを再送する処理（図１乃至図３で説明したリーダライタAが行う処理）から、タイムアウト時間が経過する前は、受信パケットにエラーがあっても、コマンドパケットの再送を行わずに、受信待機状態となって、パケットが送信されてくるのを待ち、タイムアウト時間内に受信された受信パケットにエラーがない場合には、その受信パケットを、コマンドパケットに対する正常なレスポンスパケットとして、そのレスポンスパケットに応じた処理を行い、タイムアウト時間が経過したときのみ、コマンドパケットの再送を行う処理（リーダライタ１が行う処理）への変更は、マイコン１１が実行するプログラムの一部を変更することで、新たなハードウェアの追加等をすることなく、容易に行うことができる。
【０１５４】
従って、リーダライタ１は、他のリーダライタとの間で混信を生じる環境下にあっても、即ち、例えば、他のリーダライタに近接して設置されても、ICカード３との通信を、容易に行うことができる。
【０１５５】
その結果、リーダライタ１は、他のリーダライタとの間の混信を（ほとんど）考慮することなく設置することができ、このように、設置にあたっての設置条件が、従来に比較して緩いことから、リーダライタ１の設置に要する様々なコストを低減することができる。さらに、リーダライタ１を様々な環境に設置し、そのようなリーダライタ１で構成されるICカードシステムを様々な用途で利用することが可能となる。
【０１５６】
また、リーダライタ１は、上述のように、新たなハードウェアの追加をせずに構成することが可能であり、リーダライタ１の製造コストの上昇を抑えることができる。
【０１５７】
さらに、コマンドパケットが再送される頻度が低いので、リーダライタ１によるコマンドパケットの再送によって、リーダライタ１に近接して設定された他のリーダライタとICカード３との通信が妨げられることや、リーダライタ１に近接して設定された他のリーダライタによるコマンドパケットの再送によって、リーダライタ１とICカード３との通信が妨げられことが少なくなり、その結果、ICカード３との間の通信の通信性能（ICカードCの応答性）が向上し、その結果、実質的な通信速度を向上させることが可能となる。
【０１５８】
また、コマンドパケットが再送される頻度が低いので、リーダライタ１における消費電力を低減することができる。
【０１５９】
以上、本発明を、ICカードシステムに適用した場合について説明したが、本発明は、その他、例えば、無線タグシステムなどの、非接触での通信（無線通信）を行う装置に適用可能である。
【０１６０】
なお、本明細書において、コンピュータ（マイコン１１のCPU１１Ａ）に各種の処理を行わせるためのプログラムを記述する処理ステップは、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいは個別に実行される処理（例えば、並列処理あるいはオブジェクトによる処理）も含むものである。
【０１６１】
また、プログラムは、１のコンピュータにより処理されるものであっても良いし、複数のコンピュータによって分散処理されるものであっても良い。
【図面の簡単な説明】
【０１６２】
【図１】複数のリーダライタどうしが混信を起こしている状態を示す図である。
【図２】リーダライタAおよびB、並びにICカードCの動作を説明するフローチャート（アローチャート）である。
【図３】リーダライタAおよびB、並びにICカードCの動作を説明するフローチャートである。
【図４】本発明を適用したICカードシステムの一実施の形態の構成例を示すブロック図である。
【図５】リーダライタ１とICカード３が送信するパケットのフォーマットを示す図である。
【図６】リーダライタ１の動作を説明するフローチャートである。
【図７】リーダライタ１、ICカード３、および他のリーダライタの動作を説明するフローチャート（アローチャート）である。
【図８】リーダライタ１、ICカード３、および他のリーダライタの動作を説明するフローチャートである。
【符号の説明】
【０１６３】
１  リーダライタ，  ２  ホストコンピュータ，  ３  ICカード，  １１  マイコン，  １１Ａ  CPU，  １１Ｂ  RAM．  １１Ｃ  EEPROM，  １２  I/F，  １３  送信回路，  １４  変調回路，  １５  アンテナ，  １６  復調回路，  １７  外部回路，  １８  タイマ
【図１】
2006211518.tif 000003
【図２】
2006211518.tif 000004
【図３】
2006211518.tif 000005
【図４】
2006211518.tif 000006
【図５】
2006211518.tif 000007
【図６】
2006211518.tif 000008
【図７】
2006211518.tif 000009
【図８】
2006211518.tif 000010