While I can perform full reading/writing of the 8-bit registers, I'm having trouble with the 16-bit channel regs. I have verified my ability to read/write by reading Manufacturer ID Register 0x3E as 1 and revision as 9 and I can also write values to the Interrupt Mask Register and read them back so I think there's nothing wrong with my hardware or basic understanding.
However, as per Figure 31, the 16-bit channel value readings make no sense to me. As a basic test, I expect to read temperature in channel 7 (using mode 0). The first issue is interpreting the format based on what I can understand from the datasheet. As well as reading the datasheet I have searched these forums but still have no definitive answer as to how the channel values are padded. Regardless, no interpretation I can guess at makes sense of the values I get.
So, having initialised the IC into mode 0 (as per 9.2.2.2.1 Quick Start) I always get temperature readings in channel 7 that make no sense, although the values do increase/decrease as I gently warm/cool the part. I have analysed the I2C bus with a scope and placed a 100R between microcontroller and SDA (1K pull-ups on SDA & SCL on the slave side) which allows me to check whether it is the master or slave asserting the lows. Everything look OK to me and the data received and reported by the microcontroller agrees with what is shown on the scope. The following sequence of scope shots shows the problem:
(Note the assertion of SDA by the slave is visible as a 0.2V drop)
I understand the datasheet as saying the 16-bit vales are read back MSB first and padding is in the higher value bit positions (not explicitly stated though). The temperature is stated as being x 2 so I expect 22'C ambient to return 44. However I see nothing like this. I do notice that by ignoring the datasheet and treating the top-bit of the second byte as decimal 0.5 then the first byte does indeed make sense as temperature directly in degrees, with the fractional part split over in the LSB. This would actually be a sensible encoding scheme.
Assuming I can resolve the above issue, my other question is whether it is legitimate to read all channels by presetting the first address and continually clocking out successive bytes as per the two-byte read as per "Figure 31" - i.e. just keep clocking for as many pairs as required.