説明

USBデバイスの制御方法、コントローラ及び電子機器

【課題】USB装置を認識することができない等の問題を防止することが可能なコントローラ等を提供する。
【解決手段】USBコントローラ40は、USB装置10の制御に関する時間を決定するための情報を外部から入力することが可能なレジスタ130と、レジスタ130に入力された情報に基づいてUSB装置10の制御に関する時間を決定する処理部120と、USBを介してUSB装置10に接続され、処理部120によって決定された時間に応じたタイミングでUSBに信号又はデータを出力するUSBインタフェース80とを含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、USB(Universal Serial Bus)を介してUSBデバイスと通信を行うことによりUSBデバイスを制御する方法、USBデバイスを制御するコントローラ、そのようなコントローラを含む電子機器に関する。
【背景技術】
【0002】
近年、USB(Universal Serial Bus)が高速シリアルインターフェースとして脚光を浴びている。USBでは、USBホスト側装置とUSBデバイス側装置との間で信号又はデータの送受信が行われる。
【0003】
USB規格においては、USBホスト側装置がUSBデバイス側装置を認識する等のために、USBホスト側装置が定常的信号、周期的信号又はデータをUSBに出力し及び/又は出力を継続する時間、若しくは或る信号又はデータをUSBに出力してから次の信号又はデータをUSBに出力するまでの種々の時間が規定されている。
【0004】
しかしながら、現実には、USBホスト側装置がUSB規格に規定されている時間に従って信号又はデータをUSBに出力しても、USBデバイス側装置を認識することができない等の問題がある。
【0005】
関連する技術として、下記の特許文献1には、データ転送中にケーブルが引き抜かれた場合、或いはバスリセット信号が発生した場合に、転送済みデータファイルが無駄に破棄されてしまうことを防止するシリアルバス通信システムが掲載されている。
【0006】
【特許文献1】特開2003−242103号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、USBホスト側装置がUSB規格に規定されている時間に従って信号又はデータをUSBに出力しても、USBデバイス側装置を認識することができない等の問題を防止することが可能なUSBデバイスの制御方法を提供することにある。また、本発明は、そのようなコントローラを提供することにある。また、本発明は、そのようなコントローラを含む電子機器を提供することにある。
【課題を解決するための手段】
【0008】
本発明は、USB(Universal Serial Bus)を介してUSBデバイスと通信を行うためのコントローラがUSBデバイスを制御するために実行する方法であって、USBデバイスの制御に関する少なくとも1つの時間を決定するための情報の入力を外部から受け、情報に基づいて少なくとも1つの時間を決定し、決定した少なくとも1つの時間に応じたタイミングでUSBに信号又はデータを出力することによりUSBデバイスの制御を行う、USBデバイスの制御方法に関係する。
【0009】
本発明によれば、信号又はデータをUSBに出力するタイミングを外部から設定することができ、USBデバイス側装置を認識することができない等の問題を防止することができるようになる。
【0010】
また、本発明は、USB(Universal Serial Bus)を介してUSBデバイスと通信を行うためのコントローラであって、USBデバイスの制御に関する少なくとも1つの時間を決定するための情報をコントローラの外部から入力されることが可能な情報入力部と、情報入力部に入力された情報に基づいて少なくとも1つの時間を決定する処理部と、USBを介してUSBデバイスに接続され、処理部によって決定された少なくとも1つの時間に応じたタイミングでUSBに信号又はデータを出力するUSBインタフェース部と、を含む、コントローラに関係する。
【0011】
本発明によれば、信号又はデータをUSBに出力するタイミングを外部から設定することができるようになる。これにより、USBデバイス側装置を認識することができない等の問題を防止することができるようになる。
【0012】
また、本発明では、処理部が、USBインタフェース部を制御するドライバプログラムを実行するCPUコアを含み、CPUコアが、情報入力部に入力された情報に基づいて少なくとも1つの時間を決定するようにしても良い。
【0013】
このようにすれば、外部から入力された情報に基づいて少なくとも1つの時間を決定する処理をプログラムによって容易に実現することができるようになる。
【0014】
また、本発明では、情報入力部が、コントローラの設定及び/又は制御に関する情報を外部から書き込むためのレジスタを含み、少なくとも1つの時間を決定するための少なくとも1つのデータがレジスタに外部から書き込まれ、処理部が、レジスタに書き込まれた少なくとも1つのデータに基づいて少なくとも1つの時間を決定するようにしても良い。
【0015】
このようにすれば、本来コントローラの設定及び/又は制御に関する情報を外部から書き込むためのレジスタを利用して、少なくとも1つの時間を決定するための少なくとも1つのデータを外部から入力することができる。これにより、外部入力端子等を新たに設けることなく、信号又はデータをUSBに出力するタイミングを外部から設定することができるようになる。
【0016】
また、本発明では、レジスタに少なくとも1つの時間を表す少なくとも1つの値が書き込まれ、処理部が、少なくとも1つの値によって表される時間を少なくとも1つの時間として決定するようにしても良い。
【0017】
このようにすれば、処理部が少なくとも1つの時間を決定するための処理を簡易な処理とすることができるようになる。また、コントローラに接続されレジスタにアクセス可能なメインCPU等から少なくとも1つの時間を設定することができるようになる。
【0018】
また、本発明では、少なくとも1つの時間を表す少なくとも1つの値をそれぞれ含む複数のテーブルを記憶する記憶部を更に含み、レジスタに複数のテーブルのいずれかを特定するデータが書き込まれ、処理部が、複数のテーブルの内のデータによって特定されるテーブルに含まれている少なくとも1つの値によって表される時間を少なくとも1つの時間として決定するようにしても良い。
【0019】
このようにすれば、外部からレジスタに書き込むデータ量を少なくしながら、複数の時間を決定することができるようになる。
【0020】
また、本発明では、情報入力部が、少なくとも1つの時間を決定するための少なくとも1つの信号を外部から入力することが可能な信号入力回路を含み、処理部が、信号入力回路に入力された少なくとも1つの信号に基づいて少なくとも1つの時間を決定するようにしても良い。
【0021】
このようにすれば、コントローラに接続されるメインCPUのソフトウェア等に変更や追加を行うことなく、外部から少なくとも1つの時間を設定することができるようになる。
【0022】
また、本発明では、少なくとも1つの時間を表す少なくとも1つの値をそれぞれ含む複数のテーブルを記憶する記憶部を更に含み、信号入力回路に複数のテーブルのいずれかを特定する少なくとも1つの信号が入力され、処理部が、複数のテーブルの内の少なくとも1つの信号によって特定されるテーブルに含まれている少なくとも1つの値によって表される時間を少なくとも1つの時間として決定するようにしても良い。
【0023】
このようにすれば、外部から入力する信号数を少なくしながら、複数の時間を決定することができるようになる。
【0024】
また、本発明では、少なくとも1つの時間が、USBデバイスを初期化するための制御に関する時間及び/又はUSBデバイスをレジュームさせる制御に関する時間を含むようにしても良い。
【0025】
このようにすれば、実際のUSBデバイスにおいて正常に認識されない及び/又は正常に動作できないという事象の要因となり得るUSBデバイスを初期化するための制御に関する時間及び/又はUSBデバイスをレジュームさせる制御に関する時間を外部から設定することができるようになる。これにより、実際のUSBデバイスにおいて正常に認識されない及び/又は正常に動作できないという事象が発生することを防止することができるようになる。
【0026】
また、本発明では、少なくとも1つの時間が、定常的信号、周期的信号又はデータをUSBに出力し及び/又は出力を継続する時間、若しくは或る信号又はデータをUSBに出力してから次の信号又はデータをUSBに出力するまでの時間を含むようにしても良い。
【0027】
また、本発明は、本発明に係るコントローラと、バスを介してコントローラに接続されるホストCPUと、を含む電子機器に関係する。
【発明を実施するための最良の形態】
【0028】
以下、本発明の実施形態について詳細に説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。また同一の構成要素には同一の参照番号を付して説明を省略する。
【0029】
1. USBデバイスを制御するためにUSB規格において規定されている時間
USBデバイスを制御するためにUSB規格において規定されている幾つかの時間について、例を挙げて説明する。
【0030】
1.1 USBホストとUSBデバイスが接続された場合
まず、USBホストとUSBデバイスが接続(attach)された場合について説明する。
【0031】
1.1.1 HSホストとHSデバイスが接続された場合
図1にHS(High-speed)ホストとHSデバイスが接続された場合におけるUSB上の信号の波形図を示す。
【0032】
ホストとデバイスが接続されると、ホストからVBUSに電位が供給される。タイミングTM0においてVBUSの電位が所与の閾値電位まで上昇した後、タイミングTM1において、デバイスは、DP(D+)を1.5KΩのプルアップ抵抗を用いて3.3Vにプルアップすることと規定されている。デバイスが行うこのプルアップ動作を、FSターミネーションをオン(ON)にすると言う。VBUSから電力の供給を受けて動作するバスパワー動作デバイスは、タイミングTM0から100ms以内に、FSターミネーションをオン(ON)にすることと規定されている。
【0033】
なお、DP(D+)がHレベル且つDM(D−)がLレベルであること(より正確には、Differential "1"であること(D+>VOH(min)且つD−<VOL(max)であること))は、Jステート(J state)、チャープJ(chirp J)又は単にJと呼ばれる。また、DPがLレベル且つDMがHレベルであること(より正確には、Differential "0"であること(D−>VOH(min)且つD+<VOL(max)であること))は、Kステート(K state)、チャープK(chirp K)又は単にKと呼ばれる。また、DPがLレベル且つDMがLレベルであること(より正確には、D+及びD−<VOL(max)であること)は、SE0(Single-ended 0)と呼ばれる。
【0034】
後で詳しく説明するように、JステートはタイミングTM1から100ms以上継続することとして規定されている。そして、タイミングTM1から100ms経過した後のタイミングTM2において、デバイスはサスペンド(SUSPEND)状態になる。これは、USB規格において、Jステートが100ms以上続いた場合には、デバイスがサスペンド状態になることと規定されているためである。
【0035】
その後タイミングTM3においてDPがLレベルになり、SE0となる。タイミングTM1からタイミングTM3までの時間は、USB規格において、TATTDBとして規定されており、USBデバイスはこの時間を100ms以内にすることとして規定されている。
【0036】
SE0が2.5μs以上継続すると、デバイスは、タイミングTM4において、サスペンド状態からリセット状態に遷移する。また、デバイスは、SE0の開始即ちタイミングTM3から2.5μs〜3ms以内にチャープKの出力を開始し、チャープKの出力を1ms以上継続する。その後、デバイスは、SE0の開始時刻即ちタイミングTM3から7ms未満のタイミングTM5において、チャープKの出力を終了する。
【0037】
タイミングTM5からSE0が100μs継続した後のタイミングTM6において、ホストは、チャープKとチャープJの組み合わせを出力する(チャープKとチャープJを交互に出力する)。デバイスは、タイミングTM7においてチャープKとチャープJの組み合わせを3組(3回)検出すると、FSターミネーションをオフ(OFF)にし、HSモードに移行する。
【0038】
その後、ホストは、タイミングTM8においてチャープKとチャープJの組み合わせの出力を終了し、デバイスは、HSアイドルとなる。なお、タイミングTM3からタイミングTM8までの時間は、USB規格において、TDRST(ルートハブにおいてはTDRSTR)として規定されており、TDRSTは10ms以上20ms以下であることとして規定されている。また、TDRSTRは50ms以上であることとして規定されている。
【0039】
また、タイミングTM8からタイミングTM9までの時間は、USB規格において、TRSTRCYとして規定されており、USBデバイスはこの時間を10ms以内にすることとして規定されている。
【0040】
1.1.2 HSホストとFSデバイスが接続された場合
図2にHSホストとFS(Full-Speed)デバイスが接続された場合におけるUSB上の信号の波形図を示す。
【0041】
ホストとデバイスが接続されると、ホストからVBUSに電位が供給される。タイミングTM10においてVBUSの電位が所与の閾値電位まで上昇した後、タイミングTM11において、デバイスは、FSターミネーションをオンにする。VBUSから電力の供給を受けて動作するバスパワー動作デバイスは、タイミングTM10から100ms以内に、FSターミネーションをオンにすることと規定されている。
【0042】
JステートはタイミングTM11から100ms以上継続することとして規定されている。そして、タイミングTM11から100ms経過した後のタイミングTM12において、デバイスはサスペンド状態になる。
【0043】
その後タイミングTM13においてDPがLレベルになり、SE0となる。タイミングTM11からタイミングTM13までの時間は、USB規格において、TATTDBとして規定されており、USBデバイスはこの時間を100ms以内にすることとして規定されている。
【0044】
SE0が2.5μs以上継続すると、デバイスは、タイミングTM14において、サスペンド状態からリセット状態に遷移する。なお、FSデバイスは、先に説明したHSデバイスと異なり、チャープKの出力を行わない。
【0045】
タイミングTM13からSE0が10ms継続した後のタイミングTM18において、デバイスは、FSアイドルとなる。なお、HSホストとHSデバイスが接続された場合(先述)と異なり、タイミングTM13からタイミングTM18までの間にチャープKとチャープJの組み合わせの出力は行われない。また、タイミングTM13からタイミングTM18までの時間は、HSホストとHSデバイスが接続された場合と同様に、10ms以上であることとして規定されている。また、タイミングTM18からタイミングTM19までの時間も、HSホストとHSデバイスが接続された場合と同様に、10ms以上であることとして規定されている。
【0046】
1.2 SetAddress標準デバイス・リクエストのリカバリ・インターバル時間
USBの通信は、ホストとデバイスのエンドポイントとの間で行われる。ホストは、1つのシステムの中でユニークなアドレスをデバイスに割り当てて、デバイスのエンドポイントと通信する。ホストがデバイスにアドレスを割り当てる場合には、SetAddress標準デバイス・リクエストが用いられる。USB規格においては、ホストがSetAddress標準デバイス・リクエストに対する応答をUSBデバイスから受け取ってから次のリクエストをUSBデバイスに送信するまでの待ち(ウェイト)時間であるSetAddress標準デバイス・リクエストのリカバリ・インターバル(recovery interval)時間は2ms以上として規定されている。すなわち、USBデバイスは、SetAddress標準デバイス・リクエストに対する応答をUSBホストに送信してから2ms以内に次のリクエストを受信可能な状態になる必要がある。
【0047】
1.3 サスペンド状態のデバイスをレジュームさせるレジューム信号の出力時間
USB規格においては、ホストがサスペンド(SUSPEND)状態のデバイスをレジューム(RESUME)させることができることが規定されている。そして、USB規格においては、ホストがサスペンド状態のデバイスをレジュームさせるためのレジューム信号の出力時間は、TDRSMDNとして規定されており、このTDRSMDNは、20ms以上として規定されている。
【0048】
1.4 USBデバイス装置の実測値
本発明者は、市販されている一般的なUSBデバイス装置において、上記のような各種の時間の実測を行った。また、本発明者は、市販されている一般的なパーソナルコンピュータ(USBホスト装置)と市販されている一般的なプリンタ(USBデバイス装置)との間において、上記のような各種の時間の実測を行った。
【0049】
図3に、USB規格において規定されている時間(規格値)と、USBデバイス装置において実測した時間(実測値)を示す。本発明者は、図3に示すように、市販されているUSBデバイス装置の実測値がUSBの規格値より長くなってしまっていることを見出した。このようなUSBデバイス装置がUSBホスト装置に接続されている場合に、USBホスト装置がUSBの規格値に従って動作すると、USBホスト装置がUSBデバイス装置を正常に認識できなかったり、USBデバイス装置が正常に動作しないということが起こり得る。
【0050】
また、USB規格においては、USBデバイス装置はレジューム(RESUME)機能を有することとして規定されている。しかしながら、本発明者は、レジューム機能を有していない、いわば規格違反とも言えるUSBデバイス装置が存在することも見出した。このような規格違反とも言えるUSBデバイス装置がUSBホスト装置に接続されている場合には、USBホスト装置はUSBデバイス装置をレジュームさせることが出来ず、その結果として、USBホスト装置及び/又はUSBデバイス装置がフリーズしてしまうということが起こり得る。
【0051】
2. 第1の実施形態
2.1 構成
図4に、以上のような問題を解決できる本実施形態のUSBホストコントローラ40(広義にはコントローラ)及びこれを含む電子機器20の構成例を示す。
【0052】
電子機器20は、メインCPU30と、USBホストコントローラ40とを含む。USBホストコントローラ40は、USBI/F80と、転送コントローラ100と、処理部120と、レジスタ130(広義には情報入力部)と、DMA処理部140とを含む。なおUSBホストコントローラ40を半導体集積回路として実現するようにしても良い。
【0053】
なおUSBホストコントローラ40、電子機器20は図4の構成に限定されず、その構成要素の一部を省略したり、構成要素間の接続形態を変更したり、図4とは異なる構成要素を追加する変形実施が可能である。例えばUSBホストコントローラ40において転送コントローラ100や処理部120やDMA処理部140等の構成を省く変形実施も可能である。また電子機器20において、図2に示されるもの以外の構成要素(例えば操作部、表示部、ROM、RAM、撮像部又は電源等)を追加してもよい。
【0054】
また本実施形態の電子機器20としては、ビデオカメラ、デジタルカメラ、携帯型音楽プレーヤ、携帯型映像プレーヤ、光ディスクドライブ装置、ハードディスクドライブ装置、オーディオ機器、携帯電話機、携帯型ゲーム機、電子手帳、電子辞書又は携帯型情報端末等の種々のものが考えられる。
【0055】
メインCPU30は電子機器20の全体的な処理、制御を行う。例えば電子機器20がビデオカメラである場合には、メインCPU30はカメラプロセッサとして機能し、撮像デバイスの制御や画像のエフェクト処理や画像の圧縮処理などを行う。
【0056】
レジスタ130は、メインCPU30のアドレス空間(メモリ空間、I/O空間等)にマッピングされており、レジスタ130には、CPUバスを介してメインCPU30が発行したコマンドが書き込まれる。USBI/F80、転送コントローラ100、処理部120、DMA処理部140は、レジスタ130に書き込まれたコマンドに基づいて動作する。またレジスタ130にはUSBI/F80、転送コントローラ100、処理部120、DMA処理部140等の動作ステータスが書き込まれ、メインCPU30はレジスタ130に書き込まれた動作ステータスを読み出すことができる。
【0057】
USBI/F80は、USBを介してデータ転送(高速シリアル転送)を行うためのインターフェースである。具体的にはUSBI/F80は、USB(シリアルバス)を介してデータの受信や送信を行う物理層回路を含み、USB機器10との間のデータ転送を行う。
【0058】
なおUSBI/F80がホスト機能を有する場合には、USBにUSBデバイスを接続し、そのUSBデバイスとの間でデータ転送を行うようにしてもよい。
【0059】
DMA処理部140は、CPUバスに接続されており、USB機器10に送信されるデータをCPUバスから受け取って転送コントローラ100にDMA転送し及び/又はUSB機器10から受信されたデータを転送コントローラ100からCPUバスにDMA転送する。
【0060】
転送コントローラ100は、USBI/F80、DMA処理部140の間でのデータ転送を制御する。これにより、CPUバスから転送されてきたデータをUSB機器10に書き込んだり、USB機器10に書き込まれたデータをCPUバスに転送することが可能になる。
【0061】
転送コントローラ100はデータバッファ102(例えばFIFO)を含む。データバッファ102は、転送コントローラ100により転送されるデータを一時的に格納するためのバッファである。このデータバッファ102は、RAMなどのメモリにより実現できる。
【0062】
処理部120は、USBホストコントローラ40の全体的な処理、制御を行ったり、USBホストコントローラ40が含む各回路ブロックの制御を行う。この処理部120の機能の一部又は全部は、例えばCPUとCPU上で動作するファームウェアにより実現することができる。なお、処理部120を専用のハードウェア回路により実現することもできる。
【0063】
本実施形態においては、処理部120は、CPU121と、RAM122と、ROM123を含む。ROM123には、OS(オペレーティングシステム)、BIOS(Basic Input/Output System)、API(Application Programming Interface)、ICコモンファンクションドライバ、USBホストクラスドライバ、USBホストスタック等のプログラムが記憶されている。なお、ROM123は、EEPROM等であっても良い。
【0064】
なお処理部120をUSBホストコントローラ40に内蔵させず、メインCPU30との間のインタフェース処理を行うCPUI/Fを設けるようにしてもよい。この場合には、USBホストコントローラ40やUSBホストコントローラ40が含む各回路ブロックの制御は、CPUI/Fを介してメインCPU30が行うことになる。
【0065】
また処理部120を動作させるためのプログラムは、メインCPU30側のメモリ(EEPROM等)に記憶しておき、電源投入後にメインCPU30がダウンロードコマンドを発行し、CPUバスを介してUSBホストコントローラ40にダウンロードするようにしてもよい。
【0066】
CPU121は、RAM122を作業領域として利用しながら、ROM123に記憶されているプログラムを実行する。
【0067】
図5に、CPU121がROM123に記憶されているプログラムを実行することにより実現される機能ブロックを示す。
【0068】
OSブロックは、CPU121がROM123に記憶されているOSプログラムを実行することにより実現され、ROM123内の他のプログラムを動作させるためのオペレーティングシステムブロックであり、タスクの生成や管理、他のソフトウェアブロックに対するサービスコールを提供する。
【0069】
BIOSブロックは、CPU121がROM123に記憶されているBIOSプログラムを実行することにより実現されるブロックであり、メインCPU30がUSBホストコントローラ40のレジスタ130に設定したコマンドを解析し、APIブロックの適切な関数を呼び出してUSBホストコントローラ40の機能を実現するソフトウェアブロックである。
【0070】
APIブロックは、CPU121がROM123に記憶されているAPIプログラムを実行することにより実現されるブロックであり、USBホストコントローラ40のハードウェアとファームウェアが有する機能をBIOSブロックに対して関数形式で提供するソフトウェアブロックである。
【0071】
ICコモンファンクションブロックは、CPU121がROM123に記憶されているICコモンファンクションプログラムを実行することにより実現されるブロックであり、USBホストコントローラ40の初期設定および、パワーマネージメント機能等、USBホストコントローラ40自体の設定や制御を行うソフトウェアブロックである。
【0072】
USBホストクラスドライバブロックは、CPU121がROM123に記憶されているUSBホストクラスドライバプログラムを実行することにより実現されるブロックであり、USBホストスタックの上位プロトコルを処理するソフトウェアブロックであり、USB規格のHID(Human Interface Device)クラス、マスストレージ(Mass Storage)クラス、オーディオ(Audio)クラス、ビデオ(Video)クラス、プリンタ(Printer)クラス、通信デバイス(Communication Device)クラス、ピクチャ転送プロトコル(Picture Transfer Protocol)クラス等に対応するクラスドライバのブロックである。
【0073】
USBホストスタックブロックは、CPU121がROM123に記憶されているUSBホストスタックプログラムを実行することにより実現されるブロックであり、USBI/F80を制御し、USB機器10の接続/切断処理、パワーマネージメント、エンドポイント毎の転送処理を行うソフトウェアブロックである。
【0074】
2.2 USBI/F
USBでは、図6(A)に示すようなエンドポイント(EP0〜15)がUSBデバイス側に用意される。またUSBでは、転送(transfer)のタイプとして、コントロール転送、アイソクロナス転送、インタラプト転送、バルク転送などが定義されており、各転送は一連のトランザクションにより構成される。そしてトランザクションは図6(B)に示すように、トークンパケットと、オプショナルなデータパケットと、オプショナルなハンドシェークパケットにより構成される。
【0075】
OUTトランザクションでは、図6(C)に示すように、まず、USBホストがUSBデバイスに対してOUTトークン(トークパケット)を発行する。次に、USBホストはUSBデバイスに対してOUTデータ(データパケット)を送信する。そして、USBデバイスは、OUTデータの受信に成功すれば、USBホストに対してACK(ハンドシェークパケット)を送信する。一方、INトランザクションでは、図6(D)に示すように、まず、USBホストがUSBデバイスに対してINトークンを発行する。そしてINトークンを受信したUSBデバイスは、USBホストに対してINデータを送信する。そしてUSBホストは、INデータの受信に成功すると、USBデバイスに対してACKを送信する。
【0076】
なお"D←H"は、USBホストからUSBデバイスに対して情報が転送されることを意味し、"D→H"は、USBデバイスからUSBホストに対して情報が転送されることを意味する。
【0077】
次に、USBのバルクオンリートランスポートのプロトコルについて説明する。ハードディスクドライブや光ディスクドライブなどの大容量記憶装置は、マスストレージと呼ばれるクラスに属する。このマスストレージクラスには、バルクオンリートランスポートというプロトコルが規格化されている。
【0078】
バルクオンリートランスポートでは、バルクIN、バルクOUTの2つのエンドポイントを用いてパケット転送が行われる。即ち、コマンドには、CBW(Command Block Wrapper)と呼ばれる31バイトのデータが使用され、バルクOUTのエンドポイントを用いて転送される。データ転送には、転送方向に応じてバルクIN、バルクOUTのエンドポイントが使用される。コマンドに対するステータスには、CSW(Command Status Wrapper)と呼ばれる13バイトのデータが使用され、バルクINのエンドポイントを用いて転送される。
【0079】
次に、バルクオンリートランスポートの送受信処理(プロトコル制御)について、図7(A)、(B)を用いて説明する。図7(A)に示すように、USBホストがUSBデバイスにデータを送信する場合には、まずUSBホストがCBWをUSBデバイスに送信するコマンドトランスポートが行われる。具体的には、USBホストが、エンドポイントEP1を指定するトークンパケットをUSBデバイスに送信し、次に、CBWをUSBデバイスのエンドポイントEP1に送信する。このCBWはライトコマンドを含む。そして、USBデバイスからUSBホストにACKのハンドシェークパケットが返却されると、コマンドトランスポートが終了する。
【0080】
コマンドトランスポートが終了するとデータトランスポートに移行する。このデータトランスポートでは、まずUSBホストが、エンドポイントEP1を指定するトークンパケットをUSBデバイスに送信し、次に、OUTデータをUSBデバイスのエンドポイントEP1に送信する。そして、USBデバイスからUSBホストにACKのハンドシェークパケットが返却されると、1つのトランザクションが終了する。そして、このようなトランザクションが繰り返され、CBWで指定されるデータ長の分だけデータが送信されると、データトランスポートが終了する。
【0081】
データトランスポートが終了するとステータストランスポートに移行する。このステータストランスポートでは、まず、USBホストが、エンドポイントEP2を指定するトークンパケットをUSBデバイスに送信する。すると、USBデバイスが、エンドポイントEP2にあるCSWをUSBホストに送信する。そして、USBホストからUSBデバイスにACKのハンドシェークパケットが返却されると、ステータストランスポートが終了する。
【0082】
USBホストがUSBデバイスからデータを受信する場合は、図7(B)に示すように処理が行われる。図7(B)が図7(A)と異なるのは、コマンドトランスポートのCBWがリードコマンドを含む点と、データトランスポートにおいてINデータの転送が行われる点である。
【0083】
図8にUSBI/F80の構成例を示す。USBI/F80は、トランシーバ220、転送コントローラ250、データバッファ290を含む。
【0084】
トランシーバ220(デュアルトランシーバ)は、差動信号(DP、DM)を用いてUSBのデータを送受信するための回路であり、ホストトランシーバ230、デバイストランシーバ240を含む。
【0085】
ホストトランシーバ230は、アナログフロントエンド回路(物理層回路)及び高速ロジック回路を有し、USBのHSモード(480Mbps)、FSモード(12Mbps)、LSモード(1.5Mbps)をサポートする。デバイストランシーバ240は、アナログフロントエンド回路(物理層回路)及び高速ロジック回路を有し、USBのHSモード、FSモードをサポートする。このデバイストランシーバ240としてはUTMI(USB2.0 Transceiver Macrocell Interface)仕様に準拠した回路を用いることができる。
【0086】
転送コントローラ250は、USBを介したデータ転送を制御するためのコントローラであり、トランザクション層やリンク層などのデータ転送制御を行う。この転送コントローラ250は、ホストコントローラ260、デバイスコントローラ270、ポートセレクタ280を含む。なおこれらの一部を省略する構成としてもよい。
【0087】
ホストコントローラ260(ホストSerial Interface Engine)は、ホストモード時のデータ転送を制御する。具体的にはホストコントローラ260は、トランザクションのスケジューリング(発行)やトランザクションの管理やパケットの生成&解析などを行う。またサスペンド、レジューム、リセット等のバスイベントを生成する。更にバスの接続・切断状態の検出やVBUSの制御などを行う。
【0088】
デバイスコントローラ270(デバイスSerial Interface Engine)は、デバイスモード時のデータ転送を制御する。具体的にはデバイスコントローラ270は、トランザクションの管理やパケットの生成&解析などを行う。またサスペンド、レジューム、リセット等のバスイベントを制御する。
【0089】
ポートセレクタ280は、ホストモードとデバイスモードのいずれかを選択して有効にするためのセレクタである。例えばレジスタ等の設定によりホストモードが選択されると、ポートセレクタ280はホストコントローラ260、ホストトランシーバ230を選択(イネーブル)する。一方、レジスタ等の設定によりデバイスモードが選択されると、ポートセレクタ280はデバイスコントローラ270、デバイストランシーバ240を選択(イネーブル)する。
【0090】
データバッファ290(FIFO、パケットバッファ)は、USB(シリアルバス)を介して転送されるデータ(送信データ、受信データ)を一時的に格納(バッファリング)するためのバッファである。このデータバッファ290は、RAMなどのメモリにより実現できる。
【0091】
なお、転送コントローラ250やデータバッファ290の一部の機能を、図4の転送コントローラ100やデータバッファ102により実現してもよい。また図8では、ホスト動作とデバイス動作の両方の動作を行うUSBI/F80の例を示したが、デバイス動作だけを行うものであってもよい。
【0092】
2.3 動作
次に、本実施形態の動作について説明する。本実施形態のUSBホストコントローラ40においては、USBデバイスの制御に関する時間としてUSB規格で規定されている時間(規格値)に固定することなく、メインCPU30からの指示に応じて、USBデバイスの制御に関する時間を変更することとしている。
【0093】
2.3.1 初期時における動作
まず、初期時(パワーオン時、リセット時等)における電子機器20の動作について説明する。
【0094】
図9は、初期時における電子機器20の動作を示すフローチャートである。
まず、メインCPU30が、変更対象である時間を特定する情報(時間を表す名称(TATTDB、TDRST等)等であっても良い)及び/又は時間値をレジスタ130に設定する(ステップS11)。
【0095】
例えば、メインCPU30が、図10(a)〜(c)に示すように、時間を表す名称及び時間値をレジスタ130に設定するようにしても良い。図10(a)は、多くのUSB機器を認識又は動作可能とできるように長めの時間値を設定する場合の例であり、図10(b)は、待ち時間を短くして動作を素早くするために短めの時間値を設定する場合の例であり、図10(c)は、USB規格に準拠した時間値を設定する場合の例である。或いは、図10(a)〜(c)をテーブルとしてROM123に予め記憶しておき、メインCPU30が、いずれのテーブルを使用するかを表す情報をレジスタ130に設定するようにしても良い。
【0096】
なお、図10(a)〜(c)では、5個の時間値を設定することとしているが、これら5個以外の時間値は、USB規格において規定されている値(規格値)を用いるようにすれば良い。
【0097】
なお、変更対象である時間が予め決められている場合には、変更対象である時間を特定する情報(時間を表す名称等)を不要とすることができる。
【0098】
USBホストコントローラ40のBIOSブロックは、レジスタ130の内容を解析し、変更対象である時間を特定する情報及び時間値を引数として、APIをコールする(ステップS21)。
【0099】
USBホストコントローラ40のAPIブロックは、変更対象である時間を特定する情報及び時間値を引数として、USBホストスタックをコールする(ステップS31)。
【0100】
USBホストコントローラ40のUSBホストスタックブロックは、引数に基づいて、RAM122上の時間値を設定及び/又は変更する(ステップS41)。なお、RAM122上には予めデフォルトの時間値が書き込まれるようにしておき、USBホストスタックブロックが、このデフォルト値を上書き変更するようにしても良い。
【0101】
ステップS41(USBホストスタックブロック)及びステップS31(APIブロック)からリターンすると、BIOSブロックは、時間値変更完了ステータスをレジスタ130に設定する(ステップS22)。メインCPU30は、レジスタ130を参照することで、時間値変更完了ステータスを読み出すことができる。
【0102】
2.3.2 USBホストとUSBデバイスが接続された場合における動作
次に、USB機器10が接続された場合におけるUSBホストコントローラ40の動作について説明する。
【0103】
図11は、USB機器10が接続された場合におけるUSBホストコントローラ40の動作を示すフローチャートである。
まず、USBホストコントローラ40(より詳細にはUSBホストスタックブロック)は、システム初期化動作を行い(ステップS51)、USB機器10が接続されるのを待つ。
【0104】
USB機器10が接続される(例えば、USBホストコントローラ40とUSB機器10との間を接続するUSBケーブルが挿入される等)と、USBホストコントローラ40は、電源安定待ち時間調節動作を行う(ステップS52)。より詳細には、USBホストコントローラ40は、メインCPU30から設定されたTATTDBの設定値(図10(a)〜(c)参照)に基づいて、電源安定待ち時間(図1のタイミングTM1〜TM3及び/又は図2のタイミングTM11〜TM13参照)の調節動作を行う。すなわち、USBホストコントローラ40は、メインCPU30から設定されたTATTDBの設定値に基づく時間に応じたタイミングでUSBに信号又はデータを出力する。例えば、USBホストコントローラ40は、図1のタイミングTM1〜TM3及び/又は図2のタイミングTM11〜TM13の長さ(時間)を調節する。
【0105】
次に、USBホストコントローラ40は、USB機器10のリセットからパケット発行までの時間調節動作を行う(ステップS53)。より詳細には、USBホストコントローラ40は、メインCPU30から設定されたTDRST及びTRSTRCYの設定値(図10(a)〜(c)参照)に基づいて、USB機器10のリセットからパケット発行までの時間(図1のタイミングTM3〜TM8及び/又は図2のタイミングTM13〜TM18参照)の調節動作を行う。すなわち、USBホストコントローラ40は、メインCPU30から設定されたTRSTRCYの設定値に基づく時間に応じたタイミングでUSBに信号又はデータを出力する。例えば、USBホストコントローラ40は、図1のタイミングTM3〜TM8及び/又は図2のタイミングTM13〜TM18の長さ(時間)を調節する。
【0106】
次に、USBホストコントローラ40は、エニュメレーション動作を行う(ステップS54)。エニュメーレション動作は、アドレス変更時間調節動作を含む。
【0107】
図12は、アドレス変更時間調節動作を示すフローチャートである。
まず、USBホストコントローラ40(より詳細にはUSBホストスタックブロック)が、SetAddress標準デバイス・リクエストをUSB機器10に発行し(ステップS61)、USB機器10が、SetAddress標準デバイス・リクエストを実行し(ステップS71)、SetAddress標準デバイス・リクエストへの応答をUSBホストコントローラ40に送信する(ステップS72)。
【0108】
USBホストコントローラ40は、SetAddress標準デバイス・リクエストへの応答をUSB機器10から受信すると、メインCPU30から設定されたSetAddress標準デバイス・リクエストのリカバリ・インターバル時間の設定値(図10(a)〜(c)参照)に基づいて、待ち(ウェイト)処理を行う(ステップS62)。
【0109】
そして、USBホストコントローラ40は、メインCPU30から設定されたSetAddress標準デバイス・リクエストのリカバリ・インターバル時間の設定値に基づく待ち(ウェイト)処理が終了すると、GetDescriptor標準デバイス・リクエストをUSB機器10に発行し(ステップS63)、USB機器10が、GetDescriptor標準デバイス・リクエストを実行し(ステップS73)、GetDescriptor標準デバイス・リクエストへの応答をUSBホストコントローラ40に送信する(ステップS74)。すなわち、USBホストコントローラ40は、メインCPU30から設定されたSetAddress標準デバイス・リクエストのリカバリ・インターバル時間の設定値に基づく時間に応じたタイミングでGetDescriptor標準デバイス・リクエストをUSBに出力する。換言すると、USBホストコントローラ40は、SetAddress標準デバイス・リクエストへの応答をUSB機器10から受信してからGetDescriptor標準デバイス・リクエストを発行するまでの待ち(ウェイト)時間の長さを調節する。
【0110】
以後、必要に応じて、USBホストコントローラ40とUSB機器10との間で通信が行われる。
【0111】
以上説明したように、本実施形態によれば、USBデバイスを制御するためにUSB規格で規定されている時間(規格値)に固定することなく、メインCPU30からの指示に応じて、USB機器10の制御に関する時間を変更することができる。これにより、USBホストコントローラ40がUSB機器10を正常に認識できない又はUSB機器10が正常に動作しないことを防止することが可能になる。
【0112】
2.3.3 USBデバイスをレジュームさせる場合における動作
次に、サスペンド状態にあるUSB機器10をレジュームさせる場合におけるUSBホストコントローラ40の動作について説明する。
【0113】
図13は、サスペンド状態にあるUSB機器10をレジュームさせる場合におけるUSBホストコントローラ40の動作を示すフローチャートである。
まず、USBホストコントローラ40(より詳細にはUSBホストスタックブロック)は、レジューム動作を行う(ステップS81)。レジューム動作は、レジューム時間調節動作(ステップS82)を含む。
【0114】
レジューム時間調節動作(ステップS82)において、USBホストコントローラ40は、メインCPU30から設定されたTDRSMDNの設定値(図10(a)〜(c)参照)に基づいて、USB機器10をレジュームさせるためのレジューム信号の長さ(時間)を調節する。すなわち、USBホストコントローラ40は、レジューム信号の出力をメインCPU30から設定されたTDRSMDNの設定値(図10(a)〜(c)参照)に基づく時間だけ継続する。
【0115】
そして、USBホストコントローラ40は、USB機器10のレジュームが失敗した場合(ステップS83)には、USB機器10のリセット処理を行う(ステップS84)。具体的には、USBホストコントローラ40は、USB機器10をリセットするためのリセット信号(SE0)をUSB機器10に出力する。
【0116】
以上説明したように、本実施形態によれば、USBデバイスを制御するためにUSB規格で規定されている時間(規格値)に固定することなく、メインCPU30からの指示に応じて、USB機器10の制御に関する時間を変更することができる。これにより、USB機器10がレジューム機能を有しない、いわば規格違反とも言えるUSBデバイス装置であっても、USBホストコントローラ40及び/又はUSB機器10がフリーズしてしまうことを防止することが可能になる。
【0117】
3. 第2の実施形態
3.1 構成
図14に、本実施形態のATA−USBブリッジコントローラ70(広義にはコントローラ)及びこれを含む電子機器50の構成例を示す。本実施形態では、メインCPU60が有するATAのホスト側I/F62の存在に着目し、このホスト側I/F62に対応するATAのデバイス側I/F160をATA−USBブリッジコントローラ70に設けている。こうすることで、メインCPU60からのデータを、デバイス側I/F160を介して転送コントローラ100に書き込むことが可能になる。また本実施形態では、転送コントローラ100に書き込まれたデータをUSB機器10に転送するためのUSBI/F80を設けている。こうすることで、ATAバスとUSBの間のバスブリッジ機能を実現できる。
【0118】
なおATA−USBブリッジコントローラ70、電子機器50は図14の構成に限定されず、その構成要素の一部を省略したり、構成要素間の接続形態を変更したり、図14とは異なる構成要素を追加する変形実施が可能である。例えばATA−USBブリッジコントローラ70において処理部150やUSBI/F80やデバイス側I/F160等の構成を省く変形実施も可能である。また電子機器50において、図14に示されるもの以外の構成要素(例えば操作部、表示部、ROM、RAM、撮像部又は電源等)を追加してもよい。
【0119】
電子機器50は、メインCPU60と、ATA−USBブリッジコントローラ70とを含む。なお、ATA−USBブリッジコントローラ70を半導体集積回路として実現するようにしても良い。
【0120】
メインCPU60は電子機器50の全体的な処理、制御を行う。このメインCPU60はATAのホスト側I/F(インターフェース)62を含む。なおホスト側I/F62は、モード設定によりCF+インタフェースからATAインターフェースに切り替わるCF+のインターフェース規格のものであってもよい。
【0121】
ATA−USBブリッジコントローラ70は、ATA(IDE)のデバイス側I/F160を含む。またUSBI/F80や転送コントローラ100や処理部150やGPI(入力)回路170(広義には情報入力部)を含むことができる。
【0122】
ここでデバイス側I/F160は、ATABUS1を介してメインCPU60(ATAホスト)との間でデータ転送(通信)を行うためのインターフェースである。なお本実施形態におけるATAは、ATAPI(AT Attachment with Packet Interface)を含むことができる。また、シリアルATAやCE−ATAなどの従来のATA規格を発展した規格を含むこともできる。またATA−USBブリッジコントローラ70に、ATAのホスト側I/Fを設けてもよい。
【0123】
デバイス側I/F160はレジスタ162を含む。このレジスタ162には、ATABUS1を介してメインCPU60が発行したコマンドが書き込まれる。具体的には、このレジスタ162として、ATAのデバイス側I/Fが含むタスクレジスタを使用できる。そして本実施形態では、ATAのコマンドのうちベンダ定義コマンド(Vender specific command)として割り当てられたコマンドが、レジスタ162(タスクレジスタ)に書き込まれる。転送コントローラ100、処理部150は、このベンダ定義コマンドに基づいて動作することができる。例えば転送コントローラ100は、レジスタ162に設定されたベンダ定義の転送制御コマンド(転送方向や転送データ量を指定するコマンド)に基づいて、デバイス側I/F160、USBI/F80間のデータ転送方向を決定する。また転送コントローラ100は、インターフェース間で転送するデータ量を決定する。
【0124】
GPI回路170は、外部から信号を入力可能なGPI(入力)端子171、172を含んでいる。図14においては、GPI端子171は、プルアップ抵抗を介して電源電位VDDに接続されている。すなわち、GPI端子171には、Hレベルが入力されている。また、GPI端子172は、プルダウン抵抗を介して電源電位(接地電位)VSSに接続されている。すなわち、GPI端子172には、Lレベルが入力されている。
【0125】
なお、ここでは、GPI回路170が2個のGPI端子171、172を含むこととしているが、1個又は3個以上のGPI端子を含んでも良い。また、GPI(入力)回路170に代えて、GPIO(入出力)回路を用いることとしても良い。また、ここでは、GPI端子171、172がプルアップ又はプルダウンされているが、出力レベルを可変とする出力回路からの出力信号がGPI端子171、172に入力されることとしても良い。
【0126】
USBI/F80がホスト機能を有する場合には、USBにUSBデバイスを接続し、そのUSBデバイスとの間でデータ転送を行うようにしてもよい。
【0127】
転送コントローラ100は、デバイス側I/F160、USBI/F80の間でのデータ転送を制御する。これにより、メインCPU60から転送されてきたデータをUSB機器10に書き込んだり、USB機器10に書き込まれたデータをメインCPU60に転送することが可能になる。
【0128】
処理部150は、ATA−USBブリッジコントローラ70の全体的な処理、制御を行ったり、ATA−USBブリッジコントローラ70が含む各回路ブロックの制御を行う。この処理部150の機能の一部又は全部は、例えばCPUとCPU上で動作するファームウェアにより実現することができる。なお、処理部150を専用のハードウェア回路により実現することもできる。
【0129】
本実施形態においては、処理部150は、CPU151と、RAM152と、ROM153を含む。ROM153には、OS(オペレーティングシステム)、メインタスク、ATAデバイス側I/Fドライバ、API、ICコモンファンクションドライバ、USBホストクラスドライバ、USBホストスタック、GPI回路ドライバ等のプログラムやパラメータテーブルが記憶されている。なお、ROM153は、EEPROM等であっても良い。
【0130】
なお処理部150をATA−USBブリッジコントローラ70に内蔵させず、メインCPU60との間のインターフェース処理を行うCPUI/Fを設けるようにしてもよい。この場合には、ATA−USBブリッジコントローラ70やATA−USBブリッジコントローラ70が含む各回路ブロックの制御は、CPUI/Fを介してメインCPU60が行うことになる。
【0131】
また処理部150を動作させるためのプログラムは、メインCPU60側のメモリ(EEPROM等)に記憶しておき、電源投入後にメインCPU60がダウンロードコマンドを発行し、ATABUS1を介してATA−USBブリッジコントローラ70(ATA−USBブリッジコントローラが有するメモリ)にダウンロードするようにしてもよい。
【0132】
CPU151は、RAM152を作業領域として利用しながら、ROM153に記憶されているプログラムを実行する。
【0133】
図15に、CPU151がROM153に記憶されているプログラムを実行することにより実現される機能ブロックを示す。
【0134】
OSブロックは、CPU151がROM153に記憶されているOSプログラムを実行することにより実現され、ROM153内の他のプログラムを動作させるためのオペレーティングシステムブロックであり、タスクの生成や管理、他のソフトウェアブロックに対するサービスコールを提供する。
【0135】
ATAデバイス側I/Fドライバブロックは、CPU151がROM153に記憶されているATAデバイス側I/Fドライバプログラムを実行することにより実現されるブロックであり、ATAデバイス側I/F160のハードウェアを制御し、メインCPU60のATAホスト側I/F62からATAデバイス側I/F160のレジスタ162(タスクレジスタ)に書き込まれたコマンドをATA/ATAPIプロトコルに則って処理するドライバブロックである。
【0136】
メインタスクブロックは、CPU151がROM153に記憶されているメインタスクプログラムを実行することにより実現され、他のソフトウェアブロックを統括するブロックであり、メインCPU60がデバイス側I/F160のレジスタ162(タスクレジスタ)に設定したコマンドを解析し、APIブロックの適切な関数を呼び出してATA−USBブリッジコントローラ70の機能を実現するソフトウェアブロックである。
【0137】
APIブロックは、CPU151がROM153に記憶されているAPIプログラムを実行することにより実現されるブロックであり、ATA−USBブリッジコントローラ70のハードウェアとファームウェアが有する機能をメインタスクブロックに対して関数形式で提供するソフトウェアブロックである。
【0138】
ICコモンファンクションブロックは、CPU151がROM153に記憶されているICコモンファンクションプログラムを実行することにより実現されるブロックであり、ATA−USBブリッジコントローラ70の初期設定および、パワーマネージメント機能等、ATA−USBブリッジコントローラ70自体の設定や制御を行うソフトウェアブロックである。
【0139】
USBホストクラスドライバブロックは、CPU151がROM153に記憶されているUSBホストクラスドライバプログラムを実行することにより実現されるブロックであり、USBホストスタックの上位プロトコルを処理するソフトウェアブロックであり、USB規格のHIDクラス、マスストレージクラス、オーディオクラス、ビデオクラス、プリンタクラス、通信デバイスクラス、ピクチャ転送プロトコルクラス等に対応するクラスドライバのブロックである。
【0140】
USBホストスタックブロックは、CPU151がROM153に記憶されているUSBホストスタックプログラムを実行することにより実現されるブロックであり、USBI/F80を制御し、USB機器10の接続/切断処理、パワーマネージメント、エンドポイント毎の転送処理を行うソフトウェアブロックである。
【0141】
GPI回路ドライバブロックは、CPU151がROM153に記憶されているGPI回路ドライバプログラムを実行することにより実現されるブロックであり、GPI回路170のハードウェアを制御し、GPI回路170のGPI端子171、172に供給される値(Hレベル又はLレベル)を読み取ってメインタスクブロックに出力する等のGPI回路170を制御する機能を提供するドライバブロックである。
【0142】
また、ROM153には、例えば図10(a)〜(c)に示すような複数のパラメータテーブルが記憶されている。後で説明するように、ATA−USBブリッジコントローラ70は、GPI回路170に外部から入力される信号に基づいて、ROM153に記憶されている複数のパラメータテーブルの中の1つを選択して、利用する。
【0143】
3.2 ATAのデバイス側I/F
図16にATAのデバイス側I/F160の構成例を示す。図16に示すようにデバイス側I/F160は、タスクレジスタ200、MDMA/PIO制御部202、UltraDMA制御部204、データバッファ206、転送制御部208を含む。
【0144】
タスクレジスタ200は、ATA(IDE)で規格化されているレジスタであり、コマンドブロックレジスタや、コントロールブロックレジスタを含む。ここでコマンドブロックレジスタは、コマンドを発行したりステータスを読み込むのに使用されるレジスタである。またコントロールブロックレジスタは、デバイスをコントロールしたり、代替えステータスを読み込むのに使用されるレジスタである。
【0145】
図17にタスクレジスタ200のレジスタ構成を示す。図17は、チップセレクト信号CS1、CS0(#は負論理を示す)が、各々、H、Lレベルの場合にアドレス選択されるコマンドブロックレジスタを示している。図17において、チップセレクト信号CS1、CS0、アドレス信号DA2、DA1、DA0が、各々、H、L、H、H、Hレベルであり、ホストによるレジスタライトの場合には、A1に示すCommandレジスタにアクセスされ、ホストによるレジスタリードの場合には、A1に示すStatusレジスタにアクセスされる。
【0146】
MDMA/PIO制御部202は、ATAのマルチワードDMA転送やPIO転送についてのデバイス側の制御処理を行う。UltraDMA制御部204は、ATAのUltraDMA転送についてのデバイス側の制御処理を行う。データバッファ206(FIFO)は、データ転送の転送レートの差を調整(緩衝)するためのバッファである。転送制御部208は後段の回路(転送コントローラ100、データバッファ102)との間のデータ転送を制御する。
【0147】
次に、ATAのデータ転送について図18(A)〜図19(B)の信号波形を用いて説明する。図18(A)〜図19(B)においてCS[1:0]は、ATAの各レジスタにアクセスするために使用するチップセレクト信号である。DA[2:0]は、データ又はデータポートにアクセスするためのアドレス信号である。DMARQ、DMACKは、DMA転送に使用される信号である。データ転送の準備が整った時にデバイス側がDMARQをアクティブ(アサート)にし、これに応答して、ホスト側がDMACKをアクティブにする。
【0148】
DIOW(STOP)は、レジスタ又はデータポートの書き込み時に使用するライト信号である。なお、UrtraDMA転送中はSTOP信号として機能する。DIOR(HDMARDY、HSTROBE)は、レジスタ又はデータポートの読み出し時に使用するリード信号である。なお、UrtraDMA転送中はHDMARDY、HSTROBE信号として機能する。IORDY(DDMARDY、DSTROBE)は、デバイス側のデータ転送の準備が整っていない時のウェイト信号等に使用される。なお、UrtraDMA転送中はDDMARDY、DSTROBE信号として機能する。
【0149】
INTRQは、デバイス側が、ホスト側に対して割り込みを要求するために使用される信号である。このINTRQがアクティブになった後、ホスト側がデバイス側のタスクレジスタのステータスレジスタの内容を読むと、所定時間後にデバイス側はINTRQを非アクティブ(ネゲート)にする。このINTRQを用いることで、デバイス側は、コマンド処理の終了をホスト側に通知できる。
【0150】
図18(A)、(B)は、PIO(Parallel I/O)リード、PIOライト時の信号波形例である。ATAのステータスレジスタのリードは図18(A)のPIOリードにより行い、コマンドレジスタへのライトは図18(B)のPIOライトにより行う。例えば、メインCPU30によるベンダ定義のコマンドの発行は、PIOライトにより実現できる。
【0151】
図19(A)、(B)は、DMAリード、DMAライト時の信号波形例である。データ転送の準備ができると、デバイス側が、DMARQをアクティブにする。そして、それを受けて、ホスト側が、DMACKをアクティブにして、DMA転送を開始する。その後、DIOR(リード時)又はDIOW(ライト時)を使用して、データDD[15:0]のDMA転送を行う。
【0152】
3.3 動作
次に、本実施形態の動作について説明する。本実施形態のATA−USBブリッジコントローラ70においてはUSBデバイスを制御するためにUSB規格で規定されている時間(規格値)に固定することなく、メインCPU30からの指示に応じて、USB装置10の制御に関する時間を変更することとしている。
【0153】
3.3.1 初期時における動作
まず、初期時(パワーオン時、リセット時等)におけるATA−USBブリッジコントローラ70の動作について説明する。
【0154】
図20は、初期時におけるATA−USBブリッジコントローラ70の動作を示すフローチャートである。
まず、ATA−USBブリッジコントローラ70のメインタスクブロックが、GPI回路ドライバブロックをコールする(ステップS101)。
【0155】
GPI回路ドライバブロックは、GPI端子171、172に入力されている信号を検出し、検出した信号に基づく値を戻り値としてメインタスクブロックに返却する(ステップS111)。例えば、図14において、GPI回路170は、2個のGPI端子171、172を含んでいるので、2ビットの入力を外部から受け付けることが可能である。そして、図14において、GPI端子171にはHレベルが、GPI端子172にはLレベルがそれぞれ入力されているので、GPI回路ドライバは、「0b10」(或いは「0b01」としても良い。)という2ビットの戻り値をメインタスクブロックに返却する。
【0156】
次に、メインタスクブロックは、GPI回路ドライバブロックからの戻り値を引数としてAPIブロックをコールする(ステップS102)。
【0157】
APIブロックは、メインタスクブロックからの引数を引数として、USBホストスタックブロック内の時間変更関数をコールする(ステップS121)。
【0158】
USBホストスタックブロックの時間変更関数は、ROM153に記憶されている複数のパラメータテーブルの中のAPIブロックからの引数に応じた1つのパラメータテーブルを選択する(ステップS131)。なお、このとき、USBホストスタックブロックの時間変更関数が、選択したパラメータテーブルをROM153からRAM152に転送し、USB機器10が接続された場合(後述)等において、RAM152に転送されたパラメータテーブルを参照して使用するようにしても良い。
【0159】
3.3.2 USBホストとUSBデバイスが接続された場合における動作
USB機器10が接続された場合におけるATA−USBブリッジコントローラ70の動作は、先に説明したUSBホストコントローラ40の動作(図11及び図12のフローチャート参照)と同様である。
【0160】
3.3.3 USBデバイスをレジュームさせる場合における動作
サスペンド状態にあるUSB機器10をレジュームさせる場合におけるATA−USBブリッジコントローラ70の動作は、先に説明したUSBホストコントローラ40の動作(図13のフローチャート参照)と同様である。
【0161】
以上説明したように、本実施形態によれば、USBデバイスを制御するためにUSB規格で規定されている時間(規格値)に固定することなく、外部から入力される信号に応じて、USB装置10の制御に関する時間を変更することができる。これにより、ATA−USBブリッジコントローラ70がUSB機器10を正常に認識できない又はUSB機器10が正常に動作しないことを防止することが可能になる。また、USB機器10がレジューム機能を有しない、いわば規格違反とも言えるUSBデバイス装置であっても、ATA−USBホストコントローラ70及び/又はUSB機器10がフリーズしてしまうことを防止することが可能になる。
【0162】
なお、本実施形態において、メインCPU60が、変更対象である時間を特定する情報(時間を表す名称(TATTDB、TDRST等)等であっても良い)及び/又は時間値をデバイス側I/F160のレジスタ162(タスクレジスタ)に設定し、ATA−USBブリッジコントローラ70が、レジスタ162(タスクレジスタ)に設定された時間値を用いてUSB装置10の制御に関する時間を変更するようにしても良い。
【0163】
また、先に説明した第1の実施形態において、USBホストコントローラ70が、GPI回路170を含み、USBコントローラ70の処理部120が、GPI回路170に外部から入力される信号に基づいて、USB装置10の制御に関する時間を変更するようにしても良い。
【0164】
なお、上記のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語(コントローラ、メインCPU、ATAデバイス側I/F、USBI/F等)は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。またコントローラや電子機器の構成、動作も本実施形態で説明したものに限定に限定されず、種々の変形実施が可能である。例えばATAバスは、シリアルATAやCE−ATAのバスであってもよい。
【図面の簡単な説明】
【0165】
【図1】USBホストとUSBデバイスが接続された場合のUSBの波形図。
【図2】USBホストとUSBデバイスが接続された場合のUSBの波形図。
【図3】USBの規格値と市販のUSBデバイスの実測値。
【図4】第1の実施形態のUSBコントローラ、電子機器の構成例。
【図5】処理部の機能ブロックの説明図。
【図6】図6(A)〜(D)はUSBのデータ転送の説明図。
【図7】図7(A)(B)はバルクオンリートランスポートの説明図。
【図8】USBI/Fの構成例。
【図9】第1の実施形態のフローチャート。
【図10】USBデバイスの制御に関する時間値の設定例の説明図。
【図11】第1の実施形態のフローチャート。
【図12】第1の実施形態のフローチャート。
【図13】第1の実施形態のフローチャート。
【図14】第2の実施形態のUSBコントローラ、電子機器の構成例。
【図15】処理部の機能ブロックの説明図。
【図16】ATAのデバイス側I/Fの構成例。
【図17】ATAのタスクレジスタの説明図。
【図18】図18(A)(B)はATAのPIO転送の信号波形例。
【図19】図19(A)(B)はATAのDMA転送の信号波形例。
【図20】第2の実施形態のフローチャート。
【符号の説明】
【0166】
ATABUS1 ATAバス、
10 USB機器、20、50 電子機器、30、60 メインCPU、
40 USBホストコントローラ、62 ATAのホスト側I/F、
70 ATA−USBブリッジコントローラ、80 USBI/F、
100 転送コントローラ、102 データバッファ、120、150 処理部、
121、151 CPU、122、152 RAM、123、153 ROM、
130 レジスタ、140 DMA処理部、160 ATAのデバイス側I/F、
162 ATAのタスクレジスタ、170 GPI回路、171、172 GPI端子

【特許請求の範囲】
【請求項1】
USB(Universal Serial Bus)を介してUSBデバイスと通信を行うためのコントローラが前記USBデバイスを制御するために実行する方法であって、
前記USBデバイスの制御に関する少なくとも1つの時間を決定するための情報の入力を外部から受け、前記情報に基づいて前記少なくとも1つの時間を決定し、決定した前記少なくとも1つの時間に応じたタイミングでUSBに信号又はデータを出力することにより前記USBデバイスの制御を行う、USBデバイスの制御方法。
【請求項2】
USB(Universal Serial Bus)を介してUSBデバイスと通信を行うためのコントローラであって、
前記USBデバイスの制御に関する少なくとも1つの時間を決定するための情報を前記コントローラの外部から入力されることが可能な情報入力部と、
前記情報入力部に入力された前記情報に基づいて前記少なくとも1つの時間を決定する処理部と、
USBを介して前記USBデバイスに接続され、前記処理部によって決定された前記少なくとも1つの時間に応じたタイミングでUSBに信号又はデータを出力するUSBインタフェース部と、
を含む、コントローラ。
【請求項3】
請求項2において、
前記処理部が、
前記USBインタフェース部を制御するドライバプログラムを実行するCPUコアを含み、前記CPUコアが、前記情報入力部に入力された前記情報に基づいて前記少なくとも1つの時間を決定するプログラムを実行する、コントローラ。
【請求項4】
請求項2又は3において、
前記情報入力部が、
前記コントローラの設定及び/又は制御に関する情報を外部から書き込むためのレジスタを含み、
前記少なくとも1つの時間を決定するための少なくとも1つのデータが前記レジスタに外部から書き込まれ、
前記処理部が、
前記レジスタに書き込まれた前記少なくとも1つのデータに基づいて前記少なくとも1つの時間を決定する、コントローラ。
【請求項5】
請求項4において、
前記レジスタに前記少なくとも1つの時間を表す少なくとも1つの値が書き込まれ、
前記処理部が、
前記少なくとも1つの値によって表される時間を前記少なくとも1つの時間として決定する、コントローラ。
【請求項6】
請求項4において、
前記少なくとも1つの時間を表す少なくとも1つの値をそれぞれ含む複数のテーブルを記憶する記憶部を更に含み、
前記レジスタに前記複数のテーブルのいずれかを特定するデータが書き込まれ、
前記処理部が、
前記複数のテーブルの内の前記データによって特定されるテーブルに含まれている前記少なくとも1つの値によって表される時間を前記少なくとも1つの時間として決定する、コントローラ。
【請求項7】
請求項2又は3において、
前記情報入力部が、
前記少なくとも1つの時間を決定するための少なくとも1つの信号を外部から入力することが可能な信号入力回路を含み、
前記処理部が、
前記信号入力回路に入力された前記少なくとも1つの信号に基づいて前記少なくとも1つの時間を決定する、コントローラ。
【請求項8】
請求項7において、
前記少なくとも1つの時間を表す少なくとも1つの値をそれぞれ含む複数のテーブルを記憶する記憶部を更に含み、
前記信号入力回路に前記複数のテーブルのいずれかを特定する前記少なくとも1つの信号が入力され、
前記処理部が、
前記複数のテーブルの内の前記少なくとも1つの信号によって特定されるテーブルに含まれている前記少なくとも1つの値によって表される時間を前記少なくとも1つの時間として決定する、コントローラ。
【請求項9】
請求項2乃至8のいずれかにおいて、
前記少なくとも1つの時間が、前記USBデバイスを初期化するための制御に関する時間及び/又は前記USBデバイスをレジュームさせる制御に関する時間を含む、コントローラ。
【請求項10】
請求項2乃至9のいずれかにおいて、
前記少なくとも1つの時間が、定常的信号、周期的信号又はデータをUSBに出力し及び/又は出力を継続する時間、若しくは或る信号又はデータをUSBに出力してから次の信号又はデータをUSBに出力するまでの時間を含む、コントローラ。
【請求項11】
請求項1乃至10のいずれかに記載のコントローラと、
バスを介して前記コントローラに接続されるホストCPUと、
を含むことを特徴とする電子機器。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate