(57)【特許請求の範囲】
【請求項１】
装置の外部のユニバーサル・シリアル・バス（ＵＳＢ）ホストと通信することができるＵＳＢデバイスを備える前記装置であって、
第１の時間（Ｔ１）に、前記ＵＳＢデバイスの、後の時間に前記ＵＳＢホストとデータを交換する能力を、バッファ・サイズ、確保されたバッファ容量の量、またはバッファが空、フル、またはほとんどフルであるかに対応するバッファ状態、のうちの少なくとも１つに、少なくとも部分的に基づいて判定し、
前記後の時間の前の第２の時間（Ｔ２）に、前記判定されたＵＳＢデバイスの能力に基づいて、フロー制御のための第１の通知を、前記ＵＳＢホストへ送り（６１４）、
前記第２の時間の後に、前記第１の通知に応答して、前記ＵＳＢホストから、より遅いレートで、トークン・パケットを受信し（６１６）、
前記後の時間の後の第３の時間（Ｔ３）に、前記ＵＳＢデバイスの、前記ＵＳＢホストとデータを交換する前記能力が、前記バッファ・サイズ、前記確保されたバッファ容量の量、または前記バッファ状態のうちの少なくとも１つに、少なくとも部分的に基づいて変化したという判定に応答して、フロー制御のための第２の通知を、前記ＵＳＢホストへ送り（６１８）、
前記第２の通知に応答して、前記ＵＳＢホストから、前記より遅いレートとは異なるレートでさらなるトークン・パケットを受信し（６２０）、ここにおいて、フロー制御のための他の何れの通知も、前記第２の時間と前記第３の時間との間に、前記ＵＳＢデバイスによって、前記ＵＳＢホストに送られない、ためのプロセッサと、
前記プロセッサに接続されたメモリと
を備える装置。
【請求項２】
前記プロセッサは、前記ＵＳＢデバイスと前記ＵＳＢホストとの間の複数のパイプのうちの特定のパイプのために、前記フロー制御のための第１の通知を送る請求項１に記載の装置。
【請求項３】
前記プロセッサは、前記ＵＳＢデバイスが前記ＵＳＢホストとデータを交換できないことをさらに判定し、データ交換を中止するために、前記ＵＳＢホストに、前記第１の通知としてフロー・オフ通知を送る請求項１に記載の装置。
【請求項４】
前記フロー・オフ通知を送った後、前記プロセッサは、前記ＵＳＢデバイスが前記ＵＳＢホストとデータを交換できることをさらに判定し、データ交換を再開するために、前記ＵＳＢホストへ、前記第２の通知としてフロー・オン通知を送る請求項３に記載の装置。
【請求項５】
前記プロセッサは、前記ＵＳＢデバイスのバッファが空であることをさらに判定し、
前記ＵＳＢデバイスは、前記ＵＳＢホストへデータおよび／またはハンドシェイク・パケットを送信することを控える、請求項１に記載の装置。
【請求項６】
前記プロセッサは、前記ＵＳＢホストから、トークン・パケットが受信されたレートを下げることを促すために第４の時間（Ｔ４）に前記第１の通知としてフロー・オフ通知をさらに送る請求項５に記載の装置。
【請求項７】
前記フロー・オフ通知を送った後、第５の時間（Ｔ５）に、前記プロセッサはさらに、前記プロセッサが、前記ＵＳＢデバイスから前記ＵＳＢホストへ送るデータがあると判定した場合、前記ＵＳＢホストへフロー・オン通知を送り、
前記ＵＳＢホストは、前記フロー・オン通知に応答して、前記ＵＳＢデバイスへＩＮトークン・パケットを送ることを再開する請求項６に記載の装置。
【請求項８】
前記プロセッサは、前記ＵＳＢデバイスが前記ＵＳＢホストからデータを受信できないことをさらに判定し、前記ＵＳＢホストへフロー・オフ通知を送り、
前記ＵＳＢホストは、前記フロー・オフ通知に応答して、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットを前記ＵＳＢデバイスへ送信することを中止する請求項１に記載の装置。
【請求項９】
前記プロセッサは、前記ＵＳＢデバイスにおけるバッファがフルまたは、ほとんどフルである場合、前記ＵＳＢデバイスが前記ＵＳＢホストからデータを受信できないことをさらに判定する請求項８に記載の装置。
【請求項１０】
前記プロセッサは、前記ＵＳＢデバイスにおけるバッファが、フル、またはほとんどフルである場合、前記ＵＳＢデバイスが、前記ＵＳＢホストからデータを受信できないことをさらに判定し、
前記予め定めた量は、前記フロー・オフ通知の受信後、前記ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットを中止する際における前記ＵＳＢホストによる遅れに対処するために確保されたバッファ容量に対応している請求項８に記載の装置。
【請求項１１】
前記フロー・オフ通知を送った後、前記プロセッサは、前記ＵＳＢデバイスが前記ＵＳＢホストからデータを受信できることを判定し、前記ＵＳＢホストへフロー・オン通知を送り、
前記ＵＳＢホストは、前記フロー・オン通知に応答して、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットを前記ＵＳＢデバイスへ送信することを再開する請求項８に記載の装置。
【請求項１２】
前記プロセッサは、フロー制御のための前記第１の通知、またはフロー制御のための前記第２の通知のうちの少なくとも１つを、割り込みパイプで、前記ＵＳＢホストへさらに送信する請求項１に記載の装置。
【請求項１３】
前記プロセッサは、前記割り込みパイプのＩＮトークン・パケットを、前記ＵＳＢホストからさらに受信し、前記ＩＮトークン・パケットを受信した後、前記フロー制御のための第１の通知を、前記割り込みパイプで送る請求項１２に記載の装置。
【請求項１４】
装置のユニバーサル・シリアル・バス（ＵＳＢ）デバイスによって実行される方法であって、
第１の時間に、前記ＵＳＢデバイスの、後の時間にＵＳＢホストとデータを交換する能力を、バッファ・サイズ、確保されたバッファ容量の量、または前記装置のバッファが空、フル、またはほとんどフルであるかに対応するバッファ状態、のうちの少なくとも１つに、少なくとも部分的に基づいて判定することと、
前記後の時間の前の第２の時間に、前記判定されたＵＳＢデバイスの能力に基づいて、フロー制御のための第１の通知を、前記ＵＳＢホストへ送ることと、
前記第２の時間の後に、前記第１の通知に応答して、前記ＵＳＢホストから、より遅いレートで、トークン・パケットを受信することと、
前記後の時間の後の第３の時間に、前記ＵＳＢデバイスの、前記ＵＳＢホストとデータを交換する前記能力が、前記バッファ・サイズ、前記確保されたバッファ容量の量、または前記バッファ状態のうちの少なくとも１つに、少なくとも部分的に基づいて変化したという判定に応答して、フロー制御のための第２の通知を、前記ＵＳＢホストへ送ることと、
前記第２の通知に応答して、前記ＵＳＢホストから、前記より遅いレートとは異なるレートでさらなるトークン・パケットを受信することと、ここにおいて、フロー制御のための他の何れの通知も、前記第２の時間と前記第３の時間との間に、前記ＵＳＢデバイスによって、前記ＵＳＢホストに送られない、
を備える方法。
【請求項１５】
前記ＵＳＢデバイスの能力を判定することは、前記ＵＳＢデバイスが前記ＵＳＢホストとデータを交換できないことを判定することを含み、
前記フロー制御のための第１の通知を送ることは、データ交換を中止するために、前記ＵＳＢホストに、前記第１の通知としてフロー・オフ通知を送ることを含む請求項１４に記載の方法。
【請求項１６】
前記ＵＳＢデバイスが、前記ＵＳＢホストとデータを交換することができないと判定した後、前記ＵＳＢデバイスが、
前記ＵＳＢデバイスが前記ＵＳＢホストとデータを交換できることを判定することと、
データ交換を再開するために、前記ＵＳＢホストへ、前記第２の通知としてフロー・オン通知を送ることと
を更に含む請求項１５に記載の方法。
【請求項１７】
前記フロー制御のための第１の通知を送ることは、前記フロー制御のための第１の通知を、割り込みパイプで、前記ＵＳＢホストへ送ることを含む請求項１４に記載の方法。
【請求項１８】
ユニバーサル・シリアル・バス（ＵＳＢ）デバイスとして使用するための装置であって、
第１の時間に、前記ＵＳＢデバイスの、後の時間にＵＳＢホストとデータを交換する能力を、バッファ・サイズ、確保されたバッファ容量の量、またはバッファが空、フル、またはほとんどフルであるかに対応するバッファ状態、のうちの少なくとも１つに、少なくとも部分的に基づいて判定する手段と、
前記後の時間の前の第２の時間に、前記判定されたＵＳＢデバイスの能力に基づいて、前記ＵＳＢホストへ、フロー制御のための第１の通知を送信する手段と、
前記第２の時間の後に、前記第１の通知に応答して、前記ＵＳＢホストから、より遅いレートで、前記ＵＳＢデバイスにおいてトークン・パケットを受信する手段と、
前記後の時間の後の第３の時間に、前記ＵＳＢデバイスの、前記ＵＳＢホストとデータを交換する前記能力が、前記バッファ・サイズ、前記確保されたバッファ容量の量、または前記バッファ状態、に少なくとも部分的に基づいて変化したという判定に応答して、フロー制御のための第２の通知を、前記ＵＳＢホストへ送る手段と、
前記第２の通知に応答して、前記ＵＳＢホストから、前記より遅いレートとは異なるレートでさらなるトークン・パケットを受信する手段と、ここにおいて、フロー制御のための他の何れの通知も、前記第２の時間と前記第３の時間との間に、前記ＵＳＢデバイスによって、前記ホストに送られない、
を備える装置。
【請求項１９】
第１の時間に、ユニバーサル・シリアル・バス（ＵＳＢ）デバイスの、後の時間にＵＳＢホストとデータを交換する能力を、バッファ・サイズ、確保されたバッファ容量の量、または前記ＵＳＢデバイスのバッファが空、フル、またはほとんどフルであるかに対応するバッファ状態、のうちの少なくとも１つに、少なくとも部分的に基づいて判定し、
前記後の時間の前の第２の時間に、前記判定されたＵＳＢデバイスの能力に基づいて、前記ＵＳＢホストへ、前記ＵＳＢデバイスが、フロー制御のための第１の通知を送信し、
前記第２の時間の後に、前記ＵＳＢデバイスが、前記第１の通知に応答して、前記ＵＳＢホストから、より遅いレートで、トークン・パケットを受信し、
前記後の時間の後の第３の時間に、前記ＵＳＢデバイスの、前記ＵＳＢホストとデータを交換する前記能力が、前記バッファ・サイズ、前記確保されたバッファ容量の量、または前記バッファ状態、に少なくとも部分的に基づいて変化したという判定に応答して、フロー制御のための第２の通知を、前記ＵＳＢデバイスが、前記ＵＳＢホストへ送り、
前記第２の通知に応答して、前記ＵＳＢデバイスが、前記ＵＳＢホストから、前記より遅いレートとは異なるレートでさらなるトークン・パケットを受信する、ここにおいて、フロー制御のための通知は、前記第２の時間と前記第３の時間との間に、前記ＵＳＢデバイスによって、前記ＵＳＢホストに送られない、
ための、命令群を格納したプロセッサ読取可能記憶媒体
を備える装置。
【請求項２０】
ユニバーサル・シリアル・バス（ＵＳＢ）デバイスへトークン・パケットを第１のレートで送り、
フロー制御のための第１の通知を前記ＵＳＢデバイスから受信し、ここにおいて前記フロー制御のための第１の通知は、前記ＵＳＢデバイスにおけるバッファ・サイズ、確保されたバッファ容量の量、またはバッファが空、フル、またはほとんどフルであるかに対応するバッファ状態、のうちの少なくとも１つに、少なくとも部分的に基づいて、後の時間に先立つ第１の時間に前記ＵＳＢデバイスによって送られ、
前記第１の通知に応答して、前記ＵＳＢデバイスへその後のトークン・パケットを、前記第１のレートよりも遅い第２のレートで送り、
前記後の時間の後の第２の時間に、前記ＵＳＢデバイスから、フロー制御のための第２の通知を受信し、ここにおいて前記フロー制御のための第２の通知は、前記ＵＳＢデバイスの、前記ＵＳＢホストとデータを交換する能力が、前記バッファ・サイズ、前記確保されたバッファ容量の量、または前記バッファ状態、に少なくとも部分的に基づいて変化したという判定に応答して、前記ＵＳＢデバイスによって送られ、
前記第２の通知に応答して、前記第２のレートとは異なるレートで、前記ＵＳＢデバイスにさらなるトークン・パケットを送る、ここにおいてフロー制御のための他の何れの通知も、前記第１の時間と前記第２の時間との間に、前記ＵＳＢデバイスから受信されない
ためのプロセッサと、
前記プロセッサに接続されたメモリと
を備える装置。
【請求項２１】
前記トークン・パケットおよび第１の通知は、前記ＵＳＢデバイスとＵＳＢホストとの間の複数のパイプのうちの特定のパイプのためのものである請求項２０に記載の装置。
【請求項２２】
前記第２のレートとは異なる前記レートは、前記第１のレートである、請求項２０に記載の装置。
【請求項２３】
前記プロセッサは、前記ＵＳＢデバイスからのデータを要求するために、前記ＵＳＢデバイスへＩＮトークン・パケットをさらに送る請求項２０に記載の装置。
【請求項２４】
前記プロセッサは、前記ＵＳＢデバイスへ送るデータを示すために、前記ＵＳＢデバイスへＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットをさらに送る請求項２０に記載の装置。
【請求項２５】
前記プロセッサは、データ・パイプのためのトークン・パケットを前記ＵＳＢデバイスへさらに送り、前記第１の通知を、前記ＵＳＢデバイスから、割り込みパイプで受信する請求項２０に記載の装置。
【請求項２６】
前記プロセッサは、選択されたバス・アクセス周期に従って、前記割り込みパイプのためのＩＮトークン・パケットをさらに送り、前記割り込みパイプのために、前記ＩＮトークン・パケットのうちの１つが送られた後、前記フロー制御のための第１の通知を受信する請求項２５に記載の装置。
【請求項２７】
ユニバーサル・シリアル・バス（ＵＳＢ）ホストによって実行される方法であって、
トークン・パケットをＵＳＢデバイスへ第１のレートで送ることと、
フロー制御のための第１の通知を、前記ＵＳＢデバイスから受信することと、ここにおいて前記フロー制御のための第１の通知は、前記ＵＳＢデバイスにおけるバッファ・サイズ、確保されたバッファ容量の量、またはバッファが空、フル、またはほとんどフルであるかに対応するバッファ状態、のうちの少なくとも１つに、少なくとも部分的に基づいて、第１の時間に前記ＵＳＢデバイスによって送られ、
前記第１の通知に応答して、前記ＵＳＢデバイスへその後のトークン・パケットを、前記第１のレートよりも遅い第２のレートで送ることと、
前記第１の時間の後の第２の時間に、前記ＵＳＢデバイスから、フロー制御のための第２の通知を受信することと、ここにおいて前記フロー制御のための第２の通知は、前記ＵＳＢデバイスの、前記ＵＳＢホストとデータを交換する能力が、前記バッファ・サイズ、前記確保されたバッファ容量の量、または前記バッファ状態、のうちの少なくとも１つに、少なくとも部分的に基づいて変化したという判定に応答して、前記ＵＳＢデバイスによって送られ、
前記第２の通知に応答して、前記第２のレートとは異なるレートで、前記ＵＳＢデバイスにさらなるトークン・パケットを送ることと、ここにおいてフロー制御のための通知が、前記第１の時間と前記第２の時間との間に、前記ＵＳＢデバイスから受信されない
を含む方法。
【請求項２８】
前記第２のレートとは異なる前記レートは、前記第１のレートである、請求項２７に記載の方法。
【請求項２９】
前記フロー制御のための第１の通知を受信することは、前記フロー制御のための第１の通知を、前記ＵＳＢデバイスから、割り込みパイプで受信することを含む請求項２７に記載の方法。
【請求項３０】
ユニバーサル・シリアル・バス（ＵＳＢ）ホストとして使用するための装置であって、
トークン・パケットをＵＳＢデバイスへ第１のレートで送る手段と、
フロー制御のための第１の通知を、前記ＵＳＢデバイスから受信する手段と、ここにおいて前記フロー制御のための第１の通知は、前記ＵＳＢデバイスにおけるバッファ・サイズ、確保されたバッファ容量の量、またはバッファが空、フル、またはほとんどフルであるかに対応するバッファ状態、のうちの少なくとも１つに、少なくとも部分的に基づいて、前記ＵＳＢがデータを受信することができないと前記ＵＳＢが判定した、後の時間に先立つ第１の時間に、前記ＵＳＢデバイスによって送られ、
前記第１の通知に応答して、前記ＵＳＢデバイスへその後のトークン・パケットを、前記第１のレートよりも遅い第２のレートで送る手段と
前記第１の時間の後の第２の時間に、前記ＵＳＢデバイスから、フロー制御のための第２の通知を受信する手段と、ここにおいて前記フロー制御のための第２の通知は、前記ＵＳＢデバイスの、前記ＵＳＢホストとデータを交換する能力が、前記バッファ・サイズ、前記確保されたバッファ容量の量、または前記バッファ状態、に少なくとも部分的に基づいて変化したという判定に応答して、前記ＵＳＢデバイスによって送られ、
続いて、前記第２の通知に応答して、前記第２のレートとは異なるレートで、前記ＵＳＢデバイスにさらなるトークン・パケットを送る手段と、ここにおいてフロー制御のための他の何れの通知も、前記第１の時間と前記第２の時間との間に、前記ＵＳＢデバイスから受信されない
を備える装置。
【請求項３１】
前記第２のレートとは異なる前記レートは、前記第１のレートである請求項３０に記載の装置。
【請求項３２】
トークン・パケットを第１のレートでＵＳＢデバイスへ送り、
フロー制御のための第１の通知を、前記ＵＳＢデバイスから受信し、ここにおいて前記フロー制御のための第１の通知は、前記ＵＳＢデバイスにおけるバッファ・サイズ、確保されたバッファ容量の量、またはバッファが空、フル、またはほとんどフルであるかに対応するバッファ状態、のうちの少なくとも１つに、少なくとも部分的に基づいて、前記ＵＳＢがデータを受信することができないと前記ＵＳＢが判定した、後の時間に先立つ第１の時間に、前記ＵＳＢデバイスによって送られ、
前記第１の通知に応答して、前記ＵＳＢデバイスへ、その後のトークン・パケットを、前記第１のレートよりも低い第２のレートで送り、
前記後の時間の後の第２の時間に、前記ＵＳＢデバイスから、フロー制御のための第２の通知を受信し、ここにおいて前記フロー制御のための第２の通知は、前記ＵＳＢデバイスの、前記ＵＳＢホストとデータを交換する能力が、前記バッファ・サイズ、前記確保されたバッファ容量の量、または前記バッファ状態、に少なくとも部分的に基づいて変化したという判定に応答して、前記ＵＳＢデバイスによって送られ、
続いて、前記第２の通知に応答して、前記第２のレートとは異なるレートで、前記ＵＳＢデバイスにさらなるトークン・パケットを送る、ここにおいてフロー制御のための他の何れの通知も、前記第１の時間と前記第２の時間との間に、前記ＵＳＢデバイスから受信されない
ための、命令群を格納したプロセッサ読取可能記憶媒体。
【請求項３３】
前記第２のレートとは異なる前記レートは前記第１のレートである請求項３２に記載のプロセッサ読取可能記憶媒体。
【発明の詳細な説明】
【優先権の主張】
【０００１】
本願は、本願の譲受人に譲渡され、本明細書に参照によって組み込まれている２００６年５月２５日に出願の"Optimized USB Flow Control Mechanism"と題された米国仮特許出願６０／８０８，６９１号の優先権を主張する。
【技術分野】
【０００２】
本開示は、一般に、データ通信に関し、更に詳しくは、ＵＳＢを経由したデータ交換を制御する技術に関する。
【背景技術】
【０００３】
ＵＳＢは、例えば、キーボード、マウス・デバイス、プリンタ、スキャナ、メモリ・スティック、ディスク・ドライブ、デジタル・カメラ、ウェブカメラ等のような外部デバイスをコンピュータに相互接続するために広く使用されているシリアル・バスである。ＵＳＢは、例えば、携帯情報端末（ＰＤＡ）、ゲーム機等などのような他の電子デバイスにも共通して使用される。
【０００４】
ＵＳＢは、ＵＳＢホストと、ＵＳＢホストに接続されたＵＳＢデバイスとの間でのデータ交換のために、ホスト中心アーキテクチャを利用する。ＵＳＢホストは、コンピュータ上に存在することができ、ＵＳＢデバイスは、ＵＳＢワイヤによってコンピュータに接続された外部デバイスでありうる。ホスト中心アーキテクチャでは、ＵＳＢホストが、全てのＵＳＢデバイスとの通信を制御する。新たなＵＳＢデバイスがコンピュータに接続している場合にはいつでも、ＵＳＢホストとＵＳＢデバイスとは、ＵＳＢデバイスを設定するためシグナリングを交換する。その後、ＵＳＢホストが、ＵＳＢデバイスへデータを送ったり、あるいはＵＳＢデバイスからデータを受信しようと望む場合には常に、ＵＳＢホストは、トークン・パケットをＵＳＢデバイスに定期的に送ることができる。トークン・パケットがＵＳＢホストから発行された場合にはいつでも、ＵＳＢデバイスは、ＵＳＢホストからデータを受信するか、あるいはＵＳＢホストにデータを送ることができる。
【０００５】
ＵＳＢホストは、ＵＳＢデバイスへトークン・パケットを送ることにより、トランザクションを開始することができる。トークン・パケットを受信すると、ＵＳＢデバイスがデータを一時的に送信も受信もできない場合、ＵＳＢデバイスは、否定的なアクノレッジメント（ＮＡＫ）ハンドシェイク・パケットを送ることができる。ＵＳＢデバイスからＮＡＫを受信すると、ＵＳＢホストは、後の時間に別のトークン・パケットを送ることによって、ＮＡＫされたトランザクションを再試行することができる。
【０００６】
ＮＡＫハンドシェイク・パケットは、ＵＳＢにおけるフロー制御に使用されうる。ＵＳＢデバイスは、データ・レートを調節し、バッファがアンダー・フローまたはオーバー・フローすることを防ぐために、ＮＡＫハンドシェイク・パケットを送ることができる。しかしながら、ＮＡＫされたトランザクションは、著しい量のＵＳＢ帯域幅および電力を消費しうる。
【０００７】
従って、当該技術分野では、ＵＳＢにおけるフロー制御をより効率的に実行するための技術に対するニーズがある。
【発明の概要】
【０００８】
本明細書では、ＮＡＫされるトランザクションを減らし、データ・パフォーマンスおよび電力効率を改善するために、ＵＳＢにおけるフロー制御を実行する技術が記述される。フロー制御のために、ＵＳＢデバイスは、ＵＳＢホストとデータを交換する能力を判定し、その能力に基づいて、フロー制御のための通知を送る。
【０００９】
１つの設計では、ＵＳＢホストは、ＵＳＢデバイスとのデータ交換（例えば、ＵＳＢデバイスへのデータの送信、または、ＵＳＢデバイスからのデータの受信）を開始するために、（例えば定期的に）パケットをＵＳＢデバイスに送ることができる。例えば、送るデータが存在しなかったり、バッファがフルあるいはほとんどフルであることによって、ＵＳＢデバイスは、ＵＳＢホストとデータを交換できないことを判定する。ＵＳＢデバイスは、データ交換を中止するために、（例えば、割り込みパイプで）「フロー・オフ」通知をＵＳＢホストに送ることができる。ＵＳＢホストは、このフロー・オフ通知を受信し、ＵＳＢデバイスへトークン・パケットを送ることを中止することができる。その後、ＵＳＢデバイスは、ＵＳＢホストとデータを交換できることを判定することができる。そして、ＵＳＢデバイスは、データ交換を再開するために、ＵＳＢホストに「フロー・オン」通知を送ることができる。ＵＳＢホストは、このフロー・オン通知を受信し、ＵＳＢデバイスへのトークン・パケットの送信を再開することができる。ＵＳＢデバイスがデータを交換できない間、トークン・パケットの送信を中止することによって、ＮＡＫされるトランザクションが低減あるいは回避されうる。
【００１０】
本開示の様々な局面および特徴が、以下に更に詳細に記載される。
【図面の簡単な説明】
【００１１】
【図１】図１は、ＵＳＢホストおよびＵＳＢデバイスのブロック図を示す。
【図２Ａ】図２Ａは、ＵＳＢデバイスからのデータを読み取るＩＮトランザクションを示す。
【図２Ｂ】図２Ｂは、ＵＳＢデバイスへデータを送るＯＵＴトランザクションを示す。
【図２Ｃ】図２Ｃは、ＵＳＢデバイスへデータを送るＯＵＴトランザクションを示す。
【図３】図３は、フロー制御のないトークン・パケットおよびＮＡＫされたトランザクションの送信を示す。
【図４】図４は、割り込みパイプで送られた通知を用いたＵＳＢのフロー制御を示す。
【図５】図５は、フロー制御のためにＵＳＢデバイスによって実行される処理を示す。
【図６】図６は、フロー制御のためにＵＳＢホストによって実行される処理を示す。
【図７】図７は、無線通信デバイスのブロック図を示す。
【発明を実施するための形態】
【００１２】
本明細書に記載されたフロー制御技術は、ＵＳＢ、その他のバス、ポーリング・ベースの入力／出力（Ｉ／Ｏ）システム、およびデータがエンティティ間で交換されるその他のシステムのために使用されうる。明確にするために、本技術は特に、２０００年４月２７日に発行された公的に利用可能な文献"Universal Serial Bus Specification" 改訂２．０でカバーされたＵＳＢについて以下に記載されている。
【００１３】
ＵＳＢは、以下の専門用語を用いる。  
・ファンクション−ＵＳＢホストに機能／タスクを与えるＵＳＢデバイス。  
・エンドポイント−ＵＳＢデバイス（またはファンクション）とＵＳＢホストとの間の通信フロー内の情報シンクまたはソース。  
・パイプ−ＵＳＢデバイス上のエンドポイントとＵＳＢホストとの間の論理チャネル。  
・トランザクション−トークン・パケット、オプションのデータ・パケット、およびオプションのハンドシェイク・パケットからなるサービスのエンドポイントへの配信。
【００１４】
ＵＳＢデバイスは、１または複数のファンクションを有することができる。例えば、ウェブカメラは、ビデオのための１つのファンクションと、音のための別のファンクションとを有することができる。物理的なＵＳＢデバイスはそれぞれ、ＵＳＢホストによって割り当てられたユニークな７ビットのアドレスによって識別される。ＵＳＢホストは、１から１２７までの１２７の異なるアドレスを備えた最大１２７の物理的なＵＳＢデバイスをサポートすることができる。ファンクションは、１または複数のエンドポイントを有することができる。エンドポイントはそれぞれ、４ビットのエンドポイント番号によって識別される。例えば、ファンクションは、ＵＳＢホストへデータを送るＩＮエンドポイントと、ＵＳＢホストからデータを受信するＯＵＴエンドポイントとを有する。ここで、「ＩＮ」および「ＯＵＴ」は、ＵＳＢホストから見た場合である。
【００１５】
図１は、ＵＳＢホスト１１０およびＵＳＢデバイス１２０の設計のブロック図を示す。この設計では、ＵＳＢホスト１１０は、アプリケーション１１２、ファンクション・ドライバ１１４、およびバス・ドライバ１１６を含む。アプリケーション１１２は、ＵＳＢデバイスと交換するためのデータを有する任意のアプリケーションを備えうる。図１に示すように、アプリケーション１１２は、ＵＳＢホスト１１０上に存在しうるか、あるいは、ＵＳＢホスト１１０が存在するコンピュータまたはその他の幾つかの電子デバイスの一部でありうる。ファンクション・ドライバ１１４は、ＵＳＢホスト１１０に接続されたＵＳＢデバイスのファンクションのためのデータ交換を管理する。ファンクション・ドライバ１１４は、アプリケーション１１２とインタフェースしており、アプリケーションのためにデータを送信および／または受信するトランザクションを開始する。バス・ドライバ１１６は、ＵＳＢワイヤ１３０を経由したＵＳＢデバイスとのパケット通信をサポートし、パケット交換のための物理レイヤ処理を実行する。バス・ドライバ１１６は、ファンクション・ドライバ１１４によって指示されたように、パケットの送信および受信を行う。
【００１６】
図１に示す設計では、ＵＳＢデバイス１２０は、アプリケーション１２２、ファンクション１２４、ＵＳＢドライバ１２６、ＩＮバッファ１２８ａ、およびＯＵＴバッファ１２８ｂを含んでいる。一般に、ＵＳＢデバイス１２０は、１または複数のファンクションを有しうる。簡略化のために、以下の説明は、ＵＳＢデバイス１２０が、１つのファンクションを持っていると仮定する。アプリケーション１２２は、ＵＳＢホスト１１０と交換するためのデータを有する任意のアプリケーションを備えうる。ファンクション１２４は、アプリケーション１２２とインタフェースし、このアプリケーションのためＵＳＢホスト１１０とのデータ交換をサポートする。ＵＳＢドライバ１２６は、ＵＳＢワイヤ１３０を経由したＵＳＢホスト１１０とのパケット交換をサポートし、このパケット交換のための物理レイヤ処理を実行する。ＩＮバッファ１２８ａは、ＵＳＢホスト１１０に送られるデータを格納し、ＯＵＴバッファ１２８ｂは、ＵＳＢホスト１１０から受信したデータを格納する。
【００１７】
図１は、ＵＳＢホスト１１０およびＵＳＢデバイス１２０の具体的設計を示す。一般に、ＵＳＢホストは、ＵＳＢデバイス１１０について図１に示すものと同じまたは異なるモジュールを含むことができる。ＵＳＢデバイスはさらに、ＵＳＢデバイス１２０について図１に示すものと同じまたは異なるモジュールを含むことができる。モジュールはそれぞれ、ハードウェア、ファームウェア、ソフトウェア、あるいはそれらの組み合わせで実現されうる。
【００１８】
ＵＳＢホスト１１０は、ＵＳＢデバイス１２０におけるファンクション１２４のＩＮエンドポイントからデータを受信するか、あるいは、ファンクション１２４のＯＵＴエンドポイントへデータを送るためのトランザクションを開始することができる。トランザクションのタイプが異なると、異なるパケット・シーケンスが交換されうる。ＵＳＢ２．０は、３つの異なる速度設定、すなわち、最大１．５メガビット／秒（Ｍｂｐｓ）をカバーする低速度、最大１２Ｍｂｐｓをカバーするフル速度、最大４８０Ｍｂｐｓをカバーする高速度をサポートする。異なる速度設定のＯＵＴトランザクションについては、異なるパケット・シーケンスが交換されうる。
【００１９】
図２Ａは、３つ全ての速度設定について、ＵＳＢデバイス１２０からデータを読み取るＩＮトランザクションを示す。ＩＮトランザクションについては、ＵＳＢホスト１１０が、ＵＳＢデバイス１２０からデータを読み取ることを要求するパケットであるＩＮトークン・パケットを送る（ステップ２１２）。ＩＮトークン・パケットは、ＵＳＢデバイス１２０のアドレス、およびＩＮエンドポイント番号を含んでいる。ＵＳＢデバイス１２０は、ＩＮトークン・パケットを受信し、送るデータを持っており、このデータを送ることができることを判定し、データ・パケットをＵＳＢホスト１１０へ送る（ステップ２１４）。ＵＳＢホスト１１０は、このデータ・パケットを受信し、パケットを正しく受信したことを判定し、アクノレッジメント（ＡＣＫ）ハンドシェイク・パケットを送る（ステップ２１６）。ステップ２１２、２１４および２１６は、成功したＩＮトランザクションを構成する。
【００２０】
別のＩＮトランザクションについては後の時間に、ＵＳＢホスト１１０が、ＵＳＢデバイス１２０におけるファンクション１２４のＩＮエンドポイントにＩＮトークン・パケットを送る（ステップ２２２）。ＵＳＢデバイス１２０は、ＩＮトークン・パケットを受信し、送るデータを持っておらず、このデータを送ることができないことを判定し、ＮＡＫハンドシェイク・パケットをＵＳＢホスト１１０へ送る（ステップ２２４）。ＵＳＢホスト１１０は、ＮＡＫパケットを受信し、後の時間に、ＩＮトランザクションを再試行することができる。ステップ２２２および２２４は、ＮＡＫされたＩＮトランザクションを構成する。ここでは、２つのオーバヘッド・パケット（データ・パケットはない）が、ＵＳＢホスト１１０とＵＳＢデバイス１２０との間で交換される。
【００２１】
図２Ｂは、低速度およびフル速度の場合に、ＵＳＢデバイス１２０にデータを送るＯＵＴトランザクションを示す。ＯＵＴトランザクションの場合、ＵＳＢホスト１１０は、ＵＳＢデバイス１２０にデータを書き込むことを要求するパケットであるＯＵＴトークン・パケットを送る（ステップ２３２）。ＯＵＴトークン・パケットは、ＵＳＢデバイス１２０のアドレスと、ＯＵＴエンドポイント番号を含んでいる。その後、ＵＳＢホスト１１０は、ＵＳＢデバイス１２０からの返答を待たずに、ＯＵＴトークン・パケットの直後に、データ・パケットをＵＳＢデバイス１２０へ送る（ステップ２３４）。ＵＳＢデバイス１２０は、ＯＵＴトークン・パケットを受信し、データ・パケットを受信し、このパケットを正しく受信したことを判定し、ＡＣＫハンドシェイク・パケットを送る（ステップ２３６）。ステップ２３２、２３４および２３６は、低速度またはフル速度における成功したＯＵＴトランザクションを構成する。
【００２２】
後の時間の別のＯＵＴトランザクションの場合、ＵＳＢホスト１１０が、ＯＵＴトークン・パケットとデータ・パケットとの両方を、ＵＳＢデバイス１２０におけるファンクション１２４のＯＵＴエンドポイントへ送る（ステップ２４２，２４４）。ＵＳＢデバイス１２０は、ＯＵＴトークン・パケットおよびデータ・パケットを受信し、データを受信することができないことを判定し、ＮＡＫハンドシェイク・パケットを送る（ステップ２４６）。ＵＳＢホスト１１０は、ＮＡＫパケットを受信し、後の時間に、ＯＵＴトランザクションを再試行することができる。ステップ２４２、２４４および２４６は、ＮＡＫされたＯＵＴトランザクションを構成する。この失敗した転送の場合、２つのオーバヘッド・パケットおよび１つのデータ・パケットが、ＵＳＢホスト１１０とＵＳＢデバイス１２０との間で交換される。
【００２３】
図２Ｃは、ＵＳＢデバイス１２０へデータを高速で送るＯＵＴトランザクションを示す。ＯＵＴトランザクションの場合、ＵＳＢホスト１１０は、ＵＳＢデバイス１２０の機能に対して、データを受信するように求めるＰＩＮＧトークン・パケットを送る（ステップ２５２）。ＰＩＮＧパケットは、ＵＳＢにおいて特別なパケットとして分類されるが、本明細書では、トークン・パケットと称する。ステップ２５２におけるＰＩＮＧトークン・パケットは、ＵＳＢデバイス１２０のアドレスとＯＵＴエンドポイント番号を含んでいる。ＵＳＢデバイス１２０は、ＰＩＮＧトークン・パケットを受信し、データを受信できるのであれば、ＡＣＫハンドシェイク・パケットを送る（ステップ２５４）。ＡＣＫを受信すると、ＵＳＢホスト１１０は、ＯＵＴトークン・パケットおよびデータ・パケットをＵＳＢデバイス１２０へ送り（ステップ２６２、２６４）、ＵＳＢデバイス１２０は、ＡＣＫまたはＮＹＥＴハンドシェイク・パケットを返す（ステップ２６６）。ステップ２５２乃至２６６は、高速度での成功したＯＵＴトランザクションを構成する。
【００２４】
後の時間の別のＯＵＴトランザクションの場合、ＵＳＢホスト１１０が、ＵＳＢデバイス１２０へＰＩＮＧトークン・パケットを送る（ステップ２７２）。ＵＳＢデバイス１２０は、ＰＩＮＧトークン・パケットを受信し、データを受信できないことを判定し、ＮＡＫハンドシェイク・パケットを送る（ステップ２７４）。ＵＳＢホスト１１０は、ＮＡＫパケットを受信し、後の時間に、ＯＵＴトランザクションを再試行することができる。ステップ２７２および２７４は、ＮＡＫされたＯＵＴトランザクションを構成する。この失敗した転送について、２つのオーバヘッド・パケットが、ＵＳＢホスト１１０とＵＳＢデバイス１２０との間で交換される。
【００２５】
図２Ａおよび図２Ｂに示すように、ＵＳＢホスト１１０は、ＵＳＢデバイス１２０とのデータ交換を制御する。ＵＳＢホスト１１０は、ＵＳＢデバイス１２０からデータを読み取るＩＮトランザクションと、ＵＳＢデバイスへデータを書き込むＯＵＴトランザクションとの両方を開始する。ＵＳＢホスト１１０は、ＵＳＢデバイス１２０のデータ要件と利用可能な帯域幅とに基づいて、ＩＮトークン・パケットを定期的に送ることができる。ＵＳＢホスト１１０は、ＵＳＢデバイス１２０へ送るデータを有する場合には常に、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットを送信することができる。ＵＳＢホスト１１０は一般に、ＩＮトークン・パケットを暗黙的に送り、ＵＳＢホスト１１０が、送るデータを持っているか、あるいはデータを送ることができるかを前もって知っていない。またＵＳＢホスト１１０は一般に、送るデータを持っておりかつＵＳＢホスト１１０がデータを受信できるか否かを前もって知らない場合、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットを送る。
【００２６】
図３は、ＵＳＢホスト１１０とＵＳＢデバイス１２０との間のパケット交換の一例を示す。この例において、ＵＳＢデバイス１２０は、ＵＳＢホスト１１０とのデータ・パイプおよび割り込みパイプを持っている。ＵＳＢでは、パイプは一般に、特定のファンクション、特定のエンドポイント、および特定の方向に関連付けられる。割り込みパイプは、例えば、フロー制御情報のようなシグナリング情報を送るために使用されうるシグナリング・チャネルと見なすことができる。一般に、ＵＳＢデバイスは、割り込みパイプを持っている場合も、持っていない場合もある。データ・パイプは、データ・トラフィックを送るために使用されうるデータ・チャネルと見なされうる。データ・パイプは、ＵＳＢにおけるバルク・パイプまたは等時性（isochronous）パイプであり、ＩＮ方向またはＯＵＴ方向用でありうる。パイプは一方向であり、ＵＳＢデバイス１２０からＵＳＢホスト１１０へのＩＮ方向であるか、あるいは、ＵＳＢホスト１１０からＵＳＢデバイス１２０へのＯＵＴ方向かの何れかで、情報を搬送することができる。図３に示す例では、割り込みパイプおよびデータ・パイプの両方ともＩＮ方向用である。
【００２７】
割り込みパイプのエンドポイントは、ＵＳＢホスト１１０とのセットアップ中に、このパイプのための所望のバス・アクセス期間を特定することができる。割り込みパイプのためのバス・アクセス期間は、以下の範囲のうちの１つから選択されうる。  
・エンドポイントが低速度をサポートする場合、１０乃至２５５ミリ秒（ｍｓ）、  
・エンドポイントがフル速度をサポートする場合、１乃至２５５ｍｓ、  
・エンドポイントが高速度をサポートする場合、０．１２５乃至０．１２５×２Ｍｍｓ、ただしＭ≦１５。
【００２８】
ＵＳＢホスト１１０は、割り込みパイプ用のＩＮトークン・パケットを、割り込みパイプ用のバス・アクセス周期と等しいかまたはそれ未満であるＴｉｎｔｅｒｒｕｐｔの周期でＵＳＢデバイス１２０へ送ることができる。ＩＮトークン・パケットが、割り込みパイプについて受信される場合には常に、ＵＳＢデバイス１２０は、制御情報を有するデータ・パケットか、またはＮＡＫハンドシェイク・パケットかの何れかを、例えば図２Ａに示すようにしてＵＳＢホスト１１０へ送ることができる。
【００２９】
ＵＳＢホスト１１０は、データ・パイプのＩＮトークン・パケットを、ＵＳＢデバイス１２０のデータ要件、利用可能なＵＳＢ帯域幅等に基づいて決定されうる周期Ｔｄａｔａで、ＵＳＢデバイス１２０へ送ることができる。Ｔｄａｔａは、Ｔｉｎｔｅｒｒｕｐｔよりもはるかに短く、フル速度および高速度の場合、マイクロ秒（μｓ）のオーダでありうる。したがって、ＵＳＢホスト１１０は、割り込みパイプのために送られる各ＩＮトークン・パケットのデータ・パイプについて、多くの（例えば、何百もの）ＩＮトークン・パケットを送ることができる。ＩＮトークン・パケットが、データ・パイプについて受信される場合には常に、ＵＳＢデバイス１２０は、トラフィック・データを伴うデータ・パケット、または、ＮＡＫハンドシェイク・パケットかの何れか一方をＵＳＢホスト１１０へ送ることができる。簡略のために、ＡＣＫハンドシェイク・パケットは、図３に示されていない。
【００３０】
図３に示すように、データ・パイプについてＮＡＫされたトランザクションが多く存在する。ＮＡＫされたトランザクションは、かなりの量のＵＳＢ帯域幅を消費し、ＵＳＢワイヤ上の他のパイプの最大実効データ・スループットを低減しうる。ＮＡＫされたトランザクションはまた、どのような有益な結果も与えることなく、ＵＳＢホスト１１０およびＵＳＢデバイス１２０における電力をも消費する。
【００３１】
局面では、ＮＡＫされたトランザクションを低減または回避するために、ＵＳＢについてのフロー制御が実行される。これは、データ・パフォーマンスおよび電力効率を向上することができる。フロー制御のために、ＵＳＢデバイス１２０は、ＵＳＢホスト１１０とデータを交換する能力を判定することができる。ＵＳＢデバイス１２０は、この判定された能力に基づいて、フロー制御に関する通知を、ＵＳＢホスト１１０へ送ることができる。
【００３２】
一般に、ＵＳＢデバイス１２０は、フロー制御のために、様々なタイプの情報をＵＳＢホスト１１０へ送ることができる。例えば、フロー制御のために以下の情報を送ることができる。  
・フロー・オフ通知−トランザクション／データ交換を中止する表示。  
・フロー・オン通知−トランザクション／データ交換を再開する表示。  
・データ・レート−交換するトラフィック・データのレートを示す。  
・バッファ・サイズ−ＩＮ方向またはＯＵＴ方向で送るデータ量を示す。  
・トークン・レート−ＵＳＢホスト１１０によって送られるトークン・パケットのレートを示す。  
・タイムアウト−フロー制御をイネーブルするか否かを定期的に判定するために使用される。  
・Ｎショット表示−Ｎ回（Ｎ≧１）のデータ転送を実行して停止する表示。  
・制御持続時間−フロー制御が適用される持続時間を示す。  
フロー制御情報は、フロー制御されているパイプ以外のパイプで送られる。
【００３３】
１つの設計では、フロー制御は、別の名称でも称されうるフロー・オン通知およびフロー・オフ通知に基づいて実行される。この設計では、ＵＳＢデバイス１２０が、特定のパイプについてデータを交換できないことを判定すると、ＵＳＢデバイス１２０は、このパイプにおけるトランザクションを中止するためにＵＳＢホスト１１０へフロー・オフ通知を送る。フロー・オフ通知を受信すると、ＵＳＢホスト１１０は、このパイプにおけるトランザクションをスケジュールしない。これは、ＮＡＫされたトランザクションによるＵＳＢ帯域幅の浪費を回避する。その後ＵＳＢデバイス１２０が、中止されたパイプのデータを再び交換できることを判定すると、ＵＳＢデバイス１２０は、このパイプにおけるトランザクションを再開するために、ＵＳＢホスト１１０へフロー・オン通知を送る。フロー・オン通知を受信すると、ＵＳＢホスト１１０は、このパイプにおけるトランザクションを再開する。この設計では、フロー・オフ通知およびフロー・オン通知は、このパイプにおけるトランザクションの停止および開始に対する実質的な要求である。
【００３４】
フロー制御は、ＵＳＢデバイス１２０において、各パイプについて独立して実行されうる。各パイプは一方向であるので、フロー制御は、ＩＮ方向およびＯＵＴ方向について独立して実行されうる。フロー制御はまた、例えば単一の論理ユニットのように、ともに「バンドルされた」パイプのセットについても実行される。
【００３５】
ＵＳＢデバイス１２０は、アップストリームおよび／またはダウンストリームで、ＵＳＢホスト１１０とデータを交換することができる。したがって、データを交換することは、ＩＮ方向（アップストリーム）でＵＳＢホスト１１０へデータを送ること、または、ＯＵＴ方向（ダウンストリーム）でＵＳＢホスト１１０からデータを受信することを称する。ＵＳＢデバイス１２０は、様々な理由で、与えられた方向で、ＵＳＢホスト１１０とデータを正しく交換できうる。ＩＮ方向の場合、ＵＳＢデバイス１２０は、送るデータが存在しない場合、ＩＮバッファ１２８ａが空またはほとんど空である場合、ＵＳＢデバイスにおいて処理リソースが利用可能ではない場合等において、ＵＳＢホスト１１０にデータを送ることができない。ＯＵＴ方向の場合、ＵＳＢデバイス１２０は、ＯＵＴバッファ１２８ｂがフルまたはほとんどフルである場合、ＵＳＢデバイスにおいて処理リソースが利用可能ではない場合、ＵＳＢデバイスのＣＰＵが他のタスクによって占有されている場合等において、ＵＳＢホスト１１０からデータを受信できない。
【００３６】
ＩＮ方向でのアップストリームＵＳＢ転送の場合、ＵＳＢデバイス１２０が、ＵＳＢホスト１１０へと特定のパイプｘで送るデータを有していない場合、ＵＳＢデバイス１２０は、パイプｘのためのフロー・オフ通知を送ることができる。フロー・オフ通知は、ＵＳＢホスト１１０に対するパイプｘを識別する情報を含むことができる。ＵＳＢホスト１１０は、パイプｘでデータを求める要求を停止し、パイプｘのためのＩＮトークン・パケットを、ＵＳＢデバイス１２０へ送ることを中止することができる。ＵＳＢデバイス１２０が、パイプｘで送るための利用可能なデータを有している場合、ＵＳＢデバイス１２０は、パイプｘに関するフロー・オン通知をＵＳＢホスト１１０へ送ることができる。このフロー・オン通知は、ＵＳＢホスト１１０に対するパイプｘを識別する情報を含むことができる。その後、ＵＳＢホスト１１０は、パイプｘに関するＩＮトークン・パケットをＵＳＢデバイス１２０へ送ることを再開することができる。
【００３７】
パイプｘによるアップストリームＵＳＢ転送は、パイプｘに関するフロー・オフ通知が送られた時点において不完全であるかもしれない。この場合、ＵＳＢデバイス１２０は、アップストリームＵＳＢ転送を再開し、フロー・オン通知を送ると、中止されたところから継続することができる。あるいは、ＵＳＢデバイス１２０は、アップストリームＵＳＢ転送を最初から再開し、フロー・オフ通知前に送られた部分を再送信することができる。
【００３８】
ＯＵＴ方向におけるダウンストリームＵＳＢ転送の場合、ＵＳＢデバイス１２０が、ＵＳＢホスト１１０から、特定のパイプｘでデータを受信できないことを判定した場合、ＵＳＢデバイス１２０は、パイプｘに関するフロー・オフ通知を送ることができる。例えば、ＵＳＢデバイス１２０におけるＯＵＴバッファ１２８ｂがフル、またはほとんどフルであり、ＵＳＢデバイス１２０は、その時、あるいはその直後、新たなデータを受信できない。フロー・オフ通知は、ＵＳＢホスト１１０へのパイプｘを識別する情報を含みうる。ＵＳＢホスト１１０は、パイプｘでデータを送ることを止め、ＵＳＢデバイス１２０へとパイプｘでＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットを送ることを中止する。ＵＳＢデバイス１２０が再び、パイプｘでデータを受信できる場合、ＵＳＢデバイス１２０は、パイプｘに関するフロー・オン通知をＵＳＢホスト１１０へ送ることができる。このフロー・オン通知は、ＵＳＢホスト１１０へのパイプｘを識別する情報を含みうる。その後、ＵＳＢホスト１１０は、パイプｘでデータの送信を開始し、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットをパイプｘでＵＳＢデバイス１２０へ送信することを再開することができる。
【００３９】
パイプｘによるダウンストリームＵＳＢ転送は、パイプｘのフロー・オフ通知が送られた時に不完全であるかもしれない。この場合、その後ホスト１１０がダウンストリームＵＳＢ転送を再開し、フロー・オン通知を受信すると、中止されたところから継続することができる。あるいは、ＵＳＢホスト１１０は、ダウンストリームＵＳＢ転送を最初から再開し、フロー・オフ通知前に送られた部分を再送信することができる。
【００４０】
フロー・オフ通知およびフロー・オン通知は、例えば、既存のＵＳＢメッセージまたは新たなＵＳＢメッセージを用いることによって、様々な方法で送られうる。１つの設計では、通信デバイスのためのＵＳＢクラス定義で定義された既存の接続速度変更(ConnectionSpeedChange)通知メッセージが、フロー・オフ通知およびフロー・オン通知を搬送するために使用される。この設計では、ゼロ値である接続速度が、フロー・オフ通知を搬送するために使用され、非ゼロ値が、フロー・オン通知（および恐らくは許容可能なデータ・レート）を搬送するために使用される。接続速度変更(ConnectionSpeedChange)通知メッセージは、割り込みパイプで送られうる。フロー・オフ通知およびフロー・オン通知は、既存の別のＵＳＢメッセージ、あるいは、この目的のために定義された新たなＵＳＢメッセージで搬送される。
【００４１】
１つの設計では、フロー・オフ通知およびフロー・オン通知は、ＵＳＢデバイス１２０がＵＳＢホスト１１０に接続されている間、常に利用可能である割り込みパイプで送られる。割り込みパイプは、データ・パイプと同様の方法で動作する。しかしながら、バス・アクセス周期は、例えば、割り込みパイプの場合、ミリ秒のオーダであり、フル速度のデータ・パイプまたは高速度のデータ・パイプの場合、マイクロ秒のオーダであるように、データ・パイプよりもはるかにゆっくりしている。従って、ＵＳＢホスト１１０は、データ・パイプよりも、割り込みパイプの場合、はるかに遅いレートでトークン・パケットを送ることができる。ＵＳＢデバイス１２０が、割り込みパイプに関するＩＮトークン・パケットを受信した場合にはいつでも、ＵＳＢデバイス１２０は、フロー制御通知メッセージ、ＮＡＫハンドシェイク・パケット、またはその他幾つかのパケットを、割り込みパイプでＵＳＢホスト１１０へ送ることができる。フロー制御通知は、フロー・オフ通知またはフロー・オン通知でありうる。
【００４２】
図４は、割り込みパイプで送られた通知を用いたＵＳＢのためのフロー制御設計を示す。一般に、フロー制御は、ＩＮ方向および／またはＯＵＴ方向のために実行されうる。図４に示す例では、ＵＳＢデバイス１２０は、ともにＩＮ方向用である割り込みパイプおよびデータ・パイプを有する。
【００４３】
ＵＳＢホスト１１０は、データ・パイプに関するＩＮトークン・パケットを、ＵＳＢデバイス１２０へ周期的に送る。ＵＳＢデバイス１２０は、ＡＣＫハンドシェイク・パケットおよびデータ・パケットを、あるいは、ＮＡＫハンドシェイク・パケットをＵＳＢホスト１１０に送ることによって、各ＩＮトークン・パケットに応答する。時間Ｔ１において、ＵＳＢデバイス１２０は、ＵＳＢホスト１１０へ送るデータがデータ・パイプ上にないと判定する。ＵＳＢデバイス１２０はその後、割り込みパイプのための次のＩＮトークン・パケットを待ち、時間Ｔ２において、フロー・オフ通知メッセージを、割り込みパイプによってＵＳＢホスト１１０へ送る。ＵＳＢホスト１１０は、このフロー・オフ通知を受信し、時間Ｔ３において、データ・パイプに関するＩＮトークン・パケットを送ることを中止する。ＵＳＢホスト１１０は、割り込みパイプに関するＩＮトークン・パケットであって、ＵＳＢデバイス１２０によってＮＡＫされたＩＮトークン・パケットを、定期的に送ることができる。
【００４４】
時間Ｔ４では、ＵＳＢデバイス１２０は、ＵＳＢホスト１１０へ送るデータがデータ・パイプ上に存在すると判定する。その後、ＵＳＢデバイス１２０は、割り込みパイプに関する次のＩＮトークン・パケットを待ち、時間Ｔ５において、ＵＳＢホスト１１０へ割り込みパイプでフロー・オン通知を送る。ＵＳＢホスト１１０は、フロー・オン通知を受信し、時間Ｔ６において、データ・パイプに関してＩＮトークン・パケットを送ることを再開する。
【００４５】
図４に示すように、データ・パイプで送るデータが存在しないと判定されると、フロー・オフ通知を送ることによって、データ・パイプ上でＮＡＫされたトランザクションが低減または回避される。データ・パイプ上でＮＡＫされたトランザクションを回避することによって節約される帯域幅は、ＵＳＢホスト１１０に接続されたＵＳＢワイヤを共有する他のパイプのために使用されうる。
【００４６】
図４に示すように、割り込みパイプに関してＩＮトークン・パケットが受信される場合、ＵＳＢデバイス１２０は、フロー制御通知を送る場合も、送らない場合もある。従って、割り込みパイプ上の幾つかのトランザクションは、ＮＡＫされうる。しかしながら、割り込みパイプのトランザクション・レートは、データ・パイプのトランザクション・レートよりもはるかに低くなりうる。従って、割り込みパイプ上でＮＡＫされたトランザクションは、データ・パイプ上でＮＡＫされたトランザクションよりも、より少ないＵＳＢ帯域幅しか浪費されない。更に、割り込みパイプのためのバス・アクセス周期は、ＮＡＫされたトランザクションによるオーバヘッドを低減させながら通知を送るための所望の応答時間を得るように選択されうる。
【００４７】
図４に示す設計では、ＵＳＢデバイス１２０は、任意の時間の代わりに、割り込みパイプのＩＮトークン・パケットを受信した後、フロー制御通知を送ることができる。更に、ＵＳＢホスト１１０がフロー・オフ通知を受信した時から、データ・パイプ上でトランザクションが中止される時までの遅延があるだろう。ＵＳＢデバイス１２０は、割り込みパイプのバス・アクセス周期およびＵＳＢホスト１１０の遅延に対処する方法で、フロー制御通知を送ることができる。ＯＵＴ方向のデータ・パイプの場合、ＵＳＢデバイス１２０は、ＯＵＴトランザクションが中止されるまで、ＵＳＢホスト１１０からデータを受信し続けることができる。ＵＳＢデバイス１２０は、フロー・オフ通知が送られた時と、ＵＳＢホスト１１０がデータ・パイプ上のＯＵＴトランザクションを中止する時との間の期間に、ＯＵＴトランザクションをＮＡＫすることを回避するために、ＯＵＴバッファ１２８ｂ内の幾つかの容量を節約することができる。節約されたバッファ容量の量は、この期間の予期された長さ、データ・パイプの最大データ・レートまたは平均データ・レート等に基づいて判定される。
【００４８】
図４に示す設計では、フロー制御は、フロー・オフ通知およびフロー・オン通知のみに基づいて実行されうる。別の設計では、フロー制御は、フロー・オフ通知およびフロー・オン通知に加えて、あるいはその代わりに、データ・レートに基づいて実行される。ＵＳＢデバイス１２０は、データ・レートをＵＳＢホスト１１０に送ることができる。ＵＳＢホスト１１０は、データ・レートが達成されるように、その後、トークン・パケットを送ることができる。また別の設計では、送ることができるデータ量を示すバッファ・サイズに基づいてフロー制御が実行される。ＵＳＢホスト１１０は、バッファ・サイズに基づいて決定されたレートでトークン・パケットを送ることができる。また別の設計では、フロー制御は、フロー・オフ通知およびフロー・オン通知に加えて、あるいはその代わりに、トークン・レートに基づいて実行される。ＵＳＢホスト１１０は、トークン・パケットをトークン・レートでＵＳＢデバイス１２０へ送ることができる。一般に、フロー制御は、上にリストしたパラメータ（例えば、フロー・オフ通知およびフロー・オン通知、データ・レート、バッファ・サイズ、トークン・レート、制御期間等）のうちの何れかおよび／またはその他のパラメータに基づいて実行されうる。
【００４９】
図５は、フロー制御のためにＵＳＢデバイスによって実行される処理５００の設計を示す。ＵＳＢホストとデータを交換するＵＳＢデバイスの能力が判定されうる（ブロック５１２）。ＵＳＢデバイスの判定された能力に基づいて、フロー制御のための第１の通知が、ＵＳＢホストに送られる（ブロック５１４）。ＵＳＢデバイスがデータを交換する能力における変化が判定される（ブロック５１６）。ＵＳＢデバイスの能力における判定された変化に基づいて、フロー制御のための第２の通知がＵＳＢホストに送られる（ブロック５１８）。フロー制御のためのこれら通知は、ＵＳＢデバイスとＵＳＢホストとの間の複数のパイプのうちの特定のパイプに対して送られる。
【００５０】
ブロック５１２乃至５１８の場合、ＵＳＢデバイスは、ＵＳＢホストとデータを交換できないと判定される。データ交換を中止するために、ＵＳＢホストへフロー・オフ通知が送られうる。その後、ＵＳＢデバイスが、ＵＳＢホストとデータを交換できるとの判定がなされる。データ交換を再開するために、フロー・オン通知が、ＵＳＢホストへ送られうる。フロー・オフ通知およびフロー・オン通知は、第１の通知および第２の通知にそれぞれ対応する。
【００５１】
ＩＮ方向のパイプの場合、例えば、送るデータが存在しないことによって、ＵＳＢデバイスが、ＵＳＢホストにデータを送ることができないとの判定がなされる。フロー・オフ通知が、ＵＳＢホストへ送られる。ＵＳＢホストはその後、ＵＳＢデバイスへＩＮトークン・パケットを送ることを中止する。その後、ＵＳＢデバイスが、ＵＳＢホストへデータを送ることができるとの判定がなされる。フロー・オン通知がＵＳＢホストへ送られる。ＵＳＢホストはその後、ＵＳＢデバイスへのＩＮトークン・パケットの送信を再開する。
【００５２】
ＯＵＴ方向のパイプの場合、例えば、ＵＳＢデバイスにおけるバッファがフルまたはほとんどフルであることによって、ＵＳＢデバイスが、ＵＳＢホストからデータを受信できないとの判定がなされる。フロー・オフ通知がＵＳＢホストに送られる。ＵＳＢホストはその後、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットをＵＳＢデバイスへ送ることを中止する。ＵＳＢホストによるフロー・オフ通知の受信後、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットの送信を中止する際における遅れに対処するために確保されたバッファ容量を使用することができる。その後、ＵＳＢデバイスが、ＵＳＢホストからデータを受信できるとの判定がなされうる。フロー・オン通知がＵＳＢホストに送られうる。ＵＳＢホストは、その後、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットのＵＳＢデバイスへの送信を再開することができる。
【００５３】
フロー制御のための通知は、割り込みパイプでＵＳＢホストへ送られうる。割り込みパイプ用のＩＮトークン・パケットは、ＵＳＢホストから受信され、フロー制御のための通知は、ＩＮトークン・パケットを受信した後に、割り込みパイプで送られうる。
【００５４】
図６は、フロー制御のために、ＵＳＢホストによって実行される処理６００の設計を示す。ＵＳＢデバイスとのデータ交換を開始するために、ＵＳＢデバイスへトークン・パケットが送られうる（ブロック６１２）。これらのトークン・パケットは、ＵＳＢデバイスからのデータを要求するＩＮトークン・パケットであるか、ＵＳＢデバイスに送るデータを示すＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットでありうる。フロー制御のための第１の通知が、ＵＳＢデバイスから受信される（ブロック６１４）。ＵＳＢホストは、この第１の通知に応答して、トークン・パケットをＵＳＢデバイスに送ることを変更する（ブロック６１６）。例えば、ＵＳＢホストは、トークン・パケットを送ることを中止したり、あるいは、トークン・パケットをより遅いレートで送ることができる。その後、フロー制御のための第２の通知が、ＵＳＢデバイスから受信される（ブロック６１８）。ＵＳＢホストは、トークン・パケットをＵＳＢデバイスへ送ることを再開することができる（ブロック６２０）。
【００５５】
これらトークン・パケットおよび通知は、ＵＳＢデバイスとＵＳＢホストとの間の複数のパイプのうちの特定のパイプのためのものでありうる。これらの通知は、ＵＳＢデバイスからの割り込みパイプ上で受信されうる。割り込みパイプのＩＮトークン・パケットは、バス・アクセス周期に従って送られる。これら通知は、割り込みパイプのＩＮトークン・パケット後に受信される。
【００５６】
本明細書に記載のフロー制御技術は、デバイスによって起動されたより高いレベルのフロー制御で実現されうる。これら技術は、フロー制御通知を送るために既存のメッセージを用いる現在のＵＳＢ仕様内で実現されうる。これら技術は、ＵＳＢホストおよびＵＳＢデバイスにおけるより高次のレイヤ・ドライバを修正することによって実現される。これは、実現を単純化する。
【００５７】
本明細書に記載のフロー制御技術は、ある利点を与える。第１に、フロー制御を用いて、ＮＡＫされたトランザクションが低減または回避される。節約された帯域幅は、他のパイプへ再割当されうる。これは、ＵＳＢワイヤに対する全体的なデータ・スループットを改善することができる。第２に、ＵＳＢデバイスおよびＵＳＢホストについて、全体的な電力効率が改良されうる。
【００５８】
本明細書に記載したフロー制御技術は、コンピュータ、無線通信デバイス、およびその他の電子デバイスのために共通して使用されるＵＳＢデバイスとＵＳＢホストのために使用される。無線デバイスのための本技術の使用が、下記に述べられる。
【００５９】
図７は、無線通信システムにおける無線通信デバイス７００の設計のブロック図を示す。無線デバイス７００は、セルラ電話、端末、ハンドセット、ＰＤＡ等でありうる。無線通信システムは、符号分割多元接続（ＣＤＭＡ）システム、グローバル移動体通信（ＧＳＭ（登録商標））システム等でありうる。
【００６０】
無線デバイス７００は、受信パスおよび送信パスによって双方向通信を提供することができる。受信パスにおいては、基地局（図７に図示せず）によって送信された信号が、アンテナ７１２によって受信され、受信機（ＲＣＶＲ）７１４に提供される。受信機７１４は、受信信号を調整してデジタル化し、サンプルを、更なる処理のために、デジタル・セクション７２０へ提供する。送信パスにおいては、送信機（ＴＭＴＲ）７１６は、デジタル・セクション７２０から送られたデータを受け取り、データを処理して調整し、変調信号を生成する。変調信号は、アンテナ７１２を経由して基地局へ送信される。
【００６１】
デジタル・セクション７２０は、例えば、モデム・プロセッサ７２２、コントローラ／プロセッサ７２４、内部メモリ７２６、グラフィック処理装置（ＧＰＵ）７２８、中央処理装置（ＣＰＵ）７３０、外部バス・インタフェース（ＥＢＩ）７３２、ＵＳＢデバイス７３４、そしてＵＳＢホスト７３６のような様々な処理ユニット、インタフェース・ユニット、およびメモリ・ユニットを含む。モデム・プロセッサ７２２は、例えば、符合化、変調、復調、および復号のようなデータ送信および受信のための処理を実行することができる。コントローラ／プロセッサ７２４は、デジタル・セクション７２０内の様々なユニットの動作を指示することができる。内部メモリ７２６は、デジタル・セクション７２０内の様々なユニットのためのデータおよび／または指示を格納することができる。ＧＰＵ７２８は、グラフィクス、画像、ビデオ、テキスト等の処理を実行する。ＣＰＵ７３０は、無線デバイス７００における様々なアプリケーションのための汎用処理を実行することができる。ＥＢＩ７３２は、デジタル・セクション７２０（例えば、内部メモリ７２６）と主メモリ７４２との間のデータの転送を容易にすることができる。ＵＳＢデバイス７３４は、ラップトップ・コンピュータまたはその他幾つかの電子デバイス内に存在しうるＵＳＢホスト７４４と通信することができる。ＵＳＢホスト７３６は、表示装置、スピーカ、ウェブカメラ等でありうるＵＳＢデバイス７４６と通信することができる。ＵＳＢデバイス７３４および／またはＵＳＢホスト７３６は、本明細書に記載のフロー制御技術を実施することができる。
【００６２】
デジタル・セクション７２０は、１または複数のプロセッサを用いて実現されうる。デジタル・セクション７２０はまた、１または複数の特定用途向けＩＣ（ＡＳＩＣ）および／またはその他幾つかのタイプの集積回路（ＩＣ）でありうる。
【００６３】
本明細書に記載のフロー制御技術は、様々な手段によって実現されうる。例えば、これらの技術は、ハードウェア、ファームウェア、ソフトウェア、あるいはこれらの組み合わせで実現されうる。ハードウェアによる実現の場合、ＵＳＢホストまたはＵＳＢデバイスにおいてフロー制御を実施するために使用される処理ユニットは、１または複数のＡＳＩＣ、デジタル信号プロセッサ（ＤＳＰ）、デジタル信号処理デバイス（ＤＳＰＤ）、プログラム可能論理回路（ＰＬＤ）、フィールド・プログラム可能ゲート・アレイ（ＦＰＧＡ）、プロセッサ、コントローラ、マイクロ・コントローラ、マイクロプロセッサ、電子デバイス、本明細書に記載の機能を実行するように設計されたその他の電子ユニット、コンピュータ、またはこれらの組み合わせ内で実施される。
【００６４】
ファームウェア及び／又はソフトウェアによる実現の場合、本明細書に記載の機能を実行するモジュール（例えば、手順、関数等）を用いて、フロー制御技術が実現されうる。ファームウェア命令および／またはソフトウェア命令は、メモリ（例えば、図７におけるメモリ７２６または７４２）に格納され、プロセッサ（例えば、プロセッサ７２４）によって実行されうる。メモリは、プロセッサ内に実装されるか、あるいはプロセッサの外部に実装されうる。ファームウェア命令および／またはソフトウェア命令は、例えば、ランダム・アクセス・メモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、不揮発性ランダム・アクセス・メモリ（ＮＶＲＡＭ）、プログラマブル読取専用メモリ（ＰＲＯＭ）、電子的消去可能ＰＲＯＭ（ＥＥＰＲＯＭ）、ＦＬＡＳＨメモリ、コンパクト・ディスク（ＣＤ）、磁気または光学的なデータ記憶デバイス等のようなその他のプロセッサ読取可能媒体内にも格納されうる。
【００６５】
本明細書に記載の技術を実現する装置は、スタンド・アロン・ユニットであるか、あるいは、デバイスの一部でありうる。このデバイスは、（ｉ）スタンド・アロンの集積回路（ＩＣ）、（ｉｉ）データおよび／または命令を格納するためのメモリＩＣを含む１または複数のＩＣからなるセット、（ｉｉｉ）移動局モデム（ＭＳＭ）のようなＡＳＩＣ、（ｉｖ）他のデバイス内に組み込まれたモジュール、（ｖ）セルラ電話、無線デバイス、ハンドセット、またはモバイル・ユニット、（ｖｉ）その他でありうる。
【００６６】
本開示の前述の説明は、当業者が、本開示を製造または利用できるように提供される。本開示に対する様々な修正が当業者には容易に明らかになるだろう。そして、本明細書に定義された一般原理は、本開示の精神または範囲から逸脱することなく、その他のバリエーションにも適用されうる。従って、本開示は、本明細書に記載の例および設計に限定されることは意図されておらず、本明細書に開示された原理および斬新な特徴と一致した最も広い範囲であると考えられる。
以下に、出願当初の特許請求の範囲に記載された発明を付記する。
［発明１］
ユニバーサル・シリアル・バス（ＵＳＢ）デバイスの、ＵＳＢホストとデータを交換する能力を判定し、前記判定されたＵＳＢデバイスの能力に基づいて、フロー制御のための通知を、前記ＵＳＢホストへ送るように構成されたプロセッサと、
前記プロセッサに接続されたメモリと
を備える装置。
［発明２］
前記プロセッサは、前記ＵＳＢデバイスと前記ＵＳＢホストとの間の複数のパイプのうちの特定のパイプのために、前記フロー制御のための通知を送るように構成された発明１に記載の装置。
［発明３］
前記プロセッサは、前記ＵＳＢデバイスが前記ＵＳＢホストとデータを交換できないことを判定し、データ交換を中止するために、前記ＵＳＢホストに、フロー・オフ通知を送るように構成された発明１に記載の装置。
［発明４］
前記フロー・オフ通知を送った後、前記プロセッサは、前記ＵＳＢデバイスが前記ＵＳＢホストとデータを交換できることを判定し、データ交換を再開するために、前記ＵＳＢホストへフロー・オン通知を送るように構成された発明３に記載の装置。
［発明５］
前記プロセッサは、前記ＵＳＢデバイスが前記ＵＳＢホストへデータを送ることができないことを判定し、前記ＵＳＢホストへとフロー・オフ通知を送るように構成され、
前記ＵＳＢホストは、前記フロー・オフ通知に応答して、ＩＮトークン・パケットを前記ＵＳＢデバイスへ送ることを中止する発明１に記載の装置。
［発明６］
前記プロセッサは、送るデータが存在しない場合、前記ＵＳＢデバイスが前記ＵＳＢホストへデータを送ることができないことを判定するように構成された発明５に記載の装置。
［発明７］
前記フロー・オフ通知を送った後、前記プロセッサは、前記ＵＳＢデバイスが前記ＵＳＢホストへデータを送ることができることを判定し、前記ＵＳＢホストへフロー・オン通知を送るように構成され、
前記ＵＳＢホストは、前記フロー・オン通知に応答して、前記ＵＳＢデバイスへＩＮトークン・パケットを送ることを再開する発明５に記載の装置。
［発明８］
前記プロセッサは、前記ＵＳＢデバイスが前記ＵＳＢホストからデータを受信できないことを判定し、前記ＵＳＢホストへフロー・オフ通知を送るように構成され、
前記ＵＳＢホストは、前記フロー・オフ通知に応答して、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットを前記ＵＳＢデバイスへ送ることを中止する発明１に記載の装置。
［発明９］
前記プロセッサは、前記ＵＳＢデバイスにおけるバッファがフルまたはほとんどフルである場合、前記ＵＳＢデバイスが前記ＵＳＢホストからデータを受信できないことを判定するように構成された発明８に記載の装置。
［発明１０］
前記プロセッサは、前記ＵＳＢデバイスにおけるバッファが、フルである予め定めた量内である場合、前記ＵＳＢデバイスが、前記ＵＳＢホストからデータを受信できないことを判定するように構成され、
前記予め定めた量は、前記フロー・オフ通知を受信した後、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットを中止する際における前記ＵＳＢホストによる遅延に対処するための予備バッファ容量に対応している発明８に記載の装置。
［発明１１］
前記フロー・オフ通知を送った後、前記プロセッサは、前記ＵＳＢデバイスが前記ＵＳＢホストからデータを受信できることを判定し、前記ＵＳＢホストへフロー・オン通知を送るように構成され、
前記ＵＳＢホストは、前記フロー・オン通知に応答して、ＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットを送信することを再開する発明８に記載の装置。
［発明１２］
前記プロセッサは、フロー制御のための通知を、割り込みパイプで、前記ＵＳＢホストへ送信するように構成された発明１に記載の装置。
［発明１３］
前記プロセッサは、前記割り込みパイプのＩＮトークン・パケットを、前記ＵＳＢホストから受信し、前記ＩＮトークン・パケットを受信した後、フロー制御のための通知を、前記割り込みパイプで送るように構成された発明１２に記載の装置。
［発明１４］
ユニバーサル・シリアル・バス（ＵＳＢ）デバイスの、ＵＳＢホストとデータを交換する能力を判定することと、
前記判定されたＵＳＢデバイスの能力に基づいて、フロー制御のための通知を、前記ＵＳＢホストへ送ることと
を備える方法。
［発明１５］
前記ＵＳＢデバイスの能力を判定することは、前記ＵＳＢデバイスが前記ＵＳＢホストとデータを交換できないことを判定し、
前記フロー制御のための通知を送ることは、データ交換を中止するために、前記ＵＳＢホストにフロー・オフ通知を送ることを備える発明１４に記載の方法。
［発明１６］
前記ＵＳＢデバイスが前記ＵＳＢホストとデータを交換できることを判定することと、
データ交換を再開するために、前記ＵＳＢホストへフロー・オン通知を送ることと
を更に備える発明１５に記載の方法。
［発明１７］
前記フロー制御のための通知を送ることは、前記フロー制御のための通知を、割り込みパイプで、前記ＵＳＢホストへ送ることを備える発明１４に記載の方法。
［発明１８］
ユニバーサル・シリアル・バス（ＵＳＢ）デバイスがＵＳＢホストとデータを交換できないことを判定する手段と、
データ交換を中止するために、フロー・オフ通知を前記ＵＳＢホストへ送る手段と
を備える装置。
［発明１９］
前記ＵＳＢデバイスが前記ＵＳＢホストとデータを交換できることを判定する手段と、
データ交換を再開するために、前記ＵＳＢホストへフロー・オン通知を送る手段と
を備える発明１８に記載の装置。
［発明２０］
ユニバーサル・シリアル・バス（ＵＳＢ）デバイスがＵＳＢホストとデータを交換できないことを判定し、
データ交換を中止するために、フロー・オフ通知を前記ＵＳＢホストへ送る
ための命令群を格納するプロセッサ読取可能媒体。
［発明２１］
前記ＵＳＢデバイスが前記ＵＳＢホストとデータを交換できることを判定し、
データ交換を再開するために、前記ＵＳＢホストへフロー・オン通知を送る
ための命令群を更に格納する発明２０に記載のプロセッサ読取可能媒体。
［発明２２］
ユニバーサル・シリアル・バス（ＵＳＢ）デバイスへトークン・パケットを送り、フロー制御のための第１の通知を前記ＵＳＢデバイスから受信し、前記第１の通知に応答して、前記ＵＳＢデバイスへトークン・パケットを送ることを変更するように構成されたプロセッサと、
前記プロセッサに接続されたメモリと
を備える装置。
［発明２３］
前記トークン・パケットおよび第１の通知は、前記ＵＳＢデバイスとＵＳＢホストとの間の複数のパイプのうちの特定のパイプのためのものである発明１に記載の装置。
［発明２４］
前記プロセッサは、前記第１の通知に応答して、前記ＵＳＢデバイスへトークン・パケットを送ることを中止するように構成された発明２２に記載の装置。
［発明２５］
前記プロセッサは、前記第１の通知に応答して、トークン・パケットを前記ＵＳＢデバイスへより遅いレートで送るように構成された発明２２に記載の装置。
［発明２６］
前記プロセッサは、フロー制御のための第２の通知を前記ＵＳＢデバイスから受信し、前記ＵＳＢデバイスへトークン・パケットを送ることを再開するように構成された発明２２に記載の装置。
［発明２７］
前記プロセッサは、前記ＵＳＢデバイスからのデータを要求するために、前記ＵＳＢデバイスへＩＮトークン・パケットを送るように構成された発明２２に記載の装置。
［発明２８］
前記プロセッサは、前記ＵＳＢデバイスへ送るデータを示すために、前記ＵＳＢデバイスへＯＵＴトークン・パケットまたはＰＩＮＧトークン・パケットを送るように構成された発明２２に記載の装置。
［発明２９］
前記プロセッサは、データ・パイプのためのトークン・パケットを前記ＵＳＢデバイスへ送り、前記第１の通知を、前記ＵＳＢデバイスから、割り込みパイプで受信するように構成された発明２２に記載の装置。
［発明３０］
前記プロセッサは、選択されたバス・アクセス周期に従って、前記割り込みパイプのためのＩＮトークン・パケットを送り、前記割り込みパイプのために、前記ＩＮトークン・パケットのうちの１つが送られた後、前記フロー制御のための第１の通知を受信するように構成された発明２９に記載の装置。
［発明３１］
トークン・パケットをユニバーサル・シリアル・バス（ＵＳＢ）デバイスへ送ることと、
フロー制御のための第１の通知を、前記ＵＳＢデバイスから受信することと、
前記第１の通知に応答して、前記ＵＳＢデバイスへトークン・パケットを送ることを中止することと
を備える方法。
［発明３２］
フロー制御のための第２の通信を前記ＵＳＢデバイスから受信することと、
前記ＵＳＢデバイスへトークン・パケットを送ることを再開することと
を更に備える発明３１に記載の方法。
［発明３３］
前記フロー制御のための第１の通知を受信することは、前記フロー制御のための第１の通知を、前記ＵＳＢデバイスから、割り込みパイプで受信することを備える発明３１に記載の方法。
［発明３４］
トークン・パケットをユニバーサル・シリアル・バス（ＵＳＢ）デバイスへ送る手段と、
フロー制御のための第１の通知を、前記ＵＳＢデバイスから受信する手段と、
前記第１の通知に応答して、前記ＵＳＢデバイスへトークン・パケットを送ることを中止する手段と
を備える装置。
［発明３５］
フロー制御のための第２の通信を前記ＵＳＢデバイスから受信する手段と、
前記ＵＳＢデバイスへトークン・パケットを送ることを再開する手段と
を更に備える発明３４に記載の装置。
［発明３６］
トークン・パケットをユニバーサル・シリアル・バス（ＵＳＢ）デバイスへ送り、
フロー制御のための第１の通知を、前記ＵＳＢデバイスから受信し、
前記第１の通知に応答して、前記ＵＳＢデバイスへトークン・パケットを送ることを中止する
命令群を格納するプロセッサ読取可能媒体。
［発明３７］
フロー制御のための第２の通信を前記ＵＳＢデバイスから受信し、
前記ＵＳＢデバイスへトークン・パケットを送ることを再開する
命令群を更に格納する発明３６に記載のプロセッサ読取可能媒体。
【図１】
0005639107.tif 000002
【図２Ａ】
0005639107.tif 000003
【図２Ｂ】
0005639107.tif 000004
【図２Ｃ】
0005639107.tif 000005
【図３】
0005639107.tif 000006
【図４】
0005639107.tif 000007
【図５】
0005639107.tif 000008
【図６】
0005639107.tif 000009
【図７】
0005639107.tif 000010