MCT8329A read operation over I2C involves the following sequence.
I2C start condition.
The sequence starts with I2C target Start Byte.
The Start Byte is followed by 24-bit Control Word. Bit 23 in the control word has to be 1 as it is a read operation.
The control word is followed by a repeated start or normal start.
MCT8329A sends the data bytes on SDA. The number of bytes sent by MCT8329A depends on the DLEN field value in the control word.
While sending data bytes, the LSB byte is sent first. Refer the examples below for more details.
16-bit/32-bit Read – The data from the address mentioned in Control Word is sent back.
64-bit Read – 64-bit is treated as two 32-bit read. The address mentioned in Control Word is taken as Addr 0. Addr 1 is calculating internally by MCT8329A by incrementing Addr 0 by 2. A total of 8 data bytes are sent by MCT8329A. The first 4 bytes (sent in LSB first way) are read from Addr 0 and the next 4 bytes are read from Addr 1.
MCT8329A takes some time to process the control word and read data from the given address. This involves some delay. It is quite possible that the repeated start with Target ID will be NACK’d. If the I2C read request has been NACK’d by MCT8329A, retry after few cycles. During this retry, it is not necessary to send the entire packet along with the control word. It is sufficient to send only the start condition with target ID and read bit.
If CRC is enabled, then MCT8329A sends an additional CRC byte at the end. If CRC is enabled, external MCU I2C controller has to read this additional byte before sending the stop bit. CRC is calculated for the entire packet (Target ID + W bit, Control Word, Target ID + R bit, Data Bytes).