/

シリアル通信アプリの書式モード(バイナリ形式)

送受信双方の出力にヘッダを付加するモード(バイナリ形式)
書式モードは、送受信双方の出力にヘッダを付加します。バイナリ形式では、データをそのまま表現します。
書式モードによるネットワークの構成例

概要

送信側の端末へ特定の書式に従ったデータを入力すると、受信側の端末も特定の書式に従ったデータを出力します。

16進数で表すデータは、バイナリデータのまま表現します。

送信側の入力受信側の出力
簡易形式/拡張形式のデータ簡易形式/拡張形式のデータ
  • TWELITE UART では、SET ピンを GND へ接続して起動すると書式モード(アスキー)が有効となります。
  • TWELITE / TWELITE DIP では、EX1 ピンを GND へ接続して起動すると書式モード(バイナリ)が有効となります。

扱うことのできる書式の形式は2種類あります。

  • 簡易形式:論理デバイスIDだけを使用。超簡単!標準アプリのUART伝送機能と互換性あり
  • 拡張形式:論理デバイスIDに加えて、シリアルIDや再送回数などの送信オプションを使用できる

例えば、5バイトのバイナリデータ 0x48 0x45 0x4C 0x4C 0x4F は、簡易形式を使って次のように送信できます。

【送信側】

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の繰り返しペイロードのXOREOT
  • すべてバイナリ
  • 先頭は A5 5A の2バイト
  • ペイロード長はバイト数を2バイトで表現、0x8000とORをとる
  • チェックサムはペイロードのXOR
  • 末端は EOT を表す 0x04(入力時は省略可)
  • ビッグエンディアン

例えば、バイナリデータ 00 11 22 33 AA BB CC は次のように表現します。

A5 5A 80 07 00 11 22 33 AA BB CC DD 04

デバッグが面倒ですが、マイコン間の通信では高い効率を誇ります。

親機と子機の区別

書式モードは、親機と子機を区別します。

親子間では、アプリケーションIDと周波数チャネルを合わせる必要があります。

送信元の判別

書式モードでは、受信したデータから送信元を判別できます。

簡易形式の書式では論理デバイスIDを、拡張形式の書式では論理デバイスIDに加えて拡張アドレスを利用します。

簡易形式の書式

書式モードの簡易形式を利用する場合は、次の書式に従います。

送信側の入力

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+2
0uint8送信先の論理デバイスID親機0x00,子機0x01-0x64,全子機0x78
1uint8コマンド番号0x80未満の任意の値
2[uint8]任意のデータ長さ\(N\)のバイト列(\(N\leqq80\)を推奨)
uint8チェックサムXOR
uint8フッタEOT (0x04)

受信側の出力

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+2
0uint8送信元の論理デバイスID親機0x00,子機0x01-0x64,未設定子機0x78
1uint8コマンド番号送信側で指定した0x80未満の値
2[uint8]任意のデータ長さ\(N\)のバイト列
uint8チェックサムXOR
uint8フッタEOT (0x04)

送信側の出力(応答メッセージ)

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長4
0uint8送信元の論理デバイスID0xDBのみ:自身を示す
1uint8コマンド番号0xA1のみ
2uint8応答ID128-255(0x80-0xFF)の範囲で続き番号を示す
3uint8処理結果成功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。

拡張形式の書式

書式モードの拡張形式を利用する場合は、次の書式に従います。

送信側の入力

送信先の指定に論理デバイスIDを使用する場合

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+\(M\)+3
0uint8送信先の論理デバイスID親機0x00,子機0x01-0x64,全子機0x78
1uint8コマンド番号0xA0のみ
2uint8応答ID任意の値
3[uint8]オプション長さ\(N\)のオプション列
3+\(N\)[uint8]任意のデータ長さ\(M\)のバイト列(\(M\leqq80\)を推奨)
uint8チェックサムXOR
uint8フッタEOT (0x04)

送信先の指定に拡張アドレスを使用する場合

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+\(M\)+7
0uint8拡張アドレスの指定0x80のみ
1uint8コマンド番号0xA0のみ
2uint8応答ID任意の値
3uint32送信先の拡張アドレスシリアルIDの先頭へ0x8を加えた値
7[uint8]オプション長さ\(N\)のオプション列
7+\(N\)[uint8]任意のデータ長さ\(M\)のバイト列(\(M\leqq80\)を推奨)
uint8チェックサムXOR
uint8フッタEOT (0x04)

オプション列の詳細

拡張形式では、オプション列を指定することで細かな設定を行うことができます。

オプション列は、オプションのIDと引数の繰り返しで表現します。終端は 0xFF とします。

ID引数初期値内容
0x01なし無効MAC ACKの有効化
0x02uint80x00アプリケーション再送の有効化
0x03uint160x0000初回送信の遅延の最小値
0x04uint160x0000初回送信の遅延の最大値
0x05uint1610アプリケーション再送の間隔
0x06なし無効平行要求の許可
0x07なし無効応答メッセージの無効化
0x08なし無効送信後スリープ
0x01:MAC ACKの有効化

MAC層のACK(確認応答)を有効化します。

頻繁にデータを送信する場合には適しませんが、信頼性を向上できる場合があります。

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
0uint8送信元の論理デバイスID親機0x00,子機0x01-0x64,未設定子機0x78
1uint8コマンド番号0xA0のみ
2uint8応答ID送信側で指定した値
3uint32送信元の拡張アドレスシリアルIDの先頭へ0x8を加えた値
7uint32送信先の拡張アドレス論理デバイスID使用時は0xFFFFFFFF
11uint8LQI受信時の電波通信品質
12uint16続くバイト列の長さバイト数\(M\)を表す
14[uint8]任意のデータ長さ\(M\)のバイト列
uint8チェックサムXOR
uint8フッタEOT (0x04)

送信側の出力(応答メッセージ)

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長4
0uint8送信元の論理デバイスID0xDBのみ:自身を示す
1uint8コマンド番号0xA1のみ
2uint8応答ID入力時に指定した値
3uint8処理結果成功1,失敗0
uint8チェックサムXOR
uint8フッタEOT (0x04)

使用例

親機から子機に対してバイト列 11 22 33 AA BB CC を送信する例を示します。

論理デバイスIDを指定する例

親機から論理デバイスID0x01の子機へ送信する例を示します。

  • 応答IDは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)の子機へ送信する例を示します。

  • 応答IDは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。

MAC ACKを使用する例

親機から論理デバイスID0x01の子機へ 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 の遅延を設けて送信する例を示します。

【送信側:親機】

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 コマンドを入力することでモジュールの操作や設定を行うことができます。


シリアル通信アプリ 書式モード(バイナリ)の 0xDB コマンド

書式モード(バイナリ)におけるインタラクティブモードを使用しない設定機能