Other Parts Discussed in Thread: UNIFLASH, IWR1642, IWR1443
I took the test code and tried to execute it as a cli command. Here is my code. It does not return from the QSPIFlash_open. What is wrong. Is there a compiler option I need to set? I followed the instructions from SWRA583.
#define TEST_DATA_LENGTH 4096U
uint8_t gTestDataArray[TEST_DATA_LENGTH];
/* System DMA handle, created in init Task */
DMA_Handle gDmaHandle = NULL;
QSPI_Handle gQSPIDrv = (QSPI_Handle)NULL;
int32_t test_qspiflash(int32_t argc, char* argv[])
{
DMA_Params dmaParams;
int32_t retVal = 0;
uint32_t flashAddr = 0U;
SPIFLASH_devID devId;
uint32_t index;
uint32_t testDataLen = 0U;
uint8_t* readDataArray;
QSPI_Params QSPIParams;
QSPIFlash_Handle QSPIFlashHandle = NULL;
uint32_t dmaChan = 10;
/**************************************************************************
* Test: MCPI_Initialize
**************************************************************************/
/* Setup the PINMUX to bring out the QSPI */
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINR12_PADAP, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
Pinmux_Set_FuncSel(SOC_XWR16XX_PINR12_PADAP, SOC_XWR16XX_PINR12_PADAP_QSPI_CLK);
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINP11_PADAQ, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
Pinmux_Set_FuncSel(SOC_XWR16XX_PINP11_PADAQ, SOC_XWR16XX_PINP11_PADAQ_QSPI_CSN);
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINR13_PADAL, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
Pinmux_Set_FuncSel(SOC_XWR16XX_PINR13_PADAL, SOC_XWR16XX_PINR13_PADAL_QSPI_D0);
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINN12_PADAM, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
Pinmux_Set_FuncSel(SOC_XWR16XX_PINN12_PADAM, SOC_XWR16XX_PINN12_PADAM_QSPI_D1);
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINR14_PADAN, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
Pinmux_Set_FuncSel(SOC_XWR16XX_PINR14_PADAN, SOC_XWR16XX_PINR14_PADAN_QSPI_D2);
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINP12_PADAO, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
Pinmux_Set_FuncSel(SOC_XWR16XX_PINP12_PADAO, SOC_XWR16XX_PINP12_PADAO_QSPI_D3);
/* Debug Message: */
CLI_write("******************************************\n");
CLI_write("Debug: QSPI Driver Test Application Start \n");
CLI_write("******************************************\n");
/* Initialize the QSPI Driver */
QSPI_init();
/* Initialize the QSPI Flash */
QSPIFlash_init();
/* Open QSPI driver */
QSPI_Params_init(&QSPIParams);
/* Set the QSPI peripheral clock to 200MHz */
QSPIParams.qspiClk = 200 * 1000000U;
QSPIParams.clkMode = QSPI_CLOCK_MODE_0;
/* Running at 40MHz QSPI bit rate
* QSPI bit clock rate derives from QSPI peripheral clock(qspiClk)
and divide clock internally down to bit clock rate
BitClockRate = qspiClk/divisor(=5, setup by QSPI driver internally)
*/
QSPIParams.bitRate = 40 * 1000000U;
gQSPIDrv = QSPI_open(&QSPIParams, &retVal);
if(gQSPIDrv == NULL)
{
CLI_write("QSPI_open failed with error=%d\n", retVal);
goto Exit;
}
/* Init SYSDMA params */
DMA_Params_init(&dmaParams);
/* Open DMA driver instance 0 for SPI test */
gDmaHandle = DMA_open(0, &dmaParams, &retVal);
if(gDmaHandle == NULL)
{
CLI_write("Open DMA driver failed returned null\n");
return -1;
}
readDataArray = Memory_alloc (NULL, TEST_DATA_LENGTH, 64, NULL);
if(readDataArray == NULL)
{
CLI_write("Test array allocation failed\n");
}
else
{
CLI_write("Test array allocation -> 0x%x\n\n", readDataArray);
}
/**************************************************************************
* Test: Open API test
**************************************************************************/
/* Open the QSPI Instance */
QSPIFlashHandle = QSPIFlash_open(gQSPIDrv, &retVal);
if (QSPIFlashHandle == NULL )
{
CLI_write ("QSPIFlash Open returned null");
goto Exit;
}
else
{
CLI_write ("QSPIFlash Open API passed ");
/* Graceful shutdown */
QSPIFlash_close(QSPIFlashHandle);
CLI_write("Debug: QSPIFlash Instance has been closed successfully\n");
}