This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

writing to serial eeprom problem

I'm writting to AT24C128 serial eeprom as shown by the datasheet and the read command shown below works, while the write command doesn't. I wrote to the chip using external programmer and it was ok, reading from it works fine, but writting doesn't. Can anyone check this code for me ?

/******************************************************************************
* NAME: readAt *
* DESCRIPTION: This function reads a byte at a specified address *
******************************************************************************/
unsigned char readAt(unsigned int address)
{
unsigned char data1;
i2c_Start(); // make a start condition
i2c_SendAddress(ROM, 0); // 0 write 1 read
i2c_ReadAcknowledge(); // wait for acknowledge from eeprom
i2c_SendByte(address >> 8); // send upper byte of address to eeprom
i2c_ReadAcknowledge(); // wait for acknowledge from eeprom
i2c_SendByte(address & 0xff); // send lower byte of address to eeprom
i2c_ReadAcknowledge(); // wait for acknowledge from eeprom
i2c_Start(); // make a start condition
i2c_SendAddress(ROM, 1); // issue read command
i2c_ReadAcknowledge(); // wait for acknowledge from eeprom
data1 = (char)i2c_ReadByte(); // get data out of eeprom
i2c_Stop(); // finish the process
return(data1); // give data back to caller
}

/******************************************************************************
* NAME: writeAt *
* DESCRIPTION: This function writes a byte to a specified address *
******************************************************************************/
void writeAt(unsigned int addr, unsigned char data)
{
i2c_Start(); // start condition
i2c_SendAddress(ROM, 0); // 0 = write, 1 = read, ROM is 0xA0
i2c_ReadAcknowledge(); // wait for acknowledge from EEPROM
i2c_SendByte(addr >> 8); // send upper address byte
i2c_ReadAcknowledge(); // wait for acknowledge from EEPROM
i2c_SendByte(addr & 0xff); // send lower address byte
i2c_ReadAcknowledge(); // wait for acknowledge from EEPROM
i2c_SendByte(data); // write the data to EEPROM
i2c_ReadAcknowledge(); // wait for acknowledge from eeprom
i2c_Stop(); // stop
}


I connected the WP to gnd, but the chip seems not to write either for error in the datasheet or I tried to make a memory reset function as indicated by the datasheet but I still have this problem.
Thanks
Mahmood

0