I2CWRITE writing Strings to EEPROM
Undocumented Feature?
On one of my current projects I had the challenge to store about 300 strings
(up to 20 chars each)
The strings contain system messages
and a (very) complex menu structure.
I decided to store the strings in an external EEPROM (24FC512)
which was already on board for data logging.
After having done some first tests I had to realize that
every time when I had a firmware update that required changes in Menu text or system messages
I had to take the EEPROM off the board, reprogram it and plug it back.
This is certainly nothing a customer could do.
So I thought I needed some kind of Loader for the EEPROM.
The trick is:
Write the string to the EEPROM:
(The PBP Manual doesn't tell this is possible)
IC2WRITE SDA, SCL, ADR, [20,"This is my String #1"]
where 20 is the length of the srting.
My finding is:
This "Page Write" works great as long as ADR is a multiple of 32.
(haven't tried odd multiples of 16 as my Strings are up to 20 bytes)
Next step is to "compress" the Data we have just written to the EEPROM.
(We used up 32 bytes for 21 Bytes of information)
Read the EEPROM content bytewise and write it back bytewise
and use a multilpe of 21 for the starting address of a new string.
And finally (if you want to) fill up all "unused" locations with $FF
So in case the Strings in EEPROM are to be updated along with Firmware of the PIC
all the customer needs to do is:
Flash the device twice,
1st with the EEPROM Loader that does the EEPROM update
and then with the latest Firmware.
regards
Ralph
Problem with wasted Space in Page Writing to EEPROM
Using the same 25LC512 EEPROMs, I have a similar issue I think...
I write 36 bytes per record which I get every .25 seconds.. maybe faster. I want to write these to EEPROM, but not take a whole page (128b). I understand I can't write to addresses in the size I want, ie 0, 36, 72, 108, 144, etc, but rather only 0, 128, 256, etc.... This leads to massive waste of space
How does one make use of the unused EEPROM space? I can't write byte at a time because it takes too long...
1. If I page write to anything from 0 to 128 will it overrite that page?
2. Should I be thinking about a way to save data into a string that is 128b long before writing it? Like perhaps creating a 'superstring' that has 3 x 36 bytes, and write that (only wasting 20b per page?)
Thanks,
Tom