I have developed several products using the ADUC834 processor in the 52-pin package. I use the I2C peripheral to communicate with a Microchip MCP9801 temperature sensor device.
During development, and for most of our production, we have had the code running correctly, and temperature data received correctly. Lately, however, we have been seeing units where the MCP9801 received data is either 0x8000 or 0x7fff, as read by the I2C port and software. When I look at the data actually being sent by the MCP9801, I see data that varies with temperature, as i would expect.
The layout of the PC board is such that the MCP9801 is near one edge of the board, where it is more exposed to being touched while the PC board is being handled, so my first thought is that somehow, the I2C data pin has somehow been damaged as an input - the output data sent to the sensor part looks fine.
I don't understand how my code could work on some units but not others.
Anyone had any similar experience with the I2C peripheral?
I am attaching my I2C interface code.