Problem with reading and writing EEPROM

I have copied the code found elsewhere into eeprom.h and eeprom.c and all I can get in the read is 0xFF. I have tried manual reads of the eeprom using the raw code

// Load address into address register
EEADRH = 0;
EEADR = 1

//Configuration as per manual
EECON1bits.EEPGD = 0;
EECON1bits.CFGS = 0;
EECON1bits.RD = 1;

printf("eeprom read address High %d, Low %d, Value %d
",
(int) EEADRH, (int) EEADR, (int) EEDATA);

I have a similar printf statement in the write eeprom routine and all I get is 0xFF for data reads.

I will try a direct write in the initialize area and then modify the code to do a direct read in the initialize area to see if that works.

Any other suggestions?

Dave Kolberg

Hmm…

First off, for anyone who missed the original discussion on EEPROM, I suggest you go check that out.

That being said, 0xFF is the inital value of the EEPROM unless data is written to it. So your problem is with your write function.

Could you post your function calls to the EEPROM library?

I have tried writing the following in the User_Initialization routing:

EEADR = 1;
EEADRH = 0;
EEDATA = 5;

EECON1bits.EEPGD = 0;
EECON1bits.CFGS = 0;
EECON1bits.WREN = 0;
INTCONbits.GIE = 0;
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1;
INTCONbits.GIE = 1;
EECON1bits.WREN = 0;

downloaded and ran once then changed to the following:

EEADR = 1;
EEADRH = 0;

EECON1bits.EEPGD = 0;
EECON1bits.CFGS = 0;
EECON1bits.RD = 1;

printf("eeprom read address high %d, low %d, value %d
",
(int) EEADRH, (int) EEADR, (int) EEDATA);

and the value printed is 255

Dave

Actually, your write command should be this

EECON1bits.EEPGD =0;
EECON1bits.CFGS =0;
EECON1bits.WREN =1;
INTCONbits.GIE = 0;
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1;
INTCONbits.GIE = 1;
EECON1bits.WREN = 0;

The difference being WREN is set to 1 the first time, not 0.

That fixed it, it works. Thank you, Thank you, Thank you.

Dave
SBOTZ
Team 1327