「周辺機能」を学ぼう:3 of 6
マイコンを活用するための周辺機能の仕組みや使い方を解説する本シリーズ、今回はシリアル通信を取り上げます。マイコンの大切な役割の一つに、マイコン外部にある周辺機器と情報を交換することがあります。その時に活躍するのがシリアル通信です。
マイコンと周辺機器を接続:パラレルとシリアル
マイコンは組み込み機器の「頭脳」で、手足となるさまざまな周辺機器(入出力装置など)と接続します。それでは、マイコンとそれらの周辺とはどのように接続したらよいのでしょうか。例えば、センサとマイコンを接続することを考えてみましょう。本シリーズの第1回目でとりあげた「GPIO」を用いると、仮にセンサから8ビットの信号をマイコンに送るとすると、8本の端子を使用することになります。このような伝送方式をパラレル(パラレル通信)と呼びます(図1―左)。センサ一つの接続に8本の端子を使うのはもったいないですね……より少ない端子で接続する方法はないのでしょうか。
そこで用いられるのがシリアル伝送方式(シリアル通信)です。「シリアル」とは直列や直線を意味します。パラレルであれば8本の端子が必要なものを、シリアルでは一直線に並べて送るので端子は一つで済みます(図1―右)。マイコンの内部では、パラレルに信号をやりとりするので、シリアルで入ってきた信号はパラレルに変換する必要があります(シリアル―パラレル変換)。逆に、マイコンからシリアル接続している周辺機器に送る信号は、パラレルからシリアルに信号を変換する(パラレル―シリアル変換)必要があります。ルネサスマイコン「RX63N」は、「SCI(シリアル・コミュニケーション・インタフェース)」と呼ぶユニットがこれらの変換を行います。例えばchar型の変数の1ビットを1本の端子に対応させて情報をやり取りするのがパラレル、1本の端子に時分割して1ビット毎に情報をやり取りするのがシリアルと考えると良いでしょう。
シリアル接続は使用する端子が少なくて済むので、最近では、マイコンと周辺機器接続の多くの場合で使用されています。GPIOはモータ駆動用の信号やLEDの点滅などソフトウェアで操作した結果の信号を出力するときの他、スイッチやON/OFFで出力されるセンサの入力などに使用します。
UARTで簡単にシリアル通信を利用
シリアル通信には電気的な特性の違いやプロトコルと呼ばれる通信するための取り決めの違いなどによってさまざまな方式がありますが、最も簡単に使えるのが「調歩同期式」でしょう。マイコンと周辺機器を信号線で繋ぐだけで使用可能で、マイコンと動作モニタ用の端末を通信する時や、無線LAN用のモジュールとの通信などに使われています。
調歩同期式のシリアル通信では、一文字分の文字情報(※1)を、開始を意味する「スタートビット」と終わりを意味する「ストップビット」という信号で挟んで送ります(図2)。これにより、「I2C(Inter-Integrated Circuit、アイ・スクエアード・シー)」や「SPI(Serial Peripheral Interface、エス・ピー・アイ)」などの、他方式のシリアル通信では必要になる、送受信のタイミングを同期するためのクロック信号線が不要です。また、データが正常に送られたかを検査するための「パリティビット(※2)」を付加することができます。
この通信方式に使用される通信用デバイスがUART(Universal Asynchronous Receiver/Transmitter)と呼ばれ、ルネサスマイコン「RX63N」ではこの機能もサポートするSCIが内蔵されています。
(※1)調歩同期式シリアル通信では、「最下位ビット(LSB: Least Significant Bit)=二進法で最も小さな値を意味するビット」から送られる方式が一般的。
(※2)パリティビット:送信側で、一定量のデータごと(SCIでは7、または8ビット)に含まれる「1」(または「0」)の個数が奇数個なら「1」、偶数個なら「0」とパリティビットを定め(偶数パリティ、データとパリティビットに含まれる「1」の数が偶数個となるようにする方法)、受信側で照合することでデータ通信の誤りを検出する。逆に、「1」(または「0」)の個数が奇数なら「0」、偶数個なら「1」とするのを奇数パリティと呼ぶ。
調歩同期式通信では、データを流す信号線を「マイコン→周辺機器」と「周辺機器→マイコン」というように、方向毎に専用の信号線を確保するときは、全二重通信と呼びます。一方、1本の信号線で通信の方向を切り替えて使うことを、半二重通信と呼びます。全二重ならば、信号線は2本必要ですが同時に送受信が可能です。半二重だと信号線は1本でよいのですが、送受信を切り替えて行う必要があります(図3)。
マイコンとパソコンの通信に挑戦!
さあ、恒例となったGR-SAKURAを用いてサンプルプログラムを試してみましょう。今回は、パソコン上で動作するターミナルソフトとGR-SAKURAの間で通信を行います。ターミナルソフトから「?」を送ると、「GR-SAKURA」という文字列が返ってくるプログラムです(図4)。このプログラムの動作を確認するためには、パソコンにターミナルソフトが必要です。Windows機の場合はフリーソフトの「TeraTerm」、Macの場合はOSに標準で装備されている「ターミナル」がおすすめです。
このサンプルプログラムは、GR-SAKURAの桜ライブラリ「シリアル通信(Serialクラス)」を使用しています。このライブラリは全二重の調歩同期式通信に対応しています。
プログラムの8行目で、USB経由で通信を行うことを設定しています。13行目のSerial.read()は、シリアル通信でパソコンから送られたデータを読み出し、「?」(半角のクエスチョンマーク)が読み出されれば「GR-SAKURA」という文字列を返しています。この一連の流れをGR-SAKURAに搭載している「RX63N」マイコンの処理で考えると、パソコンからのシリアル信号をSCIがパラレル信号に変換し、CPUが「?」を判別し文字列「GR-SAKURA」を出力すると判断、今度はパラレル信号をSCIでシリアル信号に変換してパソコンに送信しています。
非常に簡単なプログラムですが、これでGR-SAKURAとパソコンの間で文字情報を交換できるようになりました。今回は定型の文字列でしたが、GR-SAKURAが処理した結果を送ることも可能です。ぜひ挑戦してみて下さい。
SAKURAスケッチリファレンス:桜ライブラリ シリアル通信
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /*GR-SAKURA Sketch Template Version: V1.08*/ #include <rxduino.h> #define SPEED 9600 //通信速度を9600bpsとする void setup() { Serial.begin( SPEED, SCI_USB0); //Serialという通信チャネルの通信速度とUSB利用を設定 } void loop() { if( Serial.read() == '?') //入力が「?」であるか検査 Serial.println( "GR-SAKURA"); //そうならば「GR-SAKURA」と改行復帰を出力 } |
※//~はコメントのため、プログラムの実行に影響はありません。
※本プログラムは、原理の説明を目的としたもので、実用時に求められる対策は行っていません。
こちらご確認ください:USB仮想COMポート用デバイスドライバ
初めてTeraTermを使用する読者は、使い方で少々戸惑うかもしれませんね。TeraTermを起動した際の「新しい接続」でシリアルが選べなくて……困るかも!下記は実際に筆者が行った例です、参考にして下さい。
- (1) まず、上記の「USB仮想COMポート用デバイスドライバ」のページ下部から、ドライバ(文末のAttachmentのリンク)をダウンロードします
- (2) ZIPファイルを展開すると「sakura-vcom-drv」というフォルダができます
- (3) GR-SAKURAをパソコンに接続し、リセットを押してデバイスとして認識された後、サンプルプログラムを書き込む(コンパイルしてできあがったバイナリファイルをGR-SAKURAに転送する)
- (4) パソコンのデバイスマネジャを開くと「ほかのデバイス」に「Gadget Renesas SAKURA」が表示されています、これはシリアルで接続できていないからです
- (5) 上記の画面中の「Gadget Renesas SAKURA」を右クリックして、ドライバソフトウェアの更新を指定
- (6) 「sakura-vcom-drv」ファイルの置き場所を検索(サブフォルダ検索にチェック)し、インストールを行う
- (7) TeraTermを起動すると、「新しい接続」でシリアルに「がじぇっとルネサスSAKURA」が選択できるようになっています
いかがでしょう、うまくできましたか?GR-SAKURAについては下記のサポートコミュニティにたくさんの情報が掲載されています。困ったら、覗いてみましょう。次回は、割り込みについて解説します。お楽しみに!