I'm experiencing a strange behavior I can't explain. I have a product that has an LM73 in it. I communicate with it using an FTDI USB device on which I bit-bang the I2C/SMBus interface. When polling the device I always read the status/control register to insure it has the resolution setting I want to use.
On my test bench this works great. I can write the register address, do my repeated start and read the register.
When I move my unit into the temperature chamber I experience a strange behavior. If I address the LM73 for a read, it ACK's and provides the temperature data as the pointer register is 0 at startup. If I address the LM73 for a write however, it NACK's the address.
I used a scope to capture the communication waveforms to see if I could see the issue. It made me realize I was mistakenly using a 5V controller on my bench instead of the 3.3V I'm powering the LM73 with. Because of this I went ahead and tried the 5V cable in the chamber, hence why all these use 5V(Also helps clarify that the LM73 is pulling the line high, not the controller by mistake).
Here is the successful read of the control/status from the bench (Top - SDA, Bottom - SCL):
And the failed one from the chamber (it tries a couple more times after that):
And just a quick peek at it working for a read in the chamber (from later in the above capture after it gave up on the control/status byte)
This strange behavior of ACKing a read but not a write has me stumped. If it didn't work at all then I would know it's a connection, voltage drop (the communication wires are much longer in the chamber) or timing issue (the chamber computer does the bit-bang slower as you can see above) but if it were any of those a read wouldn't work either. Does anyone have any insight on what might be happening?