(57)【要約】【課題】本発明は、データ通信を適切かつ効率的に行うデータ通信装置、データ通信制御方法、データ通信制御プログラム及び記録媒体に関する。【解決手段】デバイス１は、送信部２０のパケット送信部２２からリクエストまたはデータのパケットを送信すると、該パケットをReplay Buffer制御部２３のReplay Bufferに保存し、送信したパケットに対して送信先の対向デバイスから送られてくるAck/Nakパケット等のＤＬＬＰを、予め設定されているタイマ設定値（Replay時間）内に受信部１０が受信するか否かに基づいてReplay Bufferに保持されているパケットを再送信するか否かを制御するとともに、前記パケットを送信してから該パケットに対するＤＬＬＰを受信するまでの経過時間を第１カウンタ３１ｃでカウントして該カウンタ値に基づいてタイマ設定値（Replay時間）を補正する。【選択図】          図１
2011039897.tif 000002
【特許請求の範囲】
【請求項１】
少なくともリクエストまたはデータのパケットを送信するパケット送信手段と、
前記パケット送信手段の送信したパケットを保持するパケット保持手段と、
送信したパケットに対して送信先から送られてくるパケット受信が正常であるか異常であるかを示す受信結果応答パケットを受信するパケット受信手段と、
予め設定されている再送信待ち時間内に前記パケット受信手段が前記受信結果応答パケットを受信するか否かに基づいて前記パケット保持手段のパケットを前記パケット送信手段に送信させる再送信を行うか否かを制御する再送信制御処理を行うとともに、前記パケットを送信してから該パケットに対する該受信結果応答パケットを該パケット受信手段が受信するまでの応答パケット受信経過時間に基づいて前記再送信待ち時間を補正する再送信待ち時間補正処理を行う再送信制御手段と、
を備えていることを特徴とするデータ通信装置。
【請求項２】
前記再送信制御手段は、
前記パケット送信手段が前記パケットを送信したときから前記再送信待ち時間を計時する待ち時間計時手段と、
前記パケット送信手段が前記パケットを送信したときから該送信パケットに対する前記受信結果応答パケットを前記パケット受信手段が受信するまでに前記待ち時間計時手段が計時する経過時間を前記応答パケット受信経過時間としてカウントする応答時間カウンタと、
前記応答時間カウンタがカウントした前記応答パケット受信経過時間に基づいて前記再送信待ち時間を補正する再送信待ち時間補正手段と、
を備え、前記待ち時間計時手段が前記再送信待ち時間の計時を完了する前に前記パケット受信手段が前記受信結果応答パケットを受信するか否かに基づいて、前記パケット保持手段のパケットを前記パケット送信手段に送信させる再送信を行うか否の前記再送信制御処理を行うことを特徴とする請求項１記載のデータ通信装置。
【請求項３】
前記再送信制御手段は、
前記パケット送信手段が前記パケットを送信したときから前記再送信待ち時間を計時する待ち時間計時手段と、
前記パケット送信手段が前記パケットを送信したときから該送信パケットに対する前記受信結果応答パケットを前記パケット受信手段が受信するまでに前記待ち時間計時手段が計時する経過時間を前期応答パケット受信経過時間としてカウントする応答時間カウンタと、
前記パケット送信手段が前記パケット保持手段のパケットを再送信したときから前記再送信待ち時間を計時する再送信後再送信待ち時間計時手段と、
前記応答時間カウンタがカウントした前記応答パケット受信経過時間に基づいて前記再送信待ち時間を補正する再送信待ち時間補正手段と、
を備え、前記再送信後再送信待ち時間計時手段が前記再送信待ち時間の計時を完了する前に前記パケット受信手段が前記受信結果応答パケットを受信するか否かに基づいて、前記パケット保持手段のパケットを前記パケット送信手段に送信させる再送信を行うか否の前記再送信制御処理を行うことを特徴とする請求項１記載のデータ通信装置。
【請求項４】
前記再送信制御手段は、前記パケット送信手段が同じパケットについて最初に送信したパケットに対する前記受信結果応答パケットを前記パケット受信手段が受信するまでの前記応答パケット受信経過時間にのみ基づいて前記再送信待ち時間を補正することを特徴とする請求項１から請求項３のいずれかに記載のデータ通信装置。
【請求項５】
前記パケット受信手段は、受信したパケットが正常な前記受信結果応答パケットであるか否かを判断する判断手段を有し、
前記再送信制御手段は、前記判断手段が前記パケット受信手段の受信したパケットが正常な前記受信結果応答パケットであると判断したときにのみ、該受信結果応答パケットを受信するまでの前記応答パケット受信経過時間に基づく前記再送信待ち時間補正処理を行うことを特徴とする請求項１から請求項４のいずれかに記載のデータ通信装置。
【請求項６】
少なくともリクエストまたはデータのパケットを送信するパケット送信処理ステップと、
前記パケット送信処理ステップで送信されたパケットをパケット保持手段に保持するパケット保持制御処理ステップと、
送信したパケットに対して送信先から所定の待ち時間経過後に送られてくるパケット受信が正常であるか異常であるかを示す受信結果応答パケットを受信するパケット受信処理ステップと、
予め設定されている再送信待ち時間内に前記パケット受信処理ステップで前記受信結果応答パケットを受信するか否かに基づいて前記パケット保持手段に保持されているパケットを前記パケット送信処理ステップで送信させる再送信を行うか否かを制御するとともに、前記パケットを送信してから該パケットに対する該受信結果応答パケットを該パケット受信処理ステップで受信するまでの応答パケット受信経過時間に基づいて前記再送信待ち時間を補正する再送信制御処理ステップと、
を有していることを特徴とするデータ通信制御方法。
【請求項７】
コンピュータに、
少なくともリクエストまたはデータのパケットを送信するパケット送信処理と、
前記パケット送信処理で送信されたパケットをパケット保持手段に保持するパケット保持制御処理と、
送信したパケットに対して送信先から所定の待ち時間経過後に送られてくるパケット受信が正常であるか異常であるかを示す受信結果応答パケットを受信するパケット受信処理と、
予め設定されている再送信待ち時間内に前記パケット受信処理で前記受信結果応答パケットを受信するか否かに基づいて前記パケット保持手段に保持されているパケットを前記パケット送信処理で送信させる再送信を行うか否かを制御するとともに、前記パケットを送信してから該パケットに対する該受信結果応答パケットを該パケット受信処理で受信するまでの応答パケット受信経過時間に基づいて前記再送信待ち時間を補正する再送信制御処理と、
を実行させることを特徴とするデータ通信制御プログラム。
【請求項８】
請求項７記載のデータ通信制御プログラムを記録したことを特徴とするコンピュータが読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ通信装置、データ通信制御方法、データ通信制御プログラム及び記録媒体に関し、詳細には、高速シリアルバス等を利用したデータ通信を適切かつ効率的に行うデータ通信装置、データ通信制御方法、データ通信制御プログラム及び記録媒体に関する。
【背景技術】
【０００２】
近年、複合装置、プリンタ等の画像処理装置においては、ＡＳＩＣ（Application Specific Integrated Circuit）等の画像処理用チップ（デバイス）とメモリ（デバイス）との間のデータ通信等において、高速データ通信を実現するために、要求と応答が分離され、応答を待たずに次の要求を発行できる高速な転送を行うスプリットトランザクションのバスであるＰＣＩ（Peripheral Component Interconnect） Express（以下、ＰＣＩｅという。）が用いられるようになってきている。ＰＣＩｅのような高速シリアルバスにおいては、特定の確率でビット化けによるパケット転送エラーが発生する。そして、ＰＣＩｅの場合、ＰＣＩｅの規格によると、ビット化けによるパケット転送エラーが発生した場合、再送信（リトライ）を行い、データを保証することとなっている。
【０００３】
そこで、ＰＣＩｅにおいては、図９に示すように、相対向する２つのデバイス１００とデバイス１０１のうち、一方のデバイス１００から送信パケット（以下、適宜、ＴＬＰという。ＴＬＰ：Transaction Layer Packet）を他方のデバイス１０１にＰＣＩｅバスを通して送信すると、他方のデバイス１０１が、予め設定されているAck/Nak Latency Timerで設定されているAck/Nak Latency時間の間に、ＴＬＰの送達確認など補助的役割を担うＤＬＬＰ（Data Link Layer Packet）によって、ＴＬＰを正常に受信できたか否かを示すAck（acknowledgement）パケット、または、ＴＬＰを正常受信できなかったことを示すNak（negative acknowledgements）パケットを一方側のデバイス１００にＰＣＩｅバスを通して送信する。そして、送信側のデバイス１００は、予め設定されているReplay Timerに設定されているタイマ設定値（Replay時間）をReplay Timerが計時するまでの間に受信すると、受信したAckパケットまたはNakパケットに応じて、次の送信パケットの送信処理あるいはReplay時間経過後に先に送信した送信パケットを再送信する再送信処理等の処理を行い、また、Replay時間内にAckパケットまたはNakパケットの受信を確認できないときにも、該Replay時間経過後に送信パケットを再送信する。
【０００４】
このようにReplay時間内にAck/Nakパケットが受信されないのは、受信側のデバイス１０１におけるPHY（物理メディアインタフェース）の遅延及び内部遅延等の要因で、Ack/Nakの送信遅延が大きくなってしまったためである。
【０００５】
そして、上記受信側のデバイス１０１でのＤＬＬＰのAck/Nak Latency Timerで設定されるAck/Nak Latency時間は、ＰＣＩｅの規格上、Pay Load SizeとLink Widthによって定められており、また、送信側のデバイス１００のReplay Timerで設定されるReplay時間も、同様に、Pay Load SizeとLink Widthによって定められていが、これらのAck/Nak Latency時間及びReplay時間は、ＰＣＩｅの規格上推奨値であるため、適宜変更することができる。
【０００６】
そこで、従来、ＰＣＩｅを用いた通信においては、デバイス１００のReplay Timerが計時するタイマ設定値（Replay時間）をプログラムで再設定（デフォルト値よりも大きなタイマ設定値（Replay時間）に設定）することで対応している。
【０００７】
ところが、送信側のデバイス１００のReplay Timer値をプログラムによって再設定すると、以下のような問題が発生する。
【０００８】
ａ）タイマ設定値（Replay時間）をあまり大きくしてしまうと、従来では、デフォルト値よりも大きなタイマ設定値（Replay時間）を設定するだけであるため、受信側のデバイス１０１からのAck/Nakにエラーがあった場合等に送信パケットの再送信までの処理に、タイマ設定値（Replay時間）を大きくした分だけ余計に時間がかかる。
【０００９】
ｂ）受信側のデバイス１０１のAck/Nak Latency Timerで設定されるAck/Nak Latency時間（Ack/Nak Latency Timer値）を小さくしてもよいが、この場合、Ack/Nak Latency時間を小さすぎると、Ackパケットが多発することで、バスの転送効率が低下するという問題がある。
【００１０】
ｃ）対向デバイス１００、１０１のAck/Nak Latencyを検知する手段がないため、データ転送時にパフォーマンス等の問題が発生した際にしか気づくことができない。すなわち、パケット再送信（Retry）が発生した時に、Ack/NakのLatencyによるタイムアウト（Timeout）であるのか、Ack/NakのエラーによるTimeoutであるのかを判別することができない。例えば、プリンタ装置、複写装置、複合装置等の画像処理装置においては、オプションボード等の対向デバイスにどのようなデバイスが接続させるかが不明な場合に、最適なパラメータ値が不明なため、不要な送信パケットの再送信処理（Retry）が発生するおそれがある。
【００１１】
そして、従来、パケットの再送信におけるデータ転送性能を向上させるために、あるパケットに対して、Nakパケットの受信にエラーが発生した場合にReplay時間経過後に送信パケットの再送信が開始されることを防止するために、再送信のパケットに対応したダミーパケットを送信し、受信側に再度Nak応答を行わせて、データ転送性能の向上を図った技術が提案されている（特許文献１参照）。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、上記公報記載の従来技術にあっては、Nakパケットの受信にエラーが発生した場合に、ダミーパケットを送信しているため、受信側のデバイスは、Replay時間が経過する毎に、ダミーパケットを送信することとなり、対向デバイスとしてどのようなデバイスが配設されるかが不明な場合に、上述のような対応を行うと、ダミーパケットの送信が頻繁に発生するおそれがあるとともに、ダミーパケットと送信パケットを送信する処理が頻繁に発生して、全体の処理時間を向上させる上で、改良の必要があった。
【００１３】
そこで、本発明は、パケットが正常転送できなかった場合に所定の時間経過後にパケットを再送信するデータ通信を、安定してかつ速やかに行うデータ通信装置、データ通信制御方法、データ通信制御プログラム及び記録媒体を提供することを目的としている。
【課題を解決するための手段】
【００１４】
本発明は、上記目的を達成するために、リクエストまたはデータのパケットを送信すると、該パケットをパケット保持手段に保持し、送信したパケットに対して送信先から送られてくる受信結果応答パケットを、予め設定されている再送信待ち時間内に受信するか否かに基づいて前記パケット保持手段に保持されているパケットを再送信するか否かを制御するとともに、前記パケットを送信してから該パケットに対する該受信結果応答パケットを受信するまでの応答パケット受信経過時間に基づいて前記再送信待ち時間を補正することを特徴としている。
【００１５】
また、本発明は、前記受信結果応答パケットを受信することなく前記再送信待ち時間が経過して前記パケット保持手段のパケットを再送信したときからの前記再送信待ち時間を計時し、前記応答パケット受信経過時間に基づいて前記再送信待ち時間を補正するとともに、再送信に対する前記再送信待ち時間が経過する前に前記パケットまたは再送信した前記パケットに対する前記受信結果応答パケットを受信するか否かに基づいて、前記パケット保持手段のパケットを再送信するか否か制御することを特徴としてもよい。
【００１６】
さらに、本発明は、同じパケットについて最初に送信したパケットに対する前記受信結果応答パケットを受信するまでの前記応答パケット受信経過時間にのみ基づいて前記再送信待ち時間を補正することを特徴としてもよい。
【００１７】
また、本発明は、受信したパケットが正常な前記受信結果応答パケットであるか否かを判断し、受信したパケットが正常な前記受信結果応答パケットであると判断したときにのみ、該受信結果応答パケットを受信するまでの前記応答パケット受信経過時間に基づいて前記再送信信待ち時間を補正することを特徴としてもよい。
【発明の効果】
【００１８】
本発明によれば、パケットが正常転送できなかった場合にパケットを所定の時間経過後に再送信するデータ通信を、安定してかつ速やかに行うことができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の一実施例を適用したデバイスの要部ブロック構成図。
【図２】ＤＬＬＰの構成例を示す図。
【図３】状態Ａにおけるタイマ設定値補正処理を伴うＴＬＰ再送信制御処理の説明図。
【図４】状態Ｂにおけるタイマ設定値補正処理を伴うＴＬＰ再送信制御処理の説明図。
【図５】状態Ｃにおけるタイマ設定値補正処理を伴うＴＬＰ再送信制御処理の説明図。
【図６】状態Ｄにおけるタイマ設定値補正処理を伴うＴＬＰ再送信制御処理の説明図。
【図７】タイマ設定値補正処理を伴うＴＬＰ再送信制御処理を示すフローチャート。
【図８】図７の続きの処理を示すフローチャート。
【図９】従来のＰＣＩｅ通信の一例を示す図。
【発明を実施するための形態】
【００２０】
以下、本発明の好適な実施例を添付図面に基づいて詳細に説明する。なお、以下に述べる実施例は、本発明の好適な実施例であるので、技術的に好ましい種々の限定が付されているが、本発明の範囲は、以下の説明によって不当に限定されるものではなく、また、本実施の形態で説明される構成の全てが本発明の必須の構成要件ではない。
【実施例１】
【００２１】
図１〜図８は、本発明のデータ通信装置、データ通信制御方法、データ通信制御プログラム及び記録媒体の一実施例を示す図であり、図１は、本発明のデータ通信装置、データ通信制御方法、データ通信制御プログラム及び記録媒体の一実施例を適用したデバイス１のブロック構成図である。
【００２２】
図１において、デバイス１は、複合装置、プリンタ装置、複写装置、ファクシミリ装置、コンピュータ等の装置内でデータの高速通信を行う情報処理装置に搭載され、このデータ通信は、要求と応答が分離されていて、応答を待たずに次の要求を発行できる高速な転送を行うスプリットトランザクションのバスであるＰＣＩｅが用いられている。
【００２３】
デバイス１は、例えば、情報処理装置に搭載された画像処理用チップであり、メモリ等を対向デバイスＴＤ（図３〜図６参照）として、該対向デバイスＴＤとの間でＰＣＩｅを用いてパケットデータの送受信を行うデータ通信装置として機能する。
【００２４】
デバイス１は、受信部１０、送信部２０及びＴＬＰ制御部３０を備えており、メモリ等を対向デバイスＴＤとしてＰＣＩｅを用いてパケットデータの送受信を行う。
【００２５】
そして、デバイス１は、ＲＯＭ、ＥＥＰＲＯＭ（Electrically Erasable and Programmable Read Only Memory ）、ＥＰＲＯＭ、フラッシュメモリ、フレキシブルディスク、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory ）、ＣＤ−ＲＷ（Compact Disc Rewritable ）、ＤＶＤ（Digital Versatile Disk）、ＳＤ（Secure Digital）カード、ＭＯ（Magneto-Optical Disc）等のコンピュータが読み取り可能な記録媒体に記録されている本発明のデータ通信制御方法を実行するデータ通信制御プログラムを読み込んで図示しないＲＯＭ等のメモリに導入することで、後述するデータを効率的にかつ高速に転送するデータ通信制御方法を実行するデータ通信装置として構築されている。このデータ通信制御プログラムは、アセンブラ、Ｃ、Ｃ＋＋、Ｃ＃、Ｊａｖａ（登録商標）等のレガシープログラミング言語やオブジェクト指向ブログラミング言語等で記述されたコンピュータ実行可能なプログラムであり、上記記録媒体に格納して頒布することができる。
【００２６】
受信部１０は、パケット判定部１１、パケット受信部１２、ＣＲＣ（Cyclic Redundancy Check）エラー判定部１３、Ack/Nak受信部１４及びＣＲＣエラー判定部１５等を備えており、ＰＣＩｅを介して対向デバイスＴＤからの送信されてくるパケットを受信する。
【００２７】
送信部２０は、送信制御部２１、パケット送信部２２及びReplay Buffer制御部２３等を備えており、再送制御部２１は、第１タイマ３１、第２タイマ３２、カウンタ値保持部３３及びタイマ値設定部３４等を備えている。第１タイマ３１は、第１カウンタ３１ｃを内蔵しており、第２タイマ３２は、第２カウンタ３２ｃを内蔵している。
【００２８】
まず、受信部１０について説明する。受信部１０は、ＰＣＩｅを介して対向デバイスＴＤから送信されてきたパケット（受信パケット）をパケット判定部１１で受信し、パケット判定部１１が、送られてきた受信パケットが、通信すべきデータ自体を運ぶＴＬＰ（Transaction Layer Packet）であるか、ＴＬＰに対して送達確認等の補助的役割を担うAck/Nak等のＤＬＬＰ（Data Link Layer Packet）であるか、また、パケットが壊れていないか等を判別する。パケット判定部１１は、受信パケットがＴＬＰであると、パケット受信部１２に送り、受信パケットがＤＬＬＰであると、Ack/Nak受信部１４に送る。
【００２９】
パケット受信部（パケット受信手段）１２は、パケット判定部１１からＴＬＰを受け取って必要なパケット受信処理を行って、ＣＲＣエラー判定部１３に送る。
【００３０】
ＣＲＣエラー判定部１３は、ＴＬＰデータが壊れていないかどうか判定し、ＴＬＰデータが壊れていないと判定すると、ＴＬＰ制御部４０にリクエスト情報とデータを渡す。一方、ＣＲＣエラー判定部１３は、ＴＬＰデータが壊れていると判定すると、その判定結果をＴＬＰ制御部４０に渡すとともに、そのＴＬＰパケットを破棄する。
【００３１】
ＴＬＰ制御部４０は、ＣＲＣエラー判定部１３からのＴＬＰデータ及びエラー判定に応じてパケット通信、特に、ＰＣＩｅ通信に必要な制御、例えば、フロー制御等を行い、送信部２０のパケット送信部２２に、ＴＬＰのエラー通知や正常受信通知及びバッファサイズ通知等を行って、パケット送信部２２に、正常受信時のAckパケットの送信、エラー受信時のNakパケットの送信等を行わせる。
【００３２】
Ack/Nak受信部１４は、パケット判定部１１からＤＬＬＰを受け取って必要な処理を行った後、ＣＲＣエラー判定部１５に渡す。
【００３３】
ＣＲＣエラー判定部１５は、ＤＬＬＰのパケット全てを対象としてＣＲＣ値を算出し、算出した１６ｂＣＲＣ値とパケットに付加されている１６ｂＣＲＣ値を比較して、エラー判定を行う。なお、ＤＬＬＰは、図２に示すように構成されており、ＤＬＬＰの種類を識別する「TYPE」（1Byte）、ＤＬＬＰ固有の情報である「DATA」（3Byte）及び「16bCRC」（2Byte）で形成される。
【００３４】
ＣＲＣエラー判定部１５は、エラー判定結果を送信部２０の再送制御部２１に伝達する機能を有し、また、受信フラグ及びシーケンスNo.等のAck/Nak情報を送信部２０の再送制御部２１に送信する。上記パケット判定部１１及びＣＲＣエラー判定部１５は、全体として受信したパケットが正常なＤＬＬＰ（特に、Ack/Nakパケット）であるか否かを判定する判定手段として機能している。
【００３５】
次に、送信部２０について説明する。送信部２０のパケット送信部（パケット送信手段）２２は、ＴＬＰ制御部４０から渡されるリクエスト情報やデータに対して、パケット番号とＣＲＣ計算結果を付加してＴＬＰを生成し、生成したＴＬＰを対向デバイスＴＤにＰＣＩｅを介して送信する。また、パケット送信部２２は、送信したＴＬＰをReplay Buffer制御部２３のReplay Bufferに保管して、対向デバイスＴＤから送られてきたＴＬＰが正常であるか不適切であるかの受信部１０での判定結果に基づいた再送制御部２１の制御に応じて、該Replay Buffer制御部２３に保管されているＴＬＰの再送信を行うか否か制御する。さらに、パケット送信部２２は、受信部１０が対向デバイスＴＤから受信したＴＬＰに対するＣＲＣエラー判定部１３の判定結果に応じて、Ack/Nakパケット等のＤＬＬＰを該対向デバイスＴＤに送信する。
【００３６】
再送制御部（再送信制御手段）２１は、受信部１０のＣＲＣエラー判定部１５からの受信フラグ及びAck/Nak情報に基づいてＴＬＰの再送信制御を行う。すなわち、再送制御部２１は、ＣＲＣエラー判定部１５からＣＲＣの判定結果とAck/Nak情報を受け取り、ＣＲＣの判定結果がエラーを示しているか、Ack/Nak情報がNakであると、タイマ値設定部３４に保管されている再送信待ち時間であるタイマ設定値（Replay時間）が経過すると、タイムアウトを発生して、Replay Buffer制御部２３に再送／クリアを通知し、Replay Buffer制御部２３がReplay Buffer内のＴＬＰを再送ＴＬＰとしてパケット送信部２２に出力する。パケット送信部２２は、Replay Buffer制御部２３から受け取った再送ＴＬＰを対向デバイスＴＤに再送信する。
【００３７】
タイマ値設定部３４は、後述するカウンタ値保持部３３から入力されるタイマ設定値（Replay時間）を第１タイマ３１及び第２タイマ３２に設定する。
【００３８】
そして、再送制御部２１の第１タイマ（待ち時間計時手段）３１は、パケット送信部２２がＴＬＰの送信を開始した時点から、タイマ値設定部３４によって設定されるタイマ設定値（Replay時間）の計時を開始し、第１カウンタ（応答時間カウンタ）３１ｃは、この第１タイマ３１の計時する時間をカウントしてそのカウンタ値を保持する。また、第１タイマ３１は、タイマ値設定部３４によって設定されるタイマ設定値（Replay時間）を計時して計時時間がタイマ設定値（Replay時間）になると、タイムアウトを発生し、Replay Buffer制御部２３に再送／クリアを通知する。さらに、第１タイマ３１は、受信部１０のＣＲＣエラー判定部１５から受信フラグ及びAck/Nak情報を受け取ったときに、タイマ設定値（Replay時間）が補正可能であると、カウンタ値保持部３３に対してそのときの第１カウンタ３１ｃの保持するカウンタ値及びラッチトリガ信号を出力する。
【００３９】
第２タイマ３２は、ＴＬＰの再送信が、発生したときに、該ＴＬＰのパケット送信ｂ２２による再送信開始からタイマ値設定部３４によって設定されるタイマ設定値の計時を開始し、第２カウンタ３２ｃは、この第２タイマ３２の計時する時間をカウントしてそのカウンタ値であるタイマ時間を保持する。
【００４０】
カウンタ値保持部３３は、第１タイマ３１からカウンタ値及びラッチトリガ信号が入力されると、該カウンタ値を保持し、カウンタ値が更新されると、タイマ値設定部３４に補正値として更新された値を出力する。
【００４１】
タイマ値設定部３４は、このカウンタ値保持部３３によって設定されたタイマ設定値を第１タイマ３１及び第２タイマ３２に出力する。
【００４２】
すなわち、再送制御部２１は、対向デバイスＴＤに送信したＴＬＰ（送信ＴＬＰ）に対して対向デバイスＴＤから送られてくるAck/NakパケットをＣＲＣエラー判定部１５で判定した判定結果である受信フラグ、Ack/Nak情報及び第１タイマ３１と第２タイマ３２でタイマ設定値（Replay時間）を計時して、これらの受信フラグ、Ack/Nak情報及びタイマ設定値（Replay時間）の計時結果に基づいて該対向デバイスＴＤに対する第１タイマ３１及び第２タイマ３２のタイマ設定値（Replay時間）を補正し、送信ＴＬＰに対して対向デバイスＴＤから該タイマ設定値の間に送られてくるAck/Nak情報に基づいてＴＬＰの再送信の要否を判定する。
【００４３】
次に、本実施例の作用を説明する。本実施例のデバイス１は、送信ＴＬＰに対するＤＬＬＰのパケット受信経過時間である第１カウンタ３１ｃのカウンタ値に基づいて第１タイマ３１及び第２タイマ３２のタイマ設定値を補正するとともに、送信ＴＬＰに対するＤＬＬＰが該合間設定値が経過するまでの間に対向デバイスＴＤから送られてくるか否か及び送られてきたＤＬＬＰの内容（Ack/Nak情報）に基づいてＴＬＰの再送信の要否を判定するＴＬＰ再送信制御処理を行う。
【００４４】
デバイス１は、ＰＣＩｅのプロトコルにおいてデバイス１で発生する可能性のある状態を、以下の４種類の状態に分類して、該状態毎に第１タイマ３１及び第２タイマ３２のタイマ設定値（Replay時間）を補正する。なお、第１タイマ３１のタイマ設定値の時間を、以下、適宜、Replay時間という。
【００４５】
状態Ａ：Ack/Nakをタイマ設定値（Replay時間）内に正常受信
状態Ｂ：Ack/Nakは正常受信したがタイマ設定値（Replay時間）が経過した後に受信
状態Ｃ：Ack/NakがＣＲＣエラー
状態Ｄ：Ack/Nakの判断がつかないブロークンなパケットを受信
まず、状態Ａの場合におけるタイマ設定値補正を伴うＴＬＰ再送信制御処理ついて、図３に基づいて説明する。デバイス１は、送信部２０のパケット送信部２２からＴＬＰ（第１ＴＬＰ）を発行して、ＰＣＩｅを介して対向デバイスＴＤに送信する。デバイス１は、ＴＬＰを送信すると、第１タイマ３１がタイマ値設定部３４から設定されるタイマ設定値（Replay時間）の計時を開始し、この第１タイマ３１によるタイマ設定値の計時の開始と同時に、第１タイマ３１の計時する経過時間の第１カウンタ３１ｃによるカウントを開始する。
【００４６】
対向デバイスＴＤは、デバイス１からのＴＬＰを受信してから予め設定されているAck/Nak Latency時間が経過した後、第１ＴＬＰに対するAck/Nakを通知する第１のAck/Nakパケット等のＤＬＬＰをデバイス１にＰＣＩｅを介して送信する。
【００４７】
デバイス１は、Ack/Nakパケット等のＤＬＬＰがＰＣＩｅを介して対向デバイスＴＤから送られてくると、ＤＬＬＰをパケット判定部１１及びAck/Nak受信部１４を介して受信してＣＲＣエラー判定部１５に送って、ＣＲＣエラー判定部１５が、ＤＬＬＰがAckパケットであるか、Nakパケットであるかを判定するとともに、ＤＬＬＰのパケット全てを対象としてＣＲＣ値を算出し、算出した１６ｂＣＲＣ値とパケットに付加されている１６ｂＣＲＣ値を比較して、エラー判定を行う。ＣＲＣエラー判定部１５は、エラー判定結果を送信部２０の再送制御部２１に伝達し、また、受信フラグ及びシーケンスNo.等のAck/Nak情報を送信部２０の再送制御部２１に送信する。
【００４８】
送信部２０の再送制御部２１は、受信部１０のＣＲＣエラー判定部１５から受信フラグ及びAck/Nak情報が送られてくると、図３の状態Ａの場合、第１タイマ３１がタイムアウトする前であるので、Ack/Nak情報がAckであると、ＴＬＰのデータ転送が成立し正常にＴＬＰの転送が完了したと判断し、また、Ack/Nak情報がNakであると、ＴＬＰのデータ転送に失敗したので、再送／クリアをReplay Buffer制御部２３に出力して、Replay Buffer制御部２３がReplay Bufferに保持する第１ＴＬＰをパケット送信部２２から再送信させる通常のＴＬＰ再送信処理を開始する。
【００４９】
そして、再送制御部２１は、対向デバイスＴＤからＤＬＬＰを第１タイマ３１がタイムアウトする前、すなわち、タイマ値設定部３４によって第１タイマ３１及び第２タイマ３２に設定されたタイマ設定値（Replay時間）の計時が完了する前に、受信しているので、ＤＬＬＰを受信したときの第１カウンタ３１ｃのカウンタ値Ａに基づいて、第１タイマ３１及び第２タイマ３２のタイマ設定値（Replay時間）をタイマ設定値Ａに補正する。すなわち、第１カウンタ３１ｃは、第１タイマ３１が計時を開始すると、該計時時間のカウントを開始し、ＤＬＬＰを受信したタイミングでカウントを停止して、そのカウンタ値Ａ（応答パケット受信経過時間）を保持する。第１カウンタ３１ｃは、保持したカウンタ値Ａをタイマ値設定部３４に出力し、タイマ値設定部３４は、このカウンタ値Ａに基づいて第１タイマ３１及び第２タイマにReplay時間としてのタイマ設定値を変更設定するタイマ設定値補正を行う。タイマ値設定部３４は、この変更後のタイマ設定値として、第１カウンタ３１ｃがカウントしたカウンタ値Ａを設定してもよいが、多少の余裕を持たせた時間（Ａ＋α）を設定することが望ましい。
【００５０】
デバイス１は、上記タイマ設定値補正処理を行うと、所定の時間後に、次のＴＬＰ（第２ＴＬＰ）を対向デバイスＴＤに送信し、第１タイマ３１及び第２タイマ３２によるこの変更後のタイマ設定値（Replay時間）の計時を開始する。
【００５１】
以降、上記同様に処理して、タイマ設定値（Replay時間）内にＤＬＬＰを受信すると、再度、タイマ設定値を補正する処理を行うが、このとき、タイマ設定値（Replay時間）とＤＬＬＰの受信時間との間の差が予め設定されている許容時間の範囲内であると、タイマ設定値の補正を行わないようにしてもよい。
【００５２】
このようにすると、ＴＬＰ送信後のＤＬＬＰを受信するまでの待ち時間であるタイマ設定値（Replay時間）を、対向デバイスＴＤの種類やＰＣＩｅのトラフィック等の通信状況に最適な長さに補正することができ、ＴＬＰの再送信が発生することを抑制しつつ適切かつ速やかにＴＬＰを送信することができる。
【００５３】
次に、状態Ｂの場合におけるタイマ設定値補正を伴うＴＬＰ再送制御処理ついて、図４に基づいて説明する。デバイス１は、送信部２０のパケット送信部２２からＴＬＰ（第１ＴＬＰ）を発行して、ＰＣＩｅを介して対向デバイスＴＤに送信する。デバイス１は、ＴＬＰを送信すると、第１タイマ３１がタイマ値設定部３４から設定されるタイマ設定値（Replay時間）の計時を開始し、この第１タイマ３１によるタイマ設定値の計時の開始と同時に、第１タイマの計時する経過時間の第１カウンタ３１ｃによるカウントを開始する。
【００５４】
対向デバイスＴＤは、デバイス１からのＴＬＰを受信してから予め設定されているAck/Nak Latency時間が経過した後、第１ＴＬＰに対するAck/Nakを通知する第１のAck/Nakパケット等のＤＬＬＰをデバイス１にＰＣＩｅを介して送信する。
【００５５】
デバイス１は、Ack/Nakパケット等のＤＬＬＰがＰＣＩｅを介して対向デバイスＴＤから送られてくる前に、第１タイマ３１がタイマ設定値をカウントアウトすると、ＴＬＰのデータ転送に失敗したので、再送／クリアをReplay Buffer制御部２３に出力して、Replay Buffer制御部２３がReplay Bufferに保持する第１ＴＬＰを再送第１ＴＬＰとしてパケット送信部２２から再送信させる通常のＴＬＰ再送信処理を開始するとともに、第２タイマ３２によるタイマ設定値（Replay時間）の計時を開始する。
【００５６】
その後、デバイス１は、Ack/Nakパケット等の第１ＴＬＰのＤＬＬＰ（第１のＤＬＬＰ）がＰＣＩｅを介して対向デバイスＴＤから送られてくると、ＣＲＣエラー判定部１５が、上記同様にAck/Nak判定及びＣＲＣエラーの判定を行って、エラー判定結果を送信部２０の再送制御部２１に伝達し、また、受信フラグ及びシーケンスNo.等のAck/Nak情報を送信部２０の再送制御部２１に送信する。
【００５７】
送信部２０の再送制御部２１は、受信部１０のＣＲＣエラー判定部１５から受信フラグ及びAck/Nak情報が送られてくると、図４の状態Ｂの場合、第１タイマ３１がタイムアウトして再送第１ＴＬＰを既に再送信しているので、Ack/Nak情報がAckであっても、Nakであっても、破棄し、ＤＬＬＰ（Ack/Nak情報）を受信したときの第１カウンタ３１ｃのカウンタ値をカウンタ値保持部３３に保持させて、第１タイマ３１をリセットする。再送制御部２１は、第１カウンタ３１ｃのカウンタ値Ｂをカウンタ値保持部３３に保持させると、図４に破線矢印で示す補正前のタイマ設定値の位置から該カウンタ値Ｂの位置まで、速やかに、タイマ値設定部３４を介して第２タイマ３２のタイマ設定値として反映させて補正する。
【００５８】
その後、デバイス１は、対向デバイスＴＤからＤＬＬＰを第２タイマ３２がタイムアウトする前、すなわち、カウンタ値Ｂで補正変更したタイマ設定値（Replay時間）の計時が完了する前に、受信しているので、ＤＬＬＰを受信したときの第２カウンタ３２ｃに基づいて、タイマ設定値（Replay時間）を補正する。すなわち、第２カウンタ３２ｃは、第２タイマ３２が計時を開始すると、該第２タイマ３２の計時する経過時間のカウントを開始し、ＤＬＬＰを受信したタイミングでカウントを停止して、そのカウンタ値Ｂを保持する。第２カウンタ３２ｃは、保持したカウンタ値Ｂをタイマ値設定部３４に出力し、タイマ値設定部３４は、このカウンタ値Ｂに基づいて第１タイマ３１及び第２タイマにReplay時間としてのタイマ設定値を変更設定するタイマ値補正を行う。タイマ値設定部３４は、この変更後のタイマ設定値として、第２カウンタ３２ｃがカウントしたカウンタ値Ｂを設定してもよいが、多少の余裕を持たせた時間（Ｂ＋α）を設定することが望ましい。上記補正処理を完了すると、再送制御部２１は、第２タイマ３２及び第２カウンタ３２ｃをリセットする。
【００５９】
デバイス１は、上記タイマ設定値補正処理を行うと、所定の時間後に、次のＴＬＰ（第２ＴＬＰ）を対向デバイスＴＤに送信し、第１タイマ３１及び第２タイマ３２によるこの変更後のタイマ設定値（Replay時間）の計時を開始する。
【００６０】
以降、上記同様に処理して、タイマ設定値（Replay時間）内にＤＬＬＰを受信すると、再度、タイマ設定値を補正するタイマ設定値補正処理を行うが、このとき、タイマ設定値（Replay時間）とＤＬＬＰの受信時間との間の差が予め設定されている許容時間の範囲内であると、タイマ設定値の補正を行わないようにしてもよい。
【００６１】
このようにすると、ＴＬＰ送信後のＤＬＬＰを受信するまでの再送信待ち時間であるタイマ設定値（Replay時間）を、対向デバイスＴＤの種類やＰＣＩｅのトラフィック等の通信状況に最適な長さに補正することができ、ＴＬＰの再送信が発生することを抑制しつつ適切かつ速やかにＴＬＰを送信することができる。
【００６２】
次に、状態Ｃの場合におけるタイマ設定値補正を伴うＴＬＰ再送制御処理ついて、図５に基づいて説明する。デバイス１は、送信部２０のパケット送信部２２からＴＬＰ（第１ＴＬＰ）を発行して、ＰＣＩｅを介して対向デバイスＴＤに送信する。デバイス１は、ＴＬＰを送信すると、第１タイマ３１がタイマ値設定部３４から設定されるタイマ設定値（Replay時間）の計時を開始し、この第１タイマ３１によるタイマ設定値の計時の開始と同時に、第１タイマ３１の計時する径時時間の第１カウンタ３１ｃによるカウントを開始する。
【００６３】
対向デバイスＴＤは、デバイス１からのＴＬＰを受信してから予め設定されているAck/Nak Latency時間が経過した後、第１ＴＬＰに対するAck/Nakを通知する第１のAck/Nakパケット等のＤＬＬＰをデバイス１にＰＣＩｅを介して送信する。
【００６４】
デバイス１は、Ack/Nakパケット等のＤＬＬＰがＰＣＩｅを介して対向デバイスＴＤから送られてくると、該ＤＬＬＰをパケット判定部１１及びAck/Nak受信部１４を介して受信してＣＲＣエラー判定部１５に送る。ＣＲＣエラー判定部１５は、ＤＬＬＰがAckパケットであるか、Nakパケットであるかを判定するとともに、ＤＬＬＰのパケット全てを対象としてＣＲＣ値を算出し、算出した１６ｂＣＲＣ値とパケットに付加されている１６ｂＣＲＣ値を比較して、エラー判定を行う。再送制御部２１は、ＣＲＣエラー判定部１５が、ＣＲＣエラーであると判定すると、ＤＬＬＰを受信していないことになるため、第１タイマ３１による計時を継続して、Ack/Nakパケット等のＤＬＬＰがＰＣＩｅを介して対向デバイスＴＤから送られてくる前に、第１タイマ３１がタイマ設定値をカウントアウトすると、通常のＴＬＰ再送信処理を開始する。すなわち、デバイス１は、再送／クリアをReplay Buffer制御部２３に出力して、Replay Buffer制御部２３がReplay Bufferに保持する第１ＴＬＰを再送第１ＴＬＰとしてパケット送信部２２から再送信させる。
【００６５】
この場合、Ack/Nak情報であるＤＬＬＰの信頼性がないため、デバイス１は、タイマ設定値補正処理を行わず、第１ＴＬＰの送信時と同様に、第１タイマ３１のみを用いてタイマ設定値の計時を行う。その後、デバイス１は、Ack/Nakパケット等の第１ＴＬＰのＤＬＬＰ（第１のＤＬＬＰ）がＰＣＩｅを介して対向デバイスＴＤから送られてくると、ＣＲＣエラー判定部１５が、上記同様にAck/Nak判定及びＣＲＣのエラー判定を行い、エラー判定結果を送信部２０の再送制御部２１に伝達し、また、受信フラグ及びシーケンスNo.等のAck/Nak情報を送信部２０の再送制御部２１に送信する。
【００６６】
送信部２０の再送制御部２１は、受信部１０のＣＲＣエラー判定部１５から受信フラグ及びAck/Nak情報が送られてくると、図５の状態Ｃの場合、第１タイマ３１がタイムアウトする前であるので、Ack/Nak情報がAckであると、ＴＬＰのデータ転送が成立し正常にＴＬＰの転送が完了したと判断し、また、Ack/Nak情報がNakであると、ＴＬＰのデータ転送に失敗したので、再送／クリアをReplay Buffer制御部２３に出力して、Replay Buffer制御部２３がReplay Bufferに保持する第１ＴＬＰをパケット送信部２２から再送信する通常のＴＬＰ再送信処理を開始する。
【００６７】
そして、再送制御部２１は、対向デバイスＴＤから再送第１のＤＬＬＰを第１タイマ３１がタイムアウトする前、すなわち、タイマ値設定部３４によって第１タイマ３１及び第２タイマ３２に設定されたタイマ設定値（Replay時間）の計時が完了する前に、受信すると、再送ＴＬＰに対するＤＬＬＰであるため、正確性に劣ると判断して、タイマ設定値の補正を行わない。
【００６８】
なお、この場合、再送制御部２１は、再送ＴＬＰに対して第１タイマ３１がタイマ設定値をタイムアウトする前に受信したＤＬＬＰであるが、該ＤＬＬＰを受信したときの第１カウンタ３１ｃのカウンタ値Ａに基づいて、タイマ設定値（Replay時間）を上記同様にタイマ設定値Ａに補正してもよい。
【００６９】
このようにすると、ＣＲＣエラー発生時の不確かな時間を用いてタイマ設定値を補正することなく、ＴＬＰ送信後のＤＬＬＰを受信するまでの待ち時間であるタイマ設定値（Replay時間）を、ＣＲＣエラーの発生していないときのカウンタ値Ａを用いて、対向デバイスＴＤの種類やＰＣＩｅのトラフィック等の通信状況に最適な長さに補正することができ、ＴＬＰの再送信が発生することを抑制しつつ適切かつ速やかにＴＬＰを送信することができる。
【００７０】
次に、状態Ｄにおけるタイマ設定値補正を伴うＴＬＰ再送制御処理ついて、図６に基づいて説明する。デバイス１は、送信部２０のパケット送信部２２からＴＬＰ（第１ＴＬＰ）を発行して、ＰＣＩｅを介して対向デバイスＴＤに送信する。デバイス１は、ＴＬＰを送信すると、第１タイマ３１がタイマ値設定部３４から設定されるタイマ設定値（Replay時間）の計時を開始し、この第１タイマ３１によるタイマ設定値の計時の開始と同時に、第１タイマ３１の計時する径時時間の第１カウンタ３１ｃによるカウントを開始する。
【００７１】
対向デバイスＴＤは、デバイス１からのＴＬＰを受信してから予め設定されているAck/Nak Latency時間が経過した後、第１ＴＬＰに対するAck/Nakを通知する第１のAck/Nakパケット等のＤＬＬＰをデバイス１にＰＣＩｅを介して送信する。
【００７２】
デバイス１は、Ack/Nakパケット等のＤＬＬＰがＰＣＩｅを介して対向デバイスＴＤから送られてくると、パケット判定部１１でＴＬＰであるか、ＤＬＬＰであるか判定するが、ＴＬＰと認識されないときには、そのパケットを破棄して、次のパケットの受信を待つ。
【００７３】
送信部２０の再送制御部２１は、Ack/Nakパケット等の正常なＤＬＬＰがＰＣＩｅを介して対向デバイスＴＤから送られてくる前に、第１タイマ３１がタイマ設定値をカウントアウトすると、通常のＴＬＰ再送信処理を開始する。すなわち、デバイス１は、再送／クリアをReplay Buffer制御部２３に出力して、Replay Buffer制御部２３がReplay Bufferに保持する第１ＴＬＰを再送第１ＴＬＰとしてパケット送信部２２から再送信させるとともに、第２タイマ３２によるタイマ設定値（Replay時間）の計時を開始する。
【００７４】
その後、デバイス１は、Ack/Nakパケット等の第１ＴＬＰのＤＬＬＰ（第１のＤＬＬＰ）がＰＣＩｅを介して対向デバイスＴＤから送られてくると、ＣＲＣエラー判定部１５が、上記同様にAck/Nak判定及びＣＲＣのエラー判定を行い、エラー判定結果を送信部２０の再送制御部２１に伝達し、また、受信フラグ及びシーケンスNo.等のAck/Nak情報を送信部２０の再送制御部２１に送信する。
【００７５】
送信部２０の再送制御部２１は、受信部１０のＣＲＣエラー判定部１５から受信フラグ及びAck/Nak情報が送られてくると、このAck/Nak情報は、第１ＴＬＰに対する適切な第１のAck/Nak情報（第１のＤＬＬＰ）を受信する前に、第１タイマ３１がタイムアウトして再送信した再送第１ＴＬＰに対するAck/Nak情報（再送第１のＤＬＬＰ）であるため、タイマ設定値の補正を実施しない。
【００７６】
なお、再送制御部２１は、Ack/Nak情報における順番の判断を、受信部１０のＣＲＣエラー判定部１５からのAck/Nak情報のシーケンスNo.によって判断することができる。
【００７７】
このようにすると、不確かなパケットを受信した時間を用いてタイマ設定値を補正することなく、ＴＬＰ送信後のＤＬＬＰを受信するまでの待ち時間であるタイマ設定値（Replay時間）を、適正なＤＬＬＰを受信したときの第１カウンタ３１ｃのカウンタ値を用いて、対向デバイスＴＤの種類やＰＣＩｅのトラフィック等の通信状況に最適な長さに補正することができ、ＴＬＰの再送信が発生することを抑制しつつ適切かつ速やかにＴＬＰを送信することができる。
【００７８】
デバイス１における上記タイマ設定値補正を伴うＴＬＰ再送制御処理は、図７及び図８のフローチャートのように示すことができる。すなわち、デバイス１は、第１ＴＬＰを送信すると（ステップＳ１０１）、第１タイマ３１によるタイマ設定値の計時をスタートさせ（ステップＳ１０２）、第１ＴＬＰのAck/Nak等のＤＬＬＰを、第１タイマ３１がタイマ設定値を計時してタイムアウトするまでに受信したかチェックする（ステップＳ１０３、Ｓ１０４）)。
【００７９】
ステップＳ１０３で、第１タイマ３１がタイマ設定値をタイムアウトする前に、ＤＬＬＰを受信すると、デバイス１は、ＣＲＣエラー判定部１５によって該ＤＬＬＰにＣＲＣエラー有りと判定されたかチェックし（ステップＳ１０５）、ＣＲＣエラーがないときには、Ack/NakパケットであるＤＬＬＰを受信したときの第１カウンタ３１ｃのカウンタ値をタイマ設定値Ａとしてカウンタ値保持部３に保持して（ステップＳ１０６）、第１タイマ３１をリセットする（ステップＳ１０７）。
【００８０】
デバイス１は、第１タイマ３１をリセットすると、第１タイマ３１及び第２タイマ３２をカウンタ値保持部３３に保持したカウンタ値であるタイマ設定値Ａをタイマ値設定部３４を介して第１タイマ３１及び第２タイマ３２に設定することで、タイマ設定値を補正するタイマ設定値補正処理を行い（ステップＳ１０８）、受信したＤＬＬＰが第１ＴＬＰのAckパケットであるかチェックする（ステップＳ１０９）。
【００８１】
ステップＳ１０９で、Ackパケットを受信したときには、デバイス１は、図８に示すように、第１ＴＬＰの送信が正常に完了したとして、第１ＴＬＰの送信におけるＴＬＰ再送信制御処理を終了する。
【００８２】
ステップＳ１０９で、Ackパケットではなく、Nakパケットを受信したときには、デバイス１は、上述のように、図８に示す通常のＴＬＰ再送信処理を行って、ＴＬＰ再送信制御処理を終了する（ステップＳ１１０）。
【００８３】
図７のステップＳ１０５で、受信したＤＬＬＰにＣＲＣエラーがあるときには、デバイス１は、図８に示す通常のＴＬＰ再送信処理を行って、ＴＬＰ再送信制御処理を終了する（ステップＳ１１０）。
【００８４】
図７のステップＳ１０４で、第１ＴＬＰに対するＤＬＬＰを受信することなく、第１タイマ３１のタイマ設定値のタイムアウトが発生すると、デバイス１は、再送第１ＴＬＰの再送信を行い（ステップＳ１１１）、第２タイマ３２のタイマ設定値の計時を開始させる（ステップＳ１１２）。
【００８５】
デバイス１は、第２タイマ３２をスタートさせると、第１ＴＬＰのAck/Nak等のＤＬＬＰまたは再送第１ＴＬＰのAck/Nak等のＤＬＬＰを、第２タイマ３２がタイマ設定値（再送第１タイマ設定値）を計時してタイムアウトするまでに受信したかチェックし（ステップＳ１１３、Ｓ１１４、Ｓ１１５)、ステップＳ１１３で、第１のＤＬＬＰを受信すると、第１のＤＬＬＰ（Ack/Nak等）を受信したときの第１カウンタ３１ｃのカウンタ値をタイマ設定値Ｂとしてカウンタ値保持部３３に保管して（ステップＳ１１６）、第１タイマ３１をリセットする（ステップＳ１１７）。
【００８６】
デバイス１は、第１タイマ３１をリセットすると、ＣＲＣエラー判定部１５によって該ＤＬＬＰにＣＲＣエラー有りと判定されたかチェックし（ステップＳ１１８）、ＣＲＣエラーがないときには、第１ＴＬＰのAck/Nakパケットである第１のＤＬＬＰを受信したときの第１カウンタ３１ｃのカウンタ値をタイマ設定値Ｂとしてカウンタ値保持部３に保持する。デバイス１は、タイマ設定値Ｂをカウンタ値保持部３３に保持すると、速やかに、該タイマ設定値Ｂをタイマ値設定部３４を介して第１タイマ３１及び第２タイマ３２にセットしてタイマ設定値を補正するタイマ設定値補正処理を行い（ステップＳ１１９）、図８に示すように、再送第１ＴＬＰのAck/Nakパケットである再送第１のＤＬＬＰを、補正後のタイマ設定値Ｂを、第１タイマ３１が計時してタイムアウト（補正第１タイムアウト）が発生する前に、受信したかチェックする（ステップＳ１２０、Ｓ１２１）。
【００８７】
ステップＳ１２０で、補正第１タイムアウトが発生する前に、再送第１のＤＬＬＰを受信すると、デバイス１は、第２タイマ３２をリセットし（ステップＳ１２２）、再送第１受信した再送第１のＤＬＬＰにＣＲＣエラーがあるかチェックする（ステップＳ１２３）。
【００８８】
ステップＳ１２３で、ＣＲＣエラーがあるときには、デバイス１は、第１ＴＬＰの通常のＴＬＰ再送信処理（再々送信）を行って、ＴＬＰ再送信制御処理を終了し（ステップＳ１１０）、ステップＳ１２３で、ＣＲＣエラーがないときには、受信した再送第１のＤＬＬＰがAckパケットであるかチェックする（ステップＳ１２４）。
【００８９】
ステップＳ１２４で、Ackパケットを受信したときには、デバイス１は、再送第１ＴＬＰの再送信が正常に完了したとして、第１ＴＬＰの送信におけるＴＬＰ再送信制御処理を終了する。
【００９０】
ステップＳ１２４で、Nakパケットを受信したときには、デバイス１は、再送第１ＴＬＰの再送信に失敗したとして、第１ＴＬＰの通常のＴＬＰ再送信処理（再々送信）を行って、ＴＬＰ再送信制御処理を終了する（ステップＳ１１０）。
【００９１】
上記ステップＳ１２１で、再送第１のAck/NakのＤＬＬＰを受信することなく、補正第１タイムアウトが発生すると、デバイス１は、第１ＴＬＰの再送信に失敗したと判断して、第２タイマ３２をリセットして（ステップＳ１２５）、第１ＴＬＰの通常のＴＬＰ再送信処理（再々送信）を行って、ＴＬＰ再送制御処理を終了する（ステップＳ１１０）。
【００９２】
上記図７のステップＳ１１４で、第１のAck/Nakである第１のＤＬＬＰを受信することなく、再送第１のAck/Nakである再送第１のＤＬＬＰを受信すると、再送信によるものであり信頼性が低いと判断して、タイマ設定値の補正を行うことなく、第１タイマ３１及び第２タイマ３２をリセットし（ステップＳ１２６）、該再送第１のＤＬＬＰにＣＲＣエラーがあるかチェックする（ステップＳ１２７）。
【００９３】
ステップＳ１２７で、再送第１のＤＬＬＰにＣＲＣエラーがあるときには、デバイス１は、図８に示すように、第１ＴＬＰの通常のＴＬＰ再送信処理（再々送信）を行って、ＴＬＰ再送信制御処理を終了し（ステップＳ１１０）、ステップＳ１２７で、ＣＲＣエラーがないときには、受信した再送第１のＤＬＬＰがAckパケットであるかチェックする（ステップＳ１２８）。
【００９４】
ステップＳ１２８で、Ackパケットを受信したときには、デバイス１は、図８に示すように、第１ＴＬＰの送信が正常に完了したとして、第１ＴＬＰの送信におけるＴＬＰ再送信制御処理を終了する。
【００９５】
ステップＳ１２８で、Ackパケットではなく、Nakパケットを受信したときには、デバイス１は、再送第１ＴＬＰの送信に失敗したと判断して、上述のように、図８に示す通常のＴＬＰ再送信処理（再々送信）を行って、ＴＬＰ再送信制御処理を終了する（ステップＳ１１０）。
【００９６】
上記ステップＳ１１５で、第１ＴＬＰのAck/Nak等のＤＬＬＰと再送第１ＴＬＰのAck/Nak等のＤＬＬＰのいずれをも受信することなく、第２タイマ３２がタイマ設定値（再送第１タイマ設定値）を計時してタイムアウトすると、再送第１ＴＬＰの送信に失敗したと判断して、第１タイマ３１及び第２タイマ３２をリセットした後（ステップＳ１２９）、上述のように、図８に示す通常のＴＬＰ再送信処理（再々送信）を行って、ＴＬＰ再送信制御処理を終了する（ステップＳ１１０）。
【００９７】
なお、ＰＣＩｅにおいては、同じＴＬＰの再送信については、４回までとなっており、４回目の再送信を行った後、エラーレポート（Replay_Num_Rollover）を発行する。したがって、このエラーレポートによって、伝送路上に問題があることが認識され、リトレーニングを実施して、リンクを再形成することから実行する。
【００９８】
このように、本実施例のデバイス１は、送信部２０のパケット送信部２２からリクエストまたはデータのパケットを送信すると、該パケットをReplay Buffer制御部２３のReplay Bufferに保存し、送信したパケットに対して送信先の対向デバイスＴＤから送られてくる受信結果応答パケットであるAck/Nakパケット等のＤＬＬＰを、予め設定されている再送信待ち時間であるタイマ設定値（Replay時間）内に受信部１０が受信するか否かに基づいてReplay Bufferに保持されているパケットを再送信するか否かを制御するとともに、前記パケットを送信してから該パケットに対するＤＬＬＰを受信するまでの応答パケット受信経過時間である第１タイマ３１の内蔵する第１カウンタ３１ｃのカウンタ値Ａに基づいてタイマ設定値（Replay時間）を補正している。
【００９９】
したがって、パケットを送信してから対向デバイスＴＤからのＤＬＬＰを受信しない場合に再送信を開始するまでのタイマ設定値（Replay時間）を、対向デバイスＴＤ及び通信路であるＰＣＩｅの状態等によって実際にＤＬＬＰを受信するまでの応答パケット受信経過時間である第１カウンタ３１ｃのカウンタ値に基づいて補正することができ、パケットが正常転送できなかった場合にパケットを所定の時間経過後に再送信するデータ通信を、安定してかつ速やかに行うことができる。
【０１００】
また、本実施例のデバイス１は、再送制御部２１の第１タイマ３１によって、パケット送信部２２がパケットを送信したときからタイマ設定値（Replay時間）を計時し、パケット送信部２２がパケットを送信したときから該送信パケットに対するＤＬＬＰを受信部１０が受信するまでに第１タイマ３１が計時する経過時間をカウンタ値（応答パケット受信経過時間）として第１カウンタ３１ｃによってカウントして、該第１カウンタ３１ｃがカウントしたカウンタ値に基づいてタイマ設定値（Replay時間）を、カウンタ値保持部３３及びタイマ値設定部３４によって補正して、再送制御部２１が、第１タイマ３１がタイマ設定値（Replay時間）の計時を完了する前に受信部１０がＤＬＬＰを受信するか否かに基づいて、Replay Bufferのパケットをパケット送信部２２に送信させる再送信を行うか否の再送信制御処理を行っている。
【０１０１】
したがって、パケットを送信してから対向デバイスＴＤからのＤＬＬＰを受信しない場合に再送信を開始するまでのタイマ設定値（Replay時間）を、対向デバイスＴＤ及び通信路であるＰＣＩｅの状態等によって実際にＤＬＬＰを受信するまでの応答パケット受信経過時間である第１カウンタ３１ｃのカウンタ値に基づいて簡単かつ適切に補正することができ、パケットが正常転送できなかった場合にパケットを所定の時間経過後に再送信するデータ通信を、安定してかつ速やかに行うことができる。
【０１０２】
さらに、本実施例のデバイス１は、ＤＬＬＰを受信することなくタイマ設定値（Replay時間）が経過してReplay Bufferのパケットを再送信したときからのタイマ設定値（Replay時間）を第２タイマ３２で計時し、第１カウンタ３１ｃがカウントしたカウンタ値に基づいてタイマ設定値（Replay時間）を補正するとともに、再送信に対する第２タイマ３２が計時するタイマ設定値（再送信待ち時間）が経過する前に最初のパケットまたは再送信したパケットに対するＤＬＬＰを受信するか否かに基づいて、Replay Bufferのパケットを再送信するか否か制御している。
【０１０３】
したがって、パケットの再送信を行った場合にも、パケットを送信してから対向デバイスＴＤからのＤＬＬＰを受信しない場合に再送信を開始するまでのタイマ設定値（Replay時間）を、対向デバイスＴＤ及び通信路であるＰＣＩｅの状態等によって実際にＤＬＬＰを受信するまでの応答パケット受信経過時間である第１カウンタ３１ｃのカウンタ値に基づいて簡単かつ適切に補正することができ、パケットが正常転送できなかった場合にパケットを所定の時間経過後に再送信するデータ通信を、安定してかつ速やかに行うことができる。
【０１０４】
また、本実施例のデバイス１は、同じパケットについて最初に送信したパケットに対するＤＬＬＰを受信するまでの第１カウンタ３１ｃのカウンタ値にのみ基づいてタイマ設定値（Replay時間）を補正している。
【０１０５】
したがって、同じパケットについて再送信したパケットに対する不確かなＤＬＬＰでタイマ設定値（Replay時間）を補正することなく、最初のパケットに対するＤＬＬＰに基づいてのみ、タイマ設定値（Replay時間）を補正して、タイマ設定値（Replay時間）をより一層適切な時間に補正することができ、データ通信を、より一層安定してかつより一層速やかに行うことができる。
【０１０６】
さらに、本実施例のデバイス１は、受信したパケットが正常なAck/Nakパケット等のＤＬＬＰであるか否かを、受信部１０のパケット判定部１１及びＣＲＣエラー判定部１５で判断し、受信したパケットが正常なＤＬＬＰであると判断したときにのみ、該ＤＬＬＰを受信するまでの第１タイマ３１の第１カウンタ３１ｃのカウンタ値Ａに基づいてタイマ設定値（Replay時間）を補正している。
【０１０７】
したがって、不確かなパケットの受信に基づいてタイマ設定値（Replay時間）を補正することなく、最初のパケットに対するＤＬＬＰに基づいてのみ、タイマ設定値（Replay時間）を補正して、タイマ設定値（Replay時間）をより一層適切な時間に補正することができ、データ通信をより一層安定してかつより一層速やかに行うことができる。
【０１０８】
なお、上記実施例において、デバイス１の再送制御部２１は、第１タイマ３１と第２タイマ３２に現在設定されているタイマ設定値（Replay時間）が第１カウンタ３１ｃのカウンタ値との時間差が予め設定された許容時間幅よりも大きいときにのみカウンタ値で第１タイマ３１と第２タイマ３２のタイマ設定値を補正するようにしてもよい。
【０１０９】
このようにすると、頻繁にタイマ設定値（Replay時間）を補正することなく適切なタイマ設定値（Replay時間）を設定して、データ通信をより一層安定してかつより一層速やかに行うことができる。
【０１１０】
以上、本発明者によってなされた発明を好適な実施例に基づき具体的に説明したが、本発明は上記実施例で説明したものに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【０１１１】
本発明は、パケットが正常転送できなかった場合にパケットを所定の時間経過後に再送信するデータ通信を行うデータ通信装置、データ通信制御方法、データ通信制御プログラム及び記録媒体に利用することができる。
【符号の説明】
【０１１２】
１  デバイス
ＴＤ  対向デバイス
１０  受信部
１１  パケット判定部
１２  パケット受信部
１３  ＣＲＣエラー判定部
１４  Ack/Nak受信部
１５  ＣＲＣエラー判定部
２０  送信部
２１  送信制御部
２２  パケット送信部
２３  Replay Buffer制御部
３０  ＴＬＰ制御部
３１  第１タイマ
３１ｃ  第１カウンタ
３２  第２タイマ
３２ｃ  第２カウンタ
３３  カウンタ値保持部
３４  タイマ値設定部
４０  ＴＬＰ制御部
【先行技術文献】
【特許文献】
【０１１３】
【特許文献１】特開２００８−２０４２４５号公報
【図１】
2011039897.tif 000003
【図２】
2011039897.tif 000004
【図３】
2011039897.tif 000005
【図４】
2011039897.tif 000006
【図５】
2011039897.tif 000007
【図６】
2011039897.tif 000008
【図７】
2011039897.tif 000009
【図８】
2011039897.tif 000010
【図９】
2011039897.tif 000011