I've set up a state machine in a PLD to initialize and periodically read the ADT7310. The inital transaction is a reset by sending the recommended 32 clock pulses with the data input held high. The next transaction is a read from the internal ID register by sending a 0x58 followed by an additional 8 clock pulses. The data returned is always either 0x00C3 but sometimes the LSB of the command byte results in an extra one being returned on the data out line so the returned value is 0x01C3. This is problematic because I'm using the 0x00C3 to determine what sensor is present. Why is the device occasionally putting the leading one one last clock pulse of the command byte?
Since the device has been properly reset, I assume it is continually performing temperature conversions and placing the most recent data into the Temperature register. However when I periodically read the Temperature register contents by sending an 0x58 command byte followed by 16 additional clocks, the data returned is always 0x0000. The same is true if I send the continuous read command of 0x54 and followed initially by 16 clock pulses and subsequently by sending just 16 clocks without a command byte. The chip select is being returned high between every SPI transaction.
I don't have easy access to read all of the registers after a reset due to PLD limitations. Additionally I've tried setting the config register for both one shot mode and 1 SPS mode trying to get at least one valid temperature reading but have not been successful. Each SPI transaction is 1 second apart.
Does the chip select have to remain low in order to perform conversions? Figure 16 of the data sheet suggests that the CS should remain low for all subsequent continuous reads but the specification is not explicit. Also the following paragraph is confusing:
In continuous read mode, the temperature value register cannot be read when a conversion is taking place. If an attempt is made to read the temperature value register while a conversion is taking place, then all 0s are read. This is because the continuous read mode blocks read access to temperature value register during a conversion.
If the device is setup for continuous conversions, as per a RESET setting the configuration register to all zero's, the paragraph implies the data cannot be read (will return all 0's ) until the device is taken out of continuous conversion mode (Config register bit 6 and 5 set to something other than 00). Is this correct?
I have reconfigured my state machine to skip the read of the identification register after the reset then going directly into continuous read mode and this works properly. Does a read from the ID register take the device out of continuous conversion mode?