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に基づいています。また、デバイススタックを変更する前に、このデモのコピーをクローンする必要があります。
ただし、コンパイル後に次のエラーが発生しますが、これはKL27がリモート再開機能をサポートしていないためです。
したがって、このデバイスでは、#if USBCFG_DEV_ADVANCED_SUSPEND_RESUME == 1 && FSL_FEATURE_USB_KHCI_HOST_ENABLED == 1 を使用して無効にする必要があります。たとえば、次のようになります。
2.さらにUSB_Suspend_Service()とUSB_Resume_Service()を実装して、一時停止/再開のイベントで上位レイヤーのアプリケーションに通知できるようにします。USB_Error_Service()を参考に
また、suspend と resume のイベントをさらに 2 つ追加することを忘れないでください。
3.USBモジュールには2種類の再開割り込みがあり、1つは同期再開で、ISTAT[RESUME]ビットのビットによって発行され、もう1つは非同期再開で、TRC0[USB_RESUME_INT]のビットによって発行されるため、次のようにISRでこれら2つの割り込みステータスフラグを監視する必要があります。
そのため、非同期再開割り込みをサポートするために、再開およびスリープ割り込みサービスを次のように変更しました。
4.アプリケーションを修正し、サスペンドとレジュームイベントを処理するコードを追加します。この場合、このようなイベントはUSB_App_Device_Callback()で処理されます
5.usb.org のUSB 2 CVツールでhid_mouseデモを確認します
リストからVID 15a2のFSデバイスを選択します。
テストに合格しました!
Suspend と Resume のイベントでいくつかのメッセージを印刷すると、ターミナルチャネルから次のようなものが表示されます。
6.これで、USB仕様で指定されたサスペンド電流制限を満たすために、メインアプリケーションコードに低電力モードスイッチ機能を追加できます。この場合、USB_App_Device_Callback power_manager_hal_demo()のmouse.cにコードを追加して、メインアプリケーションに低電力モードに入るタイミングを指示します。
また、割り込みサービスによって呼び出されるため、このコールバック関数で低電力モードに入らないでください。したがって、割り込み中にデバイスが低電力モードに入ると、 次の再開割り込みが発生しなくなり、デバイスがウェイクアップすることはありません。
実装の詳細については、添付のmouse.cを参照してください。
7.低電力モード電流をテストします。
テストの前に、FRDM-KL27Zボードに次の変更を加えてください。
ボードに次のジャンパーがある場合は、R7、R21、R83を取り外す必要はなく、テスト中はJ19とJ22を開いたままにしておくことに注意してください。
Ternimalからテストする低電力モードを選択します。
KL27 USB ポート (J10) を開いたままにして、USB SDA ポートでボードに電力を供給すると、デバイスがリセットからサスペンド割り込みに入ります。また、USB 2 CVツールの助けを借りて、電源モードスイッチによって電流が変化するのを見ることもできます。wait、stop、vlpsモードをテストしましたが、これらのモードで測定された電流は次のように表示されます。
待つ:
止める:
VLPSの
そのため、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