Hobby Lab 趣味のモノ作り実験のサイトです。
Software Protocol I2C 全般
0 I2Cマニュアル
1 概要
 1-1 通信役割名
 1-2 通信線名と用途
 1-3 通信
 1-3-1 通信bit
 1-3-2 通信スピード
 1-4 通信デバイス
 1-4-1 デバイスのアドレス
 1-4-2 プルアップ抵抗
 1-5 信号の種類
 1-5-1 最初と最後の信号
 1-5-2 データ信号共通
  1-5-2-1 Byte format
  1-5-2-2 ACK NACK
 1-6 信号の流れ
 1-6-1 スタート信号
 1-6-2 アドレスとモード指定
 1-6-3 データ信号
 1-6-4 ストップ信号

2 読み書き信号
 2-1 書き込み信号
 2-2 読み込み信号
 2-3 組み合わせ信号

I2C 関係
プロトコル
 I2C について
スレーブ関係資料
 ADS1115 16bit4CH A/D
 INA226 直流電圧電流計
 BME280 気圧,湿度,気温計
 BH1750 照度計
 DS3231 時計
 SSD1306 0.96"OLED
マスター関係プログラム
 I2C RaspberryPi_設定
ADS1115
 RaspberryPi_コマンド接続
 RaspberryPi_Python
 Arduino
 CH23V203 MounRiverStudioⅡ
INA226
 Arduino
 RaspberryPi_Python
BNE280
 Arduino
 RaspberryPi_Python
BH1750
 Arduino
 RaspberryPi_Python
DS3231
 Arduino
 RaspberryPi_Python
SSD1306
 Arduino
 RaspberryPi_Python

Sf:Pt プロトコル関係
SfPt:MODBUS
Sf:OS関係
SfO:Mint 関係
 PCへMint導入
 アプリ導入
 その他1
 アイコンを作る
SfO:Ubuntu 関係
 PCへUbuntu導入
 アプリ導入
SfO:RaspberryPi 関係
はじめに
 RaspberryPiへOS導入
 アプリ導入
 Programming
シェル・コマンド関係
 LXTerminal
 sed
 i2ctools
I/O・アプリ関係
 RealVNCとViewer
 IO動作確認
 MySQL
 Python
 raspberrypiハード
Sf:Server 関係
SfS:レンタルサーバー
 CORE-X
SfS:Windowsサーバー
 XAMPPの概要と導入
 Note XAMPP
 Note XAMPP Err
 Note Apache
 Note PHP
 Note MyQSL
Sf:Programming関係
C 関係
 C言語でプログラムミング
Python 関係
はじめに
 RaspberryPi開始
 Windows開始
共通事項
 プログラミングNote
 パッケージ導入 pip
 標準ライブラリ
 Serialライブラリ
 SMBusライブラリ
HTML関係
 開始とNote
Sf:IDE 開発環境
SfI:STM32
 STM32CubeIDEでプログラム
 HALと直接レジスター操作の速度
SfI:CH32
 MounRiver Studioでプログラム
SfI:Arduino
各ボード毎の設定
 Uno 設定
 Mega2560 設定
 DUE_CH340 設定
 ESP_WROOM02 設定
 ESP12F_D1mini 設定
 ESP32 設定
 CH32V 設定
ライブラリー
 OneWire使い方
その他
 日本語リファレンス(外部リンク)
 WiFi Macアドレスを調査
Sf:AP アプリ関係
SfA:エディタ
SfA:回路図CAD
SfA:回路シミュレータ
 シミュレーションの設定
 色の設定
 電源設定設定
SfA:リモートソフト
Sf:Otgers その他

0 I2マニュアル

I2C (Inter-Integrated Circuit) インターフェースは、1982年にフィリップス・セミコンダクターズ(当時、現在はNXPセミコンダクターズ)によって開発された。
I2C バス仕様およびユーザーマニュアルはNXPセミコンダクターズに有る。




1 概要

1-1 通信役割名

通信は2つの機器間で行われるが、このときの役割を明確に説明するため「マスタ・スレーブ」で分けている。
マスタ 役割: 通信の主導権を握り、クロック信号を生成して通信のタイミングを制御する。
機能: 通信の開始と終了を決定し、どのスレーブと通信するかをスレーブアドレスで指定する。
例: マイコンやプロセッサがマスタとして機能することが多い。
スレーブ 役割: マスターからの指示を受けて、データの送受信を行う。
機能: 自分に割り当てられたスレーブアドレスでマスタから呼び出されるのを待つ。
特徴: 通信の開始はできず、マスタが要求しない限りデータを送信することはできない。
例: センサーやメモリなどがスレーブとして接続される。

1-2 通信線名と用途

I2Cは3本の線で情報を受け渡ししている。
SCL 役割: 通信を同期させるためのクロック信号を生成する。
送信元: 通信の開始と終了、およびデータ送受信のタイミングを制御する「マスタ」がこの信号を生成する。
信号: マスタがSCLをハイ(H)またはロー(L)にすることで、スレーブ側はSCLの立ち上がり・立ち下がりエッジに合わせてSDAのデータを読み書きする。
SDA 役割: データ信号の送受信を行う。
双方向性: マスタとスレーブの間でデータを双方向に送受信できるため、同じ線が送信と受信の両方に使われる。
信号: SCLのクロック信号に同期して、マスタとスレーブがデータをこの線に流す。
GND 信号の基準となるグラウンド(接地)線です。すべてのデバイスで共通の基準電位を提供し、正しく通信するために不可欠です。

これらの信号線は、一般的にプルアップ抵抗を介して電源(IO電源)に接続する。
このプルアップ抵抗があることで、デバイスが何も出力していないときに信号がハイレベル(H)になり、 意図的にデバイスがローレベル(L)を出力したときのみ、信号がローレベルになる。

1-3 通信

1-3-1 通信bit

データは8ビット単位で転送されますが、通信の基本単位は「データ8ビット + ACKビット」の合計9ビットです。
通信は、デバイスのアドレスとR/Wビットを組み合わせた1バイトで開始し、以降は8ビットのデータとACK/NACKビットを交互に送受信することで進行します。

1-3-2 通信スピード

規格には
標準モード Standard-mode で最大 100kbit/s
ファーストモード Fast-mode で 400kbit/s
ファーストモード・プラス Fast-mode Plus で 1Mbit/s
となっていますが、
ハイスピードモード(High-speed-mode):3.4Mbps
ウルトラファストモード(Ultra-fast-mode):5Mbps(単方向通信のみ)
も有ります。

1-4 通信デバイス

1-4-1 デバイスのアドレス

個々のデバイスを識別するためにアドレスが有ります。
またアドレスには7bitまたは10bitで表します。
(1)7ビットアドレス:
一般的に使用されるアドレス形式です。
0x00から0x7Fまでの範囲(10進数で0から127)で、理論上最大128台のデバイスを接続できます。
ただし、一部のアドレス(0x00や0x01-0x07、0x78-0x7Fなど)は特殊な用途や将来の予約アドレスとして確保されているため、実際に使用できる範囲は少なくなります。

(2)10ビットアドレス:
使用は稀ですが、より多くのアドレス空間が必要な場合に使用されます。
アドレス指定に2バイトを要するため、通信手順が複雑になります。

1-4-2 プルアップ抵抗

通信線に接続されるディバイスは全て電圧を発生せず、GNDに対してオープン(ハイインピーダンス)または、短絡(ショート)状態にしている。
このため、外部からVDDに抵抗を通し信号線に接続し電圧を発生させている。
この抵抗をプルアップ抵抗と言う。
後でプルアップ抵抗の設計について記載したいと思うが、今回は概要を記載する。
概略プルアップ抵抗は、数kΩから数十kΩ(例:10kΩ)の値で設計する。

設計上の考慮事項

(1)基本的な値の選定:
一般的な目安として、1kΩ〜10kΩ程度の抵抗を5Vまたは3.3V電源に接続して使用する。

(2)抵抗値を高くする場合:
消費電流を抑えたい場合には、プルアップ抵抗値を大きくする。
ただし、抵抗値を大きくしすぎると、信号波形の立上り・立下り時間が長くなり、信号として検出できなくなる可能性がある。
またリニア電流が大きくなり、オープン状態でのリーク電流との関係で、ハイレベルの出力電圧が低下することがある。

(3)抵抗値を低くする場合:
電流が多く流れることにより、 バスの配線が長い場合には、信号の立上り・立下り時間を短くする効果がある。
外来ノイズに強くなる。
ただし、抵抗値を小さくしすぎると、プルアップ時に消費する電流が増加してデバイスのショート許容電流を超えるとデバイスを破損する可能性がある。
なお電流値として下記値が定格として出ているが、詳細はデバイス個々の定格表を参照すること。
通信スピードと立下り電流  (mA)
立下り電流
IOL
Standard-mode
100kbit/s
3
Fast-mode
400kbit/s
3
Fast-mode Plus
1000kbit/s
20

(4)立ち上がり時間の考慮:
I2Cの通信モードごとに、立ち上がり時間(tr)の規定がある。
プルアップ抵抗値は、バス容量とプルアップ抵抗によって決まる立ち上がり時間を、規定値内に収まるように選定する。
具体的には、以下関係式となる。
  立上り時間 tr = バス容量 × プルアップ抵抗値
通信スピードと立上り、立下り時間  (ns)
立上り時間
tr
立下り時間
tf
Standard-mode
100kbit/s
最小 ーー--
最大 1000300
Fast-mode
400kbit/s
最小 2020×(VDD/5.5)
最大 300300
Fast-mode Plus
1000kbit/s
最小--20×(VDD/5.5)
最大 120120

(5)オープンコレクタ出力への考慮:
多くのI2Cデバイスはオープンコレクタ出力であるため、プルアップ抵抗を接続しないと、信号のハイレベルを出力できない。
オープンコレクタ出力の素子は、抵抗を接続することでハイレベル出力を実現する。

(6)システム全体の整合性:
プルアップ抵抗の電圧は、I2Cバスを構成するデバイスの電源電圧に合わせる必要がある。
たとえば、5Vで動作するデバイスのバスには、電源電圧5Vにプルアップする。
※ただしその他ディバイスが3.3Vで使用している中で、1つのデバイスが5Vで使用している時はそのディバスの通信信号閾値がその他3.3Vで使用している信号Hiの値以下であれば、5Vで使用しているディバイスのプルアップは3.3Vとする。
もし閾値が電圧以上であれば使用できないので、信号線の間に電圧変換器を入れるか、3.3Vで動作するものに変更する必要がある。
ADS1115モジュールで失敗しているので、注意!


1-5 信号の種類

大きく分け、最初と最後の信号、データ信号に分けられる。

1-5-1 最初と最後の信号


図1
スタート(START)コンディションとストップ(STOP)コンディション
すべてのトランザクションは START (S) で始ま り 、 STOP (P) で終了します (図1)。
SCL が HIGH の期間の、SDAラインの HIGH から LOW への変化を スタートコンディション、 LOW から HIGH への変化をスト ップコンディションと定義します。

1-5-2 データ信号共通

データ信号データ部と確認部の信号がある。
データ部をバイトと言う。
確認部は ACK と言い以下に説明する。

1-5-2-1 Byte format

バイト・フォーマット
SDAライン上のすべてのバイトは、8ビット長でなければならない。
1回の転送で送ることができるバイト数に制限は無い。

1-5-2-2 ACK NACK

SDA信号
送信者受信者
1データ送信 8bit受信完了
2受信良好ACK 1bit(Lo)
3データ送信 8bit受信x
4受信不良処理NACK 1bit(Hi)
5
ACK アクノリッジ
アクノリッジは、データ受信側が発信し、各バイトの後に付けられる。
アクノリッジビットはデータ受信側(以下受信側と言う)からデータ送信側(以下送信側と言う)に対し、バイト受信の成功と、次のバイトの送信をして構わないことを通知する。
しかしACKが無いと次に説明する NACK 状態を受信側が故障したと送信側が処理させる場合もあり、他の方法で受信側の判断で送信側を長期待機状態にすることが出来るようにしている。
送信側を強制的に待機状態にする方法としては
受信側は送信側を強制的に待機状態とするためにクロックラインSCLを短絡(ショート)状態に保持することにより送信側を待機状態にできる。
受信側内で次のデータバイトを処理する準備が整うと、受信側のクロックラインSCLをオープン(ハイインピーダンス)状態にすると送信側はデータ転送を継続する。

SCLのクロック信号についてはマスタが出力する。
アクノリッジの9番目のデータが同期するクロックパルスを含め、すべてのクロックパルスはマスタが出力する。

図2

NACK ノット・アクノリッジ
9番目のクロックパルスの間にSDAがHIGHである場合を、ノット・アクノリッジ(NACK)と定義します。
マスタはストップコンディションを生成して転送を中止するか、リピートスタートコンディションを生成して新たな転送を開始できます。
NACKを発生させる条件は次の通り。
1.転送されたアドレスのレシーバがバスに存在しない.つまりアクノリッジで応答するデバイスがない場合。
2.レシーバが何らかのリアルタイム機能を実行中でマスタとの通信を行える状態ではなく、送信も受信もできない場合。
3.転送の間、受信したデータやコマンドをレシーバが理解できない場合。
4.転送の間、レシーバがそれ以上データバイトを受信できない場合。
5.マスタレシーバがスレーブトランスミッタに対し転送の終了を伝える場合。

1-6 信号の流れ

ここでは、スレーブアドレスが 7bit の物を想定して説明する。

図3

1-6-1 スタート信号

1-5-1で説明したスタートコンディションをマスターが出力します。

1-6-2 アドレスとモード指定信号

2番目の信号はマスターが誰とどんなモードで通信するかを指定する。
この信号をスレーブアドレスとR/モードと言う
スレーブアドレスは 1-4-1 デバイスのアドレスで説明したアドレスが入る。
次のビットは
R:READ、 読み出しを示し、スレーブからデータを読み出したいデータを次のデータで指定する。
:書き込みを示し、スレーブに対し書き込みしたいデータを次のデータで措定する。

1-6-3 データ信号

1-5-2で説明したByte format(データ)とACK NACK(結果)によりデータ送信側から受信側へデータを伝達する。

1-6-4 ストップ信号

1-5-1で説明したストップコンディションをマスターが出力します。




2 読み書き信号


図4

2-1 書き込み信号

メインからスレーブに対しデータを書き込みする場合は、図4のように、スレーブアドレスの後1bitを0にすると次からのデータがスレーブに対し書き込まれる。



例として最初に書き込みデータ2Byteとすると
①スタートコンディション ②スレーブアドレス R/W bit=0 ④ANK ⑤データ ⑥ANK ⑤デー タ⑥ANK
⑦ストップコンディション


図5

2-2 読み込み信号

メインからスレーブのデータを読み込みする場合は、図5のように、スレーブアドレスの後1bitを1にすると次からのデータがスレーブからデータが送られてくる。
例として最初に読み込みデータ2Byteとすると
⑪スタートコンディション ⑫スレーブアドレス ⑬R/W bit=1 ⑭ANK ⑮データ ⑯ANK ⑮データ ⑯NANK ⑰ストップコンディション



図6

2-3 組み合わせ信号

メインからスレーブに対し書き込み、読み込みの組み合わせする場合、最初の要求と次の要求にはストップコンディションは不要とする。
図6のようになるが、 例として最初に書き込みデータ2Byte、次に読み込みデータ2Byteとすると

①スタートコンディション ②スレーブアドレス ③R/W bit=0 ④ANK ⑤データ ⑥ANK ⑤データ ⑥ANK
⑪リピートスタートコンディション ⑫スレーブアドレス ⑬R/W bit=1 ⑭ANK ⑮データ ⑯ANK ⑮データ ⑯NANK ⑰ストップコンディション
となる。




































更新日 2025/11/25 19:35  管理者 平林 剛Hirabayashi Takeshi