(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-16
(45)【発行日】2023-10-24
(54)【発明の名称】USBデバイス、および、USBデバイスにおける制御方法
(51)【国際特許分類】
G06F 13/38 20060101AFI20231017BHJP
【FI】
G06F13/38 310C
G06F13/38 340C
G06F13/38 350
(21)【出願番号】P 2022032641
(22)【出願日】2022-03-03
【審査請求日】2022-03-03
(73)【特許権者】
【識別番号】000227205
【氏名又は名称】NECプラットフォームズ株式会社
(74)【代理人】
【識別番号】100106909
【氏名又は名称】棚井 澄雄
(74)【代理人】
【識別番号】100134544
【氏名又は名称】森 隆一郎
(74)【代理人】
【識別番号】100149548
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100162868
【氏名又は名称】伊藤 英輔
(72)【発明者】
【氏名】関塚 伸一
【審査官】打出 義尚
(56)【参考文献】
【文献】特開2013-020284(JP,A)
【文献】特開2018-005561(JP,A)
【文献】特開2015-011449(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/38
(57)【特許請求の範囲】
【請求項1】
ホスト装置から受信のための第1の主転送バッファと、
前記ホスト装置への送信のための第2の主転送バッファと、
前記ホスト装置との受信および送信に使用可能な2つ以上の副転送バッファであって、前記ホスト装置から受信、または、前記ホスト装置への送信のための優先順位が各々に設定された前記2つ以上の副転送バッファと、
前記第1の主転送バッファが使用不可と判断した場合、前記ホスト装置から受信における優先順位に従い前記副転送バッファが使用可能かを順次判断し、使用可能と判断された前記副転送バッファがある場合、該副転送バッファを用いて前記ホスト装置から送信されるパケットの処理を行い、前記第2の主転送バッファが使用不可と判断した場合、前記ホスト装置への送信における優先順位に従い前記副転送バッファが使用可能かを順次判断し、使用可能と判断された前記副転送バッファがある場合、該副転送バッファを用いて前記ホスト装置へ送信するパケットの処理を行う制御手段と
を備えた、USBデバイス。
【請求項2】
前記制御手段は、
前記ホスト装置との直近の所定時間内のバッファの使用状況またはデータの転送量に基づき、前記受信または送信用に使用可能な副転送バッファの確保・解放を行い、前記ホスト装置との送信または受信のパケット処理を行う
請求項1
に記載のUSBデバイス。
【請求項3】
前記制御手段は、
前記ホスト装置からの受信において、いずれのバッファも使用可能でない場合、通信の待機を示すパケットを前記ホスト装置に送信し、前記待機を示すパケットの送信後に、いずれかのバッファが使用可能となると準備完了を示すパケットを前記ホスト装置に送信する
請求項1
または2に記載のUSBデバイス。
【請求項4】
前記制御手段は、
前記ホスト装置への送信において、いずれのバッファも送信のためのデータがない場合、通信の待機を示すパケットを前記ホスト装置に通知し、前記待機を示すパケットの通知後に、いずれかのバッファに送信のためのデータが蓄えられた場合、通信準備が完了したことを示す準備完了を示すパケットを前記ホスト装置に送信する
請求項1から
3のいずれか1項に記載のUSBデバイス。
【請求項5】
前記制御手段は、バッファの使用が可能かの判断は、判断対象とするバッファに空きがあるか否かにより判断する、請求項1から
4のいずれか1項に記載のUSBデバイス。
【請求項6】
前記制御手段は、バッファの使用が可能かの判断は、判断対象とするバッファの使用可能容量が所定のしきい値より少なくなったか否かにより判断する、請求項1から
5のいずれか1項に記載のUSBデバイス。
【請求項7】
ホスト装置から受信のための第1の主転送バッファと、
前記ホスト装置への送信のための第2の主転送バッファと、
前記ホスト装置との受信および送信に使用可能な2つ以上の副転送バッファと
を備え、前記2つ以上の副転送バッファの各々に、前記ホスト装置から受信、または、前記ホスト装置への送信のための優先順位が設定されたUSBデバイスにおける制御方法であって、
前記第1の主転送バッファが使用不可と判断した場合、前記ホスト装置から受信における優先順位に従い前記副転送バッファが使用可能かを順次判断し、使用可能と判断された前記副転送バッファがある場合、該副転送バッファを用いて前記ホスト装置から送信されるパケットの処理を行い、
前記第2の主転送バッファが使用不可と判断した場合、前記ホスト装置への送信における優先順位に従い前記副転送バッファが使用可能かを順次判断し、使用可能と判断された前記副転送バッファがある場合、該副転送バッファを用いて前記ホスト装置へ送信するパケットの処理を行う
USBデバイスにおける制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はUSBデバイス、および、USBデバイスにおける制御方法に関する。
【背景技術】
【0002】
USB(Universal Serial Bus)規格は、パーソナルコンピュータ等のホスト装置と、ホスト装置の周辺装置とを接続し、データ通信をおこなうために策定されたシリアルバスインタフェース規格である。従来のインタフェース規格にはない簡便な接続性および拡張性などを特徴とし、マウス、キーボード、プリンタ、スキャナ、モデムなど、ホスト装置に対する周辺装置の多くがUSB規格に対応してきている。USB規格に準拠したデータ通信システムを実現するためには、USBデバイスのコントローラ内にバルク転送のために転送バッファを備えることが必要であり、そのようなバッファメモリを備えることによりホスト装置とUSBデバイス間で大容量データ転送を効率的に行うことが可能となる。
【0003】
特許文献1は、2つの受信バッファを備え、1つの受信バッファにデータが格納されると他の受信バッファにデータを格納するUSBデバイスを開示する。特許文献2は、受信バッファおよび送信バッファにおいて複数のFIFOメモリが設けられたUSBデバイスを開示する。
【先行技術文献】
【特許文献】
【0004】
【文献】登録実用新案第3072264号公報
【文献】特開2004-199402号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ホスト装置とのパケットの送受信がともに多いUSBデバイスでは、ホスト装置との受信用、送信用としてバッファを設ける必要が生じ得る。この際、時間的にパケットの送信の方が多い場合、あるいは、パケットの受信の方が多い場合とで、備えられたバッファを効率的に活用したパケットの転送を行うことができない。
【0006】
本発明は、上述の課題を解決すべくなされたもので、USBデバイス、および、USBデバイスにおける制御方法を提供することを目的としている。
【課題を解決するための手段】
【0007】
本発明の第1の態様によれば、USBデバイスは、ホスト装置から受信のための第1の主転送バッファと、前記ホスト装置への送信のための第2の主転送バッファと、前記ホスト装置との受信および送信に使用可能な2つ以上の副転送バッファであって、前記ホスト装置から受信、または、前記ホスト装置への送信のための優先順位が各々に設定された前記2つ以上の副転送バッファと、前記第1の主転送バッファが使用不可と判断した場合、前記ホスト装置から受信における優先順位に従い前記副転送バッファが使用可能かを順次判断し、使用可能と判断された前記副転送バッファがある場合、該副転送バッファを用いて前記ホスト装置から送信されるパケットの処理を行い、前記第2の主転送バッファが使用不可と判断した場合、前記ホスト装置への送信における優先順位に従い前記副転送バッファが使用可能かを順次判断し、使用可能と判断された前記副転送バッファがある場合、該副転送バッファを用いて前記ホスト装置へ送信するパケットの処理を行う制御手段とを備える。
【0008】
また本発明の第2の態様によれば、USBデバイスにおける制御方法は、ホスト装置から受信のための第1の主転送バッファと、前記ホスト装置への送信のための第2の主転送バッファと、前記ホスト装置との受信および送信に使用可能な2つ以上の副転送バッファとを備え、前記2つ以上の副転送バッファの各々に、前記ホスト装置から受信、または、前記ホスト装置への送信のための優先順位が設定されたUSBデバイスにおける制御方法であって、前記第1の主転送バッファが使用不可と判断した場合、前記ホスト装置から受信における優先順位に従い前記副転送バッファが使用可能かを順次判断し、使用可能と判断された前記副転送バッファがある場合、該副転送バッファを用いて前記ホスト装置から送信されるパケットの処理を行い、前記第2の主転送バッファが使用不可と判断した場合、前記ホスト装置への送信における優先順位に従い前記副転送バッファが使用可能かを順次判断し、使用可能と判断された前記副転送バッファがある場合、該副転送バッファを用いて前記ホスト装置へ送信するパケットの処理を行う。
【発明の効果】
【0009】
本発明によれば、これにより、ホスト装置とのパケットの送信および受信において、備えられたバッファを効率的に活用したパケットの転送を行うことができる、という効果が得られる。
【図面の簡単な説明】
【0010】
【
図1】本発明の一実施形態におけるUSBデバイスの構成を示すブロック図である。
【
図2】本発明の一実施形態における転送バッファa、転送バッファbの使用状況を管理するためのレジスタの一例を示す図である。
【
図3】本発明の一実施形態における受信バッファ制御部におけるホスト装置からのデータ受信のための処理を示すフローチャートである。
【
図4】本発明の一実施形態における送信バッファ制御部におけるホスト装置へのデータ送信のための処理を示すフローチャートである。
【
図5】本発明の一実施形態における送信バッファ制御部におけるDMAコントローラとの協働による、USBデバイスのメモリからバッファへのデータ転送のための処理を示すフローチャートである。
【
図6】本発明の一実施形態におけるUSBデバイスの受信バッファ制御部、送信バッファ制御部を、プロセッサを含むシステムで実現する際のハードウェア構成の一例を示す図である。
【
図7】本発明の一実施形態によるUSBデバイスの最小構成図を示す図である。
【発明を実施するための形態】
【0011】
以下、本発明の一実施形態によるUSBデバイスについて図面を参照して説明する。初めに、USBデバイスについて簡単に説明する。USBデバイスは、ホスト装置と接続されるデバイスであり、ホスト装置は、例えば、パーソナルコンピュータ等のホスト機能を有するUBS機器である。ホスト装置に接続されるUSBデバイスは、例えば、プリンタ、カメラ、メモリ等の周辺機器であり、USB通信のエンドポイントとなる。
【0012】
ホスト装置とUSBデバイスはUSBインタフェースを介して接続されている。ホスト装置とUSBデバイスは、USBインタフェースを介して、パケットの送受信を行う。ホスト装置は、USBデバイスとのデータ通信を制御する。例えば、ホスト装置がUSBデバイスに対してデータを送信する際のデータ転送要求や、ホスト装置がUSBデバイスからのデータの受信を求める際のパケット要求を行うことで、USBデバイスがデータを受信または送信する。ホスト装置とUSBデバイスはUSB規格に従ったプロトコルでデータを通信する。
【0013】
図1は一実施形態によるUSBデバイスの構成を示すブロック図である。USBデバイス1は、USBインタフェース11、物理層ユニット2、リンク層ユニット3、プロトコル層ユニット4、DMA(Direct Memory Access)コントローラ5、レジスタ制御部6、及びシステムバス12を備える。USBインタフェース11は、上記の通り、ホスト装置と接続のために使用され、ホスト装置との間でUSB通信を行うためのインタフェースとなる。物理層ユニット2は、通信における物理層のプロトコル処理を行う。リンク層ユニット3は、通信におけるリンク層のプロトコル処理を行う。プロトコル層ユニット4は、通信レイヤの他の上位層の処理、および、送受信されるパケットの処理を行う。DMAコントローラ5は、システムバス12を介して接続されるメモリと後述するバッファとの間において、直接データ転送を行うためのコントローラである。レジスタ制御部6は、USBデバイス1における通信状況やバッファの使用状況等のステータス管理や設定情報等を管理するための各種レジスタを制御する。この物理層ユニット2、リンク層ユニット3、プロトコル層ユニット4、DMAコントローラ5、及びレジスタ制御部6が、パケット通信を制御する通信制御部となる。
【0014】
プロトコル層ユニット4は、受信バッファ41、送信バッファ42、転送バッファ43、および、受信バッファ制御部44、送信バッファ制御部45を備える。受信バッファ41は、ホスト装置から受信するバケットを一時的に保存するためのバッファである。送信バッファ42は、ホスト装置へ送信するバケット一時的に保存するためのバッファである。なお、受信バッファ41は受信用の主転送バッファとして機能し、送信バッファ42は送信用の主転送バッファとして機能する。
【0015】
転送バッファ43は、1または複数のバッファから構成され、受信バッファおよび送信バッファとして利用可能に構成される。
図1では、転送バッファ43として、転送バッファa・43aと転送バッファb・43bという2つの転送バッファにより構成される例を示している。また、転送バッファa・43aは受信バッファとしての使用が優先されるように設定され、転送バッファb・43bは送信バッファとしての使用が優先されるように設定される。なお、転送バッファa・43aと転送バッファb・43bは受信用および送信用の副転送バッファとして機能する。なお、今後、単に「転送バッファ43」と記載した際には、転送バッファa・43aや転送バッファb・43bのような1または複数の転送バッファにより構成された受信用および転送用バッファという意味で用いる。
【0016】
受信バッファ制御部44は、受信バッファ41に空きがない、あるいは、使用容量が所定のしきい値を超えた(あるいは、使用可能容量が所定のしきい値以下となった)ことにより使用不可であるかを判断する。受信バッファ制御部44は、受信バッファ41が使用不可と判断した場合、優先順位の高い転送バッファa・43aが使用可能か判断し、使用可能であれば、転送バッファa・43aを用いたホスト装置からのパケット受信処理を行う。一方、受信バッファ制御部44は、転送バッファa・43aも使用不可と判断した場合、次の優先順位となる転送バッファb・43bが使用可能か判断する。転送バッファb・43bが使用可能であれば、受信バッファ制御部44は、転送バッファb・43bを用いたホスト装置からのパケット受信処理を行う。一方、転送バッファb・43bも使用不可の場合、受信バッファ制御部44は、ホスト装置に転送を待機させる待機パケットを送り、いずれかのバッファが使用可能となるのを待つ。いずれかのバッファが使用可能となると、受信バッファ制御部44は、通信準備が完了したことを示す準備完了パケットをホスト装置に送り、使用可能となったバッファを用いたホスト装置からのパケット受信処理を行う。
【0017】
送信バッファ制御部45は、ホスト装置からデータ要求を受け、いずれのバッファにも転送するデータがない場合、待機を示すパケットをホスト装置に通知する。また、送信バッファ制御部45は、待機を示すパケットの通知後に、いずれかのバッファに送信のためのデータが蓄えられた場合、通信準備が完了したことを示す準備完了を示すパケットをホスト装置に送信し、ホスト装置へのデータの転送のための処理を行う。
【0018】
また、受信バッファ制御部44、送信バッファ制御部45は、転送および送信に利用可能な転送バッファa・43a、転送バッファb・43bの使用状況に関するレジスタを、各バッファのステータスに応じて更新する。加えて、受信バッファ制御部44、送信バッファ制御部45は、バッファを利用したデータ(パケット)の送信、及び、受信に使用するバッファにおいてFIFO(First In First OUT)となるようにバッファへのデータの書き込み、出力の順番管理を行う。
【0019】
図2は、転送バッファa・43a、転送バッファb・43bの使用状況を管理するためのレジスタの一例を示す。このレジスタは、プロトコル層ユニット4内に設けられる。
図2に示すように、レジスタは、転送バッファa・43a用のレジスタ21と、転送バッファb・43b用のレジスタ22により構成される。レジスタ21、22は、転送バッファが使用されていないことを示す“0”、受信用に使用されていることを示す“1”、送信用に使用されていることを示す“2”により、転送バッファa・43a、転送バッファb・43bの使用状況のステータス管理が行われる。
【0020】
例えば、受信バッファ41がバッファの使用可能容量から使用不可となった場合で、かつ、転送バッファa・43aが使用されていない状態で、受信用に使用する場合、レジスタ21は値“0”から“1”に更新される。さらに、受信バッファ41および転送バッファa・43aの使用可能容量から使用不可となった場合で、かつ、転送バッファb・43bが使用されてない状態で、転送バッファb・43bも受信用に使う場合、例えば、レジスタ22は値“0”から“1”に更新される。このようなレジスタによる使用状況の管理により、受信バッファ41および転送バッファa・43aの使用可能容量から使用不可となった状況において、転送バッファb・43bが送信用にすでに使用されている場合(レジスタ22の値“2”となっている場合)、転送バッファb・43bは送信用に使えないことが分かるようになる。
【0021】
同様に、送信バッファ42がバッファの使用可能容量から使用不可となった場合で、かつ、転送バッファb・43bが使用されていない状態で、送信用に使用する場合、レジスタ22は値“0”から“2”に更新される。さらに、送信バッファ42および転送バッファb・43bの使用可能容量から使用不可となった場合で、かつ、転送バッファa・43aが使用されていない状態で、転送バッファa・43aも送信用に使う場合、レジスタ21は値“0”から“2”に更新される。なお、このようなレジスタによる使用状況の管理により、例えば、送信バッファ42および転送バッファb・43bの使用可能容量から使用不可となった際に、転送バッファa・43aが受信用に既に使用されている場合(レジスタ21の値“1”の際)、転送バッファa・43aは送信用に使えないことが分かるようになる。
【0022】
次に、USBデバイス1における受信バッファ制御部44の動作について説明する。
図3は、受信バッファ制御部44におけるホスト装置からのデータ受信のための処理を示すフローチャートである。受信バッファ制御部44は、ホスト装置からデータ転送要求の受信待ちを行う(S10)。受信バッファ制御部44は、ホスト装置からデータ転送要求の受信を受信すると(S10:Yes)、受信バッファ41が使用可能かの判断を行う(S11)。ここで、受信バッファ41が使用可能か否かは、受信のために受信バッファ41に空きがあるか否かにより判断する。
【0023】
受信バッファ41が使用可能と判断した場合(S11:Yes)、受信バッファ制御部44は、受信バッファ41において受信可能な容量に関する情報を含めて、ホスト装置のデータ転送要求に対する受領パケット(ACKパケット)を送信するための処理を行う(S14)。一方、受信バッファ41が使用可能でないと判断した場合(S11:No)、受信バッファ制御部44は、ステップS12に進む。
【0024】
ステップS12に進んだ際、受信バッファ制御部44は、転送バッファa・43aが使用可能かの判断を行う(S12)。転送バッファ43において初めに転送バッファa・43aについて使用可能かの判断を行うのは、転送バッファa・43aの受信のための使用の優先順位が転送バッファb・43bの受信のための使用の優先順位より高く設定されているためである。また、転送バッファa・43aが使用可能か否かは、ステップS11と同様の方法により行う。ただし、転送バッファa・43aが使用可能か否かの判断では、レジスタ21の値が“2”になっていない、すなわち、転送バッファa・43aが送信用に既に使用されていないことを前提とする。
【0025】
転送バッファa・43aが使用可能と判断した場合(S12:Yes)、受信バッファ制御部44は、転送バッファa・43aにおいて受信可能な容量に関する情報を含めて、ホスト装置のデータ転送要求に対する受領パケット(ACKパケット)を送信するための処理を行い(S14)、ステップS18に進む。一方、転送バッファa・43aが使用可能でないと判断した場合(S12:No)、受信バッファ制御部44は、ステップS13に進む。
【0026】
ステップS13に進んだ際、受信バッファ制御部44は、転送バッファb・43bが使用可能かの判断を行う(S13)。転送バッファ43において転送バッファa・43aの次に転送バッファb・43bが使用可能かの判断を行うのは、転送バッファの受信用としての使用の優先順位として、転送バッファa・43aの次の優先順位が転送バッファb・43bとなっているからである。また、転送バッファb・43bが使用可能か否かは、ステップS11と同様の方法により行う。ただし、転送バッファb・43bが使用可能か否かの判断では、レジスタ22の値が“2”になっていない、すなわち、転送バッファb・43bが送信用に既に使用されていないことを前提とする。
【0027】
転送バッファb・43bが使用可能と判断した場合(S13:Yes)、受信バッファ制御部44は、転送バッファb・43bにおいて受信可能な容量に関する情報を含めて、ホスト装置のデータ転送要求に対する受領パケット(ACKパケット)を送信するための処理を行い(S14)、ステップS18に進む。
【0028】
一方、転送バッファb・43bが使用可能でない判断した場合(S13:No)、受信バッファ制御部44は、ホスト装置に、USBデバイス1へのパケット転送を待機させる待機パケット(NRDYパケット)を送信するための処理を行う(S15)。受信バッファ制御部44は、転送用として使用しているバッファのいずれか使用可能となったか判断する(S16)。なお、転送用として使用しているバッファのいずれか使用可能となったかの判断は、ステップS11と同様である。転送用として使用しているバッファのいずれかが使用可能となったと判断すると(S16:Yes)、受信バッファ制御部44は、USBデバイス1における受信が可能となった、すなわち、USBデバイス1における通信準備が完了したことを示す準備完了パケット(ERDYパケット)をホスト装置に送信するための処理を行い(S17)、ステップS18に進む。
【0029】
ステップS18において、受信バッファ制御部44は、ホスト装置から受信するパケットを受信用として利用しているバッファの空き領域に保存する処理を行う。続いて、受信バッファ制御部44は、ホスト装置から受信するパケットが無くなったかを判断する(S19)。受信バッファ制御部44は、ホスト装置から受信するパケットが無くなった場合(S19:Yes)、ステップS10に進み、ホスト装置からの新たなデータ(パケット)の送信要求を待つ。一方、装置から受信するパケットがまだある場合(S19:No)、受信バッファ制御部44は、次のデータの受信のためにステップS11に進む。
【0030】
なお、受信バッファ制御部44は、受信用として使用しているバッファに蓄積されたデータをDMAコントローラ5と協働してUSBデバイス1のメモリに転送する処理も並行して行う。この処理において、転送バッファb・43bを受信用に使用していた際、転送バッファb・43bのデータを全てUSBデバイス1のメモリへ転送し終えた場合、受信バッファ制御部44は、転送バッファb・43bの使用状況を示すレジスタ22の値を“1”(受信として使用)から“0”(不使用)に変更する。また、転送バッファa・43aを受信用に使用していた際、転送バッファa・43aのデータも全てUSBデバイス1のメモリへ転送し終えた場合、受信バッファ制御部44は、転送バッファa・43aの使用状況を示すレジスタ21の値を“1”(受信として使用)から“0”(不使用)にさらに変更する。
【0031】
なお、受信バッファ制御部44は、バッファが使用可能か否かの判断をバッファに空きがあるか否かにより判断する(S11、S12、S13)として説明したが、これに限定されるものではない。例えば、受信バッファ制御部44は、バッファの空きが所定のしきい値以下となった場合に空きがないと判断しても良い。この場合、ステップS14での空き容量に関する情報は、空きがないと判断したバッファの残り空き容量と、受信のために追加的に使用する転送バッファがある場合、その転送バッファの空き容量とを加えた容量としてもよく、受信バッファ制御部44は、その容量に関する情報をACKパケットとともにホスト装置に送信するための処理を行う。
【0032】
次に、USBデバイス1における送信バッファ制御部45の動作について説明する。
図4は、送信バッファ制御部45におけるホスト装置へのデータ送信のための処理を示すフローチャートである。送信バッファ制御部45は、ホスト装置からデータ要求を示すACKパケットを受信したか判断する(S20)。なお、ホスト装置からのデータ要求を示すACKパケットは、送信を求める要求のほかUSBデバイス1がホスト装置に送信したいデータがあるかを問い合わせる要求としても使用され、ホスト装置にUSBデバイス1から送信を受け得るデータ量を示すデータも含む。
【0033】
データ要求を示すACKパケットを受信した際(S20:Yes)、送信バッファ制御部45は、送信用として使用しているバッファにデータが蓄積されているか判断する(S21)。なお、送信用として使用しているバッファは、送信バッファ42、および、レジスタ21,22において、送信用に使用を示す値“2”を示す転送バッファ43である。
【0034】
バッファにデータが蓄積されている場合(S21:Yes)、送信バッファ制御部45は、送信用として使用しているバッファへ蓄積されたデータについて、バッファからホスト装置への送信がFIFOとなるように、バッファのデータをパケットとして出力するための処理を行う(S26)。
【0035】
バッファにデータが蓄積されていない、すなわち、USBデバイス1からホスト装置に送るデータがない場合(S21:No)、送信バッファ制御部45は、ホスト装置に、USBデバイス1からパケット転送を待機させる待機パケット(NRDYパケット)を送信するための処理を行う(S22)。続いて、送信バッファ制御部45は、いずれかのバッファにホスト装置への転送のためのデータが蓄積されたかを判断する(S23)。
【0036】
いずれかのバッファにホスト装置への転送のためのデータが蓄積された場合(S23:Yes)、送信バッファ制御部45は、USBデバイス1において送信可能となった、すなわち、USBデバイス1における通信準備が完了したことを示す準備完了パケット(ERDYパケット)をホスト装置に送信するための処理を行う(S24)。なお、送信バッファ制御部45は、準備完了パケットの送信において、USBデバイス1から送信可能なデータの容量を示す情報も併せて送信させるようにする。
【0037】
送信バッファ制御部45は、準備完了パケットに対する応答としてホスト装置からACKパケットを受信する(S25)。なお、このホスト装置からのACKパケットには、ホスト装置にてUSBデバイス1から受信可能なデータ量に関する情報も含まれる。
【0038】
ステップS25の後、送信バッファ制御部45は、送信用として使用しているバッファへ蓄積されたデータに関し、バッファからホスト装置への送信がFIFOとなるように、バッファのデータをパケットとして出力するための処理を行う(S26)。
【0039】
ステップS26の後、送信バッファ制御部45は、転送バッファb・43bおよび/または転送バッファa・43aに蓄積されていたデータの転送状況に応じてレジスタ21,22の更新処理を行う(S27)。この処理において、送信バッファ制御部45は、転送バッファa・43aを送信用に使用していた際、転送バッファa・43aのデータを全てホスト装置へ送信し終えた場合、転送バッファa・43aの使用状況を示すレジスタ21の値を“2”(送信用に使用)から“0”(不使用)に変更する。また、転送バッファb・43bを送信用に使用していた際、転送バッファb・43bのデータをホスト装置へ送信し終えた場合、送信バッファ制御部45は、転送バッファb・43bの使用状況を示すレジスタ22の値を“2”(送信用に使用)から“0”(不使用)にさらに変更する。
【0040】
ホスト装置に送信すべきデータが無くなると(S28:Yes)、送信バッファ制御部45は、USBデバイス1からの送信終了に関する処理を行い、次のホスト装置からのデータ要求に備え、ステップS20に戻る。一方、ホスト装置に送信すべきデータがまだある場合(S28:No)、送信バッファ制御部45は、さらにデータをホスト装置に送信するためにステップS25に戻る。
【0041】
次に、USBデバイス1における送信バッファ制御部45のDMAコントローラ5との協働動作について説明する。
図5は、送信バッファ制御部45におけるDMAコントローラ5との協働による、USBデバイス1のメモリからバッファへのデータ転送のための処理を示すフローチャートである。送信バッファ制御部45は、USBデバイス1のメモリからバッファへのデータの書き込み要求があるかを判断する(S30)。送信バッファ制御部45は、USBデバイス1のメモリからバッファへのデータの書き込み要求があると(S30:Yes)、送信バッファ42が使用可能かの判断を行う(S31)。ここで、送信バッファ42が使用可能か否かは、送信バッファ42に空きがあるか否かにより判断する。
【0042】
送信バッファ42が使用可能と判断した場合(S31:Yes)、送信バッファ制御部45は、送信バッファ42において書込み可能な容量等の情報を含めて、DMAコントローラ5にデータ転送処理を指示し、バッファへの書き込みを行わせる(S34)。一方、送信バッファ42が使用可能でないと判断した場合(S31:No)、送信バッファ制御部45は、ステップS32に進む。
【0043】
ステップS32に進んだ際、送信バッファ制御部45は、転送バッファb・43bが使用可能かの判断を行う(S32)。転送バッファ43において初めに転送バッファb・43bが使用可能かの判断を行うのは、転送バッファb・43bの送信のための使用の優先順位が転送バッファa・43aの送信のための使用の優先順位より高く設定されているためである。また、転送バッファb・43bが使用可能か否かは、ステップS31と同様の方法により行う。ただし、転送バッファb・43bが使用可能か否かの判断では、レジスタ22の値が“1”になっていない、すなわち、転送バッファb・43bが受信用に既に使用されていないことを前提とする。
【0044】
送信バッファ制御部45は、転送バッファb・43bが使用可能と判断した場合(S32:Yes)、受信バッファ制御部44は、転送バッファb・43bにおいて書込み可能な容量等の情報を含めて、DMAコントローラ5にデータ転送処理を指示し、バッファへの書き込みを行わせる(S34)。一方、転送バッファb・43bが使用可能でない判断した場合(S32:No)、送信バッファ制御部45は、ステップS33に進む。
【0045】
ステップS33に進んだ際、送信バッファ制御部45は、転送バッファa・43aが使用可能かの判断を行う(S33)。転送バッファ43において転送バッファb・43bの次に転送バッファa・43aが使用可能かの判断を行うのは、転送バッファの送信用としての使用の優先順位として、転送バッファb・43bの次の優先順位が転送バッファa・43aとなっているからである。また、転送バッファa・43aが使用可能か否かは、ステップS31と同様の方法により行う。ただし、転送バッファa・43aが使用可能か否かの判断では、レジスタ21の値が“1”になっていない、すなわち、転送バッファa・43aが受信用に既に使用されていないことを前提とする。
【0046】
転送バッファa・43aが使用可能と判断した場合(S33:Yes)、受信バッファ制御部44は、転送バッファa・43aにおいて書込み可能な容量等の情報を含めて、DMAコントローラ5にデータ転送処理を指示し、バッファへの書き込みを行わせる(S34)。
【0047】
一方、転送バッファa・43aが使用可能でない判断した場合(S33:No)、送信バッファ制御部45は、DMAコントローラ5に対して、USBデバイス1のメモリからバッファへのデータ転送を待機させる指示を行う(S36)。送信バッファ制御部45は、送信用として使用しているバッファのいずれか使用可能となるかを判断するためにステップS31に戻る。
【0048】
ステップS34の後、送信バッファ制御部45は、転送バッファ43へのデータの書き込み状況に応じて、レジスタ21,22の更新を行う(S35)。送信バッファ制御部45は、転送バッファb・43bを送信用に使用する際、転送バッファb・43bの使用状況を示すレジスタ22の値を“0”(不使用)から“2”(送信用に使用)に変更する。また、転送バッファa・43aを受信用にさらに使用する際、転送バッファa・43aの使用状況を示すレジスタ21の値を“0”(不使用)から“2”(送信用に使用)にさらに変更する。
【0049】
送信バッファ制御部45は、USBデバイス1のメモリからバッファに転送すべきデータが無くなったかを判断する(S37)。送信バッファ制御部45は、USBデバイス1のメモリからバッファに転送すべきデータが無くなった場合(S37:Yes)、次のバッファへの書き込み要求があるかを判断するために、ステップS30に進む。USBデバイス1のメモリからバッファに転送すべきデータがまだある場合(S37:No)、さらにデータの転送を受けるためにステップS31に進む。
【0050】
なお、送信バッファ制御部45は、バッファが使用可能か否かの判断をバッファに空きがあるか否かにより判断する(S31、S32、S33)としたが、これに限定されるものではない。例えば、送信バッファ制御部45は、バッファの空きが所定しきい値以下となった場合に空きがないと判断しても良い。この場合、ステップS34でのバッファへの書き込み可能容量は、空きがないとバッファの残り空き容量と、送信のために追加的に使用する転送バッファがある場合、その転送バッファの空き容量とを加えた容量としてもよい。
【0051】
以上のようにして、受信および送信用に利用可能な転送バッファ43を備えたUSBデバイス1は、受信データの量、あるいは、送信データの量に応じて、転送バッファを追加または開放しつつ使用することで、バッファの全容量を増減することが可能となる。これにより、ホスト装置に対して、NRDYパケット、ERDYの送受信回数を減らすことが出来、結果として、ホスト装置とUSBデバイス1の間のデータの速度の向上を図ることができる。
【0052】
なお、転送バッファ43は、転送バッファa・43aと転送バッファa・43aの2個の場合を例として説明したが、これに限定されるものではない。転送バッファ43は1個の転送バッファによりより構成され、受信用および送信用の優先順位がなく、受信用および受信用に使用可能としても良い。また、転送バッファ43は、3個以上の転送バッファにより構成されてもよい。この場合、各転送バッファは、受信用および送信用の優先順位が設定されており、かつ、受信用および送信用の優先順位が転送バッファ毎に異なるように設定されることが好ましい。これにより、転送バッファの転送用または受信用の使用の競合を避けることができ、転送用バッファの使用を効率的に行うことができるようになる。
【0053】
なお、転送用バッファが2個以上ある場合、各転送用バッファの受信用、送信用の優先順位を設定しなくても良い。この場合、受信バッファ制御部44、送信バッファ制御部45は、空いている転送バッファを順次、受信用または転送用として、確保することになる。
【0054】
また、受信バッファ制御部44、送信バッファ制御部45は直近の所定の期間のバッファの使用状況、または、ホスト装置とのデータの転送量を基に、使用可能な転送バッファが残っている場合に、全ての転送バッファあるいは一部の転送バッファを確保(割当て)する処理を行っても良い。なお、全ての転送バッファあるいは一部の転送バッファの確保は、転送バッファ43の使用状況を管理するためのレジスタの値を不使用“0”から受信用“1”、または、送信用“2”を示すように変更することで行うことができる。また、全ての転送バッファあるいは一部の転送バッファ43の確保後の開放は、確保した転送バッファ43に受信用または送信用のデータがないことを確認した後、転送バッファ43の使用状況を管理するためのレジスタの値を不使用“0”を示すように変更することで行うことができる。所定の期間は、例えば、5秒、10秒、20秒等である。転送バッファの確保は、例えば、所定期間における使用中のバッファの使用状況、または、ホスト装置とのデータの転送量と確保すべき転送バッファ数(あるいは、確保すべき転送バッファ容量)との関係を示すテーブルが設けられ、受信バッファ制御部44、送信バッファ制御部45はそのテーブルに従って、受信用あるいは送信用に必要な転送バッファ43を確保する。また、転送バッファ43の開放も、同様に、前述のテーブルに従い、受信バッファ制御部44、送信バッファ制御部45はそのテーブルに従って、確保後に確保不要となった受信用あるいは送信用の転送バッファを開放する。
【0055】
図6は、本開示のUSBデバイス1の受信バッファ制御部44、送信バッファ制御部45を、プロセッサを含むシステムで実現する際のハードウェア構成の一例を示す図である。
図6に示されるように、受信バッファ制御部44、または、送信バッファ制御部45は、CPU(Central Processing Unit)21、および、ROM(Read Only Memory)22、RAM(Random Access Memory)23等のメモリを含む。さらに、受信バッファ制御部44、送信バッファ制御部45は、外部の電子部品、例えば、各バッファや、リンク層ユニット3、DMAコントローラ5とのデータのやり取りや制御のためのインタフェース24を含む。
【0056】
ROM22には、受信バッファ制御部44や送信バッファ制御部45の機能を実現するためのプログラムコードが記憶される。CPU21は、ROM22によりプログラムコードを読み出し、RAM23の一時記憶領域を利用して演算処理を行うことで、受信バッファ制御部44や送信バッファ制御部45の機能を実現する。また、ROM22に記憶させるプログラムコードを書き換えることで、受信バッファ制御部44や送信バッファ制御部45の機能の追加・変更も可能となる。
【0057】
以上のように、
図1に示す受信バッファ制御部44や送信バッファ制御部45は、
図6に示される構成よって実現される。ただし、
図1の受信バッファ制御部44や送信バッファ制御部45が備える機能の実現手段は、以上説明した構成に限定されない。
【0058】
図7は、本発明の一実施形態によるUSBデバイス1の最小構成図を示す図である。USBデバイス1は、制御部10を備える。制御部10は、ホスト装置との受信または送信のための主転送バッファが使用可能か判断し、使用不可と判断した場合、受信および送信用に使用可能な副転送バッファを用いて、前記ホスト装置との送信または受信のパケット処理を行う。
【符号の説明】
【0059】
1 USBデバイス
2 物理層ユニット
3 リンク層ユニット
4 プロトコル層ユニット
5 DMAコントローラ
6 レジスタ制御部
11 USBインタフェース
12 システムバス
41 受信バッファ
42 送信バッファ
43 転送バッファ
43a 転送バッファa
43b 転送バッファb
44 受信バッファ制御部
45 送信バッファ制御部