I2C and wires.h confusion

I'm attempting to experiment with a Si570 oscillator using I2C communications with my Arduino. I'm having quite a bit of confusion attempting to use the wires.h functions, advised both by the official documentation and by forum examples.

I've found that there's a wires.h library (if that's the correct term) and also a TwoWire.h library, which have similar functions. Does one supersede the other?

In example code, some guys say that no data is received from the slave until you issue the endTransmission command, but others receive data without having issued that command.

In some examples, people read and write without giving a starting register address for the slave device. Isn't that address always required? I refer not to the bus ID of the device, but to register addresses within it.

I'd like to take one last shot at this before I give up and do it in assembler.

Anyone know of a clear and helpful tutorial on the subject?



Hi, I never worked with your device butr had a quick look at the datasheet. The si570 uses a repeated start-condition in the read-command. Baad news is that the "official" Ardiuino I²C library "Wire.h" doesn't support this feature.

There are people who solved this issue by using other libraries than Wire.h for instance here : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1214872633 Eberhard

Well, as happens too often, it was just a foolish error on my part. The Si570's I2C bus address is 0x55, not 55 decimal. Doh!

Now I'm successfully reading out the chip's register data.