mbed library sources. Supersedes mbed-src.
Fork of mbed-dev by
targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sd.h@149:156823d33999, 2016-10-28 (annotated)
- Committer:
- <>
- Date:
- Fri Oct 28 11:17:30 2016 +0100
- Revision:
- 149:156823d33999
This updates the lib to the mbed lib v128
NOTE: This release includes a restructuring of the file and directory locations and thus some
include paths in your code may need updating accordingly.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
<> | 149:156823d33999 | 1 | /**************************************************************************//** |
<> | 149:156823d33999 | 2 | * @file sd.h |
<> | 149:156823d33999 | 3 | * @version V1.00 |
<> | 149:156823d33999 | 4 | * $Revision: 12 $ |
<> | 149:156823d33999 | 5 | * $Date: 14/11/04 10:10a $ |
<> | 149:156823d33999 | 6 | * @brief NUC472/NUC442 SD driver header file |
<> | 149:156823d33999 | 7 | * |
<> | 149:156823d33999 | 8 | * @note |
<> | 149:156823d33999 | 9 | * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved. |
<> | 149:156823d33999 | 10 | *****************************************************************************/ |
<> | 149:156823d33999 | 11 | #include <stdio.h> |
<> | 149:156823d33999 | 12 | |
<> | 149:156823d33999 | 13 | #ifndef __SD_H__ |
<> | 149:156823d33999 | 14 | #define __SD_H__ |
<> | 149:156823d33999 | 15 | |
<> | 149:156823d33999 | 16 | /** @addtogroup NUC472_442_Device_Driver NUC472/NUC442 Device Driver |
<> | 149:156823d33999 | 17 | @{ |
<> | 149:156823d33999 | 18 | */ |
<> | 149:156823d33999 | 19 | |
<> | 149:156823d33999 | 20 | /** @addtogroup NUC472_442_SD_Driver SD Driver |
<> | 149:156823d33999 | 21 | @{ |
<> | 149:156823d33999 | 22 | */ |
<> | 149:156823d33999 | 23 | |
<> | 149:156823d33999 | 24 | |
<> | 149:156823d33999 | 25 | /** @addtogroup NUC472_442_SD_EXPORTED_CONSTANTS SD Exported Constants |
<> | 149:156823d33999 | 26 | @{ |
<> | 149:156823d33999 | 27 | */ |
<> | 149:156823d33999 | 28 | |
<> | 149:156823d33999 | 29 | #define SD_CARD 0 |
<> | 149:156823d33999 | 30 | #define SD_ERR_ID 0xFFFF0100 |
<> | 149:156823d33999 | 31 | |
<> | 149:156823d33999 | 32 | #define SD_TIMEOUT (SD_ERR_ID|0x01) |
<> | 149:156823d33999 | 33 | #define SD_NO_MEMORY (SD_ERR_ID|0x02) |
<> | 149:156823d33999 | 34 | |
<> | 149:156823d33999 | 35 | //-- function return value |
<> | 149:156823d33999 | 36 | #define Successful 0 |
<> | 149:156823d33999 | 37 | #define Fail 1 |
<> | 149:156823d33999 | 38 | |
<> | 149:156823d33999 | 39 | //--- define type of SD card or MMC |
<> | 149:156823d33999 | 40 | #define SD_TYPE_UNKNOWN 0 |
<> | 149:156823d33999 | 41 | #define SD_TYPE_SD_HIGH 1 |
<> | 149:156823d33999 | 42 | #define SD_TYPE_SD_LOW 2 |
<> | 149:156823d33999 | 43 | #define SD_TYPE_MMC 3 |
<> | 149:156823d33999 | 44 | #define SD_TYPE_EMMC 4 |
<> | 149:156823d33999 | 45 | |
<> | 149:156823d33999 | 46 | /* SD error */ |
<> | 149:156823d33999 | 47 | #define SD_NO_SD_CARD (SD_ERR_ID|0x10) |
<> | 149:156823d33999 | 48 | #define SD_ERR_DEVICE (SD_ERR_ID|0x11) |
<> | 149:156823d33999 | 49 | #define SD_INIT_TIMEOUT (SD_ERR_ID|0x12) |
<> | 149:156823d33999 | 50 | #define SD_SELECT_ERROR (SD_ERR_ID|0x13) |
<> | 149:156823d33999 | 51 | #define SD_WRITE_PROTECT (SD_ERR_ID|0x14) |
<> | 149:156823d33999 | 52 | #define SD_INIT_ERROR (SD_ERR_ID|0x15) |
<> | 149:156823d33999 | 53 | #define SD_CRC7_ERROR (SD_ERR_ID|0x16) |
<> | 149:156823d33999 | 54 | #define SD_CRC16_ERROR (SD_ERR_ID|0x17) |
<> | 149:156823d33999 | 55 | #define SD_CRC_ERROR (SD_ERR_ID|0x18) |
<> | 149:156823d33999 | 56 | #define SD_CMD8_ERROR (SD_ERR_ID|0x19) |
<> | 149:156823d33999 | 57 | |
<> | 149:156823d33999 | 58 | #define SD_FREQ 12000 |
<> | 149:156823d33999 | 59 | #define SDHC_FREQ 12000 |
<> | 149:156823d33999 | 60 | |
<> | 149:156823d33999 | 61 | #define STOR_STRING_LEN 32 |
<> | 149:156823d33999 | 62 | |
<> | 149:156823d33999 | 63 | #define SD_PORT0 (1 << 0) /*!< Card select SD0 \hideinitializer */ |
<> | 149:156823d33999 | 64 | #define SD_PORT1 (1 << 2) /*!< Card select SD1 \hideinitializer */ |
<> | 149:156823d33999 | 65 | |
<> | 149:156823d33999 | 66 | #define CardDetect_From_GPIO (1 << 8) /*!< Card detection pin is GPIO \hideinitializer */ |
<> | 149:156823d33999 | 67 | #define CardDetect_From_DAT3 (1 << 9) /*!< Card detection pin is DAT3 \hideinitializer */ |
<> | 149:156823d33999 | 68 | |
<> | 149:156823d33999 | 69 | /*@}*/ /* end of group NUC472_442_SD_EXPORTED_CONSTANTS */ |
<> | 149:156823d33999 | 70 | |
<> | 149:156823d33999 | 71 | /** @addtogroup NUC472_442_SD_EXPORTED_TYPEDEF SD Exported Type Defines |
<> | 149:156823d33999 | 72 | @{ |
<> | 149:156823d33999 | 73 | */ |
<> | 149:156823d33999 | 74 | typedef struct SD_info_t { |
<> | 149:156823d33999 | 75 | uint32_t CardType; /*!< SDHC, SD, or MMC */ |
<> | 149:156823d33999 | 76 | uint32_t RCA; /*!< relative card address */ |
<> | 149:156823d33999 | 77 | uint8_t IsCardInsert; /*!< card insert state */ |
<> | 149:156823d33999 | 78 | } SD_INFO_T; |
<> | 149:156823d33999 | 79 | |
<> | 149:156823d33999 | 80 | /* we allocate one of these for every device that we remember */ |
<> | 149:156823d33999 | 81 | typedef struct disk_data_t { |
<> | 149:156823d33999 | 82 | struct disk_data_t *next; /*!< next device */ |
<> | 149:156823d33999 | 83 | |
<> | 149:156823d33999 | 84 | /* information about the device -- always good */ |
<> | 149:156823d33999 | 85 | unsigned int totalSectorN; /*!< total sector number */ |
<> | 149:156823d33999 | 86 | unsigned int diskSize; /*!< disk size in Kbytes */ |
<> | 149:156823d33999 | 87 | int sectorSize; /*!< sector size in bytes */ |
<> | 149:156823d33999 | 88 | char vendor[STOR_STRING_LEN]; /*!< SD card vendor */ |
<> | 149:156823d33999 | 89 | char product[STOR_STRING_LEN]; /*!< *SD card product id */ |
<> | 149:156823d33999 | 90 | char serial[STOR_STRING_LEN]; /*!< SD card serial number */ |
<> | 149:156823d33999 | 91 | } DISK_DATA_T; |
<> | 149:156823d33999 | 92 | |
<> | 149:156823d33999 | 93 | /*@}*/ /* end of group NUC472_442_SD_EXPORTED_TYPEDEF */ |
<> | 149:156823d33999 | 94 | |
<> | 149:156823d33999 | 95 | /// @cond HIDDEN_SYMBOLS |
<> | 149:156823d33999 | 96 | extern SD_INFO_T SD0; |
<> | 149:156823d33999 | 97 | extern SD_INFO_T SD1; |
<> | 149:156823d33999 | 98 | /// @endcond HIDDEN_SYMBOLS |
<> | 149:156823d33999 | 99 | |
<> | 149:156823d33999 | 100 | /** @addtogroup NUC472_442_SD_EXPORTED_FUNCTIONS SD Exported Functions |
<> | 149:156823d33999 | 101 | @{ |
<> | 149:156823d33999 | 102 | */ |
<> | 149:156823d33999 | 103 | |
<> | 149:156823d33999 | 104 | |
<> | 149:156823d33999 | 105 | |
<> | 149:156823d33999 | 106 | |
<> | 149:156823d33999 | 107 | /** |
<> | 149:156823d33999 | 108 | * @brief Enable specified interrupt. |
<> | 149:156823d33999 | 109 | * |
<> | 149:156823d33999 | 110 | * @param[in] u32IntMask Interrupt type mask: |
<> | 149:156823d33999 | 111 | * \ref SDH_INTEN_BLKDIEN_Msk / \ref SDH_INTEN_CRCIEN_Msk / \ref SDH_INTEN_CDIEN0_Msk / \ref SDH_INTEN_CDIEN1_Msk / |
<> | 149:156823d33999 | 112 | * \ref SDH_INTEN_CDSRC0_Msk / \ref SDH_INTEN_CDSRC1_Msk / \ref SDH_INTEN_RTOIEN_Msk / \ref SDH_INTEN_DITOIEN_Msk / |
<> | 149:156823d33999 | 113 | * \ref SDH_INTEN_WKIEN_Msk |
<> | 149:156823d33999 | 114 | * |
<> | 149:156823d33999 | 115 | * @return None. |
<> | 149:156823d33999 | 116 | * \hideinitializer |
<> | 149:156823d33999 | 117 | */ |
<> | 149:156823d33999 | 118 | #define SD_ENABLE_INT(u32IntMask) (SD->INTEN |= (u32IntMask)) |
<> | 149:156823d33999 | 119 | |
<> | 149:156823d33999 | 120 | /** |
<> | 149:156823d33999 | 121 | * @brief Disable specified interrupt. |
<> | 149:156823d33999 | 122 | * |
<> | 149:156823d33999 | 123 | * @param[in] u32IntMask Interrupt type mask: |
<> | 149:156823d33999 | 124 | * \ref SDH_INTEN_BLKDIEN_Msk / \ref SDH_INTEN_CRCIEN_Msk / \ref SDH_INTEN_CDIEN0_Msk / \ref SDH_INTEN_CDIEN1_Msk / |
<> | 149:156823d33999 | 125 | * \ref SDH_INTEN_SDHOST0IEN_Msk / \ref SDH_INTEN_SDHOST1IEN_Msk / \ref SDH_INTEN_RTOIEN_Msk / \ref SDH_INTEN_DITOIEN_Msk / |
<> | 149:156823d33999 | 126 | * \ref SDH_INTEN_WKIEN_Msk / \ref SDH_INTEN_CDSRC0_Msk / \ref SDH_INTEN_CDSRC1_Msk |
<> | 149:156823d33999 | 127 | * |
<> | 149:156823d33999 | 128 | * @return None. |
<> | 149:156823d33999 | 129 | * \hideinitializer |
<> | 149:156823d33999 | 130 | */ |
<> | 149:156823d33999 | 131 | #define SD_DISABLE_INT(u32IntMask) (SD->INTEN &= ~(u32IntMask)) |
<> | 149:156823d33999 | 132 | |
<> | 149:156823d33999 | 133 | /** |
<> | 149:156823d33999 | 134 | * @brief Get specified interrupt flag/status. |
<> | 149:156823d33999 | 135 | * |
<> | 149:156823d33999 | 136 | * @param[in] u32IntMask Interrupt type mask: |
<> | 149:156823d33999 | 137 | * \ref SDH_INTSTS_BLKDIF_Msk / \ref SDH_INTSTS_CRCIF_Msk / \ref SDH_INTSTS_CRC7_Msk / |
<> | 149:156823d33999 | 138 | * \ref SDH_INTSTS_CRC16_Msk / \ref SDH_INTSTS_CRCSTS_Msk / \ref SDH_INTSTS_DAT0STS_Msk / \ref SDH_INTSTS_CDIF0_Msk / |
<> | 149:156823d33999 | 139 | * \ref SDH_INTSTS_CDIF1_Msk / \ref SDH_INTSTS_SDHOST0IF_Msk / \ref SDH_INTSTS_SDHOST1IF_Msk / \ref SDH_INTSTS_RTOIF_Msk / |
<> | 149:156823d33999 | 140 | * \ref SDH_INTSTS_DINTOIF_Msk / \ref SDH_INTSTS_CDSTS0_Msk / \ref SDH_INTSTS_CDSTS1_Msk / \ref SDH_INTSTS_DAT1STS_Msk |
<> | 149:156823d33999 | 141 | * |
<> | 149:156823d33999 | 142 | * |
<> | 149:156823d33999 | 143 | * @return 0 = The specified interrupt is not happened. |
<> | 149:156823d33999 | 144 | * 1 = The specified interrupt is happened. |
<> | 149:156823d33999 | 145 | * \hideinitializer |
<> | 149:156823d33999 | 146 | */ |
<> | 149:156823d33999 | 147 | #define SD_GET_INT_FLAG(u32IntMask) ((SD->INTSTS & (u32IntMask))?1:0) |
<> | 149:156823d33999 | 148 | |
<> | 149:156823d33999 | 149 | |
<> | 149:156823d33999 | 150 | /** |
<> | 149:156823d33999 | 151 | * @brief Clear specified interrupt flag/status. |
<> | 149:156823d33999 | 152 | * |
<> | 149:156823d33999 | 153 | * @param[in] u32IntMask Interrupt type mask: |
<> | 149:156823d33999 | 154 | * \ref SDH_INTSTS_BLKDIF_Msk / \ref SDH_INTSTS_CRCIF_Msk / \ref SDH_INTSTS_CDIF0_Msk / |
<> | 149:156823d33999 | 155 | * \ref SDH_INTSTS_CDIF1_Msk / \ref SDH_INTSTS_SDHOST0IF_Msk / \ref SDH_INTSTS_SDHOST1IF_Msk / |
<> | 149:156823d33999 | 156 | * \ref SDH_INTSTS_RTOIF_Msk / \ref SDH_INTSTS_DINTOIF_Msk |
<> | 149:156823d33999 | 157 | * |
<> | 149:156823d33999 | 158 | * |
<> | 149:156823d33999 | 159 | * @return None. |
<> | 149:156823d33999 | 160 | * \hideinitializer |
<> | 149:156823d33999 | 161 | */ |
<> | 149:156823d33999 | 162 | #define SD_CLR_INT_FLAG(u32IntMask) (SD->INTSTS = u32IntMask) |
<> | 149:156823d33999 | 163 | |
<> | 149:156823d33999 | 164 | |
<> | 149:156823d33999 | 165 | /** |
<> | 149:156823d33999 | 166 | * @brief Check SD Card inserted or removed. |
<> | 149:156823d33999 | 167 | * |
<> | 149:156823d33999 | 168 | * @param[in] u32CardNum Select SD0 or SD1. ( \ref SD_PORT0 / \ref SD_PORT1) |
<> | 149:156823d33999 | 169 | * |
<> | 149:156823d33999 | 170 | * @return 1: Card inserted. |
<> | 149:156823d33999 | 171 | * 0: Card removed. |
<> | 149:156823d33999 | 172 | * \hideinitializer |
<> | 149:156823d33999 | 173 | */ |
<> | 149:156823d33999 | 174 | #define SD_IS_CARD_PRESENT(u32CardNum) ((u32CardNum & (SD_PORT0))?(SD0.IsCardInsert):(SD1.IsCardInsert)) |
<> | 149:156823d33999 | 175 | |
<> | 149:156823d33999 | 176 | /** |
<> | 149:156823d33999 | 177 | * @brief Get SD Card capacity. |
<> | 149:156823d33999 | 178 | * |
<> | 149:156823d33999 | 179 | * @param[in] u32CardNum Select SD0 or SD1. ( \ref SD_PORT0 / \ref SD_PORT1) |
<> | 149:156823d33999 | 180 | * |
<> | 149:156823d33999 | 181 | * @return SD Card capacity. (unit: KByte) |
<> | 149:156823d33999 | 182 | * \hideinitializer |
<> | 149:156823d33999 | 183 | */ |
<> | 149:156823d33999 | 184 | #define SD_GET_CARD_CAPACITY(u32CardNum) ((u32CardNum & (SD_PORT0))?(SD_DiskInfo0.diskSize):(SD_DiskInfo1.diskSize)) |
<> | 149:156823d33999 | 185 | |
<> | 149:156823d33999 | 186 | |
<> | 149:156823d33999 | 187 | void SD_Open(uint32_t u32CardDetSrc); |
<> | 149:156823d33999 | 188 | void SD_Probe(uint32_t u32CardNum); |
<> | 149:156823d33999 | 189 | uint32_t SD_Read(uint32_t u32CardNum, uint8_t *pu8BufAddr, uint32_t u32StartSec, uint32_t u32SecCount); |
<> | 149:156823d33999 | 190 | uint32_t SD_Write(uint32_t u32CardNum, uint8_t *pu8BufAddr, uint32_t u32StartSec, uint32_t u32SecCount); |
<> | 149:156823d33999 | 191 | |
<> | 149:156823d33999 | 192 | |
<> | 149:156823d33999 | 193 | |
<> | 149:156823d33999 | 194 | /*@}*/ /* end of group NUC472_442_ADC_EXPORTED_FUNCTIONS */ |
<> | 149:156823d33999 | 195 | |
<> | 149:156823d33999 | 196 | /*@}*/ /* end of group NUC472_442_ADC_Driver */ |
<> | 149:156823d33999 | 197 | |
<> | 149:156823d33999 | 198 | /*@}*/ /* end of group NUC472_442_Device_Driver */ |
<> | 149:156823d33999 | 199 | |
<> | 149:156823d33999 | 200 | #endif //end of __SD_H__ |
<> | 149:156823d33999 | 201 | /*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/ |