5 オペレーション方法
本セクションでは、実際のE220-900T22S(JP)の、マイコン(MCU)やシングルボードコンピュータ(SBC)から、UARTやGPIO端子を利用して操作する方法と手順を説明します。
図 13 典型的な結線図
このセクションで使用するハードウェアは、図 13のような典型的な配線が行われた回路を想定し、MCUとLoRa通信モジュール間を、UART(TXD, RXDをクロス接続)、M0、M1をMCUの出力ピン、AUXをMCUのピン状態変化の割り込みに対応した入力ピンに接続し、電源(VCCまたはVDD)とGND(AGND)ピンを接続しているものと想定します。以下、説明では、主要部分、注目情報以外は省略して表記しています。
#
5.1 利用手順概要E220-900T22S(JP)は、送信と受信の兼用のモジュールで、各個体に使用用途の区別はありません。設定や設計者による設計意図、アプリケーションによって、振る舞いや特性を付けて使用することができます。
モジュールへの給電後は、リセット動作を待ち、M0、M1ピンを、いずれもHighレベルに保持(コンフィグレーションモード)します。このモードは、LoRaモデムや電力増強アンプは停止状態にあり、最も消費電力が小さい状態(DeepSleep)です。
続いて、いくつかのレジスタを操作します。設定値を保持するレジスタは設定後、給電停止後も値は不揮発メモリに保存されます。また、設定値は通信暗号キー以外読み出し操作がコマンドによって可能です。コンフィグレーションモードにおいては、UARTのボーレートは9600bpsに固定されており、レジスタ0x02でUARTのボーレート設定を変更しても、コンフィグレーションモードにおいては、ビットレートを常に、9600bpsとして使用します。
設定が完了したら、M0、M1ピンを操作します。最もシンプルな使用方法は受信待機です。M0, M1ピンをLowレベルに切り替えて保持し、LoRaモデムが受信待ち受け状態となります。このとき、AUXピンはHighレベルを出力しており、通常の待ち受け時はこの状態です。この状態で、自モジュールが受信すべきLoRaパケットを受信したら、その直後にAUXピンはLowレベルに遷移し、UARTのTXDピンから一定時間(デフォルトでは約2ms)後に受信パケットの内容が出力されます。MCUでは、MCUのRXDからのデータ読み取りをすることでモジュール内部の受信バッファから、MCUへデータを読み込めます。
モジュールから出力されたデータは自動的にモジュールの受信バッファから消去されるため、再度同じ受信パケットを読み込むことはできません。
LoRaパケットの送信を行いたい場合は、通常の送信では、受信待ち受け状態において、外付けMCUのTXDから、本モジュールのRXDへ、ターゲットアドレス、ターゲットチャンネル、ペイロードを連続して送信することで送信を実行します。
本モジュールでは、パケット送信の内部処理の違いから、2種類の送信モードを提供します。
トランスペアレント(透過)送信モードは、設定された最大長に自動的にパケット分割を行いながら連続した複数のパケットとして送信されるモードです。パケットの区切りやパケット損失の発生を設計者がアプリケーションの実装によって判断や考慮ができる場合は、このトランスペアレント(透過)送信モードを使用できます。初期設定状態ではこのモードで動作します。もう一方の、通常送信モードは、設計者によってパケットの長さが決められる送信モードです。パケットの区切り(つまり、サイズ)を、設計者がアプリケーションの都合で調整します。設計者がレジスタ設定にて切り替えて使用の選択が可能です。トランスペアレント(透過)送信モード、および、通常送信モードに関しては、6.6節にて詳述しています。
通常送信モードにおける、パケットの送信区切りは、MCUからUARTによりデータを受信した際、一定時間(およそ4byte分以上)データが到着しない状態を検出し区切りとして判断し、1パケット分の送信データとしてまとめます。この「データが到着しない時間」である区切り時間は、0x02レジスタのボーレート設定に応じて表 3の通り計算されます。高速のボーレート(38,400 bps以上)では、区切り時間が2 msで一定となっていますが、システムの処理能力による最小の検出可能な間隔を反映し記載しています。
UARTのボーレートが9600bpsを使用している場合は、最後にモジュールのRXDからデータの受信後5ms経過後にデータの区切りと自動的に判断され、モジュールは送信処理を行います。
通常送信モードでは、1パケットのペイロードは(ターゲットアドレス、ターゲットチャンネルの3バイトを除いた)、197バイトを上限として、それ以下の長さのデータを送信時に指定できます。ターゲットアドレス、ターゲットチャンネルおよびペイロードを含めたデータが内部送信バッファに格納されます。データサイズが200byteを超えた場合、超えた分のデータも内部バッファに格納されますが、超えたデータの先頭から順に次の送信データのターゲットアドレス、ターゲットチャンネルとして解されるため、意図したターゲットへの送信になりません。
トランスペアレント送信モードの場合は、ペイロードサイズが200byteを超えた場合でも、超えた分のデータは次のパケットの送信データとして送信されます。
表 3 ボーレート設定毎のデータの区切り時間
ボーレート | 区切り検出時間 |
---|---|
1,200 bps | >30ms |
2,400 bps | >15ms |
4,800 bps | >8ms |
9,600 bps | >5ms |
19,200 bps | >3ms |
38,400 bps | >2ms |
57,600 bps | >2ms |
115,200 bps | >2ms |
#
5.2 リセット動作モジュールに電力が供給されると、AUXはすぐにLowレベルを出力し、ハードウェアのセルフチェックを実行し、設計者の不揮発メモリに保存されたレジスタ設定パラメータに基づいて動作モードを設定する動作を開始します。この動作中は、AUXはLowレベルのままです。この動作が完了すると、AUXはHighレベルを出力し、M1とM0を組み合わせによって設定された動作モードに従って動作を開始します。したがって、設計者はモジュールの通常の動作の開始としてAUXの立ち上がりエッジを待つ必要があります。
この動作は、通常、僅かな時間で完了するため、起動後100ms程度の十分な待機時間を設けることで、AUXの確認をおこなうだけの処理に置き換えても一般的には差し支えありません。厳密で、無駄のない動作を実現するためには、AUXピンを監視してください。
#
5.3 モード選択(M1, M0ピン)M1とM0によって設定される4つの動作モードがあります。詳細は次のとおりです。
Mode (0-3) | M1 | M0 | 機能説明 |
---|---|---|---|
mode 0: (通常送受信) | 0 | 0 | 通常のデータ送受信が可能です。デフォルトでは通常送信モードが有効になります。 |
mode 1: (WOR送信) | 0 | 1 | 送信前にWOR受信モードのデバイスをウェイクアップさせるためのプリアンブル(preamble) が自動的に追加されます。通常のデータ受信が可能で、受信機能はmode 0と同じです。WOR機能をサポートします。 |
mode 2: (WOR受信) | 1 | 0 | 送信機能はオフになります。WOR送信モード (mode 1)で送信されたデータのみ受信可能です。 |
mode 3: (Configuration/DeepSleep) | 1 | 1 | コマンドでパラメータを設定することができます。 このモードでのUART操作のUARTパラメータは固定されており、レジスタ設定に影響を受けず、baud rate=9600, parity=8N1で行う必要があります。 |
WOR送受信を使用しない場合は、M1、M0ピンは、同時にHigh、または、Lowに設定することで、MCUなどのI/Oピンを節約することが可能です。
また、レジスタの設定値は、モジュール内の不揮発メモリに記憶されるため、(物理スイッチやジャンパピンなどを活用した設定上の工夫を回路上などで行いあらかじめ設定を行ったような)設定済みのモジュールにおいては、M1とM0ピンをLowに固定しておけば、(M1とM0ピンを操作せず)、通常送受信モード(mode 0)に固定して使用することも可能です。その場合でも、AUXピンは、必要に応じて使用してください。
モード切り替え動作の補足
設計者は、M1とM0をHighレベルとLowレベルを組み合わせて、動作モードを決定できます。 MCUの2つのGPIOを使用して、モード切り替え制御が可能です。
M1とM0の電圧レベルを変更した後、モジュールがアイドル状態 (AUX=High) の場合は、1ms後、指定した新しいモードに従って動作を開始します。
モジュールのシリアルポートデータがLoRaモデム経由にて送出されている場合は、その送出完了後に、指定した新しい動作モードに切り替わります。
モジュールがLoRaパケットを受信し、シリアルポートを介してデータを送出する場合、新しい動作モードに切り替える前に送信を完了する必要があります。したがって、モード切り替えは、AUX出力がHighレベルの場合にのみ有効になります。それ以外の場合は、モードの切り替えは遅延します。
設計者によって大量のデータを継続的にモジュールへ入力し、同時にモード切り替えを実行した場合、この時点では、モードの切り替えは無効です。モジュールは、新しいモードの検出と切り替えを実行する前に、すべてのデータを処理します。したがって、一般的に推奨される手順としては、AUXピンの出力状態を検査し、出力がHighレベルになってから2ms後に切り替えることが安全です。
モジュールが他のモードからスリープモードに切り替えられたとき、データがまだ処理されていない場合、モジュールはスリープモードに入る前に、これらのデータ(受信と送信を含む)を処理します。この機能は、電力を節約する高速スリープに使用できます。 たとえば、送信側のモジュールはmode 0で動作し、設計者は、シリアルポートへデータを送信し、AUXピンがアイドル状態(Highレベル)になるのを待つ必要がなく、直接スリープモードに切り替えることを可能とします。また、MCUは、すぐにスリープ状態になり、モジュールはデータをLoRaモデム経由で自動的に送信し、その送信後1ms以内に自動的にスリープ状態になります。この動作シーケンスを採用することにより、MCUの動作時間が節約でき、消費電力が削減されます。
どのようなモード切り替えでもこのMCU動作節約の恩恵を受けることが可能です。 モジュールが現在のモードでのイベントを処理した後、1ms内で自動的に新しいモードに入ります。したがって、設計者がAUXを検査して、モードの切り替えを行う必要性はなくなります。たとえば、送信モードから受信モードに切り替えるとき、MCUは、モード切り替えの前にスリープ状態に入ることができます。そして、AUXの変化を検知するために、外部入力割り込みを使うことができ、これにより、モード切り替えができます。
この動作モードは非常に柔軟で効率的であり、MCUの操作の利便性に応じて設計されており、システム全体のワークロードを可能な限り削減し、システム効率を向上させ、消費電力を削減できます。
ただし、消費電力削減のために本モジュールへのUART送信終了後に給電を断つ場合には、モジュール内部処理の終了を待つために、AUXピンがアイドル状態(Highレベル)になるのを待つか(5.4節の2 および 6.9節を参照)、内部処理(ワイヤレス送信)終了のための十分な時間をとる必要があります。
各モードにおける動作の状態をまとめたものは次の各表の通りです。
通常送受信(mode 0)
動作 | M0=0, M1=0の場合: mode 0 での動作 |
---|---|
送信 | MCUはシリアルポートを介してデータを入力でき、送信バッファにデータが存在している場合、モジュールは通常の送信を開始します。 |
受信 | モジュール内の受信機能(RF受信アンプを含む)が常時オンになり、LoRa無線通信によるデータパケットを受信した後、シリアルポートのTXDピンから出力されます。また、AUXピンの出力も自動的に制御されます。 WORプリアンブルが付与されたWOR送信パケットも受信することが可能です。 |
コマンド操作 | モジュールに対するコマンドリクエストは有効に働きます。 |
WOR送信(mode 1)
動作 | M1=0, M0=1の場合: mode 1 での動作 |
---|---|
送信 | LoRaワイヤレスデータ送信が有効となり、送信バッファにデータが存在している場合、モジュールはWOR送信を開始します。WOR送信では、通常の送信パケットの前に、プリアンブル送信を行い、WOR受信(mode 2)で待機しているモジュールをウェイクアップさせることができます。 |
受信 | ワイヤレスデータ受信が常時オンとなります。通常送受信(mode 0)の受信動作と同様に動作します。 |
コマンド操作 | モジュールに対するコマンドリクエストは有効に働きます。 |
WOR受信(mode 2)
動作 | M1=1, M0=0の場合: mode 2 での動作 |
---|---|
送信 | ワイヤレスデータ送信がオフとなります。このモードではLoRaパケットが送出されることはありません。シリアル通信を介して書き込まれたデータはすべて破棄されます。 |
受信 | WORサイクル時間の設定によって、大半の時間はDeepSleepした状態となり、ワイヤレスデータ受信はオフとなりますが、このサイクル時間によって周期的にオンとなりWOR送信プリアンブルを監視します。 |
コマンド操作 | モジュールに対するコマンドリクエストは行えません。リクエストはすべて破棄されます。 |
Configuration/DeepSleep (mode 3)
動作 | M1=1, M0=1の場合: mode 3 での動作 |
---|---|
送信 | ワイヤレスデータがオフとなります。 |
受信 | ワイヤレスデータ受信がオフとなりLoRaパケットは一切受信できません。 |
設定 | 設計者は設定レジスタにアクセスして、モジュールの機能・動作パラメータを設定できます。 |
コマンド操作 | モジュールに対するコマンドリクエストは有効に働きます。 |
注釈 | このモード(mode 3)から他のモードに移行すると、このモードで設定したパラメータが反映されます。設定変更のプロセス中、AUXはHighレベルからLowレベルに遷移し、反映完了後、Highレベルに戻ります。設計者はこのAUXピンの立ち上がりエッジを検出、もしくは、検査することをお勧めします。 |
#
5.4 補助出力の利用(AUX信号)AUXピン(Auxiliary Pin)は、本モジュールの動作状態を示す出力ピンです。主な機能と利用方法は以下の通りです。
1. 動作状態の表示:
Highレベル: モジュールがアイドル状態であることを示します。
Lowレベル: モジュールが作業中(送信または受信中)であることを示します。
2. 送信完了の通知:
データ送信が完了すると、AUXピンがLowレベルからHighレベルに変化します。
これにより、マイコンは送信完了のタイミングを正確に把握できます。
3. 受信バッファの状態:
受信バッファにデータがある場合、AUXピンはLowレベルになります。
バッファが空になると、Highレベルに戻ります。
4. モジュールの初期化完了の通知:
- 電源投入時やConfig/Deep sleepモードからの復帰時、初期化が完了するとAUXピンがHighレベルになります。
AUXピンの利用方法:
MCUの割り込み入力として接続します。モジュールがLoRaパケットを受信したら、その直後にAUXピンはLowレベルに遷移し、UARTのTXDピンから2~3ms後に受信パケットの内容が出力されます。AUXピンをMCUの割り込み入力として接続することにより、MCUがSleepしていてもAUXピンの割り込みにより起こしてから、データを受信することができます。
ただし、深いスリープ動作などで一部のMCUでSleep復帰などに要する時間が、この2ms以上を要する場合など、UARTの受信処理開始に間に合わない場合は、データを取りこぼす可能性があります。
#
5.5 送受信バッファ(モジュール内バッファ)- MCUから本モジュールへのUART入力時の内部送信バッファに関して
MCUからのUART入力データをそのまま内部送信バッファに格納します。UART入力データのバッファ格納フローチャートを図 14に示します。
図 14 UART入力データのバッファ格納フローチャート
内部送信バッファへのデータ格納に関して、400byteのバッファサイズがあります。固定送信モードの場合、図 15のようにMCUからの入力された宛先情報(3byte)とペイロード(最大197byte)が格納されます。
図 15 内部送信バッファへのデータ格納
- 本モジュールがLoRa受信時の内部受信バッファに関して
LoRa受信したデータが内部受信バッファにそのまま格納されます。UART入力データのバッファ格納フローチャートを図 16に示します。
図 16 LoRa受信データのバッファ格納フローチャート
内部送信バッファへのデータ格納に関して、400byteのバッファサイズがあります。固定送信モードで送信されたデータを受信した場合、図 17のように受信ペイロード(最大197byte)とRSSI(1byte)が格納されます。
図 17 内部受信バッファへのデータ格納