I2CのEEPROMの容量とアドレス指定

I2C接続のEEPROMは、容量によって下記3つに分かれメモリアドレスの指定方法に違いがある。

  • 16kビット(2kバイト) 以下
  • 32kビット(4kバイト) ~ 512kビット(64kバイト)
  • 1Mビット(128kバイト) 以上

16kビット(2kバイト) 以下

このクラスのものは、メモリアドレスを1バイトで指定する。ただし、1バイトのアドレスで指定できるアドレス空間は256バイトまでである。そこで4kビット(512バイト)~16kビット(2kバイト)のものについては、スレーブアドレスの下位1~3ビットを使ってメモリアドレスの上位ビットを指定する。

f:id:licheng:20200927140148p:plain

ただ、いまどきこのような小容量のEEPROMはコストメリットも無く、保守案件以外ではあえて使う理由は無いだろう。

32kビット(4kバイト) ~ 512kビット(64kバイト)

このクラスのものは、メモリアドレスを2バイトで指定する。2バイトのアドレスで指定できるアドレス空間の上限が64kバイトである。

f:id:licheng:20200927145947p:plain

このクラスのものは互換性が高く、間違いが少ない。

1Mビット(128kバイト) 以上

このクラスのものも、メモリアドレスを2バイトで指定する。しかし、2バイトのアドレスで指定できるアドレス空間は64kバイトまでである。そこでスレーブアドレスの下位ビットを使ってメモリアドレスの上位ビットを指定する。

f:id:licheng:20200927150013p:plain

ただし、同じ1Mビットのものでも、メモリアドレスの最上位ビット指定にスレーブアドレスの最下位ビットを使うものと下から3ビット目を使うものがあるので要注意。また、2Mビット以上のものはあまり一般的ではない。

そもそもI2Cは低速なので大容量のメモリには向かない。そのような用途にはSPI接続のフラッシュメモリ等を検討するのが良いだろう。

共通事項

  • スレーブアドレスの上位4ビットは 1010 である。
  • スレーブアドレスの下位3ビットは外部ピンで設定できる。
    • 16kビット以下のものにはこの機能はない。(派生品種を除く)
    • 1Mビット以上のものはメモリアドレス指定の都合上、この機能は制約される。
  • よって、スレーブアドレスは7ビット表記で0x50~0x57、8ビット表記で0xA0~0xAEとなる。
  • 型番は一般に 24xxyyy である。(Microchip社の場合。他社もほぼ同様)
    • xxは電源仕様を示す。(Cなら5V用、LCなら3.3V可、AAなら1.8V可など。)
    • yyyは容量を示す。おおむねキロビット単位の数値。
    • ちなみにSPI接続のEEPROMの型番は25xxyyyである。

以上は一般論であり、メーカーや型番による微妙な違いもあるので必ずデータシートを確認すること。

一覧表

ここではMicrochip社製のものについて示す。

型番 容量[bit] 容量[Byte] ページサイズ[Byte] メモリアドレス指定
24xx01 1k 128 8 1Byte
24xx02 2k 256 8 1Byte
24xx04 4k 512 16 1Byte+1bit
24xx08 8k 1k 16 1Byte+2bit
24xx16 16k 2k 16 1Byte+3bit
24xx32 32k 4k 32 2Byte
24xx64 64k 8k 32 2Byte
24xx128 128k 16k 64 2Byte
24xx256 256k 32k 64 2Byte
24xx512 512k 64k 128 2Byte
24xx1025 1M 128k 128 2Byte+1bit
24xx1026 1M 128k 128 2Byte+1bit

24xx1026と24xx1025の違いは、メモリアドレスの最上位ビット指定にスレーブアドレスの最下位ビットを使うかと下から3ビット目を使うか。24xx1026のほうが素直な設計に思えるが、おそらく24xx1025は既存の基板設計との互換性に配慮してるのではないかと思う。