I've found that I2c._sendAddress(address) is actually sending the address shifted right one bit. For example, if address is 0x30 then I2c._sendAddress(address) actually sends 0x18. As a workaround I have to use I2c._sendAddress(address << 1);