Fun with EEPROMs

While cleaning away some old crap that I had lying around I stumbled upon some old Sony AIT backup tapes that should have been thrown away a long time ago.

 

Sony SDX1-25C AIT MIC cassette

 

Since I’m having a “disassemble-everything” phase right now I couldn’t resist breaking them apart and I found an interesting little ID chip inside each of the cassettes.
Some research showed that these chips are called Memory-In-Cassette chips or MIC chips and are available on all AIT tapes and other tapes such as DV tapes.
The AIT-1 w/ MIC specification reveals that these chips are regular I2C EEPROM chips meant to hold useful information about the tape like how many times it’s been used.

 

Back side (left) and front side (right) of MIC chip. Front side pins are numbered 1 to 5 starting from the left.

 

I thought it would be fairly easy to read and write these from the Arduino and for my convenience these Sony chips were even mounted on a nice little breakout board.

The pin-out of the board is described in the AIT reference as 1=Vcc, 2=SDA, 3=ID, 4=SCL, 5=GND and the ID pin isn’t even used in the AIT-1 spec so we are left with Vcc, GND, Data and Clock.

I hooked one up to my UNO and started experimenting with this example from the Arduino playground as a starting point. I used external 10K pull-up resistors for Clock and Data but I guess the internal pull-up would work as well.
I wasn’t sure which chip model was on this board because I couldn’t make anything out from the markings. The AIT specs said “The capacity of the MIC shall be indicated on the top side of the case” so I figured 64 means it’s a 64kbit (8x8KBytes) chip.
The examples in the spec were based on an ST25E16 EEPROM where E0 was wired to Vcc and E1 ad E2 to GND. After reading it a couple of times and scratching my head I decided it must have an I2C address of 1010001 or 0x51 in hex based on 1010 as device code because the chip in the example had that (for tape drives to be able to talk to these tapes, all tapes must have the same I2C address, right?) and 001 as device select code (E2=GND, E1=GND, E0=Vcc).

 

Arduino hooked up to a MIC chip

 

After adapting the code according to my findings and firing up, the code did not return any readings from the chip except for null chars. Writing some bytes first didn’t help either. I tried some nearby addresses in case my calculation was a bit off but I didn’t find the right one until I looped through I2C addresses from 0 to 128 and dumped a byte from each device address. I got a lot of null chars and a single char that wasn’t null so that had to be the one.
It turned out the chip had address 0x54 or 1010100 (close but no cigar) so either I read the specs wrong or the order of the chip select pins are incorrectly documented in my document.
It doesn’t matter to me. 0x54 it is.

Some of the text coming out from my EEPROM clearly indicates that i’s working beautifully:

S_LINE  THAILAND THOMSON MICDE16
SONY SDX1-25CGENERIC
Copyright (C) 1997 Sony Corporation All rights reserved.

The functions in the sketch from the playground doesn’t support addressing large address spaces at a time so to write larger chunks of text some logic is needed that breaks down the text to write it a byte at a time.

I know the Arduino has built-in EEPROM and this experiment was just for fun.

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s