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.
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.
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).
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.