/***************************************************************************//** * @file drv_sdcard.h * @brief Memory card driver (SPI mode) of RT-Thread RTOS for using EFM32 * USART module * COPYRIGHT (C) 2012, RT-Thread Development Team * @author onelife * @version 1.0 ******************************************************************************* * @section License * The license and distribution terms for this file may be found in the file * LICENSE in this distribution or at http://www.rt-thread.org/license/LICENSE ******************************************************************************* * @section Change Logs * Date Author Notes * 2011-05-13 onelife Initial creation for using EFM32 USART module * 2011-07-07 onelife Modify initialization function to return error code ******************************************************************************/ #ifndef __DEV_SDCARD_H__ #define __DEV_SDCARD_H__ /* Includes ------------------------------------------------------------------*/ /* Exported types ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/ #define EFM32_SDCLK_LOW (100000) #if defined(EFM32_GXXX_DK) #define EFM32_SDCLK_HIGH (16000000) #elif defined(EFM32GG_DK3750) #define EFM32_SDCLK_HIGH (19000000) #endif #if (EFM32_SDCLK_HIGH > (EFM32_HFXO_FREQUENCY/2)) #error "EFM32 SPI clock should not be more than (EFM32_HFXO_FREQUENCY/2)" #endif #define SD_SPEED_LOW (0) #define SD_SPEED_HIGH (1) #define SD_WAIT_PERIOD (RT_TICK_PER_SECOND) #define SD_SECTOR_SIZE_SHIFT (9) #define SD_SECTOR_SIZE (1 << SD_SECTOR_SIZE_SHIFT) #define SD_BLOCK_SIZE_CSD (16) #define SD_BLOCK_SIZE_CID (16) #define SD_BLOCK_SIZE_OCR (4) #define SD_BLOCK_SIZE_SDSTAT (64) /* Card type definitions (CardType) */ #define CT_MMC (0x01) #define CT_SD1 (0x02) #define CT_SD2 (0x04) #define CT_SDC (CT_SD1|CT_SD2) #define CT_BLOCK (0x08) /* Definitions for MMC/SDC command */ #define CMD0 (0) /* GO_IDLE_STATE */ #define CMD1 (1) /* SEND_OP_COND */ #define ACMD41 (41|0x80) /* SEND_OP_COND (SDC) */ #define CMD8 (8) /* SEND_IF_COND */ #define CMD9 (9) /* SEND_CSD */ #define CMD10 (10) /* SEND_CID */ #define CMD12 (12) /* STOP_TRANSMISSION */ #define ACMD13 (13|0x80) /* SD_STATUS (SDC) */ #define CMD16 (16) /* SET_BLOCKLEN */ #define CMD17 (17) /* READ_SINGLE_BLOCK */ #define CMD18 (18) /* READ_MULTIPLE_BLOCK */ #define CMD23 (23) /* SET_BLOCK_COUNT */ #define ACMD23 (23|0x80) /* SET_WR_BLK_ERASE_COUNT (SDC) */ #define CMD24 (24) /* WRITE_BLOCK */ #define CMD25 (25) /* WRITE_MULTIPLE_BLOCK */ #define CMD41 (41) /* SEND_OP_COND (ACMD) */ #define CMD55 (55) /* APP_CMD */ #define CMD58 (58) /* READ_OCR */ /* Exported functions ------------------------------------------------------- */ rt_err_t efm_spiSd_init(void); void efm_spiSd_deinit(void); #endif /* __DEV_SDCARD_H__ */