📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

229行目: 229行目:
   
   
     return data;
     return data;
}
</syntaxhighlight>
<br>
==== AT24C32 (32Kbit I2C EEPROM) ====
AT24C32 EEPROMを使用してI2C通信する場合は、上記の24LC256のサンプルプログラムとほぼ同じとなる。<br>
これは、AT24C32と24LC256がどちらもI2Cインターフェースを使用しており、通信プロトコルが同一だからである。<br>
<br>
主な違いは、EEPROMの容量とアドレッシングである。<br>
* 24LC256は、256[Kbit] (32[KB]) の容量を持ち、16ビットのアドレス (0x0000~0x7FFF) を使用する。
* AT24C32は、32[Kbit] (4[KB]) の容量を持ち、8ビットのアドレス (0x00~0xFF) を使用する。
<br>
したがって、24LC256向けのサンプルコードをAT24C32で使用する場合、以下の点を変更する必要がある。<br>
# EEPROMのI2Cアドレスを確認して、必要に応じて、EEPROM_ADDRESSの定義を変更する。
#: <br>
# i2c_write_byte関数内およびi2c_read_byte関数内で、アドレスの送信部分を修正する。<br>AT24C32は8ビットアドレスを使用するため、アドレスの上位バイトの送信は不要である。
<br>
これらの変更を加えることで、24LC256向けのサンプルコードをAT24C32で使用することができる。<br>
<br>
ただし、EEPROMの容量が異なるため、アドレスの範囲に注意が必要である。<br>
AT24C32の有効なアドレス範囲は、<u>0x00~0xFF</u>であり、それ以外のアドレスを指定した場合の動作は未定義となることに注意する。<br>
<br>
<syntaxhighlight lang="c">
void i2c_write_byte(unsigned char address, unsigned char data)
{
    // ...略
    while (!(IFG2 & UCB0TXIFG));
    UCB0TXBUF = address;        // アドレスの送信(8ビットのみ)
    // ...略
}
unsigned char i2c_read_byte(unsigned char address)
{
    // ...略
    while (!(IFG2 & UCB0TXIFG));
    UCB0TXBUF = address;        // アドレスの送信(8ビットのみ)
    // ...略
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>