(57)【特許請求の範囲】
【請求項１】
送信側から供給されるパケットを受信し、受信したパケットを解析し、解析により得られる情報を基に該受信したパケットの受信状態に応じて送信側に対して該受信したパケットの通信を制御する通信制御装置において、該装置は、
前記受信したパケットの解析により得られた第１のパケットサイズを格納する情報格納手段と、
前記送信側から供給されるパケットの再送される回数をカウントするカウント手段と、
第１のパケットサイズおよび前記回数が入力され、前記受信したパケットに対してあらかじめ設定された第２のパケットサイズと第１のパケットサイズとを比較し、少なくとも、比較結果および前記回数のいずれか一方をサイズ条件とし、該サイズ条件に対する前記受信したパケットを検査し、検査結果に応じて前記送信側へのハンドシェークを無応答にするか否かを判定し、制御するサイズ検査手段とを含み、
前記サイズ検査手段は、前記回数が前記パケットの再送を認める限界にて供給されるパケットに対する応答を返し、該パケットの受信を前記送信側に対し正常として制御し、該装置が有する上位階層の構成要素に対して前記受信したパケットのエラーを割り込みでアサートし、該受信したパケットを保持することを特徴とする通信制御装置。
【請求項２】
請求項１に記載の装置において、第２のパケットサイズは、既知のサイズおよび予測可能なサイズであることを特徴とする通信制御装置。
【請求項３】
請求項１に記載の装置において、該装置は、前記情報格納手段および前記カウント手段がエンドポイント毎に管理する回路に配設されることを特徴とする通信制御装置。
【請求項４】
請求項１に記載の装置において、該装置は、USB（Universal Serial Bus）規格に応じて通信を制御することを特徴とする通信制御装置。
【請求項５】
送信側から供給されるパケットを受信し、受信したパケットを解析し、解析により得られる情報を基に該受信したパケットの受信状態に応じて送信側に対して該受信したパケットの通信を制御する通信制御方法において、該方法は、
前記解析により前記受信したパケットのサイズを第１のパケットサイズとして求める第１の工程と、
前記送信側から供給されるパケットの再送される回数をカウントする第２の工程と、
あらかじめ第２のパケットサイズを設定しておき、第１のパケットサイズと第２のパケットサイズとの比較結果および前記回数をサイズ条件とし、該サイズ条件に対する前記受信したパケットを検査する第３の工程と、
前記受信したパケットの検査結果に応じて前記送信側へのハンドシェークを無応答にするか否かを判定し、制御する第４の工程とを含み、
第４の工程は、前記回数の判定が前記パケットの再送を認める限界より小さい回数の場合、前記送信側へのハンドシェークを無応答に制御し、前記回数が限界に一致した場合、前記送信側に対し正常として制御し、該通信制御方法にて規定される上位階層の構成要素に対して前記受信したパケットのエラーを割り込みでアサートし、該受信したパケットを保持することを特徴とする通信制御方法。
【請求項６】
請求項５に記載の方法において、第３の工程は、前記サイズ条件としてあらかじめ設定したサイズ検査の有効および無効のいずれかに応じて動作することを特徴とする通信制御方法。
【請求項７】
請求項５または６に記載の方法において、該方法は、バルク転送の場合、一つのトランスファにおいて最終パケット以外のパケットをペイロードサイズで転送し、最終パケットだけトランスファの残りのバイト数とし、トランスファの最終パケットとそれ以外のパケットに対してサイズ条件を設定し、制御することを特徴とする通信制御方法。
【請求項８】
請求項７に記載の方法において、該方法は、前記サイズ条件および再送の有効または無効の切替えをパケット毎に設定し、制御することを特徴とする通信制御方法。
【請求項９】
請求項７または８に記載の方法において、該方法は、USB（Universal Serial Bus）規格に応じて通信を制御することを特徴とする通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信制御装置およびその制御方法に関するものである。本発明の通信制御装置は、とくに、USB（Universal Serial Bus）の通信において生じるエラーの耐性を向上させる技術に関するものである。また、本発明の通信制御方法は、たとえばUSB通信のショートパケット等で生じるパケット誤認識を的確に判断し、この判断に応じてパケット通信を制御する手順に関するものである。
【背景技術】
【０００２】
USB（Universal Serial Bus）通信では、通信品質の確保のためクロック精度、信号波形、ジッタおよびスキュー等の影響にともなう信号品質、ならびにノイズ対策等の様々な条件が規定されている。また、USB通信は、通信エラーに関してもパケットの各フィールドにCRC（Cyclic Redundancy Check）等の冗長部を持たせることでエラー検出する仕組みが採用されている。また、ハンドシェークを使い分けることにより、USB通信は、フロー制御ができるだけでなく、検出したエラーに対する再送の仕組みも用意されている。
【特許文献１】特開2001−148719号公報
【特許文献２】特開2001−211210号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
前述したようにUSB通信には、通信品質、パケットのエラー検出および再送に関する各種の規定が設けられている。しかしながら、パケット長に関しては、EOP（End Of Packet）を検出することでパケットの終端と認識する。したがって、パケットはパケット長を示すフィールドを持たない。このため、EOPの検出を誤ると、正常なパケットであっても、そのパケット長を知ることができない。さらに、USB通信におけるパケット長は可変長である。
【０００４】
ここで、パケット破損が発生し、これによりEOPを誤認識すると、パケットはショートパケットとして扱われてしてしまう。この場合、パケット破損は、冗長部によるフィールドのエラー検出機能に基づく検出を頼ることとなる。たとえばパケットがショートパケットとして扱われた場合、テータフィールドにおけるデータの並びには制約がとくにないことから、データフィールドの正常に転送できた部分とCRCフィールドとして扱われた部分によるCRC検査において偶然、CRC値が一致してしまうことが有り得る。これが生じると、結果的に破損パケットが正常パケットと認識されてしまう。
【０００５】
ところで、USB通信規格のバージョンl.1にて規定され、USB通信規格のバージョン2.0でも継承されているUSB通信のフルスピードにおいて、EOPは信号の種類を表わすバスコンディションとして、他では再現され難い２ビットタイムのSE0（Send End 0）ステートとして定義されていた。通常の信号は差動信号であるため、２つのデータ線で位相が逆になるが、SEOは２つのデータ線がともにローレベルの信号になる。すなわち、それが２ビットタイムを継続することになる。これにより、このような破損したパケットの検出に支障をきたす可能性を完全になくすことはできないが、その可能性は低く抑えられていた。
【０００６】
一方、USB通信規格のバージョン2.0で追加されたハイスピード通信でEOPは、フルスピード通信と定義が異なる。ハイスピード通信においてEOPは、通常のデータビットと同一な差動信号であるJステートまたはKステートの８ビットタイム継続として定義された。JおよびKステートは通常のデータビットと同一なステートではあるが、USB通信ではビットスタッフという仕組みにより７ビット以上同じステートが続く場合、JおよびKステートがトグルする規則があり、８ビットタイム継続するJおよびKステートはデータ並びとしては発生せず、EOPを識別できることになる。
【０００７】
ここで、このビットスタッフに対するエラー、すなわちビットスタッフエラーが発生すると、フルスピード通信ではエラーとして検出し、検出したエラーのパケットを破棄する。しかしながら、ハイスピード通信では、直ちにEOPと同じバスコンディションとなり、USB通信規格のバージョン2.0でもEOPとして扱われることが明記されている。この結果、ビットスタッフエラーが検出できなくなっている。したがって、フルスピード通信では２ビット分のエラーが発生しない限り、EOPを誤認識することはなかったが、ハイスピード通信では、データ並びによっては１ビット分のエラーでもEOPを誤認識することとなる。これにより、フルスピード通信よりもハイスピード通信では、EOP検出に対するエラー耐性が低くなっている。この結果として、EOPの誤認識による破損した短いパケットを正常パケットとして扱う危険性が増してしまう。
【０００８】
この危険性について簡単に説明する。偶然CRCが一致し、EOPが誤認識にあるエラーパケットの残りに対するデータ送信完了前にACK（ACKnowledge）応答が返された場合、送信側はACK応答が受け取れない。このため、送信側はパケット送信が失敗したと認識、すなわち異常なトランザクションの完了と判断する。しかしながら、エラーパケットの残りに対するデータが送信完了後にACK応答が返されると、送信側はACK応答を受け取るから、正常受信と誤認識する。この結果、送信データの再送が起こらない。
【０００９】
本発明はこのような従来技術の欠点を解消し、破損したパケットに対する認識を正しくし、より一層エラー耐性を向上させることができる通信制御装置およびその制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は上述の課題を解決するために、送信側から供給されるパケットを受信し、受信したパケットを解析し、解析により得られる情報を基にこの受信したパケットの受信状態に応じて送信側に対してこの受信したパケットの通信を制御する通信制御装置において、この装置は、受信したパケットの解析により得られた第１のパケットサイズを格納する情報格納手段と、送信側から供給されるパケットの再送される回数をカウントするカウント手段と、第１のパケットサイズおよび回数が入力され、受信したパケットに対してあらかじめ設定された第２のパケットサイズと第１のパケットサイズとを比較し、少なくとも、比較結果および回数のいずれか一方をサイズ条件とし、このサイズ条件に対する受信したパケットを検査し、検査結果に応じて送信側へのハンドシェークを無応答にするか否かを判定し、制御するサイズ検査手段とを含むことを特徴とする。
【００１１】
本発明の通信制御装置は、情報格納手段に第１のパケットサイズを格納し、カウント手段に再送した回数をカウントし、サイズ検査手段で第１のパケットサイズおよび回数が入力され、受信したパケットに対してあらかじめ設定された第２のパケットサイズと第１のパケットサイズとを比較し、少なくとも、比較結果および回数のいずれか一方をサイズ条件とし、このサイズ条件に対する受信したパケットを検査し、検査結果に応じて送信側へのハンドシェークを無応答にするか否かを判定し、この判定に応じて制御することにより通常どのサイズであっても、パケットのペイロードが所定のサイズ以内であれば、ACK（ACKnowledge）応答を返すところを、サイズ条件の一致や回数によりハンドシェークを無応答とすることによりパケットサイズの誤認識に対して的確に再送を送信側にさせる。
【００１２】
また、本発明は上述の課題を解決するために、送信側から供給されるパケットを受信し、受信したパケットを解析し、解析により得られる情報を基に該受信したパケットの受信状態に応じて送信側に対してこの受信したパケットの通信を制御する通信制御方法において、この方法は、解析により受信したパケットのサイズを第１のパケットサイズとして求める第１の工程と、送信側から供給されるパケットの再送される回数をカウントする第２の工程と、あらかじめ第２のパケットサイズを設定しておき、第１のパケットサイズと第２のパケットサイズとの比較結果および回数をサイズ条件とし、このサイズ条件に対する受信したパケットを検査する第３の工程と、受信したパケットの検査結果に応じて送信側へのハンドシェークを無応答にするか否かを判定し、制御する第４の工程とを含み、第４の工程は、回数の判定がパケットの再送を認める限界より小さい回数の場合、送信側へのハンドシェークを無応答に制御し、回数が限界に一致した場合、送信側に対し正常として制御し、この通信制御方法にて規定される上位階層の構成要素に対して受信したパケットのエラーを割り込みでアサートし、この受信したパケットを保持することを特徴とする。
【００１３】
本発明の通信制御方法は、解析により受信したパケットのサイズを第１のパケットサイズとして求め、送信側から供給されるパケットの再送される回数をカウントし、あらかじめ第２のパケットサイズを設定しておき、第１のパケットサイズと第２のパケットサイズとの比較結果およびカウントした回数をサイズ条件とし、このサイズ条件に対する受信したパケットを検査し、受信したパケットの検査結果に応じて送信側へのハンドシェークを無応答にするか否かを判定し、制御し、この制御は回数の判定がパケットの再送を認める限界より小さい回数の場合、送信側へのハンドシェークを無応答にし、回数が限界に一致した場合、送信側に対し正常として制御し、この通信制御方法にて規定される上位階層の構成要素に対して受信したパケットのエラーを割り込みでアサートし、この受信したパケットを保持することで破損したパケット、とくに、ショートパケットに対する認識を正しくし、より一層エラー耐性を向上させる。
【発明の効果】
【００１４】
本発明の通信制御装置および通信制御方法によれば、上位層プロトコルで決まっているサイズ条件によりUSBプロトコルでは検出できないエラーを検出して誤り検出率を高めることができる。また、再送単位を小さく、さらにハードウェアにより応答速度も通常のエラーパケットと同様にすることでエンドポイントの転送パフォーマンスへの影響および無駄なパケットの転送をなくすことができ、USBバス全体のバンド幅も有効に使用することができる。
【発明を実施するための最良の形態】
【００１５】
次に添付図面を参照して本発明による通信制御装置の一実施例を詳細に説明する。
【００１６】
本実施例は、本発明の通信制御装置をUSB通信装置10に適用した場合である。本発明と直接関係のない部分について図示および説明を省略する。以下の説明で、信号はその現れる接続線の参照番号で指示する。
【００１７】
USB通信装置10は、図２に示すように、プロトコルを制御するハードウェア12（HW）、ソフトウェア14（SW）がスタックした階層構造を有する。また、レイヤの観点から見ると、大きくUSBバス1/Fレイヤ16、USB論理デバイスレイヤ18、ファンクションレイヤ20の３つに分けることができる。
【００１８】
USBバス1/Fレイヤ16は、USBの物理層（PHYsical HW）22とUSBのコントローラ（リンク層HW）24を含む。物理層HW（22）は、クロック同期、バスステート検出、EOP検出、NRZI（Non-Return to Zero Invert）コーデックおよびビットスタッフ/アンスタッフ等の機能を有する。NRZIとは、変調符号のビットにデータ"1"が現れるごとに極性を反転する方法である。
【００１９】
また、USBリンク層HW（24）では、パケットエラー検出、トランザクション管理、アドレス、エンドポイント管理等の機能を有する。通信路としてエンドポイント毎にアクセスするためのインタフェースを持つ。
【００２０】
USB論理デバイスレイヤ18は、USBデバイスとして標準コマンドによるPnP（Plug and Play）や電源管理および状態管理等を制御し、複数のトランザクションが集まったトランスファ単位で通信を管理する機能を有する。USB論理デバイスレイヤ18には、この機能を実現させるプロトコルが実装される。これが、たとえばUSBペリフェラルドライバ26である。
【００２１】
ファンクションレイヤ20は、周辺機器としての機能を制御する機能を有する。ファンクションレイヤ20には、いくつかのトランスファを組み合わせたファンクション毎のプロトコルが実装される。本実施例では、ファンクションを限定していないが、たとえば大容量のストレージクラスのファンクションとしてUSBクラスドライバ28やアプリケーション30を含む。
【００２２】
上述した構成要素を含むUSB通信装置10の一例にUSB HDD（Hard Disk Drive）がある。USB HDD 32を図３に示す。USB HDD 32は、図３に示すように、USBホスト34とデバイス36との間に配され、両装置の間の通信を担う。USB HDD 32は、この場合、クラスドライバとしては、USBデバイスクラスを用いて定義される大容量ストレージクラス38が実装される。また、アプリケーションとしては、ソフトウェアの対応によりコマンド解析AP（APplication）40で解析し、データ処理することにより具体的にはUSB to IDE（Integrated Drive Electronics）ブリッジ機能を実装し、実現させている。
【００２３】
ここで、IDEとは、パーソナルコンピュータの互換機用ハードディスクインターフェイスの１つである。
【００２４】
USBイベント制御ソフトウェア42は、USB HDD 32におけるUSB論理デバイスレイヤ18の具体例である。デバイスドライバ44は、デバイス36側のドライバである。
【００２５】
制御部46は、USBデバイスコントローラ48およびデバイスコントローラ50を含む。USBデバイスコントローラ48は、USBパケットの送受信を制御し、本発明を適用して誤認識により短いパケットの正常なパケットと認識してしまうことで生じるエラー耐性の低下を防ぐ機能を有する。この機能を実現させる構成例を後段にて示しながら説明する。デバイスコントローラ50は、デバイス側との通信を制御する機能を有する。
【００２６】
デバイス36には、ATA（Advanced Technology Attachment）/SCSI（Small Computer System Interface）規格のHDD/CD-ROM（Compact Disk-Read Only Memory）/FDD（Floppy Disk Driver）(登録商標)等がある。
【００２７】
次に本実施例におけるUSBデバイスコントローラ48の概略的な構成例を図１に示す。USBコントローラ48は、複数のエンドポイント処理部をたとえば、エンドポイントA（52）, B（54）,・・・として含み、さらに、トランザクション制御部56、MUX（MUltipleXer）58および60、データパケット送信処理部62、ハンドシェーク送信処理部64、トークン送信処理部66、PID（Packet Identifier）生成部68、データパケット送信処理部62、ハンドシェーク送信処理部64、トークン送信処理部66、PID（Packet Identifier）生成部68、データパケット受信処理部70、ハンドシェーク受信処理部72、トークン受処理部74、ならびにPID検査部76を含む。
【００２８】
エンドポイント処理部を代表してエンドポイントA（52）を示す。エンドポイントA（52）は、一般的に含まれるFIFO（First-IN First-Out）メモリ78、送受信カウンタ80、ステータスレジスタ82とともに、特徴としてサイズレジスタ84および再送カウンタ86を含む。サイズレジスタ84は、エンドポイント毎に送受信の両方で使用され、送信時に既知および予測可能なサイズに指定された送信サイズを格納する機能を有し、受信時に受信サイズおよびサイズ検査回路の有効/無効を指定する機能も有する。後者の指定機能で無効を指定すると、USBコントローラ48は、通常のUSBコントローラと同じように動作させることができる。USBコントローラ48は、MCU（Micro-Controller Unit）インタフェース上に作られたレジスタインタフェースよりサイズレジスタ84を動的に設定することができる。サイズレジスタ84は、各指定された機能を実現するように動作する。
【００２９】
再送カウンタ86は、受信専用に用いてパケットの再送された回数を歩進計測する機能を有する。エンドポイントA、B、・・・はMUX 58に接続される。とくに、サイズレジスタ84および再送カウンタ86は、それぞれ、パケットサイズおよび再送回数をデータパケット受信処理部70に供給する。
【００３０】
トランザクション制御部56は、MUX 58および60にイネーブル信号86を供給して動作を制御し、送受信における各ステートを制御する機能を有する。この機能を実現させるように、トランザクション制御部56は、送信処理ブロックとしてのデータパケット送信処理部62、ハンドシェーク送信処理部64、トークン送信処理部66、PID生成部68、受信処理ブロックとしてのデータパケット受信処理部70、ハンドシェーク受信処理部72、トークン受信処理部74およびPID検査部76に制御信号88〜102が供給される。
【００３１】
データパケット送信処理部62は、図示しないがCRC生成部およびトグル値生成部を含む。データパケット送信処理部62はMUX 60に接続される。また、ハンドシェーク送信処理部64はPID生成部68と接続され、トークン送信処理部66もPID生成部68と接続される。トークン送信処理部66は、図示しないがエンドポイント番号生成部およびアドレス生成部を含む。PID生成部68は、MUX 60に接続される。送信処理ブロックではパケットの各フィールド値を生成する。データパケットの処理ブロックそれぞれはエンドポイントの各レジスタとデータパスにより接続される。
【００３２】
データパケット受信処理部70は、サイズ検査部104、CRC検査部106およびトグル値検査部106を含む。サイズ検査部104は、パケットのサイズエラーを検出する機能を有する。サイズ検査部104は、トランザクション制御部56だけでなく、エンドポイント毎のサイズレジスタ84、送受信のうちの受信カウンタおよび再送カウンタ86とのデータパスを有する。これにより、サイズ検査部104はサイズレジスタ84、受信カウンタおよび再送カウンタ86それぞれの値を取得する。サイズ検査部104は取得した値を基に再送カウンタ86に対する値を設定することができ、取得した値によりサイズを検査する。既存のUSBコントローラでもサイズ検査として、該当するエンドポイントの最大パケットサイズを超えているかどうかだけを検査するが、本実施例では、これに加えて、サイズレジスタ84で指定したパケットサイズと実際のパケットサイズとを比較し、検査する。ここで、比較検査が一致しない場合、無効パケットとしてトランザクション制御部56に通知する。これによりハンドシェークを無応答にできる。受信処理ブロックとして、データパケット受信処理部70、ハンドシェーク受信処理部72、トークン受信処理部74およびPID検査部76は各フィールドを検査する機能を有する。
【００３３】
前述した再送カウンタ86は、サイズ検査部104でエラー判定された場合、カウントが加算され、正常判定をした場合にクリアする連続した再送回数を記憶する機能を有する。また、記憶した再送回数は、サイズ検査の判定後に行なうハンドシェークを選択する際にも使用される。
【００３４】
データパケット受信処理部70の動作について簡単に説明する。データパケット受信処理部70では、トグル値検査とCRC検査を行ない、これらの検査の完了後に受信したパケットが正常なパケットと判定した場合、サイズ検査部104でサイズ検査を実行する。サイズ検査では、受信したパケットに該当するエンドポイントのサイズレジスタ84からサイズ検査の有効/無効の指定を取得する。取得したサイズ検査結果が有効であればサイズ検査を実行し、無効であればサイズ検査は実行しない。
【００３５】
サイズ検査を実施する場合、サイズ検査部104はサイズレジスタ84と送受信カウンタ80の受信カウンタとからそれぞれ受信サイズを取得する。サイズ検査部104は取得した受信サイズを比較する。この受信サイズの値が一致すれば、サイズ検査部104は正常と判定する。この判定結果を基にデータ受信パケット処理部70はトランザクション制御部56に正常パケットの受信をアサートする。これにともない該当するエンドポイントの再送カウンタ86をゼロに戻し、処理を終了する。
【００３６】
また、サイズ検査部104にてサイズの値が一致しなければ、サイズ検査を異常と判断する。そして、さらに再送カウンタ86を確認する。再送カウンタ86のカウント値が２以下であれば、データ受信パケット処理部70は、トランザクション制御56に異常パケットの受信をアサートする。また、再送カウンタ86のカウント値が３であれば、データ受信パケット処理部70は、反対に正常パケットの受信をアサートする。データ受信パケット処理部70はこのアサートとともに、MCUに外部割込み要求としてショートパケットの受信割込みをアサートする。そして、再送カウンタ86をゼロに戻し処理を終了する。
【００３７】
本実施例のUSBコントローラ48におけるソフトウェアの動作を含む通信処理、とくにパケットの受信手順について図４および図５を参照しながら説明する。図４に受信エンドポイントのUSB制御ソフトウェアの手順を示す。第１にUSBコントローラ48を動作可能にするように初期化等を実施する（ステップS10）。この後、データ受信に割り当てられたエンドポイントに対して設定する（ステップS12）。この設定はエンドポイントが有するサイズレジスタ84に対してソフトウェアにより行なわれる。サイズレジスタ84は供給されるパケットを予期しているパケットサイズとショートパケットの受信を許すか否かを設定する。
【００３８】
次にアプリケーションからのトランスファ要求が有るか否かを判断する（ステップS14）。トランスファ要求が有る場合（YES）、トランスファの受付・解析処理に進む（ステップS16へ）。また、トランスファ要求がない場合（NO）、この手順を終了する。
【００３９】
トランスファの受付・解析処理（ステップS16）は、転送されるパケットを受け付けて、このパケットを解析する。この解析においてUSBコントローラ48は、受信したパケットのサイズを求める。この後、トランスファ受信処理に進む（サブルーチンSUB1）。トランスファ受信処理では、受信したパケットのサイズを評価し、正常の評価に応じて受信する。
【００４０】
次にトランスファ要求が無いか否かを判断する（ステップS18）。トランスファ要求が無い場合（YES）、受信するパケットが無いと判断してデータ受信を終了する。また、トランスファ要求が有る場合（NO）、トランスファの受付・解析処理に戻る（ステップS16へ）。
【００４１】
次にトランスファ受信処理（サブルーチンSUB1）を簡単に説明する。受信したパケットのサイズが既知および予測可能のいずれかを判定する（サブステップSS10）。受信したパケットのサイズが既知および予測可能のいずれかの場合（YES）、パケットサイズの設定に進む（サブステップSS12へ）。また、パケットのサイズが不定および可変長のいずれかの場合（NO）、パケットの受信に進む（サブステップSS14へ）。
【００４２】
次に受信したパケットのサイズを設定する（サブステップSS12）。次に受信したパケットのサイズエラーを検出する（サブステップSS16）。サイズ検査部104にてサイズエラーは、データを受信した際にUSBコントローラ48が設定レジスタ、すなわちサイズレジスタ84の値とパケット解析の結果により得られた受信パケットサイズとを比較する。比較した値が異なる場合は、無効パケットと判断する。このときUSBコントローラ48はデータトグルを変化させずにパケットを破棄し、ハンドシェークは無応答とする。
【００４３】
ただし、サイズ検査部104は再送カウンタ86から再送回数を受け、この再送回数に応じて通信を制御する。サイズ検査部104は、たとえば受信側が３回連続の無応答をした場合、送信側は通信不能と判断するため、無応答は２回までに制御する。サイズ検査部104は、３回連続でパケットサイズが異なる場合、ACKハンドシェークを返し、有効パケットとして受信する（サブステップSS14）。この場合、サイズエラーパケットの受信を示す割り込みを発生する。
【００４４】
また、サイズ検査部104は、サイズ比較の結果が同値であれば、状況に応じたハンドシェークを返し、パケット受信を示す割り込みを発生する。
【００４５】
次に割込みが有るか否かを判断する（サブステップSS18）。割込みが無い場合サブステップSS18に戻って、待機する。また、割込みが有る場合（YES）、正常受信か否かを判断する（サブステップSS20）。正常受信の場合（YES）、トランスファ完了の判断に進む（サブステップSS22へ）。異常受信の場合（NO）、サイズエラーと判断して、リターンに進む。そして、このときエラーパケット受信割り込みが発生した場合のソワトウェア制御としては、上位層にトランスファエラーを通知する。
【００４６】
次にトランスファ完了か否かを判断する（サブステップSS22）。トランスファ未完了の場合（NO）、受信するパケットがまだ存在すると判断して、パケットサイズの既知および予測可能か否かの判断処理に戻る（サブステップSS10へ）。また、トランスファ完了の場合（YES）、トランスファ受信完了と判断して、リターンに進む。
【００４７】
USBコントローラ48は、このように上位アプリケーション、クラスドライバ次第で、転送するパケットサイズを知ることができる場合、簡単なハードウェアを追加し、ソフトウェア制御することによりエラーパケットだけの再送を実現することができる。また、この場合、とくに、ソフトウェアによりUSBにおける最小の再送単位であるパケット単位の再送を行なうため、パケット単位の再送方法として、ハードウェアでエラー判定とレスポンスの選択を行なうことが好ましい。
【００４８】
これに対して、ソフトウェアによる応答を変更することで早期に再送を実行させる方法も考えられるが、この場合、再送単位が大きくなってしまう。一般的に階層構造のプロトコルでは、階層が上位になるほど扱うデータの単位が大きくなるからである。
【００４９】
具体的に前述した構成および動作を要約すると、USBコントローラ48は、エンドポイント毎にサイズ条件の設定とサイズによるエラー判定とこれに応じたトランザクションのハンドシェーク選択ができるように改良され、ショートパケットに対するレスポンスがパケット受信前に設定できる機能を有する。USBコントローラ48は、このサイズ条件とサイズエラーの判定とともに、ハンドシェーク選択の有効/無効を、レジスタインタフェースを介してオプショナルな機能としてソフトウェアにより設定する。さらに、USBコントローラ48はこの設定を動的に変更可能とし、この機能の動的に制御することを可能にする。
【００５０】
このソフトウェアでは、上位レイヤプロトコルにより決まるトランスファのサイズ条件に応じてサイズエラー再送機能の有効/無効の切替えとサイズ条件を設定しなおすように制御することが好ましい。サイズ条件はパケット毎に設定するとよい。
【００５１】
バルク転送の場合、一つのトランスファで最終パケット以外は、ペイロードサイズで転送され、最終パケットだけトランスファの残りのバイト数となるため、トランスファの最終パケットとそれ以外でサイズ条件を設定するように制御することが望ましい。
【００５２】
そして、連続再送の最大回数である３回目の再送に関して、USBコントローラ48は、下位プロトコルではエラーしていないと判断して、ハードウェアはACK応答して、正常受信し、MCUにショートパケットエラー割込みを発生させる。これによりトランスファサイズが期待したサイズより小さいショートパケット中止に対しても対応することができる。
【００５３】
以上のように構成することにより通常、USBプロトコルで検出できないエラーを上位層プロトコルで決まっているサイズ条件を基に検出することでよりエラー検出率を高めることができる。再送単位が大きければ、当然、再送時間が長くなり、転送対象となるエンドポイントの転送パフォーマンスが低下するだけでなく、無駄なパケットの転送によりUSBのバンド幅を消費してしまい、USBバス全体のバンド幅を低下させてしまう。本発明を適用した本実施例によれば、再送単位を小さくし、さらにハードウェアにより応答速度も通常のエラーパケットと同様にして、パフォーマンスヘの影響をなくすことができる。
【図面の簡単な説明】
【００５４】
【図１】本発明に係る通信制御装置を適用したUSB通信装置内のUSBコントローラの概略的な構成を示すブロック図である。
【図２】図１のUSB通信装置における概略的な階層構造を示すブロック図である。
【図３】図１のUSB通信装置としてのUSB HDDにおける概略的な構成を示すブロック図である。
【図４】図１のUSBコントローラにおけるデータ受信の手順を説明するフローチャートである。
【図５】図４のトランスファ受信処理の手順を説明するフローチャートである。
【符号の説明】
【００５５】
10  USB通信装置
48  USBコントローラ
52、54  エンドポイントA, B
84  サイズレジスタ
86  再送カウンタ
104  サイズ検査部
【図１】
0004649304.tif 000002
【図２】
0004649304.tif 000003
【図３】
0004649304.tif 000004
【図４】
0004649304.tif 000005
【図５】
0004649304.tif 000006