| I2C EEPROM 24xx256用ユーティリティ for H8-300h | ||||||||||||||||||||||||||||||||||||||||
| 概要 | ||||||||||||||||||||||||||||||||||||||||
| H8内臓ROMのメモリ空間ではデータが入りきらない、電源をOFFしてもデータが消えないようにしたい、 というときに便利なI2CインタフェースのEEPROM 24256をH8のソフトウェアI2Cで読み書きするための ユーティティです。 こちらも合わせてご覧ください。 | ||||||||||||||||||||||||||||||||||||||||
| キーワード | ||||||||||||||||||||||||||||||||||||||||
| H8-300h, H8tiny, I2C, IIC, EEPROM, 24256 | ||||||||||||||||||||||||||||||||||||||||
| 注記 | ||||||||||||||||||||||||||||||||||||||||
|
きっちりとしたライブラリ化はあえてしていません。 動作実績のある1コード片として参考にしていただけたら幸いです。 著者への質問・つっこみはこちらまで。 | ||||||||||||||||||||||||||||||||||||||||
| ソールファイル | ||||||||||||||||||||||||||||||||||||||||
|
eeprom24256.h eeprom24256.c | ||||||||||||||||||||||||||||||||||||||||
| コンパイル・動作確認済み環境 | ||||||||||||||||||||||||||||||||||||||||
|
ハードウェア:AKI−H8/3664F(QFP) タイニーマイコンキット(秋月電子) シリアルI2C EEPROM AT24C256(ATMEL製) 開発環境: windows XP + cygwin + gcc3.3 + hosv4 動作実績:第11回川崎ロボット競技大会 リミットカズラ でプロポ信号から各モータの制御信号へのマッピングテーブルの 格納に使用。 | ||||||||||||||||||||||||||||||||||||||||
| 周辺回路 | ||||||||||||||||||||||||||||||||||||||||
![]() 図はAT24C256とH83664Fとの組み合わせです。 24xx256のA0, A1, A2端子はI2Cスレーブアドレスの下位3ビットを設定する端子です。 I2C規格ではスレーブアドレスは基本的に7ビット(10ビットアドレッシングを除く)です。 ここで24xx256のスレーブアドレスは次のように決まります。 ![]() A0, A1, A2端子に加わる電圧がLならば対応するビットは0, Hならば1です。 スレーブアドレスを個別に割り振ることで、最大2^3=8個の24xx256を同一のバスラインに接続することができます。 この意味ではA0, A1, A2端子はメモリ空間の最上位の3ビットと見ることもできます。 これらの端子は基本的にGndか電源に直結しますが、マイコンによって動的に切り替えることも可能です。 どこにも接続しなかった場合は内部的にGndに接続されます。 図では念のためGndに直結しているのでスレーブアドレスは[1010000]=0x50となります。 また、図では省略していますがWP(ライトプロテクト)端子は開放状態とします。 この場合内部的にGndに接続され常に書き込み許可となります。 | ||||||||||||||||||||||||||||||||||||||||
| 使い方 | ||||||||||||||||||||||||||||||||||||||||
#include <macro.h>
#include <i2c.h>
#include <eeprom24256.h>
#define I2C_ADDR_EEPROM 0x50 /* EEPROMのI2Cスレーブアドレス */
#define ADDR_PARAM 0x00
static unsigned char g_i2cbuff[64];
int main(void){
/* I2C初期化 */
i2c_init();
/* EEPROMから読み込む */
eeprom_read(I2C_ADDR_EEPROM, HIBYTE(ADDR_PARAM), LOBYTE(ADDR_PARAM), g_i2cbuff, sizeof(g_i2cbuff));
/* EEPROMへ書き込む */
if(eeprom_write(I2C_ADDR_EEPROM, HIBYTE(ADDR_PARAM), LOBYTE(ADDR_PARAM), g_i2cbuff, sizeof(g_i2cbuff))){
/* 焼きこみ完了を待つ */
eeprom_poll(I2C_ADDR_EEPROM);
}
}
| ||||||||||||||||||||||||||||||||||||||||
| リファレンス | ||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||