App_Uart バイナリ形式で使ってみる
App_Uart を書式モードのバイナリ形式で使ってみます。
バイナリ形式では、App_Uart で直接送信したいデータをバイナリ列で入出力できるため、マイコン間通信では取り扱いがしやすくなります。反面、ヘッダやチェックサムなどの計算が必要になります。
簡易的に送信する場合は「チャットモード、プロンプト無し」も利用できます。
接続の確認
最初に基本設定とアスキー形式による動作確認を行います。接続や設定等の問題がある場合、バイナリ形式では出力等を含め確認が難しいためです。
設定
PC(TeraTerm) や macOS, Linux のターミナルソフト(CoolTerm など) を動作可能状態にして、インタラクティブモードによる設定が出来る事を確認しておいてください。
インタラクティブモードに入るには、+ + + と + を3回、一呼吸置きながら (0.2秒~1秒) 入力します。(参考:インタラクティブモードの詳細)
インタラクティブモードで以下の設定を済ませておきます。
- 親機側は Device ID を 121 (0x79) に設定します。(i を押して 121[Enter] と入力します)
- UART Mode を A に設定します。(m を押して A[Enter] と入力します)
- S キーを押してセーブ&リセットを実行します。
--- CONFIG/TWE UART APP V1-02-3/SID=0x81001f1c/LID=0x78 -- --- ... i: set Device ID (121=0x79)* ... m: set UART mode (A)* --- S: save Configuration R: reset to Defaults
以下のようなメッセージが出力されます。:DB... は起動時のメッセージで、アプリケーションIDやアドレス情報が含まれます。
!INF Write config Success
!INF RESET SYSTEM...(再起動中)
:DB6772010300010203F181001F1C0095 (再起動後の始動メッセージ)
アスキー 形式で確認する
アスキー形式での動作を確認します。マイコンで利用される方も、まず Windows PC などでご確認ください。
コマンド列の送信方法
マイコンなどプログラムからコマンド列が入力されることを想定しており、一定時間入力が無ければ(1000ms)タイムアウトが発生して入力を無効にするようになっています。
このため、コマンド列を入力する際には、ターミナルソフト等のコピー&ペースト機能(TeraTermならAlt+V)などを利用し、タイムアウトしないように入力してください。
なお、インタラクティブモードでは、タイムアウトが発生せず入力毎のエコーバック(入力した文字がターミナルに表示される)とチェックサムが間違えていた時にメッセージが表示できるようになっています。このためキーボードから直接入力しても試せます。
アスキー形式による親子間送受信
子機から親機にメッセージを送ります。書式モードの簡易形式を用いて親機 (0x00) 宛に、コマンド種別 0x00、データ 0x11, 0x22, 0x33 の3バイトを送信します。末尾の X はチェックサムを省略しています。
子機から親機 :0000112233X ↓ 親機の受信メッセージ :780011223322
受信データは 0x78 からコマンド種別 0x00 でデータ 0x11 0x22 0x33 が届き、チェックサムが 0x22 です。この出力が確認できたら、今度は子機から親機に同様のメッセージを送ってみます。
親機から親機 :7800112233X ↓ 子機の受信メッセージ :00001122339A
親子間の簡易通信を確認しました。続いてこれと同じ送受信をバイナリ形式で行ってみます。
親機のみバイナリ形式で親子間送信
バイナリ形式の無線端末とアスキー形式の無線端末は互いに通信が可能です。入出力の書式が違うだけで、無線パケットは同じです。
ここでは親機だけバイナリ形式にしてみます。バイナリ形式での送受信を行うためには、バイナリ対応のターミナルソフトウェアが必要です。バイナリではターミナルソフトごとに操作や表示が異なりますので、よく習熟してください。
参考までに Linux, macOS 対応のターミナルを列挙します。
親機の設定
親機側のインタラクティブモードに入って UART Mode を B に設定します。
- UART Mode を B に設定します。(m を押して A[Enter] と入力します)
バイナリ対応のターミナルソフト (RealTermの場合)
親機のターミナルソフトウェアを閉じて、バイナリ対応のものを立ち上げてください。
以下では RealTerm の操作例です。
- [Port] タブを選択し、Baud を 115200・Port を COM ポートの番号を指定して [Open] ボタンを押します。
- [Display] タブを選択し、[Display As] 中から Hex[space] を選択しておきます。
送受信を確認する
子機からアスキー形式での送信例と同じものを送信してみます。
子機から親機(アスキー形式) :0000112233X ↓ 親機の受信メッセージ(バイナリ形式) A5 5A 80 05 78 00 11 22 33 78 04
親機からは 0xA5 0x5A ... に続くデータが表示されます。送信したいデータに簡易書式のヘッダが付加され、さらにバイナリ書式のためのヘッダ・フッタが追加される点に注意してください。
データ形式 | バイト数 | 解説 |
---|---|---|
ヘッダ | 2 | 0xA5 0x5A |
データ長 | 2 | 0x8000 + 続くデータ長 この例では0x80 0x05 で5バイト |
データ部 | 5 | データ部で、あて先情報等のヘッダおよび送信したいデータが含まれる。 ・例は簡易形式で子機宛に 0x11 0x22 0x33 を送信します。 0x78 0x00 0x11 0x22 0x33 0x78 ⇒ 送信元アドレス(簡易) 0x00 ⇒ コマンド種別 (0x00 は特別な意味は無い) 0x11 0x22 0x33 ⇒ 送信したいデータ |
フッタ・チェックサム | 1 | データ部の前バイトのXORとなります。 ・0x78 xor 0x00 xor 0x11 xor 0x22 xor 0x33 = 0x78 |
フッタ・終端 | 1 | 0x04 出力時には 0x04 が付加されるが入力時には不要 |
親機子機、バイナリ形式で親子間送信
親機、子機双方をバイナリ形式に設定して送受信を試みます。
子機の設定
子機側でもインタラクティブモードに入って UART Mode を B に設定します。
- UART Mode を B に設定します。(m を押して A[Enter] と入力します)
バイナリ対応のターミナルソフト (RealTermの場合)
子機のターミナルソフトウェアを閉じて、バイナリ対応のものを立ち上げてください。
以下では RealTerm の操作例を示します。
- RealTerm を立ち上げます。
- [Port] タブを選択し、Baud を 115200・Port を COM ポートの番号を指定して [Open] ボタンを押します。
- [Display] タブを選択し、[Display As] 中から Hex[space] を選択しておきます。
子機から親機への送信
子機から親機にデータ送信してみます。
子機から親機(バイナリ形式) A5 5A 80 05 00 00 11 22 33 00
↓ 親機の受信メッセージ(バイナリ形式) A5 5A 80 05 78 00 11 22 33 78 04
子機側からデータ送信する方法はターミナルソフト毎に操作方法が違います。RealTerm の場合は、以下となります。
- [Send]タブを開きます。
- [Send Numbers] の2つある入力ボックスのいずれかに 0xA5 0x5A 0x80 0x05 0x78 0x00 0x11 0x22 0x33 0x78 を入力します。
- [Send Numbers] ボタンを押します。
子機から親機への送信
親機から子機へデータ送信してみます。
親機から子機 (バイナリ形式) A5 5A 80 05 78 00 11 22 33 78
↓ 子機の受信メッセージ(バイナリ形式) A5 5A 80 05 00 00 11 22 33 00 04