Quantcast
Channel: Processors forum - Recent Threads
Viewing all articles
Browse latest Browse all 17527

CCS/PROCESSOR-SDK-AM437X: Fails writing flash on AM437x Industiral Development Kit using the example project provided.

$
0
0

Part Number:PROCESSOR-SDK-AM437X

Tool/software: Code Composer Studio

Hello, 

I am trying to write to flash on the AM437x Industrial Development Kit.

I have access to the QSPI_BasicExample_idkAM437x_armExampleProject.

I have also integrated the spi_test() and spi_read_write() from the example.

Here is the problem: If this number is changed to anything below 64, it works. When this number is 64 or greater it fails.

void spi_test()
{
    SPI_Params   spiParams;              /* SPI params structure */
    S25FL_Handle flashHandle;            /* Flash handle */
    bool         retVal = false;         /* return value */

    /* Init SPI driver */
    SPI_init();

    /* Default SPI configuration parameters */
    SPI_Params_init(&spiParams);

    /* Open QSPI driver */
    flashHandle = SF25FL_open(((QSPI_INSTANCE - 1)+(QSPI_OFFSET)), &spiParams);

    /* Print flash Id */
    FlashPrintId(flashHandle);

    /* Set the transfer length in number of 32 bit words */
    transferLength = 50;

    /* read/write test on block 0, address 0 */
    retVal = spi_read_write(flashHandle, 0, transferLength);
    if (retVal == true)
    {
        /* read/write test on block 256, address 16M */
        retVal = spi_read_write(flashHandle, 256, transferLength);
    }

    SF25FL_close(flashHandle);

    if(true == retVal)
    {
        DebugLog::Write("\n All tests have passed. \n");
    }
    else
    {
        DebugLog::Write("\n Some tests have failed. \n");
    }

    while(1);
}

I have narrowed it to failing at the highlighted line below in the function in the class S25FL.cbool SF25FL_bufferWrite(S25FL_Handle flashHandle, S25FL_Transaction* flashTransaction)

 

if(QSPI_OPER_MODE_MMAP == object->qspiMode)
{

    for(idx = 0; idx < length; idx++)
    {
        /* Write enable */
        S25FLFlash_WriteEnable(flashHandle);

        /* Perform the transfer */
        transaction.txBuf = (unsigned char *)dstOffstAddr;
        transaction.rxBuf = srcAddr;
        transaction.count = 1;

        transferType = SPI_TRANSACTION_TYPE_WRITE;
        if (dstOffstAddr > 0xFFFFFFU)
        {
           transferCmd  = QSPI_LIB_CMD_PAGE_PRG_4B;
        }
        else
        {
            transferCmd  = QSPI_LIB_CMD_PAGE_PRG;
        }
        SPI_control(handle, SPI_V1_CMD_TRANSFERMODE_RW, (void *)&transferType);
        SPI_control(handle, SPI_V1_CMD_MMAP_TRANSFER_CMD, (void *)&transferCmd);
        retVal = SPI_transfer(handle, &transaction);

        /* Check flash status for completion */
        while ((FlashStatus(flashHandle) & 0x1U));

        dstOffstAddr += 1;
        srcAddr += 1;
    }
}

Seeing as I am using example code, I am wondering why this is failing.

Any help would be greatly appreciated.


Viewing all articles
Browse latest Browse all 17527

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>