Like write messages, read messages can be handled most efficiently by using the full 4 bits of the buffer, TXBUF in this case. With automatic address acknowledgement, the Read command can be handled almost as efficiently as the write command. This is especially true of the simplest case, which is I2C specific, not supported in the PMBus – read only. Here is the sequence diagram:
- DATA_REQUEST is set tDREQ1 nanoseconds after the falling edge of the clock for the last bit of the address.
- The firmware reads from PMBST, clearing the DATA_REQUEST bit. Since one byte is being sent out, the firmware needs to make sure that TX_COUNT is set to 1.
- Next the firmware needs to write the byte to TXBUF. It takes ttxbwrite ns after the write for any clock stretching of the ACK to be ended. If the firmware is fast enough, no clock stretching will occur.
- As soon as the data starts being transmitted, the TXBUF is transferred to the shift register
- The EOM bit will be set tEOM ns after the falling edge of the data line indicating the stop signal.
- The firmware needs to read the PMBST register, which will clear the EOM bit.
- Then the firmware needs to write to the ACK register. This is just an internal ACK to tell the interface that the EOM has been detected. The ACK bit is cleared immediately, since there is no wait for an external ACK to complete.
- Like the write message, there is no clock stretch until a valid address is detected. If the ACK is written to before this, there is no clock stretch at all.
Note that the A with a 1 below and with no grey background means a NACK from the master, which is appropriate for the last byte of a read message.