【文献】
野崎 原生,USB3.0設計のすべて,CQ出版株式会社 小澤 拓治,2011年10月20日,第1版,p.102
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0012】
添付の図面を参照して本発明の実施形態を説明する。以下に説明する実施形態は本発明の実施例であり、本発明は、以下の実施形態に制限されるものではない。なお、本明細書及び図面において符号が同じ構成要素は、相互に同一のものを示すものとする。
【0013】
実施の形態1.
(システム構成)
本実施の形態にかかるUSBシステムとそのデータ転送方法について、図を参照して説明する。
図1は、USBシステム100の全体構成を示す図である。USBシステム100はUSBホスト10とUSBデバイス20とを備えている。USBホスト10は、例えば、パーソナルコンピュータ等のホスト機能を有するUBS機器である。USBデバイス20は、例えば、プリンタ、カメラ、メモリ等の周辺機器であり、USB通信のエンドポイントとなる。
【0014】
USBホスト10とUSBデバイス20はUSBインターフェース30を介して接続されている。USBインターフェース30を介して、USBホスト10とUSBデバイス20とがパケット通信を行う。USBホスト10は、USBインターフェース30を介して、USBデバイス20にパケットを送信する。また、USBデバイス20は、USBインターフェース30を介して、USBホスト10にパケットを送信する。
【0015】
USBホスト10は、USBデバイス20とのデータ通信を制御する。例えば、USBホスト10がUSBデバイス20に対してデータ転送要求やパケット要求を行うことで、USBデバイス20がデータを転送する。USBホスト10とUSBデバイス20がUSB規格に従ったプロトコルでデータを通信する。ここでは、USBホスト10とUSBデバイス20は、USB3.0 Super Speedの規格に従ってデータ通信を行う。なお、USB規格に準拠したデータ通信については、公知の方法と同様であるため詳細な説明を省略する。
【0016】
USBデバイス20は、システムバス40を備えている。USBデバイス20は、USBホスト10との間でパケット通信を行い、パケットに含まれるパケットデータをシステムバス40に送出する。例えば、USBデバイス20は、USBホスト10からのパケットを受信する。USBデバイス20は受信したパケットを解析して、パケットに含まれるパケットデータをシステムバス40に転送する。これにより、パケットデータがUSBデバイス20のメモリ等に記憶される。また、USBデバイス20は、USBホスト10への応答を行う。この場合、USBデバイス20は、をシステムバス40から転送されたデータに基づいて、パケットを構築する。そして、USBデバイス20は、USBインターフェース30を介して、パケットをUSBホスト10に送信する。
【0017】
さらに、USBデバイス20は、パケットデータを格納するバッファの空き数、又はバッファに格納されたデータ数を管理する。そして、USBデバイス20は、空き数又はデータ数を閾値と比較する。USBデバイス20は、閾値判定を行うことにより送受信パケット制御を効率化して、テータ転送速度の向上を図る。さらに、通信状況に応じて任意の閾値を設定可能にすることにより、接続するUSBホスト10に合わせて最適化することができる。これにより、システム構成に合わせて、転送速度向上を図ることができる。この制御については後述する。
【0018】
なお、
図1では、1つのUSBホスト10に1つのUSBデバイス20が接続されている構成が示されているが、1つのUSBホスト10に複数のUSBデバイス20が接続されていてもよい。以下の説明において、USBホスト10からUSBデバイス20にデータパケットを送信する場合を、OUT転送とし、USBデバイス20からUSBホスト10にデータパケットを送信する場合をIN転送とする。
【0019】
(デバイス構成)
USBデバイス20について、
図2を用いて説明する。
図2は、USBデバイス20の構成を示すブロック図である。USBデバイス20は、USBインターフェース30、物理層ユニット21、リンク層ユニット22、プロトコル層ユニット23、DMA(Direct Memory Access)コントローラ24、レジスタ制御部25、及びシステムバス40を備えている。プロトコル層23は、OUT転送バッファ26とIN転送バッファ27とを備えている。物理層ユニット21、リンク層ユニット22、プロトコル層ユニット23、DMAコントローラ24、及びレジスタ制御部25が、パケット通信を制御する通信制御部となる。
【0020】
USBインターフェース30は、上記の通り、USBホスト10と接続しており、USBホスト10との間でUSB通信を行うためのインターフェースとなる。物理層ユニット21は、物理(PHY)層処理を行い、物理層を制御する回路である。例えば、物理層ユニット21はA/D変換器やD/A変換器を有している。そして、物理層ユニット21は、OUT転送時には、差動信号をA/D変換してデジタル信号を生成して、リンク層ユニット22に送出する。物理層ユニット21は、IN転送時にはD/A変換によりアナログの差動信号を生成して、USBインターフェース30に送出する。
【0021】
リンク層ユニット22は、リンク層処理を行い、リンク層を制御する回路である。リンク層ユニット22は、物理層ユニット21とプロトコル層ユニット23との間に配置されている。例えば、OUT転送時に、リンク層ユニット22は、パケットヘッダの解析を行い、パケットデータをプロトコル層ユニット23に送出する。また、IN転送時に、リンク層ユニット22は、プロトコル層ユニット23から受け取った情報をパケットに構築し、物理層ユニット21に送出する。
【0022】
プロトコル層ユニット23は、プロトコル層処理を行い、プロトコル層を制御する回路である。例えば、プロトコル層ユニット23は、パケットデータを解析する。プロトコル層ユニット23は、物理層ユニット21、及びリンク層ユニット22を介して、データを送受信する。
【0023】
さらに、プロトコル層ユニット23は、OUT転送バッファ26、IN転送バッファ27を有している。OUT転送バッファ26は、OUT転送時にパケットデータを格納する。例えば、OUT転送バッファ26は、リンク層ユニット22からのパケットデータをバッファし、DMAコントローラ24を介してシステムバス40に送出する。IN転送バッファ27は、IN転送時にパケットデータを格納する。例えば、IN転送バッファ27は、DMAコントローラ24からのパケットデータをバッファし、リンク層ユニット22に送出する。
【0024】
OUT転送バッファ26、及びIN転送バッファ27は、それぞれ、最大16パケットまで設定可能なバッファ段数を持っている。すなわち、OUT転送バッファ26、及びIN転送バッファ27は、それぞれ16段のバッファを有し、各段に1パケット分のパケットデータをバッファする。もちろん、OUT転送バッファ26、及びIN転送バッファ27の段数は16に限定されるものではなく、2以上の段数であればよい。プロトコル層ユニット23は、OUT転送バッファ26の空き数、及びIN転送バッファ27のデータ格納数をバッファの空き状況、又は格納状況を示す値として求める。そして、プロトコル層ユニット23は、バッファの空き状況又は格納状況を示す値を管理して、通信を制御する。
【0025】
DMAコントローラ24は、システムバス40と接続されている。システムバス40は、図示しないメモリ等と接続されている。したがって、DMAコントローラ24は、システムバス40を介して、メモリ等と接続されている。そして、DMAコントローラ24は、ダイレクトメモリアクセスによってメモリへのデータの書き込み、及びメモリからのデータの読み出しを制御する。OUT転送時には、DMAコントローラ24は、OUT転送バッファ26に格納されたパケットデータをメモリに書き込む。IN転送時には、DMAコントローラ24は、メモリに記憶されたデータを読み出し、送信データとして、IN転送バッファ27に格納する。
【0026】
レジスタ制御部25は、OUT転送バッファ26の空き数、又はIN転送バッファ27データ数を管理するための閾値を設定する。レジスタ制御部25は、閾値を設定する設定レジスタを有している。したがって、レジスタ制御部25が閾値を記憶する閾値記憶部となる。
【0027】
OUT転送処理について説明する。USBインターフェース30を介して、USBデバイス20がUSBホスト10からのパケットを受信する。すると、物理層ユニット21は、パケットのハード的なチェックを行い、リンク層ユニット22に送出する。リンク層ユニット22は、パケットに含まれるヘッダ情報の解析等を行う。リンク層ユニット22は、パケットに含まれるパケットデータをプロトコル層ユニット23に送出する。なお、受信エラー等が起きた場合、リンク層ユニット22がUSBホスト10に再送処理を要求する。
【0028】
プロトコル層ユニット23は、パケットデータを解析して、必要なパケットデータをOUT転送バッファ26に格納する。OUT転送バッファ26は複数のパケットのパケットデータを格納するように、複数段設けられている。よって、プロトコル層ユニット23は、1パケットのパケットデータをOUT転送バッファ26に順番に格納していく。すなわち、プロトコル層ユニット23は、OUT転送バッファ26の空いているバッファにパケットデータを格納する。DMAコントローラ24は、OUT転送バッファ26に格納されているパケットデータを順番にシステムバス40に送出する。
【0029】
IN転送処理について説明する。システムバス40からのデータがプロトコル層ユニット23に送出される。プロトコル層ユニット23は、システムバス40からのデータをIN転送バッファ27に送信データとして格納する。これにより、データの転送準備が行われる。プロトコル層ユニット23は、IN転送バッファ27に格納した送信データをリンク層ユニット22に送出する。リンク層ユニット22はプロトコル層ユニット23から受け取った送信データをパケットに構築する。そして、リンク層ユニット22は、パケットを物理層ユニット21に送出する。物理層ユニット21は、パケットに物理層処理を行って、USBインターフェース30に送出する。USBデバイス20がパケット要求を受信すると、プロトコル層ユニット23は、IN転送バッファ27が格納している送信データを順番にリンク層ユニット22に送出する。
【0030】
(OUT転送)
以下、USBデバイス20からUSBホスト10にデータパケットを送信するOUT転送の処理フローについて、
図3を用いて説明する。
図3は、OUT転送バッファ26に空きがある場合のOUT転送でのシーケンスを示す図である。
【0031】
まず、USBホスト10がDATAパケットをUSBデバイス20に送信して、データ転送要求を行う(
図3のA)。すると、プロトコル層ユニット23がOUT転送バッファ26の空き状況を確認する。
【0032】
OUT転送バッファ26の空きがあるので、USBデバイス20は、ACKパケットをUSBホスト10に送信して、USBホスト10への転送応答を実行する(
図3のB)。USBホスト10はACKパケットを受信したら、同様に、DATAパケットをUSBデバイス20に送信する(
図3のC)。USBデバイス20は、DATAパケットを受信したら、同様にACKパケットをUSBホスト10に送信する(
図3のD)。この処理を繰り返して、パケット通信を行う。このように、OUT転送バッファ26に十分な空きがある場合、USBホスト10からのDATAパケットの送信と、USBデバイス20からのACKパケットの送信が交互に行われる。
【0033】
次に、OUT転送バッファ26の空きがない場合について、
図4を用いて説明する。
図4は、OUT転送バッファ26の空きがない場合のOUT転送でのシーケンスを示す図である。
【0034】
まず、USBホスト10がDATAパケットをUSBデバイス20に送信して、データ転送要求を行う(
図4のA)。すると、プロトコル層ユニット23がOUT転送バッファ26の空き状況を確認する。OUT転送バッファ26の空きがないので、USBデバイス20は、USBホスト10にNRDY(Not Ready)パケットを送信して、送信できないことを伝えるパケット応答を行う(
図4のB)。NRDYパケットは、USBホスト10に通信を待機させる待機パケットである。
【0035】
これにより、バッファ空待ち時間となって、USBホスト10は、OUT転送バッファ26が空くのを待つ。USBデバイス20は、NRDYパケットを送信した後、OUT転送バッファ26のパケットデータを送出して、空きバッファを発生させる。すなわち、DMAコントローラ24が、OUT転送バッファ26に格納されているデータパケットをシステムバス40に送出する。
【0036】
USBデバイス20は、OUT転送バッファ26に空きが発生したら、ERDY(Endpoint Ready)パケットをUSBホスト10に送信する(
図4のC)。すなわち、USBデバイス20は、OUT転送バッファ26に空きができ次第、USBホスト10に準備完了を伝えるERDYパケットを送信する。ERDYパケットは、USBホスト10に通信準備が完了したことを示す準備完了パケットである。なお、ERDYパケットには、空きバッファ数の情報が含まれているため、USBホスト10には受付可能数が通知される。
【0037】
USBホスト10は、ERDYパケットに応答して、再度、USBデバイス20にDATAパケットを送信して、データ転送要求を行う(
図4のD)。USBデバイス20がDATAパケットを受信すると、プロトコル層ユニット23がOUT転送バッファ26の空き状況を確認する。OUT転送バッファ26に空きがある場合、USBデバイス20は、USBホスト10にACKパケットを送信して、転送完了を通知する(
図4のE)。なお、ACKパケットには、空きバッファ数の情報が含まれているため、USBホスト10には受付可能数が通知される。
【0038】
USBホスト10はACKパケットに応答して、再度、USBデバイス20にDATAパケットを送信して、データ転送要求を行う(
図4のF)。すると、プロトコル層ユニット23がOUT転送バッファ26の空き状況を確認する。OUT転送バッファ26の空きがない場合、USBデバイス20は、USBホスト10にNRDYパケットを送信して、送信できないことを伝えるパケット応答を行う(
図4のG)。
【0039】
USBホスト10は、
図4のBと同様に、NRDYパケットを受信した後、OUT転送バッファ26に空きができるまで待機する。すなわち、バッファ空待ち時間となって、USBホスト10は、OUT転送バッファ26が空くのを待つ。USBデバイス20は、NRDYパケットを送信した後、OUT転送バッファ26のパケットデータをシステムバス40に送出する。すなわち、DMAコントローラ24が、システムバス40を介して、OUT転送バッファ26に格納されているデータパケットをメモリに書き込む。そして、OUT転送バッファ26に空きが生じたら、USBデバイス20がUSBホスト10にERDYパケットを送信して、転送完了を通知する(
図4のH)。
【0040】
OUT転送バッファ26に空きがない場合、USBデバイス20は、以下に示す問題が生じる恐れがある。USBホスト10からのパケット転送に対してシステムバス40側のデータ転送が遅い場合、OUT転送バッファ26にパケットデータが溜まっていく。すなわち、OUT転送バッファ26の空き数が徐々に減っていってしまう。そして、OUT転送バッファ26に空きがなくなり、データ受け付けられない状態となると、USBデバイス20からのデータパケットに対して、USBホスト10がNRDY応答を行う。
【0041】
OUT転送バッファ26に空きができ、USBデバイス20がパケットを受け付けられる状態となると、USBデバイス20がERDYパケットを送信する。USBホスト10は、ERDYパケットにより、空きがあることが通知されると、USBデバイス20に対してDATAパケットの送信を開始する。このように、OUT転送バッファ26に空きができる度に、ERDY応答を行っていると、NRDYパケットとERDYパケットの転送回数が多くなる。すなわち、OUT転送バッファ26が空き無しから空有りになるタイミングで毎回、USBデバイス20がERDYパケットを送信すると、全体から見た転送速度が遅くなってしまう場合がある。
【0042】
そこで、本実施の形態では、以下に示す制御方法によって、データ通信速度の向上を図っている。以下、本実施の形態にかかるデータ転送方法について、
図5を用いて説明する。
【0043】
まず、USBホスト10がDATAパケットをUSBデバイス20に送信して、データ転送要求を行う(
図5のA)。すると、プロトコル層ユニット23がOUT転送バッファ26の空き状況を確認する。OUT転送バッファ26に空きがないため、USBデバイス20は、USBホスト10にNRDYパケットを送信して、送信できないことを伝えるパケット応答を行う(
図5のB)。NRDYパケットは、USBデバイス20にパケット転送を待機させる待機パケットである。
【0044】
バッファ空待ち時間となって、USBホスト10は、OUT転送バッファ26が空くのを待つ。USBデバイス20は、NRDYパケットを送信した後、OUT転送バッファ26のパケットデータをシステムバス40に送出することで、OUT転送バッファ26の空き数を増やす。すなわち、DMAコントローラ24が、システムバス40を介して、OUT転送バッファ26に格納されているパケットデータをメモリに送出する。このようにして、プロトコル層ユニット23がOUT転送バッファ26に空きを発生させる。
【0045】
さらに、バッファ空待ち時間において、プロトコル層ユニット23はバッファの空き数と閾値を比較する。バッファの空き数が閾値を越えたら、USBデバイス20がERDYパケットをUSBホスト10に送信する(
図5のC)。すなわち、USBデバイス20は、OUT転送バッファ26に空きができたタイミングでは、USBホスト10に準備完了を伝えるERDYパケットを送信しない。そして、OUT転送バッファ26の空き数が閾値を越えたタイミングで、ERDYパケットをUSBホスト10に送信する。閾値は、2以上の任意の数とすることができる。ここで、ERDYパケットには、OUT転送バッファ26の空きバッファ数の情報が含まれているため、USBデバイス20は、USBホスト10にOUT転送バッファ26の空きバッファ数を通知する。ERDYパケットは、USBホスト10に通信準備が完了したことを示す準備完了パケットである。
【0046】
USBホスト10は、ERDYパケットに応答して、再度、USBデバイス20にDATAパケットを送信して、データ転送要求を行う(
図5のD)。USBデバイス20がDATAパケットを受信すると、プロトコル層ユニット23がOUT転送バッファ26の空き状況を確認する。OUT転送バッファ26の空きがある場合、USBデバイス20は、USBホスト10にACKパケットを送信して、転送完了を通知する(
図5のE)。なお、ACKパケットには、OUT転送バッファ26の空きバッファ数の情報が含まれているため、USBデバイス20は、USBホスト10にOUT転送バッファ26の空きバッファ数を通知する。また、OUT転送バッファ26に格納されているパケットデータを順番にシステムバス40に送出する。
【0047】
このように、USBデバイス20は、NRDYパケットを送信した後、OUT転送バッファ26の空きバッファ数が閾値よりも大きくなったタイミングで、ERDYパケットを送信する。すなわち、OUT転送バッファ26の空きが発生したタイミングではUSBデバイス20がERDYパケットを送信しない。OUT転送バッファ26の空きバッファ数が閾値を越えるまで、USBデバイス20は、ERDYパケットの送信を待機する。
【0048】
このようにすることで、USBホスト10へのデータ受信準備完了通知を行うタイミングを変更することが可能になる。よって、NRDYパケットとERDYパケットの送信回数を減らすことができる。NRDYパケット/ERDYパケットの送信回数及び時間を調整することができるため、転送効率を上げることができる。バッファ空待ち時間が長くなったとしても、システム全体の転送速度を向上することができる。
【0049】
さらに、レジスタ制御部25が空きバッファ数の閾値を調整可能にしてもよい。これにより、USBシステム100の通信状況に応じて閾値を最適化することができる。例えば、システムバス40等の仕様に応じて、閾値を調整することができる。USBインターフェース30でのデータ転送速度をモニタして、そのモニタ結果に応じて、閾値を設定するようにしてもよい。例えば、閾値を変化させていき、その時のデータ転送速度をUSBインターフェース30上で評価する。そして、最もデータ転送速度が高くなる時の閾値を、レジスタ制御部25のレジスタに記憶させる。このようにすることで、システムバス40に応じて最適な閾値を設定することができる。よって、データ転送速度をより高くすることができる。テストプログラムやハードウェアなどを用いて、レジスタ制御部25が閾値を自動的に設定するようにしてもよい。
【0050】
上記のデータ転送方法では、OUT転送バッファ26の空き状況を示す値として、OUT転送バッファ26の空きバッファ数を用いたが、これ以外の値を用いてもよい。例えば、OUT転送バッファ26の空き状況をバッファのデータ格納数で管理してもよい。そして、OUT転送バッファ26の空き状況を示す値を閾値と比較して、その比較結果に応じてERDYパケットを送信すればよい。
【0051】
(IN転送)
次に、USBホスト10からUSBデバイス20にデータパケットを送信するIN転送の処理について、
図6を用いて説明する。
図6は、IN転送バッファ27に転送するパケットデータがある場合のIN転送でのシーケンスを示す図である。
【0052】
まず、USBホスト10がACKパケットをUSBデバイス20に送信して、パケット要求を行う(
図6のA)。すると、プロトコル層ユニット23がIN転送バッファ27のデータ格納状況を確認する。
【0053】
IN転送バッファ27には、送信するパケットのパケットデータ(送信データ)があるので、USBホスト10は、DATAパケットに応答して、ACKパケットをUSBデバイス20に送信する(
図6のC)。なお、
図6のA、及びCのACKパケットには、要求データ数の情報が含まれている。USBデバイス20は、ACKパケットを受信したら、同様にDATAパケットをUSBホスト10に送信する(
図6のD)。この処理を繰り返して、データ通信を行う。このように、IN転送バッファ27に送信データが格納されている場合、USBホスト10からのACKパケットの送信と、USBデバイス20からのDATAパケットの送信が交互に行われる。
【0054】
次に、IN転送バッファ27の送信データがない場合について、
図7を用いて説明する。
図7は、IN転送バッファ27の送信データがない場合のIN転送でのシーケンスを示す図である。
【0055】
まず、USBホスト10がACKパケットをUSBデバイス20に送信して、パケット要求を行う(
図7のA)。すると、プロトコル層ユニット23がIN転送バッファ27のデータ格納状況を確認する。IN転送バッファ27に送信データが格納されておらず、USBデバイス20は、データの転送準備ができていない。したがって、USBデバイス20は、USBホスト10にNRDYパケットを送信して、送信できないことを伝えるパケット応答を行う(
図7のB)。NRDYパケットは、USBデバイス20にパケット転送を待機させる待機パケットである。
【0056】
データ準備待ち時間となって、USBホスト10は、IN転送バッファ27のデータ準備が完了するのを待つ。USBデバイス20は、NRDYパケットを送信した後、システムバス40からIN転送バッファ27に送信データを送出する。すなわち、DMAコントローラ24が、システムバス40を介して、メモリに記憶されている送信データをIN転送バッファ27に格納する。これにより、USBデバイス20は、データの転送準備を行う。
【0057】
USBデバイス20は、IN転送バッファ27の送信データの準備が完了したら、ERDYパケットをUSBホスト10に送信する(
図7のC)。すなわち、USBデバイス20は、IN転送バッファ27に送信データが格納され次第、USBホスト10に準備完了を伝えるERDYパケットを送信する。ERDYパケットは、USBホスト10に通信準備が完了したことを示す準備完了パケットである。ここで、ERDYパケットには、送信可能データ数の情報が含まれている。よって、USBデバイス20は、USBホスト10にIN転送バッファ27のデータ数を通知する。
【0058】
USBホスト10は、ERDYパケットに応答して、再度、USBデバイス20にACKパケットを送信して、パケット要求を行う(
図7のD)。USBデバイス20がACKパケットを受信すると、プロトコル層ユニット23がIN転送バッファ27のデータ格納状況を確認する。IN転送バッファ27に送信データがある場合、USBデバイス20は、USBホスト10にDATAパケットを送信する(
図7のE)。
【0059】
USBホスト10はDATAパケットに応答して、再度、USBデバイス20にACKパケットを送信して、パケット要求を行う(
図7のF)。プロトコル層ユニット23がIN転送バッファ27のデータ格納状況を確認する。IN転送バッファ27に送信データがない場合、USBデバイス20は、USBホスト10にNRDYパケットを送信して、送信できないことを伝えるパケット応答を行う(
図7のG)。
【0060】
USBホスト10は、
図7のBと同様に、NRDYパケットを受信した後、IN転送バッファ27に送信データがバッファされるまで待機する。すなわち、データ準備待ち時間となって、USBホスト10は、IN転送バッファ27に送信データが格納されるのを待つ。USBデバイス20は、NRDYパケットを送信した後、IN転送バッファ27のデータ転送の準備を行う。すなわち、DMAコントローラ24が、メモリに格納されている送信データをシステムバス40を介してIN転送バッファ27に送出する。これにより、IN転送バッファ27に、送信データがバッファされる。よって、IN転送バッファ27に格納されている送信データ数を増やすことができる。
【0061】
USBデバイス20は、IN転送バッファ27の送信データの準備が完了したら、
図7のCと同様に、ERDYパケットをUSBホスト10に送信する(
図7のH)。USBホスト10は、
図7のDと同様に、ERDYパケットに応答して、再度、USBデバイス20にACKパケットを送信して、パケット要求を行う(
図7のI)。USBデバイス20がACKパケットを受信すると、プロトコル層ユニット23がIN転送バッファ27のデータ格納状況を確認する。IN転送バッファ27に送信データが準備されている場合、USBデバイス20は、USBホスト10にDATAパケットを送信する(
図7のJ)。
【0062】
なお、
図7のA、D及びFのACKパケットには、要求データ数の情報が含まれており、USBデバイス20には送信要求されたデータ数が通知される。したがって、USBデバイス20は、送信要求されたデータ数のパケットをUSBホスト10に送信することができる。
【0063】
USBホスト10からのパケット要求に対して、システムバス40側のデータ転送が遅いと、USBデバイス20がIN転送バッファ27に送信データを準備することができなくなってしまう。すなわち、IN転送バッファ27に準備されている送信データが無くなってしまい、USBデバイス20がNRDYパケット応答を行う。システムバス40からの送信データがIN転送バッファ27に格納され次第、USBデバイス20は、データ転送の準備ができたことをERDYパケットによってUSBホスト10に通知する。USBホスト10はUSBデバイス20からの通知に応答して、ACKパケットによってUSBデバイス20へパケット要求を行う。これにより、USBホスト10がDATAパケットを受信する。
【0064】
IN転送バッファ27に送信データがない場合、USBデバイス20には、以下に示す問題が生じる恐れがある。IN転送バッファ27に送信データが準備できる都度、USBデバイス20がERDY応答を行っている。したがって、NRDYパケットとERDYパケットの転送回数が多くなってしまい、全体からみた転送速度が遅くなる場合がある。
【0065】
そこで、本実施の形態では、以下に示す制御方法によって、データ通信速度の向上を図っている。以下、本実施の形態にかかるデータ転送方法について、
図8を用いて説明する。
【0066】
まず、USBホスト10がACKパケットをUSBデバイス20に送信して、パケット要求を行う(
図8のA)。すると、プロトコル層ユニット23がIN転送バッファ27のデータ格納状況を確認する。IN転送バッファ27に送信データが格納されておらず、USBデバイス20は、データの転送準備ができていない。したがって、USBデバイス20は、USBホスト10にNRDYパケットを送信して、送信できないことを伝えるパケット応答を行う(
図8のB)。NRDYパケットは、USBデバイス20に通信を待機させる待機パケットである。
【0067】
データ準備待ち時間となって、USBホスト10は、IN転送バッファ27のデータ準備が完了するのを待つ。USBデバイス20は、NRDYパケットを送信した後、送信データをシステムバス40からIN転送バッファ27に送出する。すなわち、DMAコントローラ24が、システムバス40を介して、メモリに記憶されている送信データをIN転送バッファ27に格納する。これにより、USBデバイス20がデータの転送準備を行う。
【0068】
データ準備待ち時間において、プロトコル層ユニット23は、IN転送バッファ27に格納されている送信データのデータ数と、閾値を比較する。そして、データ数が閾値を越えたら、USBデバイス20がERDYパケットをUSBホスト10に送信する(
図8のC)。すなわち、USBデバイス20は、IN転送バッファ27に送信データが準備できたタイミングでは、USBホスト10に準備完了を伝えるERDYパケットを送信しない。そして、OUT転送バッファ26のデータ数が閾値を越えたタイミングで、ERDYパケットをUSBホスト10に送信する。閾値は、2以上の任意の数とすることができる。ERDYパケットには、OUT転送バッファ26の送信可能データ数の情報が含まれているため、USBデバイス20は、USBホスト10にOUT転送バッファ26IN転送バッファ27のデータ数を通知する。ERDYパケットは、USBホスト10に通信準備が完了したことを示す準備完了パケットである。
【0069】
USBホスト10は、ERDYパケットを受信すると、ERDYパケットに応答して、ACKパケットをUSBデバイス20に送信する(
図8のD)。USBデバイス20は、ACKパケットを受信すると、ACKパケットに応答して、DATAパケットをUSBホスト10に送信する(
図8のE)。
【0070】
なお、
図8のA、及びDのACKパケットには、要求データ数の情報が含まれており、USBデバイス20には送信要求されたデータ数が通知される。したがって、USBデバイス20は、送信要求されたデータ数のパケットをUSBホスト10に送信することができる。USBデバイス20は、ACKパケットで通知された要求データ数のパケットを送信できるように、システムバス40からIN転送バッファ27に送信データを送出して、データ転送の準備を行う。
【0071】
このように、システムバス40からのパケットデータが準備できたことを通知するERDYパケットの送信を1パケット準備できる都度行うのではなく、複数パケット準備できた後に行っている。すなわち、複数のパケットデータをIN転送バッファ27に格納した後、USBデバイス20がERDYパケットを送信する。このような制御によって、NRDYパケットとERDYパケットの送信回数を減らすことができる。NRDYパケット/ERDYパケットの送信回数及び時間を調整することができるため、システム全体としてデータ転送効率を上げることができる。
【0072】
さらに、レジスタ制御部25が格納数の閾値を調整可能にしている。これにより、USBシステム100に応じて閾値を最適化することができる。例えば、システムバス40等の仕様に応じて、閾値を調整することができる。USBインターフェース30でのデータ転送速度をモニタして、そのモニタ結果に応じて、閾値を設定するようにしてもよい。例えば、閾値を変化させていき、その時のデータ転送速度をUSBインターフェース30上で評価する。そして、最もデータ転送速度が高くなる時の閾値を、レジスタ制御部25のレジスタに記憶させる。このようにすることで、システムバス40に応じて最適な閾値を設定することができる。よって、データ転送速度をより高くすることができる。テストプログラムやハードウェアなどを用いて、レジスタ制御部25が閾値を自動的に設定するようにしてもよい。
【0073】
上記のデータ転送方法では、IN転送バッファ27のデータ格納状況を示す値として、IN転送バッファ27に格納されているデータ数を用いたが、これ以外の値を用いてもよい。例えば、IN転送バッファ27のデータ格納状況を空きバッファ数で管理してもよい。そして、IN転送バッファ27の格納状況を示す値を閾値と比較して、その比較結果に応じてERDYパケットを送信すればよい。もちろん、OUT転送バッファ26とIN転送バッファ27とで異なる閾値を用いてもよく、同じ閾値を用いてもよい。
【0074】
なお、上記の説明では、IN転送、及びOUT転送の両方について、閾値によるバッファ管理を行ったが、IN転送、及びOUT転送の一方のみについて、閾値によるバッファ管理を行ってもよい。
【0075】
実施の形態2.
本実施の形態にかかるUSBデバイス20、及びUSBシステム100について
図9を参照して説明する。
図9は、USBシステム100の構成を示す図である。USBシステム200は、USBデバイス20とUSBホスト10とUSBインターフェース30を備えている。USBデバイス20は、システムバス40とバッファ28と通信制御部29とを備えている。
【0076】
USBインターフェース30は、USBホスト10との間でパケットを送受信する。バッファ28は、USBインターフェース30を介して送信又は受信するパケットのパケットデータを複数格納する。システムバス40は、バッファ28に格納されたパケットデータを転送する。通信制御部29は、バッファ28の空き状況又は格納状況を示す値と閾値とを比較し、比較結果に応じてUSBホスト10に通信準備が完了したことを示す準備完了パケットを送信する。このようにするとで、実施の形態1と同様の効果を得ることができ、データ転送速度を向上することができる。なお、実施の形態2と実施の形態1を適宜組み合わせてもよい。
【0077】
実施の形態1、又は2にかかるUSBデバイス20におけるデータ転送処理のうちの一部又は全部は、コンピュータプログラムによって実行されても良い。上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【0078】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。