6 オペレーションモード(マイコンからの操作方法を中心に解説)
本製品は、設定、送受信など動作モードによって、利用できる機能と振る舞いをモード切り替えによって選択して使用します。動作モードの決定は、外部から2つの信号線M0とM1ピンのHigh, Lowの2値信号レベルで設定します。一般に、M1とM0をHighレベルとLowレベルを組み合わせて、動作モードを決定するため、 MCUの2つのGPIOを使用してモード切り替え制御が可能です。単純な使用方法に限定する場合は、M1、M0を単一のGPIO端子から、同値に制御して軽量な設計、および、使用方法を採用することも可能です。
M1, M0の各ピンは、モジュール内部においてプルアップに保持されており、外部から信号を加えない限りにおいては、M1=High, M0=Highの状態で、Config/DeepSleep(mode 3)となります。
#
6.1 通常送受信モード(mode 0) < M1=Low, M0=Low >M1=Low, M0=Lowとしたとき通常送受信モード(mode 0)となります。(後述のWOR機能を使用せず)通常の送受信を行う場合は、一般にこのモードを使用します。
送信時の命令は、MCU(TXD)からシリアルポートを介して本製品(RXD)へデータを入力でき、モジュールは入力バイト列の情報に従って、自動的にワイヤレス送信を開始します。受信時には、モジュールが無線データを受信した後、シリアルポート(TXD)を介してMCU(RXD)へ出力されます。また、受信データをMCUへ出力する前に、6.14節で後述するAUXピン動作により、MCUへ割り込みをかけることができます。
#
6.2 WOR送信モード(mode 1) < M1=Low, M0=High >M1=Low, M0=HighとしたときWOR送信モード(mode 1)となります。8.6節で後述するWOR通信における、送信側として動作するためのモードになります。
送信時の命令は通常送受信モードと同じで、MCU(TXD)からシリアルポートを介して本製品(RXD)へデータを入力でき、モジュールは入力バイト列の情報に従って、自動的にワイヤレス送信を開始します。この際、WOR通信におけるプリアンブルが付加されます。また、受信時には、通常送受信モードと同じく、モジュールが無線データを受信した後、シリアルポート(TXD)を介してMCU(RXD)へ出力されます。また、AUXピン動作により、MCUへ割り込みをかけることができます。
#
6.3 WOR受信モード(mode 2) < M1=High, M0=Low >M1=High, M0=LowとしたときWOR受信モード(mode 2)となります。8.6節で後述するWOR通信における、受信側として動作するためのモードになります。このモードでは、データ受信のみ動作し、データ送信は行うことができません。MCU(TXD)からシリアルポートを介して本製品(RXD)へデータを入力しても、入力信号は破棄されます。
受信時には、通常送受信モードと同じく、モジュールが無線データを受信した後、シリアルポート(TXD)を介してMCU(RXD)へ出力されます。また、AUXピン動作により、MCUへ割り込みをかけることができます。
#
6.4 Config/DeepSleepモード(mode 3) < M1=High, M0=High >M1=High, M0=HighとしたときConfig/DeepSleepモード(mode 3)となります。第9章で後述するレジスタに対して、0節で説明するコマンド送受信の方法により、パラメータセットを行うためのモードになります。また、このモードではモジュール内部の無線チップの動作がオフとなりデータ送受信ができなくなりますが、最小の待機消費電力で動作するDeepSleep状態となります。
#
6.5 ver.1互換モードオペレーション(デフォルト)UARTからの本モジュールの制御を行う通信バイト列について、ファームウェアver.2.0においては、簡易な使用方法と互換性、もしくは、より堅牢な実装を支援するためのStrict Mode (v2.0厳格動作)を選択、切り替えて使用することができます。
本モジュールは、ファームウェアver.1.0、および、ver.1.2とのアプリケーションレベルのインタフェースの互換性を確保するため、給電直後のデフォルトは、ver.1互換モードとして起動します。このモードでの操作はシンプルで、過去の開発アプリケーションと互換性を持ちます。より、厳格にアプリケーションの設計と実装を検討される場合は、Strict Mode (v2.0厳格動作)の使用を検討してください。
通常送受信モード(mode 0) / WOR送信モード(mode 1)において、データ送信、データ受信、コマンド送受信が可能ですが、レジスタ読み取り操作などはできません。
また、(実用上問題となることは希ですが)、トランスペアレント(透過)送信モードにおいては、送信ペイロードにコマンド列に解釈されるバイト列が含まれる場合で、かつ、送信処理の読み取り開始に該当する箇所(送信サブパケット長で指定された、ペイロード区切り箇所)の開始位置にコマンドの開始バイト列「0xC0, 0xC1, 0xC2, 0xC3」が現れた場合に限って、これと、これに続くパラメータ部がコマンドとして解釈されます。 通常送信モードにおいては、送信時指定のチャンネル値(3バイト目の0xC2)として、これに合致するチャンネルは存在しないため、重複することは発生しません。
また、データ受信時に、MCUをウェイクアップさせるためのAUX立ち下がりからUART送信までの待機時間は2~3msで固定となります。
ver.1互換モードには、UART伝送バイト列の検証を行うためのCHECKSUM機能はありません。CHECKSUM機能を使用する場合は、Strict Mode (v2.0厳格動作)の利用が必要です。
#
6.6 データ送信【ver.1互換モード/デフォルト】データ送信および受信を行う際には送受信双方ともモジュールのLoRa変調の設定を合わせておく必要があります。すなわち、第9章の設定レジスタの中の、0x02レジスタのAirDataRate設定を送信側、受信側で同一設定にする必要があります。第9章の設定レジスタの中の、0x03レジスタのペイロード長設定でセットした長さが、1つのパケットの最大ペイロード(ユーザが任意のバイト列を載せられる領域)のサイズとなります。また、第9章の設定レジスタの中の、0x05レジスタの送信方法設定により、次の2つの送信モードで動作させることができます。
- 通常(Fixed-block)送信モード
4.2節で説明した宛先デバイスを指定した通信を行う通常(Fixed-block)送信モードです。このモードでは送信時の、MCU(TXD)からのシリアルポートを介して本モジュール(RXD)へデータを入力する際に、図 24の通り、ペイロードデータの前に宛先デバイスアドレス(2byte)と宛先デバイスの待ち受け周波数チャンネル(1byte)の情報を付加して、宛先デバイスを指定する必要があります。(この送信モードでは、必ず送信時に周波数チャンネルの指定を行います)
図 24 MCUから本モジュールへのUART入力バイト列
- 透過(Transparent)送信モード
この透過(Transparent)送信モードでは、第9章の設定レジスタの中の0x00, 0x01レジスタでセットしている自身のデバイスアドレスおよび、0x04レジスタでセットしている自身の待ち受け周波数チャンネルと同じ設定をした、他のモジュールに向けてデータ送信を行うことができます。このモードでは、ペイロードデータの前に宛先情報を付加する必要はなく、ペイロードデータだけをMCU(TXD)からシリアルポートを介して本モジュール(RXD)へ入力することでデータ送信することができます。
#
6.7 データ受信【ver.1互換モード/デフォルト】受信時には、モジュールが無線データを受信した後、図 25の受信時の出力形式に従ってシリアルポート(TXD)を介してMCU(RXD)へ出力されます。
図 25 本モジュールからMCUへのUART出力バイト列
#
6.8 コマンド送受信【ver.1互換モード/デフォルト】レジスタ0x03のRSSI環境ノイズ出力を有効化したとき、通常送受信モード(mode 0) / WOR送信モード(mode 1)において、図 26のコマンドによって、現在の環境ノイズと前回のデータ受信時RSSIの応答を取得できます。現在の環境ノイズはアドレス0x00から、前回のデータ受信時のRSSIはアドレス0x01から読み出すことができます。このとき、図 26のReg Start addr(読み出し開始アドレス)は0x00しか指定することができません。Read length(読み出し数)は、現在の環境ノイズのみ取得する場合は0x01を、現在の環境ノイズと前回のデータ受信時RSSIを取得する場合は0x02を指定してください。
図 26 MCUから本モジュールへの環境ノイズと前回受信時RSSI取得コマンドバイト列
また、本モジュールからMCUへの読み出し環境ノイズのレスポンスバイト列を図 27に示します。
図 27 本モジュールからMCUへの環境ノイズと前回受信時RSSIレスポンスバイト列
#
6.9 Strict Mode (v2.0厳格動作)オペレーション給電直後のデフォルトである、ver.1互換モードから、Strict Mode (v2.0厳格動作)への切り替えを行うことによって、MCUとモジュールとのUART通信バイト列に対して、より厳格な操作を提供できます。
第9章のレジスタ一覧の中の、0x09レジスタのStrict Mode (v2.0厳格動作)切り替えフラグに関して、このbitが1になっているときだけ、この0x09レジスタの他の設定もセットされた内容に従って動作するようになります。Strict Mode (v2.0厳格動作)での各動作については、9.1節の設定レジスタにて説明しています。
通常送受信モード(mode 0) / WOR送信モード(mode1)において、データ送信、データ受信、コマンド送受信が可能であり、コマンドによるレジスタ読み取り操作など行うことができます。
また、トランスペアレント(透過)送信モードにおいては、送信ペイロードにコマンド列に解釈されるバイト列が含まれる場合で、かつ、送信処理の読み取り開始に該当する箇所(送信サブパケット長で指定された、ペイロード区切り箇所)の開始位置にコマンドの開始バイト列「0xFF, 0xFF, 0xC1」および「0xFF, 0xFF, 0xF0」が現れた場合に限って、これと、これに続くパラメータ部がコマンドとして解釈されます。
通常送信モードにおいては、送信時指定のチャンネル値(3バイト目の0xC1, 0xF0)として、これに合致するチャンネルは存在しないため、重複することは発生しません。
また、データ受信時に、MCUをウェイクアップさせるためのAUX立ち下がりからUART送信までの待機時間はレジスタ0x09で設定した待機時間となります。
#
6.10 データ送信 【Strict Mode(v2.0厳格動作)】データ送信および受信を行う際には双方ともモジュールのLoRa変調の設定を合わせておく必要があります。すなわち、第9章の設定レジスタの中の、0x02レジスタのAirDataRate設定を送信側、受信側で同一設定にする必要があります。第9章の設定レジスタの中の、0x03レジスタのペイロード長設定でセットした長さが、1つのパケットの最大ペイロード(ユーザが任意のバイト列を載せられる領域)のサイズとなります。
また、第9章の設定レジスタの中の、0x05レジスタの送信方法設定により、次の2つの送信モードで動作させることができます。
- 通常(Fixed-block)送信モード
4.2節で説明した宛先デバイスを指定した通信を行う通常(Fixed-block)送信モードです。このモードでは送信時の、MCU(TXD)からのシリアルポートを介して本製品(RXD)へデータを入力する際に、図 28の通り、ペイロードデータの前に宛先デバイスアドレス(2byte)と宛先デバイスの待ち受け周波数チャンネル(1byte)の情報を付加して、宛先デバイスを指定する必要があります。(この送信モードでは、必ず送信時に周波数チャンネルの指定を行います)
図 28 MCUから本モジュールへのUART入力バイト列
- 透過(Transparent)送信モード
この透過(Transparent)送信モードでは、第9章の設定レジスタの中の0x00, 0x01レジスタでセットしている自身のデバイスアドレスおよび、0x04レジスタでセットしている自身の待ち受け周波数チャンネルと同じ設定をした、他のモジュールに向けてデータ送信を行うことができます。このモードでは、ペイロードデータの前に宛先情報を付加する必要はなく、ペイロードデータだけをMCU(TXD)からシリアルポートを介して本製品(RXD)へ入力することでデータ送信することができます。
レジスタ0x09の送信データ列へのCHECKSUM付与要求フラグを有効にした場合については6.13節で後述しています。
#
6.11 データ受信 【Strict Mode(v2.0厳格動作)】受信時には、モジュールが無線データを受信した後、シリアルポート(TXD)を介してMCU(RXD)へ出力されます。Strict Mode (v2.0厳格動作)へ切り替えて、第9章の設定レジスタのレジスタ0x09の受信パケットの宛先アドレスの出力設定をオンにしたとき、図 29の受信時の出力形式に従って送信側が指定した宛先アドレスの情報が出力されます。
図 29 本モジュールからMCUへのUART出力バイト列
レジスタ0x09の受信データ列へのCHECKSUM付与指定フラグを有効にした場合については6.13節で後述しています。
#
6.12 レジスタとコマンド送受信 【Strict Mode(v2.0厳格動作)】Strict Mode (v2.0厳格動作)状態ではない、起動後のデフォルト状態は、v1.0ファームウェアとの互換性のため、10.1節で説明する、v1.0互換モードでのレジスタ読み出し/書き込みコマンドのみが使用可能です。
ここでは、Strict Mode (v2.0厳格動作)を適用した状態について詳説します。
予めStrict Mode (v2.0厳格動作)へ切り替えておくことによって、ノーマル送受信モードとWOR送信モードにおいて、直前に送信したバイト列のCHECKSUM検査結果や環境ノイズ RSSI等の状態確認や、バッファあふれの発生フラグの確認のために状態レジスタ値を取得することができます。レジスタ0x09のStrict Mode (v2.0厳格動作)切り替えフラグを有効にした場合に、通常送受信モードおよびWOR送信モードにて、下記のレジスタ読み出しコマンドおよびフラグリセットコマンドを使用することで取得できます。
レジスタ読み出しコマンドについて、MCUから本モジュールへのコマンドリクエストのUART入力の場合、MCUから本モジュールへの読み出しコマンドバイト列を図 30に示します。(※Strict Mode (v2.0厳格動作)は、v1.0との互換性を確保するために明示的に切り替えて使用する必要があります。)
図 30 MCUから本モジュールへの読み出しコマンドバイト列
また、本モジュールからMCUへの読み出しレスポンスバイト列を図 31に示します。
図 31 本モジュールからMCUへの読み出しレスポンスバイト列
#
6.13 CHECKSUM 【Strict Mode(v2.0厳格動作)】Strict Mode (v2.0厳格動作)へ切り替えて、レジスタ0x09の送信データ列へのCHECKSUM付与要求フラグおよび受信データ列へのCHECKSUM付与指定フラグを有効にした際に、CHECKSUMとしてバイト毎の排他的論理和(XOR)を計算した1バイト値が付加されます。
UARTによるシリアル通信では、MCUのクロッキング性能やノイズなどの影響によって文字化けが発生する可能性があり、それらが原因による不具合を防ぐことや、データ有効性の無効な状態が検出できることを十分に担保するため、このCHECKSUM機能は使用できます。
送信データ列へのCHECKSUM付与要求フラグを有効にした際の、MCUから本モジュールへのUART入力バイト列を図 32に示します。
CHECKSUMの計算は次の通りです。図 32に示している通り、通常送信モードの場合は、「Target address」、「Target channel」をCHECKSUMの計算に含め、「Target address」、「Target channel」、「Payload」をバイトごとにXORを計算してCHECKSUMとします。
図 32 CHECKSUM有効時のMCUから本モジュールへのUART入力バイト
MCUのユーザソフトウェアにおいて上記の計算を行い、本モジュールへのUART入力バイト列の最後にCHECKSUMとして追加します。
例として通常送信モードで“hello”(0x68 0x65 0x6C 0x6C 0x6F)という(ASCIIコード)バイト列を宛先アドレス: 0x0003, 宛先チャンネル: 0x04に向けて送信する場合、CHECKSUMは0x65と計算され、UART入力バイト列は次のようになります。
0x00 0x03 0x04 0x68 0x65 0x6C 0x6C 0x6F 0x65 ↑CHECKSUM
受信データ列へのCHECKSUM付与指定フラグを有効にした際の、本モジュールからMCUへのUART出力バイト列を図 33に示します。
図 33 CHECKSUM有効時の本モジュールからMCUへのUART出力バイト列
CHECKSUMの計算は次の通りです。図 33に示している通り、「Packet size」や「Target address」、「RSSI」を有効にした場合はCHECKSUMの計算に含め、「Packet size」、「Target address」、「Payload」、「RSSI」をバイトごとにXORを計算してCHECKSUMとします。
本モジュールが上記の計算を行い、MCUへのUART出力バイト列の最後にCHECKSUMを追加します。
例として「Packet size」や「RSSI」を有効にして“hello” (0x68 0x65 0x6C 0x6C 0x6F)という(ASCIIコード)バイト列を受信した場合のCHECKSUMは0xC3と計算され、UART出力バイト列は次のようになります。
0x07 0x68 0x65 0x6C 0x6C 0x6F 0xA6 0xC3 ↑CHECKSUM
#
6.14 AUXピン動作本モジュールのAUXピン(出力)は、ワイヤレス送信予定の未送信データがあるかどうか、すべてのワイヤレスデータがUARTを介して送信されているかどうか、また、モジュールが通電直後の初期化、もしくは、モード切り替え中などのセルフチェックの過程にあるかどうかのインジケータとして使用できます。図 34、図 35に示す通り、データ送信時およびデータ受信時の内部バッファにデータがあるかどうかをAUXの状態で表します。
図 34の通り、受信された全ての無線データを、TXDからMCUへ送信完了したタイミングで、AUXはHighレベルになります。この時、内部受信バッファが空になっていることを表します。また、AUXピンは無線データ受信時にMCUをウェイクアップするための割り込みピンとして使用することもでき、図 34のAUXがLowレベルに落ちてから、TXDから受信無線データをMCUへ送信し始めるまでの間に、ver.1互換モードでは2~3ms、Strict Mode (v2.0厳格動作)ではレジスタ0x09での待機時間の間、Lowレベルにした後TXDからMCUへデータを送信します。
図 34 TXDピンが送信するときのAUXのタイミングシーケンス
図 35の通り、MCUが本モジュールへ送信データを入力し、そのデータが内部送信バッファに格納され、内部送信バッファが空ではないときAUXがLowになります。内部送信バッファのデータを無線チップに書き込み終わり内部送信バッファが空になったタイミングで、AUXはHighレベルになります。
図 35 RXDピンが受信したときのAUXのタイミングシーケンス
また、図 36に示す通り、電源投入時のリセットおよびConfig/DeepSleepモード(mode 3)から他の動作モードへの移行時に、ハードウェアのセルフチェックが実行され、その動作はAUXのLow状態で表されます。この動作中、AUXはLowレベルのままです。このプロセスが完了すると、AUXはHighレベルを出力し、M1とM0の組み合わせによって設定された動作モードに従って動作を開始します。
図 36 セルフチェック時のAUXのタイミングシーケンス
#
6.15 エラーハンドリングConfig/DeepSleepモード(mode 3)時のレジスタ読み出しコマンドおよびレジスタ書き込みコマンドの書式の間違い、もしくは、無効なレジスタを読み出した等へのエラーレスポンスとして、本モジュールからMCUへのUART出力バイト列として、図 37のようにエラーレスポンスを返答します。また、6.12節で説明したノーマル送受信モードとWOR送信モードにおける状態レジスタの取得コマンドは、取得レジスタの指定範囲が正しく、コマンドとして解された場合はレスポンスがありますが、コマンドとして解されない場合(単に宛先チャンネル部分が間違っている場合や取得レジスタの範囲指定が正しくない場合)にエラー応答はありません。
図 37 本モジュールからMCUへのエラーレスポンスバイト列