I have an ESP32 controller and am using AT24C1024 for communication. In my code, I am trying to access an external EEPROM at positions writing data from 0 to 10000 position data is = '1'. However, when I read data from position '1', I sometimes get junk values, such as 0, 255, or old written values. I have already tried changing the clock speed with Wire.setClock(100000), and I have attempted multiple writes to that location, but these modifications did not resolve the issue.
#include <Wire.h>
#define EEPROM_ADDR 0x50
#define SDA_PIN 21
#define SCL_PIN 22
#define DATA_LIMIT 10000
#define VALUE 1
void setup() {
Serial.begin(115200);
// Wire.begin(SDA_PIN, SCL_PIN);
Wire.begin();
for (uint16_t i = 0; i < DATA_LIMIT; i++) {
writeEEPROM(i, VALUE);
}
for (uint16_t i = 0; i < DATA_LIMIT; i++) {
uint8_t value = readEEPROM(i);
Serial.print(i);
Serial.print(" -> ");
Serial.println(value);
delay(30);
}
Serial.println("End");
}
void loop() {
}
void writeEEPROM(uint16_t memAddress, uint8_t data) {
Wire.beginTransmission(EEPROM_ADDR);
Wire.write((int)(memAddress >> 8));
Wire.write((int)(memAddress & 0xFF));
Wire.write(data);
uint8_t result = Wire.endTransmission();
if (result != 0) {
Serial.print("'W'- F : ");
}
delay(10);
}
uint8_t readEEPROM(uint16_t memAddress) {
Wire.beginTransmission(EEPROM_ADDR);
Wire.write((int)(memAddress >> 8)); // MSB of memory address
Wire.write((int)(memAddress & 0xFF)); // LSB of memory address
Wire.endTransmission();
Wire.requestFrom(EEPROM_ADDR, 1);
if (Wire.available()) {
return Wire.read();
}
return 0;
}