Hi David,
Actually I am passing valid address to the sensor, the problem is that I am trying to provide Bus recovery support in case my S/W implemented I2c peripheral code fails(Bit-banged).
In my case the sensor address is passed and then during the write operation, when passing the pointer byte to the sensor, which is passed as 0xFF(Not a valid pointer byte according the datasheet) to the sensor, the sensor generates a ACK.
Why is sensor generating ACK for invalid pointer byte?
Description
I have implemented the I2C interface on an C51 architecture(S/W) along with bus stuck recovery. To test the logic I inserted additional clock after passing the A0 (address bit) to the sensor i.e before writing the R/W bit on the bus,
this causes the sensor to sample the A0 bit which is zero in my case two time.
This makes the Sensor run a clock ahead, which now generated a ACK on the R/W (Though I want to read --> 1 but senor pulls the bus low --> 0 ) makes the bus zero (AND bus logic) and then master waits for ACK in the next cycle leaves the bus for the slave to drive, but as the slave is in write mode a clock pulse ahead as it sampled A0 two times, it thinks that the Master is writing the pointer Byte.
My code as it doesn't receive the ACK on the ninth pulse now run bus recovery( provides Clock), but as the sensor was in write mode this causes to pass a pointer byte on bus as 0xFF, but the mystery here is that though the sensor datasheet doesn't enlist 0xFF as valid pointer data byte it generates a ACK for that.
Can you please tell me why ACK is generated while writing a 0xFF as pointer byte?
I will post the wave form soon.