1099781_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1099781_ja-JP

1099781_ja-JP

USBデバイススタックにSuspend/Resume対応を追加する方法[KSDK 1.3]<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

ksdk 1.3 の USB スタックには "USBCFG_DEV_ADVANCED_SUSPEND_RESUME" のマクロが用意されていますが、RM には "suspend/resume is not implemented" と表示されます。しかし、ソースコードを調べてみると、USB_Suspend_Service() のような API が さらなる実装のために予約されているので、ユーザーはこれらの API を出発点として ksdk 1.3 のサスペンドとレジューム機能を追加することができます。

このテストは、デモdev_hid_mouse_bm FRDM-KL27Zに基づいています。また、デバイススタックを変更する前に、このデモのコピーをクローンする必要があります。

pastedImage_1.png

  1. USBCFG_DEV_ADVANCED_SUSPEND_RESUME を 1 に設定すると、中断機能と再開機能に関連する API が解放されます。

pastedImage_2.png

ただし、コンパイル後に次のエラーが発生しますが、これはKL27がリモート再開機能をサポートしていないためです。

pastedImage_3.png

したがって、このデバイスでは、#if USBCFG_DEV_ADVANCED_SUSPEND_RESUME == 1 && FSL_FEATURE_USB_KHCI_HOST_ENABLED == 1 を使用して無効にする必要があります。たとえば、次のようになります。

pastedImage_4.png

2.さらにUSB_Suspend_Service()とUSB_Resume_Service()を実装して、一時停止/再開のイベントで上位レイヤーのアプリケーションに通知できるようにします。USB_Error_Service()を参考に

pastedImage_6.png

pastedImage_7.png

また、suspend と resume のイベントをさらに 2 つ追加することを忘れないでください。

pastedImage_8.png

3.USBモジュールには2種類の再開割り込みがあり、1つは同期再開で、ISTAT[RESUME]ビットのビットによって発行され、もう1つは非同期再開で、TRC0[USB_RESUME_INT]のビットによって発行されるため、次のようにISRでこれら2つの割り込みステータスフラグを監視する必要があります。

pastedImage_10.png

そのため、非同期再開割り込みをサポートするために、再開およびスリープ割り込みサービスを次のように変更しました。

pastedImage_11.png

4.アプリケーションを修正し、サスペンドとレジュームイベントを処理するコードを追加します。この場合、このようなイベントはUSB_App_Device_Callback()で処理されます

pastedImage_13.png

5.usb.org のUSB 2 CVツールでhid_mouseデモを確認します

pastedImage_15.png

リストからVID 15a2のFSデバイスを選択します。

pastedImage_16.png

テストに合格しました!

pastedImage_17.png

Suspend と Resume のイベントでいくつかのメッセージを印刷すると、ターミナルチャネルから次のようなものが表示されます。

pastedImage_18.png

6.これで、USB仕様で指定されたサスペンド電流制限を満たすために、メインアプリケーションコードに低電力モードスイッチ機能を追加できます。この場合、USB_App_Device_Callback power_manager_hal_demo()のmouse.cにコードを追加して、メインアプリケーションに低電力モードに入るタイミングを指示します。

また、割り込みサービスによって呼び出されるため、このコールバック関数で低電力モードに入らないでください。したがって、割り込み中にデバイスが低電力モードに入ると、 次の再開割り込みが発生しなくなり、デバイスがウェイクアップすることはありません。

実装の詳細については、添付のmouse.cを参照してください。

7.低電力モード電流をテストします。

  テストの前に、FRDM-KL27Zボードに次の変更を加えてください。

pastedImage_24.png

ボードに次のジャンパーがある場合は、R7、R21、R83を取り外す必要はなく、テスト中はJ19とJ22を開いたままにしておくことに注意してください。

pastedImage_26.png

Ternimalからテストする低電力モードを選択します。

pastedImage_27.png

KL27 USB ポート (J10) を開いたままにして、USB SDA ポートでボードに電力を供給すると、デバイスがリセットからサスペンド割り込みに入ります。また、USB 2 CVツールの助けを借りて、電源モードスイッチによって電流が変化するのを見ることもできます。wait、stop、vlpsモードをテストしましたが、これらのモードで測定された電流は次のように表示されます。

待つ:

pastedImage_28.png

止める:

pastedImage_29.png

VLPSの

pastedImage_30.png

そのため、USBサスペンドモード中は、USB仕様で指定されているサスペンド電流(500uA)をはるかに下回るため、VLPSモードを使用することをお勧めします。

8. パッチとデモコード

以下のファイルを添付のものと、デモの mouse.c dev_hid_mouse_bm置き換えてください。スタックとアプリケーションコードを再コンパイルします。

C:\Freescale\KSDK_1.3.0\usb\usb_core\device\include\MKL27Z644

usb_device_config.h

C:\フリースケール\KSDK_1.3.0\usb\usb_core\device\sources\controller

usb_dev.h

usb_dev.c

usb_framework.c

C:\フリースケール\KSDK_1.3.0\usb\usb_core\device\sources\controller\khci

device_khci_interface.c

khci_dev.c

khci_dev.h

C:\フリースケール\KSDK_1.3.0\usb\usb_core\device\include

usb_device_stack_interface.h

C:\Freescale\KSDK_1.3.0\examples\frdmkl27z\demo_apps\usb\device\hid\hid_mouse

マウス.c

全般
Tags (1)
No ratings
Version history
Last update:
‎01-05-2026 02:46 AM
Updated by: