「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
通信を大きく分類するとシリアル通信とパラレル通信に分類できます。
簡単に説明するとシリアル通信は1本の信号線で1ビットずつデータの受け渡しを行ない、パラレル通信では複数の信号線で同時に複数ビットのデータの受け渡しを行なう方式です。
ソフテックの組み込みソフト開発では、監視システムなどが多く、単体のプログラムが動作するということは少なく、さまざまな機器と通信を行なうことで情報の受け渡しを行っています。
火災や故障などの状態収集、情報の上位アプリケーションへの通知などさまざまな場面で通信が必要となりますが、その多くはシリアル通信で行なわれています。
単純にシリアル通信といってもさまざまな方式が存在しますが、具体的な例としてRS-232Cの調歩同期方式で通信を実現するために必要な基礎的な知識を説明します。
ここでは調歩同期式の通信を理解するために必要な用語について説明します。
1キャラクタの前と後には必ず最初と最後をあらわすスタートビット、ストップビットと呼ばれる情報が付加されます。受信側ではスタートビットを手がかりに1キャラクタの最初を認識して正常に受信することが出来るようになります。また、最後にはストップビットがつくことでデータの終わりを知ることが出来ます。スタートビットは1ビットですが、ストップビットは1ビット、1.5ビット、2ビットの場合があります。
パリティビットはデータが正常に送られたかを検査するために付加されるビットです。
パリティビットは偶数パリティ、奇数パリティが選択できます。(パリティビットは付加しないことも可能です)
パリティビットは送信するデータの1の数が偶数または奇数になるようにパリティビットで調整します。
例えばASCIIコードの‘A’は16進数で41Hとなります。これを送信する場合、2進数では
となります。
偶数パリティの場合、全体として1の数が偶数個になる必要がありますのでパリティビット(P)は0となります。
→パリティビットが0で全体として1の数は偶数個になる。
反対に奇数パリティの場合は、全体として1の数が奇数個になる必要がありますのでパリティビットは1となります。
→パリティビットが1で全体として1の数は偶数個になる。
通信速度のことをボーレート(Baud Rate)と言います。単位はbps(Bits Per Second)で1秒間に何ビットのデータを送信することが可能かで表します。上記のスタートビット、ストップビット、パリティビット、データは全てこのボーレートを基準にビットの長さが決まります。
例えば9600bpsでは1÷9600で1ビット当たり約104µ秒になります。
上記は実際のRS-232Cでの通信波形をロジックアナライザで見たときの波形です。(RS-232Cのデータ信号は負論理ですのでマイナスはデータ1、プラスはデータ0を示します)
9600bps、ストップビット1ビット、偶数パリティの設定でH’41データを送信したときの波形です。
組み込みソフト開発ではソフトウェアの開発とともにハードウェアの開発することが良くあるため、ハードウェア側に不具合が存在する可能性もあります。実際の波形を見てどのように通信が行なわれているかを理解することができれば、いろいろな側面からの問題解決が出来るようになります。
実際にルネサステクノロジ製 H8S/2144を用いてマイコンでシリアル通信を行なうための方法を説明します。
H8S/2144シリーズはH8S/2000CPUに各種周辺機能を集積したマイコンです。
周辺機能にはシリアルコミュニケーションインターフェース(SCI:Serial Communication Interface)があり、手軽にシリアル通信を行なうことが出来ます。
(1).SCIのブロック図
【記号説明】
(2).初期化手順
詳細手順はハードウェアマニュアルを参照してください。ここでは注意すべきことについて記述します。
(3).送信のイメージ
プログラム上からTDRレジスタへデータを書き込んだ後にTxD端子から出力されるイメージです。
(4).受信のイメージ
RxD端子から入力されたデータがCPUで読み込まれるまでのイメージです。
(5).割り込みについて
通常、シリアル通信のプログラムでは割り込みを利用して送受信データの受け渡しを行ないます。
割り込みは以下の4つがあります。
TDRが空いた場合に割り込みが入ります。この割り込みを利用してTDRに連続してデータを書き込むことでデータが途切れることなく送信が行なわれます。
TSRのデータが全て送信し、ストップビットを送り出したときに割り込みが入ります。送信終了を検知することが出来ます。
RDRにデータが入った段階で割り込みが入ります。連続したデータが送られてきている場合、次のデータがRSRからRDRに転送される前にデータを取得する必要があります。RDRにデータが存在するまま、次のデータを受信してしまうとオーバーランエラーとなります。
受信中にエラーを検知すると発生します。エラーにはオーバーランエラー、フレーミングエラー、パリティエラーがあります。
次回は、実際にソフテックがシリアル通信プログラムを作る上で注意している事などのレポートを予定しております。
(H.M.)
関連ページへのリンク
関連するソフテックだより