セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-05-14 現在

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

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

概要

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

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

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

書式モード(バイナリ)におけるインタラクティブモードを使用しない設定機能
書式モードでは、インタラクティブモードの代わりに0xDBコマンドを使うことで、UART接続されたデバイスから動的に設定を行えます。

入力の書式

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+2
0uint8送信先の論理デバイスID自身を示す0xDBのみ
1uint8コマンド番号後述の値から選択
2[uint8]パラメータ設定値を示す長さ\(N\)のバイト列(オプション)
uint8チェックサムXOR
uint8フッタEOT (0x04)

コマンド番号の一覧

機能
0xF0ACKの有効化
0xF1端末情報の取得
0xF2端末設定の適用
0xF3端末設定の取得
0xF8端末の制御
0xFD端末設定の消去
0xFE端末設定の保存
0xFF端末のリセット

0xF0:ACKの有効化

ACK 応答の要求を行います。

パラメータはありません。

応答の書式

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長3
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF0のみ
2uint8データ0x01のみ
uint8チェックサムXOR
uint8フッタEOT (0x04)

0xF1:端末情報の取得

アドレス等の情報を表示します。起動時にも出力されます。

パラメータはありません。

応答の書式

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長17
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF1のみ
2uint32アプリケーションID
6uint32バージョン番号1.4.7なら00010407
10uint8論理デバイスID
11uint32シリアルID
15uint8サイレントモードの状態有効1, 無効0
16uint8ネットワークの状態UP1, DOWN0
uint8チェックサムXOR
uint8フッタEOT (0x04)

0xF2:端末設定の適用

設定を適用します。

応答の書式

成功した場合
#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+2
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF3のみ
2[uint8]設定内容長さ\(N\)の識別子とデータの繰り返し
uint8チェックサムXOR
uint8フッタEOT (0x04)
失敗した場合
#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長3
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF3のみ
2uint8エラー0xFFのみ
uint8チェックサムXOR
uint8フッタEOT (0x04)

0xF3:端末設定の取得

設定を取得します。

応答の書式

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+2
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF3のみ
2[uint8]設定内容長さ\(N\)の識別子とデータの繰り返し
uint8チェックサムXOR
uint8フッタEOT (0x04)

0xF8:端末の制御

起動時にサイレントモードを有効としていた場合に、これを解除します。

応答の書式

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長4
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF8のみ
2uint8データ0x11のみ
3uint8状態解除済み1, 未解除0
uint8チェックサムXOR
uint8フッタEOT (0x04)

0xFD:端末設定の消去

設定を初期化し、本体をリセットします。

パラメータおよび応答はありません。

0xFE:端末設定の保存

適用した設定を保存し、本体をリセットします。

パラメータおよび応答はありません。

0xFF:端末のリセット

適用した設定を破棄し、本体をリセットします。

パラメータおよび応答はありません。

パラメータの一覧(0xF2/0xF3

0xF2:端末設定の適用 および 0xF3:端末設定の取得 のパラメータは、識別子とデータ(ビッグエンディアン)の繰り返しで表現します。

識別子データ内容
0x00uint32アプリケーションID
0x01uint32周波数チャネルマスク
0x02uint16再送回数と出力
0x03uint8論理デバイスID
0x04uint8役割
0x05uint8中継レイヤ
0x06uint8通信モード
0x07uint32ボーレート
0x08uint8パリティ
0x09uint8暗号化機能
0x0A[uint8]暗号化キー
0x0Cuint16区切り文字
0xFFuint8エラー

0x00:アプリケーションID

アプリケーションIDを指定します。

0x01:周波数チャネルマスク

周波数チャネルのビットマスクを指定します。

使用するチャネルのビットを立てます。例えば、11チャネルを使う場合は1<<11です。

0x02:再送回数と出力

電波の送信出力と、透過モードおよびヘッダ付き透過モードにおいてパケットを追加で送信する回数を指定します。

下位の1バイトのみを使用します。そのうち上位の4ビットが再送回数(0-9)、下位の4ビットが送信出力(0-3)です。例えば、8回再送/出力3 であれば 0x0083です。

0x03:論理デバイスID

論理デバイスIDを指定します。

0x04:役割

子機のみ有効です。以下の値を指定します。通常はネットワーク層を利用しない配送方式を選択してください。

ネットワーク層を利用しない配送方式

  • 0:通常の指定(親機または子機)
  • 1-3:中継子機(論理デバイスIDを1-100 または 120とします)1-3の数値は最大中継段数を指します。最大中継段数まで再送を繰り返す方式のため、中継機の配置や数によっては重複したパケットを中継します。

ネットワーク層を利用する配送方式

  • 11:親機
  • 12:中継機
  • 13:子機

0x05:中継レイヤ

中継レイヤの番号です。中継機は中継レイヤ数の上位(より小さい値)の中継機・親機への接続を試みます。役割12としているときにだけ有効です。

0x06:通信モード

  • 0:透過モード
  • 1:書式モード(バイナリ)
  • 2:書式モード(バイナリ)
  • 3:チャットモード
  • 4:ヘッダ付き透過モード

0x07:ボーレート

UART ボーレートを指定します。

0x08:パリティ

以下の設定の組み合わせにおいて、設定値の総和を指定します。

  • Bit
    • 0:8Bit
    • 8:7Bit
  • Parity
    • 0:None
    • 1:Odd
    • 2:Even
  • Stop
    • 0:STOP 1
    • 4:STOP 2

例えば、7-E-1 なら 8+2+0=10(0xA) を指定します。

0x09:暗号化機能

暗号化機能の有無を指定します。

  • 0:無効
  • 1:AES128bit の暗号化を有効

0x0A:暗号化キー

16バイトの暗号化キーを指定します。

インタラクティブモードでは設定できないバイナリ列を格納できます。この場合、インタラクティブモードの表示が崩れる場合があります。

0x0C:区切り文字

区切り文字列の指定を行います(0x00-0xFF)。

サイレントモード

設定方法

インタラクティブモードで以下の設定を行います。

  • r: Role80 を足しておく。例えば、通常の親機や子機なら80とする。
  • m: UART mode を書式モード(A/B)としておく。

動作確認

起動直後に出力される DB F1 応答の内容を確認します。

解除方法

DB F8 要求を行います(バイナリ形式:A5 5A 80 03 DB F8 10 33 04)。

注意点

  • サイレントモードの再設定はできません。
  • サイレントモードが有効のときに送信コマンドを入力した場合の動作は未定義です。