We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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