Hard Processor System Technical Reference Manual: Agilex™ 5 SoCs

ID 814346
Date 4/01/2024
Public
Document Table of Contents

5.8.6.6.7. Handling Private Transmit (Master Read) Transfers

The data transmission for a private master read is initiated by issuing a TX transfer command. The TX transfer command can be issued by writing the TX command data structure in to the COMMAND_QUEUE_PORT register.

The slave responds for a private read address with ACK when all of the following conditions are met:

  • TX Command is valid in the Command Queue
  • TX FIFO has data equal to either the data length size of the command or the TX_START_THLD size is met.
  • Response Queue Non-Full

Otherwise, the slave responds with NACK for the private read address.

To determine for which of the condition the NACK occurred, the controller provides further information as follows:

  • An additional interrupt INTR_STATUS[READ_REQ_RECV_STS] is asserted when there is no valid command in the Command Queue.
  • The CCC_DEVICE_STATUS[DATA_NOT_READY] bit is set when the data in the TX FIFO is not equal to data length size of the command or the TX_START_THLD.
  • The CCC_DEVICE_STATUS[DATA_NOT_READY] bit is also set if Response Queue is full.

Once the read address is acknowledged with ACK (accepted), the controller expects the application to provide enough data in the TX FIFO as specified in the TX command to avoid underrun condition.

In the PIO mode (non DMA) of operation, use the TX_BUF_EMPTY_THLD interrupt to fill the TX FIFO while the TX data is being transmitted on the I3C bus.

In the DMA mode of operation, the DMA request of the handshake interface is initiated when the TX FIFO empty location level reaches the programmed TX_BUF_EMPTY_THLD level.

When an underrun condition is encountered (when the system latency is high to provide the transmit data), the controller sets the UNDERFLOW_ERR bit of the CCC_DEVICE STATUS register and terminates the transfer on the I3C bus.

The controller, once it sets the UNDERFLOW_ERR bit, rejects (NACK) any further private transfer request from Master until the Master reads the device status through a GETSTATUS CCC and the slave application resumes the slave operation by setting the bit DEVICE CTRL [RESUME] bit of the register.

If the transmit FIFO does not have threshold amount of data to respond for the master read request, the controller NACKs the request and in CCC_DEVICE_STATUS[DATA_NOT_READY] bit is set.The controller, once it sets the DATA_NOT_READY bit, rejects (NACK) any further private read transfer request from Master until data is available in the transmit FIFO.

Note: In I2C mode of operation, if an underflow error is encountered in a read transfer, controller cannot terminate the ongoing transfer. The controller rejects (NACK) any further private transfer request from Master until the slave application resumes the slave operation by setting the bit DEVICE_CTRL [RESUME].