I am reading 256 bytes using a FlexSPI IP command DMA read on an RT1050 custom board. The first 128 bytes are correct, but the second 128 bytes repeat the first 128 bytes. Is it correct that it is not possible to read more than the RX FIFO size in one IP command read transfer, and that I need to use an AHB read instead?
Code is below.
AT_NONCACHEABLE_SECTION_ALIGN(uint32_t destAddr[256], 8);
edma_handle_t txEdmaHandle, rxEdmaHandle;
flexspi_edma_handle_t flexspiEdmaHandle;
#define FLEXSPI_DMA_TX_CHANNEL 1
#define FLEXSPI_DMA_RX_CHANNEL 0
#define NUM_BYTES_RX 256
edma_config_t userConfig;
DMAMUX_Init(EXAMPLE_DMAMUX);
DMAMUX_EnableAlwaysOn(EXAMPLE_DMAMUX, 0, true);
DMAMUX_EnableChannel(EXAMPLE_DMAMUX, 0);
EDMA_GetDefaultConfig(&userConfig);
EDMA_Init(EXAMPLE_DMA, &userConfig);
EDMA_CreateHandle(&rxEdmaHandle, EXAMPLE_DMA, FLEXSPI_DMA_RX_CHANNEL);
EDMA_CreateHandle(&txEdmaHandle, EXAMPLE_DMA, FLEXSPI_DMA_TX_CHANNEL);
FLEXSPI_TransferCreateHandleEDMA(EXAMPLE_FLEXSPI,
&flexspiEdmaHandle,
EDMA_Callback,
NULL,
&txEdmaHandle,
&rxEdmaHandle);
// tried different sizes, no success
flexspiEdmaHandle.nsize = kFLEXPSI_EDMAnSize8Bytes; //kFLEXPSI_EDMAnSize1Bytes;
flexspi_transfer_t xfer = {
.port = FLASH_PORT,
.cmdType = kFLEXSPI_Read,
.seqIndex = 0,
.SeqNumber = 1,
.deviceAddress= 0,
.data = destAddr,
.dataSize = NUM_BYTES_RX
};
status_t st = FLEXSPI_TransferEDMA(EXAMPLE_FLEXSPI, &flexspiEdmaHandle, &xfer);