I’m planning to use FM24CL16 EEPROMs in some projects. These are simple I2C EEPROMs but based on FRAM technology so they should last 10^14 of writes while typical 24Cxx chips only last one million. They are much cheaper on aliexpress than at my local distributor so I ordered 5pcs from this seller for about 40 cents each. Since my local distributor sells them 5 times more expensive I was a little bit suspicious if these are legit parts so I decided to test them.
I didn’t want to build anything with arduino or so, so I have used a simple USB to I2C interface with CH341A. I put the chip into SOIC clip:
and wrote a simple shell script:
!/bin/bash
i=0
function wverify {
./ch341eeprom -w $1 -s24c01
./ch341eeprom -r fram.bin -s24c01
if ! diff $1 fram.bin
then
exit 1
fi
}
while true
do
i=$(expr $i + 1)
echo $i
echo $i > iter.txt
wverify 01-00.bin
wverify 01-ff.bin
done
Using this method I was able to do about 121.200 successful full memory writes. Then I decided to break the process and run it on screen
since it was taking very long (the initialization is lengthy). After that I left it running for several hours until I reached over one million:
Wrote [128] bytes to [24c01] EEPROM
Read [128] bytes from [24c01] EEPROM
Wrote [128] bytes to file [fram.bin]
Read [128] bytes from file [01-ff.bin]
Wrote [128] bytes to [24c01] EEPROM
Read [128] bytes from [24c01] EEPROM
Wrote [128] bytes to file [fram.bin]
1052162
Read [128] bytes from file [01-00.bin]
Wrote [128] bytes to [24c01] EEPROM
Read [128] bytes from [24c01] EEPROM
Wrote [128] bytes to file [fram.bin]
Read [128] bytes from file [01-ff.bin]
Wrote [128] bytes to [24c01] EEPROM
Read [128] bytes from [24c01] EEPROM
Wrote [128] bytes to file [fram.bin]
1052163
Read [128] bytes from file [01-00.bin]
Wrote [128] bytes to [24c01] EEPROM
Read [128] bytes from [24c01] EEPROM
Wrote [128] bytes to file [fram.bin]
Read [128] bytes from file [01-ff.bin]
This was fine but I wanted more so I loaded kernel module for the device as described in the same post of mine. Using this, I was able to do much more writes in shorter time with following script:
!/bin/bash
i=0
function wverify {
i2cset -y 20 0x50 0x00 $1
val=`i2cget -y 20 0x50 0x00
`
if [ "$1" != "$val" ]
then
exit 1
fi
}
while true
do
i=$(expr $i + 1)
echo $i
echo $i > iter.txt
wverify 0x00
wverify 0xff
done
$ cat iter.txt 3413671
So my conclusion is that it’s worth the money. I’m not capable of testing 10^14 writes but the tested amount of writes is more than sufficient for my needs.