Other Parts Discussed in Thread: SYSCONFIG
We are trying to read the Temperature registers on the TMP100 using an arm chip and face an issue that the 2nd byte is not being sent by the slave. I found this an earlier thread: https://e2e.ti.com/support/sensors/f/1023/p/127472/1625495?tisearch=e2e-sitesearch&keymatch=TMP100%252520resolution#1625495
That states an I2C Read shall be sent as follows:
to Read register 0 (temperature register) you should do the following:
- Start I2C bus by master
- Transmit slave address 0x98 (write)
- TMP100 will ACK
- Transmit pointer register address 0x00
- TMP100 will ACK
- Start I2C bus by master
- Transmit slave address 0x99 (read)
- TMP100 will ACK
- Read byte 1 from TMP100 register
- Master will ACK
- Read byte 2 from TMP100 register
- Master will ACK
- Stop I2C bus by master
while the data sheet specifies the following in Section 7.3.3:
Acknowledge: Each receiving device, when addressed, is obliged to generate an Acknowledge bit. A device
that acknowledges must pull down the SDA line during the Acknowledge clock pulse in such a way that the SDA
line is stable LOW during the HIGH period of the Acknowledge clock pulse. Setup and hold times must be taken
into account. On a master receive, the termination of the data transfer can be signaled by the master generating
a Not-Acknowledge on the last byte that is transmitted by the slave.
Since we are in Master receive mode, shouldn't step 12 be a NOACK? We did achieve some success with changing step 12 to a NOACK but I want to confirm which is technically correct since we will need to make changes to our i2c to support this specifically. Thanks so much!