Hello everyone,
I have a problem I do not understand. I am using a ST M24M02-DR EEPROM (Datasheet). So I am accessing it with the Wire library.
It is all working fine, if I just read or write. If I first write and then read I get a NACK from the EEPROM after writing the address to read. Changing the address I want to read does not help.
The written and read data is correct. I really do not understand it. Removing the wire.begin() does also not help. It is necessary since the µc will go into sleep in between the operation.
uint8_t EEPROM::readCurrentAddress(void)
{
uint8_t controllByte;
uint8_t result;
uint32_t recByte;
_curAddress = 0;
controllByte = (uint8_t)0xB8;
digitalWrite(_writeControl,LOW);
digitalWrite(_select, HIGH);
Wire.begin();
Wire.beginTransmission(controllByte >> 1);
Wire.write((byte)0x00);
Wire.write((byte)_addressPos);
result = Wire.endTransmission();
if (result != 0)
return result;
Wire.requestFrom(controllByte >> 1,4);
for (int8_t i = 3; i >= 0; i--)
{
recByte = Wire.read();
Serial.println(recByte);
_curAddress |= (recByte << (i*8));
}
digitalWrite(_writeControl,HIGH);
digitalWrite(_select,LOW);
return result;
}
uint8_t EEPROM::writeCurrentAddress(void)
{
uint8_t controllByte;
uint8_t result;
controllByte = (uint8_t)0xB8;
digitalWrite(_writeControl,LOW);
digitalWrite(_select, HIGH);
Wire.begin();
Wire.beginTransmission(controllByte >> 1);
Wire.write((byte)0x00);
Wire.write((byte)_addressPos);
for (int8_t i = 3; i >= 0;i--)
{
Serial.println((_curAddress >> (i*8)) & 0xFF);
Wire.write((byte)(_curAddress >> (i*8)) & 0xFF);
}
result = Wire.endTransmission();
digitalWrite(_writeControl,HIGH);
digitalWrite(_select,LOW);
return result;
}
Thanks,
nuclear
Edit:
First reading, then writing works. Looks like the bus is not released correctly?