FAQ USBハードウェア 質問一覧
1.転送速度
2.USBコントローラの制御
- コントロール転送Set Addressの場合でのアドレスの変更タイミングについて注意すべきことは?
- MSM66573からML60851Dのレジスタの内容をWriteできない場合があるのはなぜか?
- コントロール転送の制御方法は?
- INTR端子が"L"(アクティブ)→"H"(ノン・アクティブ)になるタイミングは?
- システム制御レジスタ(SYSCON)のD6ビット(PLLイネーブル)を゛0゛にするとどうなりますか?
- INTR端子が"L"でアクティブであることを検出するために初期設定は必要ですか?
- コントロール転送のINトークン、OUTトークンの判別方法は?
- Set Configuration終了後でないとバルクOUT/IN転送の割り込みを 発生させることはできないのですか?
- IRP終了を決める方法は? (IRP:I/O Request Packet)/トータル受信データバイト数がペイロードレジスタに記載されているMAXパケットサイズの整数倍の場合、IRPの終了を決める方法は?
- ACK / NAKの送信方法は?
- ML60851D/ML60852Aにおいて、リクエストエラーのときのSTALL応答のタイミングは?
- アイソクロナス転送でのFIFOはどのように動作しますか?
3.電源
- 全電源をセルフ電源でまかなう場合、その装置の電源がOFFした時 ML60851DのUSB出力ピンはハイインピーダンスになるのですか?
- システムの5Vから3.3Vを供給するのは問題ありますか?
- ML60851Dをバス電源で用いるための方法は?また、その際の問題と対応策は何か?
- D+端子のプルアップ用の3.3VとML60851Cの3.3V電源が分かれているのは?
4.Vbus検出方法
5.USBコントローラの発振回路
- 発振回路構成において、サードオーバートーンを、XIN側につけると問題ありますか?
- ML60851Dの発振回路の停止方法は?
- ML60851Dの発振回路を再開させる方法は?
- 内部PLLを無効にしたとき、外部PLLは必要ですか?
- ML60852Aにおいて、外部の水晶をML60851Dと同様の48MHzにする方法は?
- ML60852Aの発振回路の停止方法は?
- ML60852Aの発振回路を再開させる方法は?
6.サスペンド/レジューム
- リセット/サスペンド割込みが発生するような状況で、これらの割込みを マスクしていると他の割込みが発生しなくなるようなことがありますか?
- サスペンド/レジュームは、正常に機能するか?
- Suspend割込みが発生する条件は?
- Suspend/Resume機能とは、発振回路を停止することを意味するのか?
7.DMA転送(Direct Memory Access)
- シングルアドレスモード / デュアルアドレスモードとは?
- DMA転送でのメモリに対する書き込みのタイミングは?
- ML60851Dからメモリへ、ローカルMCUのDMAコントローラを使用して 転送する場合、DMA転送でのシングルアドレスモードでは、RDもしくはWRは常にメモリに対する信号であるべきでは?
- DMA転送において、シングルアドレスモードとデュアルアドレスモードの接続方法はどうなるのか?
- DMA機能を使用する場合、サンプルプログラムに追加しなければならないML60852Aのレジスタは?
8.MCU/メモリとの接続
9.他社製USB IC
10.不使用ピンの処理について
FAQ USBハードウェア 回答
1.転送速度
- 転送速度は、フラッシュメモリ-MCU間インタフェースの設計、また、システム設計に依存します。
[メモリサイズ<--MCUのRAMバッファリングに使用される.フラッシュメモリAC特性など]
サンプルプログラムの場合、PC-RAM (MCU) 間転送速度は、MAX 900 KBytes/secとなります。MCUのクロック周波数を14MHzにすると500 KBytes/sまで低下します。
もし、RAM (MCU) -フラッシュメモリ間の転送速度が500 KBytes/secの場合、全体データ転送速度 [ 例えば、PCからフラッシュメモリへの書きこみ ] は、半分の250 KBytes/secになります。
- USB仕様の"5.8.4 バス・アクセスの制約 (表5‐6 バルクトランザクションの制限)" を参照して頂ければわかりますように、1パケット=64Byteの場合、最大19パケットが転送できることになっていますが、ホスト-60851C間の実質の最大パケット数は、16∼17パケットです。そこで、最大パケット数を16として転送速度を算出すると、下記のよう になります。ここでは2つの例を示しています。(1) 1フレーム (1 ms) に上り下り8パケットずつ転送する場合パケット数=8 はデータサイズとしては4096 bitであるので、1フレーム内でのボーレートは 4096 bit / 1ms=4.096 Mbpsとなり、
- 転送速度は
・上り 4.096 Mbps - ・下り 4.096 Mbps
となります。 - (2) 1フレーム (1ms) に上りのみ16パケット (もしくは下りのみ16パケット) 転送する場合、パケット数=16 はデータサイズとし ては8192 bitであるので、1フレーム内でのボーレートは8192 bit/1ms=8.192 Mbpsとなり、転送速度は上り8 Mbps (下り8 Mbps)となります。
上記の2つの場合を参考にして頂ければ、転送速度の算出はわかると思います。
また、1フレームに16パケット以上転送するには、ホストアプリケーション、ドライバ、その他のUSBデバイスのバストラフィック、マイコンからのFIFOアクセスタイミング、ファームでの転送処理など、すべての要素を考慮する必要があります。
2.USBコントローラの制御
- コントロール転送でSet Addressの場合、セットアップステージのトランザクションの終了でアドレスの変更を行うとステータスステージのトランザクションでの返答ができなくなります。
詳しくは、USB仕様書 9.4.6 SetAddress (アドレスの設定) を参照してください。そこでは、"リクエストのステータス・ステージが正常に完了するまでは、USBデバイスはそのデバイス・アドレスを変更しない"とあります。
したがって、アドレスの変更タイミングは、ステータスステージが終了したとき、EP0送信パケットレディ割り込み要因が発生したタイミングでアドレス変更してください。
- この問題は、バスのACタイミングの問題だと考えられます。ML60851Dは、一般的なMCUには厳しいWriteタイミングを要求します。Write (Read) 時に、WR (RD) パルスからセットアップタイムを、20ns要求します。
ところが、高速駆動のMCUの場合、セットアップタイムが、20nsを下回ります。このため、データの書きこみができない状態になってしまいます。今回の場合は、アドレスのセットアップタイム規定の厳しくないCSを調整することで回避できると思います。
具体的には、ML60851CのCS入力の前段で、バッファを挿入頂き20nsの時間を稼いでください。
- コントロール転送は3つのステージで構成されます
3つのステージとは、
(1) セットアップ・ステージ (2) データ・ステージ (3) ステータス・ステージです。
また、コントロール転送はデータの方向およびサイズにより次の3つに分類されます。 -
・Control Read転送
-
・Control Write転送
-
・No Data Control転送
- この3つの各データ転送の制御を上記の3つのステージに従って説明します。
-
・Control Read転送の場合 (デバイス → ホスト)
- (1) セット・アップ・ステージ
- (1-1) ホストはリクエスト
(セットアップ・トークン + 8バイトのセットアップ・データ)をデバイスに送信します。 - (1-2) 60851Dはセットアップトークンをデコードして、8バイトのセットアップデータをセットアップレジスタに格納します 。
- (1-3) 60851DはホストにACKを送信します
- (1-4) 60851DはINTR端子をアサートします。
- (1-5) 割込みステータスレジスタから、割り込み要因を判別します。
- (1-6) セットアップレジスタをリードして、デコードします。
セットアップレジスタ- * bmRequestレジスタ:8bit (リクエストの特性)
- * brequestレジスタ :8bit (リクエストタイプ)
- * wValueレジスタ(LSB) :8bit (デバイス・アドレス下位)
- * wValueレジスタ(MSB) :8bit (デバイス・アドレス上位)
- * wIndexレジスタ(LSB) :8bit
- * wIndexレジスタ(MSB) :8bit
- * wLengthレジスタ(LSB):8bit (転送バイト数下位)
- * wLengthレジスタ(MSB):8bit (転送バイト数上位)
- (1-7) EP0ステータス・レジスタのD0を"1"にして、セットアップレディ割り込みを解除します。
- (1-8) セットアップレジスタのデコードして、リクエストに対応するデータを準備します。
- (1-9) EP0送信パケットレディ割り込みをイネーブルにします。
- (1-1) ホストはリクエスト
- (2) データステージ
- (2-1) 60851DはEP0送信FIFOがMCUからのライトが可能な状態であると判断すると、60851DはEP0送信パケットレディ・ビットを リセットします。
- (2-2) このとき、EP0送信パケットレディ割り込みがイネーブルであるので、EP0送信割り込みがアサートされます。
- (2-3 ) 割り込み処理で、EP0送信FIFOにデータをライトします。(このデータ内容はリクエストの種類により異なります)
- (2-4) FIFOへのライトが完了すると、エンドポイント・パケットレディ・レジスタのEP0送信パケットレディビットをセットします。これで、EP0送信割り込み処理を抜けます。
- (2-5) ホストから送信されているINトークンをトリガにして、デバイスはEP0送信FIFOからデータを送信します。
(2-6) ホストはデータを受信すると、デバイスにACKを送信します。 - (2-7) 60851DがACKを受信すると、エンドポイント・パケットレディ・レジスタのEP0送信パケットレディビットは自動的にリセットされます。
- (2-8) ここで、ホストへの送信データがある場合は、それぞれの割り込み処理で(2-2)∼(2-7)の処理が実行されます。ホストへの送信データがない場合は、次の処理に進みます。
- (2-9) ステータス・ステージでACKを返すために、EP0受信パケットレディ割り込みをディセーブルにします。
- (3) ステータス・ステージ
- (3-1) ホストがOUTトークン+データサイズ0のデータパケットをデバイスに送信します。
- (3-2) エンドポイント・パケットレディ・レジスタのEP0送信パケットレディビットが"0"である場合、60851Cはデータサイズ0 のデータパケットの受信により、転送終了と判断し、ACKをホストに送信します。
- (3-3) 60851DはEP0受信パケットレディ割り込み要因が発生します。
- (1) セット・アップ・ステージ
-
・Control Write転送の場合(ホスト→デバイス)
- (1) セット・アップ・ステージ
- (1-1) ホストはリクエスト(セットアップ・トークン+8バイトのセットアップ・データ)をデバイスに送信します。
- (1-2) 60851Dはセットアップトークンをデコードして、8バイトのセットアップデータをセットアップレジスタに格納します。
- (1-3) 60851DはホストにACKを送信します。
- (1-4) 60851DはINTR端子をアサートします。
- (1-5) 割込みステータスレジスタから、割り込み要因を判別します。
- (1-6) MCUはセットアップレジスタをリードして、デコードします。
セットアップレジスタ- * bmRequestレジスタ:8bit (リクエストの特性)
- * brequestレジスタ :8bit (リクエストタイプ)
- * wValueレジスタ(LSB) :8bit (デバイス・アドレス下位)
- * wValueレジスタ(MSB) :8bit (デバイス・アドレス上位)
- * wIndexレジスタ(LSB) :8bit
- * wIndexレジスタ(MSB) :8bit
- * wLengthレジスタ(LSB):8bit (転送バイト数下位)
- * wLengthレジスタ(MSB):8bit (転送バイト数上位)
- (1-7) EP0ステータス・レジスタのD0を"1"にして、セットアップレディ割り込みを解除します。
- (1-8) セットアップレジスタのデコード結果から、EP0受信パケットレディ割り込みをイネーブルにします
- (2) データステージ
- (2-1) ホストが送信するOUTトークンをトリガにして、デバイスはOUTトークンに続くデータをEP0受信FIFOに格納して、ACKを ホストに送信します。
- (2-2) 60851CはEP0受信FIFOへのデータ受信が完了すると、エンドポイント・パケットレディ・レジスタのEP0受信パケットレディに"1"をセットします。このとき、EP0受信パケットレディ割り込みがイネーブルであるので、EP0受信割り込みがアサートされます。
- (2-3) 割り込み処理により、MCUはEP0受信FIFOからデータをリードします。
- (2-4) MCUはEP0受信FIFOからのリードが完了すると、エンドポイント・パケットレディ・レジスタのEP0受信パケットレディビ ットに"1"をライトします。このことでEP0の受信準備がされて、EP0受信割り込みの処理を抜けます。
- (2-5) ホストからのデータ送信があるとMCUが判断した場合、それぞれの割り込み処理により、(2-1)∼(2-4)の処理が実行されます。ホストからのデータ送信が終了したとMCUが判断した場合、(2-6)に進みます。
- (2-6) EP0受信パケットレディ割り込みをディセーブルにします。
- (2-7) エンドポイント・パケットレディ・レジスタのEP0受信パケットレディに"1"をセットします。
- (2-8) デバイスがステータス・ステージでホストに対して正常応答するために、EP0送信パケットレディビットをセットします 。
- (3) ステータス・ステージ
- (3-1) ホストがINトークンをデバイスに送信します。
- (3-2) 60851Dはサイズ0のデータ・パケットをホストに送信します。
- (3-3) ホストはデバイスにACKを送信します。
- (3-4) 60851DがACKを受信すると、エンドポイント・パケットレディ・レジスタのEP0送信パケットレディが自動的にリセットされます。このACKを受けて、EP0送信パケットレディ割り込み要因が発生します。
- (1) セット・アップ・ステージ
-
・No Data Control転送
- (1) セットアップ・ステージ
- (1-1) ホストはデバイスにリクエストを送信します。(リクエスト=セットアップトークン+8バイトのセットアップ・データ)
- (1-2) ML60851Dはセットアップトークンをデコードして、8バイトのセットアップデータをセットアップレジスタに格納します。
- (1-3) ML60851DはホストにACKを送信します。
- (1-4) 60851DはINTR端子をアサートします。
- (1-5) セットアップレジスタをリードして、デコードします。
セットアップレジスタ- * bmRequestレジスタ:8bit (リクエストの特性)
- * brequestレジスタ:8bit (リクエストタイプ)
- * wValueレジスタ(LSB):8bit (デバイス・アドレス下位)
- * wValueレジスタ(MSB):8bit (デバイス・アドレス上位)
- * wIndexレジスタ(LSB):8bit
- * wIndexレジスタ(MSB):8bit
- * wLengthレジスタ(LSB):8bit (転送バイト数下位)
- * wLengthレジスタ(MSB):8bit (転送バイト数上位)
- * bmRequestレジスタ:8bit (リクエストの特性)
- (1-6) デコード結果から、EP0送信FIFOにサイズ0のデータ・パケットを準備します。
- (1-7) EP0ステータス・レジスタのD0を"1"にして、セットアップレディ割り込みを解除します。
- (1-8) エンドポイント・パケットレディ・レジスタのEP0送信パケットレディをセットします。
- (1-9) 割り込みイネーブルレジスタのEP0送信パケットレディ割り込みをセットします。
- (1-10) (1-8)と(1-9)の2つの条件から、EP0送信割り込みがアサートされます。
- (1-11) EP0送信FIFOにサイズ0のデータをライトします。FIFOへのライトが完了すると、MCUはエンドポイント・パケットレディ・レジスタのEP0送信パケットレディビットをセットします。これで、EP0送信割り込み処理を抜けます。
- (1-12) EP0送信パケットレディ割り込みをディセーブルにします。
- (1-13) ステータスステージで正常応答するために、EP0送信パケットレディビットをセットします。
- (2) データ・ステージ
- No Data Control転送では、データ・ステージはありません。
- (2) ステータス・ステージ
- (3-1)ホストがINトークンをデバイスに送信します。
- (3-2)デバイスがデータサイズ0のデータ・パケットをホストに送信します。
- (3-3)ホストはACKをデバイスに送信します。
- (3-4)60851DがACKを受信すると、エンドポイント・パケットレディ・レジスタのEP0送信パケットレディが自動的にリセットされます。EP0送信パケットレディ割り込み要因が発生します。
- (1) セットアップ・ステージ
- INTR端子が"L"の状態は、割り込み要因が解除されるまで、アサートされつづけます。
複数の割り込みを1本のINTR端子で対応するので、INTR端子"H"になるタイミングは、許可された割り込み要因が全て無くなったときです。
たとえば、セットアップレディ割り込みとEP1パケットレディ割り込みを許可した場合、EP1送信パケットレディ割り込みとセットアップレディ割り込みの要因が相次いで発生したと仮定します。
このように割り込み要因が多重化している場合には、セットアップレディ割り込みの処理を終了して、ファームウェアがエンドポイント0ステータスレジスタ(EPOSTAT)にD0→ "1"とライトすることで割り込み要因を解除しても、EP1送信パケットレディ割り込み要因があるため、INTR端子は"H"状態にはならず、"L"状態のままです。
EP1のパケットレディ割り込みを処理して、エンドポイント・パケットレディ・レジスタ(PKTRDY)のEP1送信パケットレディ・ビットをセットして初めてINTR端子は"H"状態になります
- D6ビット="0" : 内部PLLがディセーブルとなり、内部PLLを使用しなくなります。このとき、XIN端子に発振器を接続する必要があります。
D6ビット="1" : 内部PLLを使用します.内部PLLとは、逓倍回路を言っており、XIN・XOUTによって発振した周波数を4逓倍・8逓倍して48MHzを生成しております。
- はい、必要です。INTR端子の極性は、極性選択レジスタ(POLSEL)で決められます。
- D0→ "1" のとき Hでアクティブ
- D0→ "0" のとき Lでアクティブ
- したがって、極性選択レジスタD[0]に0を書きこんでいただければ、割り込みをINTR端子 "L" で検出できます。
- セットアップレディ割り込み要因で割り込み処理が発生したときに、bmRequest Typeセットアップレジスタを参照して最上位ビット(D7)が、"1"ならばOUT転送 / "0"ならばIN転送と解釈します。
- Set Configuration終了前にバルクIN/OUTの割り込みを発生させることはできません。
バルクIN/OUTの割り込みはSet Configurationにより初めて可能になります。(USB仕様 図9-1と9.4.7 Set Configurationを参照ください)
以下、ML60851CとML60852の2つの場合について、バルクOUT/IN転送の割り込みを発生可能にする方法を説明します。
ML60851Dの場合は、ホストからEP1もしくはEP2をアクティブにするような-Set Configurationリクエストを受けたときコントロール転送のステータス・ステージでエンドポイント1/2制御レジスタのコンフィグレーションビットに"1"をライトしてEP1もしくはEP2でのデータ送信、もしくは、データ受信が可能になります。これにより、バルクOUT/IN転送の割り込みを発生できます。
ML60852Aの場合は、ホストからそのEPをアクティブにするようなSet Configuration-リクエストを受けたときEPnコンフィグレーション・レジスタ(n=1/2/3/4/5)のコンフィグレーション・ビットにMCU(ファームウェア)が"1"をライトすることで対応するEPでのデータ送信、もしくは、データ受信が可能になります。これにより、バルクOUT/IN転送の割り込みを発生できます。
- これは、お客様のシステムに依存する部分ですので、バルク転送によるデータ受信にはこんな実装例が考えられるという回答にさせていただきます。
以下の3つの方法が考えられます。- (1) コントロール転送を用いる場合
- ・ホストからデータを送信する場合には、必ずコントロール転送で送信データサイズを通知する。
- ・デバイス側は、通知サイズのデータを受け取るようにDMAをセットする。
- ・もしも、ホストが途中でデータ送信やめる場合には、中止を示すリクエストをコントロール転送で送信する.ここで、DMAをストップする。
- (2) 割り込み転送を用いて、タイマ監視をする場合
- ・デバイス側で、受信データサイズを割り込み転送でホストに報告する。
- ・DMAに受信データサイズを設定し、DMAを起動する。同時にタイマ(タイムアウトとして十分に長い時間)を設定する。
- ・もしも、タイマがタイムアウトしたばあいには、DMAをストップする。
- (3) (1)+(2)の複合
- これらの方法を用いれば、データ転送終了を認識することができます。(詳細については、USB仕様10章を参照ください)
IRP:I/O Request Packetの略.USB仕様上のホストからの要求単位のこと。マニュアル&データシートでは、以下のように書かれています。
受信バイト数の管理
データ受信の終了方法は、2通りあります。- 1. トータル受信データバイト数が、ペイロードレジスタ(EP1PLD、EP2PLD)に記載されている最大パケットサイズの整数倍でない場合、最後のパケットはショートパケットになります。ショートパケットを受信したら受信終了です。
- 2. トータル受信データバイト数が、ペイロードレジスタ(EP1PLD、EP2PLD)に記載されている最大パケットサイズの整数倍の場合、別の手段でIRPの終了を取り決める必要があります。
- これらの方法を用いれば、データ転送終了を認識することができます。(詳細については、USB仕様10章を参照ください)
- (1) コントロール転送を用いる場合
- ACKとNAKの操作は、直接MCUからは行いません。
USBコントローラ(ML60851D/ML60852A)は、データを受信できたときは肯定応答としてACKを送信し、データの受信ができないときや送信データがないときには否定応答としてNAKを送信します。
また、エラー発生のときはSTALLを送信します。詳細は、USB仕様 第8章 プロトコル層を参照ください。
- ML60851D/ML60852Aとしては、USB仕様第8章で規定している、コントロール転送のプロトコルに従います。
SETUPトークンで受信した8バイトのリクエスト・コードと、データ・ステージでのデータをMCU(ファームウェア)がデコードし、リクエストがエラー条件である場合に、STALL応答制御ビットをセットしてSTALL応答する必要があります。
リクエストエラーのときの、STALLハンドシェイクは以下のタイミングで行います。前提として、通信路は十分な送信容量をもち、データエラーは発生しないものとします。
(HOST)とはPC、(DEVICE)とは、ML60851 or ML60852を示します。- [1]No Data Control転送の時
(HOST)SETUPトークン(リクエストエラーが発生する8バイトデータ)
↓ - (DEVICE) ACKハンドシェーク
↓ - (HOST) INトークン
↓ - (DEVICE) NAKハンドシェーク <--デバイスがデータの準備ができていないため
↓ - (HOST) INトークン
↓ - (DEVICE) STALLハンドシェーク <--リクエストエラーを認識してファームウェアがストールビットをONにした。
- [2]Control Read転送の時
(HOST) SETUPパケット(リクエストエラーが発生する8バイトデータ)
↓ - (DEVICE) ACKハンドシェーク
↓ - (HOST) INトークン
↓ - (DEVICE) NAKハンドシェーク <--デバイスがデータの準備ができていないため
↓ - (HOST) INトークン
↓ - (DEVICE) STALLハンドシェーク <--リクエストエラーを認識してファームウェアがストールビットをONにした。
- [3]Control Write転送の時
(HOST)SETUPパケット(リクエストエラーが発生する8バイトデータ)
↓ - (DEVICE) ACKハンドシェーク
↓ - (HOST) OUTトークン
↓ - (HOST) データ・パケット(リクエストエラーが発生するデータ)
↓ - ((DEVICE) ACKハンドシェーク
↓ - (HOST) OUTトークン
↓ - ((HOST) データ・パケット(リクエストエラーが発生するデータ)
↓ - (DEVICE) ACKハンドシェーク
↓ - (HOST) INトークン
↓ - NAKハンドシェーク <--デバイスがデータの準備ができていないため
↓ - (HOST) INトークン
↓ - (DEVICE) STALLハンドシェーク <--リクエストエラーを認識してファームウェアがストールビットをONにした。
- [1]No Data Control転送の時
- アイソクロナスIN用EPとアイソクロナスOUT用EPは、それぞれ2面FIFOで構成されています。
1つのFIFOがホストとの送受信用になり、もう1つがMCUとの送受信用になります。この役割はSOF(Start Of Frame)をトリガにして入れ替わります。実際の動作を、512バイトのアイソクロナスOUT転送を例にして簡単に説明します。(この説明において、2つのFIFOをFIFOA、FIFOBとします)
まず、FIFOAに前半の256バイトが格納され、FIFOBに後半の256バイトが格納されます。そして、MCUはSOF受信毎に発生する割り込みをトリガにして、2つのFIFOを交替でリードします。
時系列で書くと以下のようになります。- [アイソクロナスOUT転送]
前半の256バイト転送- [1] ホスト --------------------> FIFOA
↓ - [2] SOF受信
↓
後半の256バイト転送
前半の256バイト転送 - [3] ホスト --------------------> FIFOB / FIFOA ------------------> MCU
↓ - [4] SOF受信
↓
後半の256バイト転送 - [5] FIFOB -------------------------> MCU
詳細については、ML60852Aのデータシートをごらんください。
- [1] ホスト --------------------> FIFOA
- [アイソクロナスOUT転送]
3.電源
- チップに電源が供給されないときはUSB出力ピンは不定になります。ハイインピーダンスかどうか保証することはできません。
- システムの5Vを3.3Vにレギュレートして供給する方法で問題ありません。
- バス電源で使用する場合、USB規格に従わないシステムとなります。ここでいうUSB規格とは、USB仕様7.2.3のことです。
その内容は、要約すると"低電力デバイスは、その保留電流が500µAに制限され、高電力デバイスは、2.5mAまでの制限されます。"というものです。(PCがサスペンドして、SOFを供給しないときでもUSBの電源ラインには電力が供給されています。このときの電流を保留電流といいます)
バス電源で使用する場合、デバイスは、usb compliance workshopでの互換性テストにpassしません。
ML60851Dをバス・パワード・デバイスとして使用する場合、以下の2つの方法があります。- [1]デバイスがサスペンド時、48MHzクロックを止める方法
この場合、デバイスが48MHzの発振なしでバス動作を再開することはできません。 - [2]デバイスがサスペンド時、48MHzクロックを止めない方法
この場合は、サスペンドからのレジュームを検出できます。しかし、デバイスがUSB仕様での規定以上の電力を消費してしまいます。 - 上記のような理由で60851Dは、バス電源で使用すると、USB仕様を満足しません。ですので、60851Dをバス電源で使用することはお奨めしません。USBについてのより詳細な情報は、下記のURLを参照ください。
http://www.usb.org/developers/ - usb-if-Compliance program
- [1]デバイスがサスペンド時、48MHzクロックを止める方法
- プルアップの電源については2つの方法があります。
- [1]セルフ電源の場合
- [2]バス電源の場合
- 電源につきましてはローカル電源でもバス電源でも構いません。ML60851Cはバスパワードに対応していないため、お客様にはセルフパワードでご使用頂くようにしてください。ここでプルアップ電源とチップの電源が別々になっているのは、チップの電源はローカル電源から供給する必要があるからです。
4.Vbus検出方法
- プルアップの電源については2つの方法があります。
- [1]セルフ電源の場合
- [2]バス電源の場合
- USB仕様の要求事項として、Vbusに電圧が掛かっていない場合には、デバイス側でのD+ラインのプルアップを止める必要があります。これは、デバイスがケーブルを介してホストやハブに接続されている状態において、ホストやハブが電源OFFとなった場合にD+ライン経由の電流の廻り込みで、デバイスに悪影響を与えないためと考えられます。
Vbusからレギュレートした3.3Vに1.5KΩのD+プルアップを直接接続するということも考えられますが、この場合、デバイス側の電源をオフした状態でもホスト側がデバイス接続を認識してしまうという問題があります。よって、セルフ電源デバイスでは、ホストやハブがVbusレベルを検知し、デバイス接続を認識した後、D+プルアップを切断することをお奨めします。検知方法には、コンパレータによるもの、あるいは、マイコンポートやA/Dによるものが考えられます。
5.USBコントローラの発振回路
- 構成例は動作保証するものではなく、当社評価基板を水晶振動子メーカで評価し確認したものを載せています。発振の安定性などは、水晶振動子の特性や基板構成により異なります。
サードオーバートーンをXIN、XOUT、付けないのどれで実使用可能かは当社としては回答できません。開発にあたっては、水晶発振メーカなどで評価していただく必要があります。尚、XIN、XOUTとのマッチングは水晶振動子メーカに問い合わせてください。
- システム制御レジスタ(SYSCON)へA0[h]をライトすることです。詳しくは、ML60851Dのデータシートを参照ください。
- 発振回路を再開させるには、LSIを初期化しなければいけません.初期化のためには、下記の3つの方法があります。
- [1]RESET端子による方法
MCUがML60851DのRESET端子をアサートする方法です - [2]Bus RESETによる方法
USBコネクタを抜くことにより初期化する方法です.D+のプルアップを外して、そのデバイスをUSB Busから切断します。 - [3]ソフト・リセットによる方法
MCUがML60851Dのシステム制御レジスタ(SYSCON)のD0に"1"をライトすることで行う方法です。 - [1]と[3]は次の理由でお奨めできません。デバイスの状態遷移において、リセットされると前の状態に関係なく、デフォルトの状態になります。よって、リセット実行以前の状態には戻すことはできませんので、再度、何らかの手段でLSIの初期化を行う必要があります。状態遷移の詳細については、USB仕様9.1.1 図9-1を参照ください。
- [1]RESET端子による方法
- USB部のデジタルPLLが動作しているので、USBで必要とする12MHzと位相同期させるために、新しく外部PLLを必要としません。この場合、48MHzの発振器をXIN側に接続してください。
- PLLの逓倍制御をせずに、システム制御レジスタ(SYSCON)のPLLイネーブルビットD5を"0"にしてください。このとき、内部PLLは無効になり、XINから入力されたクロックがそのまま内部クロックになります。
ただし、ML60852Aでは48MHzが使用できるのは外部からクロックを供給する時のみです。原振に6MHzを使用する場合には、システム制御レジスタ(SYSCON)のD6ビット=を"1"にして8逓倍モード(6MHz*8=48MHz)を選択し、原振に12MHzを使用する場合には、D6ビットを"0"にして4逓倍モード(12MHz*4=48MHz)を選択してください。
- 発振回路を停止させるには、以下の2つの条件がともに成立することが必要です。
- (1)USBバスが3ms以上アイドル状態
(=USB仕様でのサスペンド状態.USB仕様7.1.7.4を参照のこと) - (2)システム制御レジスタ(SYSCON)のパワーダウンモードのビットD1="1"
- (1)USBバスが3ms以上アイドル状態
- 2つの条件がともに成立し、発振が停止すると、ML60852Aはパワーダウン(省電状態)になります。
サスペンド状態でも、システム制御レジスタ(SYSCON)のパワーダウンモード・ビットがD1="0"であれば発振は停止しないので注意が必要です。
- USBバスがレジューム信号状態になれば、ML60852Aの発振が再開されます。
- (レジューム信号 = Kステート信号 + 低速EOP
- (低速EOP = 2低速ビット時間のSE0.
- (低速の場合、伝送速度は1.5Mbit/sであるので、 2低速ビット時間=(1/1.5[Mbit])*2=1333ns)
- ML60852Aは、USBバスがレジューム信号状態であることを検出し、1344nsのSE0状態を検出すると、アウェイク割り込み処理により、自動的に発振を再開し、パワーダウンを解除します。1344nsはML60852Aの固有値です.USB仕様上では、レジュ―ム信号はUSBバスが20msのKステート信号+1250∼1500nsのSE0状態と規定されています。(USB仕様7.2.3を参照ください)
6.サスペンド/レジューム
- サスペンド/バスリセットの割り込みをマスクすることで、他の割り込みを発生させなくなることはありません。理由は下記の通りです。
- [理由]
割り込みをイネーブル(有効)にするかどうかは、割り込みイネーブルレジスタ(INTENBL)で設定されます。このレジスタにおいては、各割り込みがビット番号に対応し、各割り込みは互いに独立しています。- D7:EP3パケットレディ割り込み
- D6:サスペンド割り込み
- D5:USBバスリセット割り込み
- D4:EP0送信パケットレディ割り込み
- D3:EP0受信パケットレディ割り込み
- D2:EP2パケットレディ割り込み
- D1:EP1パケットレディ割り込み
- D0:セットアップレディ割り込み
- [理由]
- "サスペンド/バスリセットの割り込みをマスクする"ということは、このレジスタでD6とD5をともに"0"にすることです。このとき、他のビットを"0"にしないようにしなければなりません。他のビットを"0"にしてしまうと、その"0"に設定したビットに対応する割り込みがすべて無効となり、サスペンド/レジュ-ム以外の割り込みも発生しなくなるからです。
- JOB60851では、正常にSuspend後Resumeします。
- USBバスが3ms以上アイドル状態(Jステート)になれば発生します。これは、USB仕様7.1.7.4の"アイドルステートを3msを超えて検出した時点で保留ステートへの遷移を開始する”に従っています。
- セルフ・パワード・デバイスとバス・パワード・デバイスとで意味が違ってきます。
- [セルフ・パワード・デバイス(セルフ電源デバイス)]
- 発振停止は、省電力化のために使用します。セルフ・パワード・デバイスでは、外部から電力が供給されるので、省電力化のための発振停止は必要ありません。よって、セルフ・パワード・デバイスにおいては、Suspend/Resumeと発振停止は無関係です。
- [バス・パワード・デバイス(バス電源デバイス)]
- バスパワードデバイスにおいては、サスペンド時の消費電流を500µA以内にしなければならないという規格(USB仕様7.2.3参照)を満たすために、サスペンド時に発振回路を停止させることが必要不可欠になります。また、60851Dはバス・パワード・デバイスとして使用することを前提としていません。
よって、バス電源で使用することはお奨めしません。状態遷移において、リセットされると前の状態が何であるかに関係なく、デフォルトの状態になります。よって、リセット実行以前の状態には戻すことはできませんので、再度、LSIの初期化を行う必要があります。
- バスパワードデバイスにおいては、サスペンド時の消費電流を500µA以内にしなければならないという規格(USB仕様7.2.3参照)を満たすために、サスペンド時に発振回路を停止させることが必要不可欠になります。また、60851Dはバス・パワード・デバイスとして使用することを前提としていません。
- サスペンド(ML60852A)
- [1]ML60852AはUSBバス上で3ms以上のアイドル状態を検出するとサスペンド割り込みを発生させます。そして、デバイスは保留ステートになります。(USB仕様7.1.7.4を参照ください)
↓ - [2]デバイスは、保留ステートに遷移してから10msの時間内にデバイスの消費電流を500µA以下にする必要があります。(USB仕様7.2.3を参照ください)
↓ - [3]ML60852Aの場合、保留ステートにおいて、システム制御レジスタ(SYSCON)のパワーダウンモード・ビットがD1="1"であるならば、発振が停止します。
↓ - [4]割り込みステータスレジスタ2(INTSTAT2)のデバイス・サスペンデッド・ステート割り込みステータスのビットD3に"1"をライトして割り込み処理を抜けます。
- [1]ML60852AはUSBバス上で3ms以上のアイドル状態を検出するとサスペンド割り込みを発生させます。そして、デバイスは保留ステートになります。(USB仕様7.1.7.4を参照ください)
- サスペンド(ML60851D)
- [1]ML60851DはUSBバス上で3ms以上のアイドル状態を検出するとサスペンド割り込みを発生させます。そして、デバイスは保留ステートになります。(USB仕様7.1.7.4を参照ください)
↓ - [2]デバイスは、保留ステートに遷移してから10msの時間内にデバイスの消費電流を500µA以下にする必要があります。このとき、ML60851Dは発振を停止するなどして、消費電流を500µA以下にします。 (USB仕様7.2.3を参照ください)
↓ - [3]60851Dはサスペンド割り込みが発生するとレジュ―ム信号を受信するまで割り込みが何度も発生することになります。そこで、割り込みイネーブルレジスタ(INTENBL)のD6を"0"にリセットすることで割り込みを禁止します。または、レジュ-ム信号を受信することにより、割り込みを許可します。
- [1]ML60851DはUSBバス上で3ms以上のアイドル状態を検出するとサスペンド割り込みを発生させます。そして、デバイスは保留ステートになります。(USB仕様7.1.7.4を参照ください)
- ML60851とML60852の割り込み処理は異なります。図で示すと、下のようになります。
図のように、ML60851Dはサスペンド割り込みが発生すると、次にレジュ-ム信号を受信するまで、割り込みが発生し続けることになります。 - レジューム(ML60851、ML60852)
- [1]ML60852はUSBバス上でレジューム信号を検出す0るとアウェイク割り込みを発生させます。データ受信のために、割り込みの発生から30ms程度の時間内にマイコンを起動させる必要があります。(USB仕様7.2.3を参照ください)
( 30ms=20ms[再開信号時間min]+10ms[ソフトウェア再開回復時間] )
↓ - [2]割り込みステータスレジスタ2(INTSTAT2)のデバイス・アウェイク・ステート-割り込みステータスのビットD4に "1"をライトして、割り込み処理を抜けます。
-
- [1]ML60852はUSBバス上でレジューム信号を検出す0るとアウェイク割り込みを発生させます。データ受信のために、割り込みの発生から30ms程度の時間内にマイコンを起動させる必要があります。(USB仕様7.2.3を参照ください)
- [セルフ・パワード・デバイス(セルフ電源デバイス)]
7.DMA転送(Direct Memory Access)
- [シングルアドレスモード]
- DMAコントローラはメモリアドレスのみをアドレスバスで指定します。I/O側のFIFOアドレスは指定せず、DACKをチップセレクト代わりに使って転送するI/Oデバイスを選択します。DMAがイネーブルの状態でDACKがアクティブになった時、ML60851/ML60852はFIFOにのみアクセス可能状態となります。ストローブ信号(RD/WR)をアクティブにすることでFIFOのリード/ライトを行うことができます。
- [デュアルアドレスモード]
- 通常のMCU転送のようにDMAコントローラがメモリとI/Oの両方のアドレスを指定します。その際、CS信号も必要です。デュアルアドレスモードではDACKは使用しません。MCUによる制御とDMAデュアルアドレスモードによる制御は、制御元のデバイスが違うだけで、ML60851/ML60852へのアクセス方法はほぼ同じです。
- メモリに対する書き込みのタイミングはDMAコントローラの方で規定されます。また、ML60851Dに対する書き込みのタイミングは、下記の4つのモードについて書かれています。
- [1]シングル転送・シングルアドレスモード
- [2]シングル転送・デュアルアドレスモード
- [3]デマンド転送・シングルアドレスモード
- [4]デマンド転送・デュアルアドレスモード
- 各モードでの書き込みタイミングの詳細については、データシートのAC特性をごらんください
- はい、その通りです。
MCUのDMAコントローラを使用してML60851D-メモリ間のデータ転送をシングルアドレスモードで行なう場合、MCUはML60851Dに対してはDACK信号を使用してアクセスし、メモリに対してはRD/WRを使用してアドレスでアクセスします
- シングルアドレスモードとデュアルアドレスモードは、下記のように説明できます。
- ・シングルアドレスモード: 2つのデバイスの片方をDACK信号でアクセスし、もう片方のデバイスをアドレスでアクセスするモード
- ・デュアルアドレスモード: 2つのデバイスともにアドレスでアクセスするモード
- この2つのモードの接続について、DMA転送のシングルアドレスモードとデュアルアドレスモードの2つのモードを持つマイクロコントローラ ML671000を例に説明します。ML671000は、ARM社が開発した、RISC方式の32ビットCPU ARM7TDMIをコアにした-高性能の32ビットシングルチップ・マイクロコントローラです。下の図は、ML671000のDMA転送を使用した場合のシングルアドレスモードとデュアルアドレスモードについての接続例です。この例では、バンク0にDACK端子のあるデバイス、もしくは、DACK端子のないデバイスを割り付け、バンク1にSRAMを割り付けています。
-
- DMA制御レジスタ(DMACON)とDMAインターバル・レジスタ(DMAINTVL)です。
DMA転送を行なうには、MCUに60852AのDREQ/DACKを接続する必要があります。
以下の図は、MCUにSH3を使用した場合のDMA転送(シングルアドレスモード)の接続例です。- 上図において、「-RAS2L or -RAS2H_」とはどちらか一方を使用するという意味です。
8.MCU/メモリとの接続
- 以下の図は、MCUにSH3を使用した場合の例です。
- 上の図は、DRAMの通常モード使用時の接続例です。
高速モードをサポートすることを想定していません。図では、ML60851DをSH3のメモリ空間エリア4に割り付け、DRAMをメモリ空間エリア2に割り付けた例を示しています。
ML60851DのRD/WRは、SH3がML60851Cをリード/ライトするときに使用されます。 - * -RAS2L or -RAS2H_とは、どちらか一方を使用するという意味です。
- * DRAMではCS相当端子はないのでSH3のCS2は未接続です。
9.他社製USB IC
- 申し訳ございませんが、私どもにおいて、このようなケースのサポートの
実績がございません。以下のような製品が存在いたしますが、弊社とは、無関係な製品であり、ご参考情報を提供させていただくだけのものです。- - Phoenix Technologies
- USB Synthesizable Core
- USB OHCI Host Controller
- - CMD
- PCI-To-USB Controller
- USB-0670/0673
- ML60851Dは、デバイス用のUSBコントローラであり、ホストコントローラになることはできません。
ラピス のデバイス・ラインアップとしましては、ホスト専用のUSBコントローラをご用意しておりません。
10.不使用ピンの処理について
- ADSEL=L(アドレス・セパレート)の場合、 ALE端子は H、または L どちらかに固定してください。