MEDSdcard_Initialize
Default mainpageat91libmemoriesMEDSdcard_Initialize
Description Source Call Graph
Start Line: 494
void MEDSdcard_Initialize(Media *media, unsigned char mciID)
{    
    TRACE_INFO("MEDSdcard init\n\r");

    // Initialize SDcard
    //--------------------------------------------------------------------------
    
    // Configure SDcard pins
    ConfigurePIO(mciID);
    
    // Wait for SD card connection (if supported)
    WaitSdConn(mciID);

    // Check if card is write-protected (if supported)
    CheckProtection(mciID);

    // Initialize the MCI driver
    if(mciID == 0) {
        AIC_ConfigureIT(BOARD_SD_MCI_ID,  AT91C_AIC_PRIOR_LOWEST, ISR_Mci);
        MCI_Init(&mciDrv, BOARD_SD_MCI_BASE, BOARD_SD_MCI_ID, BOARD_SD_SLOT);
        AIC_EnableIT(BOARD_SD_MCI_ID);
    } else {
        #if defined(BOARD_SD_MCI1_ID)
        AIC_ConfigureIT(BOARD_SD_MCI1_ID,  AT91C_AIC_PRIOR_LOWEST, ISR_Mci);
        MCI_Init(&mciDrv, BOARD_SD_MCI1_BASE, BOARD_SD_MCI1_ID, BOARD_SD_SLOT);
        AIC_EnableIT(BOARD_SD_MCI1_ID);      
        #else
        TRACE_ERROR("SD/MMC card initialization failed (MCI1 not supported)\n\r");
        #endif
    }

    // Initialize the SD card driver
    if (SD_Init(&sdDrv, (SdDriver *)&mciDrv)) {
    
        TRACE_ERROR("SD/MMC card initialization failed\n\r");
    }
    else {
    
        TRACE_INFO("SD/MMC card initialization successful\n\r");
        TRACE_INFO("Card size: %d MB\n\r", SD_TOTAL_SIZE(&sdDrv)/(1024*1024));
        TRACE_INFO("Block size: %d Bytes\n\r", (SD_TOTAL_SIZE(&sdDrv) / SD_TOTAL_BLOCK(&sdDrv)) );
    }
    MCI_SetSpeed(&mciDrv, 10000000);      
  
    // Initialize media fields
    //--------------------------------------------------------------------------         
    media->write = MEDSdcard_Write;
    media->read = MEDSdcard_Read;
    media->handler = 0;
    media->flush = 0;
    media->baseAddress = 0;
    media->size = SD_TOTAL_SIZE(&sdDrv);
    media->state = MED_STATE_READY;

    media->transfer.data = 0;
    media->transfer.address = 0;
    media->transfer.length = 0;
    media->transfer.callback = 0;
    media->transfer.argument = 0;
    
    numMedias++;    
}