Is there another part in the TI family with a datasheet that goes into more detail regarding more specifics on the i2c communication with this device? Specifically, where can I find more specific detail on what are called frames?
I have the May 2020 version of the datasheet, downloaded just a couple of days ago. The parts I'm working with are not exactly behaving in accordance with the datasheet. I'm using the OpenCores I2C controller IP in an FPGA implementation.
Section 8.3.10 Output Data Format, Figure 25. Data Frames for Reading Data, frame A: Reading ADC data. The I2C transaction to read just one sample seems to indicate that, after reading the second byte, the host should generate an ACK. (and presumably, a STOP) condition. For a read of just one ADC sample, prior to the host sending the STOP, the host should NACK the last byte, then STOP. If the last byte of the ADC sample is ACK'd, subsequent I2C transactions are garbled. This behavior is consistent with many other I2C devices (TI and others). On a multi-byte read, the host does not ACK the last byte.
Section 8.4.1 Device Power-Up and Reset "The device can be reset by an I2C general call (00h) followed by a software reset (06h), by setting the RST bit, or..." Is the detailed timing of this given anywhere, such as the datasheet of another TI device? The sequence I came up with was:
S [device i2c addr] [write bit=0] <ACK from device> [00b] <ACK from device> [00b] <ACK from device> P
It doesn't work. I can reset by writing the RST bit in register 1, but the above sequence doesn't seem to work. Do I need a restart between the two bytes?
Section 8.5.1.1 Single Register Read, Figure 34. Reading Register Data. The diagram suggests that, after sending the register address and getting an ACK from the ADS7128, the host (could? should?) send a STOP/RESTART, then START. The only way I could get it to work was a single RESTART at that point. A STOP won't work, and I doubt 2 consecutive START conditions will, either. Also, as in the case above, the host should not ACK the last byte before the STOP condition. Again, subsequent I2C transactions are garbled.
I know this is a lot, but I tried to soften it a bit by offering tips for others using this device. Thanks
-Mark