SurferTim:
With a little testing, I think I found your bug. If either the SCK or SDA lines are held LOW by the slave, the I2C bus will crash the Arduino. Is that what you think may be happening? Do you have an o-scope to test with?edit: If the SDA or SCK lines are resistive (I used a 1K resistor to ground) the arduino doesn't crash, but the I2C bus freezes.
The slave is allowed to hold SCL low. It is called clock stretching. That how the slave can slow down the master.
A misbehaving slave that asserts this improperly can cause problems.
Just like a misbehaving slave that asserts SDA when it's not supposed can also cause issues.
I have an i2c LCD module that only supports i2c writes. If you attempt to read from it, it seems to ignore the read/write bit/address and asserts SDA low on the end of a read which screws up the STOP and hangs the AVR wire library.
The only way to resolve something like this will be with a logic analyzer.
One thing that is also needed to know is what value resistors are being used on the SDA and SCL lines.
If external resistors are not being used, then all bets are off since the internal pullups inside the AVR are simply not strong enough and all kinds of odd things and issues can happen.
--- bill