The AT24C01 and the AT24C01A

at24c01_at24c01aYesterday I was working on the mirror switch which is a network switch with static port mirroring config. This basically mirrors all traffic on one port to a second interface which lets you monitor and inspect traffic.

The switch loads config from a small EEPROM. The datasheet specifies a 24C01~16… I picked up some more AT24C32s which looked compatible with the AT24C01A and ordered a few AT24C01As… of course it didn’t work. Which led me down the rabbit hole.

These EEPROMs use a 2-wire protocol, basically serial clock and an I/O pin that switches between input and output based on the serial instruction. I spent some quality time with a scope trying to figure out why exactly the AT24C32 wasn’t working. It’s a 2-wire EEPROM in the same series… seemed like it should work.

After some head scratching I looked again at the datasheet. It specifies a 24C01… no A… The AT24C01 has long been deprecated by Atmel. But looking at the parts the AT24C01 and AT24C01A seem similar… largely compatible pinouts (just some added address lines)… they have the same function…

at24c01_va_protocol

Protocol differences between the at24c01 and at24c01a

at24c01_va

Differences in the block diagrams..

But the protocol is different. Somewhere between the AT24C01 and AT24C01A Atmel decided that they needed per device addressing. Each command sent to the device therefore includes the device address, making the part non-backward compatible.

What’s interesting is that AT24C01 style parts are still being used in current generation products in Shenzhen. You can find knockoff AT24 C01s as jellybean parts on taobao. My guess is that somewhere around the release of the AT24C01 the ecosystem decided to standardize on this for a bunch of products and that was that.

Outside of Shenzhen things moved on, while Microchip has a great compatibility chart showing common devices compatible with the AT24C01, almost none are available (in fact many of the companies they mention don’t even exist anymore). There’s a single part on digikey which looks like it should be compatible… the 24AA01. Which is on it’s way to me… I live in hope (UPDATE: neither the 24AA01-I/SN-ND or 14C01BT-I/SNCT-ND which I purchased from digikey appear to be compatible despite the compatibility matrix saying they are, closer inspection of the datasheet kind of implies this, I’m working on another solution).

What’s interesting to me is that all this is probably common knowledge in Shenzhen, and a 5min chat at a EEPROM booth would probably reveal all… but for me it’s half a day of debugging. 🙂