Testing chinese FRAMs

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.