123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- /*
- * Copyright (c) 2015, Freescale Semiconductor, Inc.
- * Copyright 2016-2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #ifndef _FSL_MMC_H_
- #define _FSL_MMC_H_
- #include "fsl_sdmmc_common.h"
- /*!
- * @addtogroup MMCCARD
- * @{
- */
- /*******************************************************************************
- * Definitions
- ******************************************************************************/
- /*! @brief MMC card flags */
- enum _mmc_card_flag
- {
- kMMC_SupportHighSpeed26MHZFlag = (1U << 0U), /*!< Support high speed 26MHZ */
- kMMC_SupportHighSpeed52MHZFlag = (1U << 1U), /*!< Support high speed 52MHZ */
- kMMC_SupportHighSpeedDDR52MHZ180V300VFlag = (1 << 2U), /*!< ddr 52MHZ 1.8V or 3.0V */
- kMMC_SupportHighSpeedDDR52MHZ120VFlag = (1 << 3U), /*!< DDR 52MHZ 1.2V */
- kMMC_SupportHS200200MHZ180VFlag = (1 << 4U), /*!< HS200 ,200MHZ,1.8V */
- kMMC_SupportHS200200MHZ120VFlag = (1 << 5U), /*!< HS200, 200MHZ, 1.2V */
- kMMC_SupportHS400DDR200MHZ180VFlag = (1 << 6U), /*!< HS400, DDR, 200MHZ,1.8V */
- kMMC_SupportHS400DDR200MHZ120VFlag = (1 << 7U), /*!< HS400, DDR, 200MHZ,1.2V */
- kMMC_SupportHighCapacityFlag = (1U << 8U), /*!< Support high capacity */
- kMMC_SupportAlternateBootFlag = (1U << 9U), /*!< Support alternate boot */
- kMMC_SupportDDRBootFlag = (1U << 10U), /*!< support DDR boot flag*/
- kMMC_SupportHighSpeedBootFlag = (1U << 11U), /*!< support high speed boot flag*/
- };
- /*!
- * @brief mmc card state
- *
- * Define the card structure including the necessary fields to identify and describe the card.
- */
- typedef struct _mmc_card
- {
- SDMMCHOST_CONFIG host; /*!< Host information */
- mmccard_usr_param_t usrParam; /*!< user parameter */
- bool isHostReady; /*!< Use this flag to indicate if need host re-init or not*/
- bool noInteralAlign; /*!< use this flag to disable sdmmc align. If disable, sdmmc will not make sure the
- data buffer address is word align, otherwise all the transfer are align to low level driver */
- uint32_t busClock_Hz; /*!< MMC bus clock united in Hz */
- uint32_t relativeAddress; /*!< Relative address of the card */
- bool enablePreDefinedBlockCount; /*!< Enable PRE-DEFINED block count when read/write */
- uint32_t flags; /*!< Capability flag in _mmc_card_flag */
- uint32_t rawCid[4U]; /*!< Raw CID content */
- uint32_t rawCsd[4U]; /*!< Raw CSD content */
- uint32_t rawExtendedCsd[MMC_EXTENDED_CSD_BYTES / 4U]; /*!< Raw MMC Extended CSD content */
- uint32_t ocr; /*!< Raw OCR content */
- mmc_cid_t cid; /*!< CID */
- mmc_csd_t csd; /*!< CSD */
- mmc_extended_csd_t extendedCsd; /*!< Extended CSD */
- uint32_t blockSize; /*!< Card block size */
- uint32_t userPartitionBlocks; /*!< Card total block number in user partition */
- uint32_t bootPartitionBlocks; /*!< Boot partition size united as block size */
- uint32_t eraseGroupBlocks; /*!< Erase group size united as block size */
- mmc_access_partition_t currentPartition; /*!< Current access partition */
- mmc_voltage_window_t hostVoltageWindowVCCQ; /*!< Host IO voltage window */
- mmc_voltage_window_t hostVoltageWindowVCC; /*!< application must set this value according to board specific */
- mmc_high_speed_timing_t busTiming; /*!< indicate the current work timing mode*/
- mmc_data_bus_width_t busWidth; /*!< indicate the current work bus width */
- } mmc_card_t;
- /*************************************************************************************************
- * API
- ************************************************************************************************/
- #if defined(__cplusplus)
- extern "C" {
- #endif
- /*!
- * @name MMCCARD Function
- * @{
- */
- /*!
- * @brief Initializes the MMC card and host.
- *
- * @param card Card descriptor.
- *
- * @retval kStatus_SDMMC_HostNotReady host is not ready.
- * @retval kStatus_SDMMC_GoIdleFailed Go idle failed.
- * @retval kStatus_SDMMC_SendOperationConditionFailed Send operation condition failed.
- * @retval kStatus_SDMMC_AllSendCidFailed Send CID failed.
- * @retval kStatus_SDMMC_SetRelativeAddressFailed Set relative address failed.
- * @retval kStatus_SDMMC_SendCsdFailed Send CSD failed.
- * @retval kStatus_SDMMC_CardNotSupport Card not support.
- * @retval kStatus_SDMMC_SelectCardFailed Send SELECT_CARD command failed.
- * @retval kStatus_SDMMC_SendExtendedCsdFailed Send EXT_CSD failed.
- * @retval kStatus_SDMMC_SetBusWidthFailed Set bus width failed.
- * @retval kStatus_SDMMC_SwitchHighSpeedFailed Switch high speed failed.
- * @retval kStatus_SDMMC_SetCardBlockSizeFailed Set card block size failed.
- * @retval kStatus_Success Operate successfully.
- */
- status_t MMC_Init(mmc_card_t *card);
- /*!
- * @brief Deinitializes the card and host.
- *
- * @param card Card descriptor.
- */
- void MMC_Deinit(mmc_card_t *card);
- /*!
- * @brief intialize the card.
- *
- * @param card Card descriptor.
- *
- * @retval kStatus_SDMMC_HostNotReady host is not ready.
- * @retval kStatus_SDMMC_GoIdleFailed Go idle failed.
- * @retval kStatus_SDMMC_SendOperationConditionFailed Send operation condition failed.
- * @retval kStatus_SDMMC_AllSendCidFailed Send CID failed.
- * @retval kStatus_SDMMC_SetRelativeAddressFailed Set relative address failed.
- * @retval kStatus_SDMMC_SendCsdFailed Send CSD failed.
- * @retval kStatus_SDMMC_CardNotSupport Card not support.
- * @retval kStatus_SDMMC_SelectCardFailed Send SELECT_CARD command failed.
- * @retval kStatus_SDMMC_SendExtendedCsdFailed Send EXT_CSD failed.
- * @retval kStatus_SDMMC_SetBusWidthFailed Set bus width failed.
- * @retval kStatus_SDMMC_SwitchHighSpeedFailed Switch high speed failed.
- * @retval kStatus_SDMMC_SetCardBlockSizeFailed Set card block size failed.
- * @retval kStatus_Success Operate successfully.
- */
- status_t MMC_CardInit(mmc_card_t *card);
- /*!
- * @brief Deinitializes the card.
- *
- * @param card Card descriptor.
- */
- void MMC_CardDeinit(mmc_card_t *card);
- /*!
- * @brief initialize the host.
- *
- * This function deinitializes the specific host.
- *
- * @param card Card descriptor.
- */
- status_t MMC_HostInit(mmc_card_t *card);
- /*!
- * @brief Deinitializes the host.
- *
- * This function deinitializes the host.
- *
- * @param card Card descriptor.
- */
- void MMC_HostDeinit(mmc_card_t *card);
- /*!
- * @brief reset the host.
- *
- * This function reset the specific host.
- *
- * @param host host descriptor.
- */
- void MMC_HostReset(SDMMCHOST_CONFIG *host);
- /*!
- * @brief power on card.
- *
- * The power on operation depend on host or the user define power on function.
- * @param base host base address.
- * @param pwr user define power control configuration
- */
- void MMC_PowerOnCard(SDMMCHOST_TYPE *base, const sdmmchost_pwr_card_t *pwr);
- /*!
- * @brief power off card.
- *
- * The power off operation depend on host or the user define power on function.
- * @param base host base address.
- * @param pwr user define power control configuration
- */
- void MMC_PowerOffCard(SDMMCHOST_TYPE *base, const sdmmchost_pwr_card_t *pwr);
- /*!
- * @brief Checks if the card is read-only.
- *
- * @param card Card descriptor.
- * @retval true Card is read only.
- * @retval false Card isn't read only.
- */
- bool MMC_CheckReadOnly(mmc_card_t *card);
- /*!
- * @brief Reads data blocks from the card.
- *
- * @param card Card descriptor.
- * @param buffer The buffer to save data.
- * @param startBlock The start block index.
- * @param blockCount The number of blocks to read.
- * @retval kStatus_InvalidArgument Invalid argument.
- * @retval kStatus_SDMMC_CardNotSupport Card not support.
- * @retval kStatus_SDMMC_SetBlockCountFailed Set block count failed.
- * @retval kStatus_SDMMC_TransferFailed Transfer failed.
- * @retval kStatus_SDMMC_StopTransmissionFailed Stop transmission failed.
- * @retval kStatus_Success Operate successfully.
- */
- status_t MMC_ReadBlocks(mmc_card_t *card, uint8_t *buffer, uint32_t startBlock, uint32_t blockCount);
- /*!
- * @brief Writes data blocks to the card.
- *
- * @param card Card descriptor.
- * @param buffer The buffer to save data blocks.
- * @param startBlock Start block number to write.
- * @param blockCount Block count.
- * @retval kStatus_InvalidArgument Invalid argument.
- * @retval kStatus_SDMMC_NotSupportYet Not support now.
- * @retval kStatus_SDMMC_SetBlockCountFailed Set block count failed.
- * @retval kStatus_SDMMC_WaitWriteCompleteFailed Send status failed.
- * @retval kStatus_SDMMC_TransferFailed Transfer failed.
- * @retval kStatus_SDMMC_StopTransmissionFailed Stop transmission failed.
- * @retval kStatus_Success Operate successfully.
- */
- status_t MMC_WriteBlocks(mmc_card_t *card, const uint8_t *buffer, uint32_t startBlock, uint32_t blockCount);
- /*!
- * @brief Erases groups of the card.
- *
- * Erase group is the smallest erase unit in MMC card. The erase range is [startGroup, endGroup].
- *
- * @param card Card descriptor.
- * @param startGroup Start group number.
- * @param endGroup End group number.
- * @retval kStatus_InvalidArgument Invalid argument.
- * @retval kStatus_SDMMC_WaitWriteCompleteFailed Send status failed.
- * @retval kStatus_SDMMC_TransferFailed Transfer failed.
- * @retval kStatus_Success Operate successfully.
- */
- status_t MMC_EraseGroups(mmc_card_t *card, uint32_t startGroup, uint32_t endGroup);
- /*!
- * @brief Selects the partition to access.
- *
- * @param card Card descriptor.
- * @param partitionNumber The partition number.
- * @retval kStatus_SDMMC_ConfigureExtendedCsdFailed Configure EXT_CSD failed.
- * @retval kStatus_Success Operate successfully.
- */
- status_t MMC_SelectPartition(mmc_card_t *card, mmc_access_partition_t partitionNumber);
- /*!
- * @brief Configures the boot activity of the card.
- *
- * @param card Card descriptor.
- * @param config Boot configuration structure.
- * @retval kStatus_SDMMC_NotSupportYet Not support now.
- * @retval kStatus_SDMMC_ConfigureExtendedCsdFailed Configure EXT_CSD failed.
- * @retval kStatus_SDMMC_ConfigureBootFailed Configure boot failed.
- * @retval kStatus_Success Operate successfully.
- */
- status_t MMC_SetBootConfig(mmc_card_t *card, const mmc_boot_config_t *config);
- /*!
- * @brief MMC card start boot.
- *
- * @param card Card descriptor.
- * @param mmcConfig mmc Boot configuration structure.
- * @param buffer address to recieve data.
- * @param hostConfig host boot configurations.
- * @retval kStatus_Fail fail.
- * @retval kStatus_SDMMC_TransferFailed transfer fail.
- * @retval kStatus_SDMMC_GoIdleFailed reset card fail.
- * @retval kStatus_Success Operate successfully.
- */
- status_t MMC_StartBoot(mmc_card_t *card,
- const mmc_boot_config_t *mmcConfig,
- uint8_t *buffer,
- SDMMCHOST_BOOT_CONFIG *hostConfig);
- /*!
- * @brief MMC card set boot configuration write protect.
- *
- * @param card Card descriptor.
- * @param wp write protect value.
- */
- status_t MMC_SetBootConfigWP(mmc_card_t *card, uint8_t wp);
- /*!
- * @brief MMC card continous read boot data.
- *
- * @param card Card descriptor.
- * @param buffer buffer address.
- * @param hostConfig host boot configurations.
- */
- status_t MMC_ReadBootData(mmc_card_t *card, uint8_t *buffer, SDMMCHOST_BOOT_CONFIG *hostConfig);
- /*!
- * @brief MMC card stop boot mode.
- *
- * @param card Card descriptor.
- * @param bootMode boot mode.
- */
- status_t MMC_StopBoot(mmc_card_t *card, uint32_t bootMode);
- /*!
- * @brief MMC card set boot partition write protect.
- *
- * @param card Card descriptor.
- * @param bootPartitionWP boot partition write protect value.
- */
- status_t MMC_SetBootPartitionWP(mmc_card_t *card, mmc_boot_partition_wp_t bootPartitionWP);
- /* @} */
- #if defined(__cplusplus)
- }
- #endif
- /*! @} */
- #endif /* _FSL_MMC_H_*/
|