Proper way of handling fonts in memory

I'm making a very simple terminal. It consists of ATMEGA328, which outputs text on an LCD represented by the fonts read from the EEPROM (24LC).

Each character of the font consists of 9 bytes (each bit representing "color"). All the characters are stored one after another. Here's an example of the letter 'B':

I'm calculating the memory location of each character in order to avoid using an cross reference table the following way:

ASCII_VALUE_OF_THE_CHARACTER * 9 = character_memory_location;


So far so good, but the problem is: I cannot load all the fonts into a character array, because the ATMEGA328 has only 2kB of SRAM.

I decided to read the EEPROM directly each time I need to draw a string, but that leads me to my second problem - reading the EEPROM to death.

The datasheet states "More than 1 Million Erase/Write Cycles", but that doesn't seem to be much at all, considering just to render the text from my post would take 1,432 read cycles and would kill the memory in no time, so I believe I'm heading towards the wrong direction.

I could use some 'hacks' and pre-load or cache most frequently used characters into SRAM or use some kind of simple compression algorithm, or add multiple EEPROM's to balance the load, but I would much prefer a proper clean solution.

What would be the proper solution to solve this problem in order to keep the hardware working for as long as possible? Thanks!

• when reading something, you don't trigger a write/erase cycle – Marcus Müller Mar 7 '17 at 23:56
• @MarcusMüller ohh I didn't realize that!! To confirm, that means I can read it 'infinitely'? Is there some kind of limit? – Kristian Mar 8 '17 at 0:00
• Your micro has flash, too... Why not store it in flash? – peufeu Mar 8 '17 at 0:39