JP2004334273A - デバイスおよびデバイスの制御方法およびデバイス制御用プログラム - Google Patents
デバイスおよびデバイスの制御方法およびデバイス制御用プログラム Download PDFInfo
- Publication number
- JP2004334273A JP2004334273A JP2003124988A JP2003124988A JP2004334273A JP 2004334273 A JP2004334273 A JP 2004334273A JP 2003124988 A JP2003124988 A JP 2003124988A JP 2003124988 A JP2003124988 A JP 2003124988A JP 2004334273 A JP2004334273 A JP 2004334273A
- Authority
- JP
- Japan
- Prior art keywords
- request
- value
- key
- data
- host
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】ホストからのリクエストの判別を少ない処理ステップで高速に行なう。
【解決手段】デバイスは、予め定められた一定処理によりリクエストから抽出されるキー7と対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリュー8が格納された記憶部6Bを有し、ホストから受信したリクエストから一定処理によってキー7を作成する処理と、作成されたキー7に対応するバリュー8を記憶部6Bから検索する処理と、検索されたバリュー8に基づいて当該リクエストに応じた処理とを実行する。
【選択図】 図1
【解決手段】デバイスは、予め定められた一定処理によりリクエストから抽出されるキー7と対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリュー8が格納された記憶部6Bを有し、ホストから受信したリクエストから一定処理によってキー7を作成する処理と、作成されたキー7に対応するバリュー8を記憶部6Bから検索する処理と、検索されたバリュー8に基づいて当該リクエストに応じた処理とを実行する。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、デバイスおよびデバイスの制御方法およびデバイス制御用プログラムに関する。さらに詳述すると、本発明は、USBデバイスおよびUSBデバイスの制御方法およびUSBデバイス制御用プログラムに関する。
【0002】
【従来の技術】
USB(Universal Serial Bus)は、パーソナルコンピュータの周辺機器のインターフェースとして、広く利用されている。USBのバスは差動シリアルバスであり、システムはホスト主導となっている。USBバスに接続されたUSBデバイスは、USBホスト(パーソナルコンピュータなど)に対して割り込みをかけてデータの転送を行うのではなく、必ずUSBホストからのリクエストにUSBデバイスが応答して通信を行うという特徴がある。また、USBではプラグアンドプレイとホットプラグに対応しており、USBホストの電源を入れたままで、USBバスにUSBデバイスを接続できる。USBデバイスの接続後、USBホストはUSBデバイスの構成を認識してドライバ等の必要なソフトウェアをインストールし、その後、USBデバイスが使用可能となる。
【0003】
USBホストは、デバイスの構成情報が記述されているディスクリプタと呼ばれるデータを、USBデバイスから受信し、当該ディスクリプタを元にUSBデバイスを認識し、必要なソフトウェアをインストールする。USBデバイスは、USBバスに接続した後、USBホストからのリクエストを受信し、このディスクリプタをUSBホストに送信する必要がある。標準的なディスクリプタとしては、例えば次のものがある。第1にデバイスディスクリプタがある。これは、VendorIDやProductIDなどの製品情報やデバイスクラス(デバイスの種類)といったUSBデバイスの基本的な情報を示す。第2にコンフィグレーションディスクリプタがある。これは、デバイスの電源供給方法や消費電力の情報、インターフェースの個数を示す。第3にインターフェースディスクリプタがある。これは、エンドポイントの個数やインターフェースのクラスを示す。第4にエンドポイントディスクリプタがある。これは、エンドポイントの転送タイプや最大パケットサイズ等を示す。第5にストリングディスクリプタがある。これは、各ディスクリプタが使用するストリングデータ(文字データ)を記述する。尚、上記に例示したディスクリプタ以外にも、デバイスクラスに特有のディスクリプタが存在する。
【0004】
USBバスには127台までUSBデバイスを接続する事が可能である。USBバスに接続されたUSBデバイスに、1から127までのいずれかのユニークアドレスを付加する事で、USBホストは個々のUSBデバイスを判別するようにしている。USBバスに接続直後は、デバイスアドレスは0であり、その後、USBホストからのリクエストによりユニークアドレスを付加される。当該リクエストが発行されると、USBデバイスは、指定されたアドレスをセットし、それ以降は自分のアドレスに対するリクエストにのみ応答する。
【0005】
USB通信は、USBホストとUSBデバイスのエンドポイント(EP)間で行う。エンドポイントは0〜15番まで持たせる事が可能で、1つのエンドポイントに、使用する転送の種類と転送方向を指定する。但し、EP0は例外でUSBデバイスのコンフィグレーションの為に予約されている。USBデバイスは、ホストからのリクエストがどのエンドポイントに対するものか判別し、対応した通信を行う。
【0006】
この様にエンドポイントを切替える事で、デバイスに複数の機能を持たせる事が可能となる。例えば図20のUSBデバイス100は、デバイス100Aとデバイス100Bの機能を備えている。このような構成は、例えばUSBキーボードにPS/2マウスの接続ポートがある場合などが該当する。この場合、キーボードとマウスの間ではPS/2のプロトコルで通信が行なわれ、ホストから見れば1つのUSBデバイスがキーボードとマウスの機能を持っている事になる。例えばこのUSBデバイス100では、EP0へのリクエストを受信した場合、デバイスコンフィグレーションの為の通信を行い、EP1へのリクエストを受信した場合、デバイス100AのデータをUSBホストに送信する通信を行う。また、EP2へのリクエストを受信した場合は、デバイス100BのデータをUSBホストに送信する通信を行う。
【0007】
図21及び図22にUSBの転送フォーマットを示す。USBには3つの転送単位があり、最小単位としてパケットがある。USBホストとUSBデバイスは、このパケットを数回送受信する事で、トランザクションを構成する。そして、トランザクションを組み合わせる事でトランスファを作る。
【0008】
パケットは、ホストやデバイスがバス時間を確保する単位であり、SYNC(同期)パターンで始まり、EOP(End Of Packet)までの連続したビット列で構成される。このパケットは、USBデバイス側のエンドポイントとしてのFIFO(First In First Out)バッファと、ホスト側のエンドポイントとしてのFIFOバッファ間で送受される。パケットのフォーマットを図21に示す。尚、図21(A)はトークンパケット(OUTパケット、INパケット、SETUPパケット)のフォーマットを示し、(B)はデータパケットのフォーマットを示し、(C)はハンドシェイクパケット(ACKパケット、NAKパケット)のフォーマットを示す。
【0009】
パケットの各フィールドは、サイズが決まっており(但し、DATAフィールドは例外で0〜1024バイトまで可変となる)、フィールド単位で次の様な意味がある。PID(Packet ID)フィールドは、パケットの種類を表す。ADDRフィールドは、転送の対象となるデバイスアドレスを示す。EPフィールドは、デバイスのエンドポイントを示す。DATAフィールドには、ホストからのリクエスト内容や、各種データ(キーボードであれば入力データ、プリンタであれば印刷データなど)がセットされる。また、トークンパケットやデータパケットにおいては、エラーチェックの為に、CRC5フィールド、CRC16フィールドがある。CRC(Cyclic Redundancy Check)は、通信エラーの検出に使用され、エラー検出の対象となるデータからCRCコードを算出し、その値からエラーの有無をチェックできる。
【0010】
このパケットを複数組み合わせたトランザクションは、図22のようになっており、必ずUSBホストから発行されるトークンパケットから始まり、ハンドシェイクパケットで終るようになっている。USBデバイスは、USBホストからトークンパケットを受信すると、トークンパケット内のPIDフィールドの値からパケットの種類を判別し、ADDRフィールドの値から自分のアドレスに対するリクエストか否か判別し、自分へのリクエストであれば、トランザクションを形成する。
【0011】
さらに、トランザクションを複数回行う事で、トランスファと言う通信単位を構成する。トランスファには、(1)コントロール転送、(2)バルク転送、(3)インタラプト転送、(4)アイソクロナス転送、と言う4種類のフォーマットがあり、転送の目的に応じて使い分けられている。USBデバイスは、どの転送の場合も、トークンパケットのADDRフィールドおよびEPフィールドのチェックが必要である。
【0012】
特に、コントロール転送で使用されるSETUPトランザクションでは、USBデバイスは、SETUPパケットの後にUSBホストから送信されるデータパケット内のDATAフィールドの値から、USBホストからのリクエストの内容を判別しなければならない。当該リクエストの内容は、デバイスの構成情報(ディスクリプタ)の送信リクエストや、デバイス内のステータスのセット等である。このデータパケットのDATAフィールドは8バイトであり、bmRequest、bRequest、wValue、wIndex、wLengthの5つのフィールドに更に区分される。これらの各フィールドは表1に示す意味を持つ。また、リクエストの種類とその時のDATAフィールドのパターンを表2に示す。
【0013】
【表1】
【0014】
【表2】
【0015】
SETUPトランザクションを含む転送を行う場合、USBデバイスは表2に示す様なリクエストパターンを判別し、それに応じた通信を行う必要がある。尚、表2に示すリクエストは、標準デバイスリクエストと呼ばれるUSBデバイス共通のリクエストである。この他に、デバイスの種類(デバイスクラス)に応じて、特有のリクエストも存在する。
【0016】
従来、USBデバイスに実装されているUSB2.0コントローラでは、ほとんどの処理をハードウェア化することで、処理の高速化を図っている(例えば非特許文献1参照)。
【0017】
【非特許文献1】
インターネット<URL:http://www.cast−inc.com/cores/cusb2/index.shtml>
【発明が解決しようとする課題】
SETUPトランザクションにおいてUSBデバイスが行なうUSBホストからのリクエスト内容の判別をソフトウェアにより行なうと、例えば図23のフローチャートのようになる。DATAフィールド内の「bmRequestType」と「bRequest」から、リクエストがGET DESCRIPTOR(USBホストヘのディスクリプタ送信)であるかチェックする(図23のS101)。そして、GET DESCRIPTORの場合は、DATAフィールド内のwValue(2バイト)がディスクリプタタイプとインデックスを示している為、送信ディスクリプタの決定には図23に示す様なwValueの比較が必要となる(図23のS102,S103,S104…)。そして、当該比較回数は、USBデバイスが持つディスクリプタの数に比例し、ディスクリプタの数が増える程、多くの命令ステップが必要となる。このため、特にUSB2.0で定義されるハイスピードモードに対応するためには、超高速のコントローラ用CPUが必要となり、コスト高および消費電力が大きくなる等の問題がある。また、図23の処理をハードウェア化する場合、専用回路を組み込むためコスト高となる、回路の増設により消費電力が大きくなる、ハードウェア化に伴いソフトウェアで可能な柔軟な制御が困難となる、等の問題がある。このため従来技術では、特に携帯電話やPDA(Personal Digital Assistants)などの低消費電力機器に対して、USB2.0コントローラを導入することが困難であった。
【0018】
そこで本発明は、ホストからのリクエストの判別を少ない処理ステップで高速に行なうデバイスおよびデバイスの制御方法およびデバイス制御用プログラムを提供することを目的とする。
【0019】
【課題を解決するための手段】
かかる目的を達成するため、請求項1記載の発明は、ホストからのリクエストを受信し、該リクエストに応じた処理を実行するデバイスにおいて、予め定められた一定処理により前記リクエストから抽出されるキーと対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリューが格納された記憶手段を有し、ホストから受信したリクエストから前記一定処理によってキーを作成する処理と、上記作成されたキーに対応するバリューを前記記憶手段から検索する処理と、上記検索されたバリューに基づいて当該リクエストに応じた処理を実行するようにしている。
【0020】
また、請求項2記載の発明は、ホストからのリクエストを受信したデバイスに当該リクエストに応じた処理を実行させるデバイスの制御方法において、予め定められた一定処理により前記リクエストから抽出されるキーと対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリューを記憶手段に格納しておき、前記デバイスに、ホストから受信したリクエストから前記一定処理によってキーを作成する処理と、上記作成されたキーに対応するバリューを前記記憶手段から検索する処理と、上記検索されたバリューに基づいて当該リクエストに応じた処理を実行させるようにしている。
【0021】
また、請求項3記載のデバイス制御用プログラムは、ホストから受信したリクエストから、予め定められた一定処理によりキーを作成する手段と、前記キーと対応付けられる箇所に、該当リクエストに応じた処理に必要な情報を示すバリューが予め格納されている記憶手段から、上記作成されたキーに対応するバリューを検索する手段と、上記検索されたバリューに基づいて当該リクエストに応じた処理を実行する手段として、デバイスを機能させるようにしている。
【0022】
従って、リクエストの種類が増えても、リクエストに対する応答処理のステップは増加することがなく、当該応答処理が単純化され、高速に処理することが可能となる。
【0023】
また、請求項4記載の発明は、請求項3記載のデバイス制御用プログラムにおいて、前記キーはタグ、セット、ブロックの3つのフィールドで構成され、前記記憶手段は、対象リクエストに基づく前記セットの値をアドレスとして当該リクエストに基づく前記タグの値が格納されたタグ記憶部と、対象リクエストに基づく前記セットおよび前記ブロックの値をアドレスとして当該リクエストに関する前記バリューが格納されたバリュー記憶部とを有し、上記作成されたキーについて、前記セットの値をアドレスとする前記タグ記憶部の値と、前記タグの値とを比較し、一致する場合に、前記セットおよび前記ブロックの値をアドレスとして前記バリュー記憶部から前記バリューを読み出す手段として、デバイスを機能させるようにしている。
【0024】
従って、対象リクエストに基づいてキーが作成されると、このキーに対応した特定のバリューが得られる。
【0025】
【発明の実施の形態】
以下、本発明の構成を図面に示す実施形態に基づいて詳細に説明する。
【0026】
図1から図3に本発明のデバイス、デバイスの制御方法、デバイス制御用プログラムの実施の一形態を示す。特に本実施形態では、USBデバイスに本発明を適用した例について説明する。以下、本実施形態では、USBホスト(例えばパーソナルコンピュータなど)を単にホストとも呼び、USBデバイス(例えばマウスやキーボードなどのパーソナルコンピュータの周辺機器)を単にデバイスとも呼ぶ。
【0027】
このデバイス1は、ホストからのリクエストを受信し、該リクエストに応じた処理を実行するものであり、予め定められた一定処理によりリクエストから抽出されるキー7と対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリュー8が格納された記憶手段6を有し、ホストから受信したリクエストから一定処理によってキー7を作成する処理と、上記作成されたキー7に対応するバリュー8を記憶手段6から検索する処理と、上記検索されたバリュー8に基づいて当該リクエストに応じた処理を実行するようにしている。また、本実施形態のデバイス1は、例えば図3に示すように、ホストからのデータを受信する入力部3と、上述した各処理を実行する制御部4(例えばCPUやMPU等)と、ホストにデータを送信する出力部5とを有している。
【0028】
また、デバイス1の制御方法は、ホストからのリクエストを受信したデバイス1に当該リクエストに応じた処理を実行させる方法であり、予め定められた一定処理によりリクエストから抽出されるキー7と対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリュー8を記憶手段6に格納しておき、デバイス1に、ホストから受信したリクエストから一定処理によってキー7を作成する処理と、上記作成されたキー7に対応するバリュー8を記憶手段6から検索する処理と、上記検索されたバリュー8に基づいて当該リクエストに応じた処理を実行させるようにしている。
【0029】
また、デバイス制御用プログラムは、ホストから受信したリクエストから、予め定められた一定処理によりキー7を作成する手段と、キー7と対応付けられる箇所に、該当リクエストに応じた処理に必要な情報を示すバリュー8が予め格納されている記憶手段6から、上記作成されたキー7に対応するバリュー8を検索する手段と、上記検索されたバリュー8に基づいて当該リクエストに応じた処理を実行する手段として、デバイス1を機能させるようにしている。
【0030】
ここで、バリュー8が示す「リクエストに応じた処理に必要な情報」とは、例えば当該処理を実行するための命令(コマンド)や、当該処理の実行に用いるデータまたは当該処理の実行に必要となるパラメータ等である。当該命令や当該データ等そのものをバリュー8として設定しても良く、当該命令や当該データ等が格納されているメモリアドレスをバリュー8として設定しても良い。
【0031】
本実施形態では、ホストから送られてくるデータに対するデバイス1側での高速解析のために、ハッシュ(連想配列とも呼ばれる)を利用する。ハッシュにおいて関連付けられる二つ値を、本明細書ではキー7(Key)及びバリュー8(Value)とする。当該ハッシュの仕組は必ずしも限定されないが、処理の単純化および高速化の観点からは、シノニムの発生しないもの(即ち、リクエストとキー7とバリュー8とが1対1対1で対応するもの)が特に好ましい。例えば本実施形態では、ハッシュとして、図1に示す「1 Way Associative(ダイレクトマップとも呼ばれる)」を用いている。
【0032】
この場合、キー7はタグ7A(TAG)、セット7B(SET)、ブロック7C(BLOCK)の3つのフィールドで構成される。記憶手段6は、対象リクエストに基づくセット7Bの値をアドレスとして当該リクエストに基づくタグ7Aの値が格納されたタグ記憶部6A(Tag_rom)と、対象リクエストに基づくセット7Bおよびブロック7Cの値をアドレスとして当該リクエストに関するバリュー8が格納されたバリュー記憶部6B(Data_rom)とを有している。
【0033】
そして、ホストから受信したリクエストに基づいて作成されたキー7について、セット7Bの値をアドレスとするタグ記憶部6Aの値と、タグ7Aの値とを比較する。これら2つの値が一致する場合には、セット7Bおよびブロック7Cの値をアドレスとしてバリュー記憶部6Bからバリュー8を読み出す。これにより、対象リクエストに基づいてキー7が作成されると、このキー7に対応した特定のバリュー8が得られる。一方、ホストから受信したリクエストが対象リクエストでない場合は、当該非対象リクエストに基づいて作成されたキー7については、当該キー7におけるセット7Bの値をアドレスとするタグ記憶部6Aの値と、当該キー7におけるタグ7Aの値とは一致しない。この場合、当該非対象リクエストに対応したバリュー8は存在せず、バリュー8の取り出しは行なわない。
【0034】
例えば本実施形態では、SETUPトランザクションにおけるリクエスト内容の判別に、上記ハッシュを利用する。当該リクエスト内容は、SETUPパケット後にホストから受信するデータパケット内のDATAフィールドに、記述されている。そこで本実施形態では、SETUPパケット後にホストから受信するデータパケット内のDATAフィールドから、ハッシュのキー7を作成する。
【0035】
一方、当該リクエストの内容は主に、ディスクリプタの送信または各種ステータスのセットである。この場合、デバイス1では、リクエストがディスクリプタの送信であるか又はステータスのセットであるかを判断し、さらに、ディスクリプタの送信である場合は、どの種のディスクリプタを何バイトの送信サイズで送信するかを判断し、ステータスのセットである場合は、どのステータスをどの値にセットするかを判断する必要がある。そこで、例えば本実施形態では、リクエストがディスクリプタの送信である場合は、送信すべきディスクリプタがセットしてあるデータメモリ6Cのアドレスと、ディスクリプタのデフォルトの送信サイズとをバリュー8として設定し、リクエストがステータスのセットである場合は、セットすべきステータスのアドレスや値をバリュー8として設定するようにしている。
【0036】
以下に、キー7とバリュー8の設定例について説明する。例えば本例では、GET DESCRIPTOR(USBホストヘのディスクリプタ送信)、SET ADDRESS(デバイスアドレスのセット)、SET CONFIGURATION(デバイス1のコンフィグレーションのセット)、との3つのリクエストに対応したキー7とバリュー8の設定例を示す。また、デバイス1は、デバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェースディスクリプタ、エンドポイントディスクリプタの4つのディスクリプタのみ有するものとする。また、デバイス1が持つコンフィグレーション値は1のみとする。
【0037】
ホストから送信されるリクエストとDATAフィールドのビットパターンは表3の様になる。
【0038】
【表3】
【0039】
尚、リクエストされるディスクリプタのサイズやホストからセットされるユニークアドレスは、USBホストの環境に依存する為、表3では「x」と「n」で示した。また、表3中のディスクリプタのリクエストに、インターフェースディスクリプタとエンドポイントディスクリプタのパターンが無いのは、これらが個々にリクエストされず、コンフィグレーションディスクリプタのリクエストの際にまとめて送信される為である。
【0040】
次に、表3からキー7を設定する。表3の中で、ビットパターンが確定し尚且つ他のリクエストとビットパターンの異なるビットを取り出すと、表4の様になる。
【0041】
【表4】
【0042】
さらに、表4に基づいてキー7におけるタグ7A(TAG)、セット7B(SET)、ブロック7C(BLOCK)の各フィールドを設定すると、例えば表5のようになる。尚、表5中の「SET_2」はセット7Bの2ビット目となることを示しており、「SET_1:0」はセット7Bの1ビット目と3ビット目となることを示している。本例のセット7Bは「SET_2」と「SET_1:0」の計3ビットで構成する。
【0043】
【表5】
【0044】
以上の様に、ホストから受信したDATAフィールドから必要なビットを抽出してハッシュのキー7を作成すれば、各リクエストに応じたバリュー8を得ることができる。
【0045】
次に、ハッシュにより得られるバリュー8の設定例を示す。ディスクリプタの送信リクエストが発生した場合、送信ディスクリプタの判別が必要である。そこで例えば図2に示す様に、記憶手段6が有するデータメモリ6Cに予め各ディスクリプタをセットしておく。そして、ディスクリプタの送信リクエストから作成されるキー7については、送信すべきディスクリプタがセットされているアドレスと、送信サイズとを、ハッシュを利用して得られるバリュー8とする。例えば、バリュー8を4バイトとし、上位2バイトを用いて送信すべきディスクリプタがセットされているアドレスを指定し、下位2バイトを用いて送信サイズを指定する。従って、受信したDATAフィールドに対応するディスクリプタがセットされているアドレスと、ディスクリプタの送信サイズを、キー7に基づいて得られたバリュー8の値から取得することができる。
【0046】
尚、ホストからのリクエストでは、送信するディスクリプタのサイズも指定される為、ハッシュにより得られたデフォルトサイズと、ホストからのリクエストサイズを比較し、小さな方で送信するようにする。これは、USBでは、ホストから指定されるデータ長に対してデバイス1が持つデータ長が短い場合にはデバイス1のデータ長で転送することが許されている一方、逆にホストが指定するデータ長がデバイス1が持つデータ長よりも短い場合には、ホストが指定するデータ長で送信を行なう必要があるためである。
【0047】
ディスクリプタをホストへ送信する場合は、ハッシュを使用して取得したアドレスに基づいて、データメモリ6Cからデータを順にロードし、パケットフォーマットに従って送信する。
【0048】
一方、デバイス1のステータスをセットするSET ADDRESSやSET CONFIGURATIONの場合は、ディスクリプタのリクエストと区別する為に、例えばディスクリプタのリクエストでは得る事の無いビットパターン(例えばX00000000やX11110000等)をバリュー8に設定する。ハッシュによって得られたバリュー8が当該ビットパターンであれば、ディスクリプタのリクエストでは無いと判断し、例えば当該ビットパターンに応じて各ステータスのセットを行うようにする。
【0049】
尚、上記の例では、GET DESCRIPTOR、SET ADDRESS、SET CONFIGURATIONの3つのリクエストと4種のディスクリプタとに対応させたが、対象リクエストを増やしても、各リクエストのDATAフィールドのパターンは一意であり、キー7を構成し直すことで対応することが可能である。
【0050】
以上のように本発明によれば、ハッシュを用いることにより、デバイス1が備えるディスクリプタが増えても、送信すべきディスクリプタを判断する比較演算命令は増える事は無い。即ち、ディスクリプタの数に応じて比較演算命令を繰り返す必要は無い。従って、ハッシュの導入によりリクエストの内容判別の処理は単純化され、当該処理に要する時間を大幅に短縮できる。これにより、上記判別処理をCPUを用いてソフトウェアにより実現することができる。さらに、比較的性能の低い低速のCPUであっても、高速な処理が可能となることから、デバイス1の低消費電力化が図れる。また、ソフトウェアによる柔軟な制御も可能となる。本発明によって、携帯電話やPDAなどの低消費電力機器に対してもUSB2.0の高速転送コントローラの導入が可能となる。
【0051】
【実施例】
本願発明者等は、本発明に基づいてUSB2.0用コントローラの設計を実際に行なった。以下に、当該設計の内容を実施例として記載する。本実施例では、高速回路部を物理層に分離するUTMI(USB2.0 Tranceiver Macrocell Interface)仕様を採用して、USBデバイスに実装するUSB2.0用コントローラ10の設計を行った。UTMIは、USBバスから受信したシリアルデータを8ビットにパラレル変換し、トランシーバ側のバスに出力する。またトランシーバ側とのバスクロックにはUSBクロックの8分の1が使用される。このためUSBパケット処理をバイト単位で行える様にコントローラ10を設計した。
【0052】
本実施例では、ハイスピード(HS:480Mbps)モードへの対応を考えて、ホストからのリクエストに対するレスポンス時間の短縮を狙って設計を行なった。このために、コントローラ10内にハッシュコントローラ11(ハッシュモジュールとも呼ぶ)を実装し、リクエストに対する応答の高速化を行った。特に、本実施例では、ハッシュによる送信ディスクリプタの判別を導入した。本実施例では、リクエストを受信するUSBデバイス1が、「bRequest」と「wValue」の計4バイトにより送信ディスクリプタを決定する点に注目し、「bRequest」と「wValue」からハッシュのキー7を作成するようにした。キー7によって得られるバリュー8には、各ディスクリプタがセットされているデータメモリ6C内のアドレスとディスクリプタサイズを設定した。
【0053】
これにより、デバイス1はリクエストを受信して、ハッシュコントローラ11にキー7を入力するだけで、瞬時に送信ディスクリプタの情報を取得出来る。この方法を用いれば、デバイス1が持つディスクリプタの数が増えても、その判別処理の命令サイクル数は変化せず、リクエストに対するレスポンス時間に影響を与えない。
【0054】
さらに、データメモリ6Cにはパケットフォーマットに従ってディスクリプタをセットし、送信処理を簡単にした(図5参照)。これによりアドレスとサイズを元に、データメモリ6Cから順に値をロードしバスに送信するだけでパケット送信が行える。さらに、データ送信をファームウェアで行うと、多くの命令サイクルが必要なので、DMA(Direct Memory Access)コントローラ12を実装した。
【0055】
UTMIインターフェースをターゲットとして設計したデバイスコントローラ10のブロック図を図4に示す。コントローラ10の信号線「RXActiveIn」は、UTMIの信号線「RXActive」と接続されており、信号線「RXActive」からMPU13(snx2pu2)に割り込みを発生させる。パケットを受信する場合は、信号線「rcv_data」から行う。受信したデータは同時にCRC5、CRC16のモジュール15,16にも入力され、エラーチェックが行なわれる。これらのCRCモジュール15,16のエラーフラグは、MPU13からアクセス可能となっている。パケット送信は、MPU13がDMAコントローラ12にリクエストを送る事で行う。デバイス制御用プログラムは例えばファームウェアとしてメモリ22に格納されている。以下に、CRC算出モジュール15,16、ハッシュコントローラ11、DMAコントローラ12、MPU13の説明をする。
【0056】
CRC算出モジュール15,16は、図6に示すように、シフトレジスタとXORゲートによって構成されている。各レジスタの初期値は1である。また、受信したパケットの規定フィールドをこの回路に入力し、図6の各レジスタが同図中の下に示す値になれば、CRCエラーが無い事を示す。設計したCRCモジュール15,16は、バイト単位で図6のモジュールと論理的に等しいCRC計算を行う。図7の様にCRC5用モジュール15、CRC16用モジュール16には、それぞれ5ビット、16ビットのレジスタがあり、初期値は1である。信号線「in」から1バイトデータが入力されると、それに対するCRCの計算結果がレジスタにセットされる。各CRCモジュールの信号線「out」にはレジスタの値が出力され、CRC16では上位8ビットを信号線「out1」から出力し、下位8ビットを信号線「out0」から出力する。また、CRCエラーが発生していない時には信号線「noError」に1が出力される。
【0057】
次に、ハッシュコントローラ11について説明する。USBのデバイスリクエストは、SETUPトランザクションに含まれるデータパケット内のDATAフィールドにより決定される。本実施例では、これらのDATAフィールドをハッシュとして利用し、リクエスト判別の高速化を行った。本実施例では、ハッシュの参照に「2 way associative 方式」を採用した(図8参照)。ハッシュコントローラ11は、MPU13からDATAフィールドの上位4バイトを受信すると、それを元に12ビットのキー7を生成する(図9参照)。キー7は、図8に示すように、タグ7A(TAG)、セット7B(SET)、ブロック7C(BLOCK)の3フィールドで構成される。ハッシュコントローラ11は、セット7Bの値をアドレスとして、第一タグ記憶部17A(Tag_rom00)と第二タグ記憶部17B(Tag_rom01)から値をロードし、タグ7Aの値と比較を行う。その結果が真(当該比較が一致)であれば、セット7Bとブロック7Cの値をアドレスとして、第一バリュー記憶部18A(Data_rom00)又は第二バリュー記憶部18B(Data_rom01)からロードした値を、MPU13に返す。もし偽(当該比較が不一致)であった場合は、0をMPU13に返す。第一バリュー記憶部18Aおよび第二バリュー記憶部18Bのデータは、Addressフィールド8ビットとSizeフィールド8ビットの計16ビットで構成されている。これら各フィールドの値は、それぞれデータメモリ6Cのアドレスと、送信サイズであり、ディスクリプタの送信時にDMAコントローラ12が使用する。尚、ハッシュがヒットしなかった場合は、ファームウェアで個別に対応するようにする。
【0058】
パケットの送信処理はDMAコントローラ12が行う。ホストに送信するパケットは、予めデータメモリ6Cに図5の様にバイト単位でセットする。尚、符号20で示すデータがパケットID(PID)であり、符号21で示すデータがディスクリプタの値である。DMAコントローラ12は、MPU13から送信開始アドレスと送信サイズと共に、リクエストを受信すると、データメモリ6Cから1バイトずつロードし、UTMIに送信する(図10参照)。コントロール転送のDATAフィールドの最大サイズは8バイトである。MPU13から受信した送信サイズが9バイト以上の時は、パケットID1バイトとDATAフィールド8バイトを送信し、未送信データの開始アドレスとサイズを、内部レジスタ「Start Address Reg」(符号23)と「Send SizeReg」(符号24)に保存する(図10参照)。再度MPU13から送信リクエストが有れば残りの送信を行う。DMAコントローラ12のステート遷移を図11に示す。DMAコントローラ12は、MPU13からリクエストを受信すると、「dmarun1」ステートでCRC16用モジュール16のレジスタを全て1にリセットし、「idle」ステートに遷移する。UTMIの信号線「TXReady」が1になると、UTMIが受信可能状態となる為、「dmarun2」ステートに遷移し、メモリのデータをバスに送る。最初に送信する1バイトデータは、必ずパケットID(PID)であり、この値から送信するパケットの種類を判別し、CRC16の付加が必要かを判断する。ハンドシェイクパケットの場合、CRCフィールドの付加が必要無いので、PIDフィールドの送信のみで「dmarun2」ステートを終了し、送信完了をMPU13に通知する。データパケットの場合は、CRCフィールドの付加が必要な為、1バイトのデータフィールドをバスに送信すると同時に、CRC16モジュールへ入力する。DATAフィールドを8バイト送信するか、MPU13から受信したメモリサイズ分送信し終ると、「crcsend1」ステート、「crcsend0」ステートと順に遷移し、CRC16用モジュール16で計算されたCRC16をバスに出力する。CRCフィールドの送信が完了すると、MPU13にパケット送信完了を通知する。UTMIへデータを転送するタイミングは図12の様になる。今回設計したモジュールは図12に示すバスクロックの2倍で動作させる事を想定している。そのため、信号線「TXReady」からの信号検出後、最初の1バイト(PID)は1クロック送信し、その後のデータは2クロックずつ送信する。
【0059】
MPU13(snx2pu2)は16ビットのオリジナルプロセッサであり、図13にブロック図を示す。このMPU13は、表6に示す様な特徴と命令セットを持つ。
【0060】
【表6】
【0061】
MPU13は、16ビット汎用レジスタを4つ持っており、即値は8ビットである。また、このMPU13は、「フェッチ」ステージ、「デコードおよび命令実行およびメモリアクセス」ステージ、「ライトバック」ステージの3段パイプラインである。そして、このMPU13は、割り込み線を持ち、割り込みのジャンプ先アドレスはINA命令を用いて変更可能である。割り込みからの復帰はRET命令を用いる。RET命令は表6の様に($B+I)のアドレスか、割り込み発生時に待避されたPC(プログラムカウンタ)に、ジャンプ出来る。パケットの受信は常に割り込みからの動作を考えているため、割り込みに関する命令を設計し、ファームウェアの自由度を高めた。右シフト命令(SR命令)は、扱うデータがバイト単位のため、バイトシフトを採用した。比較命令(SLT命令)は、ディスクリプタの送信サイズを決定する為に使用する。UTMIからの受信ではIO命令を使用する。このIO命令を実行すると、UTMIの信号線「rcv_data」から1バイトデータを受信する。UTMIのデータレシーブタイミングは、図14の様になる。MPU13はUTMIとのバスクロックの2倍で動作しているため、ファームウェアで調整し2クロックに1回データを受信する。UTMIから受信するデータはバイト単位であるが、USBのパケットには2バイトで意味を持つデータが有る。その場合は、表6に示すIO命令のフラグIを図15の様に使用して、2バイトに整形する。USBデバイス1をバスに接続すると、コンフィギュア時にホストからユニークアドレスを割り当てられる。ホストは、そのアドレスを利用してリクエストのターゲットデバイスを指定する。SET命令はセットされたユニークアドレスを、MPU13の内部レジスタに保持し、以降の通信ではアドレスのコンペアを行う。ファームウェアでは、SET命令を用いて、受信したリクエストが自分に対するものかチェック可能である。DMA命令、HAS命令は、それぞれデバイスコントローラ10内にあるDMAコントローラ12とハッシュコントローラ11を制御する為にある。
【0062】
DMA命令は、2種類の動作を行う。1つは、送信開始アドレスと送信サイズを指定して、DMAコントローラ12にリクエストを発行する。リクエストされたDMAコントローラ12は、受信したアドレスとサイズを元にパケットを送信する。もう1つは、アドレスとサイズを送らずにリクエストのみ発行する。この場合、DMAコントローラ12が使用するアドレスとサイズは、前回のパケット送信後に保存された値を使用する。DMA実行中にLD命令、ST命令の様なメモリアクセス命令がフェッチされると、パイプラインはDMAコントローラ12から実行完了の通知が来るまでストールする。ただし、メモリアクセスを行なわない命令がフェッチされた場合は、パイプラインはストールしない。
【0063】
HAS命令は、ホストからのリクエストパターンを判別する為に使用し、必要な値をレジスタ「$2」、レジスタ「$3」にセットし実行する。「$2」と「$3」のビット結合した値がハッシュのキー7となり、ハッシュコントローラ11は対応したデータを返す。もしハッシュがヒットすると、「$2」にはデータメモリ6Cのアドレス、「$3」には送信サイズをセットする。ハッシュのキー7がヒットしなかった場合は、「$2」と「$3」に0を返す。
【0064】
次に、USB2.0用コントローラ10のUSBパケット処理について説明する。トランザクション開始後、最初に受信するトークンパケットに対して、MPU13は図16の様な処理を行う。この処理では、ハッシュコントローラ11は使用せずにパケット内の各フィールドから次のチェックを行う。即ち、PIDフィールドの値から、実行するトランザクションを判別する(図16のS1)。また、ADDRフィールドの値と、ホストから割り当てられたユニークアドレスとを比較して自分に対するリクエストかどうかをチェックする(図16のS2)。自分に対するリクエストであれば、EPフィールドの値から、どのエンドポイントに対するリクエストかをチェックする(図16のS3)。尚、自分に対するリクエストでなければ、受信したパケットは無視する(図16のS3’)。PIDが「SETUP」で、且つ自分に対するリクエストである場合、次に受信するデータパケットからデバイスリクエストの種類を判別するようにする。
【0065】
当該データパケットのMPU13による処理は図17の様になる。パケット内のデータフィールドのうち、ハッシュとして利用するデータをハッシュコントローラ11に入力する(図17のS4,S5,S6)。
【0066】
ハッシュコントローラ11では、MPU13からデータを受信すると、図18の様な処理を行う。始めに、受信したデータからタグ7A(TAG)、セット7B(SET)、ブロック7C(BLOCK) フィールドから成るキー7を生成する(図18のS7)。そして、各フィールドを使用して、タグ記憶部(Tag_rom)17A,17B、バリュー記憶部(Data_rom)18A,18Bからデータをロードする(図18のS8,S9)。タグ記憶部17A,17Bからロードしたデータが、タグ7Aの値と等しければ(図18のS10;Yes)、ハッシュがヒットしているので、バリュー記憶部18A,18Bからロードした値をMPU13に送信する(図18のS11)。もしタグ7Aの値と異なっていれば(図18のS10;No)、ハッシュがヒットしなかった事を示す「0」を送信する(図18のS12)。
【0067】
MPU13では、ハッシュコントローラ11からの帰り値に基づいて分岐を行う(図17のS13)。帰り値が0の場合(図17のS13;Yes)、ハッシュがヒットしなかった事になる(本実施例では、ディスクリプタの送信リクエストではなかった事になる)ので、ホストから指定されたステータスのセット等を行う(図17のS14)。もし、帰り値が0以外の場合は(図17のS13;No)、ハッシュがヒットした為、帰り値はデータメモリ6C内のアドレスと送信サイズである。コントローラ10は、帰り値を元に、データメモリ6C内のデータをパケットに整形して、送信する(図17のS15)。尚、送信サイズについては、「受信したデータフィールドで指定されているサイズ」と「ハッシュによって取得したサイズ」を比較して、小さい方を使用する。
【0068】
以上のように構成されるデバイスコントローラ10の入出力に、UTMIの仮想モジュールを図19の様に接続し、シミュレーションを行なった。尚、シミュレーションにはsecondsを用いた。また、デバイスコントローラ10からの出力はUTMI仮想モジュールには接続せずに、コントローラ10からの出力を直接チェックした。バスに流すデータは、UTMIの仕様にあるタイミングで行い、パケットを流す際のコントローラ10の動きと、記述したファームウェアの動作を確認した。
【0069】
以上の条件でシミュレーションを行った結果、以下のような正常動作が確認出来た。即ち、(1)UTMIの信号線「RXActive」の信号検出によるMPU13の割り込み発生、(2)多重割り込み防止の割り込み制御、(3)RET命令による割り込み処理からの復帰と割り込みフラグの動作、(4)IO命令を使用した信号線「rcv_data」からの連続したデータ受信、(5)受信したデータのCRCエラー検出、(6)受信したデータから必要なデータをハッシュコントローラ11に入力し、ハッシュがヒットした際の正常なメモリのアドレスとサイズの取得、(7)ハッシュがヒットしなかった際の0データの受信、(8)ハッシュコントローラ11から得られたメモリアドレスとサイズをDMA命令を使用してDMAコントローラ12へ出力(信号線「xmit_data」への出力)、(9)DMA命令実行中にメモリアクセス命令が発生した場合のパイプラインのストールと、DMA命令終了後のストールの解除、(10)信号線「TXReady」からの信号検出によるバスクロックごとのデータ送信、(11)送信パケットの種類を判別し、正常なサイズを送信。データパケットを送信する場合はCRC16の正常な算出と送信、(12)複数回データパケットを送信した場合のDMAコントローラ12内のアドレスレジスタのインクリメントと残り送信サイズのディクリメント、(13)トークンパケット受信時のデバイスアドレスのセット、である。
【0070】
以上をまとめると、デバイスコントローラ10では次の動作が可能である。即ち、(1)割り込み発生によるパケットの正常な受信、(2)リクエストを判別して正常なパケットの送信、(3)ホストからセットされるユニークなデバイスアドレスのセットとトークンパケット受信時のアドレスのコンペア、(4)ハッシュコントローラ11とDMAコントローラ12を使用したリクエストの迅速な応答、である。
【0071】
デバイスコントローラ10をDEMO社demoライブラリで合成した結果は、表7の様になった。なお、入出力のトライステートで発生する遅延は無視した。
【0072】
【表7】
【0073】
また、ALTERA社のalteraライブラリで合成し、Quartus II 2.1 でコンパイルした結果を表8に示す。実装のターゲットデバイスはCQ出版社のFPGA開発パッケージStratix評価キットEP1S10であり、ALTERA Stratix EP1S10F780C7ESを搭載している。
【0074】
【表8】
【0075】
以上のように本実施例では、リクエストに対して少ない命令サイクルで応答出来るコントローラ10が設計できた。MPU13の動作周波数はUSBバスの4分の1(UTMIインターフェースがMPU13側に供給するクロックの2倍)を想定しており、ハイスピード(HS:480Mbps)モードで使用する場合は120MHzでの動作が必要である。設計したMPU13は表8の様に最大動作周波数は149.54MHzとなり、ハイスピードモードへの対応が可能である。
【0076】
なお、上述の実施形態は本発明の好適な実施の一例ではあるがこれに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々変形実施可能である。例えば、本発明に用いるハッシュは上記に例示した「1 Way Associative」や「2 Way Associative」のようなビット抽出による方法に限らず、シノニムを発生しない完全ハッシュを実現するハッシュ関数を利用したものであっても良い。
【0077】
また、上述の実施形態ではリクエストの一部を対象リクエストとしてハッシュに対応させたが、正常な全てのリクエストに対応するようにハッシュを構成しても良い。例えば、「SET ADDRESS」リクエストのDATAフィールドをハッシュに入力すると、自動的にユニークアドレスがセットされ、それ以降のトークンパケットをハッシュに入力すると、自分に対するリクエストであれば真(例えば「1」)を返し、他のデバイスへのリクエストであれば偽(例えば「0」)を返すようにしても良い。
【0078】
また、本発明は必ずしもUSBデバイスへの適用に限定されず、ホストからのリクエストに応じた処理を実行するデバイスに本発明を適用しても良い。
【0079】
【発明の効果】
以上の説明から明らかなように、本発明のデバイスおよびデバイスの制御方法およびデバイス制御用プログラムによれば、ホストより受信したリクエストからキーを作成し、このキーに対応するバリューを記憶手段から検索し、このバリューに基づいてリクエストに応じた処理を実行するので、リクエストの種類が増えても、リクエストの内容を判別する比較演算命令を増やす必要はなく、リクエストの内容判別の処理が単純化される。このため、当該処理に要する時間を大幅に短縮できる。これにより、上記判別処理をCPUを用いてソフトウェアにより実現することが可能となる。さらに、比較的性能の低い低速のCPUであっても、高速な処理が可能となることから、デバイスの低消費電力化が図れる。また、ソフトウェアによる柔軟な制御が可能となる。本発明によって、携帯電話やPDAなどの低消費電力機器に対してもUSB2.0等の高速転送用コントローラの導入が可能となる。
【図面の簡単な説明】
【図1】本発明のデバイスおよびデバイスの制御方法およびデバイス制御用プログラムの実施の一形態を示し、キーとバリューを対応付けるハッシュの一例を示す概念図である。
【図2】リクエストに応じた処理に必要な情報が格納された記憶手段のデータ構造の一例を示す概念図である。
【図3】本発明のデバイスの概略構成の一例を示すブロック図である。
【図4】本発明の一実施例であるUSBデバイスのブロック図である。
【図5】上記実施例に用いられ、リクエストに応じた処理に必要な情報が格納された記憶手段のデータ構造の一例を示す概念図である。
【図6】上記実施例におけるデバイスが備えるCRCモジュールの回路を示す概念図である。
【図7】上記CRCモジュールのブロック図である。
【図8】上記実施例のデバイスにおけるキーとバリューを対応付けるハッシュの一例を示す概念図である。
【図9】上記実施例のデバイスにおけるキーの作成方法を示す概念図である。
【図10】上記実施例のデバイスが備えるDMAコントローラを示す概略構成図である。
【図11】上記DMAコントローラのステート遷移図である。
【図12】上記実施例のデバイスにおけるデータ送信のタイミングを示す図である。
【図13】上記実施例のデバイスが備えるMPUのブロック図である。
【図14】上記実施例のデバイスにおけるデータ受信のタイミングを示す図である。
【図15】上記MPUが備えるIO命令の動作を示す図である。
【図16】上記実施例のデバイスにおける処理(トークンパケットの受信処理)の一例を示すフローチャートである。
【図17】上記実施例のデバイスにおける処理(データパケットの受信処理)の一例を示すフローチャートである。
【図18】上記実施例のデバイスにおける処理(ハッシュコントローラの処理)の一例を示すフローチャートである。
【図19】上記実施例のデバイスをUTMI仮想モジュールと接続した様子を示すブロック図である。
【図20】USBデバイスの構成例を示す概念図である。
【図21】USB通信に用いられるパケットのフォーマットを示し、(A)はトークンパケットを(B)はデータパケットを(C)はハンドシェイクパケットを示す。
【図22】USB通信におけるトランザクションを示す概念図である。
【図23】SETUPトランザクションにおいてUSBデバイスが行なうUSBホストからのリクエスト内容の判別を、ハッシュを用いずに行なう場合の処理の流れを示すフローチャートである。
【符号の説明】
1 USBデバイス(デバイス)
6 記憶手段
6A タグ記憶部
6B バリュー記憶部
7 キー
7A タグ
7B セット
7C ブロック
8 バリュー
【発明の属する技術分野】
本発明は、デバイスおよびデバイスの制御方法およびデバイス制御用プログラムに関する。さらに詳述すると、本発明は、USBデバイスおよびUSBデバイスの制御方法およびUSBデバイス制御用プログラムに関する。
【0002】
【従来の技術】
USB(Universal Serial Bus)は、パーソナルコンピュータの周辺機器のインターフェースとして、広く利用されている。USBのバスは差動シリアルバスであり、システムはホスト主導となっている。USBバスに接続されたUSBデバイスは、USBホスト(パーソナルコンピュータなど)に対して割り込みをかけてデータの転送を行うのではなく、必ずUSBホストからのリクエストにUSBデバイスが応答して通信を行うという特徴がある。また、USBではプラグアンドプレイとホットプラグに対応しており、USBホストの電源を入れたままで、USBバスにUSBデバイスを接続できる。USBデバイスの接続後、USBホストはUSBデバイスの構成を認識してドライバ等の必要なソフトウェアをインストールし、その後、USBデバイスが使用可能となる。
【0003】
USBホストは、デバイスの構成情報が記述されているディスクリプタと呼ばれるデータを、USBデバイスから受信し、当該ディスクリプタを元にUSBデバイスを認識し、必要なソフトウェアをインストールする。USBデバイスは、USBバスに接続した後、USBホストからのリクエストを受信し、このディスクリプタをUSBホストに送信する必要がある。標準的なディスクリプタとしては、例えば次のものがある。第1にデバイスディスクリプタがある。これは、VendorIDやProductIDなどの製品情報やデバイスクラス(デバイスの種類)といったUSBデバイスの基本的な情報を示す。第2にコンフィグレーションディスクリプタがある。これは、デバイスの電源供給方法や消費電力の情報、インターフェースの個数を示す。第3にインターフェースディスクリプタがある。これは、エンドポイントの個数やインターフェースのクラスを示す。第4にエンドポイントディスクリプタがある。これは、エンドポイントの転送タイプや最大パケットサイズ等を示す。第5にストリングディスクリプタがある。これは、各ディスクリプタが使用するストリングデータ(文字データ)を記述する。尚、上記に例示したディスクリプタ以外にも、デバイスクラスに特有のディスクリプタが存在する。
【0004】
USBバスには127台までUSBデバイスを接続する事が可能である。USBバスに接続されたUSBデバイスに、1から127までのいずれかのユニークアドレスを付加する事で、USBホストは個々のUSBデバイスを判別するようにしている。USBバスに接続直後は、デバイスアドレスは0であり、その後、USBホストからのリクエストによりユニークアドレスを付加される。当該リクエストが発行されると、USBデバイスは、指定されたアドレスをセットし、それ以降は自分のアドレスに対するリクエストにのみ応答する。
【0005】
USB通信は、USBホストとUSBデバイスのエンドポイント(EP)間で行う。エンドポイントは0〜15番まで持たせる事が可能で、1つのエンドポイントに、使用する転送の種類と転送方向を指定する。但し、EP0は例外でUSBデバイスのコンフィグレーションの為に予約されている。USBデバイスは、ホストからのリクエストがどのエンドポイントに対するものか判別し、対応した通信を行う。
【0006】
この様にエンドポイントを切替える事で、デバイスに複数の機能を持たせる事が可能となる。例えば図20のUSBデバイス100は、デバイス100Aとデバイス100Bの機能を備えている。このような構成は、例えばUSBキーボードにPS/2マウスの接続ポートがある場合などが該当する。この場合、キーボードとマウスの間ではPS/2のプロトコルで通信が行なわれ、ホストから見れば1つのUSBデバイスがキーボードとマウスの機能を持っている事になる。例えばこのUSBデバイス100では、EP0へのリクエストを受信した場合、デバイスコンフィグレーションの為の通信を行い、EP1へのリクエストを受信した場合、デバイス100AのデータをUSBホストに送信する通信を行う。また、EP2へのリクエストを受信した場合は、デバイス100BのデータをUSBホストに送信する通信を行う。
【0007】
図21及び図22にUSBの転送フォーマットを示す。USBには3つの転送単位があり、最小単位としてパケットがある。USBホストとUSBデバイスは、このパケットを数回送受信する事で、トランザクションを構成する。そして、トランザクションを組み合わせる事でトランスファを作る。
【0008】
パケットは、ホストやデバイスがバス時間を確保する単位であり、SYNC(同期)パターンで始まり、EOP(End Of Packet)までの連続したビット列で構成される。このパケットは、USBデバイス側のエンドポイントとしてのFIFO(First In First Out)バッファと、ホスト側のエンドポイントとしてのFIFOバッファ間で送受される。パケットのフォーマットを図21に示す。尚、図21(A)はトークンパケット(OUTパケット、INパケット、SETUPパケット)のフォーマットを示し、(B)はデータパケットのフォーマットを示し、(C)はハンドシェイクパケット(ACKパケット、NAKパケット)のフォーマットを示す。
【0009】
パケットの各フィールドは、サイズが決まっており(但し、DATAフィールドは例外で0〜1024バイトまで可変となる)、フィールド単位で次の様な意味がある。PID(Packet ID)フィールドは、パケットの種類を表す。ADDRフィールドは、転送の対象となるデバイスアドレスを示す。EPフィールドは、デバイスのエンドポイントを示す。DATAフィールドには、ホストからのリクエスト内容や、各種データ(キーボードであれば入力データ、プリンタであれば印刷データなど)がセットされる。また、トークンパケットやデータパケットにおいては、エラーチェックの為に、CRC5フィールド、CRC16フィールドがある。CRC(Cyclic Redundancy Check)は、通信エラーの検出に使用され、エラー検出の対象となるデータからCRCコードを算出し、その値からエラーの有無をチェックできる。
【0010】
このパケットを複数組み合わせたトランザクションは、図22のようになっており、必ずUSBホストから発行されるトークンパケットから始まり、ハンドシェイクパケットで終るようになっている。USBデバイスは、USBホストからトークンパケットを受信すると、トークンパケット内のPIDフィールドの値からパケットの種類を判別し、ADDRフィールドの値から自分のアドレスに対するリクエストか否か判別し、自分へのリクエストであれば、トランザクションを形成する。
【0011】
さらに、トランザクションを複数回行う事で、トランスファと言う通信単位を構成する。トランスファには、(1)コントロール転送、(2)バルク転送、(3)インタラプト転送、(4)アイソクロナス転送、と言う4種類のフォーマットがあり、転送の目的に応じて使い分けられている。USBデバイスは、どの転送の場合も、トークンパケットのADDRフィールドおよびEPフィールドのチェックが必要である。
【0012】
特に、コントロール転送で使用されるSETUPトランザクションでは、USBデバイスは、SETUPパケットの後にUSBホストから送信されるデータパケット内のDATAフィールドの値から、USBホストからのリクエストの内容を判別しなければならない。当該リクエストの内容は、デバイスの構成情報(ディスクリプタ)の送信リクエストや、デバイス内のステータスのセット等である。このデータパケットのDATAフィールドは8バイトであり、bmRequest、bRequest、wValue、wIndex、wLengthの5つのフィールドに更に区分される。これらの各フィールドは表1に示す意味を持つ。また、リクエストの種類とその時のDATAフィールドのパターンを表2に示す。
【0013】
【表1】
【0014】
【表2】
【0015】
SETUPトランザクションを含む転送を行う場合、USBデバイスは表2に示す様なリクエストパターンを判別し、それに応じた通信を行う必要がある。尚、表2に示すリクエストは、標準デバイスリクエストと呼ばれるUSBデバイス共通のリクエストである。この他に、デバイスの種類(デバイスクラス)に応じて、特有のリクエストも存在する。
【0016】
従来、USBデバイスに実装されているUSB2.0コントローラでは、ほとんどの処理をハードウェア化することで、処理の高速化を図っている(例えば非特許文献1参照)。
【0017】
【非特許文献1】
インターネット<URL:http://www.cast−inc.com/cores/cusb2/index.shtml>
【発明が解決しようとする課題】
SETUPトランザクションにおいてUSBデバイスが行なうUSBホストからのリクエスト内容の判別をソフトウェアにより行なうと、例えば図23のフローチャートのようになる。DATAフィールド内の「bmRequestType」と「bRequest」から、リクエストがGET DESCRIPTOR(USBホストヘのディスクリプタ送信)であるかチェックする(図23のS101)。そして、GET DESCRIPTORの場合は、DATAフィールド内のwValue(2バイト)がディスクリプタタイプとインデックスを示している為、送信ディスクリプタの決定には図23に示す様なwValueの比較が必要となる(図23のS102,S103,S104…)。そして、当該比較回数は、USBデバイスが持つディスクリプタの数に比例し、ディスクリプタの数が増える程、多くの命令ステップが必要となる。このため、特にUSB2.0で定義されるハイスピードモードに対応するためには、超高速のコントローラ用CPUが必要となり、コスト高および消費電力が大きくなる等の問題がある。また、図23の処理をハードウェア化する場合、専用回路を組み込むためコスト高となる、回路の増設により消費電力が大きくなる、ハードウェア化に伴いソフトウェアで可能な柔軟な制御が困難となる、等の問題がある。このため従来技術では、特に携帯電話やPDA(Personal Digital Assistants)などの低消費電力機器に対して、USB2.0コントローラを導入することが困難であった。
【0018】
そこで本発明は、ホストからのリクエストの判別を少ない処理ステップで高速に行なうデバイスおよびデバイスの制御方法およびデバイス制御用プログラムを提供することを目的とする。
【0019】
【課題を解決するための手段】
かかる目的を達成するため、請求項1記載の発明は、ホストからのリクエストを受信し、該リクエストに応じた処理を実行するデバイスにおいて、予め定められた一定処理により前記リクエストから抽出されるキーと対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリューが格納された記憶手段を有し、ホストから受信したリクエストから前記一定処理によってキーを作成する処理と、上記作成されたキーに対応するバリューを前記記憶手段から検索する処理と、上記検索されたバリューに基づいて当該リクエストに応じた処理を実行するようにしている。
【0020】
また、請求項2記載の発明は、ホストからのリクエストを受信したデバイスに当該リクエストに応じた処理を実行させるデバイスの制御方法において、予め定められた一定処理により前記リクエストから抽出されるキーと対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリューを記憶手段に格納しておき、前記デバイスに、ホストから受信したリクエストから前記一定処理によってキーを作成する処理と、上記作成されたキーに対応するバリューを前記記憶手段から検索する処理と、上記検索されたバリューに基づいて当該リクエストに応じた処理を実行させるようにしている。
【0021】
また、請求項3記載のデバイス制御用プログラムは、ホストから受信したリクエストから、予め定められた一定処理によりキーを作成する手段と、前記キーと対応付けられる箇所に、該当リクエストに応じた処理に必要な情報を示すバリューが予め格納されている記憶手段から、上記作成されたキーに対応するバリューを検索する手段と、上記検索されたバリューに基づいて当該リクエストに応じた処理を実行する手段として、デバイスを機能させるようにしている。
【0022】
従って、リクエストの種類が増えても、リクエストに対する応答処理のステップは増加することがなく、当該応答処理が単純化され、高速に処理することが可能となる。
【0023】
また、請求項4記載の発明は、請求項3記載のデバイス制御用プログラムにおいて、前記キーはタグ、セット、ブロックの3つのフィールドで構成され、前記記憶手段は、対象リクエストに基づく前記セットの値をアドレスとして当該リクエストに基づく前記タグの値が格納されたタグ記憶部と、対象リクエストに基づく前記セットおよび前記ブロックの値をアドレスとして当該リクエストに関する前記バリューが格納されたバリュー記憶部とを有し、上記作成されたキーについて、前記セットの値をアドレスとする前記タグ記憶部の値と、前記タグの値とを比較し、一致する場合に、前記セットおよび前記ブロックの値をアドレスとして前記バリュー記憶部から前記バリューを読み出す手段として、デバイスを機能させるようにしている。
【0024】
従って、対象リクエストに基づいてキーが作成されると、このキーに対応した特定のバリューが得られる。
【0025】
【発明の実施の形態】
以下、本発明の構成を図面に示す実施形態に基づいて詳細に説明する。
【0026】
図1から図3に本発明のデバイス、デバイスの制御方法、デバイス制御用プログラムの実施の一形態を示す。特に本実施形態では、USBデバイスに本発明を適用した例について説明する。以下、本実施形態では、USBホスト(例えばパーソナルコンピュータなど)を単にホストとも呼び、USBデバイス(例えばマウスやキーボードなどのパーソナルコンピュータの周辺機器)を単にデバイスとも呼ぶ。
【0027】
このデバイス1は、ホストからのリクエストを受信し、該リクエストに応じた処理を実行するものであり、予め定められた一定処理によりリクエストから抽出されるキー7と対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリュー8が格納された記憶手段6を有し、ホストから受信したリクエストから一定処理によってキー7を作成する処理と、上記作成されたキー7に対応するバリュー8を記憶手段6から検索する処理と、上記検索されたバリュー8に基づいて当該リクエストに応じた処理を実行するようにしている。また、本実施形態のデバイス1は、例えば図3に示すように、ホストからのデータを受信する入力部3と、上述した各処理を実行する制御部4(例えばCPUやMPU等)と、ホストにデータを送信する出力部5とを有している。
【0028】
また、デバイス1の制御方法は、ホストからのリクエストを受信したデバイス1に当該リクエストに応じた処理を実行させる方法であり、予め定められた一定処理によりリクエストから抽出されるキー7と対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリュー8を記憶手段6に格納しておき、デバイス1に、ホストから受信したリクエストから一定処理によってキー7を作成する処理と、上記作成されたキー7に対応するバリュー8を記憶手段6から検索する処理と、上記検索されたバリュー8に基づいて当該リクエストに応じた処理を実行させるようにしている。
【0029】
また、デバイス制御用プログラムは、ホストから受信したリクエストから、予め定められた一定処理によりキー7を作成する手段と、キー7と対応付けられる箇所に、該当リクエストに応じた処理に必要な情報を示すバリュー8が予め格納されている記憶手段6から、上記作成されたキー7に対応するバリュー8を検索する手段と、上記検索されたバリュー8に基づいて当該リクエストに応じた処理を実行する手段として、デバイス1を機能させるようにしている。
【0030】
ここで、バリュー8が示す「リクエストに応じた処理に必要な情報」とは、例えば当該処理を実行するための命令(コマンド)や、当該処理の実行に用いるデータまたは当該処理の実行に必要となるパラメータ等である。当該命令や当該データ等そのものをバリュー8として設定しても良く、当該命令や当該データ等が格納されているメモリアドレスをバリュー8として設定しても良い。
【0031】
本実施形態では、ホストから送られてくるデータに対するデバイス1側での高速解析のために、ハッシュ(連想配列とも呼ばれる)を利用する。ハッシュにおいて関連付けられる二つ値を、本明細書ではキー7(Key)及びバリュー8(Value)とする。当該ハッシュの仕組は必ずしも限定されないが、処理の単純化および高速化の観点からは、シノニムの発生しないもの(即ち、リクエストとキー7とバリュー8とが1対1対1で対応するもの)が特に好ましい。例えば本実施形態では、ハッシュとして、図1に示す「1 Way Associative(ダイレクトマップとも呼ばれる)」を用いている。
【0032】
この場合、キー7はタグ7A(TAG)、セット7B(SET)、ブロック7C(BLOCK)の3つのフィールドで構成される。記憶手段6は、対象リクエストに基づくセット7Bの値をアドレスとして当該リクエストに基づくタグ7Aの値が格納されたタグ記憶部6A(Tag_rom)と、対象リクエストに基づくセット7Bおよびブロック7Cの値をアドレスとして当該リクエストに関するバリュー8が格納されたバリュー記憶部6B(Data_rom)とを有している。
【0033】
そして、ホストから受信したリクエストに基づいて作成されたキー7について、セット7Bの値をアドレスとするタグ記憶部6Aの値と、タグ7Aの値とを比較する。これら2つの値が一致する場合には、セット7Bおよびブロック7Cの値をアドレスとしてバリュー記憶部6Bからバリュー8を読み出す。これにより、対象リクエストに基づいてキー7が作成されると、このキー7に対応した特定のバリュー8が得られる。一方、ホストから受信したリクエストが対象リクエストでない場合は、当該非対象リクエストに基づいて作成されたキー7については、当該キー7におけるセット7Bの値をアドレスとするタグ記憶部6Aの値と、当該キー7におけるタグ7Aの値とは一致しない。この場合、当該非対象リクエストに対応したバリュー8は存在せず、バリュー8の取り出しは行なわない。
【0034】
例えば本実施形態では、SETUPトランザクションにおけるリクエスト内容の判別に、上記ハッシュを利用する。当該リクエスト内容は、SETUPパケット後にホストから受信するデータパケット内のDATAフィールドに、記述されている。そこで本実施形態では、SETUPパケット後にホストから受信するデータパケット内のDATAフィールドから、ハッシュのキー7を作成する。
【0035】
一方、当該リクエストの内容は主に、ディスクリプタの送信または各種ステータスのセットである。この場合、デバイス1では、リクエストがディスクリプタの送信であるか又はステータスのセットであるかを判断し、さらに、ディスクリプタの送信である場合は、どの種のディスクリプタを何バイトの送信サイズで送信するかを判断し、ステータスのセットである場合は、どのステータスをどの値にセットするかを判断する必要がある。そこで、例えば本実施形態では、リクエストがディスクリプタの送信である場合は、送信すべきディスクリプタがセットしてあるデータメモリ6Cのアドレスと、ディスクリプタのデフォルトの送信サイズとをバリュー8として設定し、リクエストがステータスのセットである場合は、セットすべきステータスのアドレスや値をバリュー8として設定するようにしている。
【0036】
以下に、キー7とバリュー8の設定例について説明する。例えば本例では、GET DESCRIPTOR(USBホストヘのディスクリプタ送信)、SET ADDRESS(デバイスアドレスのセット)、SET CONFIGURATION(デバイス1のコンフィグレーションのセット)、との3つのリクエストに対応したキー7とバリュー8の設定例を示す。また、デバイス1は、デバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェースディスクリプタ、エンドポイントディスクリプタの4つのディスクリプタのみ有するものとする。また、デバイス1が持つコンフィグレーション値は1のみとする。
【0037】
ホストから送信されるリクエストとDATAフィールドのビットパターンは表3の様になる。
【0038】
【表3】
【0039】
尚、リクエストされるディスクリプタのサイズやホストからセットされるユニークアドレスは、USBホストの環境に依存する為、表3では「x」と「n」で示した。また、表3中のディスクリプタのリクエストに、インターフェースディスクリプタとエンドポイントディスクリプタのパターンが無いのは、これらが個々にリクエストされず、コンフィグレーションディスクリプタのリクエストの際にまとめて送信される為である。
【0040】
次に、表3からキー7を設定する。表3の中で、ビットパターンが確定し尚且つ他のリクエストとビットパターンの異なるビットを取り出すと、表4の様になる。
【0041】
【表4】
【0042】
さらに、表4に基づいてキー7におけるタグ7A(TAG)、セット7B(SET)、ブロック7C(BLOCK)の各フィールドを設定すると、例えば表5のようになる。尚、表5中の「SET_2」はセット7Bの2ビット目となることを示しており、「SET_1:0」はセット7Bの1ビット目と3ビット目となることを示している。本例のセット7Bは「SET_2」と「SET_1:0」の計3ビットで構成する。
【0043】
【表5】
【0044】
以上の様に、ホストから受信したDATAフィールドから必要なビットを抽出してハッシュのキー7を作成すれば、各リクエストに応じたバリュー8を得ることができる。
【0045】
次に、ハッシュにより得られるバリュー8の設定例を示す。ディスクリプタの送信リクエストが発生した場合、送信ディスクリプタの判別が必要である。そこで例えば図2に示す様に、記憶手段6が有するデータメモリ6Cに予め各ディスクリプタをセットしておく。そして、ディスクリプタの送信リクエストから作成されるキー7については、送信すべきディスクリプタがセットされているアドレスと、送信サイズとを、ハッシュを利用して得られるバリュー8とする。例えば、バリュー8を4バイトとし、上位2バイトを用いて送信すべきディスクリプタがセットされているアドレスを指定し、下位2バイトを用いて送信サイズを指定する。従って、受信したDATAフィールドに対応するディスクリプタがセットされているアドレスと、ディスクリプタの送信サイズを、キー7に基づいて得られたバリュー8の値から取得することができる。
【0046】
尚、ホストからのリクエストでは、送信するディスクリプタのサイズも指定される為、ハッシュにより得られたデフォルトサイズと、ホストからのリクエストサイズを比較し、小さな方で送信するようにする。これは、USBでは、ホストから指定されるデータ長に対してデバイス1が持つデータ長が短い場合にはデバイス1のデータ長で転送することが許されている一方、逆にホストが指定するデータ長がデバイス1が持つデータ長よりも短い場合には、ホストが指定するデータ長で送信を行なう必要があるためである。
【0047】
ディスクリプタをホストへ送信する場合は、ハッシュを使用して取得したアドレスに基づいて、データメモリ6Cからデータを順にロードし、パケットフォーマットに従って送信する。
【0048】
一方、デバイス1のステータスをセットするSET ADDRESSやSET CONFIGURATIONの場合は、ディスクリプタのリクエストと区別する為に、例えばディスクリプタのリクエストでは得る事の無いビットパターン(例えばX00000000やX11110000等)をバリュー8に設定する。ハッシュによって得られたバリュー8が当該ビットパターンであれば、ディスクリプタのリクエストでは無いと判断し、例えば当該ビットパターンに応じて各ステータスのセットを行うようにする。
【0049】
尚、上記の例では、GET DESCRIPTOR、SET ADDRESS、SET CONFIGURATIONの3つのリクエストと4種のディスクリプタとに対応させたが、対象リクエストを増やしても、各リクエストのDATAフィールドのパターンは一意であり、キー7を構成し直すことで対応することが可能である。
【0050】
以上のように本発明によれば、ハッシュを用いることにより、デバイス1が備えるディスクリプタが増えても、送信すべきディスクリプタを判断する比較演算命令は増える事は無い。即ち、ディスクリプタの数に応じて比較演算命令を繰り返す必要は無い。従って、ハッシュの導入によりリクエストの内容判別の処理は単純化され、当該処理に要する時間を大幅に短縮できる。これにより、上記判別処理をCPUを用いてソフトウェアにより実現することができる。さらに、比較的性能の低い低速のCPUであっても、高速な処理が可能となることから、デバイス1の低消費電力化が図れる。また、ソフトウェアによる柔軟な制御も可能となる。本発明によって、携帯電話やPDAなどの低消費電力機器に対してもUSB2.0の高速転送コントローラの導入が可能となる。
【0051】
【実施例】
本願発明者等は、本発明に基づいてUSB2.0用コントローラの設計を実際に行なった。以下に、当該設計の内容を実施例として記載する。本実施例では、高速回路部を物理層に分離するUTMI(USB2.0 Tranceiver Macrocell Interface)仕様を採用して、USBデバイスに実装するUSB2.0用コントローラ10の設計を行った。UTMIは、USBバスから受信したシリアルデータを8ビットにパラレル変換し、トランシーバ側のバスに出力する。またトランシーバ側とのバスクロックにはUSBクロックの8分の1が使用される。このためUSBパケット処理をバイト単位で行える様にコントローラ10を設計した。
【0052】
本実施例では、ハイスピード(HS:480Mbps)モードへの対応を考えて、ホストからのリクエストに対するレスポンス時間の短縮を狙って設計を行なった。このために、コントローラ10内にハッシュコントローラ11(ハッシュモジュールとも呼ぶ)を実装し、リクエストに対する応答の高速化を行った。特に、本実施例では、ハッシュによる送信ディスクリプタの判別を導入した。本実施例では、リクエストを受信するUSBデバイス1が、「bRequest」と「wValue」の計4バイトにより送信ディスクリプタを決定する点に注目し、「bRequest」と「wValue」からハッシュのキー7を作成するようにした。キー7によって得られるバリュー8には、各ディスクリプタがセットされているデータメモリ6C内のアドレスとディスクリプタサイズを設定した。
【0053】
これにより、デバイス1はリクエストを受信して、ハッシュコントローラ11にキー7を入力するだけで、瞬時に送信ディスクリプタの情報を取得出来る。この方法を用いれば、デバイス1が持つディスクリプタの数が増えても、その判別処理の命令サイクル数は変化せず、リクエストに対するレスポンス時間に影響を与えない。
【0054】
さらに、データメモリ6Cにはパケットフォーマットに従ってディスクリプタをセットし、送信処理を簡単にした(図5参照)。これによりアドレスとサイズを元に、データメモリ6Cから順に値をロードしバスに送信するだけでパケット送信が行える。さらに、データ送信をファームウェアで行うと、多くの命令サイクルが必要なので、DMA(Direct Memory Access)コントローラ12を実装した。
【0055】
UTMIインターフェースをターゲットとして設計したデバイスコントローラ10のブロック図を図4に示す。コントローラ10の信号線「RXActiveIn」は、UTMIの信号線「RXActive」と接続されており、信号線「RXActive」からMPU13(snx2pu2)に割り込みを発生させる。パケットを受信する場合は、信号線「rcv_data」から行う。受信したデータは同時にCRC5、CRC16のモジュール15,16にも入力され、エラーチェックが行なわれる。これらのCRCモジュール15,16のエラーフラグは、MPU13からアクセス可能となっている。パケット送信は、MPU13がDMAコントローラ12にリクエストを送る事で行う。デバイス制御用プログラムは例えばファームウェアとしてメモリ22に格納されている。以下に、CRC算出モジュール15,16、ハッシュコントローラ11、DMAコントローラ12、MPU13の説明をする。
【0056】
CRC算出モジュール15,16は、図6に示すように、シフトレジスタとXORゲートによって構成されている。各レジスタの初期値は1である。また、受信したパケットの規定フィールドをこの回路に入力し、図6の各レジスタが同図中の下に示す値になれば、CRCエラーが無い事を示す。設計したCRCモジュール15,16は、バイト単位で図6のモジュールと論理的に等しいCRC計算を行う。図7の様にCRC5用モジュール15、CRC16用モジュール16には、それぞれ5ビット、16ビットのレジスタがあり、初期値は1である。信号線「in」から1バイトデータが入力されると、それに対するCRCの計算結果がレジスタにセットされる。各CRCモジュールの信号線「out」にはレジスタの値が出力され、CRC16では上位8ビットを信号線「out1」から出力し、下位8ビットを信号線「out0」から出力する。また、CRCエラーが発生していない時には信号線「noError」に1が出力される。
【0057】
次に、ハッシュコントローラ11について説明する。USBのデバイスリクエストは、SETUPトランザクションに含まれるデータパケット内のDATAフィールドにより決定される。本実施例では、これらのDATAフィールドをハッシュとして利用し、リクエスト判別の高速化を行った。本実施例では、ハッシュの参照に「2 way associative 方式」を採用した(図8参照)。ハッシュコントローラ11は、MPU13からDATAフィールドの上位4バイトを受信すると、それを元に12ビットのキー7を生成する(図9参照)。キー7は、図8に示すように、タグ7A(TAG)、セット7B(SET)、ブロック7C(BLOCK)の3フィールドで構成される。ハッシュコントローラ11は、セット7Bの値をアドレスとして、第一タグ記憶部17A(Tag_rom00)と第二タグ記憶部17B(Tag_rom01)から値をロードし、タグ7Aの値と比較を行う。その結果が真(当該比較が一致)であれば、セット7Bとブロック7Cの値をアドレスとして、第一バリュー記憶部18A(Data_rom00)又は第二バリュー記憶部18B(Data_rom01)からロードした値を、MPU13に返す。もし偽(当該比較が不一致)であった場合は、0をMPU13に返す。第一バリュー記憶部18Aおよび第二バリュー記憶部18Bのデータは、Addressフィールド8ビットとSizeフィールド8ビットの計16ビットで構成されている。これら各フィールドの値は、それぞれデータメモリ6Cのアドレスと、送信サイズであり、ディスクリプタの送信時にDMAコントローラ12が使用する。尚、ハッシュがヒットしなかった場合は、ファームウェアで個別に対応するようにする。
【0058】
パケットの送信処理はDMAコントローラ12が行う。ホストに送信するパケットは、予めデータメモリ6Cに図5の様にバイト単位でセットする。尚、符号20で示すデータがパケットID(PID)であり、符号21で示すデータがディスクリプタの値である。DMAコントローラ12は、MPU13から送信開始アドレスと送信サイズと共に、リクエストを受信すると、データメモリ6Cから1バイトずつロードし、UTMIに送信する(図10参照)。コントロール転送のDATAフィールドの最大サイズは8バイトである。MPU13から受信した送信サイズが9バイト以上の時は、パケットID1バイトとDATAフィールド8バイトを送信し、未送信データの開始アドレスとサイズを、内部レジスタ「Start Address Reg」(符号23)と「Send SizeReg」(符号24)に保存する(図10参照)。再度MPU13から送信リクエストが有れば残りの送信を行う。DMAコントローラ12のステート遷移を図11に示す。DMAコントローラ12は、MPU13からリクエストを受信すると、「dmarun1」ステートでCRC16用モジュール16のレジスタを全て1にリセットし、「idle」ステートに遷移する。UTMIの信号線「TXReady」が1になると、UTMIが受信可能状態となる為、「dmarun2」ステートに遷移し、メモリのデータをバスに送る。最初に送信する1バイトデータは、必ずパケットID(PID)であり、この値から送信するパケットの種類を判別し、CRC16の付加が必要かを判断する。ハンドシェイクパケットの場合、CRCフィールドの付加が必要無いので、PIDフィールドの送信のみで「dmarun2」ステートを終了し、送信完了をMPU13に通知する。データパケットの場合は、CRCフィールドの付加が必要な為、1バイトのデータフィールドをバスに送信すると同時に、CRC16モジュールへ入力する。DATAフィールドを8バイト送信するか、MPU13から受信したメモリサイズ分送信し終ると、「crcsend1」ステート、「crcsend0」ステートと順に遷移し、CRC16用モジュール16で計算されたCRC16をバスに出力する。CRCフィールドの送信が完了すると、MPU13にパケット送信完了を通知する。UTMIへデータを転送するタイミングは図12の様になる。今回設計したモジュールは図12に示すバスクロックの2倍で動作させる事を想定している。そのため、信号線「TXReady」からの信号検出後、最初の1バイト(PID)は1クロック送信し、その後のデータは2クロックずつ送信する。
【0059】
MPU13(snx2pu2)は16ビットのオリジナルプロセッサであり、図13にブロック図を示す。このMPU13は、表6に示す様な特徴と命令セットを持つ。
【0060】
【表6】
【0061】
MPU13は、16ビット汎用レジスタを4つ持っており、即値は8ビットである。また、このMPU13は、「フェッチ」ステージ、「デコードおよび命令実行およびメモリアクセス」ステージ、「ライトバック」ステージの3段パイプラインである。そして、このMPU13は、割り込み線を持ち、割り込みのジャンプ先アドレスはINA命令を用いて変更可能である。割り込みからの復帰はRET命令を用いる。RET命令は表6の様に($B+I)のアドレスか、割り込み発生時に待避されたPC(プログラムカウンタ)に、ジャンプ出来る。パケットの受信は常に割り込みからの動作を考えているため、割り込みに関する命令を設計し、ファームウェアの自由度を高めた。右シフト命令(SR命令)は、扱うデータがバイト単位のため、バイトシフトを採用した。比較命令(SLT命令)は、ディスクリプタの送信サイズを決定する為に使用する。UTMIからの受信ではIO命令を使用する。このIO命令を実行すると、UTMIの信号線「rcv_data」から1バイトデータを受信する。UTMIのデータレシーブタイミングは、図14の様になる。MPU13はUTMIとのバスクロックの2倍で動作しているため、ファームウェアで調整し2クロックに1回データを受信する。UTMIから受信するデータはバイト単位であるが、USBのパケットには2バイトで意味を持つデータが有る。その場合は、表6に示すIO命令のフラグIを図15の様に使用して、2バイトに整形する。USBデバイス1をバスに接続すると、コンフィギュア時にホストからユニークアドレスを割り当てられる。ホストは、そのアドレスを利用してリクエストのターゲットデバイスを指定する。SET命令はセットされたユニークアドレスを、MPU13の内部レジスタに保持し、以降の通信ではアドレスのコンペアを行う。ファームウェアでは、SET命令を用いて、受信したリクエストが自分に対するものかチェック可能である。DMA命令、HAS命令は、それぞれデバイスコントローラ10内にあるDMAコントローラ12とハッシュコントローラ11を制御する為にある。
【0062】
DMA命令は、2種類の動作を行う。1つは、送信開始アドレスと送信サイズを指定して、DMAコントローラ12にリクエストを発行する。リクエストされたDMAコントローラ12は、受信したアドレスとサイズを元にパケットを送信する。もう1つは、アドレスとサイズを送らずにリクエストのみ発行する。この場合、DMAコントローラ12が使用するアドレスとサイズは、前回のパケット送信後に保存された値を使用する。DMA実行中にLD命令、ST命令の様なメモリアクセス命令がフェッチされると、パイプラインはDMAコントローラ12から実行完了の通知が来るまでストールする。ただし、メモリアクセスを行なわない命令がフェッチされた場合は、パイプラインはストールしない。
【0063】
HAS命令は、ホストからのリクエストパターンを判別する為に使用し、必要な値をレジスタ「$2」、レジスタ「$3」にセットし実行する。「$2」と「$3」のビット結合した値がハッシュのキー7となり、ハッシュコントローラ11は対応したデータを返す。もしハッシュがヒットすると、「$2」にはデータメモリ6Cのアドレス、「$3」には送信サイズをセットする。ハッシュのキー7がヒットしなかった場合は、「$2」と「$3」に0を返す。
【0064】
次に、USB2.0用コントローラ10のUSBパケット処理について説明する。トランザクション開始後、最初に受信するトークンパケットに対して、MPU13は図16の様な処理を行う。この処理では、ハッシュコントローラ11は使用せずにパケット内の各フィールドから次のチェックを行う。即ち、PIDフィールドの値から、実行するトランザクションを判別する(図16のS1)。また、ADDRフィールドの値と、ホストから割り当てられたユニークアドレスとを比較して自分に対するリクエストかどうかをチェックする(図16のS2)。自分に対するリクエストであれば、EPフィールドの値から、どのエンドポイントに対するリクエストかをチェックする(図16のS3)。尚、自分に対するリクエストでなければ、受信したパケットは無視する(図16のS3’)。PIDが「SETUP」で、且つ自分に対するリクエストである場合、次に受信するデータパケットからデバイスリクエストの種類を判別するようにする。
【0065】
当該データパケットのMPU13による処理は図17の様になる。パケット内のデータフィールドのうち、ハッシュとして利用するデータをハッシュコントローラ11に入力する(図17のS4,S5,S6)。
【0066】
ハッシュコントローラ11では、MPU13からデータを受信すると、図18の様な処理を行う。始めに、受信したデータからタグ7A(TAG)、セット7B(SET)、ブロック7C(BLOCK) フィールドから成るキー7を生成する(図18のS7)。そして、各フィールドを使用して、タグ記憶部(Tag_rom)17A,17B、バリュー記憶部(Data_rom)18A,18Bからデータをロードする(図18のS8,S9)。タグ記憶部17A,17Bからロードしたデータが、タグ7Aの値と等しければ(図18のS10;Yes)、ハッシュがヒットしているので、バリュー記憶部18A,18Bからロードした値をMPU13に送信する(図18のS11)。もしタグ7Aの値と異なっていれば(図18のS10;No)、ハッシュがヒットしなかった事を示す「0」を送信する(図18のS12)。
【0067】
MPU13では、ハッシュコントローラ11からの帰り値に基づいて分岐を行う(図17のS13)。帰り値が0の場合(図17のS13;Yes)、ハッシュがヒットしなかった事になる(本実施例では、ディスクリプタの送信リクエストではなかった事になる)ので、ホストから指定されたステータスのセット等を行う(図17のS14)。もし、帰り値が0以外の場合は(図17のS13;No)、ハッシュがヒットした為、帰り値はデータメモリ6C内のアドレスと送信サイズである。コントローラ10は、帰り値を元に、データメモリ6C内のデータをパケットに整形して、送信する(図17のS15)。尚、送信サイズについては、「受信したデータフィールドで指定されているサイズ」と「ハッシュによって取得したサイズ」を比較して、小さい方を使用する。
【0068】
以上のように構成されるデバイスコントローラ10の入出力に、UTMIの仮想モジュールを図19の様に接続し、シミュレーションを行なった。尚、シミュレーションにはsecondsを用いた。また、デバイスコントローラ10からの出力はUTMI仮想モジュールには接続せずに、コントローラ10からの出力を直接チェックした。バスに流すデータは、UTMIの仕様にあるタイミングで行い、パケットを流す際のコントローラ10の動きと、記述したファームウェアの動作を確認した。
【0069】
以上の条件でシミュレーションを行った結果、以下のような正常動作が確認出来た。即ち、(1)UTMIの信号線「RXActive」の信号検出によるMPU13の割り込み発生、(2)多重割り込み防止の割り込み制御、(3)RET命令による割り込み処理からの復帰と割り込みフラグの動作、(4)IO命令を使用した信号線「rcv_data」からの連続したデータ受信、(5)受信したデータのCRCエラー検出、(6)受信したデータから必要なデータをハッシュコントローラ11に入力し、ハッシュがヒットした際の正常なメモリのアドレスとサイズの取得、(7)ハッシュがヒットしなかった際の0データの受信、(8)ハッシュコントローラ11から得られたメモリアドレスとサイズをDMA命令を使用してDMAコントローラ12へ出力(信号線「xmit_data」への出力)、(9)DMA命令実行中にメモリアクセス命令が発生した場合のパイプラインのストールと、DMA命令終了後のストールの解除、(10)信号線「TXReady」からの信号検出によるバスクロックごとのデータ送信、(11)送信パケットの種類を判別し、正常なサイズを送信。データパケットを送信する場合はCRC16の正常な算出と送信、(12)複数回データパケットを送信した場合のDMAコントローラ12内のアドレスレジスタのインクリメントと残り送信サイズのディクリメント、(13)トークンパケット受信時のデバイスアドレスのセット、である。
【0070】
以上をまとめると、デバイスコントローラ10では次の動作が可能である。即ち、(1)割り込み発生によるパケットの正常な受信、(2)リクエストを判別して正常なパケットの送信、(3)ホストからセットされるユニークなデバイスアドレスのセットとトークンパケット受信時のアドレスのコンペア、(4)ハッシュコントローラ11とDMAコントローラ12を使用したリクエストの迅速な応答、である。
【0071】
デバイスコントローラ10をDEMO社demoライブラリで合成した結果は、表7の様になった。なお、入出力のトライステートで発生する遅延は無視した。
【0072】
【表7】
【0073】
また、ALTERA社のalteraライブラリで合成し、Quartus II 2.1 でコンパイルした結果を表8に示す。実装のターゲットデバイスはCQ出版社のFPGA開発パッケージStratix評価キットEP1S10であり、ALTERA Stratix EP1S10F780C7ESを搭載している。
【0074】
【表8】
【0075】
以上のように本実施例では、リクエストに対して少ない命令サイクルで応答出来るコントローラ10が設計できた。MPU13の動作周波数はUSBバスの4分の1(UTMIインターフェースがMPU13側に供給するクロックの2倍)を想定しており、ハイスピード(HS:480Mbps)モードで使用する場合は120MHzでの動作が必要である。設計したMPU13は表8の様に最大動作周波数は149.54MHzとなり、ハイスピードモードへの対応が可能である。
【0076】
なお、上述の実施形態は本発明の好適な実施の一例ではあるがこれに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々変形実施可能である。例えば、本発明に用いるハッシュは上記に例示した「1 Way Associative」や「2 Way Associative」のようなビット抽出による方法に限らず、シノニムを発生しない完全ハッシュを実現するハッシュ関数を利用したものであっても良い。
【0077】
また、上述の実施形態ではリクエストの一部を対象リクエストとしてハッシュに対応させたが、正常な全てのリクエストに対応するようにハッシュを構成しても良い。例えば、「SET ADDRESS」リクエストのDATAフィールドをハッシュに入力すると、自動的にユニークアドレスがセットされ、それ以降のトークンパケットをハッシュに入力すると、自分に対するリクエストであれば真(例えば「1」)を返し、他のデバイスへのリクエストであれば偽(例えば「0」)を返すようにしても良い。
【0078】
また、本発明は必ずしもUSBデバイスへの適用に限定されず、ホストからのリクエストに応じた処理を実行するデバイスに本発明を適用しても良い。
【0079】
【発明の効果】
以上の説明から明らかなように、本発明のデバイスおよびデバイスの制御方法およびデバイス制御用プログラムによれば、ホストより受信したリクエストからキーを作成し、このキーに対応するバリューを記憶手段から検索し、このバリューに基づいてリクエストに応じた処理を実行するので、リクエストの種類が増えても、リクエストの内容を判別する比較演算命令を増やす必要はなく、リクエストの内容判別の処理が単純化される。このため、当該処理に要する時間を大幅に短縮できる。これにより、上記判別処理をCPUを用いてソフトウェアにより実現することが可能となる。さらに、比較的性能の低い低速のCPUであっても、高速な処理が可能となることから、デバイスの低消費電力化が図れる。また、ソフトウェアによる柔軟な制御が可能となる。本発明によって、携帯電話やPDAなどの低消費電力機器に対してもUSB2.0等の高速転送用コントローラの導入が可能となる。
【図面の簡単な説明】
【図1】本発明のデバイスおよびデバイスの制御方法およびデバイス制御用プログラムの実施の一形態を示し、キーとバリューを対応付けるハッシュの一例を示す概念図である。
【図2】リクエストに応じた処理に必要な情報が格納された記憶手段のデータ構造の一例を示す概念図である。
【図3】本発明のデバイスの概略構成の一例を示すブロック図である。
【図4】本発明の一実施例であるUSBデバイスのブロック図である。
【図5】上記実施例に用いられ、リクエストに応じた処理に必要な情報が格納された記憶手段のデータ構造の一例を示す概念図である。
【図6】上記実施例におけるデバイスが備えるCRCモジュールの回路を示す概念図である。
【図7】上記CRCモジュールのブロック図である。
【図8】上記実施例のデバイスにおけるキーとバリューを対応付けるハッシュの一例を示す概念図である。
【図9】上記実施例のデバイスにおけるキーの作成方法を示す概念図である。
【図10】上記実施例のデバイスが備えるDMAコントローラを示す概略構成図である。
【図11】上記DMAコントローラのステート遷移図である。
【図12】上記実施例のデバイスにおけるデータ送信のタイミングを示す図である。
【図13】上記実施例のデバイスが備えるMPUのブロック図である。
【図14】上記実施例のデバイスにおけるデータ受信のタイミングを示す図である。
【図15】上記MPUが備えるIO命令の動作を示す図である。
【図16】上記実施例のデバイスにおける処理(トークンパケットの受信処理)の一例を示すフローチャートである。
【図17】上記実施例のデバイスにおける処理(データパケットの受信処理)の一例を示すフローチャートである。
【図18】上記実施例のデバイスにおける処理(ハッシュコントローラの処理)の一例を示すフローチャートである。
【図19】上記実施例のデバイスをUTMI仮想モジュールと接続した様子を示すブロック図である。
【図20】USBデバイスの構成例を示す概念図である。
【図21】USB通信に用いられるパケットのフォーマットを示し、(A)はトークンパケットを(B)はデータパケットを(C)はハンドシェイクパケットを示す。
【図22】USB通信におけるトランザクションを示す概念図である。
【図23】SETUPトランザクションにおいてUSBデバイスが行なうUSBホストからのリクエスト内容の判別を、ハッシュを用いずに行なう場合の処理の流れを示すフローチャートである。
【符号の説明】
1 USBデバイス(デバイス)
6 記憶手段
6A タグ記憶部
6B バリュー記憶部
7 キー
7A タグ
7B セット
7C ブロック
8 バリュー
Claims (4)
- ホストからのリクエストを受信し、該リクエストに応じた処理を実行するデバイスにおいて、予め定められた一定処理により前記リクエストから抽出されるキーと対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリューが格納された記憶手段を有し、ホストから受信したリクエストから前記一定処理によってキーを作成する処理と、上記作成されたキーに対応するバリューを前記記憶手段から検索する処理と、上記検索されたバリューに基づいて当該リクエストに応じた処理を実行することを特徴とするデバイス。
- ホストからのリクエストを受信したデバイスに当該リクエストに応じた処理を実行させる制御方法において、予め定められた一定処理により前記リクエストから抽出されるキーと対応付けられる箇所に、当該リクエストに応じた処理に必要な情報を示すバリューを記憶手段に格納しておき、前記デバイスに、ホストから受信したリクエストから前記一定処理によってキーを作成する処理と、上記作成されたキーに対応するバリューを前記記憶手段から検索する処理と、上記検索されたバリューに基づいて当該リクエストに応じた処理を実行させることを特徴とするデバイスの制御方法。
- ホストから受信したリクエストから、予め定められた一定処理によりキーを作成する手段と、前記キーと対応付けられる箇所に、該当リクエストに応じた処理に必要な情報を示すバリューが予め格納されている記憶手段から、上記作成されたキーに対応するバリューを検索する手段と、上記検索されたバリューに基づいて当該リクエストに応じた処理を実行する手段として、デバイスを機能させることを特徴とするデバイス制御用プログラム。
- 前記キーはタグ、セット、ブロックの3つのフィールドで構成され、前記記憶手段は、対象リクエストに基づく前記セットの値をアドレスとして当該リクエストに基づく前記タグの値が格納されたタグ記憶部と、対象リクエストに基づく前記セットおよび前記ブロックの値をアドレスとして当該リクエストに関する前記バリューが格納されたバリュー記憶部とを有し、上記作成されたキーについて、前記セットの値をアドレスとする前記タグ記憶部の値と、前記タグの値とを比較し、一致する場合に、前記セットおよび前記ブロックの値をアドレスとして前記バリュー記憶部から前記バリューを読み出す手段として、デバイスを機能させることを特徴とする請求項3記載のデバイス制御用プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003124988A JP2004334273A (ja) | 2003-04-30 | 2003-04-30 | デバイスおよびデバイスの制御方法およびデバイス制御用プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003124988A JP2004334273A (ja) | 2003-04-30 | 2003-04-30 | デバイスおよびデバイスの制御方法およびデバイス制御用プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004334273A true JP2004334273A (ja) | 2004-11-25 |
Family
ID=33502383
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003124988A Pending JP2004334273A (ja) | 2003-04-30 | 2003-04-30 | デバイスおよびデバイスの制御方法およびデバイス制御用プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004334273A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006285378A (ja) * | 2005-03-31 | 2006-10-19 | Fujitsu Ltd | データ転送装置 |
JP2013200839A (ja) * | 2012-03-26 | 2013-10-03 | Toshiba Corp | 半導体記憶装置、情報処理システムおよび制御方法 |
-
2003
- 2003-04-30 JP JP2003124988A patent/JP2004334273A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006285378A (ja) * | 2005-03-31 | 2006-10-19 | Fujitsu Ltd | データ転送装置 |
JP4541949B2 (ja) * | 2005-03-31 | 2010-09-08 | 富士通株式会社 | データ転送装置 |
JP2013200839A (ja) * | 2012-03-26 | 2013-10-03 | Toshiba Corp | 半導体記憶装置、情報処理システムおよび制御方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8200875B2 (en) | Processing and forwarding of message-signaled interrupts | |
JP5054201B2 (ja) | 統一コネクタアーキテクチャ | |
US8898349B1 (en) | IPMI over USB data transfer between host computer and baseboard management controller (BMC) | |
JP2008047116A (ja) | 入力/出力装置とメモリ間のデータ転送の融通性のある制御 | |
EP2312457B1 (en) | Data processing apparatus, data processing method and computer-readable medium | |
CN1531684A (zh) | 数据处理器及运行数据处理器的方法 | |
JP4837659B2 (ja) | 分割トランザクションを処理するためのバス・コントローラ | |
WO2012034524A1 (zh) | Usb设备识别主机windows操作系统版本类型的方法 | |
CN101221543A (zh) | 执行dma块移动的方法、dma设备和数据处理系统 | |
JP6136127B2 (ja) | コントローラ、電子機器及びusbデバイスの制御方法 | |
RU2007143547A (ru) | Технологии для обеспечения проверки правильности и передачи информации | |
US8074232B2 (en) | Method for improving the communication of the human interface device | |
JP4014876B2 (ja) | 多機能電子周辺カード | |
TW538379B (en) | Streamlining ATA device initialization | |
JP2002342260A (ja) | Usb送信制御回路およびその制御方法 | |
JP2021012598A (ja) | 情報処理装置及び制御方法 | |
JP2004334273A (ja) | デバイスおよびデバイスの制御方法およびデバイス制御用プログラム | |
US8996771B1 (en) | System and method for communication via universal serial bus | |
US20130326097A1 (en) | Semiconductor device | |
US20050138236A1 (en) | Direct memory access control device and method for automatically updating data transmisson size from peripheral | |
US20030135684A1 (en) | Data processor having an access size control unit | |
US20080288692A1 (en) | Semiconductor integrated circuit device and microcomputer | |
JP2988879B2 (ja) | バス変換装置 | |
JP7391154B2 (ja) | デイジーチェーンspi集積回路およびその動作方法 | |
JP4860811B2 (ja) | マイクロコンピュータ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20041022 |