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

  • URLをコピーしました!

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

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

目次

UART・I2C・SPIとは

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

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

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

通信方式主な配線特徴向いている用途
UARTTX, RX, GND構成がシンプルデバッグログ、PC接続
I2CSCL, SDA, GND少ない配線で複数接続しやすいセンサ、EEPROM、RTC
SPISCLK, 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で表示器や外部メモリを動かす

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

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

エンジニア。20代。組み込みエンジニアとして働き始めるも、働き方や業務内容に限界を感じ、 AI,Web3エンジニアを目指して勉強中。 エンジニアとして思うことや、学んだことを発信します。

目次