Here is some code which demonstrates how to set up block data and write it to eeprom. You should be able to adapt it to your data.
//possible page boundary issue unless all writes at 16 bytes
#include <Wire.h>
#define ADDRESS 0x50 //Address of EEPROM
unsigned int memAddress = 0;//starting eeprom address
int totalBytes = 720;//total byte number multiple of 16
const byte blockLength = 16; //will avoid page boundary in eeprom
const byte numberOfBlocks = totalBytes/blockLength;
//test data visuallyto confirm pattern
//EDIT: correct declaration of byte fileData
byte fileData[][blockLength] =
{
{0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0},
};
void setup() {
Serial.begin(115200);
Wire.begin();
for (int i = 0; i <= numberOfBlocks - 1; i++)
{
writeBytes( ADDRESS, memAddress, fileData[i], blockLength);
memAddress += blockLength;
}
memAddress = 0;//reset address for read
for (int i = 0; i <= numberOfBlocks - 1; i++)
{
readBytes(ADDRESS, memAddress, blockLength);
memAddress += blockLength;
}
}
void loop() {}
void writeBytes(int device, unsigned int Address, byte* data, byte len)
{
Wire.beginTransmission(device);
Wire.write(Address >> 8 ); //MSB
Wire.write(Address & 0xFF); // LSB
Wire.write(data, len);
Wire.endTransmission();
delay(5);//small delay for eeprom to save data
}
void readBytes(int device, unsigned int Address, byte len )
{
byte readBuffer[len];
Wire.beginTransmission(device); // I2C address
Wire.write(Address >> 8); // bit shift for high byte of pointer address
Wire.write(Address & 0xFF); // mask for the low byte
Wire.endTransmission();
Wire.requestFrom(device, len);
Wire.readBytes(readBuffer, len);
for (byte j = 0; j < 16; j++)
{
Serial.print(readBuffer[j], HEX);
Serial.print(" ");
}
Serial.println();
}
OUTPUT
FF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 FF 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 FF 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 FF 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 FF 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 FF 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 FF 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 FF 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 FF 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 FF 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 FF 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 FF 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 FF 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 FF 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 FF 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FF
0 0 0 0 0 0 0 0 0 0 0 0 0 0 FF 0
0 0 0 0 0 0 0 0 0 0 0 0 0 FF 0 0
0 0 0 0 0 0 0 0 0 0 0 0 FF 0 0 0
0 0 0 0 0 0 0 0 0 0 0 FF 0 0 0 0
0 0 0 0 0 0 0 0 0 0 FF 0 0 0 0 0
0 0 0 0 0 0 0 0 0 FF 0 0 0 0 0 0
0 0 0 0 0 0 0 0 FF 0 0 0 0 0 0 0
0 0 0 0 0 0 0 FF 0 0 0 0 0 0 0 0
0 0 0 0 0 0 FF 0 0 0 0 0 0 0 0 0
0 0 0 0 0 FF 0 0 0 0 0 0 0 0 0 0
0 0 0 0 FF 0 0 0 0 0 0 0 0 0 0 0
0 0 0 FF 0 0 0 0 0 0 0 0 0 0 0 0
0 0 FF 0 0 0 0 0 0 0 0 0 0 0 0 0
0 FF 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 FF 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 FF 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 FF 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 FF 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 FF 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 FF 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 FF 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 FF 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 FF 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 FF 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 FF 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 FF 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 FF 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 FF 0