回路設計

I2C通信とは?SPI・UARTとの違いとプルアップ抵抗の早見表

ブレッドボードの上の小さなセンサ基板・8ピンIC・抵抗とジャンパー線の写真に、I2C・SPI・UARTの電気的な違い・3つを比べる・プルアップ・速度・配線の長さの文字

※本記事にはプロモーション(広告)が含まれています。

I2C通信(アイ・スクエア・シー)は、SDA と SCL の2本の線を何台もの部品で共有し、H をプルアップ抵抗で作る通信です。SPI・UART との違いは一覧表、プルアップ抵抗の値は早見表で決められます。

結論|まず30秒でわかる答え

I2C・SPI・UARTの違いは、電気で見ると「線の数」と「H を誰が作るか」です。
I2C は2本の線を全員で共有し、H はプルアップ抵抗が作るので、抵抗の値とバスの容量で速さが決まります。例:3.3V・400kHz・100pF なら 967Ω〜3.54kΩ(2.2kΩ を選ぶ)。
SPI と UART は送る側が H も L も自分で出すので速くできます。SPI は部品ごとに CS の線が増え、UART は2本をたすきがけにして電圧(TTL か RS-232 か)をそろえます。

この記事に出てくる言葉

わからない言葉が出てきたら、ここに戻ってきてください。本文でも、初めて出たところで言い換えます。

I2C(アイ・ツー・シー)2本の線(SDA・SCL)で、何個もの部品とやりとりする通信
SPI(エス・ピー・アイ)クロック・送る線・受ける線と、相手を選ぶ CS で通信する方式
UART(ユーアート)送る線 TX と受ける線 RX の2本で、決めた速さで1ビットずつ送る方式
H・L信号の高い電圧(High)と低い電圧(Low)。L はほぼ0V
プルアップ抵抗線を電源へつなぐ抵抗。だれも L にしていないとき、線を H に引き上げる
オープンドレインL にすることしかできない出力。H はプルアップ抵抗にまかせる
プッシュプルH も L も自分で出せる出力
バスの容量(Cb)線と部品の足にたまる電気の入れ物の大きさ。大きいほど H に上がるのが遅い
立ち上がり時間(tr)L から H へ上がるのにかかる時間。I2C では 30% から70% までを測る

マイコンにセンサや表示器をつなぐとき、ほとんどの場合 I2C・SPI・UART のどれかを使います。解説の多くは「どんな順番でデータを送るか」という手順の話です。

ところが、つないでも動かない原因の多くは手順ではなく電気の側にあります。プルアップ抵抗がない、線が長すぎて波形がゆれる、TX どうしをつないだ、電圧が合っていない、といったものです。この記事は、その電気の違いだけに絞って、図と計算で説明します。

ブレッドボードの上の小さなセンサ基板・8ピンIC・抵抗とジャンパー線の写真に、I2C・SPI・UARTの電気的な違い・3つを比べる・プルアップ・速度・配線の長さの文字

I2C・SPI・UART の違いは「線の数」と「H を誰が作るか」

I2C は2本の線に全部の部品をつなぎ、H はプルアップ抵抗が作ります。SPI は3本の共通の線と、部品ごとの CS で選びます。UART は TX と RX の2本を、相手とたすきがけにつなぎます。

3つの配線を並べると、つなぎ方の違いがはっきりします。

方式信号の線つなぎ方
I2CSDA(データ)・SCL(クロック)全部の部品が同じ2本につながる。相手は「住所(アドレス)」で呼び分ける
SPISCLK・MOSI・MISO + CS3本は共通。相手を選ぶ CS は部品ごとに1本ずつ
UARTTX(送る)・RX(受ける)自分の TX を相手の RX へ。1対1でつなぐ

どの方式でも、信号の線とは別に GND(電流の帰り道で、電圧の基準)を必ずつなぎます。信号の電圧は GND を基準にした高さなので、GND がつながっていないと H と L を正しく読めません。

たとえると

I2C は「1本の回覧板を全員で回す」、SPI は「先生が名前を呼んだ人だけが答える」、UART は「2人で糸電話を2本使う(話す方と聞く方)」です。

つまり、まず線の数とつなぎ方を見れば、どの方式かと、どこでつまずきやすいかがわかります。

I2C・SPI・UARTの配線図。I2CはSDAとSCLの2本に3.3Vへのプルアップ抵抗と部品2つ、SPIはSCLK・MOSI・MISOの3本と部品ごとのCS1・CS2、UARTはマイコンのTXを相手のRXへ、RXを相手のTXへたすきがけにしてGNDも結ぶ

I2C・SPI・UART の電気的な違い一覧

電気で比べるときの大事な違いは、H を作る仕組み(プルアップかプッシュプルか)、クロックの線の有無、伸ばせる配線の長さの3つです。

比べる点I2CSPIUART
信号の線2本3本+CS2本
H を作るのはプルアップ抵抗送る側の出力送る側の出力
出力の形オープンドレインプッシュプルプッシュプル
クロックの線ある(SCL)ある(SCLK)ない(速さを約束する)
速さの例100kHz・400kHz・1MHz数MHz 以上も(部品で決まる)9600〜115200bps など
配線の長さ基板の中・短い線基板の中・短い線長くするなら RS-232 など

I2C の速さは仕様書(NXP の UM10204)で決まっています。100kHz(Standard-mode)、400kHz(Fast-mode)、1MHz(Fast-mode Plus)です。SPI には決まった上限がなく、つなぐ部品のデータシートに書かれた最大の速さで決まります。

UART の速さは bps(1秒に何ビット送るか)で表します。9600bps や115200bps がよく使われます。

つまり、I2C は「抵抗しだいで遅くなる」、SPI と UART は「出力が速いぶん、線の長さや電圧に注意」が電気の違いです。

I2C・SPI・UARTの比較表。信号の線、Hを作るのはプルアップ抵抗か送る側の出力か、オープンドレインかプッシュプルか、クロック、速さの例、配線の長さ、つまずき

オープンドレインとプッシュプル:I2C だけプルアップ抵抗が要る理由

I2C の出力はオープンドレインで、線を L に下げることしかできません。H は、線と電源の間に入れたプルアップ抵抗が引き上げて作ります。SPI と UART の出力はプッシュプルで、H も L も自分で出せます。

プッシュプルの出力には、電源側と GND 側に2つのスイッチ(トランジスタ)が入っています。上を ON にすれば H、下を ON にすれば L です。自分で電流を押し出せるので、すばやく切り替えられます。

オープンドレインの出力には、GND 側のスイッチしかありません。ON にすると線は L になります。OFF にすると、出力は線から「手を離した」状態になり、線の電圧を決めるのはプルアップ抵抗です。

たとえると

プルアップ抵抗は、ドアを閉める「ばね」です。だれかが手で押さえている間はドアが開いたまま(L)、全員が手を離すとばねの力で閉まります(H)。ばねが弱い(抵抗が大きい)と、閉まるのがゆっくりになります。

注意|プルアップ抵抗がないと H にならない

I2C の線にプルアップ抵抗がないと、だれも H を作らないので、線の電圧が決まりません。I2C が全く動かないときに、まず確かめる所です。

フローティングとは?「浮いている」状態とプルアップ・プルダウンの選び方|計算ツール付き
あわせて読みたい
フローティングとは?「浮いている」状態とプルアップ・プルダウンの選び方|計算ツール付き

プルアップ抵抗がないと入力が「浮く」理由と、抵抗の選び方の基本がわかる

つまり、I2C の H は抵抗まかせ。だから抵抗の値で、H に上がる速さが変わります。

左はプッシュプル出力で上のスイッチがONになりHを出す図。右はオープンドレイン出力で、GND側のスイッチがOFFのときに3.3Vへのプルアップ抵抗がSDAをHに引き上げる図

なぜ I2C はオープンドレインなのか:何台つないでもぶつからない

オープンドレインでは、だれか1台でも L にすれば線は L になり、全員が手を離したときだけ H になります。これを「ワイヤードAND」と呼び、何台つないでも出力どうしがぶつかりません。

もし I2C がプッシュプルだったら、ある部品が H を出し、別の部品が L を出した瞬間に、電源から GND へ大きな電流が流れてしまいます。出力どうしの「けんか」です。

オープンドレインなら、L を出す部品は線を GND へつなぐだけです。H は抵抗が作るので、L を出す部品があっても、流れる電流は抵抗で決まる小さな値です。3.3V と 2.2kΩ なら、(3.3V−0.4V)÷2.2kΩ≒1.3mA です。

I2C は、この性質を使って、返事の合図(ACK)や、受け手が「ちょっと待って」とクロックを止める仕組みを作っています。

つまり、オープンドレインは「全員で同じ線を使っても壊れない」ための形です。その代わり、H の速さは抵抗に頼ります。

SDAの線にプルアップ抵抗とマイコン・センサA・センサBのスイッチがつながり、センサAだけがスイッチをONにしてSDAがLになる図

I2C の立ち上がり時間:tr=0.8473×Rp×Cb

I2C の線が L から H へ上がる速さは、プルアップ抵抗 Rp とバスの容量 Cb のかけ算で決まります。仕様書 UM10204 は、30% から70% までの時間を tr=0.8473×Rp×Cb と計算しています。

線と部品の足には、小さなコンデンサがあるのと同じ性質(容量)があります。手を離すと、プルアップ抵抗を通って電流が流れ込み、この容量に電気がたまって、電圧がゆっくり上がっていきます。

I2C は、電源電圧(VDD)の30% 以下を L、70% 以上を H と読みます。そこで、30% になる時間と70% になる時間の差を「立ち上がり時間 tr」と呼びます。

30% になる時間

0.3567×Rp×Cb(電源電圧の30% までたまる時間)

70% になる時間

1.2040×Rp×Cb(電源電圧の70% までたまる時間)

その差

1.2040−0.3567=0.8473。tr=0.8473×Rp×Cb

I2C の立ち上がり時間(UM10204 の 7.1 節)
tr = 0.8473 × Rp × Cb

仕様書は、tr の上限を決めています。100kHz で1000ns、400kHz で300ns、1MHz で120ns です。tr がこれを超えないように、抵抗と容量を選びます。

時定数τの意味と計算方法|「63.2%ルール」を使って過渡現象を得点源にする
あわせて読みたい
時定数τの意味と計算方法|「63.2%ルール」を使って過渡現象を得点源にする

R×C の「時定数」と、63.2% まで上がる理由を、基本から確かめられる

つまり、抵抗を大きくしても、容量が大きくなっても、H に上がるのが遅くなります。

RCで電圧が上がるグラフ。30%になる時間0.3567RCと70%になる時間1.2040RCの差が立ち上がり時間tr=0.8473RC

バスの容量 Cb の見積もり方:部品の足・基板の線・ケーブルを足す

バスの容量 Cb は、つないだ部品の足の容量、基板の線の容量、ケーブルの容量を全部足したものです。I2C の仕様書は、Cb を400pF(1MHz では550pF)までと決めています。

UM10204 では、部品の足1本あたりの容量は最大10pF です。部品を3つつなげば、それだけで最大30pF になります。

ここに基板の線の容量と、ケーブルの容量が加わります。ケーブルの容量は意外に大きく、TI の資料(SLLA037A)では、RS-232 用のケーブルで1m あたり約100pF の例が出ています。

中身容量(例)根拠
マイコン・センサA・センサB の足10pF×3=30pFUM10204 の上限(Ci 最大10pF)
基板の線20pF計算用の例(イメージ)
ケーブル 50cm50pF1m あたり100pF とした例
合計 Cb100pFこの記事の計算例に使う値
POINT|わからないときは大きめに見積もる

基板の線やケーブルの容量がわからないときは、大きめに見積もると安全側になります。容量を大きく見るほど、選ぶ抵抗が小さくなり、H に上がるのが速くなるからです。

つまり、Cb は「つないだものの足し算」。ケーブルをつなぐと一気に増えます。

部品の足10pFが3つ、基板の線20pF、ケーブル50cmで50pFを足して合計100pFになる棒グラフ(基板の線とケーブルは例)

I2C のプルアップ抵抗の決め方:下限と上限を計算して間から選ぶ

プルアップ抵抗は、L のときに流れる電流で決まる「下限」と、立ち上がり時間で決まる「上限」の間から選びます。3.3V・400kHz・Cb 100pF なら 967Ω〜3.54kΩ で、2.2kΩ を選びます。

STEP 1 下限

Rp(min)=(VDD−0.4V)÷3mA。L のとき、部品が吸い込める電流(3mA)を超えないため

STEP 2 上限

Rp(max)=tr÷(0.8473×Cb)。立ち上がり時間が仕様の上限を超えないため

STEP 3 選ぶ

下限と上限の間にある E24 の値から、余裕をもって選ぶ

計算例:3.3V・400kHz・Cb 100pF

STEP 1 下限です。I2C の部品は、L のときに3mA を吸い込んでも0.4V 以下にできることが決まっています。抵抗が小さすぎると電流が3mA を超え、L が0.4V まで下がりきらなくなります。

Rp(min)=(3.3V−0.4V)÷0.003A=2.9÷0.003=967Ω。これより大きい抵抗にします。

STEP 2 上限です。400kHz の tr の上限は300ns です。

Rp(max)=300ns÷(0.8473×100pF)=0.0000003÷(0.8473×0.0000000001)=3,541Ω(3.54kΩ)。これより小さい抵抗にします。

STEP 3 です。967Ω〜3.54kΩ の間で、上限に余裕のある 2.2kΩ を選びます。tr=0.8473×2200Ω×100pF=186ns で、300ns の上限に対して余裕があります。L のときの電流は(3.3−0.4)÷2200≒1.3mA で、3mA 以内です。

POINT|100kHz なら上限は約3倍

同じ Cb 100pF でも、100kHz の tr の上限は1000ns なので、Rp(max)=1000ns÷(0.8473×100pF)≒11.8kΩ です。4.7kΩ でも10kΩ でも使えます。

つまり、プルアップ抵抗は「電流で下限、速さで上限」。2つの式で範囲を出してから選びます。

抵抗の数直線に下限967Ωと上限3.54kΩ、その間に2.2kΩ。下限は(3.3−0.4)÷3mA、上限は300ns÷(0.8473×100pF)

定番の4.7kΩ の落とし穴:400kHz では Cb 75pF までしか使えない

I2C のプルアップ抵抗は4.7kΩ がよく使われますが、400kHz では Cb が約75pF を超えると立ち上がりが遅すぎます。速さを上げるときは、抵抗を小さくし直します。

Rp(max)=tr÷(0.8473×Cb)の式を、Cb について並べかえると、ある抵抗で使える Cb の上限がわかります。Cb(max)=tr÷(0.8473×Rp)です。

抵抗100kHz(tr 1000ns)400kHz(tr 300ns)
2.2kΩ537pF161pF
3.3kΩ358pF107pF
4.7kΩ251pF75pF
10kΩ118pF35pF

100kHz のときに4.7kΩ で動いていた回路を、そのまま400kHz に上げると、Cb が75pF を超えたとたんに仕様の外になります。部品を1つ増やしたり、ケーブルをつないだりしたときも同じです。

表の値は仕様書の式による上限です。100kHz の列にある400pF 超えの値(537pF)は、Cb の上限400pF を超えるので、実際には400pF までです。

つまり、「4.7kΩ で動いた」は、そのときの速さと容量で動いただけ。条件が変わったら計算し直します。

100kHz・400kHz・1MHzのプルアップ抵抗の上限とバスの容量のグラフ。4.7kΩの線と交わるのは400kHzで75pF、100kHzで251pF

4.7kΩ と2.2kΩ の波形を比べる:同じ400kHz・100pF

Cb 100pF で比べると、30% から70% までの時間は、4.7kΩ で約398ns、2.2kΩ で約186ns です。400kHz の上限300ns に入るのは2.2kΩ だけです。

4.7kΩ:tr=0.8473×4700Ω×100pF=0.8473×0.00000047=398ns。300ns を超えます。

2.2kΩ:tr=0.8473×2200Ω×100pF=186ns。300ns に入ります。

立ち上がりが遅いと、H になりきる前に次のクロックが来たり、ノイズで H と L の境目を何度もまたいだりして、データを読み違えるおそれがあります。L へ下がるときは、部品のスイッチが直接 GND へつなぐので速く、問題になりにくいです。

つまり、I2C の波形が「なまって」見えたら、まず抵抗と容量を疑います。

Cb100pFでのSCLの立ち上がり波形。4.7kΩは30%から70%まで398ns、2.2kΩは186ns

I2C のプルアップ抵抗の早見表(上限と下限)

答えだけ知りたいときは、バスの容量と速さから上限を、電源電圧から下限を表で引き、その間の E24 の値を選びます。

バスの容量 Cb100kHz400kHz1MHz(Fm+)
50pF23.6kΩ7.08kΩ2.83kΩ
100pF11.8kΩ3.54kΩ1.41kΩ
200pF5.90kΩ1.77kΩ708Ω
400pF2.95kΩ885Ω(※)354Ω
下限 3.3V967Ω967Ω145Ω
下限 5V1.53kΩ1.53kΩ230Ω

上限の値は、tr÷(0.8473×Cb)を3けたで切り捨てました。下限は(VDD−0.4V)÷IOL で、IOL は100kHz と400kHz で3mA、1MHz(Fast-mode Plus)で20mA です。

注意|(※)400kHz・400pF は抵抗だけでは作れない

上限885Ω が、3.3V の下限967Ω より小さくなります。仕様書(表10 の注4)は、400pF で400kHz にするには、0.6V で6mA を吸い込める部品が要るとしています。容量を減らすか、バッファでバスを分けます(同 7.2 節)。

つまり、上限と下限が逆転したら「抵抗では解けない」合図。容量を減らす設計に戻ります。

Cb50・100・200・400pFと100kHz・400kHz・1MHzのプルアップ抵抗の上限の表と、3.3V・5Vの下限。400kHz・400pFの885Ωは下限より小さい

SPI の線と CS:CS を L にした部品だけが返事をする

SPI は、SCLK(クロック)・MOSI(マイコンから部品へ)・MISO(部品からマイコンへ)の3本を共通にし、CS(チップセレクト)を L にした部品だけと通信します。部品が1つ増えるごとに、CS の線も1本増えます。

SPI の CS は、ふつう L で「選ぶ」という意味です(Analog Devices の解説)。CS が H の部品は、何もしません。

MISO は、全部の部品が同じ1本を使います。選ばれていない部品が MISO に H や L を出すと、選ばれた部品の返事とぶつかってしまいます。そこで、選ばれていない部品は MISO から手を離します。これをハイインピーダンス(電気的に切り離した状態)と呼びます。

MOSI・MISO は、新しい資料では SDO・SDI や COPI・CIPO と書かれることもあります。部品のデータシートでは、どちらが「出す線」かを矢印やピンの説明で確かめます。

注意|CS を浮かせない

マイコンが起動する前やリセット中は、CS の線が決まらない(浮いた)状態になることがあります。プルアップ抵抗で CS を H にしておくと、意図しない部品が選ばれるのを防げます。

つまり、SPI は「共通の3本+部品ごとの CS」。部品が多いと、マイコンのピンが CS で足りなくなります。

SPIのタイミング図。CS1がLの間だけSCLKが8回動きMOSIとMISOでデータをやりとりし、CS2はHのまま

SPI の配線の長さ:速い信号は、長い線で波形がゆれる

SPI はプッシュプルで切り替わりが速いぶん、線が長いと信号が線の端ではね返り、波形がゆれます(リンギング)。線を短くし、送る側に数十Ωのダンピング抵抗を入れると、ゆれを抑えられます。

信号の切り替わりが速いと、線は「ただの導線」ではなく、信号が行って帰ってくる道として働きます。線の端で信号の一部がはね返り、もとの信号と重なって、上下にゆれる波形になります。

SCLK がゆれて、H と L の境目を2回またぐと、受ける部品はクロックを2回数えてしまいます。データが1ビットずれて、読んだ値がおかしくなります。

対策やること
線を短くする基板の中で、部品をマイコンの近くに置く
ダンピング抵抗送る側の出力のすぐ近くに、数十Ωの抵抗を直列に入れる
速さを下げるクロックを遅くすると、ゆれがおさまるのを待てる
GND を近くに通す信号の帰り道を短くする
ダンピング抵抗・フェライトビーズはなぜ入れるのか?|信号のリンギングを止める「減衰器」の正体
あわせて読みたい
ダンピング抵抗・フェライトビーズはなぜ入れるのか?|信号のリンギングを止める「減衰器」の正体

ダンピング抵抗が波形のゆれ(リンギング)を止める理由と、値の考え方がわかる

つまり、SPI は「速いけれど、長い線が苦手」。基板の外へ長く引き出すなら、別の方式を考えます。

左は長い線でSCLKがゆれてしきい値を2回またぐ波形、右は短くしダンピング抵抗を入れてなめらかに上がる波形(イメージ)

UART のしくみ:クロックの線がない代わりに速さを約束する

UART は、クロックの線を持たない代わりに、送る側と受ける側で「1秒に何ビット送るか(bps)」を同じにしておきます。115200bps なら、1ビットは8.68µs です。

何も送っていないとき、TX の線は H のままです。送り始めの合図として1ビットぶん L にし(スタートビット)、そのあと8ビットのデータを下の位から順に送り、最後に H のストップビットで終わります。

1ビットの時間は、1÷115200=0.00000868秒=8.68µs です。9600bps なら1÷9600≒104µs です。

受ける側は、スタートビットの L を見つけたら、自分の時計で8.68µs ごとに線の電圧を読みます。両方の速さがずれていると、読む位置が少しずつずれて、最後のほうのビットを読み違えます。

たとえると

UART は、合図の笛のあとに「1・2・3…」と同じテンポで旗を上げ下げする伝え方です。テンポを事前に決めておけば、合図の線(クロック)がなくても伝わります。

つまり、UART で文字化けするときは、まず両方の bps の設定がそろっているかを見ます。

UARTで文字A(0x41)を送る波形。スタートビットのLのあとにD0からD7を下の位から送りストップビットで終わる。1ビット8.68µs

UART の電圧:TTL(3.3V・5V)と RS-232 は別もの

マイコンの UART は、0V と電源電圧(3.3V か5V)で H と L を表す「TTL レベル」です。パソコンや古い機器の RS-232 は、±5〜15V で、しかも 1 がマイナス・0 がプラスと向きが逆です。

TI の資料(SLLA037A)によると、RS-232 の送る側は、0 を+5〜+15V、1 を−5〜−15V で出します。受ける側は、+3V 以上を 0、−3V 以下を 1 と読み、その間は決まりません。

種類1(H)0(L)マイコンに直接
TTL 3.3V約3.3V約0V3.3V のマイコンならつなげる
TTL 5V約5V約0V3.3V のマイコンには注意
RS-232−5〜−15V+5〜+15Vつながない(変換 IC を通す)

RS-232 の機器とマイコンをつなぐときは、MAX232 などの変換 IC を間に入れます。MAX232 は5V 1つで動き、3kΩ の負荷で ±5V 以上(標準 ±7V)を出し、受ける側は ±30V まで耐えます(TI のデータシート)。

「USB シリアル変換器」にも、TTL 用と RS-232 用があります。マイコンにつなぐのは TTL 用で、さらに3.3V か5V かを、マイコンの電圧に合わせます。

POINT|長い線なら RS-232 や差動の方式

TTL の UART は、基板の中や短い線向けです。RS-232 は、ケーブルの容量2500pF まで(15〜20m ほど)と決められています(SLLA037A)。もっと長くするなら、2本の線の差で送る差動の方式を使います。

差動信号はなぜノイズに強い?同相ノイズ除去とCMRRを図解
あわせて読みたい
差動信号はなぜノイズに強い?同相ノイズ除去とCMRRを図解

差動の方式が、長い線でもノイズに強い理由が図でわかる

つまり、UART は「TX と RX」と「電圧の種類」の2つをそろえる。RS-232 はマイコンに直接つなぎません。

TTL3.3VとTTL5VはHが電源電圧でLが0V。RS-232は+3V以上が0、−3V以下が1で、±3Vの間は決まらない

実物で確かめる:オシロで I2C の立ち上がりを測る

計算した立ち上がり時間は、オシロスコープで確かめます。SCL と GND にプローブを当て、30% と70% の電圧にカーソルを置いて、その間の時間が上限以下かを見ます。

手順1

プローブの先を SCL に、GND のクリップをすぐ近くの GND に当てる

手順2

縦は1V/目盛、横は50ns/目盛くらいにして、L から H へ上がる所を表示する

手順3

3.3V なら0.99V(30%)と2.31V(70%)にカーソルを置き、その間の時間を読む

例の回路(2.2kΩ・100pF)なら、計算では約186ns です。400kHz の上限300ns より短ければ OK です。

最低限ここだけ確かめる

①SDA・SCL が、何もしていないときに電源電圧(3.3V など)になっているか(テスターで測れます)。②SCL の立ち上がりが、速さの上限(400kHz なら300ns)以内か。

余裕があれば

SPI なら SCLK の H と L の所にゆれがないか、UART なら1ビットの幅が8.68µs(115200bps)になっているかも見ます。プローブ自体にも10pF 前後の容量があるので、測るときは Cb が少し増えると考えます。

オシロ画面の正しい見方|時間軸・電圧軸・カーソル測定の完全ガイド
あわせて読みたい
オシロ画面の正しい見方|時間軸・電圧軸・カーソル測定の完全ガイド

オシロの画面の時間軸・電圧軸の読み方と、カーソルでの測り方がわかる

つまり、計算した値を、実物の波形で「答え合わせ」します。

オシロスコープの画面(イメージ)。SCLの立ち上がりに30%と70%の線とカーソルを置きΔt=186ns

よくある失敗4つ:プルアップ・TX と RX・電圧・GND

I2C・SPI・UART が動かないときに多い失敗は、I2C のプルアップ抵抗がない、UART の TX どうしをつないだ、RS-232 をマイコンに直接つないだ、GND をつないでいない、の4つです。

失敗1:I2C にプルアップ抵抗がない

センサの小さな基板(モジュール)には、プルアップ抵抗が付いているものと、付いていないものがあります。どちらにも付いていないと、SDA・SCL が H に上がりません。逆に、何枚もの基板にそれぞれ付いていると、並列になって抵抗が小さくなりすぎることもあります。

失敗2:UART の TX と TX をつないだ

名前が同じ TX どうしをつなぐと、送る線どうしがぶつかり、どちらも相手の声を聞けません。自分の TX は相手の RX へ、自分の RX は相手の TX へ、たすきがけにつなぎます。

失敗3:RS-232 をマイコンに直接つないだ

RS-232 は±5〜15V なので、3.3V のマイコンの入力に直接つなぐと、壊れることがあります。変換 IC を通します。

失敗4:GND をつないでいない

別の電源で動いている機器どうしをつなぐとき、信号の線だけつないで GND を忘れると、電圧の基準がそろわず、H と L を正しく読めません。

GNDとは?0Vの線ではなく電流の帰り道|GNDバウンスと分ける理由を図解
あわせて読みたい
GNDとは?0Vの線ではなく電流の帰り道|GNDバウンスと分ける理由を図解

GND が「0V の線」ではなく「電流の帰り道」である理由がわかる

つまり、動かないときは、手順を疑う前に「プルアップ・TX と RX・電圧・GND」の4つを見ます。

よくある失敗4つ。I2Cにプルアップがない、UARTのTXとTXをつないだ、RS-232をマイコンに直結、GNDをつないでいない

よくある質問(FAQ)

Q. I2C・SPI・UARTの違いは?

A. 電気で見ると線の数と、H を誰が作るかが違います。I2C はプルアップ抵抗、SPI と UART は送る側の出力が H を作ります。

Q. I2Cのプルアップ抵抗は何Ω?

A. 電流で決まる下限と、立ち上がり時間で決まる上限の間から選びます。3.3V・400kHz・100pF なら2.2kΩ です。

Q. I2Cはなぜプルアップ抵抗が必要?

A. 出力がオープンドレインで、L にすることしかできないからです。H はプルアップ抵抗が線を引き上げて作ります。

Q. SPIのCSとは?

A. 通信する部品を選ぶ線です。ふつう L で選び、部品が1つ増えるごとに CS の線も1本増えます。

Q. UARTのTXとRXはどうつなぐ?

A. 自分の TX を相手の RX へ、自分の RX を相手の TX へ、たすきがけにつなぎます。GND も必ずつなぎます。

Q. RS-232とUARTの違いは?

A. マイコンの UART は0V と電源電圧の TTL レベル、RS-232 は±5〜15V で向きも逆です。変換 IC を通してつなぎます。

まとめ
  • I2C・SPI・UART の電気的な違いは「線の数」と「H を誰が作るか」
  • I2C はオープンドレイン。H はプルアップ抵抗が作り、tr=0.8473×Rp×Cb で速さが決まる
  • プルアップ抵抗は下限(VDD−0.4V)÷3mA と上限 tr÷(0.8473×Cb)の間。3.3V・400kHz・100pF なら2.2kΩ
  • 定番の4.7kΩ は、400kHz では Cb 約75pF まで
  • SPI は共通の3本+部品ごとの CS。速いぶん、長い線でゆれる
  • UART は TX と RX をたすきがけ。TTL と RS-232 は電圧が違う

次の一歩として、手元の I2C の回路で、つないでいる部品の数とケーブルの長さから Cb を見積もり、使っているプルアップ抵抗が上限と下限の間に入っているかを計算してみてください。

参考にした資料

法令・規格・資料は改訂されることがあります。実務で使うときは、発行元の最新版で確かめてください。

この記事の理解を深める本と道具
おすすめの道具

波形を自分の目で確かめるなら、手元にオシロスコープが1台あると便利です。RIGOLのデジタル・オシロスコープ DHO804です。周波数帯域70MHz・4チャンネルで、12ビットの垂直分解能をもちます。

おすすめの道具

回路を実際に組んで、電流や電圧を確かめてみたいときに向いています。サンハヤトのブレッドボード SAD-101です。408個の穴に部品を差し込むだけで、はんだ付けをせずに回路を組めます。

マルツオンライン
¥1,050 (2026/10/25 20:21時点 | 楽天市場調べ)
S
シラス
電験三種・QC検定1級 / メーカーでパワエレ設計・品質保証 実務10年

メーカーで回路設計と生産技術(品質改善)に携わってきた経験をもとに執筆しています。むずかしい専門用語をできるだけ使わず、はじめて学ぶ人がつまずかないように、図とたとえで説明することを大切にしています。

テーマ別に、もっと深く学ぶ

気になるところから読んでも大丈夫です。どの記事も、はじめて学ぶ人向けにやさしく書いています。

つまずきやすい「違い」を一気に解決
差動ドライバとは?シングルエンドとの違いを図解でやさしく解説
違いがわかる
差動ドライバとは?シングルエンドとの違いを図解でやさしく解説

1本で送る方式と、2本の差で送る方式の違いがわかる

違いを確かめる →
伝導ノイズと放射ノイズの違い|30MHzの境界と、フィルタ・シールドの対策
違いがわかる
伝導ノイズと放射ノイズの違い|30MHzの境界と、フィルタ・シールドの対策

線を伝わるノイズと、空間を飛ぶノイズの違いと対策がわかる

違いを確かめる →
コモンモードノイズとノーマルモードノイズの違い|対策とコモンモードチョーク・Yコンデンサを図解
違いがわかる
コモンモードノイズとノーマルモードノイズの違い|対策とコモンモードチョーク・Yコンデンサを図解

通信線に乗るノイズの2つの種類と、見分け方がわかる

違いを確かめる →
【完全図解】クロストークとは?|隣の配線にノイズが飛び移るメカニズム
違いがわかる
【完全図解】クロストークとは?|隣の配線にノイズが飛び移るメカニズム

SPI の線どうしが近いと、となりの線にノイズがうつる理由

違いを確かめる →
計算力アップ・資格対策
RC時定数の決め方|フィルタ・遅延・チャタリング除去の部品値を実例で
計算力アップ
RC時定数の決め方|フィルタ・遅延・チャタリング除去の部品値を実例で

R と C で時間を作る計算を、フィルタや遅延の例で練習できる

計算してみる →
E系列とは?E24系列の抵抗値一覧と4.7kΩ・9.1kΩが中途半端な理由
計算力アップ
E系列とは?E24系列の抵抗値一覧と4.7kΩ・9.1kΩが中途半端な理由

2.2kΩ・4.7kΩ のような E24 の値の並びと選び方がわかる

計算してみる →
分圧回路の抵抗の決め方|E24で選ぶ4ステップと誤差の見積もり
計算力アップ
分圧回路の抵抗の決め方|E24で選ぶ4ステップと誤差の見積もり

5V の信号を抵抗2本で3.3V に下げる、分圧の計算ができる

計算してみる →
オームの法則 V=IR とは?電圧・電流・抵抗の関係を「水道管」で図解|例題つき
計算力アップ
オームの法則 V=IR とは?電圧・電流・抵抗の関係を「水道管」で図解|例題つき

プルアップに流れる電流を出す、オームの法則の例題

計算してみる →

-回路設計
-