• 検索結果がありません。

VBUS

ファンクション

電力管理要件に基づいて

VBUS

のステートを変更するために、各コントローラは

VBUS

マネージャ を搭載する必要があります。このファンクションは通常、VBUSのオン/オフ切り替えのみを実行しま す。

コントローラの起動と停止

通常の

USB

実装とは異なり、OTG ではロールを変更するときに、ホストスタックとデバイススタック

(またはそのいずれか)をアクティブ/非アクティブ化する必要があります。

USB

ロールマネージャ

USB

ロールマネージャは、USBのステートを変更するためのコマンドを受信します。遷移を必要とす るステートが、次のようにいくつかあります。

ステート 値 説明

//

グループ名

UX_OTG_IDLE 0

デバイスはアイドル。通常は、何にも接続していない。

UX_OTG_IDLE_TO_HOST 1

デバイスがタイプ

A

コネクタに接続している。

UX_OTG_IDLE_TO_SLAVE 2

デバイスがタイプ

B

コネクタに接続している。

UX_OTG_HOST_TO_IDLE 3

ホストデバイスが切断された。

UX_OTG_HOST_TO_SLAVE 4

ホストからスレーブへのロール切り替え

UX_OTG_SLAVE_TO_IDLE 5

スレーブデバイスが切断している

UX_OTG_SLAVE_TO_HOST 6

スレーブからへホストのロール切り替え

インタラプトハンドラ

OTG

用のホストコントローラドライバとデバイスコントローラドライバには、従来の

USB

インタラプトを 超えた信号(特に

SRP

VBUS

による信号)をモニタするために、別種のインタラプトハンドラが必 要です。

USB OTG

コントローラを初期化する方法として、ここでは

NXP LPC3131

を例に説明します。

/* Initialize the LPC3131 OTG controller. */

status = ux_otg_lpc3131_initialize(0x19000000, lpc3131_vbus_function, tx_demo_change_mode_callback);

この例では、VBUS ファンクションとモード変更用コールバックを(ホストからスレーブ、またはその逆 に)渡すことで、

LPC3131

OTG

モードで初期化します。

コールバックファンクションでは、単に新しいモードを記録し、保留中のスレッドをウェイクアップして 新しいステートを取らせるようにします。

void tx_demo_change_mode_callback(ULONG mode) {

/* Simply save the otg mode. */

otg_mode = mode;

/* Wake up the thread that is waiting. */

ux_utility_semaphore_put(&mode_change_semaphore);

}

渡されるモード値としては、以下の値が可能です。

• UX_OTG_MODE_IDLE

• UX_OTG_MODE_SLAVE

• UX_OTG_MODE_HOST

アプリケーションは次の変数を調べて、デバイスが何であるかを常に確認することができます。

ux_system_otg -> ux_system_otg_device_type

この値としては、次のものが可能です。

• UX_OTG_DEVICE_A

• UX_OTG_DEVICE_B

• UX_OTG_DEVICE_IDLE

USB OTG

ホストデバイスは、次のコマンドを発行することで、いつでもロールの切り替えを要求でき

ます。

/* Ask the stack to perform a HNP swap with the device. We relinquish the host role to A device.*/

ux_host_stack_role_swap(storage -> ux_host_class_storage_device);

スレーブデバイスから発行するコマンドはありませんが、スレーブデバイスではロールを変更するよ うにステートを設定することができます。すなわち、ホストが

GET_STATUS

を発行したときに変更後 のロールがホストによりピックアップされ、切り替えが実行されます。

/* We are a B device, ask for role swap. The next GET_STATUS from the host will get the status change and do the HNP.*/

ux_system_otg -> ux_system_otg_slave_role_swap_flag =

UX_OTG_HOST_REQUEST_FLAG;

関連したドキュメント