/**************************************************************************//** * @file sd.h * @version V1.00 * $Revision: 12 $ * $Date: 14/11/04 10:10a $ * @brief NUC472/NUC442 SD driver header file * * @note * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved. *****************************************************************************/ #include #ifndef __SD_H__ #define __SD_H__ /** @addtogroup NUC472_442_Device_Driver NUC472/NUC442 Device Driver @{ */ /** @addtogroup NUC472_442_SD_Driver SD Driver @{ */ /** @addtogroup NUC472_442_SD_EXPORTED_CONSTANTS SD Exported Constants @{ */ #define SD_CARD 0 #define SD_ERR_ID 0xFFFF0100 #define SD_TIMEOUT (SD_ERR_ID|0x01) #define SD_NO_MEMORY (SD_ERR_ID|0x02) //-- function return value #define Successful 0 #define Fail 1 //--- define type of SD card or MMC #define SD_TYPE_UNKNOWN 0 #define SD_TYPE_SD_HIGH 1 #define SD_TYPE_SD_LOW 2 #define SD_TYPE_MMC 3 #define SD_TYPE_EMMC 4 /* SD error */ #define SD_NO_SD_CARD (SD_ERR_ID|0x10) #define SD_ERR_DEVICE (SD_ERR_ID|0x11) #define SD_INIT_TIMEOUT (SD_ERR_ID|0x12) #define SD_SELECT_ERROR (SD_ERR_ID|0x13) #define SD_WRITE_PROTECT (SD_ERR_ID|0x14) #define SD_INIT_ERROR (SD_ERR_ID|0x15) #define SD_CRC7_ERROR (SD_ERR_ID|0x16) #define SD_CRC16_ERROR (SD_ERR_ID|0x17) #define SD_CRC_ERROR (SD_ERR_ID|0x18) #define SD_CMD8_ERROR (SD_ERR_ID|0x19) #define SD_FREQ 12000 #define SDHC_FREQ 12000 #define STOR_STRING_LEN 32 #define SD_PORT0 (1 << 0) /*!< Card select SD0 \hideinitializer */ #define SD_PORT1 (1 << 2) /*!< Card select SD1 \hideinitializer */ #define CardDetect_From_GPIO (1 << 8) /*!< Card detection pin is GPIO \hideinitializer */ #define CardDetect_From_DAT3 (1 << 9) /*!< Card detection pin is DAT3 \hideinitializer */ /*@}*/ /* end of group NUC472_442_SD_EXPORTED_CONSTANTS */ /** @addtogroup NUC472_442_SD_EXPORTED_TYPEDEF SD Exported Type Defines @{ */ typedef struct SD_info_t { uint32_t CardType; /*!< SDHC, SD, or MMC */ uint32_t RCA; /*!< relative card address */ uint8_t IsCardInsert; /*!< card insert state */ } SD_INFO_T; /* we allocate one of these for every device that we remember */ typedef struct disk_data_t { struct disk_data_t *next; /*!< next device */ /* information about the device -- always good */ unsigned int totalSectorN; /*!< total sector number */ unsigned int diskSize; /*!< disk size in Kbytes */ int sectorSize; /*!< sector size in bytes */ char vendor[STOR_STRING_LEN]; /*!< SD card vendor */ char product[STOR_STRING_LEN]; /*!< *SD card product id */ char serial[STOR_STRING_LEN]; /*!< SD card serial number */ } DISK_DATA_T; /*@}*/ /* end of group NUC472_442_SD_EXPORTED_TYPEDEF */ /// @cond HIDDEN_SYMBOLS extern SD_INFO_T SD0; extern SD_INFO_T SD1; /// @endcond HIDDEN_SYMBOLS /** @addtogroup NUC472_442_SD_EXPORTED_FUNCTIONS SD Exported Functions @{ */ /** * @brief Enable specified interrupt. * * @param[in] u32IntMask Interrupt type mask: * \ref SDH_INTEN_BLKDIEN_Msk / \ref SDH_INTEN_CRCIEN_Msk / \ref SDH_INTEN_CDIEN0_Msk / \ref SDH_INTEN_CDIEN1_Msk / * \ref SDH_INTEN_CDSRC0_Msk / \ref SDH_INTEN_CDSRC1_Msk / \ref SDH_INTEN_RTOIEN_Msk / \ref SDH_INTEN_DITOIEN_Msk / * \ref SDH_INTEN_WKIEN_Msk * * @return None. * \hideinitializer */ #define SD_ENABLE_INT(u32IntMask) (SD->INTEN |= (u32IntMask)) /** * @brief Disable specified interrupt. * * @param[in] u32IntMask Interrupt type mask: * \ref SDH_INTEN_BLKDIEN_Msk / \ref SDH_INTEN_CRCIEN_Msk / \ref SDH_INTEN_CDIEN0_Msk / \ref SDH_INTEN_CDIEN1_Msk / * \ref SDH_INTEN_SDHOST0IEN_Msk / \ref SDH_INTEN_SDHOST1IEN_Msk / \ref SDH_INTEN_RTOIEN_Msk / \ref SDH_INTEN_DITOIEN_Msk / * \ref SDH_INTEN_WKIEN_Msk / \ref SDH_INTEN_CDSRC0_Msk / \ref SDH_INTEN_CDSRC1_Msk * * @return None. * \hideinitializer */ #define SD_DISABLE_INT(u32IntMask) (SD->INTEN &= ~(u32IntMask)) /** * @brief Get specified interrupt flag/status. * * @param[in] u32IntMask Interrupt type mask: * \ref SDH_INTSTS_BLKDIF_Msk / \ref SDH_INTSTS_CRCIF_Msk / \ref SDH_INTSTS_CRC7_Msk / * \ref SDH_INTSTS_CRC16_Msk / \ref SDH_INTSTS_CRCSTS_Msk / \ref SDH_INTSTS_DAT0STS_Msk / \ref SDH_INTSTS_CDIF0_Msk / * \ref SDH_INTSTS_CDIF1_Msk / \ref SDH_INTSTS_SDHOST0IF_Msk / \ref SDH_INTSTS_SDHOST1IF_Msk / \ref SDH_INTSTS_RTOIF_Msk / * \ref SDH_INTSTS_DINTOIF_Msk / \ref SDH_INTSTS_CDSTS0_Msk / \ref SDH_INTSTS_CDSTS1_Msk / \ref SDH_INTSTS_DAT1STS_Msk * * * @return 0 = The specified interrupt is not happened. * 1 = The specified interrupt is happened. * \hideinitializer */ #define SD_GET_INT_FLAG(u32IntMask) ((SD->INTSTS & (u32IntMask))?1:0) /** * @brief Clear specified interrupt flag/status. * * @param[in] u32IntMask Interrupt type mask: * \ref SDH_INTSTS_BLKDIF_Msk / \ref SDH_INTSTS_CRCIF_Msk / \ref SDH_INTSTS_CDIF0_Msk / * \ref SDH_INTSTS_CDIF1_Msk / \ref SDH_INTSTS_SDHOST0IF_Msk / \ref SDH_INTSTS_SDHOST1IF_Msk / * \ref SDH_INTSTS_RTOIF_Msk / \ref SDH_INTSTS_DINTOIF_Msk * * * @return None. * \hideinitializer */ #define SD_CLR_INT_FLAG(u32IntMask) (SD->INTSTS = u32IntMask) /** * @brief Check SD Card inserted or removed. * * @param[in] u32CardNum Select SD0 or SD1. ( \ref SD_PORT0 / \ref SD_PORT1) * * @return 1: Card inserted. * 0: Card removed. * \hideinitializer */ #define SD_IS_CARD_PRESENT(u32CardNum) ((u32CardNum & (SD_PORT0))?(SD0.IsCardInsert):(SD1.IsCardInsert)) /** * @brief Get SD Card capacity. * * @param[in] u32CardNum Select SD0 or SD1. ( \ref SD_PORT0 / \ref SD_PORT1) * * @return SD Card capacity. (unit: KByte) * \hideinitializer */ #define SD_GET_CARD_CAPACITY(u32CardNum) ((u32CardNum & (SD_PORT0))?(SD_DiskInfo0.diskSize):(SD_DiskInfo1.diskSize)) void SD_Open(uint32_t u32CardDetSrc); void SD_Probe(uint32_t u32CardNum); uint32_t SD_Read(uint32_t u32CardNum, uint8_t *pu8BufAddr, uint32_t u32StartSec, uint32_t u32SecCount); uint32_t SD_Write(uint32_t u32CardNum, uint8_t *pu8BufAddr, uint32_t u32StartSec, uint32_t u32SecCount); /*@}*/ /* end of group NUC472_442_ADC_EXPORTED_FUNCTIONS */ /*@}*/ /* end of group NUC472_442_ADC_Driver */ /*@}*/ /* end of group NUC472_442_Device_Driver */ #endif //end of __SD_H__ /*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/