(57)【要約】【課題】バッファメモリを効率よく使用することができるＵＳＢコントローラ、及びバッファメモリ制御方法を提供すること。【解決手段】本発明にかかるＵＳＢコントローラは、ＵＳＢ機器に搭載されるＵＳＢコントローラであって、ＵＳＢポート、又はＣＰＵバスを介して転送されるデータを格納するＲＡＭ２８と、ＲＡＭ２８の一部を、ホスト機能に使用されるホスト用領域及びペリフェラル機能に使用されるペリフェラル用領域のいずれに割り当てるかを判定するための設定を保持するレジスタ２７と、を備えるものである。【選択図】  図１
2009230201.tif 000002
【特許請求の範囲】
【請求項１】
ＵＳＢ機器に搭載されるＵＳＢコントローラであって、
ＵＳＢポート、又はＣＰＵバスを介して転送されるデータを格納するバッファメモリと、
前記バッファメモリの一部を、ホスト機能に使用されるホスト用領域及びペリフェラル機能に使用されるペリフェラル用領域のいずれに割り当てるかを判定するための設定を保持する保持部と、を備えるＵＳＢコントローラ。
【請求項２】
ホスト機能とペリフェラル機能とを同時に使用可能なＵＳＢ機器に搭載された場合において、
前記バッファメモリの一部が、ペリフェラル用領域に割り当てれられ、残りの一部がホスト用領域に割り当てられる請求項１に記載のＵＳＢコントローラ。
【請求項３】
前記保持部に保持された設定によって割り当てられる前記ペリフェラル用領域のメモリサイズを変更可能な請求項１、又は２に記載のＵＳＢコントローラ
【請求項４】
前記バッファメモリを複数のブロックに分割し、前記ブロックに付されたブロック番号を用いてバッファメモリをチェーン管理する請求項１、２又は３に記載のＵＳＢコントローラ。
【請求項５】
前記ホスト用領域に割り当てられたブロックでは、前記チェーン管理におけるリンク先ブロックがブロック番号に応じて設定され、
前記ペリフェラル用領域に割り当てられたブロックでは、前記チェーン管理におけるリンク先ブロックが無効と設定される請求項４に記載のＵＳＢコントローラ。
【請求項６】
ＵＳＢ機器に搭載されるＵＳＢコントローラに設けられたバッファメモリを制御するバッファメモリ制御方法であって、
前記コントローラを搭載するＵＳＢ機器に応じて前記バッファメモリを割り当てるための設定を保持し、
前記設定に応じて、前記バッファメモリの一部を、ホスト機能に使用されるホスト用領域、又はペリフェラル機能に使用されるペリフェラル用領域に割り当てるバッファメモリ制御方法。
【請求項７】
前記ＵＳＢ機器が、ホスト機能とペリフェラル機能とを同時に使用可能なＵＳＢ機器である場合、
前記バッファメモリの一部が、ペリフェラル用領域に割り当てれられ、残りの一部がホスト用領域に割り当てられる請求項６に記載のバッファメモリ制御方法。
【請求項８】
前記設定を保持する際に、割り当てられる前記ペリフェラル用領域のメモリサイズを決定する請求項５、又は７に記載のバッファメモリ制御方法。
【請求項９】
前記バッファメモリを複数のブロックに分割し、前記ブロックに付されたブロック番号を用いてバッファメモリをチェーン管理する請求項６、７又は８に記載のバッファメモリ制御方法。
【請求項１０】
前記ホスト用領域に割り当てられたブロックでは、前記チェーン管理におけるリンク先ブロックがブロック番号に応じて設定され、
前記ペリフェラル用領域に割り当てられたブロックでは、前記チェーン管理におけるリンク先ブロックが無効と設定される請求項９に記載のバッファメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＵＳＢコントローラ、及びバッファメモリ制御方法に関する。
【背景技術】
【０００２】
近年、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）を搭載した装置（以下、ＵＳＢ機器）が広く利用されている。ＵＳＢ機器として、例えば、パーソナルコンピュータ、プリンタ、デジタルカメラ、ＵＳＢメモリ等が利用されている。これらのＵＳＢ機器はＵＳＢインターフェースを介して他のＵＳＢ機器と接続され、ＵＳＢ規格に準拠したデータ転送が行われる。ＵＳＢによるデータ転送では、一方の機器がホスト（例えば、パーソナルコンピュータなど）となり、他方の機器がペリフェラル（ＵＳＢメモリ等の周辺機器）となる。各機器間で転送されるデータは、ＵＳＢコントローラに設けられたバッファメモリに一時的に格納される。
【０００３】
組み込み機器向けのＵＳＢコントローラでは、バッファメモリにパイプ領域が割り当てられ、このパイプ領域のメモリサイズは、例えば、接続される相手方のＵＳＢ機器に応じて変化する。パイプ領域の割り当てる分割ブロックを変更することができる装置が開示されている（特許文献１）。特許文献１のデータ転送制御装置では、バッファコントローラによって、パケットバッファに設けられた分割ブロックのアドレスをパイプ領域の割り当てに応じたアドレスに変換している。
【０００４】
【特許文献１】特開２００４−３４９８３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
また、特許文献１には、ホスト機器に接続されていたペリフェラル機器に、ホスト機能を持たせる点が開示されている（段落０００５）。これにより、ペリフェラル機器同士をＵＳＢで接続することができるようになる。このため、特許文献１ではホストコントローラとペリフェラルコントローラを排他的に切り替えている（段落００４７）。従って、特許文献１の装置では、ホスト機能とペリフェラル機能とを同時に使用することができない。
【０００６】
ＵＳＢ機器では、ホスト機能とペリフェラル機能の一方、又は両方が使用されることになる。すなわち、ＵＳＢ機器には、（１）ホスト機能のみを使用するＵＳＢ機器（ＵＳＢホスト機器）と、（２）ペリフェラル機能のみを使用するＵＳＢ機器（ＵＳＢペリフェラル機器）と、（３）ホスト機能とペリフェラル機能とを同時に使用するＵＳＢ機器（併用機器）の３タイプが存在する。すなわち、ＵＳＢ機器の種類に応じて、ホストとして動作するのか、ペリフェラルとして動作するのか、双方としての役割を果たすのかが決まる。例えば、ＰＣはホスト機器となり、ＵＳＢメモリはペリフェラル機器となり、プリンタは併用機器となる。
【０００７】
ＵＳＢ機器のタイプに応じてＵＳＢコントローラ用の集積回路（ＬＳＩ）を設計、製造することは、コストの増加を招いてしまう。従って、ホストコントローラ、ペリフェラルコントローラの両方を有し、ホスト機能とペリフェラル機能とを同時に使用することができるＵＳＢコントローラが望まれている。
【０００８】
このようなＵＳＢコントローラを製造する場合、ホストコントローラとペリフェラルコントローラに対してバッファメモリをそれぞれ設ける必要がある。それぞれにバッファメモリを設けることで、バッファメモリを効率よく使用できないと言う問題が生じることが懸念される。すなわち、ホスト用のバッファメモリと、ペリフェラル用のバッファメモリを設けたＵＳＢコントローラをＵＳＢホスト機器に搭載すると、ペリフェラル用のバッファメモリを使用することができなくなってしまう。反対に、ＵＳＢコントローラをＵＳＢペリフェラル機器に搭載すると、ホスト用のバッファメモリを使用することができなくなってしまう。接続状態に応じてバッファをホストで使用するか、ペリフェラルで使用するかを切り替えている。よって、ホスト機能とペリフェラル機能とが同時に使用可能なＵＳＢ機器では、効率よくバッファメモリを使用することができないという問題点がある。
【課題を解決するための手段】
【０００９】
本発明の第１の態様にかかるバッファメモリ制御回路は、ＵＳＢ機器に搭載されるＵＳＢコントローラであって、ＵＳＢポート、又はＣＰＵバスを介して転送されるデータを格納するバッファメモリと、前記バッファメモリの一部を、ホスト機能に使用されるホスト用領域及びペリフェラル機能に使用されるペリフェラル用領域のいずれに割り当てるかを判定するための設定を保持する保持部と、を備えるものである。これにより、ＵＳＢ機器に応じて、バッファメモリの割り当てを変更することができる。よって、効率よくバッファメモリを使用することができる。
【００１０】
本発明の第２の態様にかかるＵＳＢ機器に搭載されるＵＳＢコントローラに設けられたバッファメモリを制御するバッファメモリ制御方法であって、前記バッファメモリを割り当てるための設定を保持し、前記設定に応じて、前記バッファメモリの一部を、ホスト機能に使用されるホスト用領域、又はペリフェラル機能に使用されるペリフェラル用領域に割り当てるものである。これにより、ＵＳＢ機器に応じて、バッファメモリの割り当てを変更することができる。よって、効率よくバッファメモリを使用することができる。
【発明の効果】
【００１１】
本発明によれば、バッファメモリを効率よく使用することができるＵＳＢコントローラ、及びバッファメモリ制御方法を提供することができる。
【発明を実施するための最良の形態】
【００１２】
以下に、本発明を適用可能な実施の形態が説明される。以下の説明は、本発明の実施形態を説明するものであり、本発明は以下の実施形態に限定されるものではない。説明の明確化のため、以下の記載は、適宜、省略及び簡略化がなされている。又、当業者であれば、以下の実施形態の各要素を、本発明の範囲において容易に変更、追加、変換することが可能であろう。尚、各図において同一の符号を付されたものは同様の要素を示しており、適宜、説明が省略される。
【００１３】
ＵＳＢは、様々な装置に適用されている。例えば、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、複写機、デジタルカメラ、プリンタ、ＵＳＢメモリ、パーソナルコンピュータ（ＰＣ）、デジタル家電、デジタルテレビ、デジタルレコーダなどの装置にＵＳＢが実装される。これにより、ＵＳＢインターフェースを提供することができ、ＵＳＢの規格に準拠したデータ通信が行われる。このようなＵＳＢ機器には、データ通信を制御するＵＳＢコントローラが搭載される。
【００１４】
これらのＵＳＢ機器は、機能や用途などに応じてＵＳＢホスト機器、ＵＳＢペリフェラル機器、併用機器（ホスト機能とペリフェラル機能を同時に使用する機器）になるかが決まる。なお、ここで言うところの同時とは、完全な同時に限るものではなく、１つのＵＳＢ機器において、１つ以上のＵＳＢポートがホスト機能に使用された状態で、他のＵＳＢポートがペリフェラル機能として使用される状態、あるいはその逆を言う。例えば、プリンタなどは、ホスト機能とペリフェラル機能を同時に使用する併用機器となる。例えば、プリンタが、ＰＣに接続された状態でペリフェラルとして動作し、他のポートにデジタルカメラを接続した状態でホストとして動作する。すなわち、プリンタにＰＣとデジタルカメラが同時に接続された状態では、ホスト機能とペリフェラル機能とが同時に動作する。従って、プリンタのＵＳＢポートがホスト機能に使用される時と、ペリフェラル機能に使用される時がある。一方、ＵＳＢメモリは、ＵＳＢペリフェラル機器となり、ＰＣはＵＳＢホスト機器となる。すなわち、ＵＳＢメモリは、ＵＳＢペリフェラル機器としかなり得ず、ＰＣはＵＳＢホスト機器としかなり得ない。
【００１５】
ＵＳＢ機器のタイプに応じて、ＵＳＢコントローラのユーザ、例えば、ＵＳＢ機器を製造するメーカが、バッファメモリの設定を行う。ＵＳＢコントローラのユーザが、ＵＳＢ用集積回路をＵＳＢ機器に搭載する際に、バッファメモリの割り当て設定を行う。例えば、バッファメモリの一部を、ホスト機能、ペリフェラル機能のいずれにも使用可能な領域にしておく。併用機器の場合、バッファメモリの一部をペリフェラル用領域に割り当て、残りをホスト用領域に割り当てる。一方、ＵＳＢホスト機器の場合、全てをホスト用領域に割り当てる。これにより、ＵＳＢ機器に応じて、バッファメモリの割り当ての設定を変更する。よって、バッファメモリを効率よく使用することができる。すなわち、ペリフェラル機能、及びホスト機能に適切なサイズのメモリ領域が割り当てられるため、データの書き込み、読み出しを速やかに行うことができる。
【００１６】
本発明の実施形態にかかるＵＳＢ用ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）について図１を用いて説明する。図１は、ＵＳＢ機器の構成を概念的に示すブロック図である。ＵＳＢ機器１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１と、ＵＳＢコントローラ１２と、システムメモリ１３とを有している。これらは、バスラインを介して接続されている。ＵＳＢコントローラ１２によって、ＵＳＢ規格に準拠したデータ通信が行われる。なお、ＵＳＢコントローラ１２とＣＰＵ１１とシステムメモリ１３とを一つにしたＬＳＩとしてもよい。もちろん、ＵＳＢコントローラ１２とＣＰＵ１１とシステムメモリ１３が別々のチップに分かれていてもよい。
【００１７】
ＣＰＵ１１は、ＵＳＢ機器１０全体の動作を制御する。システムメモリ１３は、制御に必要なプログラムや設定値が格納されている。例えば、ＣＰＵ１１がシステムメモリ１３のプログラムや設定値を読み出して、ＵＳＢコントローラ１２を制御する。また、ＵＳＢコントローラ１２は、ＵＳＢ制御回路であり、ＵＳＢホスト又はＵＳＢペリフェラルに対するインターフェースを提供する。これにより、他のＵＳＢ機器との接続が可能になる。
【００１８】
次に、ＵＳＢコントローラ１２の構成について詳述する。ＵＳＢコントローラ１２は、ＣＰＵ  Ｉ／Ｆ（インターフェース）２１と、ＵＳＢ  Ｉ／Ｆ２３と、ＵＳＢポート２４と、ホストコントローラ２５と、バッファコントローラ２６と、レジスタ２７と、ＲＡＭ２８と、ペリフェラルコントローラ２９とを有している。
【００１９】
ＣＰＵ  Ｉ／Ｆ２１は、ＣＰＵ１１にデータを送受信するためのインターフェースである。従って、ＵＳＢコントローラ１２は、ＣＰＵ  Ｉ／Ｆ２１を介して、ＣＰＵ１１と接続される。これにより、ＣＰＵ１１がＵＳＢコントローラ１２を制御する。
【００２０】
ＵＳＢ  Ｉ／Ｆ２３は、他のＵＳＢ機器と接続するためのＵＳＢポート２４を提供する。このＵＳＢポート２４にＵＳＢ機器やＵＳＢケーブルが接続される。すなわち、ＵＳＢ機器やＵＳＢケーブルをＵＳＢポート２４に差し込むことで、データ通信が可能になる。ここでは、ＵＳＢ  Ｉ／Ｆ２３に、３つのＵＳＢポート２４が設けられている。２つのＵＳＢポート２４をＵＳＢポート２４ａとし、１つのＵＳＢポート２４をＵＳＢポート２４ｂとする。ＵＳＢポート２４ａはホスト専用ポートであり、ＵＳＢポート２４ｂはホスト−ペリフェラル切り替え可能ポートである。なお、ＵＳＢ機器１０のポート数は３個に限られるものではなく、１個や２個や４個以上でもよい。ＵＳＢポート２４は、ＵＳＢコントローラ１２を搭載するＵＳＢ機器１０に応じて設定される。ワイヤレスＵＳＢでデータ通信を行ってもよい。
【００２１】
ホストコントローラ２５は、ホスト機能によるデータ通信を制御する。すなわち、ＵＳＢポート２４にＵＳＢペリフェラル機器が接続された場合、ＵＳＢ機器１０がホスト側になる。ＵＳＢポート２４にペリフェラル機器が接続された場合、ホストコントローラ２５がＵＳＢバス上でのデータ通信を制御する。これにより、ＵＳＢ機器１０がホストとして機能する。
【００２２】
ＲＡＭ２８は、ＵＳＢ通信のデータを格納するバッファメモリである。従って、ＲＡＭ２８は、他方のＵＳＢ機器から転送されたデータを一時的に格納する。また、ＲＡＭ２８は、他方のＵＳＢ機器に転送するデータを一時的に格納する。
【００２３】
バッファメモリであるＲＡＭ２８は、任意のサイズに分割されている。ここで、分割された領域をブロックとする。任意のサイズのブロックには予めブロック番号が割り当てられている。ブロック番号は固定されている。バッファコントローラ２６はこのブロック番号とパイプ領域の大きさなどの情報を基にＲＡＭ２８へアクセス先を管理し、ＲＡＭ２８を、チェーン管理する。すなわち、各ブロックに付与された固有のブロック番号がアドレスとなり、チェーン管理に使用される。具体的には、ブロック番号とリンク先のブロック番号が対応付けられて、チェーンアドレス格納バッファに格納される。ＲＡＭ２８は、ＵＳＢポート２４、又はＣＰＵバスを介して転送されるデータを格納する。
【００２４】
ペリフェラルコントローラ２９は、ペリフェラル機能によるデータ通信を制御する。すなわち、ＵＳＢポート２４にＵＳＢホスト機器が接続された場合、ＵＳＢコントローラ１２が搭載されたＵＳＢ機器１０がペリフェラル側になる。ＵＳＢポート２４にホスト機器が接続された場合、ペリフェラルコントローラ２９がデータ通信を制御する。これにより、ＵＳＢコントローラ１２を搭載するＵＳＢ機器１０がペリフェラルとして機能する。また、ペリフェラルコントローラ２９には、レジスタ３０が設けられている。このレジスタ３０については、後述する。
調停回路３１は、ホストコントローラ２５とペリフェラルコントローラ２９が同時にＲＡＭ２８にアクセスしないようにする。例えば、ホストコントローラ２５がＲＡＭ２８にアクセスしているときは、ペリフェラルコントローラ２９のＲＡＭ２８へのアクセスを禁止する。また、ペリフェラルコントローラ２９がＲＡＭ２８にアクセスしているときは、ホストコントローラ２５のＲＡＭ２８へのアクセスを禁止する。これにより、ホスト機能とペリフェラル機能を同時に使用する併用機器であっても、ホストコントローラ２５とペリフェラルコントローラ２９とが、同時にＲＡＭ２８にアクセスするのを防ぐことができる。
【００２５】
このように、ＵＳＢコントローラ１２には、ホストコントローラ２５と、ペリフェラルコントローラ２９が設けられている。従って、ＵＳＢコントローラ１２は、（１）ホスト機能のみを使用するＵＳＢ機器（ＵＳＢホスト機器）と、（２）ペリフェラル機能のみを使用するＵＳＢ機器（ＵＳＢペリフェラル機器）と、（３）ホスト機能とペリフェラル機能とを同時に使用するＵＳＢ機器（併用機器）のいずれにも搭載可能である。
【００２６】
ホストコントローラ２５には、バッファコントローラ２６が設けられている。バッファコントローラ２６は、バッファメモリであるＲＡＭ２８の制御を行う。例えば、バッファコントローラ２６は、ＲＡＭ２８のチェーン管理に使用されるブロック番号を記憶している。さらには、バッファコントローラ２６は、チェーン管理に必要な設定を記憶する。例えば、バッファコントローラ２６は、チェーンアドレス格納バッファを有している。すなわち、バッファコントローラ２６は、ブロック番号とリンク先ブロック番号を対応付けて記憶している。
【００２７】
ＵＳＢコントローラ１２には、さらにレジスタ２７が設けられている。レジスタ２７は、ＲＡＭ２８の一部をホスト用領域及びペリフェラル用領域のいずれか一方に割り当てるか設定するための設定を保持している。すなわち、レジスタ２７は、割り当てるコントローラを判定するための設定を保持する保持部となる。レジスタ２７に保持されている値に応じて、ＲＡＭ２８の一部の領域がホスト用領域、又はペリフェラル用領域になる。ホストコントローラ２５がホスト用領域を使用し、ペリフェラルコントローラ２９はペリフェラル用領域を使用する。換言すると、ペリフェラルコントローラ２９はホスト用領域を使用できず、ホストコントローラ２５はペリフェラル用領域を使用できない。レジスタ２７での設定に応じて、ＲＡＭ２８に含まれるブロックの一部がホスト用領域及びペリフェラル用領域の一方に割り当てられる。具体的には、レジスタ２７の値が１の場合、ＲＡＭ２８の一部がペリフェラル用領域に割り当てられる。一方、レジスタ２７の値が０の場合、ＲＡＭ２８の全領域がホスト用領域に割り当てられる。
【００２８】
レジスタ２７の設定は、ＣＰＵ１１やソフトウェアによって行われる。例えば、ＣＰＵ１１がレジスタ２７を設定することによって、レジスタ２７に領域の設定が格納される。具体的には、ＵＳＢコントローラ１２のユーザ（例えば、ＵＳＢ機器を製造するメーカ）が、ＵＳＢ機器１０にＵＳＢコントローラ１２を組み込む際に、レジスタ２７の設定を行う。すなわち、ＵＳＢポート２４がホストコントローラ２５及びペリフェラルコントローラ２９のどちらのコントローラで使用されるかをＵＳＢコントローラ１２のレジスタ２７に設定する。この設定に応じて、ＲＡＭ２８の一部をホスト用領域及びペリフェラル用領域のどちらに割り当てるのかが判定される。なお、レジスタ２７の設定方法については特に限定されない。
【００２９】
次に、ＲＡＭ２８の割り当てについて図２〜図４を用いて説明する。図２〜図４は、ＲＡＭ２８のマッピング状態を示す図である。なお、図２〜図４では、ＲＡＭ２８が１２個に分割されているとしている。従って、ＲＡＭ２８には、ブロック番号０〜ブロック番号１１のブロックが存在する。もちろん、ＲＡＭ２８の分割数は特に限定されるものではない。
【００３０】
図２は、ＲＡＭ２８に含まれる全ブロックがホスト機能に使用される場合が示されている。すなわち、ＲＡＭ２８の全体がホスト用領域２８ａになっている。図２に示すように、ブロック番号を示すビットは、リンク先のブロック番号に対応付けられている。このように、チェーンアドレスを格納している。このチェーンアドレスによって、ＲＡＭ２８のブロックがチェーン管理される。すなわち、リンク元のブロックにデータが書き込まれると、その次には、リンク先のブロックにデータが書き込まれるというように、リンク先ブロック番号にしたがって、順番にブロックが使用されていく。
【００３１】
ここでは、全てのブロックが空き領域となっている。従って、空き領域の先頭ブロックは、ブロック番号０のブロックとなり、最後尾ブロックは、ブロック番号１１のブロックとなる。すなわち、空き領域の先頭ブロック番号は０、最後尾ブロック番号は１１となる。従って、ブロック０からブロック１１まで順番に使用されていく。ブロック番号０のリンク先アドレスはブロック番号１であり、ブロック番号１のリンク先アドレスはブロック番号２である。また、他のブロックについても同様にリンク先ブロック番号として、ネクストブロック番号が保持されている。また、最後尾ブロックであるブロック番号１１では、ネクストブロック番号が無効であることを示すフラグ（Ｉｎｖａｌｉｄフラグ）になっている。例えば、Ｉｎｖａｌｉｄフラグは、チェーンの最後を示すフラグとして使用される。そして、Ｉｎｖａｌｉｄフラグは、パイプ領域チェーン同士やパイプ領域チェーンと空き領域チェーンとを区切る役割を果たす。チェーンアドレス格納バッファには、このようにして、チェーンアドレスが格納されている。
【００３２】
また、ＲＡＭ２８をホスト機能に使用する場合、周辺機器と通信するときにはパイプ領域が確保される。パイプ領域の確保はソフトウェアで行ってもよいし、ハードウェアで行ってもよい。パイプ領域は、ＵＳＢホストがＵＳＢペリフェラル（エンドポイント）と通信するために、転送データを一時的に格納しておくための格納場所である。パイプ領域を割り当てた場合は、ＲＡＭ２８の一部のブロックがパイプ領域に割り当てられる。バッファコントローラ２６は、例えば、空き領域の先頭ブロックと最後尾ブロックを記憶しておく。空き領域の先頭ブロックから順番にパイプ領域に割り当てていく。このとき、各パイプ領域の最後尾ブロックを無効（Ｉｎｖａｌｉｄ）とする。さらに、各パイプ領域の先頭ブロック番号を記憶する。このようにリンク先ブロック番号を変更することで、パイプ領域の確保を容易に管理することができる。また、パイプ領域を解放する場合、空き領域の最後尾ブロックのリンク先ブロック番号を、解放するパイプ領域の先頭ブロックにする。このようにリンク先ブロック番号を変更することで、パイプ領域の解放を容易に管理することができる。よって、ホスト用領域２８ａに含まれる各ブロックの管理が容易になる。
【００３３】
次に、ＲＡＭ２８の一部がホスト機能に使用され、残りの一部がペリフェラル機能に使用される場合について、図３を用いて説明する。図３では、ブロック０〜ブロック４がペリフェラル機能に割り当てられ、ブロック５〜ブロック１１がホスト機能に割り当てられた場合を示している。すなわち、ブロック０〜ブロック４がペリフェラル用領域２８ｂとなり、ブロック５〜ブロック１１がホスト用領域２８ａとなっている。
【００３４】
ホスト用領域２８ａに含まれるブロック５〜ブロック１１は、図２と同様にチェーン管理される。すなわち、ブロック５が空き領域の先頭ブロックとなり、ブロック１１が空き領域の最後尾ブロックとなっている。そして、ブロック５〜ブロック１０では、リンク先ブロック番号がネクストブロック番号となっている。また、ホスト用領域２８ａの最後尾ブロックであるブロック１１は、リンク先ブロック番号が無効（Ｉｎｖａｌｉｄ）になっている。そして、空き領域にパイプ領域が割り当てられた場合、上記と同様にリンク先ブロック番号を変更する。
【００３５】
ペリフェラル用領域２８ｂに含まれるブロック０〜ブロック４では、リンク先ブロック番号が全て無効（Ｉｎｖａｌｉｄ）になっている。すなわち、ペリフェラル用領域２８ｂはチェーン管理されないため、チェーン管理のチェーンが切られている。ペリフェラル用領域２８ｂでは、各エンドポイントが使用する領域を指定するためのレジスタ３０がペリフェラルコントローラ２９に搭載され、ソフトウェアにより設定される。そして、この設定にしたがって各エンドポイントがＵＳＢデータ通信時に使用するバッファ領域が決定される。
【００３６】
ホスト機能とペリフェラル機能が同時に使用される場合、例えば、１つのＵＳＢポート２４ｂがペリフェラルコントローラ２９で使用され、残りのＵＳＢポート２４ａがホストコントローラ２５で使用される。すなわち、１つのＵＳＢ機器において、ペリフェラル機能とホスト機能が併用される場合、ペリフェラルコントローラ２９とホストコントローラ２５とがＲＡＭ２８を共用する。従って、ＲＡＭ２８の一部をペリフェラル用領域２８ｂとし、残りをホスト用領域２８ａとする。優先的にペリフェラル用領域２８ｂが確保され、残りがホスト用領域２８ａとなる。従って、パイプ領域の割り当てが変更された場合でも、ペリフェラル用領域２８ｂに変化はない。すなわち、ペリフェラル用領域２８ｂに該当するブロックでは、リンク先アドレスが無効になっている。
【００３７】
このように、ＲＡＭ２８の少なくとも一部は、ペリフェラル用領域２８ｂ又はホスト用領域２８ａのいずれにも使用可能である。すなわち、ブロック０〜ブロック４は、レジスタ２７での設定に応じて、ペリフェラル用領域２８ｂ及びホスト用領域２８ａのいずれか一方になる。いずれかに使用する領域をＲＡＭ２８に確保しておき、レジスタ２７の設定によって、ホスト用領域２８ａ、及びペリフェラル用領域２８ｂのいずれか一方にする。
【００３８】
次に、ＲＡＭ２８の全てがペリフェラル機能に割り当てられた場合について、図４を用いて説明する。図４では、ブロック０〜ブロック１１がペリフェラル機能に割り当てられている。すなわち、全ブロックがペリフェラル用領域２８ｂとなっている。ペリフェラル用領域２８ｂに含まれるブロック０〜ブロック１１では、リンク先ブロック番号が全て無効（Ｉｎｖａｌｉｄ）になっている。この場合、リンク先ブロック番号は、変化しない。
【００３９】
次に、本実施の形態にかかるバッファメモリの制御方法について、図５を用いて説明する。図５は、本実施の形態にかかるバッファメモリ制御方法を示すフローチャートである。
【００４０】
まず、ＵＳＢポート２４ｂを使用するコントローラを設定する（ステップＳ１０１）。すなわち、ホストコントローラ２５がＵＳＢポート２４ｂを使用するか、ペリフェラルコントローラ２９がＵＳＢポート２４ｂを使用するかを設定する。具体的には、３つのＵＳＢポート２４のうち、一つのＵＳＢポート２４ｂはホストコントローラ２５またはペリフェラルコントローラ２９のどちらかで使用可能なＵＳＢポート、他のＵＳＢポート２４ａはホストコントローラ２５専用のＵＳＢポートとする。そして、ＵＳＢポート２４ｂをホストコントローラ２５が使用するか、ペリフェラルコントローラ２９が使用するかを設定する。また、ホストコントローラ２５がＵＳＢポート２４ａを使用するか使用しないかを設定する。
レジスタ２７を設定することにより、ＵＳＢポート２４ｂをホストで使用するかペリフェラルで使用するかが決まる。また、レジスタ２７を設定することにより、ホストコントローラ２５がＵＳＢポート２４ａを使用するか否かが決まる。ここでは、ＵＳＢコントローラ１２を搭載するＵＳＢ機器に応じて、設定される。この設定は、ＵＳＢコントローラ１２のユーザによって変更される。ＵＳＢコントローラ１２のユーザ側において、レジスタ２７、レジスタ３０に設定値を書き込む。したがって、一度設定が行われると、ＲＡＭ２８の領域の割り当ては不変となる。この設定に応じて、以下のステップでの判断が行われる。また、ここで、レジスタ３０に対する設定を行ってもよい。レジスタ２７、レジスタ３０はそれぞれ複数のレジスタで構成されてもよい。
【００４１】
次に、レジスタ２７を参照して、ホストコントローラ２５がＵＳＢポート２４ｂを使用するか否かを判定する（ステップＳ１０２）。ホストコントローラ２５がＵＳＢポート２４ｂを使用する場合（ステップＳ１０２のＹ）、ＲＡＭ２８の全ブロックがホスト用領域２８ａになる。すなわち、図２に示すような割り当て状態となる。
【００４２】
ＵＳＢポート２４ｂを使用するコントローラがホストコントローラ２５ではない場合（ステップＳ１０２のＮ）、つまり、ペリフェラルコントローラ２９がＵＳＢポート２４ｂを使用する場合、ペリフェラルコントローラ２９とホストコントローラ２５が同時に使用されるか否かを判定する（ステップＳ１０３）。すなわち、ホストコントローラ２５がＵＳＢポート２４ａを使用するか否かを判定する。レジスタ２７を参照して、ペリフェラルコントローラ２９とホストコントローラ２５を併用するかを判定する。
【００４３】
ペリフェラルコントローラ２９とホストコントローラ２５とを併用するＵＳＢ機器である場合（ステップＳ１０３のＹ）、ＲＡＭ２８にホスト用領域２８ａとペリフェラル用領域２８ｂとが割り当てられる。これにより、図３に示すような割り当て状態となる。例えば、併用機器であるプリンタなどは、このような設定となる。この場合、ホストコントローラ２５がＵＳＢポート２４ａを使用し、ペリフェラルコントローラ２９がＵＳＢポート２４ｂを使用する。
【００４４】
ここで、併用機器に搭載された場合に、ペリフェラル用領域２８ｂに割り当てるメモリサイズは、予め設定されている。すなわち、ＵＳＢコントローラ１２のメーカ側において、ペリフェラル用領域２８ｂに割り当てるメモリサイズが、ＵＳＢコントローラ１２の仕様として決まっている。例えば、ＲＡＭ２８のメモリサイズが１ｋＢｙｔｅであるとき、そのうち、０．２ｋＢｙｔｅをペリフェラル用領域２８ｂとする。もちろん、ペリフェラル用領域２８ｂのメモリサイズは特に限定されるものではない。なお、ＵＳＢコントローラ１２のユーザ側でペリフェラル用領域２８ｂに割り当てるメモリサイズを設定してもよい。例えば、ステップＳ１０１で設定する際に、併用時にペリフェラル用領域２８ｂに割り当てるブロックのブロック番号を指定する。すなわち、ＵＳＢコントローラ１２のユーザ側がＵＳＢ機器に応じて、ペリフェラル用領域２８ｂに割り当てるメモリサイズを最適化することができる。
【００４５】
次に、ステップＳ１０３がＮの場合、すなわち、ペリフェラルコントローラ２９とホストコントローラ２５とを同時に使用しない場合について説明する。この場合、ＵＳＢコントローラ１２がＵＳＢペリフェラル機器に搭載されることになる。従って、ＵＳＢポート２４ｂのみ使用され、ＵＳＢポート２４ａは使用されない。そして、レジスタ３０を参照して、ペリフェラルコントローラ２９が、ホスト用領域２８ａも使用するか否かを判定する（ステップＳ１０４）。ペリフェラルコントローラ２９が、ホスト用領域２８ａであった領域を使用しない場合、ホスト用領域２８ａであるブロックが未使用領域２８ｃとなる。このように、ホスト用領域２８ａとして使用されない領域は、未使用領域になる。
【００４６】
一方、ペリフェラルコントローラ２９が、ホスト用領域２８ａも使用する場合、ホスト用領域２８ａに割り当てるブロックをペリフェラル用領域２８ｂにする。従って、全ブロックがペリフェラル用領域２８ｂとなり、図４に示す割り当て状態となる。例えば、ＵＳＢペリフェラル機器であるＵＳＢメモリ等はこのような設定としてもよい。これにより、未使用領域２８ｃになるはずであったブロックについても、ペリフェラル用領域２８ｂとすることができる。よって、バッファメモリを効率よく使用でき、より多くのＵＳＢペリフェラル機能を持たせることが可能となる。
ここでは、レジスタ３０の設定に応じて、ホスト用領域２８ａをペリフェラル用領域２８ｂとして使用するか否かを判定する。例えば、レジスタ３０が１の場合、ホスト用領域２８ａとなる領域がペリフェラル用領域２８ｂと使用されるため、ＲＡＭ２８の全領域がペリフェラル用領域２８ｂとなる。また、レジスタ３０が０の場合、ＲＡＭ２９の一部がペリフェラル用領域２８ｂとなり、残りが未使用領域２８ｃとなる。このように、レジスタ３０には、ホスト用領域２８ａをペリフェラル用領域２８ｂとして用いるか否かが設定されている。
【００４７】
上記のように、ＵＳＢは、様々な種類の装置に適用されている。従って、ＵＳＢコントローラ１２を搭載するＵＳＢ機器に応じて、バッファメモリであるＲＡＭ２８の割り当てを変える。また、併用機器の場合、ペリフェラル用領域２８ｂを優先的に確保する。そして、残りをホスト用領域２８ａに割り当てる。このようにすることで、ホスト用領域２８ａにおいてパイプ領域の追加、解放があった場合でも、ペリフェラル領域を気にすることなくアドレスを管理することができる。そして、ホスト用領域をバッファコントローラ２６によりチェーン管理することで、パイプ領域の追加、解放によりバッファの使用領域が歯抜け状態になっても残りの領域を有効に使用でき、さらにＵＳＢコントローラを使用するユーザがバッファを管理する負荷を低減することができる。
【００４８】
また、ＵＳＢ機器１０に応じて、集積回路を設計、製造する必要がなくなる。すなわち、異なるＵＳＢ機器１０に対して、同じ構成のＵＳＢコントローラ１２を搭載しても、バッファメモリを効率よく使用することができる。よって、ＵＳＢコントローラ１２の利用範囲を広くすることができ、汎用性を向上することができる。さらに、ホストコントローラ２５とペリフェラルコントローラ２９のそれぞれに対してバッファメモリを別個に設ける必要がなくなる。
【図面の簡単な説明】
【００４９】
【図１】本発明の実施形態にかかるＵＳＢ機器の構成を示すブロック図である。
【図２】本発明の実施形態にかかるＵＳＢ機器において、メモリのマッピング状態を示す図である。
【図３】本発明の実施形態にかかるＵＳＢ機器において、メモリのマッピング状態を示す図である。
【図４】本発明の実施形態にかかるＵＳＢ機器において、メモリのマッピング状態を示す図である。
【図５】本発明の実施形態にかかるバッファメモリ制御方法を示すフローチャートである。
【符号の説明】
【００５０】
１０  ＵＳＢ機器
１１  ＣＰＵ
１２  ＵＳＢコントローラ
１３  システムメモリ
２１  ＣＰＵ  Ｉ／Ｆ
２３  ＵＳＢ  Ｉ／Ｆ
２４  ＵＳＢポート
２５  ホストコントローラ
２６  バッファコントローラ
２７  レジスタ
２８  ＲＡＭ
２８ａ  ホスト用領域
２８ｂ  ペリフェラル用領域
２８ｃ  未使用領域
２９  ペリフェラルコントローラ
３０  レジスタ
３１  調停回路
【図１】
2009230201.tif 000003
【図２】
2009230201.tif 000004
【図３】
2009230201.tif 000005
【図４】
2009230201.tif 000006
【図５】
2009230201.tif 000007