こんにちは、組み込みエンジニア歴20年以上のtomozoです。
今回は、
私の組み込み開発経験も交えながら
マイコンの基本機能の一つである
【通信の基礎】
について徹底解説します。
この記事は
マイコンの通信制御について詳しく知りたい新人組み込みエンジニアの方
向けの記事です。
仕事で必要になったマイコンの通信制御を使うために
情報を調べているところではないでしょうか?
新人の頃はマイコンのマニュアルを読んでみても、
ページ数が多くて分からないことばかりなので
もう少し簡単に知りたいところだけ分かればなあって思いますよね。
tomozo
私も新人の頃に先輩からマニュアルみたら分かるよって言われたこと
ありましたが、それはある程度色々知っている人の意見であって
分からない人からしたらさっぱり分からないってこともあります。
理解しないで分からないまま進んでいくと困るのは自分です。
この記事を読めば
- マイコンの通信制御について
- 組み込み機器での使用例
が分かるようになります。
このページを足掛かりにして
しっかり基本を理解できれば組み込みエンジニアとして一つ成長しますよ。
テストではないのですべて暗記する必要はありません!
なにより量が過ぎて暗記するのはムダです。
内容を理解して、必要な時に見直したら分かる・思い出せる
ことが重要です。
それでは早速解説をはじめます。
目次
マイコンの通信とは
組み込み機器で使用するマイコンの通信とは、
デバイス間での0/1のデータ通信を指します。
通信相手(外部デバイス)としては
マイコン、IC(外部デバイス)、パソコン
となります。
通信の主な用途としては
- お互いの状態を伝える
- 制御に必要なデータの送受信を行う
- 動作要求と応答を出す
といった情報のやり取りを行います。
このように通知する情報は多いので、
0/1だけだったらポートでいいのですが、
マイコンに用意された通信機能を使ってやり取りをします。
分かりやすい身近な例としてパソコンとプリンターの場合、
- プリンターに電源が入っているか確認するための通信
- パソコンからプリンターにプリントしたいデータを送信
- プリント開始と完了を通信
といったことが行われています。
通信と聞くとなんだか難しそうに感じますが
組み込み開発でよく利用されるシリアル通信やI2Cであれば
一度理解してしまえばそれほど難しくありません。
基本的な通信の仕組みより、難しかったり時間がかかるのは以下の点です。
- 漏れの無い通信の仕様(プロトコル)を考える
- 動作確認
- エラー処理
- USBやイーサネットなどの理解しないといけないことが多い複雑な通信
今回は初心者の方向けなので基礎の部分について解説します。
組み込み機器の通信の種類
組み込み機器の通信の種類には以下のようなものがあります。
通信 | 特徴 |
I2C | 同期式シリアル通信(親から子への送信) マスター(親)とスレーブ(子)の関係 多対多でも使用可能 信号線は2本(クロックとデータ) |
SPI | 同期式シリアル通信(SCLK(クロック)に同期してデータを送受信) マスター(親)とスレーブ(子)の関係 1対多でも使用可能 信号線は4本(データ2本、クロック、チップセレクト) |
UART | 非同期でシリアル通信 通信速度(ボーレート)はあらかじめ決めておく 1対1で使用 信号線は2本(送信用と受信用のデータ) |
USB | 4つの転送方式(コントロール転送・バルク転送・インタラプト転送・アイソクロナス転送) 127台まで接続可能 信号線は4本(信号線2本と電源とグランド) |
CAN | マスターが存在しない(一つ一つをノードといい、どれもがマスターになれる) 信号線は2本(差動式) |
イーサネット | インターネットにつなげる 通信線は仕様により異なる |
この中で通信の基本でありよく使われるので
まず理解しておきたいのは以下の3つです。
- UART
- I2C
- SPI
マイコンのマニュアルを見ていただくと分かりますが、
いずれもそれ一つで一章になっているほどの
ボリュームがありこの記事だけではすべてを紹介しきれません。
各通信方式ではじめに理解して欲しいポイントに絞って紹介します。
UART
UARTとは
- ユーアートと読む
- Universal Asynchronous Receiver Transmitterの略
- シリアル通信を行うための規格のこと
厳密見言うと通信の種類とは少し意味合いが違います。
tomozo
シリアル通信とパラレル通信の比較
シリアル通信 | パラレル通信 | |
送受信方法 | 直列 | 並列 |
信号線 | 一本 | 信号数分必要 |
回路 | 簡単 | 複雑 |
シリアル通信
パラレル通信
組み込み機器ではシリアル通信を使うことがほとんどです。
シリアル通信には同期式と非同期式(調歩同期式)があります。
同期式(クロック有り)
同期式はクロックに合わせてデータを送ります。
非同期式/調歩同期式(クロック無し)
UARTはこの方式です。
非同期式は通信の始まりを示すスタートビット、
終わりを示すストップビット、
その間にデータを挟んで通信しクロックはありません。
クロックがないので通信速度(ボーレートと言います)のルールは
あらかじめ仕様として決めておきます。
I2C
I2Cは周辺デバイスとのシリアル通信方式で
以下のような特徴があります。
- マスターとスレーブがありマスターが主導権を持つ
- マスター1つに対して複数のスレーブと通信可能
- スレーブは独自の識別用アドレスがある
- SCL(クロック)とSDA(データ)の2本で通信
- ACK/NACKがありハンドシェイクを取りながら通信
I2Cのマスターとスレーブ2個の接続図
通信例
以下の図のように、
始まりのスタートコンディション
その間にデータ
データ間に受け取り確認のACK/NACK
終わりのストップコンディション
の構成となります。
このデータの中にスレーブICのアドレス情報も送られているので、
スレーブ側は自分の情報かどうかを判断しています。
SPI
SPI通信はSerial Peripheral Interfaceの略で
これもまたシリアル通信の一種で
以下のような特徴があります。
- マスターとスレーブがある
- マスター1つに対して複数のスレーブと通信可能
- クロック同期式
- 信号線はチップセレクト、クロック、入出力の4本が一般的(3線式もある)
- 全二重通信なので同時に送受信可能
- 比較的高速
SPIのマスターとスレーブ2個の接続図
複数のスレーブを接続する時はその分のチップセレクト信号が必要です。
組み込み機器での通信の実用例
組み込み機器の実例としては以下の3つを紹介します。
- シリアル通信でCPU同士の通信
- I2CでCPUとEEPROMとの通信
- SPIでCPUとフラッシュメモリとの通信
この他にもデバイスはたくさんありますが、
この3つを理解しておけばその他の方法も分かるようになります。
シリアル通信でCPU同士の通信
CPU同士の通信をするのにシリアル通信がよく利用します。
シリアル通信は非常に使い勝手がよく、
プログラムもそれほど複雑ではありません。
初期設定や送受信割り込みの設定などはありますが、
基本的には送信したいデータを送信レジスタに順番にセット
していけば送信でき、受信データも受信レジスタを
リードしていけば受信できます。
I2CでCPUとEEPROMとの通信
EEPROMという不揮発性メモリに
機械の情報を保存しておいてCPUからI2Cの通信
で読み書きを行います。
CPUは自分のプログラムなどを保存しておくROMと
処理で使用する揮発性のRAMの
内蔵メモリはありますが、不揮発性で自由に書き換えられる
EEPROMのようなメモリは持っていません。
一部のマイコンにはデータフラッシュというROM領域
を持ったものもありますが、EEPROMのように頻繁に高速で読み書き
するのに適したものではなく使い勝手がよくありません。
組み込み機器ではEEPROMは必須の外部デバイスです。
SPIでCPUとフラッシュメモリとの通信
組み込みでのSPI通信はいろいろな外部デバイスと
通信するのによく利用されます。
例えばSDカード/MMCなどのフラッシュメモリとの通信
に利用します。
SPI通信は速度が速いので、SDカードのように
大容量の通信データを使用するのに適しています。
UARTやI2Cに比べるとデバイス側の仕様にも影響され、
この二つに比べると少し制御が複雑になったり、
プログラムが長くなる傾向があります。
通信を利用したプログラミングの実例を
こちらの記事で詳しく紹介しています。
よければ読んでみてください。
【組み込み基礎】RL78でUART通信プログラミングを徹底解説組み込み機器でのデバッグ方法
通信を使った組み込み機器のデバッグ(動作確認)をしたことがなければ
どうやって何をすればいいのか分からないですよね。
一般的に確認する項目としては以下があります。
- 通信が仕様通り送受信されているか
- 通信を受けたときの動作が正しいか
通信が仕様通り送受信されているか
- ICEなどのデバッグツールを使ってメモリを確認
- 通信モニターで確認
といった方法で確認を行います。
デバッガはマイコンの内部のメモリをすべて確認することができるので
送受信データが期待通りのものか簡単に確認することができます。
通信モニターは視覚的に確認するのに便利です。
組み込みメーカーであれば
一つ位は会社にあるのではないでしょうか?
通信を受けたときの動作が正しいか
動作確認したい通信を受けたとき
期待する処理が行われるか確認します。
しかしその通信が送られる状況を作らないと
動作確認できないので普通は少し手間がかかります。
例えば
AさんがマイコンA(マスター側)のプログラマー
BさんがマイコンB(スレーブ側)のプログラマー
と別々のマイコンでプログラムを作っているとします。
Bさんが通信①を受信した時の制御を確認したいとすると
Aさんに通信①を送ってもらわないとできないですよね。
そんなときデバッグのたびにAさんにお願いするわけにはいきませんし、
Aさんがまだ作っていないところであればできるまで
待つ必要が出てきます。
このようなやり方は非常に非効率なので、Bさんはデバッガを使って
強制的に通信①を受けた状態にして動作確認を行うのが一般的です。
他にも通信ポートに空きがあれば、自己ループし
自分で送信プログラムを作って確認する方法もとれます。
ICEで自分は時間を止めて確認したいけど、
相手を制御できない場合があります。
そんな時は、メモリRAMに履歴情報(ログ)などを書き出して
後でまとめて確認したり、
パソコンに出力しながら確認するといった方法もあります。
以上のように通信関連のデバッグは少し手間がかかったり
シミュレーションして確認することが必要になります。
このように通信は確認しにくい分、バグも生まれやすいので
できるだけ効率よくしっかりとデバッグするようにしましょう。
使い分け方法
初心者あん
通信相手が通信手段を1つしか対応していない場合は
それに合わせるしかないので迷わなくていいですが、
これでないとダメっていうのがない場合は
選択肢が多いと何を選べばいいか迷いますね。
そんな時の選択のポイントは以下です。
- 通信速度や安定性
- ハードウェアのコスト
- ハードウェア(マイコン)のポートの空き状況
例えば速度が必要なのであればシリアル通信ではなくCANがおすすめです。
速度が必要ないのであればシリアル通信を選んだほうがハードウェア
の選択肢が広がるので設計がやりやすくなり、コストを抑えられる
可能性が高くなります。
組み込み機器は可能な限りコストを抑えないといけないのですが、
潤沢なハードウェアや高性能なマイコンを選ぶとコストは当然高くなります。
必要になる可能性のあるものを削ると後々設計変更になったりするので困りますが、
過剰なハードウェアはもったいないだけです。
コストと性能が最適なハードウェアで達成できる通信手段を選ぶようにしましょう。
通信で注意すること
組み込み機器で通信を制御する上で注意してほしいことを説明します。
通信は必ず成功するとは限らない
- ノイズ(ハードウェアの問題)
- ソフトのバグ
- データの送り間違い
- タイミングの問題
以上のような要因によって通信が正常に
成立しないことが起こりえます。
しっかりデバッグしてバグを作らないようにすることは
組み込みエンジニアとして当然ですが
予期せぬ通信異常があった時にリカバリーできる
処理を考えることが大事になってきます。
対策方法としてはリトライするというのが一般的です。
例えばマスターから通信してスレーブから応答がなければ
もう一度同じ通信を送ります。
何度繰り返しても応答がない時に初めて通信エラーと判断します。
またシリアル通信であれば
下記の通信特有のエラーの処理も必要となってきます。
- フレーミングエラー
- パリティエラー
- オーバーランエラー
マイコンには上記エラーを検出するレジスタがあらかじめ用意されています。
エラーが起きたとき以下のような対処方法をしっかりと考えるようにしましょう。
- エラーをクリアして再開するのか?
- エラーで処理を停止するのか?
未然の通信異常対策としては、
- 電線を長くしない
- ノイズに強いハードウェアにする(5Vや3.3Vを電圧変換して差動式にする)
- 通信速度を過剰に早くしない
といったことが挙げられます。
実際の具体的なUART通信制御を次の記事で紹介していますので
読んでみてもらえると嬉しいです。
【組み込み基礎】RL78でUART通信プログラミングを徹底解説
まとめ
マイコンの通信とは
外部デバイスと0/1のデータ通信
通信相手
マイコン、IC(外部デバイス)、パソコン
用途
- お互いの状態を伝える
- データの送受信を行う
- 動作要求と応答を出す
最初に理解したい通信は以下の3つ
- UART
- I2C
- SPI
組み込み機器の通信デバッグ方法
- ICEなどのデバッグツールを使ってメモリを確認
- 通信モニターで確認
使い分け方法
- 通信速度や安定性
- ハードウェアのコスト
- ハードウェアのポートの空き状況
通信で注意すること
- 通信は必ず成功するとは限らない
- 失敗した時の対処方法をしっかり考えて設計する
読んだだけで身に付けるのは難しいので
ぜひ記憶の新しいうちに手を動かしてみてくださいね。
参考になったとか、もっとここが知りたいなど一言でも
コメント、意見などいただけると励みになります。
こちらの記事でマイコンの基本機能についてまとめています。
もしよければご覧ください。
マイコン基本機能5選【初心者組み込みエンジニア必見】
このサイトでは組み込み以外に
学校や友人、一般の親は教えてくれない
資産運用の重要性についても紹介しています。
できるだけ早く自分の将来のために勉強しておかないと
もっと早く知っておけば良かったって後悔しますよ。
興味があればこの記事を読んでみてください。
インデックス投資はおすすめ!厳選ファンド(商品)3つと利回り検証