I2C接続のEEPROMは、容量によって下記3つに分かれメモリアドレスの指定方法に違いがある。
- 16kビット(2kバイト) 以下
- 32kビット(4kバイト) ~ 512kビット(64kバイト)
- 1Mビット(128kバイト) 以上
16kビット(2kバイト) 以下
このクラスのものは、メモリアドレスを1バイトで指定する。ただし、1バイトのアドレスで指定できるアドレス空間は256バイトまでである。そこで4kビット(512バイト)~16kビット(2kバイト)のものについては、スレーブアドレスの下位1~3ビットを使ってメモリアドレスの上位ビットを指定する。
ただ、いまどきこのような小容量のEEPROMはコストメリットも無く、保守案件以外ではあえて使う理由は無いだろう。
32kビット(4kバイト) ~ 512kビット(64kバイト)
このクラスのものは、メモリアドレスを2バイトで指定する。2バイトのアドレスで指定できるアドレス空間の上限が64kバイトである。
このクラスのものは互換性が高く、間違いが少ない。
1Mビット(128kバイト) 以上
このクラスのものも、メモリアドレスを2バイトで指定する。しかし、2バイトのアドレスで指定できるアドレス空間は64kバイトまでである。そこでスレーブアドレスの下位ビットを使ってメモリアドレスの上位ビットを指定する。
ただし、同じ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は既存の基板設計との互換性に配慮してるのではないかと思う。