UART インターフェース

ユーザーは、外部ホスト デバイスを使用して、ボー レート 115200 で UART インターフェースを介して DWM モジュールに接続できます。次の図は、DWM1001 UART インターフェースのワークフローを示しています。UART 汎用モード通信では、ホスト デバイスがイニシエーターとして機能し、DWM モジュールがレスポンダーとして機能します。DWM1001 UART には、UART 汎用モードと UART シェル モードの 2 つのモードがあります。DWM1001 UART のデフォルト モードは汎用モードです。ただし、2 つのモードは移行可能です。

ジェネリック モードからシェル モードへ: ”Enter” を 2 回押すか、1 秒以内に 2 バイト [0x0D, 0x0D] を入力します。

低電力モードのウェイクアップ メカニズム で紹介されているように、モジュールが低電力モードで “スリープ“ 状態にある場合、2 回の “Enter“ の前に追加のバイトが必要になります。たとえば、“Enter“ を 3 回押すとモジュールが起動し、シェル モードに移行します。シェル モードから汎用モードへ: ユーザーは “quit“ コマンドを入力する必要があります。

../../../_images/image91.png

UART ワークフロー


UART TLV モード

UART TLV モードは TLV 形式のデータを使用します。このモードでは、ホスト デバイスと DWM モジュールは TLV 要求/応答を使用して通信します。完全な TLV リクエスト通信フローには、次の手順が含まれます。

  1. ホストデバイスは TLV リクエストを送信します。

  2. DWM1001 は TLV データで応答します。

データを受信すると、UART は次のデータの遅延タイマーを開始します。遅延期間、具体的には 25 クロック サイクル (25/32768 秒 ≈ 763 μs) 内に新しいデータが到着すると、UART は遅延タイマーを開始し、新しいデータを待機します。遅延期間内に新しいデータが到着しない場合、遅延タイマーは期限切れになります。次に、UART は受信したデータを汎用 API スレッドに送信し、応答データまたはエラー メッセージが返されるのを待機します。

DWM1001 UART TLV モード スレッドは、UART: アイドルUART: アイドル``の 3 つの状態間をシリアルで転送します。 ``受信中``および``UART: 終了。各状態は特定のイベントで次の対応する状態に移行します。

  • UART: Idle: は、初期化後および各 TLV 応答が成功した後の状態です。この状態では、UART は TLV リクエストまたは 2 回の``Enter``コマンドの開始として 1 バイトのみを期待します。

    • イベントを待機しています: TLV リクエストを受信して​​います。

    • イベントに対するアクション:

      • 遅延タイマーを開始します。

      • UART に転送: 受信中。

  • UART: Receiving: は、受信リクエストの終了を待っている状態です。この状態でデータを受信すると、UART は遅延タイマーをリフレッシュします。ホストデバイスがバイトの送信を完了すると、遅延タイマーが期限切れになります。

    • イベントを待機中: 遅延期間がタイムアウトしました。

    • イベントに対するアクション - 受信したリクエストがダブル``Enter``の場合:

      • UART シェル モードに移行します。

    • イベントに対するアクション - 受信したリクエストがダブル``Enter``でない場合:

      • 受信したリクエストを汎用 API スレッドに送信します。

      • UART への転送: 完了しました。

  • UART: Finished: 汎用 API スレッドが受信リクエストを解析し、応答データまたはエラー メッセージを UART スレッドに送り返すのを待機している状態です。

    • イベントを待機しています: 汎用 API スレッドによって呼び出される call_back() 関数。

    • イベントに対するアクション:

      • 応答データまたはエラー メッセージをホスト デバイスに送信します。

      • UART に転送: アイドル。


UART TLV モード通信

TLV モードでの UART 通信を次の図に示します。

  1. ホストデバイスは TLV 形式でリクエストを送信します。

  2. DWM モジュールは TLV 形式のメッセージで応答します。

    ../../../_images/image10.png

    UART TLV通信


UART TLVモード通信の例

以下の図は、ホスト デバイスが dwm_gpio_cfg_output コマンドを送信してバイト配列のピン 13 レベルを HIGH ([0x28, 0x02, 0x0D, 0x01]) に設定し、TLV モードで UART API を使用して DWM モジュールから応答を受信する例を示しています。通信フローの手順は次のとおりです。

  1. ホスト デバイスは、dwm_gpio_cfg_output コマンドを TLV 形式で送信します: Type = 0x28、Length = 0x02、Value = 0x0D 0x01。

  2. DWM モジュールTLV 形式で応答します: タイプ = 0x40、長さ = 0x01、値 = 0x00、

Where Type = 0x40 indicates this is a return message, Length = 0x01 indicates that there is one byte following as data, and value = 0x00 indicates the TLV Request is parsed correctly.

../../../_images/image11.png

UART TLV 通信の例


UART シェルモード通信

UART シェル モードではプロンプトが表示され、シェル コマンドが使用されます。UART シェル モードは、人間が判読できる形式で API にアクセスできるようにするためのものです。したがって、すべてのシェル コマンドは文字列で、その後に文字リターン (つまり “Enter“) が続きます。ユーザーはキーボードから直接文字列を入力し、“Enter“ を押してシェル コマンドを送信できます。DWM1001 UART は、 “quit“ コマンドを除き、各シェル コマンドの後もシェル モードのままです。

以下の図に示すように、完全なシェル コマンド通信フローには次の手順が含まれます:

  1. ホスト デバイスは、シェル コマンド + “Enter“ を DWM1001 に送信します。

  2. 応答するメッセージがある場合、DWM1001 はそのメッセージをホスト デバイスに送信します。

  3. 応答するものが何もない場合、DWM1001 は何も送信せず、沈黙を保ちます。

../../../_images/image12.png

UART シェルモード通信


UART シェルモード通信の例

以下の図は、ホスト デバイスが UART シェルを使用して``GPIO set``コマンドを送信し、ピン 13 レベルを HIGH に設定する例を示しています (バイト配列の``gs 13``の後に``Enter``キーが続きます。gs で詳しく説明します)。通信フローの手順は次のとおりです。

  1. ホスト デバイスはシェル モードで``GPIO set``コマンドを送信します: gs 13``+``Enter

  2. DWM1001 は文字列``gpio13: 1``でホストに応答します。

../../../_images/image13.png

UART シェルモード通信の例


低電力モードのウェイクアップメカニズム

PANS ライブラリで提供されているように、DWM モジュールは低電力モードで動作できます。低電力モードでは、ホストデバイスが API と通信しない場合、モジュールは API 関連のスレッドを``スリープ``状態にします。この場合、実際の通信を開始する前に、ホスト デバイスは外部インターフェイスを通じてモジュールを起動する必要があります。

UART インターフェイスの場合、ホスト デバイスはモジュールをウェイクアップするために最初に 1 バイトを送信する必要があります。

API 送信が完了したら、dwm_sleep とシェル コマンド quit で紹介されているように、ホスト デバイスは電力を節約するためにモジュールを``スリープ``状態に戻す必要があります。


UART ウェイクアップ

DWM が (低電力モードで) スリープしている場合は、SPI/UART がコマンドの受け入れを開始する前にウェイクアップ手順を実行する必要があります。スリープから復帰するには、少なくとも 1 バイトを UART インターフェイスで送信する必要があります (低電力モードのみ)。