I2C Read Operation in TCA9539 I am using this TI device TCA9539 (http://www.ti.com/lit/ds/symlink/tca9539.pdf) with the pins A1 and A0 tied to ground resulting the write address to 0x74.



I don't have any issues writing to this device address and perform the necessary functions, however when I try to read registers using Arduino read functions, getting NACK there. Is 0x75 correct read address?

For second question:

Based on the device spec for read operation:


  Reading from a slave is very similar to writing, but requires some additional steps. In order to read from a slave,
  the master must first instruct the slave which register it wishes to read from. This is done by the master starting
  off the transmission in a similar fashion as the write, by sending the address with the R/W bit equal to 0
  (signifying a write), followed by the register address it wishes to read from. When the slave acknowledges this
  register address, the master sends a START condition again, followed by the slave address with the R/W bit set
  to 1 (signifying a read). This time, the slave acknowledges the read request, and the master releases the SDA
  bus but continues supplying the clock to the slave. During this part of the transaction, the master becomes the
  master-receiver, and the slave becomes the slave-transmitter.
  The master continues to send out the clock pulses, but releases the SDA line so that the slave can transmit data.
  At the end of every byte of data, the master sends an ACK to the slave, letting the slave know that it is ready for
  more data. When the master has received the number of bytes it is expecting, it sends a NACK, signaling to the
  slave to halt communications and release the bus. The master follows this up with a STOP condition."


This is the code I am trying to use,

Wire.begin();
Wire.beginTransmission(0x74); // start i2c transmission as write addr
Wire.write(0x01)              // the register i need to read from
Wire.beginTransmission(0x75); // start i2c transmission as read addr given 


I believe the device I2C read and arduino library functions for read is not making sense to me. Has anyone used this device for read?
The arduino i2c libraries expect a 7 bit slave address, not 8 bit address + r/w bit, and will manage the read write bit internally based on if you do a write or read.

So begin transmission 0x74

Write 0x01

End transmission

Begin transmission 0x74

Read n

End transmission