2021年2月7日日曜日

I2Cの7bit形式で設定可能なアドレスは8〜119(0x08〜0x77)の111種類


背景

I2C端末を作る際にパッドで好きなアドレスを設定できるようにしていたのですが、I2Cのアドレスは8bitではなく、7bitでも使えないアドレスがありそうだったので、アドレスのルールを調べてみました。
備忘録を兼ねて記事を残します。

7bit形式で設定可能なI2Cアドレスは8~119 (0x08〜0x77)

7bit形式では1bitは書き込み読み込みのフラグとしています。
残りの7bitで127種類のアドレスを表現できますが、下記の用途として予約されているため、8~119の111種類のみを利用できる仕様になっています。

  • 0x00
    全体への指示出しのため
  • 0x01
    CBUS対応のため
  • 0x02
    異なるBUS対応のため
  • 0x03
    将来利用予定
  • 0x04, 0x05, 0x06, 0x07
    高速モードで利用
  • 0x78, 0x79, 0x7A, 0x7B
    10bitアドレスモードで利用
  • 0x7C, 0x7D, 0x7E, 0x7F
    将来利用予定

余談: Raspberry PiのI2C検索コマンドは、使えないとされている0x03〜0x07も見れる

Raspberry PiのI2C検索コマンドとしてi2cdetectがあり、これを実行すると下記のような情報を得られます。
pi@asukipi:~# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

末尾は先ほど共有した仕様通り0x77までしか見れないのですが、先頭は利用可能な0x08以前の0x03〜0x07が見れます。
仕様としては0x03〜0x07は将来利用予定とされているので、自身でI2C装置を作る場合は、Raspberry Piから見えると言えども、そのアドレスの利用は避けるのが良いと思います。

まとめ

I2Cの7bitモードで利用可能なアドレスは8〜119の111種類と分かりました。

I2CControlPanelI2cMotorsのアドレス設定用のパッドを8個用意していましたが、今後の設計更新や新規装置作成時は7個にします。

参考

I2C - Wikipedia
今回の記事の主な情報源です。

I2C-bus specification and user manual - NXP
仕様を策定したNXP(旧 Philips Semiconductors)の公開しているI2Cの仕様書です。
17ページの「3.1.12   Reserved addresses」に予約されているアドレスの説明があります。

The List | I2C addresses | Adafruit
Adafruitの公開しているI2Cアドレスリストです。
自社製品のアドレスをまとめているリストですが予約されているアドレスも説明と共に載っていて、仕様に沿ってアドレスを定めていると分かります。

0 件のコメント :