すべての記事

【組み込み】UART・I2C・SPIをまとめて理解する:組み込み通信の基本を実機で学ぶ入門記事

広告この記事には広告・アフィリエイトリンクが含まれる場合があります。

目次

組み込み開発に触れ始めると、かなり早い段階で UART・I2C・SPI という3つの通信方式に出会います。
マイコンとセンサ、表示器、PC、各種モジュールをつなぐうえで基本となる技術ですが、最初は「名前は聞くけれど、違いが整理しにくい」と感じやすい部分でもあります。

この記事では、UART・I2C・SPIの役割と違いをまとめて整理しつつ、実機で確認するときにどこを見るべきか まで含めて解説します。
仕様を暗記するというより、現場で「この通信はこういう理由で使うのか」と判断できる状態を目指します。

UART・I2C・SPIとは

この3つは、どれも機器同士でデータをやり取りするためのシリアル通信です。

ただし、配線本数や通信の進め方、得意な用途が異なります。

まずは全体像を表で押さえると分かりやすいです。

通信方式

主な配線

特徴

向いている用途

UART

TX, RX, GND

構成がシンプル

デバッグログ、PC接続

I2C

SCL, SDA, GND

少ない配線で複数接続しやすい

センサ、EEPROM、RTC

SPI

SCLK, MOSI, MISO, CS, GND

高速で扱いやすい

LCD、ADC、フラッシュメモリ

実務では、UARTは確認用、I2Cはセンサ接続、SPIは高速デバイス接続 という形で覚えると入りやすいです。

UARTの基本

UARTは、非同期式のシリアル通信です。

送信側と受信側で通信速度を事前に決めておき、クロック線なしでデータをやり取りします。

UARTの特徴

UARTの代表的な信号線は以下の2本です。

  • TX:送信
  • RX:受信

加えて、GNDを共通にします。
1対1でつなぐのが基本で、構成が単純なため最初の学習対象として向いています。

たとえば、マイコンのファームウェアで printf を使ってログを出し、PCのシリアルモニタで読む使い方は非常によくあります。
不具合解析でも「まずUARTログを見る」という場面は多いです。

実機での確認ポイント

UARTでよくあるミスは次の通りです。

  • TXとRXをそのまま同名同士でつないでしまう
  • ボーレートが一致していない
  • GND共通を忘れる

実際には、送信側TX → 受信側RX、送信側RX → 受信側TX と交差させて接続します。
通信できないときは、まず配線とボーレートを確認すると切り分けが早いです。

I2Cの基本

I2Cは、少ない配線で複数デバイスをぶら下げられる通信方式です。
マイコン周辺のセンサ接続で特によく使われます。

I2Cの特徴

I2Cで使う主な信号線は次の2本です。

  • SCL:クロック
  • SDA:データ

I2Cでは、マスタがクロックを出し、各デバイスはアドレスで区別されます。
そのため、温度センサ、加速度センサ、RTCなどを同じバスにまとめて接続しやすいのが利点です。

実機での確認ポイント

I2Cは便利ですが、初学者がつまずきやすい点もあります。
代表例はプルアップ抵抗です。

SCLとSDAはオープンドレインで使うため、通常はプルアップ抵抗が必要です。
これがないと、信号が不安定になったり、通信そのものが成立しなかったりします。

また、確認時は以下も重要です。

  • センサのアドレスが仕様書通りか
  • 7bitアドレスか8bit表記かを取り違えていないか
  • 電圧レベルが3.3V系か5V系か

実務では、まずI2Cスキャナでデバイスが見えているかを確認し、その後にレジスタ読み書きへ進む流れが安定です。

SPIの基本

SPIは、同期式で比較的高速な通信方式です。
I2Cより配線は増えますが、表示器や高速デバイスで広く使われています。

SPIの特徴

SPIの主な信号線は以下です。

  • SCLK:クロック
  • MOSI:マスタからスレーブへのデータ
  • MISO:スレーブからマスタへのデータ
  • CS:通信相手を選ぶ信号

複数デバイスをつなぐ場合、MOSI・MISO・SCLKは共有し、CSだけ個別に分ける構成が一般的です。
LCDや外部フラッシュ、A/Dコンバータなどでよく見かけます。

実機での確認ポイント

SPIでは、CSの制御と通信モードの設定が重要です。
クロック極性と位相の組み合わせが合っていないと、配線が正しくてもデータが崩れます。

たとえば、センサのIDレジスタを読むだけの簡単な処理でも、

  1. CSを有効にする
  2. コマンドを送る
  3. データを受信する
  4. CSを無効に戻す

という流れを意識する必要があります。
ロジックアナライザで波形を見ると、UARTやI2Cとの違いがかなりはっきり分かります。

どう使い分けるか

迷ったときは、次の基準で考えると整理しやすいです。

UARTが向く場面

  • とにかく簡単につなぎたい
  • デバッグログを出したい
  • PCや通信モジュールと1対1で接続したい

I2Cが向く場面

  • センサを複数つなぎたい
  • 配線を減らしたい
  • 速度より接続性を重視したい

SPIが向く場面

  • ある程度の速度が必要
  • 表示器やメモリを扱いたい
  • 配線本数が増えても問題ない

実際の製品では、UARTでログを出しつつ、I2Cで環境センサを読み、SPIで液晶を駆動する という組み合わせも普通にあります。

まとめ

UART・I2C・SPIは、どれも組み込み開発の基本ですが、役割はかなり異なります。
重要なのは、名前を覚えることよりも、どんな配線で、どんな相手に、どんな目的で使うか を結び付けて理解することです。

最初に試すなら、次の順番がおすすめです。

  1. UARTで文字列を送ってPCで確認する
  2. I2Cでセンサのレジスタを読む
  3. SPIで表示器や外部メモリを動かす

この順で触ると、難しさが段階的に上がるので学びやすくなります。
実機で通信を確認しながら進めると、ソフトウェア視点だけでなく、ハードウェアとの接点もかなりクリアに見えてきます。

コメント

コメントはまだありません