組み込みシステムでよく使うシリアル通信インタフェース,「SPI」「I2C」「UART」について,こういうものだよ,という簡単な概要を纏めておく.
- この記事を書こうと思った背景
- シリアル通信とは?
- SPI(Serial Peripheral Interface)
- I2C(Inter-Integrated Circuit)
- UART(Universal Asynchronous Receiver/Transmitter)
- まとめ
この記事を書こうと思った背景
組み込みシステムにおけるCPUは様々なインタフェースを持っていて,このインタフェースを用いて外部のデバイスと接続する.特に,シリアル通信というインタフェースを使って接続されることが多いのだが,意外にも大学の講義の中ではこういったことは学んでいないことが多く,社会人になったときに「???」となっている場合も少なくない(筆者も社会人になったときは殆どそういう状態であった).海外の優秀な学生のインターンシップを担当したときにも,選考がEmbedded System(組み込みシステム)と聞いていたのだが,シリアル通信インタフェースについては聞いたことある,という程度だった.
そういった背景から,会社の中でもシリアル通信インタフェースについて説明することが多く,ここに簡単に概要だけでも纏めておこうと思った次第である.
シリアル通信とは?
コンピュータの世界では,データは二進数(0か1)で扱われ,データの送受信のための通信方式としては大別してシリアル通信とパラレル通信というものがある.信号線上をデータを1bitずつ逐次的に伝送する方式をシリアル通信,複数の信号線を使用してデータを複数bit同時に伝送する方式をパラレル通信という.パラレル通信もなくはないが,今現在ではシリアル通信が使用されていることの方が圧倒的に多い.
どういった者同士でシリアル通信が行われるのか.例えば,CPUとCPU,CPUとセンサデバイス,あるいはCPUとパソコンなどである.
シリアル通信の種類は多岐にわたるのだが,ここでは組み込みシステムでよく使うシリアル通信の内,「SPI」「I2C」「UART」というものについてその特徴を記載する.
SPI(Serial Peripheral Interface)
"エス・ピー・アイ"と読む.モトローラ社が提唱したシリアル通信の方式である.その特徴は以下のとおりである.
※各信号の意味は,CLK=Clock,MOSI=Master Out / Slave In,MISO=Master In / Slave Out,CS=Chip Select,である(CSはNSSとかSSと書かれている場合もある).
- 1対1 or 1対多数
- クロック有.各信号線は一方向
- 通信速度:高速(後述するI2Cの数十倍)
- 1対多数の場合,CLK,MOSI,MISOは共通,CSはデバイスの数だけ専用線を用意
- 用途:比較的速度を要するデバイスとの通信(AD変換器,DA変換器,CPU間など).長距離伝送には向かず,同基板内での通信に使用する.
下の図では,SPI通信の概要を絵的に示している.この絵では,CPUはマスタ,Deviceはスレーブと呼ぶ.SPI通信では,CS信号で通信開始をスレーブ側に知らせ,クロック信号に同期してデータの送信および受信を行う.
I2C(Inter-Integrated Circuit)
"アイ・スクエアド・シー","アイツーシー"などと読む.フィリップス・セミコンダクターズ社(現:NXPセミコンダクターズ)が提唱したシリアル通信方式.その特徴は以下のとおりである.
※SCL=Sirial Clock,SDA=Sirial Data
- 1対1 or 1対多数
- クロック有.バス配線型で双方向通信
- 通信速度:低速~中速
- 必要な信号線は2本のみ,アドレスを指定して通信
- 用途:低速~中速のデバイス,センサなどを複数使用して通信.長距離伝送には向かず,同基板内での通信に使用する.
下の図では,I2C通信の概要を示している.I2Cでは,クロックに同期してデータを送受信するが,SPIと違い1本の信号線上でデータの送受信を行う(SPIでは送信はMOSI,受信はMISOと分かれている).そのため,I2Cの信号を扱うCPUのポート設定は,オープンドレイン+プルアップという設定にするという電気的な注意事項がある.I2Cでは,スレーブがそれぞれ自分の番号(アドレスという)を持っているので,まずアドレスをマスタから接続されているスレーブに送信され,アドレスが合っていればスレーブはマスタにACK信号(Acknowledgement)を返す.その後,スレーブからマスタに対してデータが送信される.
UART(Universal Asynchronous Receiver/Transmitter)
"ユーアート"と読む.調歩同期式というシリアル通信の方式で,クロック信号を持たない.その特徴は以下のとおりである.
- 1対1
- クロック無.信号は一方向で送受信側で速度を一致させる
- 通信速度:中速
- 1本の線で送信側から受信側へ通信
- 用途:コンピュータ間(マイコン,パソコン等)での通信 (RS232/422/485)
下の図は,UART通信の概要である.UARTでは,送受信側のデバイスで通信方式を予め取り決めておくことで,クロック信号無しでの通信が可能となる.決めておく事項としては,通信速度(ボーレートという),パリティビットの有無+極性(データの誤り検出),データ長である.データの送信完了はストップビットによって知らせることができる.
Txは送信という意味,Rxは受信という意味であり,マスタ側とスレーブ側でクロスして接続すること(マスタ側のTxとスレーブ側のRx、マスタ側のRxとスレーブ側のTxを接続する).
まとめ
本記事ではシリアル通信の方式として「SPI」「I2C」「UART」についてその特徴を簡易的に述べた.本記事だけではその内容を十分に理解できないかもしれないが,こういう信号があって,こういう送り方をする,こういうときに使う,などその概要を理解いただければと思う.