I've never dived into the I2C protocol too much. However, I started doing a bit of a dive recently and noticed that I have some code in PropWare which is sending a NACK instead of an ACK after the last byte that a master reads. This seems crazy to me. Why would the master ever be coded to explicitly send a NACK? Here's an example:
![i2c_no_ack.png]()
And this read sequence returns 0x01 to the calling function, so the master is indeed reading the value from the slave correctly.

And this read sequence returns 0x01 to the calling function, so the master is indeed reading the value from the slave correctly.