The EEPROM on the mainboard is an ATMEL AT24C04, 4k bit, two wire (I2C) serial EEPROM. The datasheet for it can be found here. This EEPROM is used to store the V2s programs. If you want to interface to the EEPROM I would recommend building the "Easy I2C Bus Interface" which can be found here, you can see the simple schematic for it here. You don't need the two 4.7k pullup resistors since the pins are already pulled up. Its very easy to read out the contents using PonyProg, as opposed to the way I did it, which was programing a microcontroller to do the talking for me.it seems that all the device address pins are grounded.

Memory Map

Address Range
Function
0x000 - 0x038
Right Positional Program
0x039 - 0x071
Left Positional Program
0x072 - 0x0E3
Main Positional Program
0x0E4 - 0x0FF
Unused
0x100 - 0x128
Main Controller Program
0x129 - 0x12F
Unused
0x130 - 0x158
Vision Controller Program
0x159 - 0x15F
Unused
0x160 - 0x188
Sound Controller Program
0x189 - 0x1FF
Unused

 

Positional Programs

The Positional programs all use an 8 byte instruction code that represents the state of the V2 at each step. The first instruction always represents the state of the V2 when it entered the programing mode. The last byte of the range (0x038, 0x071 or 0xE3) represents the number of instructions in the program (0x00 - 0x06 for the Right and Left Positional programs and 0x00 - 0x0D), when the program is cleared the instructions are not erased, rather the number of instructions is set to 0x00.

I am still working on interpreting the 8 byte instruction code, so what follows is not to be considered entirely accurate.

8 Byte Instruction Code

Byte
Function
1st The 1st byte of the instruction represents the state of the feet touch sensors. The first four bits are always 0, the last four bits are all active low (ie, 0 when pressed, 1 otherwise) and represent the Front Right, Back Right, Front Left and Back Left buttons.
2nd The 2nd byte of the instruction represents the position of the Right Wrist encoder.
3rd The 3rd byte of the instruction represents the position of the Left Wrist encoder.
4th The 4th byte of the instruction represents the position of the Right Shoulder pot.
5th The 5th byte of the instruction represents the position of the Left Shoulder pot.
6th The 6th byte of the instruction represents the position of the Waist Rotate Left / Right pot
7th The 7th byte of the instruction represents the position of the Waist Tilt Forward / Backward pot
8th The 8th byte of the instruction represents the position of the Waist Tilt Left / Right encoder.

Controller Programs

The Controller programs all use a 2 byte instruction code. The first byte is the same as the IR signal for the button pressed without the 0x3 prefix. These can be found here. The second byte of the instruction is a repetition code (valid range of 0x0 - 0x1D), which I beleive may be specific to functions involving the right stick. Otherwise the second byte is always 0x0. The first byte in the range (0x100, 0x130 or 0x160) represents the number of instructions in the program (0x00 - 0x14), and like the Positional programs, when the program is cleared the instructions are not erased, rather the number of instructions is set to 0x00.