示例#1
0
SD_Error SD_PrintInfo( void )
{
	SD_Error	SDError;

	const char *CardTypes[] = {
		"STD_CAPACITY_SD_CARD_V1_1",
		"STD_CAPACITY_SD_CARD_V2_0",
		"HIGH_CAPACITY_SD_CARD",
		"MULTIMEDIA_CARD",
		"SECURE_DIGITAL_IO_CARD",
		"HIGH_SPEED_MULTIMEDIA_CARD",
		"SECURE_DIGITAL_IO_COMBO_CARD",
		"HIGH_CAPACITY_MMC_CARD"
    };
	
	printf("Card info:\n\r");
	if ((SDError = SD_GetCardInfo(&SDCardInfo)) != SD_OK)
	{
		printf("\tConfigure SD card - FAILED. SD_GetCardInfo()\n\r");
		SD_print_error(SDError);
		return SDError;
	}
	
	if(SDError == SD_OK)
	{
		SD_PrintState(SD_GetState());
		
		printf("\tBlockSize: %d\n\r", 			SDCardInfo.CardBlockSize);
		printf("\tCapacity: %"PRIu64" Byte", 	SDCardInfo.CardCapacity);
		printf(" (%i MiB)\n\r", (uint32_t)(		SDCardInfo.CardCapacity/1024/1024));
		printf("\tType: %s\n\r", 					CardTypes[SDCardInfo.CardType]);
		printf("\tRCA: %d\n\r", 					SDCardInfo.RCA);
		printf("\tCSD.MaxBusClkFrec: %d\n\r", 		SDCardInfo.SD_csd.MaxBusClkFrec);
		printf("\tCSD.DeviceSize: %d\n\r", 		SDCardInfo.SD_csd.DeviceSize);
		printf("\tCSD.DeviceSizeMul: %d\n\r", 	SDCardInfo.SD_csd.DeviceSizeMul);
		printf("\tCSD.RdBlockLen: %d\n\r",		SDCardInfo.SD_csd.RdBlockLen);
		printf("\tCSD.MaxWrBlockLen: %d\n\r",		SDCardInfo.SD_csd.MaxWrBlockLen);
		printf("\tCID:\n\r");
		printf("\t\tManufacturerID: %u\n\r",	SDCardInfo.SD_cid.ManufacturerID);
		printf("\t\tProdName1: %u\n\r",		SDCardInfo.SD_cid.ProdName1);
		printf("\t\tProdName2: %u\n\r",		SDCardInfo.SD_cid.ProdName2);
		printf("\t\tProdRev: %u\n\r",			SDCardInfo.SD_cid.ProdRev);
		printf("\t\tProdSN: %u\n\r",			SDCardInfo.SD_cid.ProdSN);
		printf("\t\tManufactDate: %u\n\r",	SDCardInfo.SD_cid.ManufactDate);
		printf("\t\tCID_CRC: %u\n\r",			SDCardInfo.SD_cid.CID_CRC);
		
		SD_PrintState(SD_GetState());
	}
	return SD_OK;
}
DSTATUS disk_status (
	BYTE pdrv		/* Physical drive nmuber (0..) */
)
{
	/*DSTATUS stat;
	int result;

	switch (pdrv) {
	case ATA :
		result = ATA_disk_status();

		// translate the reslut code here

		return stat;

	case MMC :
		result = MMC_disk_status();

		// translate the reslut code here

		return stat;

	case USB :
		result = USB_disk_status();

		// translate the reslut code here

		return stat;
	}
	return STA_NOINIT;*/

	DSTATUS stat = RES_ERROR;

	if (pdrv == MMC) {
		SDCardState state = SD_GetState();
		if (state != SD_CARD_ERROR || state != SD_CARD_DISCONNECTED)
			stat = RES_OK;
	}

	return stat;
}