電子工作初心者のために シリアル通信方式を分かりやすくまとめてみた

自分の勉強がてら、シリアル通信方式を分かりやすくまとめました。
絶賛勉強中なので、ツッコミどころがあればご指摘いただけると嬉しいです。

全部読むのが面倒な人の為に、最後にシリアル通信方式比較表でまとめています。

#そもそもシリアル通信とは何か？
##シリアル通信
データ伝送の間、デジタルデータを１ビットずつ順次伝送する接続方式のこと
<img width="600" alt="シリアル通信" src="https://qiita-image-store.s3.amazonaws.com/0/262969/65304573-29e2-380a-4890-9f09b32a1049.png">
**特徴**
:slight_smile:　回線数が少なく**低コスト**
:frowning2:　伝搬速度が**遅い** 
　⇒パラレル通信と比較し、**長距離間**のデータ伝送等に有利

##パラレル通信
複数の信号線を利用して複数ビットのデータを同時に伝送する方式
<img width="600" alt="パラレル通信" src="https://qiita-image-store.s3.amazonaws.com/0/262969/fea70d95-7353-7c75-6548-797eac277b68.png">
**特徴**
:slight_smile:　伝送効率が**速い**
:frowning2:　回線数が多く**高コスト**
　⇒同一室内の**近距離**端末間等で利用される

##シリアル通信かパラレル通信か？
ここまで、シリアル通信とパラレル通信、それぞれメリットとデメリットを見てきたが、最近では、通信速度の高度化により、**シリアル通信が主流**になりつつあるようである。
（詳しい人いたらコメントください）
⇒ @sounisi5011 さんよりコメントいただきました。パラレル通信だと信号線同士で時差が生じることがあるが、シリアル通信だとその心配がない、ということのようです。

#シリアル通信の同期方式
**クロック同期**
データ通信用の信号線とは別に**クロック信号線**を持ち、その信号を用いて送信側と受信側の同期を行う。
以下のような特徴がある。
・　データ通信用の信号線の他にクロック信号線を必要とするため、**信号線の本数が増える**
・　データ通信用に信号線が確保出来るため、**伝送効率が良い**
ex.) [I2C通信](#I2C通信)、[SPI通信](#SPI通信)

**調歩同期/非同期方式**
送受信するデータの前後に**"start bit"**と**"stop bit"**を伝送することで、送信側と受信側の同期をする方式。
調歩同期方式とか非同期方式とか呼ばれているよう。名前がややこしい。
以下のような特徴がある。
・　同期のためのクロック線を必要としないため、**信号線が少なくてすむ**
・　データ線とスタートクロック同期に比べ**伝送効率は悪い**
ex.) [UART通信](#UART通信)

#各シリアル通信の特徴をみていく

##I2C通信<a name="I2C通信"></a>
フィリップス社が提唱した周辺デバイスとのシリアル通信の方式。
一本の信号線がいくつかの役割を担っているイメージ。

**特徴**
・**マスタ側とスレーブ側**を分け、マスタ側が全ての制御を行う
・ データ通信信号線の方向は**双方向**
・１バイト転送毎に受信側から**ACK信号**を返送し、互いに確認を取りながら
データ転送を行う
・個々のスレーブがアドレスを持ち、**データの中にアドレスが含まれる**

:slight_smile: 信号線が少なくて済む　（２本の信号線から構成される）
:frowning2: 伝送速度は遅め (100kbps~1Mbps)
<img width="600" alt="I2C通信.png" src="https://qiita-image-store.s3.amazonaws.com/0/262969/dfba986f-ae9d-3072-9fef-67791dedb4c1.png">
**用途**
・同じ基板内など、近距離で直結したデバイスでシリアル通信を行うために使われるのが主。（離れた装置間の通信には不向き）


##SPI通信<a name="SPI通信"></a>
モトローラ社が提唱した周辺デバイスとのシリアル通信の方式。
それぞれの信号線が各々の役割に集中しているイメージ。

**特徴**
・ I2C通信同様、**マスタ側とスレーブ側**を分け、マスタ側が全ての制御を行う
・ データ通信は、　MOSI / MISO信号各々が、”マスタ→スレーブ”、”スレーブ→マスタ”**片方向ずつ**を担う
・ **SS（スレーブセレクト）信号**でデータ通信先を指定

:slight_smile:　伝送速度がはやめ　（数Mbps）
:frowning2:　信号線が3~4本必要
<img width="600" alt="SPI通信.png" src="https://qiita-image-store.s3.amazonaws.com/0/262969/ce406ecf-1f09-8cc2-67a7-9ea0ccb4a8e1.png">
**用途**
・同じ基板内など、近距離で直結したデバイスでシリアル通信を行うために使われるのが主（離れた装置間の通信には不向き）　

##UART通信<a name="UART通信"></a>
調歩同期式によるシリアル通信の方式。
同期のための**クロック線を持たない**。

**特徴**
・データ通信のための１〜２本の信号線で構成される
　ー**半二重通信**（１本）：送信と受信を切り替えながら，交互に通信を行う。
<img width="600" alt="半二重通信.png" src="https://qiita-image-store.s3.amazonaws.com/0/262969/21c4aacd-fcfb-19f5-40cd-e6493edb25b1.png">
　ー**全二重通信**（２本）：送信と受信を同時に行うことが可能。ほとんどの UART が対応。
<img width="600" alt="全二重通信.png" src="https://qiita-image-store.s3.amazonaws.com/0/262969/11082ddc-0ecc-ce53-14f9-d1e9f0e49317.png">
・　１バイトの開始と終了を **start bit** と **stop bit**で認識

:slight_smile:　信号線が少なくて済む (１~２本)
:frowning2:　クロック同期式と比較し伝送速度は低速　（0.1~115kbps）
<img width="600" alt="UART通信.png" src="https://qiita-image-store.s3.amazonaws.com/0/262969/f9472369-07cf-c5fc-b9c1-5232947d0091.png">
**用途（追記予定）**
・マイコン間通信？
・マイコンと動作モニタ用の端末を通信や、無線LAN用のモジュールとの通信等

#シリアル通信方式まとめ

|  |信号線  |同期方式  |通信速度　|接続形態　|実際の用途|
|---|---:|---|---:|---|---|
|I2C通信|2本  |クロック（同期式） |0.1 ~ 1 Mbps |１対多 |デバイスーマイコン間 |
|SPI通信|3~4本  |クロック（同期式）  |1 ~ 数 Mbps |１対多 |デバイスーマイコン間 |
|UART通信|1~2本 |タイミング信号（調歩同期/非同期式） |0.1 ~ 115kbps |１対１（一部１対多） |マイコンーマイコン間 |

#参考サイト
参考にさせていただいたページは以下の通りです。

SPI通信の使い方：　http://www.picfun.com/f1/f05.html
I2C通信の使い方：　http://www.picfun.com/c15.html
　→詳細に、かつ分かりやすくまとめてくださっています。もっと知りたい！という方は目を通してみると良いかも。

調歩同期について：　https://synapse.kyoto/glossary/glossary.php?word=%E8%AA%BF%E6%AD%A9%E5%90%8C%E6%9C%9F