#ifndef __EMMC_DRIVER_H #define __EMMC_DRIVER_H #ifdef __cplusplus extern "C" { #endif #include ARCH_HEADER #include ARCH_HAL_HEADER /** * @brief SD status structure definition */ #define MSD_OK ((uint8_t)0x00) #define MSD_ERROR ((uint8_t)0x01) #define MSD_ERROR_SD_NOT_PRESENT ((uint8_t)0x02) #define SD_PRESENT ((uint8_t)0x01) #define SD_NOT_PRESENT ((uint8_t)0x00) #define SD_CMD_SWITCH ((uint8_t)6) #define SD_CMD_SWITCH_WRITE_BYTE ((uint32_t)3) #define SD_ECSD_BUS_WIDTH ((uint32_t)183) #define SD_ECSD_BUS_WIDTH_8B ((uint32_t)2) #define OCR_READY ((uint32_t)0x80000000) #define SD_CARD_LOCKED ((uint32_t)0x02000000) #define SD_DATATIMEOUT ((uint32_t)100000000) /* * @brief: DMA definitions for SD DMA transfer * */ #define __DMAx_TxRx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE #define SD_DMAx_Tx_CHANNEL DMA_CHANNEL_4 #define SD_DMAx_Rx_CHANNEL DMA_CHANNEL_4 #define SD_DMAx_Tx_STREAM DMA2_Stream6 #define SD_DMAx_Rx_STREAM DMA2_Stream3 #define SD_DMAx_Tx_IRQn DMA2_Stream6_IRQn #define SD_DMAx_Rx_IRQn DMA2_Stream3_IRQn #define SD_DMAx_Tx_IRQHandler DMA2_Stream6_IRQHandler #define SD_DMAx_Rx_IRQHandler DMA2_Stream3_IRQHandler /* * @brief: EMMC functions * */ uint8_t emmc_init(void); uint8_t emmc_deinit(void); uint8_t emmc_read_blocks(uint32_t *pData, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumOfBlocks); uint8_t emmc_write_blocks(uint32_t *pData, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumOfBlocks); uint8_t emmc_read_blocks_dma(uint32_t *pData, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumOfBlocks); uint8_t emmc_write_blocks_dma(uint32_t *pData, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumOfBlocks); uint8_t emmc_erase(uint64_t StartAddr, uint64_t EndAddr); void SD_DMAx_Tx_IRQHandler(void); void SD_DMAx_Rx_IRQHandler(void); HAL_SD_TransferStateTypedef emmc_get_status(void); HAL_SD_ErrorTypedef emmc_get_info(HAL_SD_CardInfoTypedef *CardInfo); // These functions can be modified in case the current settings (e.g. DMA stream) need to be changed for specific application needs void emmc_msp_init(SD_HandleTypeDef *hsd, void *Params); void emmc_msp_deinit(SD_HandleTypeDef *hsd, void *Params); #ifdef __cplusplus } #endif #endif /* __EMMC_DRIVER_H */