Hard Processor System Technical Reference Manual: Agilex™ 5 SoCs

ID 814346
Date 11/27/2024
Public
Document Table of Contents

5.8.6.3. Simple-Transfer DMA (SDMA) Handshake

The I3C controller has a handshaking interface to an external DMA Controller (DMAC) to request and control transfers. These transfers are exclusively for fetching of the transmit and the receive data and not for fetching the I3C command or for posting of the I3C response to the memory.

When the I3C controller operates in a master mode communicates with an external DMA controller, the DMAC is always the flow controller for the TX and RX channels, that is, the DMAC controls the block size. The block size must be programmed by the software in the DMAC. The DMAC always transfers data using DMA burst transactions if possible, for efficiency. For more information, see the DMA controller chapter.

When the I3C controller operates in a slave mode, the external DMAC is the flow controller for the TX channel and I3C is the flow controller for the RX channel.

As a block flow control device, the external DMA controller is programmed by the processor with the number of data items (block size) that are to be transmitted or received by the I3C. This is programmed in the BLOCK_TS field of the DMAC I3C channel’s CTL register.

The block is broken into a number of transactions, each initiated by a request from I3C.

The DMA controller must also be programmed with the number of data items to be transferred for each DMA request. This is also known as burst transaction length and is programmed into the SRC_MSIZE/DST_MSIZE fields of the DMAC channel CTL register.

The programmed values for the MSIZE must be same as that programmed in DATA_BUFFER_THLD_CTRL register in RX_BUF_THLD and TX_EMPTY_BUF_THLD fields for source and destination respectively.