
お問い合わせ・FAQ | サイトマップ | ユーザー登録 | English | Global Site
HOME > お問合せ・FAQ > FAQ > ハードウェア
【質問】
ML60851D (USBコントローラ)-メモリ間の転送速度は?
【回答】
転送速度は、フラッシュメモリ−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になります。
【質問】
ホスト−60851D間バルク転送速度はどうなっていますか?
【回答】
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アクセスタイミング、ファームでの転送処理など、すべての要素を考慮する必要があります。
【質問】
コントロール転送Set Addressの場合でのアドレスの変更タイミングについて注意すべきことは?
【回答】
コントロール転送でSet Addressの場合、セットアップステージのトランザクションの終了でアドレスの変更を行うとステータスステージのトランザクションでの返答ができなくなります。
詳しくは、USB仕様書 9.4.6 SetAddress(アドレスの設定)を参照してください。そこでは、"リクエストのステータス・ステージが正常に完了するまでは、USBデバイスはそのデバイス・アドレスを変更しない"とあります。
したがって、アドレスの変更タイミングは、ステータスステージが終了したとき、EP0送信パケットレディ割り込み要因が発生したタイミングでアドレス変更してください。
【質問】
MSM66573からML60851Dのレジスタの内容をWriteできない場合があるのはなぜか?
【回答】
この問題は、バスの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送信パケットレディ割り込みをイネーブルにします。
(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受信パケットレディ割り込み要因が発生します。
■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送信パケットレディ割り込み要因が発生します。
■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 (転送バイト数上位)
(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転送では、データ・ステージはありません。
(3)ステータス・ステージ
(3-1)ホストがINトークンをデバイスに送信します。
(3-2)デバイスがデータサイズ0のデータ・パケットをホストに送信します。
(3-3)ホストはACKをデバイスに送信します。
(3-4)60851DがACKを受信すると、エンドポイント・パケットレディ・レジスタのEP0送信パケットレディが自動的にリセットされます。EP0送信パケットレディ割り込み要因が発生します。
【質問】
INTR端子が"L"(アクティブ)→"H"(ノン・アクティブ)になるタイミングは?
【回答】
INTR端子が"L"の状態は、割り込み要因が解除されるまで、アサートされつづけます。
複数の割り込みを1本のINTR端子で対応するので、INTR端子"H"になるタイミングは、許可された割り込み要因が全て無くなったときです。
たとえば、セットアップレディ割り込みとEP1パケットレディ割り込みを許可した場合、EP1送信パケットレディ割り込みとセットアップレディ割り込みの要因が相次いで発生したと仮定します。
このように割り込み要因が多重化している場合には、セットアップレディ割り込みの処理を終了して、ファームウェアがエンドポイント0ステータスレジスタ(EPOSTAT)にD0→ "1"とライトすることで割り込み要因を解除しても、EP1送信パケットレディ割り込み要因があるため、INTR端子は"H"状態にはならず、"L"状態のままです。
EP1のパケットレディ割り込みを処理して、エンドポイント・パケットレディ・レジスタ(PKTRDY)のEP1送信パケットレディ・ビットをセットして初めてINTR端子は"H"状態になります。
【質問】
システム制御レジスタ(SYSCON)のD6ビット(PLLイネーブル)を゛0゛にするとどうなりますか?
【回答】
D6ビット="0" : 内部PLLがディセーブルとなり、内部PLLを使用しなくなります。このとき、XIN端子に発振器を接続する必要があります。
D6ビット="1" : 内部PLLを使用します.内部PLLとは、逓倍回路を言っており、XIN・XOUTによって発振した周波数を4逓倍・8逓倍して48MHzを生成しております。
【質問】
INTR端子が"L"でアクティブであることを検出するために初期設定は必要ですか?
【回答】
はい、必要です。INTR端子の極性は、極性選択レジスタ(POLSEL)で決められます。
D0→ "1" のとき Hでアクティブ
D0→ "0" のとき Lでアクティブ
したがって、極性選択レジスタD[0]に0を書きこんでいただければ、割り込みをINTR端子 "L" で検出できます。
【質問】
コントロール転送のINトークン、OUTトークンの判別方法は?
【回答】
セットアップレディ割り込み要因で割り込み処理が発生したときに、bmRequest Typeセットアップレジスタを参照して最上位ビット(D7)が、"1"ならばOUT転送 / "0"ならばIN転送と解釈します。
【質問】
Set Configuration終了後でないとバルクOUT/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転送の割り込みを発生できます。
【質問】
IRP終了を決める方法は? (IRP:I/O Request Packet)/トータル受信データバイト数がペイロードレジスタに記載されているMAXパケットサイズの整数倍の場合、IRPの終了を決める方法は?
【回答】
これは、お客様のシステムに依存する部分ですので、バルク転送によるデータ受信にはこんな実装例が考えられるという回答にさせていただきます。
以下の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の終了を取り決める必要があります。これは、お客様のシステムに依存する部分ですので、バルク転送によるデータ受信にはこんな実装例が考えられるという回答にさせていただきます。
以下の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の終了を取り決める必要があります。
【回答】
ACKとNAKの操作は、直接MCUからは行いません。
USBコントローラ(ML60851D/ML60852A)は、データを受信できたときは肯定応答としてACKを送信し、データの受信ができないときや送信データがないときには否定応答としてNAKを送信します。
また、エラー発生のときはSTALLを送信します。詳細は、USB仕様 第8章 プロトコル層を参照ください。
【質問】
ML60851D/ML60852Aにおいて、リクエストエラーのときのSTALL応答のタイミングは?
【回答】
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トークン
↓
(DEVICE) NAKハンドシェーク <--デバイスがデータの準備ができていないため
↓
(HOST) INトークン
↓
(DEVICE) STALLハンドシェーク <--リクエストエラーを認識してファームウェアがストールビットをONにした。
【質問】
アイソクロナス転送でのFIFOはどのように動作しますか?
【回答】
アイソクロナス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のデータシートをごらんください。
【質問】
全電源をセルフ電源でまかなう場合、その装置の電源がOFFした時 ML60851DのUSB出力ピンはハイインピーダンスになるのですか?
【回答】
チップに電源が供給されないときはUSB出力ピンは不定になります。ハイインピーダンスかどうか保証することはできません。
【質問】
システムの5Vから3.3Vを供給するのは問題ありますか?
【回答】
システムの5Vを3.3Vにレギュレートして供給する方法で問題ありません。
【質問】
ML60851Dをバス電源で用いるための方法は?また、その際の問題と対応策は何か?
【回答】
バス電源で使用する場合、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
【質問】
D+端子のプルアップ用の3.3VとML60851Cの3.3V電源が分かれているのは?
【回答】
プルアップの電源については2つの方法があります。
[1]セルフ電源の場合
[2]バス電源の場合
電源につきましてはローカル電源でもバス電源でも構いません。ML60851Cはバスパワードに対応していないため、お客様にはセルフパワードでご使用頂くようにしてください。ここでプルアップ電源とチップの電源が別々になっているのは、チップの電源はローカル電源から供給する必要があるからです。
【回答】
USB仕様の要求事項として、Vbusに電圧が掛かっていない場合には、デバイス側でのD+ラインのプルアップを止める必要があります。これは、デバイスがケーブルを介してホストやハブに接続されている状態において、ホストやハブが電源OFFとなった場合にD+ライン経由の電流の廻り込みで、デバイスに悪影響を与えないためと考えられます。
Vbusからレギュレートした3.3Vに1.5KΩのD+プルアップを直接接続するということも考えられますが、この場合、デバイス側の電源をオフした状態でもホスト側がデバイス接続を認識してしまうという問題があります。よって、セルフ電源デバイスでは、ホストやハブがVbusレベルを検知し、デバイス接続を認識した後、D+プルアップを切断することをお奨めします。検知方法には、コンパレータによるもの、あるいは、マイコンポートやA/Dによるものが考えられます。
【質問】
発振回路構成において、サードオーバートーンを、XIN側につけると問題ありますか?
【回答】
構成例は動作保証するものではなく、当社評価基板を水晶振動子メーカで評価し確認したものを載せています。発振の安定性などは、水晶振動子の特性や基板構成により異なります。
サードオーバートーンを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を参照ください。
【質問】
内部PLLを無効にしたとき、外部PLLは必要ですか?
【回答】
USB部のデジタルPLLが動作しているので、USBで必要とする12MHzと位相同期させるために、新しく外部PLLを必要としません。この場合、48MHzの発振器をXIN側に接続してください。
【質問】
ML60852Aにおいて、外部の水晶をML60851Dと同様の48MHzにする方法は?
【回答】
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"
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を参照ください)
【質問】
リセット/サスペンド割込みが発生するような状況で、これらの割込みを マスクしていると他の割込みが発生しなくなるようなことがありますか?
【回答】
サスペンド/バスリセットの割り込みをマスクすることで、他の割り込みを発生させなくなることはありません。理由は下記の通りです。
[理由]
割り込みをイネーブル(有効)にするかどうかは、割り込みイネーブルレジスタ(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機能とは、発振回路を停止することを意味するのか?
【回答】
セルフ・パワード・デバイスとバス・パワード・デバイスとで意味が違ってきます。
[セルフ・パワード・デバイス(セルフ電源デバイス)]
発振停止は、省電力化のために使用します。セルフ・パワード・デバイスでは、外部から電力が供給されるので、省電力化のための発振停止は必要ありません。よって、セルフ・パワード・デバイスにおいては、Suspend/Resumeと発振停止は無関係です。
[バス・パワード・デバイス(バス電源デバイス)]
バスパワードデバイスにおいては、サスペンド時の消費電流を500μA以内にしなければならないという規格(USB仕様7.2.3参照)を満たすために、サスペンド時に発振回路を停止させることが必要不可欠になります。また、60851Dはバス・パワード・デバイスとして使用することを前提としていません。
よって、バス電源で使用することはお奨めしません。状態遷移において、リセットされると前の状態が何であるかに関係なく、デフォルトの状態になります。よって、リセット実行以前の状態には戻すことはできませんので、再度、LSIの初期化を行う必要があります。
----------
サスペンド
----------
(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"をライトして割り込み処理を抜けます。
(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"にリセットすることで割り込みを禁止します。または、レジュ-ム信号を受信することにより、割り込みを許可します。
ML60851とML60852の割り込み処理は異なります。図で示すと、下のようになります。
図のように、ML60851Dはサスペンド割り込みが発生すると、次にレジュ-ム信号を
受信するまで、割り込みが発生し続けることになります。
----------
レジューム
----------
[1]ML60852はUSBバス上でレジューム信号を検出す0るとアウェイク割り込みを発生させます。データ受信のために、割り込みの発生から30ms程度の時間内にマイコンを起動させる必要があります。(USB仕様7.2.3を参照ください)
( 30ms=20ms[再開信号時間min]+10ms[ソフトウェア再開回復時間] )
↓
[2]割り込みステータスレジスタ2(INTSTAT2)のデバイス・アウェイク・ステート-割り込みステータスのビットD4に "1"をライトして、割り込み処理を抜けます。
【質問】
シングルアドレスモード / デュアルアドレスモードとは?
【回答】
[シングルアドレスモード]
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転送でのメモリに対する書き込みのタイミングは?
【回答】
メモリに対する書き込みのタイミングはDMAコントローラの方で規定されます。また、ML60851Dに対する書き込みのタイミングは、下記の4つのモードについて書かれています。
[1]シングル転送・シングルアドレスモード
[2]シングル転送・デュアルアドレスモード
[3]デマンド転送・シングルアドレスモード
[4]デマンド転送・デュアルアドレスモード
各モードでの書き込みタイミングの詳細については、データシートのAC特性をごらんください
【質問】
ML60851Dからメモリへ、ローカルMCUのDMAコントローラを使用して 転送する場合、DMA転送でのシングルアドレスモードでは、RDもしくはWRは常にメモリに対する信号であるべきでは?
【回答】
はい、その通りです。
MCUのDMAコントローラを使用してML60851D-メモリ間のデータ転送をシングルアドレスモードで行なう場合、MCUはML60851Dに対してはDACK信号を使用してアクセスし、メモリに対してはRD/WRを使用してアドレスでアクセスします
【質問】
DMA転送において、シングルアドレスモードとデュアルアドレスモードの接続方法はどうなるのか?
【回答】
シングルアドレスモードとデュアルアドレスモードは、下記のように説明できます。
シングルアドレスモード: 2つのデバイスの片方をDACK信号でアクセスし、もう片方のデバイスをアドレスでアクセスするモード
デュアルアドレスモード: 2つのデバイスともにアドレスでアクセスするモード
この2つのモードの接続について、DMA転送のシングルアドレスモードとデュアルアドレスモードの2つのモードを持つマイクロコントローラ ML671000を例に説明します。ML671000は、ARM社が開発した、RISC方式の32ビットCPU ARM7TDMIをコアにした-高性能の32ビットシングルチップ・マイクロコントローラです。下の図は、ML671000のDMA転送を使用した場合のシングルアドレスモードとデュアルアドレスモードについての接続例です。この例では、バンク0にDACK端子のあるデバイス、もしくは、DACK端子のないデバイスを割り付け、バンク1にSRAMを割り付けています。
【質問】
DMA機能を使用する場合、サンプルプログラムに追加しなければならないML60852Aのレジスタは?
【回答】
DMA制御レジスタ(DMACON)とDMAインターバル・レジスタ(DMAINTVL)です。
DMA転送を行なうには、MCUに60852AのDREQ/DACKを接続する必要があります。
以下の図は、MCUにSH3を使用した場合のDMA転送(シングルアドレスモード)の接続例です。
上図において、「-RAS2L or -RAS2H_」とはどちらか一方を使用するという意味です。
【質問】
ML60851Dとメモリ(DRAM)を使用するシステムでの接続はどうなりますか?
【回答】
以下の図は、MCUにSH3を使用した場合の例です。
上の図は、DRAMの通常モード使用時の接続例です.
高速モードをサポートすることを想定していません。図では、ML60851DをSH3のメモリ空間エリア4に割り付け、DRAMをメモリ空間エリア2に割り付けた例を示しています。
ML60851DのRD/WRは、SH3がML60851Cをリード/ライトするときに使用されます。
* -RAS2L or -RAS2H_とは、どちらか一方を使用するという意味です。
* DRAMではCS相当端子はないのでSH3のCS2は未接続です。
【質問】
ホストになれる他社製USB ICを教えていただけないでしょうか?
【回答】
申し訳ございませんが、私どもにおいて、このようなケースのサポートの
実績がございません。以下のような製品が存在いたしますが、弊社とは、無関係な製品であり、ご参考情報を提供させていただくだけのものです。
- Phoenix Technologies
USB Synthesizable Core
USB OHCI Host Controller
http://www.phoenix.com/ipcores/usb-core-host.html
- CMD
PCI-To-USB Controller
USB-0670/0673
http://www.cmd.com/semiconductor/products/docs/datasheet/usb0670.pdf
ML60851Dは、デバイス用のUSBコントローラであり、ホストコントローラになることはできません。
OKI のデバイス・ラインナップとしましては、ホスト専用のUSBコントローラをご用意しておりません。
【質問】
不使用ピンの処理でALE端子を"H"とした場合、問題は発生しますか?
【回答】
ADSEL=L(アドレス・セパレート)の場合、 ALE端子は H、または L どちらかに固定してください。