シリアル通信アプリ 書式モード(バイナリ)の 0xDB コマンド
書式モード(バイナリ)におけるインタラクティブモードを使用しない設定機能
送信側の端末へ特定の書式に従ったデータを入力すると、受信側の端末も特定の書式に従ったデータを出力します。
16進数で表すデータは、バイナリデータのまま表現します。
送信側の入力 | 受信側の出力 | |
---|---|---|
簡易形式/拡張形式のデータ | → | 簡易形式/拡張形式のデータ |
SET
ピンを GND
へ接続して起動すると書式モード(アスキー)が有効となります。EX1
ピンを GND
へ接続して起動すると書式モード(バイナリ)が有効となります。扱うことのできる書式の形式は2種類あります。
例えば、5バイトのバイナリデータ 0x48 0x45 0x4C 0x4C 0x4F
は、簡易形式を使って次のように送信できます。
以降、バイナリデータ表現の 0x
を省略します。
例えば、0x48 0x45 0x4C 0x4C 0x4F
は 48 45 4C 4C 4F
と表します。
【送信側】
A5 5A 80 07 00 01 48 45 4C 4C 4F 43 04 <- 入力
A5 5A 80 04 DB A1 80 01 FB 04 <- 出力
【受信側】
A5 5A 80 07 78 01 48 45 4C 4C 4F 3B 04 <- 出力
基本形式や拡張形式で表現したデータ列を送信するときは、バイナリデータのまま扱います。
ヘッダ | 長さ | ペイロード | チェックサム | フッタ |
---|---|---|---|---|
A5 5A | ペイロード長 | 00 -FF の繰り返し | ペイロードのXOR | EOT |
A5 5A
の2バイト0x8000
とORをとる0x04
(入力時は省略可)例えば、バイナリデータ 00 11 22 33 AA BB CC
は次のように表現します。
A5 5A 80 07 00 11 22 33 AA BB CC DD 04
デバッグが面倒ですが、マイコン間の通信では高い効率を誇ります。
書式モードは、親機と子機を区別します。
親子間では、アプリケーションIDと周波数チャネルを合わせる必要があります。
書式モードでは、受信したデータから送信元を判別できます。
簡易形式の書式では論理デバイスIDを、拡張形式の書式では論理デバイスIDに加えて拡張アドレスを利用します。
0x8
を付加したものです。書式モードの簡易形式を利用する場合は、次の書式に従います。
# | データ | 内容 | 備考 |
---|---|---|---|
uint8 | ヘッダ | 0xA5 のみ | |
uint8 | ヘッダ | 0x5A のみ | |
uint16 | データ長 | \(N\)+2 | |
0 | uint8 | 送信先の論理デバイスID | 親機0x00 ,子機0x01 -0x64 ,全子機0x78 |
1 | uint8 | コマンド番号 | 0x80 未満の任意の値 |
2 | [uint8] | 任意のデータ | 長さ\(N\)のバイト列(\(N\leqq80\)を推奨) |
uint8 | チェックサム | XOR | |
uint8 | フッタ | EOT (0x04 ) |
# | データ | 内容 | 備考 |
---|---|---|---|
uint8 | ヘッダ | 0xA5 のみ | |
uint8 | ヘッダ | 0x5A のみ | |
uint16 | データ長 | \(N\)+2 | |
0 | uint8 | 送信元の論理デバイスID | 親機0x00 ,子機0x01 -0x64 ,未設定子機0x78 |
1 | uint8 | コマンド番号 | 送信側で指定した0x80 未満の値 |
2 | [uint8] | 任意のデータ | 長さ\(N\)のバイト列 |
uint8 | チェックサム | XOR | |
uint8 | フッタ | EOT (0x04 ) |
# | データ | 内容 | 備考 |
---|---|---|---|
uint8 | ヘッダ | 0xA5 のみ | |
uint8 | ヘッダ | 0x5A のみ | |
uint16 | データ長 | 4 | |
0 | uint8 | 送信元の論理デバイスID | 0xDB のみ:自身を示す |
1 | uint8 | コマンド番号 | 0xA1 のみ |
2 | uint8 | 応答ID | 128 -255 (0x80 -0xFF )の範囲で続き番号を示す |
3 | uint8 | 処理結果 | 成功1 ,失敗0 |
uint8 | チェックサム | XOR | |
uint8 | フッタ | EOT (0x04 ) |
親機から全子機に対してバイト列 11 22 33 AA BB CC
を送信する例を示します。
【送信側:親機】
A5 5A 80 08 78 01 11 22 33 AA BB CC A4 04 <- 入力
A5 5A 80 04 DB A1 80 01 FB 04 <- 出力
末尾の
0xA4
はチェックサム:0x78
から0xCC
までのXOR。
【受信側:全子機】
A5 5A 80 08 00 01 11 22 33 AA BB CC DC 04 <- 出力
末尾の
0xDC
はチェックサム:0x00
から0xCC
までのXOR。
書式モードの拡張形式を利用する場合は、次の書式に従います。
# | データ | 内容 | 備考 |
---|---|---|---|
uint8 | ヘッダ | 0xA5 のみ | |
uint8 | ヘッダ | 0x5A のみ | |
uint16 | データ長 | \(N\)+\(M\)+3 | |
0 | uint8 | 送信先の論理デバイスID | 親機0x00 ,子機0x01 -0x64 ,全子機0x78 |
1 | uint8 | コマンド番号 | 0xA0 のみ |
2 | uint8 | 応答ID | 任意の値 |
3 | [uint8] | オプション | 長さ\(N\)のオプション列 |
3+\(N\) | [uint8] | 任意のデータ | 長さ\(M\)のバイト列(\(M\leqq80\)を推奨) |
uint8 | チェックサム | XOR | |
uint8 | フッタ | EOT (0x04 ) |
# | データ | 内容 | 備考 |
---|---|---|---|
uint8 | ヘッダ | 0xA5 のみ | |
uint8 | ヘッダ | 0x5A のみ | |
uint16 | データ長 | \(N\)+\(M\)+7 | |
0 | uint8 | 拡張アドレスの指定 | 0x80 のみ |
1 | uint8 | コマンド番号 | 0xA0 のみ |
2 | uint8 | 応答ID | 任意の値 |
3 | uint32 | 送信先の拡張アドレス | シリアルIDの先頭へ0x8 を加えた値 |
7 | [uint8] | オプション | 長さ\(N\)のオプション列 |
7+\(N\) | [uint8] | 任意のデータ | 長さ\(M\)のバイト列(\(M\leqq80\)を推奨) |
uint8 | チェックサム | XOR | |
uint8 | フッタ | EOT (0x04 ) |
拡張形式では、オプション列を指定することで細かな設定を行うことができます。
オプション列は、オプションのIDと引数の繰り返しで表現します。終端は 0xFF
とします。
0xFF
の1バイトだけを指定します。ID | 引数 | 初期値 | 内容 |
---|---|---|---|
0x01 | なし | 無効 | MAC ACKの有効化 |
0x02 | uint8 | 0x00 | アプリケーション再送の有効化 |
0x03 | uint16 | 0x0000 | 初回送信の遅延の最小値 |
0x04 | uint16 | 0x0000 | 初回送信の遅延の最大値 |
0x05 | uint16 | 10 | アプリケーション再送の間隔 |
0x06 | なし | 無効 | 平行要求の許可 |
0x07 | なし | 無効 | 応答メッセージの無効化 |
0x08 | なし | 無効 | 送信後スリープ |
0x01
:MAC ACKの有効化MAC層のACK(確認応答)を有効化します。
頻繁にデータを送信する場合には適しませんが、信頼性を向上できる場合があります。
0x78
)とするときは利用できません。0x02
:アプリケーション再送の有効化MAC ACK を使用するときは、0x00
-0x0F
を指定します。送信に成功するまで、それぞれ0-16回の再送を行います。
MAC ACK を使用しないときは、0x81
-0x8F
を指定します。必ず1-16回の再送を行います。
応答メッセージは、すべての再送が終了してから出力します。
0x03
:初回送信の遅延の最小値初回送信までの遅延の最小値をミリ秒で指定できます。
0x04
:初回送信の遅延の最大値初回送信までの遅延の最大値をミリ秒で指定できます。
0x05
:アプリケーション再送の間隔アプリケーション再送を有効化した際の再送間隔をミリ秒で指定します。
0x06
:平行要求の許可平行要求を許可します。
平行要求を許可すると、要求を完了するまでブロックせず、次の要求処理を受け付けることができるようになります。
例えば 0.5 秒の遅延を設定した要求を3回連続して入力した場合、初期状態では 0.5 秒後、1.0秒後、1.5秒後と順番に処理します。ところが、平行要求を許可した場合は、0.5秒後に順不同で送信要求を処理します。なおパケット分割を必要とする場合は使用できません。
0x07
:応答メッセージの無効化送信側へデータを入力した際に出力される応答メッセージを無効とします。
0x08
:送信後スリープ送信後、速やかに本体をスリープさせます。
RX
が立ち上がりエッジを検知すると、スリープから復帰します。何か1バイトのデータを入力してください。
スリープ復帰後、UART の初期化が終わると入力を受け付けます。
# | データ | 内容 | 備考 |
---|---|---|---|
uint8 | ヘッダ | 0xA5 のみ | |
uint8 | ヘッダ | 0x5A のみ | |
uint16 | データ長 | \(M\)+14 | |
0 | uint8 | 送信元の論理デバイスID | 親機0x00 ,子機0x01 -0x64 ,未設定子機0x78 |
1 | uint8 | コマンド番号 | 0xA0 のみ |
2 | uint8 | 応答ID | 送信側で指定した値 |
3 | uint32 | 送信元の拡張アドレス | シリアルIDの先頭へ0x8 を加えた値 |
7 | uint32 | 送信先の拡張アドレス | 論理デバイスID使用時は0xFFFFFFFF |
11 | uint8 | LQI | 受信時の電波通信品質 |
12 | uint16 | 続くバイト列の長さ | バイト数\(M\)を表す |
14 | [uint8] | 任意のデータ | 長さ\(M\)のバイト列 |
uint8 | チェックサム | XOR | |
uint8 | フッタ | EOT (0x04 ) |
# | データ | 内容 | 備考 |
---|---|---|---|
uint8 | ヘッダ | 0xA5 のみ | |
uint8 | ヘッダ | 0x5A のみ | |
uint16 | データ長 | 4 | |
0 | uint8 | 送信元の論理デバイスID | 0xDB のみ:自身を示す |
1 | uint8 | コマンド番号 | 0xA1 のみ |
2 | uint8 | 応答ID | 入力時に指定した値 |
3 | uint8 | 処理結果 | 成功1 ,失敗0 |
uint8 | チェックサム | XOR | |
uint8 | フッタ | EOT (0x04 ) |
親機から子機に対してバイト列 11 22 33 AA BB CC
を送信する例を示します。
親機から論理デバイスID0x01
の子機へ送信する例を示します。
0x01
【送信側:親機】
A5 5A 80 0A 01 A0 01 FF 11 22 33 AA BB CC 82 04 <- 入力
A5 5A 80 04 DB A1 01 01 7A 04 <- 出力
末尾の
0xC1
はチェックサム:0x42
から0xCC
までのXOR。
【受信側:子機】
A5 5A 80 14 00 A0 01 82 03 68 41 FF FF FF FF FF 00 06 11 22 33 AA BB CC 2D 04 <- 出力
末尾の
0x2D
はチェックサム:0x00
から0xCC
までのXOR。
親機から拡張アドレス0x820163B2
(シリアルID0x20163B2
)の子機へ送信する例を示します。
0x01
【送信側:親機】
A5 5A 80 0E 80 A0 01 82 01 63 B2 FF 11 22 33 AA BB CC 51 04 <- 入力
A5 5A 80 04 DB A1 01 01 7A 04 <- 出力
末尾の
0x51
はチェックサム:0x80
から0xCC
までのXOR。
【受信側:子機】
A5 5A 80 14 00 A0 01 82 03 68 41 82 01 63 B2 FF 00 06 11 22 33 AA BB CC 7F 04 <- 出力
末尾の
0x7F
はチェックサム:0x00
から0xCC
までのXOR。
親機から論理デバイスID0x01
の子機へ MAC ACK を使用して送信する例を示します。
0x01
0x01
:MAC ACKの有効化を指定【送信側:親機】
A5 5A 80 0B 01 A0 01 01 FF 11 22 33 AA BB CC 83 04 <- 入力
A5 5A 80 04 DB A1 01 01 7A 04 <- 出力
末尾の
0x83
はチェックサム:0x01
から0xCC
までのXOR。
【受信側:子機】
A5 5A 80 14 00 A0 01 82 03 68 41 00 00 01 01 FF 00 06 11 22 33 AA BB CC 2D 04 <- 出力
末尾の
0x2D
はチェックサム:0x00
から0xCC
までのXOR。
親機から論理デバイスID0x01
の子機へ 768ms の遅延を設けて送信する例を示します。
0x01
0x03
:初回送信の遅延の最小値を指定【送信側:親機】
A5 5A 80 0D 01 A0 01 03 03 00 FF 11 22 33 AA BB CC 82 04 <- 入力
A5 5A 80 04 DB A1 01 01 7A 04 <- 出力
末尾の
0x82
はチェックサム:0x01
から0xCC
までのXOR。
【受信側:子機】
A5 5A 80 14 00 A0 01 82 03 68 41 FF FF FF FF FF 00 06 11 22 33 AA BB CC 2D 04 <- 出力
末尾の
0x2D
はチェックサム:0x00
から0xCC
までのXOR。
0xDB
コマンドインタラクティブモードの設定を行う代わりに、UART から 0xDB
コマンドを入力することでモジュールの操作や設定を行うことができます。
書式モード(バイナリ)におけるインタラクティブモードを使用しない設定機能