// Create 2014/09/21 // UpDate 2014/09/24 // IC2-EEPORM SII S-24C02DI-T8T1U5 // This example code is in the public domain. #include #define I2C_addr 0x50 #define DUMP_L_SIZE 16 void setup() { Serial.begin(9600); Serial.println("EEPROM Test Ver 1.0 Start"); Wire.begin(); } void loop() { byte dat0; byte dat1; byte dat2; unsigned char dat[ 256 ]; // Dump eprReadBytes(0x00, dat, 256); disp_dump( dat, 0x00, 256, 16 ); // Read dat0 = eprReadByte(0x00); Serial.println(dat0, HEX); // Write eprWriteByte(0x00, 0x55); // Read dat1 = eprReadByte(0x00); Serial.println(dat1, HEX); // Last Write eprWriteByte(0x00, dat0); // Read dat2 = eprReadByte(0x00); Serial.println(dat2, HEX); Serial.println("end."); while (1) { delay(1000); } } void eprWriteByte(int addr, byte dat) { Wire.beginTransmission(I2C_addr); Wire.write(addr); Wire.write(dat); Wire.endTransmission(); delay(5); } void eprReadBytes(int addr, byte *dat, int len) { while (len --) { *dat = eprReadByte(addr ++); dat ++; } } byte eprReadByte(int addr) { byte ret; Wire.beginTransmission(I2C_addr); Wire.write(addr); Wire.endTransmission(false); Wire.requestFrom(I2C_addr, 1); while (1) { if (Wire.available()) { ret = Wire.read(); break; } } Wire.endTransmission(true); delay(5); return ret; } void disp_dump( unsigned char *dat, int s_add, int msize, int lsize ) { int cnt; int add; char disp_str[ 7 + lsize * 3 + 2 + lsize + 1 ]; char tmp[ 4 ]; for ( add = s_add; add < s_add + msize; add += lsize ) { sprintf( disp_str, "%06X ", add ); for ( cnt = 0; cnt < lsize; cnt++ ) { sprintf( tmp, " %02X", dat[ add + cnt ] ); strcat( disp_str, tmp ); } strcat( disp_str, " " ); for ( cnt = 0; cnt < lsize; cnt++ ) { if ( isprint( dat[ add + cnt ] ) == 0 ) { strcat( disp_str, "." ); } else { sprintf( tmp, "%c", dat[ add + cnt ] ); strcat( disp_str, tmp ); } } Serial.println( disp_str ); } }