79 lines
3.5 KiB
C
79 lines
3.5 KiB
C
/***************************************************************************//**
|
|
* @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__ */
|