AnsweredAssumed Answered

sequence for writing to and reading from I2C EEPROM

Question asked by mehdikarimibiuki on May 2, 2014

My chip is MK60DN512VLL10 and I am using I2C1 for writing to and reading from an external EEPROM that we have on our board. I checked with the datasheet of the EEPROM and it gives the following sequence. My I2C is isr based such that when sent and received are true I come out of the following while loops. The datasheet for the EEPROM is located at: http://www.xilinx.com/products/boards/ml505/datasheets/6485.pdf

My I2C device 7-bit address is 0x57.

 

main () {

UINT8 Data[10];

UINT8 passin;

UINT16 addr16;

UINT8 putin[5];

 

//1-WRITING (look at page 9 of the EEPROM link I provide):

passin = 0x57;

I2C1_SelectSlaveDevice(I2C1ptr, LDD_I2C_ADDRTYPE_7BITS, passin);

 

addr16 = 0x0000; //select address 0x0000 in EEPROM

Sent = 0;

I2C1_MasterSendBlock(I2C1ptr, &passin , 2, LDD_I2C_NO_SEND_STOP);

while (Sent == 0){}

 

passin = 0xAA; //write value 0xAA to that address

Sent = 0;

I2C1_MasterSendBlock(I2C1ptr, &passin , 1, LDD_I2C_NO_SEND_STOP);

while (Sent == 0){}

 

//2-READING (look at page 11 of the datasheet I provided):

passin = 0x57;

I2C1_SelectSlaveDevice(I2C1ptr, LDD_I2C_ADDRTYPE_7BITS, passin);

 

addr16 = 0x0000; //select address 0x0000 in EEEPROM

Sent = 0;

I2C1_MasterSendBlock(I2C1ptr, &passin , 2, LDD_I2C_NO_SEND_STOP);

while (Sent == 0){}

 

  passin = 0x57;

  I2C1_SelectSlaveDevice(I2C1ptr, LDD_I2C_ADDRTYPE_7BITS, passin);

 

  Received = 0;

  I2C1_MasterReceiveBlock(I2C1ptr, putin, 5, LDD_I2C_SEND_STOP);

  while (Received == 0){}

  printf("E2PRM reading: 0x%x 0x%x 0x%x 0x%x 0x%x\n", putin[0], putin[1],putin[2],putin[3],putin[4]); //READING VALUES

 

}

 

But I do not get the 0xAA back. Why? Is there any other way to do this? Or am I making any mistakes here?

 

I am reading all 0xff back!

"E2PRM reading: 0xff 0xff 0xff 0xff 0xff"

Outcomes