I2C Snoop

I have a custom board with a Phillips tuner on it and I would like to see what stations are being tuned. The tuner uses I2C so I figured I could listen in using the Wire library and then parse the output.

Neither receive() or onReceive() seem to show anything, I assume they only show responses for requests sent from the arduino itself, not another master.

Is there a way I can snoop on the I2C bus and just receive everything sent across it?

Thanks.

You can connect the Arduino on the same bus. But you'll need to figure out the address and protocol for the tuner and actually read the value. The datasheet should be helpful at that point. Also, I believe the Arduino allows you to choose its address, so if you figure out which address the tuner talks too maybe you could do a man-in-the-middle kind of thing. But reading from the tuner seems far simpler, it just means you'll need to pool the tuner either on request or every so often if you want to keep everything in sync.

I have a custom board with a Phillips tuner on it and I would like to see what stations are being tuned. The tuner uses I2C

Sounds interesting. Care to share details about the custom board, or at leat which tuner IC you're using?

-j

We are using the following phillips tuner:

FM1236 MK3 RTMA M/N Desktop Video & FM Radio Module

Its on a custom board as part of a piece of fitness equipment.

Basically we want to know when it changes channels, so a man in the middle approach would be best.

Otherwise if I knew the address I could just try to request it every few seconds.

I2C addresses are always predefined. Usually by 2 or 3 bits. Look at the datasheet, it should mention the addresses the IC uses, and which pins set the address. After that you could quickly figure out the address of the device. As for a man in the middle type of thing; once you have the address, you could try putting the Arduino on the same I2C bus, set it as a slave and give it the same ID.... I'm not sure if that'll work, but since you'll be connected anyway, it's worth trying!

I2C addresses are always predefined. Usually by 2 or 3 bits. Look at the datasheet, it should mention the addresses the IC uses, and which pins set the address. After that you could quickly figure out the address of the device. As for a man in the middle type of thing; once you have the address, you could try putting the Arduino on the same I2C bus, set it as a slave and give it the same ID.... I'm not sure if that'll work, but since you'll be connected anyway, it's worth trying!

Thanks for the advice, the data sheet is here: http://dl.ivtvdriver.org/datasheets/tuners/FM1236%20Mk3_Oct_18_01.pdf

Looks like there is an address selection pin, I could read the voltage on an arduino analog pin and then set the address accordingly.

I'll give that a try and let you know what I find out.

I don't know how far you've got but if you're still stucked, I think this may really help!

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1192228140/0#1

Cheers!