概要
題のとおり、以下の規格についての知識をメモします。
- UART
- I2C
- SPI
対象はarduinoやesp32等のマイコンを使った工作を始めた人(通信のライブラリまでは自作しないレベル)です。
必要に応じて追記するかも。
1. UART (Universal Asynchronous Receiver-Transmitter)
ゆーあーと。
クロック信号を使わない、非同期式シリアル通信の一種。
PCとマイコンを繋いでシリアルモニタに文字を表示したり、BluetoothモジュールやGPSモジュールなどと1対1で通信したりするときによく使われる。
特徴
1. TX(Transmit: 送信)とRX(Receive: 受信)の2本の信号線を使用する
電源とGNDを合わせると、計4本の配線になることが多い。1対1の専用線なので、I2Cのようなアドレスの概念はない。
2. 通信速度の事前同期が必須
通信のタイミングを合わせるクロック線がないため、データを送る側と受ける側で、あらかじめ通信速度(ボーレート:Baud rate)を合わせておく必要がある。
例: 9600 bps / 115200 bps など(bps = bit per second / 1秒間に送るビット数)
とりこれメモ
1. 配線の仕方
正しい接続は、TX(送信) ➔ 相手のRX(受信) / RX(受信) ➔ 相手のTX(送信)
2. 文字化けしたらボーレートを疑う
シリアルモニタを開いたときに ⸮⸮⸮ のような謎の文字化けが大量に出力される場合、プログラム側の設定とシリアルモニタ側の設定のボーレートが一致していないことが多い。
2.I2C(Inter-Integrated Circuit)
あいすくえあどしー・あいつーしー。
※表記としてはI2Cがより正しいが、本記事ではI2Cとする。
クロックに同期させてデータの通信を行う、同期式シリアル通信の一種。
センサやROMなどとの通信によく使う。特徴としては以下が挙げられる。
特徴
1 . SCL(Serial Clock),SDA(Serial Data)の二本の信号線を使用する
電源とGNDを合わせると、計4本の配線になることが多い。
信号線には必ずプルアップ抵抗が必要だが、マイコンボードやモジュール側に内蔵されている場合が多い。
2. 各機器がマスターとスレーブに分かれ、マスターからスレーブに対し送信/受信の指示を行う
マスター(マイコン等): 通信のリーダー。常に自分から通信を開始する。
スレーブ(センサー等): 通信のフォロワー。マスターから指名されるのを待つ。
3. アドレスを用いて1多対の通信ができる
スレーブ機器にはそれぞれ固有の7ビットのアドレスが割り当てられている。
信号線が共通でも、マスターがアドレスで指名して通信するため、ピンを節約して大量のセンサーを繋ぐことができる。また、基本的にマスター側にアドレスはなく、スレーブ側を識別するためだけにアドレスが使われる。
とりこれメモ
1. アドレスの重複
同じセンサを複数使う場合など、用途によってはアドレスが重複するときがある。
その場合の対処法としては以下が挙げられる。
- モジュールによっては、アドレスを変更できるピンを備えているのでそれを使う
- マイコンによっては、I2Cの系統を2つ以上搭載しているのでそれを使う
- アドレスを変更するモジュールを追加する
2.ノイズに注意する
ノイズに弱いので、あまり配線を伸ばしすぎないようにする。
3. SPI (Serial Peripheral Interface)
えすぴーあい。
クロック信号に同期させてデータの通信を行う、同期式シリアル通信の一種。
I2Cと同じ同期式だが、こちらの方が通信速度がかなり速い。
SDカードスロットへの読み書きや、フルカラー液晶ディスプレイ(LCD)など、データ量が大きくてスピードが求められる機器によく使う。
特徴
1. 4本以上の信号線を使用する
主に以下の4本の線で通信を行うため、配線数は多め。
- SCLK (Serial Clock): タイミングを合わせるクロック線
- MOSI (Master Out Slave In): マスターからスレーブへデータを送る線
- MISO (Master In Slave Out): スレーブからマスターへデータを送る線
- CS / SS (Chip Select / Slave Select): 通信したい相手を指名する線
2. CS線を使って1対多の通信を行う
I2Cのようなアドレスはない。代わりに、マスターが通信したいスレーブのCS線をLOWに落とすことで、物理的に相手を指名して通信を開始する。
とりこれメモ
1. 繋ぐ機器に応じてピン数が増える
SPIは機器を増やすたびにCS線が1本ずつ増える。
例えば、SPIのセンサーを3個繋ぎたい場合、SCLK、MOSI、MISOの3本は共通にできるが、CS線だけはマイコンから3本別々に伸ばす必要がある(合計6本となる)。
2. ノイズに注意する
I2Cと同じ。
また通信速度が速いので、ノイズ源にもなりやすい。
各規格の速度・メリット等の比較
| 規格 | 速度の目安 | 配線数 | 通信相手 | メリット | デメリット |
|---|---|---|---|---|---|
| UART | ~500kbps | 2本 | 1対1 | PCなどを使用したデバッグに便利。 | 1対1しか繋げない・遅い |
| I2C | ~1Mbps | 2本 | 1対多 | 2本のみの信号線で多数のスレーブと接続できる。 | アドレスが被ることがある・外部ノイズに弱い・遅い |
| SPI | ~50Mbps | 4本〜 | 1対多 | 液晶やSDカードなど大容量データの扱いに向く。 | 繋ぐ機器が増えるたびにCS線が必要になる・ノイズ源になる |
その他
-
信号線の電圧には注意する
マイコンやモジュールには3.3V駆動のものや5V駆動のものなどが混在している。例えば、3.3V専用のGPSモジュールと5Vのマイコンを直接つなぐと、故障の原因になることがある。電圧レベルが一致しているか、データシートで必ず確認する。合わない場合はレベルシフタという変換部品を使うことが多い。