タイトルに「アナログ」と謳っているのに今回もデジタルです。アナデバ社(ADI社)のWeb記事『StudentZone』の和文版に進捗を「同期する」ためです。お手軽ツール Analog Discovery 2の「使ってない機能」を端から使ってみるの巻。今回はプロトコルアナライザ機能でUART通信を観察してみます。
※「お手軽ツールで今更学ぶアナログ」投稿順 indexはこちら
AD2のプロトコルアナライザ
以下にDigilent社Analog Discovery 2の制御ソフトウエアである WaveForms のWelcome画面の「下の方」を掲げます。
黄色いマーカのProtocolが、今回練習してみるProtocol Analyzer機能です。しかしね、この機能、Digilent社の以下のマニュアルページには見当たりません。
もともとロジアナ機能の中にプロトコル解読機能があり、その機能を単独で取り出したような機能であるため「おまけ」的な扱い?知らんけど。
UARTのプロトコル解析
プロトコル・アナライザ機能には、UART、SPI、I2C、CAN、CEC、AVRという6個のタブがあります。
6個のうち、最後のAVRというタブはMicroChip社(製品自体はMicroChipに買収されたATEML社)のAVRマイコンのFlashやらE2PROMやらをリード、ライトできる、というFlashライタ的な機能です。便利っちゃ便利か。残りの5つが通信プロトコルの解析となります。
今回使ってみたのはUARTの解析です。使ってみたところはこんな感じ。
Settingsのところで、使用するDIO線とか通信速度などを指定し、該当のDIO線を現物に接続すれば、指定どおりの解釈で「通信内容を傍受」してくれます。上記ではことさらに縦にだらだら出力させましたが、実際には横方向出力が出来ます。
プロトコル解析のターゲット機
UART通信のターゲットとして、Arduino UNO R4と、FTDI社のFT232RLを接続して通信させました。9600bps、8ビット、ノンパリティ、ストップ1です。
配線引き出すためのボードの設定は結構ごちゃごちゃ。
ターゲット機のArduino UNO R4に書き込んだソースが以下に。
void setup() { Serial1.begin(9600); } void loop() { while(Serial1.available()) { char c = Serial1.read(); if ((c > 0x60) && (c < 0x7A)) { c++; } else if (c == 0x7A) { c = 0x61; } Serial1.write(c); } }
UNO R4は、「Serial」というオブジェクトで、ボード上のUSBソケット経由のUART通信が使えます。今回は通信している端子を引き出してAD2であたりたかったので、「Serial1」オブジェクトを使ってます。これにより
-
- D0、Rx
- D1、Tx
ということで端子を介した通信が可能です。その先の通信相手としてFTDI社のFT232RLを搭載したUSBシリアルを接続してあります。
上記では、Rxで受信した内容をオウム返しにTxに返信するのが基本です。ただし、アルファベットの小文字のみ、aならbという具合に次の文字にすり替えて返信するようにしてあります。
AD2のオシロスコープで通信を観察したところが以下に。青色がArduino側のRxで、0x61(小文字のa)が送られてきてます。黄色がArduino側のTxで、0x62(小文字のb)が送り返されてます。
オシロスコープ画面で通信追いかけるのはツライよな。プロトコル解析機能があるとありがたい?