/** * @brief Returns information about specific card. * @param cardinfo: pointer to a SD_CardInfo structure that contains all SD * card information. * @retval The SD Response: * - SD_RESPONSE_FAILURE: Sequence failed * - SD_RESPONSE_NO_ERROR: Sequence succeed */ SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo) { static uint32_t i = 0; SD_Error status = SD_RESPONSE_FAILURE; status = SD_GetCSDRegister(&(cardinfo->SD_csd)); if(SD_RESPONSE_FAILURE == status) { status = SD_GetCSDRegister(&(cardinfo->SD_csd)); } status = SD_GetCIDRegister(&(cardinfo->SD_cid)); cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) ; cardinfo->CardCapacity *= (1 << (cardinfo->SD_csd.DeviceSizeMul + 2)); cardinfo->CardBlockSize = 1 << (cardinfo->SD_csd.RdBlockLen); cardinfo->CardCapacity *= cardinfo->CardBlockSize; // if(i == 1) // { // printf("\n\r SD CardBlockSize %d CardCapacity %d M", cardinfo->CardBlockSize, // cardinfo->CardCapacity / 1024 / 1024); // } i++; /*!< Returns the reponse */ return status; }
/** * @brief Returns information about specific card. * @param cardinfo: pointer to a SD_CardInfo structure that contains all SD * card information. * @retval The SD Response: * - SD_RESPONSE_FAILURE: Sequence failed * - SD_RESPONSE_NO_ERROR: Sequence succeed */ SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo) { SD_Error status = SD_RESPONSE_FAILURE; status = SD_GetCSDRegister(&(cardinfo->SD_csd)); status = SD_GetCIDRegister(&(cardinfo->SD_cid)); cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) ; cardinfo->CardCapacity *= (1 << (cardinfo->SD_csd.DeviceSizeMul + 2)); cardinfo->CardBlockSize = 1 << (cardinfo->SD_csd.RdBlockLen); cardinfo->CardCapacity *= cardinfo->CardBlockSize; /*!< Returns the reponse */ return status; }
/** * @brief Returns information about specific card. * @param cardinfo: pointer to a SD_CardInfo structure that contains all SD * card information. * @retval The SD Response: * - MSD_ERROR : Sequence failed * - MSD_OK : Sequence succeed */ uint8_t BSP_SD_GetCardInfo(SD_CardInfo *pCardInfo) { uint8_t status = MSD_ERROR; SD_GetCSDRegister(&(pCardInfo->Csd)); status = SD_GetCIDRegister(&(pCardInfo->Cid)); pCardInfo->CardCapacity = (pCardInfo->Csd.DeviceSize + 1) ; pCardInfo->CardCapacity *= (1 << (pCardInfo->Csd.DeviceSizeMul + 2)); pCardInfo->CardBlockSize = 1 << (pCardInfo->Csd.RdBlockLen); pCardInfo->CardCapacity *= pCardInfo->CardBlockSize; /* Returns the reponse */ return status; }
/** * @brief Returns information about specific card. * @param pCardInfo: Pointer to a SD_CardInfo structure that contains all SD * card information. * @retval The SD Response: * - MSD_ERROR: Sequence failed * - MSD_OK: Sequence succeed */ uint8_t BSP_SD_GetCardInfo(SD_CardInfo *pCardInfo) { uint8_t status = MSD_ERROR; SD_GetCSDRegister(&(pCardInfo->Csd)); status = SD_GetCIDRegister(&(pCardInfo->Cid)); pCardInfo->CardCapacity = (pCardInfo->Csd.DeviceSize + 1) ; pCardInfo->CardCapacity *= (1 << (pCardInfo->Csd.DeviceSizeMul + 2)); pCardInfo->CardBlockSize = 1 << (pCardInfo->Csd.RdBlockLen); pCardInfo->CardCapacity *= pCardInfo->CardBlockSize; /* Returns the response */ if (status == SD_RESPONSE_NO_ERROR) { return MSD_OK; } else { return MSD_ERROR; } }
/******************************************************************************* * Function Name : MAL_GetStatus * Description : Get status * Input : None * Output : None * Return : None *******************************************************************************/ uint16_t MAL_GetStatus (uint8_t lun) { #ifdef USE_STM3210E_EVAL NAND_IDTypeDef NAND_ID; uint32_t DeviceSizeMul = 0, NumberOfBlocks = 0; #else SD_CSD SD_csd; uint32_t DeviceSizeMul = 0; #endif /* USE_STM3210E_EVAL */ #ifdef USE_STM32L152D_EVAL uint32_t NumberOfBlocks = 0; #endif if (lun == 0) { #if defined (USE_STM3210E_EVAL) || defined(USE_STM32L152D_EVAL) if (SD_Init() == SD_OK) { SD_GetCardInfo(&mSDCardInfo); SD_SelectDeselect((uint32_t) (mSDCardInfo.RCA << 16)); DeviceSizeMul = (mSDCardInfo.SD_csd.DeviceSizeMul + 2); if(mSDCardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD) { Mass_Block_Count[0] = (mSDCardInfo.SD_csd.DeviceSize + 1) * 1024; } else { NumberOfBlocks = ((1 << (mSDCardInfo.SD_csd.RdBlockLen)) / 512); Mass_Block_Count[0] = ((mSDCardInfo.SD_csd.DeviceSize + 1) * (1 << DeviceSizeMul) << (NumberOfBlocks/2)); } Mass_Block_Size[0] = 512; Status = SD_SelectDeselect((uint32_t) (mSDCardInfo.RCA << 16)); Status = SD_EnableWideBusOperation(SDIO_BusWide_4b); if ( Status != SD_OK ) { return MAL_FAIL; } #else uint32_t temp_block_mul = 0; SD_GetCSDRegister(&SD_csd); DeviceSizeMul = SD_csd.DeviceSizeMul + 2; temp_block_mul = (1 << SD_csd.RdBlockLen)/ 512; Mass_Block_Count[0] = ((SD_csd.DeviceSize + 1) * (1 << (DeviceSizeMul))) * temp_block_mul; Mass_Block_Size[0] = 512; Mass_Memory_Size[0] = (Mass_Block_Count[0] * Mass_Block_Size[0]); #endif /* USE_STM3210E_EVAL */ Mass_Memory_Size[0] = Mass_Block_Count[0] * Mass_Block_Size[0]; LED_On1(); return MAL_OK; #if defined (USE_STM3210E_EVAL) || defined(USE_STM32L152D_EVAL) } #endif /* USE_STM3210E_EVAL */ } #ifdef USE_STM3210E_EVAL else { FSMC_NAND_ReadID(&NAND_ID); if (NAND_ID.Device_ID != 0 ) { /* only one zone is used */ Mass_Block_Count[1] = NAND_ZONE_SIZE * NAND_BLOCK_SIZE * NAND_MAX_ZONE ; Mass_Block_Size[1] = NAND_PAGE_SIZE; Mass_Memory_Size[1] = (Mass_Block_Count[1] * Mass_Block_Size[1]); return MAL_OK; } } #endif /* USE_STM3210E_EVAL */ LED_On1(); return MAL_FAIL; }