(57)【特許請求の範囲】
【請求項１】
バスを介したデータ転送のためのデータ転送制御装置であって、
転送データを記憶するパケットバッファのアクセス制御を行うバッファコントローラと、
パケットバッファのデータの転送を制御する転送コントローラとを含み、
前記転送コントローラが、
第１のモードが設定された場合には、ＳＯＦ（Start Of Frame）パケットをフレーム周期で転送しながらデータ転送を行い、第２のモードが設定され且つ非周期転送を行う場合には、ＳＯＦパケットの周期転送を無効にして、非周期データの転送を行うことを特徴とするデータ転送制御装置。
【請求項２】
請求項１において、
前記転送コントローラが、
転送すべき非周期データが無い場合には、第２のモードが設定された場合にも、ＳＯＦパケットをフレーム周期で転送することを特徴とするデータ転送制御装置。
【請求項３】
請求項１又は２において、
ホストの役割として動作するホスト動作のステートと、ペリフェラルの役割として動作するペリフェラル動作のステートを含む複数のステートの制御を行うステートコントローラを含み、
前記パケットバッファには、
各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域が確保され、
前記転送コントローラが、
ホスト動作時において、ホストとしてのデータ転送を行うホストコントローラと、
ペリフェラル動作時において、ペリフェラルとしてのデータ転送を行うペリフェラルコントローラとを含み、
前記ホストコントローラが、
エンドポイントに対するトランザクションを自動発生し、パイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを自動転送することを特徴とするデータ転送制御装置。
【請求項４】
請求項３において、
前記ホストコントローラが、
第２のモードが設定された場合には、パイプ領域とそのパイプ領域に対応する非周期転送のエンドポイントとの間で、ＳＯＦパケットの周期転送を無効にしながら、非周期データを自動転送することを特徴とするデータ転送制御装置。
【請求項５】
請求項３又は４において、
前記ホストコントローラが、
パイプ領域の自動転送指示信号が全て非アクティブの場合には、第２のモードが設定された場合にも、ＳＯＦパケットをフレーム周期で自動転送することを特徴とするデータ転送制御装置。
【請求項６】
請求項３乃至５のいずれかにおいて、
前記ホストコントローラが、
フレーム周期毎にＳＯＦ転送開始トリガをアクティブにし、ＳＯＦパケットの転送が完了した場合に前記ＳＯＦ転送開始トリガを非アクティブにするＳＯＦ転送開始トリガ生成回路と、
パイプ領域の自動転送指示信号と、ステートコントローラからのステート情報信号と、第１又は第２のモードを指示する信号を受け、前記ＳＯＦ転送開始トリガを無効にする信号を生成するＳＯＦ無効信号生成回路とを含むことを特徴とするデータ転送制御装置。
【請求項７】
請求項３乃至６のいずれかにおいて、
ペリフェラル動作時には、
ホストとの間で転送されるデータが各エンドポイント領域に記憶される複数のエンドポイント領域が、パケットバッファに確保され、前記ペリフェラルコントローラが、エンドポイント領域とホストとの間でデータを転送することを特徴とするデータ転送制御装置。
【請求項８】
請求項１乃至７のいずれかにおいて、
前記非周期転送がＵＳＢ（Universal Serial Bus)規格のバルク転送又はコントロール転送であり、前記非周期データがバルクデータ又はコントロールデータであることを特徴とするデータ転送制御装置。
【請求項９】
請求項１乃至８のいずれかにおいて、
ＵＳＢ（Universal Serial Bus)のＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格に準拠したデータ転送を行うことを特徴とするデータ転送制御装置。
【請求項１０】
請求項１乃至９のいずれかのデータ転送制御装置と、
前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置と、
前記データ転送制御装置のデータ転送を制御する処理部と、
を含むことを特徴とする電子機器。
【請求項１１】
バスを介したデータ転送のためのデータ転送制御方法であって、
転送データを記憶するパケットバッファのアクセス制御を行い、
パケットバッファのデータの転送を制御すると共に、
第１のモードが設定された場合には、ＳＯＦ（Start Of Frame）パケットをフレーム周期で転送しながらデータ転送を行い、第２のモードが設定され且つ非周期転送を行う場合には、ＳＯＦパケットの周期転送を無効にして、非周期データの転送を行うことを特徴とするデータ転送制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ転送制御装置、電子機器及びデータ転送制御方法に関する。
【０００２】
【背景技術及び発明が解決しようとする課題】
ＵＳＢ（Universal Serial Bus)２．０の市場が順調に拡大しているなか、ＵＳＢ  Implementers Forum（ＵＳＢ−ＩＦ）によって、ＵＳＢ Ｏｎ−Ｔｈｅ−Ｇｏ（ＯＴＧ）と呼ばれるインターフェース規格が策定された。ＵＳＢ２．０を拡張する形で策定されたＯＴＧ規格（ＯＴＧ１．０）は、ＵＳＢインターフェースの新たな付加価値を生む可能性を秘めており、その特質を生かしたアプリケーションの登場が待たれている。
【０００３】
このＯＴＧによれば、これまでＵＳＢを介してホスト（パーソナルコンピュータ等）に接続されていたペリフェラル（周辺機器）に、ホスト機能を持たせることができる。これにより、ペリフェラル同士をＵＳＢで接続してデータを転送することが可能になり、例えばデジタルカメラとプリンタとをダイレクトに接続して、デジタルカメラの画像を印刷することが可能になる。また、デジタルカメラやデジタルビデオカメラをストレージ装置に接続して、データを保存することが可能になる。
【０００４】
しかしながら、ＯＴＧによりホスト機能を持たせるペリフェラルには、低性能のＣＰＵ（処理部）が組み込まれているのが一般的である。従って、ホスト機能の追加により、ペリフェラルが有するＣＰＵ（ファームウェア）の処理負荷が重くなったり、処理が複雑化すると、他の処理に支障が生じたり、機器の設計期間が長期化するなどの問題が生じる。
【０００５】
また、ＵＳＢ１．１、ＵＳＢ２．０、ＯＴＧなどのＵＳＢ規格では、アイソクロナス転送、バルク転送、コントロール転送、インタラプト転送という４種類の転送タイプが定義されている。ＵＳＢのホストは、これらの各転送タイプのパケットの転送順序を管理し、フレームの残り時間を考慮しながら、各転送タイプのパケットを転送する。このために、ＵＳＢではホストがフレーム管理を行い、ＦＳ（Full Speed）、ＬＳ（Low Speed）では１ｍｓ毎に、ＨＳ（High Speed）では１２５μｓ毎に、ＳＯＦ（Start Of Frame）パケットをホストがペリフェラル（デバイス）に転送する。
【０００６】
しかしながら、バルク転送やコントロール転送などの非周期転送では、このようなＳＯＦパケットの転送はバス帯域を狭める結果となり、転送効率が低下してしまうという課題があることが判明した。
【０００７】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、非周期転送時の転送効率を向上できるデータ転送制御装置、電子機器及びデータ転送制御方法を提供することにある。
【０００８】
【課題を解決するための手段】
本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、転送データを記憶するパケットバッファのアクセス制御を行うバッファコントローラと、パケットバッファのデータの転送を制御する転送コントローラとを含み、前記転送コントローラが、第１のモードが設定された場合には、ＳＯＦ（Start Of Frame）パケットをフレーム周期で転送しながらデータ転送を行い、第２のモードが設定され且つ非周期転送を行う場合には、ＳＯＦパケットの周期転送を無効にして、非周期データの転送を行うデータ転送制御装置に関係する。
【０００９】
本発明では、第１のモードの設定時には、ＳＯＦパケットがフレーム周期で転送されながら、データ転送が行われる。これにより、例えばアイソクロナス転送等の周期転送を適正に行うことが可能になる。一方、第２のモードの設定時には、ＳＯＦパケットの転送が無効にされて、非周期データの転送が行われる。これにより、複数のフレームの境界をまたがったトランザクションの発生等が可能になり、例えばバルク転送、コントロール転送等の非周期転送の転送効率を向上できる。
【００１０】
また本発明では、前記転送コントローラが、転送すべき非周期データが無い場合には、第２のモードが設定された場合にも、ＳＯＦパケットをフレーム周期で転送するようにしてもよい。
【００１１】
このようにすれば、バスに接続される他の機器が不適切なステートに移行してしまう事態等を防止できる。なお、転送すべき非周期データが有るか無いかは、例えば、転送開始指示信号や、パケットバッファのフル、エンプティ信号等により判断できる。
【００１２】
また本発明では、ホストの役割として動作するホスト動作のステートと、ペリフェラルの役割として動作するペリフェラル動作のステートを含む複数のステートの制御を行うステートコントローラを含み、前記パケットバッファには、各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域が確保され、前記転送コントローラが、ホスト動作時において、ホストとしてのデータ転送を行うホストコントローラと、ペリフェラル動作時において、ペリフェラルとしてのデータ転送を行うペリフェラルコントローラとを含み、前記ホストコントローラが、エンドポイントに対するトランザクションを自動発生し、パイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを自動転送するようにしてもよい。
【００１３】
本発明によれば、例えば、ステートコントローラにより制御されるステートが、ホスト動作のステートになると、ホストコントローラにより、ホストの役割としてのデータ転送が行われる。また、ステートコントローラにより制御されるステートが、ペリフェラル動作のステートになると、ペリフェラルコントローラにより、ペリフェラルの役割としてのデータ転送が行われる。これにより、いわゆるデュアルロール・デバイス機能を実現できるようになる。
【００１４】
そして本発明では、ホスト動作時において、パケットバッファに対して複数のパイプ領域が確保（allocate）され、確保されたパイプ領域とエンドポイントとの間で、データが自動転送される。これにより、デュアルロール・デバイス機能を実現できると共に、ホスト動作時における処理部の処理負荷を軽減できる。
【００１５】
また本発明では、前記ホストコントローラが、第２のモードが設定された場合には、パイプ領域とそのパイプ領域に対応する非周期転送のエンドポイントとの間で、ＳＯＦパケットの周期転送を無効にしながら、非周期データを自動転送するようにしてもよい。
【００１６】
このようにすれば、パイプ領域を用いて、非周期転送のエンドポイントとの間で、非周期データの自動転送が可能になり、データ転送を効率化できる。そして、この時に本発明では、ＳＯＦパケットの周期転送が無効になるため、データ転送を更に効率化できる。なお、ＳＯＦパケットの転送を無効にする場合（第２のモードに設定する場合）には、パケットバッファに確保されるパイプ領域に、周期転送（アイソクロナス転送等）以外の転送種別のエンドポイントを割り当てることが望ましい。
【００１７】
また本発明では、前記ホストコントローラが、パイプ領域の自動転送指示信号が全て非アクティブの場合には、第２のモードが設定された場合にも、ＳＯＦパケットをフレーム周期で自動転送するようにしてもよい。
【００１８】
このようにすれば、転送すべきデータが有るか無いかを、自動転送指示信号に基づいて判断できるため、判断処理を簡素化できる。そして、自動転送指示信号が全て非アクティブの場合（転送すべきデータが無い場合）に、ＳＯＦパケットを転送することで、バスに接続される他の機器が不適切なステートに移行してしまう事態等を防止できる。
【００１９】
また本発明では、前記ホストコントローラが、フレーム周期毎にＳＯＦ転送開始トリガをアクティブにし、ＳＯＦパケットの転送が完了した場合に前記ＳＯＦ転送開始トリガを非アクティブにするＳＯＦ転送開始トリガ生成回路と、パイプ領域の自動転送指示信号と、ステートコントローラからのステート情報信号と、第１又は第２のモードを指示する信号を受け、前記ＳＯＦ転送開始トリガを無効にする信号を生成するＳＯＦ無効信号生成回路とを含んでもよい。
【００２０】
このようにすれば、ＳＯＦパケットの転送を無効にする処理等を簡素な回路で実現できる。なお、例えば、ステート情報信号が示すステートがホスト動作であり、第２のモードが指示され、自動転送指示信号の少なくとも１つがアクティブの場合には、ＳＯＦ転送開始トリガの無効信号をアクティブにして、ＳＯＦ転送開始トリガの生成を無効にすることができる。一方、ステート情報信号が示すステートがホスト動作であり、第２のモードが指示された場合にも、自動転送指示信号が全て非アクティブの場合（転送すべきデータが無い場合）には、ＳＯＦ転送開始トリガの無効信号を非アクティブにして、ＳＯＦ転送開始トリガの生成が無効にされないようにすることができる。
【００２１】
また本発明では、ペリフェラル動作時には、ホストとの間で転送されるデータが各エンドポイント領域に記憶される複数のエンドポイント領域が、パケットバッファに確保され、前記ペリフェラルコントローラが、エンドポイント領域とホストとの間でデータを転送するようにしてもよい。
【００２２】
このようにすれば、パケットバッファのバッファ領域を、ホスト動作時にはパイプ領域として使用し、ペリフェラル動作時にはエンドポイント領域として使用できるようになる。これにより、パケットバッファのリソースの有効利用や、処理部の処理負荷の軽減化を図れる。
【００２３】
また本発明では、前記非周期転送がＵＳＢ（Universal Serial Bus)規格のバルク転送又はコントロール転送であり、前記非周期データがバルクデータ又はコントロールデータであってもよい。
【００２４】
また本発明では、ＵＳＢ（Universal Serial Bus)のＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格に準拠したデータ転送を行うようにしてもよい。
【００２５】
また本発明は、上記のいずれかのデータ転送制御装置と、前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置と、前記データ転送制御装置のデータ転送を制御する処理部とを含む電子機器に関係する。
【００２６】
また本発明は、バスを介したデータ転送のためのデータ転送制御方法であって、転送データを記憶するパケットバッファのアクセス制御を行い、パケットバッファのデータの転送を制御すると共に、第１のモードが設定された場合には、ＳＯＦ（Start Of Frame）パケットをフレーム周期で転送しながらデータ転送を行い、第２のモードが設定され且つ非周期転送を行う場合には、ＳＯＦパケットの周期転送を無効にして、非周期データの転送を行うデータ転送制御方法に関係する。
【００２７】
【発明の実施の形態】
以下、本実施形態について説明する。
【００２８】
なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００２９】
１．ＯＴＧ
まず、ＯＴＧ（ＵＳＢ Ｏｎ−Ｔｈｅ−Ｇｏ）について簡単に説明する。
【００３０】
１．１  Ａデバイス、Ｂデバイス
ＯＴＧでは、コネクタの規格として、図１（Ａ）に示すようなMini-Ａプラグ、Mini-Ｂプラグが定義されている。また、これらのMini-Ａプラグ、Mini−Ｂプラグ（広義にはケーブルの第１、第２のプラグ）の両方を接続できるコネクタとして、Mini-ＡＢレセプタクル（receptacle）が定義されている。
【００３１】
そして例えば図１（Ｂ）のように、ＵＳＢケーブルのMini-Ａプラグに電子機器Ｐが接続され、Mini-Ｂプラグに電子機器Ｑが接続されると、電子機器ＰはＡデバイスに設定され、電子機器ＱはＢデバイスに設定される。一方、図１（Ｃ）に示すように、Mini-Ｂプラグ、Mini-Ａプラグが電子機器Ｐ、Ｑに接続されると、電子機器Ｐ、Ｑは、各々、Ｂデバイス、Ａデバイスに設定される。
【００３２】
Mini-Ａプラグ内ではＩＤピンがＧＮＤに接続されており、Mini-Ｂプラグ内ではＩＤピンはフローティング状態になっている。電子機器は、内蔵するプルアップ抵抗回路を用いて、このＩＤピンの電圧レベルを検出することで、自身がMini-Ａプラグに接続されたのか、或いはMini-Ｂプラグに接続されたのかを判断する。
【００３３】
ＯＴＧでは、Ａデバイス（マスター）が、電源（ＶＢＵＳ）を供給する側（供給元）になり、Ｂデバイス（スレイブ）が、電源の供給を受ける側（供給先）になる。また、Ａデバイスは、デフォルトのステートがホストになり、Ｂデバイスは、デフォルトのステートがペリフェラル（周辺機器）になる。
【００３４】
１．２  デュアルロール・デバイス
ＯＴＧでは、ホスト（簡易ホスト）としての役割とペリフェラルとしての役割の両方を持つことができるデュアルロール・デバイス（Dual-Role Device）が定義されている。
【００３５】
デュアルロール・デバイスは、ホストにもペリフェラルにもなれる。そして、デュアルロール・デバイスに接続された相手が、従来のＵＳＢ規格におけるホストやペリフェラルである場合には、デュアルロール・デバイスの役割は一意に定まる。つまり、接続相手がホストであれば、デュアルロール・デバイスはペリフェラルになり、接続相手がペリフェラルであれば、デュアルロール・デバイスはホストになる。
【００３６】
一方、接続相手がデュアルロール・デバイスである場合には、両方のデュアルロール・デバイスは、お互いにホストとペリフェラルの役割を交換できる。
【００３７】
１．３  ＳＲＰ、ＨＮＰ
デュアルロール・デバイスは、図２（Ａ）、（Ｂ）に示すようなセッション開始要求手順ＳＲＰ（Session Request Protocol）やホスト交換手順ＨＮＰ（Host Negotiation Protocol）の機能を持つ。
【００３８】
ここでセッション開始要求手順ＳＲＰは、ＢデバイスがＡデバイスに対して、ＶＢＵＳ（電源）の供給を要求するプロトコルである。
【００３９】
バスを使用しない場合にＯＴＧでは、ＡデバイスはＶＢＵＳの供給を停止できる。これにより、Ａデバイスが例えば小型の携帯機器であった場合に、無駄な電力消費を防止できる。そして、ＡデバイスがＶＢＵＳの供給を停止した後に、ＢデバイスがＶＢＵＳを供給してもらいたい場合には、このＳＲＰを使用して、Ａデバイスに対してＶＢＵＳの供給の再開を要求する。
【００４０】
図２（Ａ）にＳＲＰの流れを示す。図２（Ａ）に示すように、Ｂデバイスは、データ・ライン・パルシングとＶＢＵＳパルシングを行うことで、Ａデバイスに対してＶＢＵＳの供給を要求する。そして、ＡデバイスによるＶＢＵＳの供給の開始後に、Ｂデバイスのペリフェラル動作（peripheral operation）と、Ａデバイスのホスト動作（host operation）が開始する。
【００４１】
図１（Ａ）〜図１（Ｃ）で説明したように、デュアルロール・デバイス同士の接続では、Mini-Ａプラグが接続された側であるＡデバイスがデフォルトのホストとなり、Mini-Ｂプラグが接続された側であるＢデバイスがデフォルトのペリフェラルになる。そして、ＯＴＧでは、プラグの抜き差しを行わなくても、ホストとペリフェラルの役割を交換できる。ＨＮＰは、このホストとペリフェラルの役割を交換するためのプロトコルである。
【００４２】
ＨＮＰの流れを図２（Ｂ）に示す。デフォルトのホストとして動作するＡデバイスが、バスの使用を終了すると、バスがアイドル状態になる。その後に、Ｂデバイスがデータ信号線ＤＰ（Ｄ＋）のプルアップ抵抗を無効にすると、ＡデバイスがＤＰのプルアップ抵抗を有効にする。これにより、Ａデバイスの役割はホストからペリフェラルに変わり、ペリフェラルとしての動作を開始する。また、Ｂデバイスの役割はペリフェラルからホストに変わり、ホストとしての動作を開始する。
【００４３】
その後、Ｂデバイスが、バスの使用を終了し、ＡデバイスがＤＰのプルアップ抵抗を無効にすると、Ｂデバイスが、ＤＰのプルアップ抵抗を有効にする。これにより、Ｂデバイスの役割はホストからペリフェラルに戻り、ペリフェラルとしての動作を再開する。また、Ａデバイスの役割はペリフェラルからホストに戻り、ホストとしての動作を再開する。
【００４４】
以上に説明したＯＴＧによれば、携帯電話やデジタルカメラなどの携帯機器をＵＳＢのホストとして動作させ、携帯機器同士をピア・ツー・ピアで接続してデータ転送を行うことが可能になる。これにより、ＵＳＢインターフェースに新たな付加価値を生むことができ、これまでには存在しなかったアプリケーションを創出できる。
【００４５】
２．ＯＨＣＩ
さて、従来のＵＳＢでは、ホストであるパーソナルコンピュータが有するデータ転送制御装置（ホストコントローラ）は、マイクロソフト社が提唱したＯＨＣＩ（Open Host Controller Interface）や、ＵＨＣＩ（Universal Host Controller Interface）といった規格に準拠していた。また、使用されるＯＳ（Operating System）も、マイクロソフト社のWindowsやアップル社のマッキントッシュのＯＳなどに限定されていた。
【００４６】
しかしながら、ＯＴＧのターゲット・アプリケーションである小型携帯機器では、組み込まれるＣＰＵのアーキテクチャや、使用されるＯＳは千差万別である。更に、パーソナルコンピュータのホストコントローラ向けに規格化されたＯＨＣＩやＵＨＣＩは、ＵＳＢホストとしての機能をフルに実装することを前提としており、小型携帯機器への実装に最適であるとは言い難い。
【００４７】
例えば、図３（Ａ）に、ＯＨＣＩで使用されるリスト構造のディスクリプタの一例を示す。
【００４８】
図３（Ａ）において、エンドポイントディスクリプタＥＤ１、ＥＤ２、ＥＤ３は、リンクポインタによりリンクされており、エンドポイント１、２、３とのコミュニケーションに必要な情報が含まれている。そして、これらのＥＤ１、ＥＤ２、ＥＤ３には、転送ディスクリプタＴＤ１１〜ＴＤ１３、ＴＤ２１、ＴＤ３１〜ＴＤ３２がリンクポインタにより更にリンクされている。そして、これらの転送ディスクリプタには、エンドポイント１、２、３との間で転送するパケットデータに必要な情報が含まれている。
【００４９】
図３（Ａ）のリスト構造のディスクリプタは、図３（Ｂ）のＣＰＵ６１０（広義には処理部）上で動作するファームウェア（ホストコントローラ・ドライバ）が作成し、システムメモリ６２０に書き込む。即ち、ファームウェアは、システム中のエンドポイントに対してエンドポイントディスクリプタを割り当て、エンドポイント情報等に基づいてエンドポイントディスクリプタ、転送ディスクリプタを作成する。そして、これらのディスクリプタをリンクポインタでリンクさせて、システムメモリ６２０に書き込む。
【００５０】
データ転送制御装置６００（ホストコントローラ）は、システムメモリ６２０に書き込まれたリスト構造のディスクリプタを読み出し、エンドポイントディスクリプタや転送ディスクリプタに記述される情報に基づいて、データ転送を実行する。
【００５１】
具体的には、データ転送制御装置６００（ホストコントローラ）は、ＥＤ１に基づいてエンドポイント１の情報を設定し、ＥＤ１にリンクされるＴＤ１１に基づいて、エンドポイント１との間でデータ転送を行う。次に、ＥＤ２に基づいてエンドポイント２の情報を設定し、ＥＤ２にリンクされるＴＤ２１に基づいて、エンドポイント２との間でデータ転送を行う。同様にして、データ転送制御装置６００は、ＴＤ３１、ＴＤ１２、ＴＤ３２、ＴＤ１３に基づいてデータ転送を実行する。
【００５２】
以上のように、ＯＨＣＩ準拠のデータ転送制御装置（ホストコントローラ）では、ＣＰＵ上で動作するファームウェア（ホストコントローラ・ドライバ）が、図３（Ａ）に示すような複雑な構造のディスクリプタを作成しなければならない。従って、ＣＰＵの処理負荷が非常に重い。
【００５３】
この場合、従来のＵＳＢでは、ホストの役割が割り当てられるのはパーソナルコンピュータだけであり、このパーソナルコンピュータは高性能のＣＰＵを有している。従って、図３（Ａ）に示すような複雑な構造のディスクリプタの作成も、余裕を持って行うことが可能であった。
【００５４】
ところが、ＯＴＧのターゲットアプリケーションである小型携帯機器（デジタルカメラ、携帯電話等）に組み込まれるＣＰＵ（embedded CPU）は、パーソナルコンピュータのＣＰＵに比べて、性能が格段に低いのが一般的である。従って、携帯機器にＯＴＧのホスト動作を行わせると、携帯機器に組み込まれるＣＰＵに過大な負荷がかかり、他の処理に支障が生じたり、データ転送のパフォーマンスが低下するなどの問題が生じる。
【００５５】
３．構成例
図４に、以上のような問題を解決できる本実施形態のデータ転送制御装置の構成例を示す。なお、本実施形態のデータ転送制御装置は、図４の全ての回路ブロックを含む必要はなく、その一部の回路ブロックを省略してもよい。
【００５６】
トランシーバ１０（以下、適宜Ｘｃｖｒと呼ぶ）は、差動データ信号ＤＰ、ＤＭを用いてＵＳＢ（広義にはバス）のデータを送受信する回路であり、ＵＳＢの物理層（ＰＨＹ）回路１２を含む。より具体的にはトランシーバ１０は、ＤＰ、ＤＭのラインステート（Ｊ、Ｋ、ＳＥ０等）の生成、シリアル／パラレル変換、パラレル／シリアル変換、ビットスタッフィング、ビットアンスタッフィング、ＮＲＺＩデコード、ＮＲＺＩエンコードなどを行う。なお、トランシーバ１０をデータ転送制御装置の外部に設けるようにしてもよい。
【００５７】
ＯＴＧコントローラ２０（広義にはステートコントローラ。以下、適宜ＯＴＧＣと呼ぶ）は、ＯＴＧのＳＲＰ機能やＨＮＰ機能（図２（Ａ）、（Ｂ）参照）を実現するための種々の処理を行う。即ち、ＯＴＧコントローラ２０は、ホストの役割として動作するホスト動作のステートや、ペリフェラルの役割として動作するペリフェラル動作のステートなどを含む複数のステートの制御を行う。
【００５８】
より具体的には、ＯＴＧ規格には、デュアルロール・デバイスのＡデバイス時（図１（Ｂ）、（Ｃ）参照）のステート遷移やＢデバイス時のステート遷移が定義されている。ＯＴＧコントローラ２０は、これらのステート遷移を実現するためのステートマシーンを含む。また、ＯＴＧコントローラ２０は、ＵＳＢのデータラインステートや、ＶＢＵＳレベルや、ＩＤピンのステートを検出（監視）する回路を含む。そして、ＯＴＧコントローラ２０が含むステートマシーンは、これらの検出情報に基づいて、そのステート（例えば、ホスト、ペリフェラル、サスペンド又はアイドルなどのステート）を変化させる。この場合のステートの遷移は、ハードウェア回路により実現してもよいし、ファームウェアがステートコマンドをレジスタに設定することで実現してもよい。そして、ステートが遷移すると、ＯＴＧコントローラ２０は、遷移後のステートに基づいて、ＶＢＵＳを制御したり、ＤＰ、ＤＭのプルアップ抵抗／プルダウン抵抗の接続／非接続を制御する。また、ホストコントローラ５０（以下、適宜ＨＣと呼ぶ）、ペリフェラルコントローラ６０（以下、適宜ＰＣと呼ぶ）のイネーブル／ディスエーブルを制御する。
【００５９】
ＨＣ／ＰＣ切り替え回路３０（ＨＣ／ＰＣ・コモン回路）は、トランシーバ１０と、ホストコントローラ５０又はペリフェラルコントローラ６０との間の接続の切り替え制御を行う。また、ＵＳＢのデータ（ＤＰ、ＤＭ）のラインステートの生成の指示をトランシーバ１０に対して行う。なお、接続の切り替え制御は、ＨＣ／ＰＣセレクタ３２により実現され、ラインステートの生成指示は、ラインステートコントローラ３４により実現される。
【００６０】
例えばＯＴＧコントローラ２０が、ホスト動作時（ホストステート時）にＨＣイネーブル信号をアクティブにすると、ＨＣ／ＰＣ切り替え回路３０（ＨＣ／ＰＣセレクタ３２）は、トランシーバ１０とホストコントローラ５０を接続する。一方、ＯＴＧコントローラ２０が、ペリフェラル動作時（ペリフェラルステート時）にＰＣイネーブル信号をアクティブにすると、ＨＣ／ＰＣ切り替え回路３０は、トランシーバ１０とペリフェラルコントローラ６０を接続する。このようにすることで、ホストコントローラ５０とペリフェラルコントローラ６０とを排他的に動作させることが可能になる。
【００６１】
転送コントローラ４０は、ＵＳＢ（広義にはバス）を介したデータ転送を制御する回路であり、ホストコントローラ５０（ＨＣ）とペリフェラルコントローラ６０（ＰＣ）を含む。
【００６２】
ここでホストコントローラ５０は、ホスト動作時（ＯＴＧコントローラ２０からのＨＣイネーブル信号のアクティブ時）に、ホストの役割としてのデータ転送制御を行う回路である。
【００６３】
即ち、ホストコントローラ５０は、ホスト動作時に、ＨＣ／ＰＣ切り替え回路３０によりトランシーバ１０に接続される。そしてホストコントローラ５０は、レジスタ部７０の転送条件レジスタ部７２に設定された転送条件情報に基づいて、エンドポイントに対するトランザクションを自動発生する。そして、パケットバッファ１００に確保（allocate）されたパイプ領域（ＰＩＰＥ０〜ＰＩＰＥｅ。以下、適宜ＰＩＰＥと呼ぶ）と、そのパイプ領域に対応するエンドポイントとの間で、データ（パケット）の自動転送（処理部が介在しないハードウェア回路によるデータ転送）を行う。
【００６４】
より具体的にはホストコントローラ５０は、複数のパイプ転送間の調停、フレームにおける時間管理、転送のスケジューリング、再送の管理などを行う。また、パイプ転送の転送条件情報（オペレーション情報）をレジスタ部７０を介して管理する。また、トランザクションの管理を行ったり、パケットを生成／分解したり、サスペンド／レジューム／リセット状態生成の指示を行う。
【００６５】
一方、ペリフェラルコントローラ６０は、ペリフェラル動作時（ＯＴＧコントローラ２０からのＰＣイネーブル信号のアクティブ時）に、ペリフェラルの役割としてのデータ転送制御を行う回路である。
【００６６】
即ち、ペリフェラルコントローラ６０は、ペリフェラル動作時に、ＨＣ／ＰＣ切り替え回路３０によりトランシーバ１０に接続される。そして、レジスタ部７０の転送条件レジスタ部７２に設定された転送条件情報に基づいて、パケットバッファ１００に確保されたエンドポイント領域（ＥＰ０〜ＥＰｅ。以下適宜ＥＰと呼ぶ）とホストとの間でデータを転送する。
【００６７】
より具体的には、ペリフェラルコントローラ６０は、エンドポイント転送の転送条件情報（オペレーション情報）をレジスタ部７０を介して管理する。また、トランザクションの管理を行ったり、パケットを生成／分解したり、リモート・ウェイクアップ信号生成の指示を行う。
【００６８】
なお、エンドポイントは、ユニークなアドレスを割り当てることができる、ペリフェラル（デバイス）上のポイント（部分）である。ホストとペリフェラル（デバイス）との間でのデータ転送は、全て、このエンドポイントを経由して行われる。また、トランザクションは、トークンパケットと、オプショナルなデータパケットと、オプショナルなハンドシェークパケットにより構成される。
【００６９】
レジスタ部７０は、データ転送（パイプ転送、エンドポイント転送）制御、バッファアクセス制御、バッファ管理、割り込み制御、ブロック制御、或いはＤＭＡ制御などを行うための種々のレジスタを含む。なお、レジスタ部７０が含むレジスタは、ＲＡＭなどのメモリにより実現してもよいし、Ｄフリップフロップなどにより実現してもよい。また、レジスタ部７０のレジスタは、１つにまとめずに、各ブロック（ＨＣ、ＰＣ、ＯＴＧＣ、Ｘｃｖｒ等）に分散して配置してもよい。
【００７０】
レジスタ部７０は、転送条件レジスタ部７２を含む。そして、この転送条件レジスタ部７２は、ホスト動作時にパケットバッファ１００に確保されるパイプ領域（ＰＩＰＥ０〜ＰＩＰＥｅ）とエンドポイントとの間でのデータ転送の転送条件情報（転送制御情報）を記憶するレジスタを含む。これらの各転送条件レジスタは、パケットバッファ１００の各パイプ領域に対応して設けられる。
【００７１】
なお、ペリフェラル動作時には、パケットバッファ１００にはエンドポイント領域（ＥＰ０〜ＥＰｅ）が確保される。そして、転送条件レジスタ部７２に設定された転送条件情報に基づいて、データ転送制御装置とホストとの間でのデータ転送が行われる。
【００７２】
バッファコントローラ８０（ＦＩＦＯマネージャ）は、パケットバッファ１００に対するアクセス（リード／ライト）制御や領域管理を行う。より具体的には、ＣＰＵ（広義には処理部）、ＤＭＡ（Direct Memory Access）、ＵＳＢによるパケットバッファ１００へのアクセス・アドレスを生成・管理する。また、ＣＰＵ、ＤＭＡ、ＵＳＢによるパケットバッファ１００へのアクセスの調停を行う。
【００７３】
例えば、ホスト動作時には、バッファコントローラ８０は、インターフェース回路１１０（ＣＰＵ又はＤＭＡ）とパケットバッファ１００の間のデータ転送経路と、パケットバッファ１００とホストコントローラ５０（ＵＳＢ）の間のデータ転送経路を設定（確立）する。
【００７４】
一方、ペリフェラル動作時には、バッファコントローラ８０は、インターフェース回路１１０（ＣＰＵ又はＤＭＡ）とパケットバッファ１００の間のデータ転送経路と、パケットバッファ１００とペリフェラルコントローラ６０（ＵＳＢ）の間のデータ転送経路を設定する。
【００７５】
パケットバッファ１００（ＦＩＦＯ、パケットメモリ、バッファ）は、ＵＳＢを介して転送されるデータ（送信データ又は受信データ）を一時的に記憶（バッファリング）するものである。このパケットバッファ１００は、例えばＲＡＭ（Random Access Memory）などにより構成できる。なお、パケットバッファ１００をデータ転送制御装置の外部に設けてもよい（外付けメモリにしてもよい）。
【００７６】
ホスト動作時には、パケットバッファ１００はパイプ転送用のＦＩＦＯ（First-In First-Out）として使用される。即ち、パケットバッファ１００には、ＵＳＢ（バス）の各エンドポイントに対応するように、パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅ（広義にはバッファ領域）が確保される。また、各パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅには、それに対応する各エンドポイントとの間で転送されるデータ（送信データ又は受信データ）が記憶される。
【００７７】
一方、ペリフェラル動作時には、パケットバッファ１００はエンドポイント転送用のＦＩＦＯとして使用される。即ち、パケットバッファ１００には、エンドポイント領域ＥＰ０〜ＥＰｅ（広義にはバッファ領域）が確保される。また、各エンドポイント領域ＥＰ０〜ＥＰｅには、ホストとの間で転送されるデータ（送信データ又は受信データ）が記憶される。
【００７８】
なお、パケットバッファ１００に確保されるバッファ領域（ホスト動作時にパイプ領域に設定され、ペリフェラル動作時にエンドポイント領域に設定される領域）は、先に入力された情報が先に出力されるような記憶領域（ＦＩＦＯ領域）に設定されている。
【００７９】
また、ＰＩＰＥ０は、コントロール転送用のエンドポイント０に専用のパイプ領域であり、ＰＩＰＥａ〜ＰＩＰＥｅは、任意のエンドポイントに割り当て可能な汎用のパイプ領域である。
【００８０】
即ち、ＵＳＢでは、エンドポイント０がコントロール転送に専用のエンドポイントに設定される。従って、本実施形態のようにＰＩＰＥ０をコントロール転送に専用のパイプ領域にすることで、ユーザが混乱するのを防止できる。また、ＰＩＰＥａ〜ＰＩＰＥｅを、任意のエンドポイントに割り当て可能なパイプ領域にすることで、エンドポイントに対応するパイプ領域を動的に変化させることが可能になる。これにより、パイプ転送のスケジューリングの自由度を向上でき、データ転送の効率化を図れる。
【００８１】
なお本実施形態では、バッファ領域（パイプ領域又はエンドポイント領域）は、マックスパケットサイズMaxPktSize（広義にはページサイズ）とページ数BufferPageにより、その領域サイズRSizeが設定される（RSize=MaxPktSize×BufferPage）。このようにすることで、バッファ領域の領域サイズや面数（ページ数）を任意に設定できるようになり、パケットバッファ１００のリソースの有効利用を図れる。
【００８２】
インターフェース回路１１０は、ＵＳＢとは異なる他のバスであるＤＭＡ（システムメモリ）バスやＣＰＵバスと、パケットバッファ１００との間でのデータ転送を行うための回路である。このインターフェース回路１１０は、パケットバッファ１００と外部のシステムメモリとの間で、ＤＭＡ転送を行うためのＤＭＡハンドラ回路１１２を含む。また、パケットバッファ１００と外部のＣＰＵとの間で、ＰＩＯ（Parallel I/O）転送を行うためのＣＰＵインターフェース回路１１４を含む。なお、ＣＰＵ（処理部）をデータ転送制御装置に内蔵させてもよい。
【００８３】
クロックコントローラ１２０は、内蔵ＰＬＬ又は外部入力クロックに基づいて、データ転送制御装置の内部で使用する各種のクロックを生成する。
【００８４】
４．パイプ領域
本実施形態では図５（Ａ）に示すように、ホスト動作時に、パケットバッファ１００にパイプ領域ＰＩＰＥ０〜ＰＩＰＥｅが確保（allocate）される。そして、この各パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅとペリフェラルの各エンドポイントの間で、データが転送される。
【００８５】
ここで、本実施形態のパイプ領域の「パイプ」は、ＵＳＢで定義される「パイプ」（デバイス上のエンドポイントとホスト上のソフトウェアとの間の関連を表す論理的な抽象化、論理的な経路）とは若干意味合いが異なる。
【００８６】
本実施形態のパイプ領域は、図５（Ａ）に示すように、ＵＳＢ（バス）に接続されるペリフェラルが有する各エンドポイントに対応して、パケットバッファ１００上に確保される。例えば図５（Ａ）において、パイプ領域ＰＩＰＥａはペリフェラル１のエンドポイント１（バルクＩＮ）に対応し、ＰＩＰＥｂはペリフェラル１のエンドポイント２（バルクＯＵＴ）に対応する。また、ＰＩＰＥｃはペリフェラル２のエンドポイント１（バルクＩＮ）に対応し、ＰＩＰＥｄはペリフェラル２のエンドポイント２（バルクＯＵＴ）に対応する。また、ＰＩＰＥｅはペリフェラル３のエンドポイント１（インタラプトＩＮ）に対応する。なお、ＰＩＰＥ０は、コントロール転送のエンドポイント０に専用のパイプ領域である。
【００８７】
そして図５（Ａ）の例では、パイプ領域ＰＩＰＥａとペリフェラル１のエンドポイント１との間でＵＳＢのバルクＩＮ転送が行われ、ＰＩＰＥｂとペリフェラル１のエンドポイント２との間ではバルクＯＵＴ転送が行われる。また、ＰＩＰＥｃとペリフェラル２のエンドポイント１との間ではバルクＩＮ転送が行われ、ＰＩＰＥｄとペリフェラル２のエンドポイント２との間ではバルクＯＵＴ転送が行われる。また、ＰＩＰＥｅとペリフェラル３のエンドポイント１との間ではインタラプトＩＮ転送が行われる。
【００８８】
このように本実施形態では、パイプ領域（汎用）とそれに対応するエンドポイントとの間では、任意のデータ転送（アイソクロナス転送、バルク転送、インタラプト転送）を行うことができる。
【００８９】
そして本実施形態では、パイプ領域とそれに対応するエンドポイントの間では、所与のデータ単位（トータルサイズで指定されるデータ単位）のデータが転送される。この場合のデータ単位としては、例えばＩＲＰ（Ｉ／Ｏリクエストパケット）により転送要求されるデータ単位又はそれを適当なサイズに分割したデータ単位などを考えることができる。エンドポイントに対するこのデータ単位のデータ転送（一連のトランザクション）を、本実施形態における「パイプ」と呼ぶことができる。そして、そのような「パイプ」のデータ（送信データ、受信データ）を記憶する領域がパイプ領域になる。
【００９０】
パイプ領域を用いた所与のデータ単位の転送が終了すると、そのパイプ領域は解放することができる。そして、解放されたパイプ領域は、任意のエンドポイントに割り当てることができる。このように本実施形態では、パイプ領域とエンドポイントとの対応づけを、動的に変化させることができる。
【００９１】
また本実施形態では図５（Ｂ）に示すように、ペリフェラル動作時には、パケットバッファ１００にエンドポイント領域ＥＰ０〜ＥＰｅが確保（設定）される。そして、この各エンドポイント領域ＥＰ０〜ＥＰｅとホスト（ホストコントローラ、システムメモリ）との間で、データが転送される。
【００９２】
このように本実施形態では、パケットバッファ１００のバッファ領域を、ホスト動作時にはパイプ領域に割り当て、ペリフェラル動作時にはエンドポイント領域に割り当てている。これにより、ホスト動作時とペリフェラル動作時とでパケットバッファ１００のリソースを共用（兼用）することが可能になり、パケットバッファ１００の使用記憶容量を節約できる。
【００９３】
なおパイプ領域、エンドポイント領域の個数は６個に限定されず任意である。
【００９４】
５．ＳＯＦ無しモード（ＳＯＦ無しバルクのみ転送モード）
さて、ＵＳＢ規格（ＵＳＢ１．１、ＵＳＢ２．０、ＯＴＧ等）では、４種類の転送タイプ（アイソクロナス、バルク、コントロール、インタラプト）が定義されている。ＵＳＢホストは、これらの各転送タイプのパケットの転送順序を制御、管理し、各転送タイプのパケットの転送を指示する。このために、ＵＳＢではホストがフレーム管理を行い、図６（Ａ）に示すように、フレーム（１ｍｓ、１２５μｓ）毎に、ＳＯＦ（Start Of Frame）パケットをペリフェラルに発行する。
【００９５】
なお、ＳＯＦは、フレームの先頭を示すためのトークンパケットであり、ＰＩＤとフレーム番号とＣＲＣを含む。このＳＯＦはホストが送信する。ホストは、１つのトランザクションが複数のフレームにまたがらないようにスケジューリング管理を行う。また、フレームは、ＳＯＦと次のＳＯＦとの間のインターバルである。また、バルク転送は、印刷データや画像データなどの大量のデータを、非周期的に転送する方式である。
【００９６】
周期（同期）転送であるアイソクロナス転送、インタラプト転送では、フレームタイミングやフレーム番号などの情報が重要な意味を持つ。従って、これらの情報を伝達するためにＳＯＦパケットが必要になる。
【００９７】
一方、非周期転送であるバルク転送、コントロール転送では、これらの情報は特に必要ではないと考えられるが、ＵＳＢでは、このような非周期転送の場合にも、ホストがＳＯＦパケットを転送することを要求している。
【００９８】
しかしながら、バルク転送などの非周期転送においてＳＯＦパケットを転送すると、このＳＯＦパケットの転送自体によりバス帯域を消費してしまう。更に、図６（Ｂ）に示すように、ＵＳＢでは、このＳＯＦパケットがあることで、フレーム終端に転送禁止期間（転送禁止領域）が生じ、バス帯域が更に狭まってしまう。
【００９９】
そしてＵＳＢは、プリンタの印刷データの転送、デジタルカメラの画像データの転送、ストレージ装置の記憶データの転送などに広く利用されており、これらのデータの転送には、バルク転送が用いられる。従って、このバルク転送において、本来は必要でないＳＯＦパケットによりバス帯域が狭まってしまうと、リソースの無駄な消費になってしまう。
【０１００】
そこで本実施形態では、バルク転送などの非周期転送において、ＳＯＦパケット（フレーム開始を指示するパケット）の転送を無効（cancel）にする手法を採用している。
【０１０１】
より具体的には、ＳＯＦ有りモード（広義には第１のモード）が設定された場合には、ＳＯＦパケット（ＳＯＦトークンパケット）をフレーム周期で転送しながらデータ転送を行う。一方、ＳＯＦ無しモード（広義には第２のモード）が設定され且つ非周期転送（バルク転送又はコントロール転送等）を行う場合には、ＳＯＦパケットの周期転送を無効にして、非同期データ（バルクデータ又はコントロールデータ等）を転送する。
【０１０２】
図７、図８、図９に、本実施形態の手法によるデータ転送の信号波形例を示す。
【０１０３】
例えば図７において、自動トランザクションの開始指示がファームウェア（処理部）により行われると、Ｃ１に示すように、PipeXTranGo（PipeXについてのファームウェアからの転送要求信号）がアクティブになる。これにより、そのPipeX（Ｘ＝０〜ｅ）についての、ホストコントローラ５０による自動トランザクション処理が開始する。
【０１０４】
ここで、図７では、EnNoSOFMode（ＳＯＦ無しモード指定、ＳＯＦ無しバルクのみ転送モード指定）が非アクティブ（Ｌレベル）になっており、ＳＯＦ有りモード（第１のモード）に設定されている。従って、この場合には、ホストコントローラ５０（広義には転送コントローラ。以下の説明でも同様）は、Ｃ２に示すようにＳＯＦパケットを生成して、ペリフェラルに転送する。
【０１０５】
次に、Ｃ３に示すようにPipeTranGo（ホストコントローラ５０内のＨＣシーケンス管理回路からの転送要求信号）がアクティブになり、Ｃ４に示すようにホストコントローラ５０がトランザクションを自動発生してパケットを転送する。このトランザクションは、トークンパケットと、オプショナルなデータパケットと、オプショナルなハンドシェークパケットにより構成される。そして、トランザクションが完了すると、Ｃ５に示すようにTranCmpACKがアクティブになる。次に、Ｃ６に示すようにPipeTranGoがアクティブになり、Ｃ７に示すように次のトランザクションが行われ、トランザクションが終了するとＣ８に示すようにTranCmpACKがアクティブになる。
【０１０６】
以上のようにしてホストコントローラ５０は、トランザクションを次々と自動発生して、そのトランザクションを構成するパケットを自動転送する。そして、残りフレーム時間が少なくなり、Ｃ９に示すように転送禁止期間になると、当該フレームでのトランザクションの発生を終了する。
【０１０７】
即ち、ＵＳＢでは、フレーム終端に転送禁止期間が規定されており、この期間においてはパケットの転送が禁止される。このため、ホストコントローラ５０は、この転送禁止期間ではトランザクションを発生しない。そして、Ｃ２に示す前回のＳＯＦの転送から１フレーム（１ｍｓ）のインターバルが経過した後に、Ｃ１０に示すように次のＳＯＦを転送する。これにより、次のフレームが開始し、ホストコントローラ５０は、Ｃ１１に示すようにこの次のフレームでのトランザクションを自動発生する。
【０１０８】
このように本実施形態では、ＳＯＦ有りモードの設定時には、Ｃ２、Ｃ１０に示すようにＳＯＦパケットをフレーム毎に周期的に発生してペリフェラルに転送する。これにより、アイソクロナス転送などの周期転送を適正に行うことが可能になる。
【０１０９】
一方、本実施形態では図８に示すように、EnNoSOFModeがアクティブ（Ｈレベル）になると、ＳＯＦ無しモード（第２のモード）に設定される。すると、ホストコントローラ５０は、Ｄ１、Ｄ２、Ｄ３に示すように、ＳＯＦパケットの周期転送を行わないようになる。そして、Ｄ４〜Ｄ１５に示すように、バルク転送のトランザクションを間断なく連続実行する。
【０１１０】
即ち図７のＳＯＦ有りモードでは、Ｃ９に示す転送禁止期間において、トランザクションは実行されない（パケットは転送されない）。
【０１１１】
これに対して図８のＳＯＦ無しモード（ＳＯＦ無しバルクのみ転送モード）では、Ｄ７に示すように、転送禁止期間においても、トランザクションを実行する。また、Ｄ２に示すフレーム開始タイミングでＳＯＦパケットを転送せずに、Ｄ８に示すようにＳＯＦ転送期間においてもトランザクションを実行する。
【０１１２】
このようにすれば、図７、図８を比較すれば明らかなように、バルク転送時（バルクのみの転送時）において、ＳＯＦパケットの転送期間とフレーム終端の転送禁止期間（禁止領域）を合わせた期間（帯域）を、バルク転送に割り当てることが可能になる。即ち、複数フレームにまたがったトランザクションを発生できる。これにより、バス帯域が広がり、転送効率の向上を図れる。
【０１１３】
なお、ＳＯＦ無しモードの設定時には、図５（Ａ）のパイプ領域の転送種別を、バルク転送（非周期転送）に設定しておくことが望ましい。即ち、ファームウェア等が、パイプ領域の転送種別を、アイソクロナス転送やインタラプト転送などの周期転送に設定しないようにする。これにより適正な周期転送を実現できる。
【０１１４】
６．転送データが無い場合のＳＯＦ発行
さて、アプリケーションの状況によっては、図８に示すような間断の無い連続的なバルク転送を実行できない場合があり、転送すべきデータが一定期間存在しない事態も生じる。
【０１１５】
このような場合に、ＳＯＦ無しモードが設定されていると、バス・アクティビティが無くなってしまい、ペリフェラル（デバイス）のステートがサスペンドなどに移行してしまうおそれがある。
【０１１６】
そこで本実施形態では、転送すべきバルク（非周期）データが無い場合には、ＳＯＦ無しモード（第２のモード）が設定された場合にも、ＳＯＦパケットをフレーム周期で転送するようにしている。
【０１１７】
即ち図９では、EnNoBulkModeがアクティブ（Ｈレベル）になっており、ＳＯＦ無しモードに設定されている。従って、Ｅ１、Ｅ２に示すようにＳＯＦパケットは発行されず、Ｅ３〜Ｅ６に示すようにバルク転送のトランザクションが連続実行されている。
【０１１８】
ところが図９のＥ７では、トランザクションを連続実行したことにより、転送すべきデータ（実行すべきトランザクション）が無くなっている。このような場合に本実施形態では、ＳＯＦ無しモードに設定されているのにもかかわらず、Ｅ８、Ｅ９、Ｅ１０に示すように、ホストコントローラ５０がＳＯＦパケットをペリフェラルに自動転送する。このＳＯＦパケットの転送により、バス・アクティビティが生じ、ペリフェラルがサスペンドに移行してしまう事態を防止でき、適正なデータ転送を実現できる。
【０１１９】
なお、転送すべきデータがあるか否かの検出は、例えば、自動トランザクションの開始指示信号により判断したり、パケットバッファ１００の状態（フル、エンプティ信号）を監視することなどにより判断できる。
【０１２０】
より具体的には例えば図５（Ａ）において、パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅの自動転送の開始指示信号（PipeXTranGo:X=0〜ｅ)が、全て非アクティブの時に、転送すべきデータが無いと判断する。そして、このように判断した場合には、ＳＯＦ無しモードに設定されていてもＳＯＦパケットを自動転送する。このようにすれば、転送すべきデータが有るか無いかを、少ない負荷の処理で簡素に判断できる。
【０１２１】
７．回路例
図１０に、ＳＯＦパケットの周期転送を無効にする回路の具体例を示す。この図１０の回路は、図４のホストコントローラ５０に含まれる。
【０１２２】
ＳＯＦ転送開始トリガ生成回路２００は、フレーム周期毎にSOFTranGo（ＳＯＦ転送開始トリガ）をアクティブ（論理値「１」＝Ｈレベル）にし、ＳＯＦパケットの転送が完了した場合にSOFTranGoを非アクティブ（論理値「０」＝Ｌレベル）にする回路である。
【０１２３】
具体的には、ＳＯＦ転送開始トリガ生成回路２００は、図４のＯＴＧコントローラ２０（ステートコントローラ）からのRemainCount（フレーム残り時間カウント値）とＣＬＫ（クロック信号）を受ける。また、論理積回路ＡＮＤ１を介してSOFTranComp（ＳＯＦ転送完了信号）を受ける。そして、RemainCountに基づいてフレーム周期毎にSOFTranGoをアクティブ（「１」）にする。そして、SOFTranCompがアクティブになり、論理積回路ＡＮＤ１の出力であるＣＬＲ（クリア信号）がアクティブ（「０」）になると、SOFTranGoを非アクティブ（「０」）にする。これにより、フレーム周期毎にアクティブになるパルス状のトリガ信号SOFTranGoを生成できる。
【０１２４】
ＳＯＦ無効信号生成回路２１０（ＳＯＦ無しモード条件判断回路）は、Pipe0TranGo〜PipeeTranGo（パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅの転送開始指示信号）と、HCState[1],[0]（ＯＴＧコントローラ２０からのステート情報信号）と、EnNoSOFMode（ＳＯＦ無しモード指示信号、ＳＯＦ無しバルク転送のみモード指示信号。広義には第１又は第２のモードを指示する信号）を受ける。そして、SOFTranGoを無効にする信号（SOFTranGoが常に非アクティブになるように設定する信号）であるSOFCancelを生成する。このＳＯＦ無効信号生成回路２１０は、論理和回路ＯＲ１、ＯＲ２、論理積回路ＡＮＤ２、ＡＮＤ３、ＡＮＤ４、インバータ回路ＩＮＶ２、ＩＮＶ３を含む。
【０１２５】
ここで、ＯＲ１にはPipe0TranGo〜PipeeTranGoが入力される。このPipeXTran（X=0〜e）は、図７のＣ１、Ｃ１２に示すように、ファームウェア（処理部）が各パイプ領域の自動転送の開始を指示した時にアクティブ（「１」）になり、そのパイプ領域についてのホストコントローラ５０による自動転送が完了した時に非アクティブ（「０」）になる信号である。
【０１２６】
ＡＮＤ２にはHCState[1],[0]が入力される。このHCState[1],[0]は、図１１（Ａ）に示すように、図４のＯＴＧコントローラ２０により制御されるデータ転送制御装置のステート（Ａデバイス、ＢデバイスのＯＴＧステート）が、サスペンド、リセット、レジューム、ホスト動作（Host Operation）の時に、各々、「００」、「０１」、「１０」、「１１」になる信号である。
【０１２７】
ＩＮＶ２にはEnNoSOFModeが入力される。このEnNoSOFModeは、図７のＣ１３に示すようにＳＯＦ有りモード（第１のモード）の時に非アクティブ（「０」）になり、図８のＤ１６に示すようにＳＯＦ無しモード（第２のモード）の時にアクティブ（「１」）になる信号である。
【０１２８】
ＡＮＤ３には、ＯＲ１、ＡＮＤ２、ＩＮＶ２の出力Ｑ１、Ｑ２、Ｑ３が入力され、ＩＮＶ３にはＱ１が入力される。ＡＮＤ４には、ＩＮＶ３の出力Ｑ４とＡＮＤ２の出力Ｑ２が入力される。ＯＲ２には、ＡＮＤ３、ＡＮＤ４の出力Ｑ５、Ｑ６が入力され、SOFCancelを出力する。
【０１２９】
図１１（Ｂ）に、ＳＯＦ無効信号生成回路２１０の真理値表を示す。
【０１３０】
図１１（Ｂ）のＦ１に示すように、HCState[1],[0]が、「００」、「０１」、又は「１０」の場合には、SOFCancelが「０」になる。即ち、データ転送制御装置（ホストコントローラ５０）のステートがサスペンド、リセット、又はレジュームの場合には、SOFCancelが「０」になり、SOFTranGoが常に「０」になることで、ＳＯＦパケットの周期転送が無効になる。
【０１３１】
図１１（Ｂ）のＦ２に示すように、HCState[1],[0]が「１１」で、EnNoSOFModeが「０」の場合には、SOFCancelが「１」になる。即ち、ステートがホスト動作（Host Operation）であり、ＳＯＦ有りモード（EnNoSOFMode＝「０」）に設定されている場合には、図７のＣ２、Ｃ１０に示すようにＳＯＦパケットがフレーム周期で転送されながら、データ転送が行われる。
【０１３２】
図１１（Ｂ）のＦ３に示すように、HCState[1],[0]が「１１」で、EnNoSOFModeが「１」で、且つ、Pipe0TranGo〜PipeeTranGoの少なくとも１つが「１」の場合には、SOFCancelが「０」になる。即ち、ステートがホスト動作であり、ＳＯＦ無しモード（EnNoSOFMode＝「１」）に設定され、且つ、転送すべきデータが有る場合には、図８のＤ１、Ｄ２、Ｄ３に示すようにＳＯＦパケットの周期転送が無効になる。そして図８のＤ４〜Ｄ１５に示すように、バルクデータのトランザクションがフレーム間にまたがって間断無く連続実行される。即ちホストコントローラ５０は、パイプ領域とそのパイプ領域に対応するバルク（非周期）転送のエンドポイントの間で、ＳＯＦパケットの周期転送を無効にしながら、バルクデータ（パケット）を自動転送する。
【０１３３】
図１１（Ｂ）のＦ４に示すように、HCState[1],[0]が「１１」で、EnNoSOFModeが「１」で、且つ、Pipe0TranGo〜PipeeTranGoの全てが「０」の場合には、SOFCancelが「１」になる。即ち、ステートがホスト動作であり、ＳＯＦ無しモード（EnNoSOFMode＝「１」）に設定されている場合にも、転送すべきデータが無い場合（Pipe0TranGo〜PipeeTranGo＝「０」）には、図９のＥ８、Ｅ９、Ｅ１０に示すように、ＳＯＦパケットが周期転送される。即ちホストコントローラ５０は、パイプ領域の自動転送開始指示信号Pipe0TranGo〜PipeeTranGoが全て非アクティブ（「０」）の場合には、転送すべきデータが無いと判断する。そして、この場合には、ＳＯＦ無しモードが設定されていても、ＳＯＦパケットをフレーム周期で自動転送する。これにより、ペリフェラルが誤ってサスペンドステートに移行してしまう事態を防止できる。
【０１３４】
８．転送条件レジスタ（共用レジスタ）
本実施形態では図１２に示すように、ホスト動作時には、パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅとエンドポイントとの間で行われるデータ転送の転送条件情報（転送方向、転送種別、マックスパケットサイズ又はページ数等）が、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定される。即ち、ＰＩＰＥ０、ＰＩＰＥａ、ＰＩＰＥｂ、ＰＩＰＥｃ、ＰＩＰＥｄ、ＰＩＰＥｅの転送条件情報は、各々、ＴＲＥＧ０、ＴＲＥＧａ、ＴＲＥＧｂ、ＴＲＥＧｃ、ＴＲＥＧｄ、ＴＲＥＧｅに設定（記憶）される。この設定は、例えばファームウェア（ＣＰＵ）により行われる。
【０１３５】
そしてホストコントローラ５０（広義には転送コントローラ）は、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定された転送条件情報に基づいて、エンドポイントに対するトランザクションを発生する。そして、パイプ領域とそれに対応するエンドポイントとの間で、データ（パケット）を自動転送する。
【０１３６】
このように本実施形態では、各パイプ領域（バッファ領域）に対応して各転送条件レジスタが設けられ、この各転送条件レジスタに設定された転送条件情報に基づいて、各パイプ領域のパイプ転送（所与のデータ単位の転送）がホストコントローラ５０により自動的に行われる。従って、ファームウェア（ドライバ、ソフトウェア）は、転送条件レジスタに転送条件情報を設定した後は、データ転送が完了するまで、データ転送制御に関わらなくて済むようになる。そして、所与のデータ単位のパイプ転送が完了すると割り込みが発生し、転送の完了がファームウェアに伝えられる。これにより、ファームウェア（ＣＰＵ）の処理負荷を格段に低減できる。
【０１３７】
なお、本実施形態では図１３に示すようにペリフェラル動作時には、エンドポイント領域ＥＰ０〜ＥＰｅとホストとの間で行われるデータ転送の転送条件情報（転送方向、転送種別、マックスパケットサイズ又はページ数等）が、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定される。そしてペリフェラルコントローラ６０（広義には転送コントローラ）は、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定された転送条件情報に基づいて、エンドポイント領域とホストとの間でのデータ転送を行う。
【０１３８】
このように本実施形態では、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅが、ホスト動作時とペリフェラル動作時とで共用（兼用）される。これにより、レジスタ部７０のリソースを節約でき、データ転送制御装置を小規模化できる。
【０１３９】
図１４に、レジスタ部７０のレジスタ構成例を示す。なお、レジスタ部７０のレジスタの一部を、各ブロック（ＯＴＧＣ、ＨＣ、ＰＣ、Ｘｃｖｒ等）内に含ませてもよい。
【０１４０】
図１４に示すように、レジスタ部７０の転送条件レジスタ（ＴＲＥＧ０〜ＴＲＥＧｅの各々）は、ホスト動作時（ＨＣ、ＰＩＰＥ）とペリフェラル動作時（ＰＣ、ＥＰ）で共用されるＨＣ／ＰＣ共用レジスタ（共用転送条件レジスタ）を含む。また、ホスト動作時にのみ使用されるＨＣ（ＰＩＰＥ）用レジスタ（ホスト用転送条件レジスタ）を含む。また、ペリフェラル動作時にのみ使用されるＰＣ（ＥＰ）用レジスタ（ペリフェラル用転送条件レジスタ）を含む。また、パケットバッファ（ＦＩＦＯ）のアクセス制御などを行うためのレジスタであり、ホスト動作時とペリフェラル動作時で共用されるアクセス制御レジスタを含む。
【０１４１】
例えば、デュアルロール・デバイスのホスト動作時に、ホストコントローラ５０（ＨＣ）は、ＨＣ／ＰＣ共用レジスタとＨＣ用レジスタに設定される転送条件情報に基づいて、データ（パケット）を転送する。
【０１４２】
一方、ペリフェラル動作時には、ペリフェラルコントローラ６０（ＰＣ）は、ＨＣ／ＰＣ共用レジスタとＰＣ用レジスタに設定される転送条件情報に基づいて、データ（パケット）を転送する。
【０１４３】
また、ホスト動作時、ペリフェラル動作時の両方において、バッファコントローラ８０は、共用アクセス制御レジスタに基づいて、パケットバッファ１００へのアクセス制御（リード／ライト・アドレスの発生、データのリード／ライト、アクセスの調停等）を行うことになる。
【０１４４】
図１４のＨＣ／ＰＣ共用レジスタには、データの転送方向（ＩＮ、ＯＵＴ又はＳＥＴＵＰ等）、転送種別（アイソクロナス、バルク、インタラプト、コントロールなどのトランザクションの種別）、エンドポイント番号（各ＵＳＢデバイスのエンドポイントに関連づけられる番号）、マックスパケットサイズ（エンドポイントが送信又は受信可能なパケットの最大ペイロードサイズ。ページサイズ）が設定される。また、バッファ領域（パイプ領域、エンドポイント領域）のページ数（バッファ領域の面数）が設定される。また、ＤＭＡ接続の有無（ＤＭＡハンドラ回路１１２によるＤＭＡ転送の使用の有無）を指示する情報が設定される。
【０１４５】
ＨＣ（ＰＩＰＥ）用レジスタには、インタラプト転送のトークン発行周期（インタラプト・トランザクションを起動する周期、インターバル）が設定される。また、トランザクションの連続実行回数（パイプ領域間の転送比率を設定する情報。各パイプ領域のトランザクションの連続実行回数）が設定される。また、ファンクションアドレス（エンドポイントを有するファンクションのＵＳＢアドレス）、転送データのトータルサイズ（各パイプ領域を介して転送されるデータのトータルサイズ。ＩＲＰなどのデータ単位）が設定される。また、自動トランザクションの開始指示（ホストコントローラに対する自動トランザクション処理の開始指示）が設定される。また、自動コントロール転送モードの指示（コントロール転送のセットアップステージ、データステージ、ステータスステージのトランザクションを自動発生するモードの指示）が設定される。
【０１４６】
ＰＣ（ＥＰ）用レジスタには、エンドポイントイネーブル（エンドポイントのイネーブルやディスエーブルの指示）、ハンドシェーク指定（各トランザクションで行われるハンドシェークの指定）が設定される。
【０１４７】
パケットバッファ（ＦＩＦＯ）用の共用アクセス制御レジスタには、バッファ・Ｉ／Ｏポート（ＣＰＵによりＰＩＯ転送を行う場合のＩ／Ｏポート）が設定される。また、バッファ・フル／エンプティ（各バッファ領域のフル、エンプティの通知）、バッファ・残りデータサイズ（各バッファ領域の残りデータサイズ）が設定される。
【０１４８】
レジスタ部７０は、インタラプト系レジスタ、ブロック系レジスタ、ＤＭＡ制御レジスタなども含む。
【０１４９】
インタラプト系レジスタは、割り込みのステータス（要因）をＣＰＵに対して示すためのインタラプト・ステータスレジスタ、割り込みのイネーブル、ディスエーブル（非マスク、マスク）を設定するインタラプト・イネーブルレジスタを含む。なお、割り込みには、ＯＴＧコントローラ２０系、ホストコントローラ５０系、ペリフェラルコントローラ６０系の割り込みがある。
【０１５０】
ブロック系レジスタは、ブロック間で共用されるブロック間共用レジスタや、各ブロック（Ｘｃｖｒ、ＯＴＧＣ、ＨＣ、ＰＣ）内で使用されるブロック用レジスタを含む。
【０１５１】
ブロック間共用レジスタには、各ブロックのリセットを指示するレジスタなどがある。ブロック用レジスタには、トランシーバ１０（Ｘｃｖｒ）を制御するためのレジスタや、ＯＴＧコントローラ２０（ＯＴＧＣ）のステートコマンドレジスタや、ホストコントローラ５０（ＨＣ）のステートコマンドレジスタや、フレーム番号を設定するレジスタなどがある。
【０１５２】
以上のように本実施形態では、ホスト動作時とペリフェラル動作時で共用されるレジスタ（ＨＣ／ＰＣ共用レジスタ、共用アクセス制御レジスタ）をレジスタ部７０に設けている。これにより、ホスト動作時用のレジスタとペリフェラル動作時用のレジスタを全く別個に設ける場合に比べて、レジスタ部７０を小規模化できる。また、ＣＰＵ上で動作するファームウェア（ドライバ）から見た共用レジスタのアクセスアドレスを、ホスト動作時とペリフェラル動作時とで同一にできる。従って、ファームウェアは、これらの共用レジスタを同一アドレスで管理できるようになり、ファームウェア処理を簡素化できる。
【０１５３】
また、ＨＣ用レジスタや、ＰＣ用レジスタを設けることで、ホスト動作時（ＰＩＰＥ）の転送やペリフェラル動作時（ＥＰ）の転送に特有の転送条件を設定できる。例えば、トークン発行周期を設定することで、ホスト動作時にインタラプト転送のトークンを所望の周期で発行することが可能になる。また、連続実行回数を設定することで、ホスト動作時にパイプ領域間の転送比率を任意に設定できる。また、トータルサイズを設定することで、ホスト動作時にパイプ領域を介して自動転送されるデータのサイズを任意に設定できる。またファームウェアは、ホスト動作時に、自動トランザクションの開始を指示したり、自動コントロール転送モードのオン／オフを指示できるようになる。
【０１５４】
９．自動トランザクション
図１５に、ホストコントローラ５０の自動トランザクション（ＩＮ、ＯＵＴ）処理時におけるファームウェア処理のフローチャート例を示す。
【０１５５】
まず、ファームウェア（処理部、ドライバ）は、図１４等で説明した転送条件レジスタに転送条件情報（パイプ情報）を設定する（ステップＳ１）。より具体的には、転送データのトータルサイズ、マックスパケットサイズ（MaxPktSize）、ページ数（BufferPage）、転送方向（ＩＮ、ＯＵＴ又はＳＥＴＵＰ）、転送種別（アイソクロナス、バルク、コントロール、インタラプト）、エンドポイント番号、パイプ領域のトランザクションの連続実行回数（転送比率）、インタラプト転送のトークン発行周期などを、転送条件レジスタに設定する。
【０１５６】
次に、外部のシステムメモリとパケットバッファ１００の間に転送経路を設定する（ステップＳ２）。即ち図４のＤＭＡハンドラ回路１１２を介したＤＭＡ転送経路を設定する。
【０１５７】
次に、ファームウェアは、ＤＭＡ転送の開始指示を行う（ステップＳ３）。即ち、図１４のＤＭＡ制御レジスタのＤＭＡ転送開始指示ビットをアクティブにする。なお、ＣＰＵによる転送では、図１４のバッファ・Ｉ／Ｏポートにアクセスすることで、パケットバッファ１００にアクセスすることが可能になる。
【０１５８】
次に、ファームウェアは、自動トランザクションの開始指示を行う（ステップＳ４）。即ち、図１４のＨＣ用レジスタ（パイプレジスタ）の自動トランザクション開始指示ビットをアクティブにする。これにより、ホストコントローラ５０による、自動トランザクション処理、パケット処理（パケットの生成、分解）、スケジューリング処理が行われる。即ち、ホストコントローラ５０は、トータルサイズで指定されるデータを、マックスパケットサイズのペイロードのパケットを用いて、転送方向で指定される方向（ＩＮ、ＯＵＴ）で、自動転送する。
【０１５９】
なお、ステップＳ３、Ｓ４の処理の順序は問わず、自動トランザクション開始指示の後にＤＭＡ転送の開始指示を行ってもよい。
【０１６０】
次に、ファームウェアは、パイプ転送の完了を知らせる割り込みが発生するのを待つ（ステップＳ５）。そして、割り込みが発生すると、ファームウェアは、図１４のインタラプト系レジスタの割り込みステータス（要因）を調べる。そして、処理が正常完了又はエラー終了する（ステップＳ６）。
【０１６１】
このように本実施形態によれば、ファームウェアは、各パイプ領域毎に転送条件情報を設定し（ステップＳ１）、ＤＭＡ転送開始の指示（ステップＳ３）と自動トランザクション開始の指示（ステップＳ４）を行うだけで、その後のデータ転送処理はホストコントローラ５０のハードウェア回路により自動的に行われるようになる。従って、図３（Ａ）、（Ｂ）で説明したＯＨＣＩ準拠の手法に比べて、ファームウェアの処理負荷が軽減され、低性能のＣＰＵが組み込まれる携帯機器に最適なデータ転送制御装置を提供できる。
【０１６２】
１０．各ブロックの詳細な構成例
次に各ブロックの詳細な構成例について説明する。
【０１６３】
１０．１  ＯＴＧコントローラ
図１６に、ＯＴＧコントローラ２０の構成例を示す。
【０１６４】
ＯＴＧコントローラ２０は、ＯＴＧレジスタ部２２を含む。このＯＴＧレジスタ部２２は、ＯＴＧコントローラ２０のモニタレジスタや制御レジスタを含む。またファームウェア（ＣＰＵ）により書き込まれるＯＴＧステートコマンドをデコードする回路を含む。
【０１６５】
またＯＴＧコントローラ２０はＯＴＧ制御回路２３を含む。そして、このＯＴＧ制御回路２３は、ＯＴＧステートの管理を行うＯＴＧ管理回路２４、ＩＤピンの電圧レベルを検出するＩＤ検出回路２５、ＶＢＵＳの電圧レベルを検出するＶＢＵＳ検出回路２６、ＤＰ及びＤＭのラインステートを検出するラインステート検出回路２７を含む。
【０１６６】
またＯＴＧコントローラ２０は、ＯＴＧステートの遷移判断条件の１つである時間を計測するタイマ２８を含む。
【０１６７】
ＯＴＧステートを遷移させるために検出すべき情報は、ＩＤ、ＶＢＵＳの電圧レベル、ＤＰ／ＤＭのラインステートである。本実施形態のＯＴＧコントローラ２０は、これらの情報を検出し、モニタレジスタを介してファームウェア（ＣＰＵ）に伝える。
【０１６８】
ファームウェアは、これらの検出情報に基づいて自身のステートを遷移させると共に、次に遷移すべきステートを、ＯＴＧステートコマンドを用いてＯＴＧコントローラ２０に伝える。
【０１６９】
ＯＴＧコントローラ２０は、ＯＴＧステートコマンドをデコードし、そのデコード結果に基づいて、ＶＢＵＳのドライブ制御、プルアップ／プルダウン抵抗の接続制御等を行い、図２（Ａ）、（Ｂ）で説明したＳＲＰやＨＮＰを実現する。
【０１７０】
このように本実施形態では、ステート毎のＯＴＧ制御はＯＴＧコントローラ２０が担当し、ファームウェアはステートの遷移管理に専念できる。この結果、全てのステート制御をファームウェアで実現する場合に比べて、ファームウェア（ＣＰＵ）の処理負荷を軽減できると共に、効率的なファームウェア開発が可能になる。
【０１７１】
なお、ＯＴＧのステート遷移の判断を、ファームウェアが行わずに、ハードウェア回路が行うようにしてもよい。或いは、ＯＴＧコントローラ２０のほとんど全ての処理（例えばＶＢＵＳ制御、プルアップ／プルダウン抵抗制御、ＩＤ検出、ＶＢＵＳ検出、ラインステート検出以外の処理）をファームウェア（ソフトウェア）により実現してもよい。
【０１７２】
１０．２  ホストコントローラ、ペリフェラルコントローラ
図１７（Ａ）に、ホストコントローラ５０の構成例を示す。
【０１７３】
ホストコントローラ５０はＨＣシーケンス管理回路５２を含む。このＨＣシーケンス管理回路５２は、パイプ転送（パイプ領域を用いたデータ転送）の調停、時間管理、パイプ転送のスケジューリング、再送管理などを行う。
【０１７４】
より具体的にはＨＣシーケンス管理回路５２は、フレーム番号のカウントや、ＳＯＦ（Start-Of-Frame）パケットの送信指示を行う。また、アイソクロナス転送を各フレームの先頭で優先的に実行するための処理を行ったり、インタラプト転送をアイソクロナス転送の次に優先的に取り扱うための処理を行う。また、パイプ転送の順序に従って各パイプ転送を指示する処理を行う。また、トランザクションの連続実行回数を管理したり、残りフレーム時間の確認処理を行う。また、ペリフェラルから返ってきたハンドシェークパケット（ＡＣＫ、ＮＡＫ）に対する処理を行う。また、トランザクション実行時のエラー処理を行う。
【０１７５】
ホストコントローラ５０はターゲットパイプ管理回路５４を含む。このターゲットパイプ管理回路５４は、レジスタ部７０の転送条件レジスタに設定された転送条件情報のハンドリング処理などを行う。
【０１７６】
より具体的にはターゲットパイプ管理回路５４は、転送条件情報の選択処理や、割り込み信号の生成処理を行う。また自動トランザクションの開始が指示された場合に、そのパイプ領域の転送データのトータルサイズをロードする。そして、残り転送データサイズのカウント（デクリメント）処理を行う。また、バッファコントローラ８０へのデータの送受信の際にバッファ（ＦＩＦＯ）領域の状態を確認する処理を行う。また、トランザクション管理回路５６への転送指示を行う。また、予期しないショートパケットの受信の判断処理や、マックスパケットサイズ以上のパケットの受信の判断処理を行う。また、零長パケットを自動転送するモードが設定されている場合には、最後の零長パケットの送信をトランザクション管理回路５６に指示する。また、自動コントロール転送モードでのシーケンス管理を行う。
【０１７７】
ホストコントローラ５０はトランザクション管理回路５６を含む。このトランザクション管理回路５６は、転送パケットの種類や転送順序の管理（トランザクションのシーケンス管理）を行う。また、タイムアウトの監視処理を行う。また、トランザクション終了の通知処理を行う。
【０１７８】
ホストコントローラ５０はパケットハンドラ回路５８を含む。このパケットハンドラ回路５８は、パケットの生成、分解処理を行う。また、ＰＩＤのチェックやＣＲＣのデコード、エンコードを行う。また、バッファ領域のパケットのペイロードのリード、ライト処理や、ＳＯＦパケットの送信処理を行う。また、送受信データのカウント処理を行う。
【０１７９】
図１７（Ｂ）にペリフェラルコントローラ６０の構成例を示す。
【０１８０】
ペリフェラルコントローラ６０は、トランザクション管理回路６２、パケットハンドラ回路６４を含む。これらのトランザクション管理回路６２、パケットハンドラ回路６４は、ホストコントローラ５０のトランザクション管理回路５６、パケットハンドラ回路５８とほぼ同様の処理を行う。
【０１８１】
１０．３  バッファコントローラ
図１８にバッファコントローラ８０の構成例を示す。
【０１８２】
バッファコントローラ８０は領域確保（allocation）回路８２を含む。この領域確保回路８２は、パケットバッファ１００に、バッファ領域（ホスト動作時にパイプ領域に設定され、ペリフェラル動作時にエンドポイント領域に設定される領域）を確保する回路である。
【０１８３】
領域確保回路８２は領域計算回路８３を含む。この領域計算回路８３は、マックスパケットサイズ（広義にはページサイズ）やページ数に基づいて、バッファ領域の領域サイズ、スタートアドレス、エンドアドレスなどを計算する回路である。
【０１８４】
例えば図１９（Ａ）に示すバッファ領域ＰＩＰＥ０／ＥＰ０、ＰＩＰＥａ／ＥＰａ、ＰＩＰＥｂ／ＥＰｂ、ＰＩＰＥｃ／ＥＰｃでは、マックスパケットサイズ（MaxPktSize）が、各々、３２、６４、６４、６４バイトに設定され、ページ数（BufferPage）が、各々、１、１、３、２ページに設定されている。領域計算回路８３は、これらのマックスパケットサイズ、ページ数などに基づいて、バッファ領域ＰＩＰＥ０／ＥＰ０〜ＰＩＰＥｃ／ＥＰｃの領域サイズ、スタートアドレス、エンドアドレスを計算する。例えば図１９（Ａ）において、ＰＩＰＥ０／ＥＰ０、ＰＩＰＥａ／ＥＰａ、ＰＩＰＥｂ／ＥＰｂ、ＰＩＰＥｃ／ＥＰｃの領域サイズは、各々、３２（＝３２×１）、６４（＝６４×１）、１９２（＝６４×３）、１２８（＝６４×２）バイトと計算されることになる。
【０１８５】
ポインタ割り当て回路８４は、各バッファ領域の書き込みポインタＷＰ（ＷＰ０、ＷＰａ、ＷＰｂ、ＷＰｃ）、読み出しポインタＲＰ（ＲＰ０、ＲＰａ、ＲＰｂ、ＲＰｃ）を、ＤＭＡ用ポインタ、ＣＰＵ用ポインタ、ＵＳＢ用ポインタに割り当てる回路である。
【０１８６】
例えば図１９（Ｂ）に示すように、データ送信時（ＤＭＡ又はＣＰＵからパケットバッファ１００を介してＵＳＢ側にデータが転送される時）であり、且つ、ＤＭＡ転送使用時には、そのバッファ領域の書き込みポインタＷＰはＤＭＡ（ＤＭＡアクセス）用のポインタに割り当てられ、読み出しポインタＲＰはＵＳＢ（ＵＳＢアクセス）用のポインタに割り当てられる。また、データ送信時であり且つＣＰＵ（ＰＩＯ）転送使用時には、そのバッファ領域の書き込みポインタＷＰはＣＰＵ（ＣＰＵアクセス）用のポインタに割り当てられ、読み出しポインタＲＰはＵＳＢ用のポインタに割り当てられる。
【０１８７】
一方、図１９（Ｃ）に示すように、データ受信時（ＵＳＢからパケットバッファ１００を介してＤＭＡ又はＣＰＵ側にデータが転送される時）であり、且つ、ＤＭＡ転送使用時には、そのバッファ領域の書き込みポインタＷＰはＵＳＢ用ポインタに割り当てられ、読み出しポインタＲＰはＤＭＡ用ポインタに割り当てられる。また、データ受信時であり且つＣＰＵ転送使用時には、そのバッファ領域の書き込みポインタＷＰはＵＳＢ用ポインタに割り当てられ、読み出しポインタＲＰはＣＰＵ用ポインタに割り当てられる。
【０１８８】
なお、各バッファ領域の書き込みポインタＷＰ、読み出しポインタＲＰのポインタ情報（位置情報）は、レジスタ部７０の各転送条件レジスタ（ＰＩＰＥ／ＥＰレジスタ）に保持される。
【０１８９】
ポインタ管理回路８６は、ポインタの更新を行いながら、パケットバッファ１００にアクセスするための実アドレスを生成する回路である。
【０１９０】
ポインタ管理回路８６は、ＣＰＵ用アドレス生成回路８７、ＤＭＡ用アドレス生成回路８８、ＵＳＢ用アドレス生成回路８９を含む。これらの生成回路８７、８８、８９は、各々、ポインタ割り当て回路８４により割り当てられたＣＰＵ用ポインタ、ＤＭＡ用ポインタ、ＵＳＢ用ポインタに基づいて、ＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスを生成する。また、ＣＰＵ（ＣＰＵインターフェース回路）、ＤＭＡ（ＤＭＡハンドラ回路）からのアクセス毎に、或いはＵＳＢ（ＨＣ又はＰＣ）のトランザクション終了（ＡＣＫ、ＮＡＫなどのハンドシェーク送受信）毎に、ポインタを更新する処理を行う。なお、更新後のポインタの情報は、領域確保回路８２を介してレジスタ部７０の各転送条件レジスタに書き戻される。
【０１９１】
バッファ管理回路９０は、パケットバッファ１００へのアクセスを管理する回路である。
【０１９２】
バッファ管理回路９０はバッファインターフェース回路９２を含む。このバッファインターフェース回路９２は、ポインタ管理回路８６からのＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスなどを受け、パケットバッファ１００へのデータの入出力や、アドレス、出力イネーブル、ライトイネーブル、リードイネーブルなどの出力を行う。
【０１９３】
バッファ管理回路９０は調停回路９３を含む。この調停回路９３は、ＣＰＵ（ＣＰＵインターフェース回路）、ＤＭＡ（ＤＭＡハンドラ回路）、ＵＳＢ（ホストコントローラ又はペリフェラルコントローラ）からのアクセスを調停する回路である。この調停結果に基づいて、ＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスのいずれかが、パケットバッファ１００のアクセス・アドレスとして出力され、ＣＰＵ、ＤＭＡ又はＵＳＢとパケットバッファ１００との間のデータ転送経路が設定される。
【０１９４】
ＨＣ／ＰＣセレクタ９４は、バッファ管理回路９０（バッファコントローラ８０）とホストコントローラ５０（ＨＣ）又はペリフェラルコントローラ６０（ＰＣ）との間の接続の切り替え制御を行う。例えばホスト動作時には、ホストコントローラ５０とバッファ管理回路９０を接続し、ペリフェラル動作時には、ペリフェラルコントローラ６０とバッファ管理回路９０を接続する。なお、この接続の切り替え制御は、ＯＴＧコントローラ２０（ＯＴＧＣ）からのＨＣ／ＰＣイネーブル信号に基づいて行う。
【０１９５】
１１．電子機器
次に、本実施形態のデータ転送制御装置を含む電子機器の例について説明する。
【０１９６】
例えば図２０（Ａ）に電子機器の１つであるプリンタの内部ブロック図を示し、図２１（Ａ）にその外観図を示す。ＣＰＵ５１０（処理部）はシステム全体の制御などを行う。操作部５１１はプリンタをユーザが操作するためのものである。ＲＯＭ５１６には、制御プログラム、フォントなどが格納され、ＲＡＭ５１７（システムメモリ）はＣＰＵ５１０のワーク領域として機能する。ＤＭＡＣ５１８は、ＣＰＵ５１０を介さずにデータ転送を行うためのＤＭＡコントローラである。表示パネル５１９はプリンタの動作状態をユーザに知らせるためのものである。
【０１９７】
ＵＳＢを介してパーソナルコンピュータ、デジタルカメラ、デジタルビデオカメラなどの他の機器から送られてきたシリアルの印刷データ（印字データ、画像データ）は、データ転送制御装置５００によりパラレルの印刷データに変換される。そして、変換後のパラレル印刷データは、ＣＰＵ５１０又はＤＭＡＣ５１８により、印刷処理部（プリンタエンジン）５１２に送られる。そして、印刷処理部５１２においてパラレル印刷データに対して所与の処理が施され、プリントヘッダなどからなる印刷部（データの出力処理を行う装置）５１４により紙に印刷されて出力される。
【０１９８】
図２０（Ｂ）に電子機器の１つであるデジタルカメラの内部ブロック図を示し、図２１（Ｂ）にその外観図を示す。ＣＰＵ５２０はシステム全体の制御などを行う。操作部５２１（シャッターボタン、操作ボタン等）はデジタルカメラをユーザが操作するためのものである。ＲＯＭ５２６には制御プログラムなどが格納され、ＲＡＭ５２７はＣＰＵ５２０のワーク領域として機能する。ＤＭＡＣ５２８はＤＭＡコントローラである。
【０１９９】
ＣＣＤ、レンズなどからなる撮像部（データの取り込み処理を行う装置）５２２により画像が撮像され、撮像された画像のデータは画像処理部５２４により処理される。そして、処理後の画像データは、ＣＰＵ５２０又はＤＭＡＣ５２８によりデータ転送制御装置５００に送られる。データ転送制御装置５００は、このパラレルの画像データをシリアルデータに変換し、ＵＳＢを介してプリンタ、ストレージ装置、パーソナルコンピュータなどの他の機器に送信する。
【０２００】
図２０（Ｃ）に電子機器の１つであるＣＤ−ＲＷドライブ（ストレージ装置）の内部ブロック図を示し、図２１（Ｃ）にその外観図を示す。ＣＰＵ５３０はシステム全体の制御などを行う。操作部５３１はＣＤ−ＲＷをユーザが操作するためのものである。ＲＯＭ５３６には制御プログラムなどが格納され、ＲＡＭ５３７はＣＰＵ５３０のワーク領域として機能する。ＤＭＡＣ５３８はＤＭＡコントローラである。
【０２０１】
レーザ、モータ、光学系などからなる読み取り＆書き込み部（データの取り込み処理を行う装置又はデータの記憶処理を行うための装置）５３３によりＣＤ−ＲＷ５３２から読み取られたデータは、信号処理部５３４に入力され、エラー訂正処理などの所与の信号処理が施される。そして、信号処理が施されたデータが、ＣＰＵ５３０又はＤＭＡＣ５３８によりデータ転送制御装置５００に送られる。データ転送制御装置５００は、このパラレルのデータをシリアルデータに変換し、ＵＳＢを介して他の機器に送信する。
【０２０２】
一方、ＵＳＢを介して他の機器から送られてきたシリアルのデータは、データ転送制御装置５００によりパラレルのデータに変換される。そして、このパラレルデータは、ＣＰＵ５３０又はＤＭＡＣ５３８により信号処理部５３４に送られる。そして、信号処理部５３４においてこのパラレルデータに対して所与の信号処理が施され、読み取り＆書き込み部５３３によりＣＤ−ＲＷ５３２に記憶される。
【０２０３】
なお、図２０（Ａ）、（Ｂ）、（Ｃ）において、ＣＰＵ５１０、５２０、５３０の他に、データ転送制御装置５００でのデータ転送制御のためのＣＰＵを別に設けるようにしてもよい。
【０２０４】
本実施形態のデータ転送制御装置を電子機器に用いれば、ＯＴＧ機能を有する電子機器を実現できる。即ち、電子機器にホストとしての役割を持たせたり、デバイスとしての役割を持たせることが可能になり、これまでに存在しなかったアプリケーションを創出できる。
【０２０５】
また本実施形態のデータ転送制御装置を電子機器に用いれば、電子機器に組み込まれるＣＰＵ（処理部）の処理負荷が軽減され、安価なＣＰＵを用いることが可能になる。また、ＣＰＵが、データ転送制御処理以外の他の処理を余裕を持って行うことが可能になり、電子機器の性能向上や低コスト化を図れる。また、ＣＰＵ上で動作するファームウェアのプログラムを簡素化でき、電子機器の開発期間の短縮化を図れる。
【０２０６】
なお本実施形態のデータ転送制御装置を適用できる電子機器としては、上記以外にも例えば、種々の光ディスクドライブ（ＣＤ−ＲＯＭ、ＤＶＤ）、光磁気ディスクドライブ（ＭＯ）、ハードディスクドライブ、デジタルビデオカメラ、携帯電話、スキャナ、ＴＶ、ＶＴＲ、オーディオ機器、電話機、プロジェクタ、パーソナルコンピュータ、電子手帳、或いはワードプロセッサなど種々のものを考えることができる。
【０２０７】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０２０８】
例えば、本発明のデータ転送制御装置の構成は、図４等で説明した構成に限定されるものではなく、種々の変形実施が可能である。
【０２０９】
また、データ転送制御装置の各ブロック（ＨＣ、ＰＣ、ＯＴＧＣ等）の構成も、本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【０２１０】
また、ＳＯＦパケットの周期転送を無効にする回路も、図１０に示す構成に限定されず、種々の変形実施が可能である。
【０２１１】
また、本発明のＳＯＦパケットは、その名称は問わず、ＳＯＦパケットと同等の機能を有するパケット（フレーム開始を指示、管理するパケット）であればよい。
【０２１２】
また、明細書中の記載において広義な用語（非周期転送、周期転送、第１のモード、第２のモード、ステートコントローラ、処理部、転送コントローラ、バス、バッファ領域等）として引用された用語（バルク転送、アイソクロナス転送、ＳＯＦ有りモード、ＳＯＦ無しモード、ＯＴＧコントローラ、ＣＰＵ・ファームウェア、ホストコントローラ・ペリフェラルコントローラ、ＵＳＢ、パイプ領域・エンドポイント領域等）は、明細書中の他の記載においても広義な用語に置き換えることができる。
【０２１３】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【０２１４】
また、本実施形態ではＵＳＢのＯＴＧ規格への適用例を説明したが、本発明が適用されるのはＯＴＧ規格に限定されない。即ち、ＵＳＢのＯＴＧのみならず、従来のＵＳＢ１．１、ＵＳＢ２．０や、これらの規格を発展させた規格におけるデータ転送にも本発明は適用できる。
【図面の簡単な説明】
【図１】図１（Ａ）、（Ｂ）、（Ｃ）は、ＵＳＢのＯＴＧ規格について説明するための図である。
【図２】図２（Ａ）、（Ｂ）は、ＳＲＰやＨＮＰの手順について説明するための図である。
【図３】図３（Ａ）、（Ｂ）は、ＯＨＣＩのリスト構造のディスクリプタなどについて説明するための図である。
【図４】本実施形態のデータ転送制御装置の構成例を示す図である。
【図５】図５（Ａ）、（Ｂ）は、パイプ領域、エンドポイント領域について説明するための図である。
【図６】図６（Ａ）、（Ｂ）は、ＳＯＦパケットについて説明するための図である。
【図７】ＳＯＦ有りモード（第１のモード）設定時の信号波形例である。
【図８】ＳＯＦ無しモード（第２のモード）設定時の信号波形例である。
【図９】ＳＯＦ無しモードに設定され、且つ、転送すべきデータが無い場合の信号波形例である。
【図１０】ＳＯＦパケットの周期転送を無効にする回路の構成例である。
【図１１】図１１（Ａ）、（Ｂ）は、図１０の回路の動作を説明するための真理値表である。
【図１２】データ転送制御装置のホスト時の動作について説明するための図である。
【図１３】データ転送制御装置のペリフェラル時の動作について説明するための図である。
【図１４】レジスタ部について説明するための図である。
【図１５】ファームウェアの処理例を説明するためのフローチャートである。
【図１６】ＯＴＧコントローラの詳細な構成例を示す図である。
【図１７】図１７（Ａ）、（Ｂ）は、ホストコントローラ、ペリフェラルコントローラの詳細な構成例を示す図である。
【図１８】バッファコントローラの詳細な構成例を示す図である。
【図１９】図１９（Ａ）、（Ｂ）、（Ｃ）は、領域確保手法やポインタ割り当て手法について説明するための図である。
【図２０】図２０（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の内部ブロック図の例である。
【図２１】図２１（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の外観図の例である。
【符号の説明】
ＰＩＰＥ０〜ＰＩＰＥｅ  パイプ（バッファ）領域
ＥＰ０〜ＥＰｅ          エンドポイント（バッファ）領域
ＴＲＥＧ０〜ＴＲＥＧｅ  転送条件レジスタ（共用レジスタ）
１０    トランシーバ
１２    物理層回路
２０    ＯＴＧコントローラ（ステートコントローラ）
３０    ＨＣ／ＰＣ切り替え回路
３２    ＨＣ／ＰＣセレクタ
３４    ラインステートコントローラ
４０    転送コントローラ
５０    ホストコントローラ
６０    ペリフェラルコントローラ
７０    レジスタ部
７２    転送条件レジスタ部（共用レジスタ）
８０    バッファコントローラ
１００  パケットバッファ（ＦＩＦＯ、ＲＡＭ）
１１０  インターフェース回路
１１２  ＤＭＡハンドラ回路
１１４  ＣＰＵインターフェース回路
１２０  クロックコントローラ
【図１】
0003726898.tif 000002
【図２】
0003726898.tif 000003
【図３】
0003726898.tif 000004
【図４】
0003726898.tif 000005
【図５】
0003726898.tif 000006
【図６】
0003726898.tif 000007
【図７】
0003726898.tif 000008
【図８】
0003726898.tif 000009
【図９】
0003726898.tif 000010
【図１０】
0003726898.tif 000011
【図１１】
0003726898.tif 000012
【図１２】
0003726898.tif 000013
【図１３】
0003726898.tif 000014
【図１４】
0003726898.tif 000015
【図１５】
0003726898.tif 000016
【図１６】
0003726898.tif 000017
【図１７】
0003726898.tif 000018
【図１８】
0003726898.tif 000019
【図１９】
0003726898.tif 000020
【図２０】
0003726898.tif 000021
【図２１】
0003726898.tif 000022