参照 JEDEC eMMC标准:JESD84-B51 (Revision of JESD84-B50.1, July 2014)
基于STM32Cube_FW_F4_V1.21.0库修改(stm32f4xx_hal_mmc.h),4bit模式,其他与SD卡驱动类似。实测写入速度
1MB/s左右。
容量计算:
Capacity = (hmmc->MmcCard.EmmcExtCsd.EXT_CSD.SEC_COUNT[3] << 24 |
hmmc->MmcCard.EmmcExtCsd.EXT_CSD.SEC_COUNT[2] << 16 |
hmmc->MmcCard.EmmcExtCsd.EXT_CSD.SEC_COUNT[1] << 8 |
hmmc->MmcCard.EmmcExtCsd.EXT_CSD.SEC_COUNT[0]) × BlockSize(512)
typedef union
{
struct _EXT_CSD
{
__IO uint8_t Reserved19[15];
__IO uint8_t CMDQ_MODE_EN;
__IO uint8_t SECURE_REMOVAL_TYPE;
__IO uint8_t PRODUCT_STATE_AWARENESS_ENABLEMENT;
__IO uint8_t MAX_PRE_LOADING_DATA_SIZE[4];
__IO uint8_t PRE_LOADING_DATA_SIZE[4];
__IO uint8_t FFU_STATUS;
__IO uint8_t Reserved18[2];
__IO uint8_t MODE_OPERATION_CODES;
__IO uint8_t MODE_CONFIG;
__IO uint8_t BARRIER_CTRL;
__IO uint8_t FLUSH_CACHE;
__IO uint8_t CACHE_CTRL;
__IO uint8_t POWER_OFF_NOTIFICATION;
__IO uint8_t PACKED_FAILURE_INDEX;
__IO uint8_t PACKED_COMMAND_STATUS;
__IO uint8_t CONTEXT_CONF[15];
__IO uint8_t EXT_PARTITIONS_ATTRIBUTE[2];
__IO uint8_t EXCEPTION_EVENTS_STATUS[2];
__IO uint8_t EXCEPTION_EVENTS_CTRL[2];
__IO uint8_t DYNCAP_NEEDED;
__IO uint8_t CLASS_6_CTRL;
__IO uint8_t INI_TIMEOUT_EMU;
__IO uint8_t DATA_SECTOR_SIZE;
__IO uint8_t USE_NATIVE_SECTOR;
__IO uint8_t NATIVE_SECTOR_SIZE;
__IO uint8_t VENDOR_SPECIFIC_FIELD[64];
__IO uint8_t Reserved17[2];
__IO uint8_t PROGRAM_CID_CSD_DDR_SUPPORT;
__IO uint8_t PERIODIC_WAKEUP;
__IO uint8_t TCASE_SUPPORT;
__IO uint8_t PRODUCTION_STATE_AWARENESS;
__IO uint8_t SEC_BAD_BLK_MGMNT;
__IO uint8_t Reserved16;
__IO uint8_t ENH_START_ADDR[4];
__IO uint8_t ENH_SIZE_MULT[3];
__IO uint8_t GP_SIZE_MULT[12];
__IO uint8_t PARTITION_SETTING_COMPLET