main
Default mainpagebasic-dataflash-projectmain
Description Source Call Graph
Start Line: 339
int main()
{
    unsigned int i;
    unsigned int page;
    unsigned char testFailed;
    const At45Desc *pDesc;

    // Configure pins
    PIO_Configure(pins, PIO_LISTSIZE(pins));

    // Configure traces
    TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
    printf("-- Basic Dataflash Project %s --\n\r", SOFTPACK_VERSION);
    printf("-- %s\n\r", BOARD_NAME);
    printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
    
    // SPI and At45 driver initialization
    TRACE_INFO("Initializing the SPI and AT45 drivers\n\r");
    AIC_ConfigureIT(BOARD_AT45_A_SPI_ID, 0, ISR_Spi);
    SPID_Configure(&spid, BOARD_AT45_A_SPI_BASE, BOARD_AT45_A_SPI_ID);
    SPID_ConfigureCS(&spid, BOARD_AT45_A_NPCS, AT45_CSR(BOARD_MCK, SPCK));
    AT45_Configure(&at45, &spid, BOARD_AT45_A_NPCS);
    TRACE_INFO("At45 enabled\n\r");
    AIC_EnableIT(BOARD_AT45_A_SPI_ID);
    TRACE_INFO("SPI interrupt enabled\n\r");

    // Identify the At45 device
    TRACE_INFO("Waiting for a dataflash to be connected ...\n\r");
    pDesc = 0;
    while (!pDesc) {

        pDesc = AT45_FindDevice(&at45, AT45_GetStatus(&at45));
    }
    TRACE_INFO("%s detected\n\r", at45.pDesc->name);

    // Output JEDEC identifier of device
    TRACE_INFO("Device identifier: 0x%08X\n\r", AT45_GetJedecId(&at45));

    // Test all pages
    testFailed = 0;
    page = 0;
    while (!testFailed && (page < AT45_PageNumber(&at45))) {

        TRACE_INFO("Test in progress on page: %6u\r", page);
        
        // Erase page
        AT45_Erase(&at45, page * AT45_PageSize(&at45));

        // Verify that page has been erased correctly
        memset(pBuffer, 0, AT45_PageSize(&at45));
        AT45_Read(&at45, pBuffer, AT45_PageSize(&at45), page * AT45_PageSize(&at45));
        for (i=0; i < AT45_PageSize(&at45); i++) {
        
            if (pBuffer[i] != 0xff) {

                TRACE_ERROR("Could not erase page %u\n\r", page);
                testFailed = 1;
                break;
            }
        }

        // Write page
        for (i=0; i < AT45_PageSize(&at45); i++) {
        
            pBuffer[i] = i & 0xFF;
        }
        AT45_Write(&at45, pBuffer, AT45_PageSize(&at45), page * AT45_PageSize(&at45));

        // Check that data has been written correctly
        memset(pBuffer, 0, AT45_PageSize(&at45));
        AT45_Read(&at45, pBuffer, AT45_PageSize(&at45), page * AT45_PageSize(&at45));
        for (i=0; i < AT45_PageSize(&at45); i++) {

            if (pBuffer[i] != (i & 0xFF)) {

                TRACE_ERROR("Could not write page %u\n\r", page);
                testFailed = 1;
                break;
            }
        }

        page++;    
    }

    // Display test result
    if (testFailed) {
    
        TRACE_ERROR("Test failed.\n\r");
    }
    else {
    
         TRACE_INFO("Test passed.\n\r");
    }
    
    return 0;
}