SAMV71 Xplained Ultra Software Package 1.4

sdmmc.h

Go to the documentation of this file.
00001 /* ----------------------------------------------------------------------------
00002  *         ATMEL Microcontroller Software Support
00003  * ----------------------------------------------------------------------------
00004  * Copyright (c) 2010, Atmel Corporation
00005  *
00006  * All rights reserved.
00007  *
00008  * Redistribution and use in source and binary forms, with or without
00009  * modification, are permitted provided that the following conditions are met:
00010  *
00011  * - Redistributions of source code must retain the above copyright notice,
00012  * this list of conditions and the disclaimer below.
00013  *
00014  * Atmel's name may not be used to endorse or promote products derived from
00015  * this software without specific prior written permission.
00016  *
00017  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
00018  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
00019  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
00020  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
00021  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00022  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
00023  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00024  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00025  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
00026  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027  * ----------------------------------------------------------------------------
00028  */
00029 
00030 /** \file */
00031 
00032 /** \page sdmmc_drv SD/MMC Driver Interface
00033  *
00034  *  Implementation for SD/MMC card SD/MMC mode physical layer driver.
00035  *  Supply a set of SD/MMC card SD/MMC mode's interface.
00036  *
00037  *  \section sdmmcd_usage Usage
00038  *  - Instant SD/MMC struct and uses SD/MMC definitions in application
00039  *    (see \subpage sdmmc_lib_cmd) for SD/MMC management:
00040  *   -# \ref sSdCard : Struct that defined by application for SD/MMC management.
00041  *   -# \ref sdmmc_cardtype : SD/SDIO/MMC card type definitions.
00042  *   -# \ref sdmmc_rc : Return codes for SD/MMC operation (functions).
00043  *  - General Card Support: Initialize card with SD_Init() and then you can
00044  *    read/write on card.
00045  *    -# SD_Init(): Run the SDcard initialization sequence
00046  *    -# SD_GetCardType() : Return SD/MMC reported card type.
00047  *  - SD/MMC Memory Card Operations
00048  *    -# SD_ReadBlocks() : Read blocks of data
00049  *    -# SD_WriteBlocks() : Write blocks of data
00050  *    -# SD_Read() : Read blocks of data with multi-access command
00051  *                   (Optimized read, see \ref sdmmc_read_op).
00052  *    -# SD_Write() : Read blocks of data with multi-access command
00053  *                    (Optimized write, see \ref sdmmc_write_op).
00054  *    -# SD_GetNumberBlocks() : Return SD/MMC card reported number of blocks.
00055  *    -# SD_GetBlockSize() : Return SD/MMC card reported block size.
00056  *    -# SD_GetTotalSizeKB() : Return size of SD/MMC card in KBytes.
00057  *  - SDIO Card Operations: SD_Init() also detects SDIO card and then SDIO
00058  *    read/write functions can be used.
00059  *    -# SDIO_ReadDirect() : Read bytes from registers.
00060  *    -# SDIO_WriteDirect() : Write one byte to register.
00061  *    -# SDIO_ReadBytes() : Read 1 ~ 512 bytes from card.
00062  *    -# SDIO_WriteBytes() : Write 1 ~ 512 bytes to card.
00063  */
00064 /** \addtogroup libsdmmc_module
00065  *
00066  *  \copydoc sdmmc_drv
00067  *
00068  *  For more details, see \ref sdmmc_drv.
00069  *
00070  *  Related Files:\n
00071  *  sdmmc.h,\n
00072  *  sdio.h,\n
00073  *  sdmmc_cmd.h,\n
00074  *  sdmmc_hal.h,\n
00075  *  sdmmc.c.\n
00076  *
00077  * \sa \ref sdmmc_lib
00078  *
00079  *@{
00080  *  \defgroup sdmmc_api SD/MMC APIs
00081  *  @{
00082  *  Definitions and functions for SD/MMC card access.
00083  *    \defgroup sdmmc_spec_defines SD/MMC Spec. definitions
00084  *    \defgroup sdio_api SDIO APIs
00085  *    \defgroup sdmmc_cmd SD/MMC Lib Commands Definitions
00086  *  @}
00087  */
00088 
00089 #ifndef _SDMMC_H
00090 #define _SDMMC_H
00091 
00092 /*------------------------------------------------------------------------------
00093  *      Includes
00094  *----------------------------------------------------------------------------*/
00095 /** \addtogroup sdmmc_spec_defines
00096  *  @{
00097  */
00098 
00099 #include <stdint.h>
00100 #include "sdmmc_hal.h"
00101 #include "sdio.h"
00102  
00103 /*------------------------------------------------------------------------------
00104  *      Definitions
00105  *----------------------------------------------------------------------------*/
00106 
00107 /** Default block size for SD/MMC card access */
00108 #define SD_BLOCK_SIZE       512
00109 
00110 /*----------------------------------------------------------------------------
00111  *         Macros
00112  *----------------------------------------------------------------------------*/
00113 
00114 /** \addtogroup sdmmc_stream_acc SD/MMC bits/bytes fields access
00115  *      @{
00116  */
00117 /** Get bits from a 32-b pointed data (total n bits) */
00118 #define SD_BITS32(pDw, nbits, ibit, bits)    \
00119     ( (((uint32_t*)(pDw))[(nbits)/32-(ibit)/32-1] >> ((ibit)%32)) & ((uint32_t)(1ul << (bits)) - 1 ) )
00120 /** Get bits from a 8-b pointed data (total n bits) */
00121 #define SD_BITS8(pB, nbits, ibit, bits)      \
00122     ( (((uint8_t*)(pB))[(nbits)/8-(ibit)/8-1] >> ((ibit)%8)) & ((1 << (bits)) - 1) )
00123 /** Get u8 from byte pointed data area */
00124 #define SD_U8(pD, nBytes, iByte)    ( ((uint8_t*)(pD))[(iByte)] )
00125 /** Get u16 from data area */
00126 #define SD_U16(pD, nBytes, iByte)  \
00127     ( (((uint8_t*)(pD))[(iByte)] << 0) +\
00128       (((uint8_t*)(pD))[(iByte) + 1] << 8) )
00129 /**Get u32 from data area */
00130 #define SD_U32(pD, nBytes, iByte)  \
00131     ( (((uint8_t*)(pD))[(iByte) ] <<  0) +\
00132       (((uint8_t*)(pD))[(iByte) + 1] <<  8) +\
00133       (((uint8_t*)(pD))[(iByte) + 2] << 16) +\
00134       (((uint8_t*)(pD))[(iByte) + 3] << 24) )
00135 /**     @} */
00136  
00137 /** \addtogroup sdmmc_ocr_acc SD/MMC OCR register fields (SD 2.0 & MMC 4.3)
00138  *      @{
00139  */
00140 #define SD_OCR_VDD_LOW          (1ul <<  7)     /**< SD: Reserved for Low Voltage Range */
00141 #define MMC_OCR_VDD_170_195     (1ul <<  7)     /**< MMC: 1.7 ~ 1.95V, Dual vol and eMMC is 1 */
00142 #define MMC_OCR_VDD_200_260     (0x3Ful << 8)   /**< MMC: 2.0 ~ 2.6 V */
00143 #define SD_OCR_VDD_20_21        (1ul <<  8)
00144 #define SD_OCR_VDD_21_22        (1ul <<  9)
00145 #define SD_OCR_VDD_22_23        (1ul << 10)
00146 #define SD_OCR_VDD_23_24        (1ul << 11)
00147 #define SD_OCR_VDD_24_25        (1ul << 12)
00148 #define SD_OCR_VDD_25_26        (1ul << 13)
00149 #define SD_OCR_VDD_26_27        (1ul << 14)
00150 #define SD_OCR_VDD_27_28        (1ul << 15)
00151 #define SD_OCR_VDD_28_29        (1ul << 16)
00152 #define SD_OCR_VDD_29_30        (1ul << 17)
00153 #define SD_OCR_VDD_30_31        (1ul << 18)
00154 #define SD_OCR_VDD_31_32        (1ul << 19)
00155 #define SD_OCR_VDD_32_33        (1ul << 20)
00156 #define SD_OCR_VDD_33_34        (1ul << 21)
00157 #define SD_OCR_VDD_34_35        (1ul << 22)
00158 #define SD_OCR_VDD_35_36        (1ul << 23)
00159 
00160 #define SDIO_OCR_MP             (0x1ul << 27)   /**< SDIO: Memory present */
00161 #define SDIO_OCR_NF             (0x3ul << 28)   /**< SDIO: Number of functions */
00162 #define MMC_OCR_ACCESS_MODE     (0x3ul << 29)   /**< MMC: Access mode, 0x2 is sector mode */
00163 #define MMC_OCR_ACCESS_BYTE     (0x0 << 29)     /**< MMC: Byte access mode */
00164 #define MMC_OCR_ACCESS_SECTOR   (0x2 << 29)     /**< MMC: Sector access mode */
00165 #define SD_OCR_CCS              (1ul << 30)     /**< SD Card Capacity Status (CCS) */
00166 #define SD_OCR_BUSY             (1ul << 31)     /**< SD/MMC Card power up status bit (busy) */
00167 
00168 /** We support 2.7 ~ 3.3V cards */
00169 #define SD_HOST_VOLTAGE_RANGE     (SD_OCR_VDD_27_28 +\
00170                                    SD_OCR_VDD_28_29 +\
00171                                    SD_OCR_VDD_29_30 +\
00172                                    SD_OCR_VDD_30_31 +\
00173                                    SD_OCR_VDD_31_32 +\
00174                                    SD_OCR_VDD_32_33 +\
00175                                    SD_OCR_VDD_33_34 +\
00176                                    SD_OCR_VDD_34_35 +\
00177                                    SD_OCR_VDD_35_36 )
00178 /**     @}*/
00179 
00180 /** \addtogroup sdmmc_cid_acc SD/MMC CID register fields
00181  *      @{
00182  */
00183 /** CID register access (128 bits, 16 * 8 bits, 4 * 32 bits) */
00184 #define SD_CID(pCid, field, bits)        SD_BITS32(pCid, 128, field, bits)
00185 #define SD_CID_MID(pCid)    SD_CID(pCid, 120, 8)   /**< Manufacture ID */
00186 #define eMMC_CID_CBX(pCid)  SD_CID(pCid, 112, 2)   /**< eMMC BGA(01)/CARD(00) */
00187 #define SD_CID_OID1(pCid)   SD_CID(pCid, 112, 8)   /**< OEM/App ID Byte 1 */
00188 #define SD_CID_OID0(pCid)   SD_CID(pCid, 104, 8)   /**< OEM/App ID Byte 0 */
00189 #define eMMC_CID_OID(pCid)  SD_CID(pCid, 104, 8)   /**< eMMC OEM/App ID */
00190 #define SD_CID_PNM4(pCid)   SD_CID(pCid,  96, 8)   /**< Product name byte 4 */
00191 #define SD_CID_PNM3(pCid)   SD_CID(pCid,  88, 8)   /**< Product name byte 3 */
00192 #define SD_CID_PNM2(pCid)   SD_CID(pCid,  80, 8)   /**< Product name byte 2 */
00193 #define SD_CID_PNM1(pCid)   SD_CID(pCid,  72, 8)   /**< Product name byte 1 */
00194 #define SD_CID_PNM0(pCid)   SD_CID(pCid,  64, 8)   /**< Product name byte 0 */
00195 #define MMC_CID_PNM5(pCid)  SD_CID(pCid,  96, 8)   /**< Product name byte 5 */
00196 #define MMC_CID_PNM4(pCid)  SD_CID(pCid,  88, 8)   /**< Product name byte 4 */
00197 #define MMC_CID_PNM3(pCid)  SD_CID(pCid,  80, 8)   /**< Product name byte 3 */
00198 #define MMC_CID_PNM2(pCid)  SD_CID(pCid,  72, 8)   /**< Product name byte 2 */
00199 #define MMC_CID_PNM1(pCid)  SD_CID(pCid,  64, 8)   /**< Product name byte 1 */
00200 #define MMC_CID_PNM0(pCid)  SD_CID(pCid,  56, 8)   /**< Product name byte 0 */
00201 
00202 #define SD_CID_PRV(pCid)    SD_CID(pCid,  56, 8)   /**< Product Revision */
00203 #define MMC_CID_PRV(pCid)   SD_CID(pCid,  48, 8)   /**< Product Revision */
00204 
00205 #define SD_CID_PSN3(pCid)   SD_CID(pCid,  48,  8)  /**< Product serial 3 */
00206 #define SD_CID_PSN2(pCid)   SD_CID(pCid,  40,  8)  /**< Product serial 2 */
00207 #define SD_CID_PSN1(pCid)   SD_CID(pCid,  32,  8)  /**< Product serial 1 */
00208 #define SD_CID_PSN0(pCid)   SD_CID(pCid,  24,  8)  /**< Product serial 0 */
00209 #define MMC_CID_PSN3(pCid)  SD_CID(pCid,  40,  8)  /**< Product serial 3 */
00210 #define MMC_CID_PSN2(pCid)  SD_CID(pCid,  32,  8)  /**< Product serial 2 */
00211 #define MMC_CID_PSN1(pCid)  SD_CID(pCid,  24,  8)  /**< Product serial 1 */
00212 #define MMC_CID_PSN0(pCid)  SD_CID(pCid,  16,  8)  /**< Product serial 0 */
00213 
00214 #define SD_CID_MDT_Y(pCid)  SD_CID(pCid,  12, 8)   /**< Manufacturing Year (0=2000) */
00215 #define MMC_CID_MDT_Y(pCid) SD_CID(pCid,  12, 4)   /**< Manufacturing Year (0=1997) */
00216 #define SD_CID_MDT_M(pCid)  SD_CID(pCid,   8, 4)   /**< Manufacturing month */
00217 #define SD_CID_CRC(pCid)    SD_CID(pCid,   1, 7)   /**< CRC7 checksum */
00218 /**     @}*/
00219 
00220 /** \addtogroup sdmmc_csd_acc SD/MMC CSD register fields
00221  *      @{
00222  */
00223 /** CSD register access macroes (128 bits, 16 * 8 bits, 4 * 32  bits */
00224 #define SD_CSD(pCsd, field, bits)    SD_BITS32(pCsd, 128, field, bits)
00225 #define SD_CSD_STRUCTURE(pCsd)          SD_CSD(pCsd, 126, 2) /**< CSD structure */
00226 #define SD_CSD_STRUCTURE_1_0            0 /**< SD v1.01~1.10, v2.0/Std Capacity */
00227 #define SD_CSD_STRUCTURE_2_0            1 /**< SD v2.0/HC */
00228 #define MMC_CSD_STRUCTURE_1_0           0 /**< MMC v1.0~1.2 */
00229 #define MMC_CSD_STRUCTURE_1_1           1 /**< MMC v1.4~2.2 */
00230 #define MMC_CSD_STRUCTURE_1_2           2 /**< MMC v3.1~3.31(v4.0), v4.1~(>v4.1) */
00231 #define MMC_CSD_SPEC_VERS(pCsd)         SD_CSD(pCsd, 122, 4) /**< System spec version */
00232 #define MMC_CSD_SPEC_VERS_1_0           0 /**< MMC v1.0~1.2 */
00233 #define MMC_CSD_SPEC_VERS_1_4           1 /**< MMC v1.4 */
00234 #define MMC_CSD_SPEC_VERS_2_0           2 /**< MMC v2.0~2.2 */
00235 #define MMC_CSD_SPEC_VERS_3_1           3 /**< MMC v3.1~3.31 */
00236 #define MMC_CSD_SPEC_VERS_4_0           4 /**< MMC v4.0(v4.0), v4.1~(>v4.1) */
00237 #define SD_CSD_TAAC(pCsd)               SD_CSD(pCsd, 112, 8) /**< Data read-access-time-1 */
00238 #define SD_CSD_NSAC(pCsd)               SD_CSD(pCsd, 104, 8) /**< Data read access-time-2 in CLK cycles */
00239 #define SD_CSD_TRAN_SPEED(pCsd)         SD_CSD(pCsd, 96,  8) /**< Max. data transfer rate */
00240 #define SD_CSD_CCC(pCsd)                SD_CSD(pCsd, 84, 12) /**< Card command class */
00241 #define SD_CSD_READ_BL_LEN(pCsd)        SD_CSD(pCsd, 80,  4) /**< Max. read data block length */
00242 #define SD_CSD_READ_BL_PARTIAL(pCsd)    SD_CSD(pCsd, 79,  1) /**< Bartial blocks for read allowed */
00243 #define SD_CSD_WRITE_BLK_MISALIGN(pCsd) SD_CSD(pCsd, 78,  1) /**< Write block misalignment */
00244 #define SD_CSD_READ_BLK_MISALIGN(pCsd)  SD_CSD(pCsd, 77,  1) /**< Read block misalignment */
00245 #define SD_CSD_DSR_IMP(pCsd)            SD_CSD(pCsd, 76,  1) /**< DSP implemented */
00246 #define SD_CSD_C_SIZE(pCsd)             ((SD_CSD(pCsd, 72,  2) << 10) + \
00247                                         (SD_CSD(pCsd, 64,  8) << 2)  + \
00248                                          SD_CSD(pCsd, 62,  2)) /**< Device size */
00249 #define SD2_CSD_C_SIZE(pCsd)            ((SD_CSD(pCsd, 64,  6) << 16) + \
00250                                         (SD_CSD(pCsd, 56,  8) << 8)  + \
00251                                          SD_CSD(pCsd, 48,  8)) /**< Device size v2.0 */
00252 #define SD_CSD_VDD_R_CURR_MIN(pCsd)     SD_CSD(pCsd, 59,  3) /**< Max. read current VDD min */
00253 #define SD_CSD_VDD_R_CURR_MAX(pCsd)     SD_CSD(pCsd, 56,  3) /**< Max. read current VDD max */
00254 #define SD_CSD_VDD_W_CURR_MIN(pCsd)     SD_CSD(pCsd, 53,  3) /**< Max. write current VDD min */
00255 #define SD_CSD_VDD_W_CURR_MAX(pCsd)     SD_CSD(pCsd, 50,  3) /**< Max. write current VDD max */
00256 #define SD_CSD_C_SIZE_MULT(pCsd)        SD_CSD(pCsd, 47,  3) /**< Device size multiplier */
00257 #define SD_CSD_ERASE_BLK_EN(pCsd)       SD_CSD(pCsd, 46,  1) /**< Erase single block enable */
00258 #define MMC_CSD_ERASE_BLK_EN(pCsd)      SD_CSD(pCsd, 46,  1) /**< Erase single block enable */
00259 #define MMC_CSD_ERASE_GRP_SIZE(pCsd)    SD_CSD(pCsd, 42,  4) /**< Erase group size */
00260 #define SD_CSD_ERASE_GRP_MULT(pCsd)     SD_CSD(pCsd, 37,  4) /**< Erase group size multiplier */
00261 #define SD_CSD_SECTOR_SIZE(pCsd)       ((SD_CSD(pCsd, 40,  6) << 1) \
00262                                       + SD_CSD(pCsd, 39,  1)) /**< Erase sector size*/
00263 #define SD_CSD_WP_GRP_SIZE(pCsd)        SD_CSD(pCsd, 32,  7) /**< Write protect group size*/
00264 #define SD_CSD_WP_GRP_ENABLE(pCsd)      SD_CSD(pCsd, 31,  1) /**< write protect group enable*/
00265 #define SD_CSD_R2W_FACTOR(pCsd)         SD_CSD(pCsd, 26,  3) /**< Write speed factor*/
00266 #define SD_CSD_WRITE_BL_LEN(pCsd)      ((SD_CSD(pCsd, 24,  2) << 2) \
00267                                       + SD_CSD(pCsd, 22,  2)) /**< Max write block length*/
00268 #define SD_CSD_WRITE_BL_PARTIAL(pCsd)   SD_CSD(pCsd, 21,  1) /**< Partial blocks for write allowed*/
00269 #define SD_CSD_CONTENT_PROT_APP(pCsd)   SD_CSD(pCsd, 16,  1) /**< File format group*/
00270 #define SD_CSD_FILE_FORMAT_GRP(pCsd)    SD_CSD(pCsd, 15,  1) /**< File format group*/
00271 #define SD_CSD_COPY(pCsd)               SD_CSD(pCsd, 14,  1) /**< Copy flag (OTP)*/
00272 #define SD_CSD_PERM_WRITE_PROTECT(pCsd) SD_CSD(pCsd, 13,  1) /**< Permanent write protect*/
00273 #define SD_CSD_TMP_WRITE_PROTECT(pCsd)  SD_CSD(pCsd, 12,  1) /**< Temporary write protection*/
00274 #define SD_CSD_FILE_FORMAT(pCsd)        SD_CSD(pCsd, 10,  2) /**< File format*/
00275 #define MMC_CSD_ECC(pCsd)               SD_CSD(pCsd,  8,  2) /**< ECC */
00276 #define MMC_CSD_ECC_NONE                0 /**< none */
00277 #define MMC_CSD_ECC_BCH                 1 /**< BCH, 3 correctable bits per block */
00278 #define SD_CSD_CRC(pCsd)                SD_CSD(pCsd,  1,  7) /**< CRC*/
00279 
00280 #define SD_CSD_MULT(pCsd)               (1 << (SD_CSD_C_SIZE_MULT(pCsd) + 2))
00281 #define SD_CSD_BLOCKNR(pCsd)            ((SD_CSD_C_SIZE(pCsd) + 1) * SD_CSD_MULT(pCsd))
00282 #define SD_CSD_BLOCKNR_HC(pCsd)         ((SD2_CSD_C_SIZE(pCsd) + 1) * 1024)
00283 #define SD_CSD_BLOCK_LEN(pCsd)          (1 << SD_CSD_READ_BL_LEN(pCsd))
00284 #define SD_CSD_TOTAL_SIZE(pCsd)         (SD_CSD_BLOCKNR(pCsd) * SD_CSD_BLOCK_LEN(pCsd))
00285 #define SD_CSD_TOTAL_SIZE_HC(pCsd)      ((SD2_CSD_C_SIZE(pCsd) + 1) * 512* 1024)
00286 /**     @}*/
00287 
00288 /** \addtogroup sd_scr_acc SD SCR register fields
00289  *      @{
00290  */
00291 /** SCR (Configuration register) access macros (64 bits, 2 * 32 bits, 8 * 8 bits). */
00292 #define SD_SCR(pScr, field, bits)    SD_BITS32(pScr, 64, field, bits)
00293 #define SD_SCR_STRUCTURE(pScr)              SD_SCR(pScr, 60, 4)
00294 #define     SD_SCR_STRUCTURE_1_0            0 /**< SD v1.01~2.00 */
00295 #define SD_SCR_SD_SPEC(pScr)                SD_SCR(pScr, 56, 4)
00296 #define     SD_SCR_SD_SPEC_1_0              0 /**< SD v1.0~1.01 */
00297 #define     SD_SCR_SD_SPEC_1_10             1 /**< SD v1.10 */
00298 #define     SD_SCR_SD_SPEC_2_00             2 /**< SD v2.00 */
00299 #define SD_SCR_DATA_STAT_AFTER_ERASE(pScr)  SD_SCR(pScr, 55, 1)
00300 #define SD_SCR_SD_SECURITY(pScr)            SD_SCR(pScr, 52, 3)
00301 #define     SD_SCR_SD_SECURITY_NO           0 /**< No security */
00302 #define     SD_SCR_SD_SECURITY_NOTUSED      1 /**< Not used */
00303 #define     SD_SCR_SD_SECURITY_1_01         2 /**< Version 1.01 */
00304 #define     SD_SCR_SD_SECURITY_2_00         3 /**< Version 2.00 */
00305 #define SD_SCR_SD_BUS_WIDTHS(pScr)          SD_SCR(pScr, 48, 4)
00306 #define     SD_SCR_SD_BUS_WIDTH_1BITS       (1 << 0) /**< 1 bit (DAT0) */
00307 #define     SD_SCR_SD_BUS_WIDTH_4BITS       (1 << 2) /**< 4 bit (DAT0~3) */
00308 /**     @}*/
00309 
00310 /** \addtogroup sd_card_status_acc SD Card Status fields
00311  *      @{
00312  */
00313 /** SD/MMC Card STatus bits */
00314 #define SD_CST_OUT_OF_RANGE     (1UL << 31) /**< Arg out of allowed range */
00315 #define SD_CST_ADDRESS_ERROR    (1UL << 30) /**< Misaligned address not match the block length */
00316 #define SD_CST_BLOCK_LEN_ERROR  (1UL << 29) /**< Block length invalid or not match */
00317 #define SD_CST_ERASE_SEQ_ERROR  (1UL << 28) /**< An error in the sequence of erase command */
00318 #define SD_CST_ERASE_PARAM      (1UL << 27) /**< An invalid selection of write-blocks for erase */
00319 #define SD_CST_WP_VIOLATION     (1UL << 26) /**< Write to a protected block or card */
00320 #define SD_CST_CARD_IS_LOCKED   (1UL << 25) /**< Card is locked by the host */
00321 #define SD_CST_LOCK_UNLOCK_FAILED (1UL << 24) /**< sequence or password error in lock/unlock */
00322 #define SD_CST_COM_CRC_ERROR    (1UL << 23) /**< CRC of the command failed */
00323 #define SD_CST_ILLEGAL_COMMAND  (1UL << 22) /**< Command not legal for the card state */
00324 #define SD_CST_CARD_ECC_FAILED  (1UL << 21) /**< Card internal ECC applied but failed to correct */
00325 #define SD_CST_CC_ERROR         (1UL << 20) /**< Internal card controller error */
00326 #define SD_CST_ERROR            (1UL << 19) /**< General or unknow error */
00327 #define MMC_CST_UNDERRUN        (1UL << 18) /**< Card could not sustain data transfer in stream read mode */
00328 #define MMC_CST_OVERRUN         (1UL << 17) /**< Card could not sustain data programming in stream write mode */
00329 #define SD_CST_CSD_OVERWRITE    (1UL << 16) /**< RO section of CSD not match or attempt to reverse the copy or permanent WP bits */
00330 #define SD_CST_WP_ERASE_SKIP    (1UL << 15) /**< Only partial address space was erased */
00331 #define SD_CST_ECC_DISABLED     (1UL << 14) /**< Command executed without using the internal ECC */
00332 #define SD_CST_ERASE_RESET      (1UL << 13) /**< Erase sequence was cleared before executing because an out of erase sequence command was received */
00333 #define SD_CST_CURRENT_STATE    (0xFUL << 9) /**< Card state mask */
00334 #define SD_STATE_IDLE           0
00335 #define SD_STATE_READY          1
00336 #define SD_STATE_IDENT          2
00337 #define SD_STATE_STBY           3
00338 #define SD_STATE_TRAN           4
00339 #define SD_STATE_DATA           5
00340 #define SD_STATE_RCV            6
00341 #define SD_STATE_PRG            7
00342 #define SD_STATE_DIS            8
00343 #define MMC_STATE_BTST          9
00344 #define MMC_STATE_SLP           10
00345 #define SD_CST_STATE_IDLE       (0x0UL << 9)    /**< Card IDLE */
00346 #define SD_CST_STATE_READY      (0x1UL << 9)    /**< Card READY */
00347 #define SD_CST_STATE_IDENT      (0x2UL << 9)    /**< Card Identify state */
00348 #define SD_CST_STATE_STBY       (0x3UL << 9)    /**< Card STBY */
00349 #define SD_CST_STATE_TRAN       (0x4UL << 9)    /**< Card TRAN */
00350 #define SD_CST_STATE_DATA       (0x5UL << 9)    /**< Card DATA */
00351 #define SD_CST_STATE_RCV        (0x6UL << 9)    /**< Card RCV */
00352 #define SD_CST_STATE_PRG        (0x7UL << 9)    /**< Card PRG */
00353 #define SD_CST_STATE_DIS        (0x8UL << 9)    /**< Card DIS */
00354 #define SD_CST_STATE_BTST       (0x9UL << 9)    /**< MMC BTSR */
00355 #define SD_CST_STATE_SLP        (0xAUL << 9)    /**< MMC SLP */
00356 #define SD_CST_READY_FOR_DATA   (1UL << 8)  /**< buffer empty */
00357 #define MMC_CST_SWITCH_ERROR    (1UL << 7)  /**< SWITCH command error */
00358 #define SD_CST_APP_CMD          (1UL << 5)  /**< The card will expect ACMD */
00359 #define SD_CST_AKE_SEQ_ERROR    (1UL << 3)  /**< Error in authentication */
00360 /**     @}*/
00361 
00362 /** \addtogroup sdmmc_sd_status SD/MMC status fields
00363  *      @{
00364  */
00365 /** SD Status access macros (512 bits, 16 * 32 bits, 64 * 8 bits). */
00366 #define SD_ST(pSt, field, bits)  SD_BITS32(pSt, 512, field, bits)
00367 #define SD_ST_DAT_BUS_WIDTH(pSt)           SD_ST(pSt, 510, 2) /**< Bus width, 00: default, 10:4-bit */
00368 #define     SD_ST_DATA_BUS_WIDTH_1BIT      0x0 /**< 1-bit bus width */
00369 #define     SD_ST_DATA_BUS_WIDTH_4BIT      0x2 /**< 4-bit bus width */
00370 #define SD_ST_SECURED_MODE(pSt)            SD_ST(pSt, 509, 1)  /**< Secured Mode */
00371 #define SD_ST_CARD_TYPE(pSt)            SD_ST(pSt, 480, 16)
00372 #define     SD_ST_CARD_TYPE_RW             0x0000 /**< Regular SD R/W Card */
00373 #define     SD_ST_CARD_TYPE_ROM            0x0001 /**< SD ROM Card */
00374 #define SD_ST_SIZE_OF_PROTECTED_AREA(pSt)  SD_ST(pSt, 448, 32) /**< STD: ThisSize*Multi*BlockLen, HC: Size in bytes */
00375 #define SD_ST_SPEED_CLASS(pSt)             SD_ST(pSt, 440, 8) /** Speed Class, value can be calculated by Pw/2 */
00376 #define     SD_ST_SPEED_CLASS_0            0
00377 #define     SD_ST_SPEED_CLASS_2            1  // >= 2MB/s
00378 #define     SD_ST_SPEED_CLASS_4            2  // >= 4MB/s
00379 #define     SD_ST_SPEED_CLASS_6            3  // >= 6MB/s
00380 #define SD_ST_PERFORMANCE_MOVE(pSt)        SD_ST(pSt, 432, 8) /**< 8-bit, by 1MB/s step. */
00381 #define SD_ST_AU_SIZE(pSt)                 SD_ST(pSt, 428, 4) /**< AU Size, in power of 2 from 16KB */
00382 #define     SD_ST_AU_SIZE_16K              1
00383 #define     SD_ST_AU_SIZE_32K              2
00384 #define     SD_ST_AU_SIZE_64K              3
00385 #define     SD_ST_AU_SIZE_128K             4
00386 #define     SD_ST_AU_SIZE_256K             5
00387 #define     SD_ST_AU_SIZE_512K             6
00388 #define     SD_ST_AU_SIZE_1M               7
00389 #define     SD_ST_AU_SIZE_2M               8
00390 #define     SD_ST_AU_SIZE_4M               9
00391 #define SD_ST_ERASE_SIZE(pSt)              SD_ST(pSt, 408, 16) /**< 16-bit, number of AUs erased. */
00392 #define SD_ST_ERASE_TIMEOUT(pSt)           SD_ST(pSt, 402, 6) /**< Timeout value for erasing areas */
00393 #define SD_ST_ERASE_OFFSET(pSt)            SD_ST(pSt, 400, 2) /**< Fixed offset value added to erase time */
00394 /**     @}*/
00395 
00396 /** \addtogroup sd_switch_status SD Switch Status fields
00397  *      @{
00398  */
00399 /** SD Switch Status access macros (512 bits, 16 * 32 bits, 64 * 8 bits). */
00400 #define SD_SWITCH_ST(p, field, bits)       SD_BITS32(p, 512, field, bits)
00401 #define SD_SWITCH_ST_MAX_CURRENT_CONSUMPTION(p)   SD_SWITCH_ST(p, 496, 16)
00402 #define SD_SWITCH_ST_FUN_GRP6_INFO(p)             SD_SWITCH_ST(p, 480, 16)
00403 #define SD_SWITCH_ST_FUN_GRP5_INFO(p)             SD_SWITCH_ST(p, 464, 16)
00404 #define SD_SWITCH_ST_FUN_GRP4_INFO(p)             SD_SWITCH_ST(p, 448, 16)
00405 #define SD_SWITCH_ST_FUN_GRP3_INFO(p)             SD_SWITCH_ST(p, 432, 16)
00406 #define SD_SWITCH_ST_FUN_GRP2_INFO(p)             SD_SWITCH_ST(p, 416, 16)
00407 #define SD_SWITCH_ST_FUN_GRP1_INFO(p)             SD_SWITCH_ST(p, 400, 16)
00408 #define SD_SWITCH_ST_FUN_GRP6_RC(p)               SD_SWITCH_ST(p, 396, 4)
00409 #define SD_SWITCH_ST_FUN_GRP5_RC(p)               SD_SWITCH_ST(p, 392, 4)
00410 #define SD_SWITCH_ST_FUN_GRP4_RC(p)               SD_SWITCH_ST(p, 388, 4)
00411 #define SD_SWITCH_ST_FUN_GRP3_RC(p)               SD_SWITCH_ST(p, 384, 4)
00412 #define SD_SWITCH_ST_FUN_GRP2_RC(p)               SD_SWITCH_ST(p, 380, 4)
00413 #define SD_SWITCH_ST_FUN_GRP1_RC(p)               SD_SWITCH_ST(p, 376, 4)
00414 #define     SD_SWITCH_ST_FUN_GRP_RC_ERROR         0xF
00415 #define SD_SWITCH_ST_DATA_STRUCT_VER(p)           SD_SWITCH_ST(p, 368, 8)
00416 #define SD_SWITCH_ST_FUN_GRP6_BUSY(p)             SD_SWITCH_ST(p, 352, 16)
00417 #define SD_SWITCH_ST_FUN_GRP5_BUSY(p)             SD_SWITCH_ST(p, 336, 16)
00418 #define SD_SWITCH_ST_FUN_GRP4_BUSY(p)             SD_SWITCH_ST(p, 320, 16)
00419 #define SD_SWITCH_ST_FUN_GRP3_BUSY(p)             SD_SWITCH_ST(p, 304, 16)
00420 #define SD_SWITCH_ST_FUN_GRP2_BUSY(p)             SD_SWITCH_ST(p, 288, 16)
00421 #define SD_SWITCH_ST_FUN_GRP1_BUSY(p)             SD_SWITCH_ST(p, 272, 16)
00422 #define SD_SWITCH_ST_FUN_GRP_FUN_BUSY(funNdx)     (1 << (funNdx))
00423 /**     @}*/
00424 
00425 /** \addtogroup mmc_ext_csd MMC Extended CSD byte fields
00426  *      @{
00427  */
00428 /** MMC Extended CSD access macro: get one byte (512 bytes). */
00429 #define MMC_EXT8(p, i)                  SD_U8(p, 512, i)
00430 /** MMC Extended CSD access macro: get one word (512 bytes). */
00431 #define MMC_EXT32(p, i)                 SD_U32(p, 512, i)
00432 #define MMC_EXT_S_CMD_SET_I             504 /**< Supported Command Sets slice */
00433 #define MMC_EXT_S_CMD_SET(p)            MMC_EXT8(p, MMC_EXT_S_CMD_SET_I)
00434 #define MMC_EXT_BOOT_INFO_I             228 /**< Boot information  slice */
00435 #define MMC_EXT_BOOT_INFO(p)            MMC_EXT8(p, MMC_EXT_BOOT_INFO_I)
00436 #define MMC_EXT_BOOT_SIZE_MULTI_I       226 /**< Boot partition size  slice */
00437 #define MMC_EXT_BOOT_SIZE_MULTI(p)      MMC_EXT8(p, MMC_EXT_BOOT_SIZE_MULTI_I)
00438 #define MMC_EXT_ACC_SIZE_I              225 /**< Access size slice */
00439 #define MMC_EXT_ACC_SIZE(p)             MMC_EXT8(p, MMC_EXT_ACC_SIZE_I)
00440 #define MMC_EXT_HC_ERASE_GRP_SIZE_I     224 /**< High-capacity erase time unit size slice */
00441 #define MMC_EXT_HC_ERASE_GRP_SIZE(p)    MMC_EXT8(p, MMC_EXT_HC_ERASE_GRP_SIZE_I)
00442 #define MMC_EXT_ERASE_TIMEOUT_MULT_I    223 /**< High-capacity erase timeout slice */
00443 #define MMC_EXT_ERASE_TIMEOUT_MULT(p)   MMC_EXT8(p, MMC_EXT_ERASE_TIMEOUT_MULT_I)
00444 #define MMC_EXT_REL_WR_SEC_C_I          222 /**< Reliable write sector count slice */
00445 #define MMC_EXT_REL_WR_SEC_C(p)         MMC_EXT8(p, MMC_EXT_REL_WR_SEC_C_I)
00446 #define MMC_EXT_HC_WP_GRP_SIZE_I        221 /**< High-capacity write protect group size slice */
00447 #define MMC_EXT_HC_WP_GRP_SIZE(p)       MMC_EXT8(p, MMC_EXT_HC_WP_GRP_SIZE_I)
00448 #define MMC_EXT_S_C_VCC_I               220 /**< Sleep current (VCC) */
00449 #define MMC_EXT_S_C_VCC(p)              MMC_EXT8(p, MMC_EXT_S_C_VCC_I)
00450 #define MMC_EXT_S_C_VCCQ_I              219 /**< Sleep current (VCC) */
00451 #define MMC_EXT_S_C_VCCQ(p)             MMC_EXT8(p, MMC_EXT_S_C_VCCQ_I)
00452 #define MMC_EXT_S_A_TIMEOUT_I           217 /**< Sleep current (VCCQ) */
00453 #define MMC_EXT_S_A_TIMEOUT(p)          MMC_EXT8(p, MMC_EXT_S_A_TIMEOUT_I)
00454 #define MMC_EXT_SEC_COUNT_I             212 /**< Sector Count slice */
00455 #define MMC_EXT_SEC_COUNT(p)            MMC_EXT32(p, MMC_EXT_SEC_COUNT_I)
00456 #define MMC_EXT_MIN_PERF_W_8_52_I       210 /**< Minimum Write Performance for 8bit @52MHz */
00457 #define MMC_EXT_MIN_PERF_W_8_52(p)      MMC_EXT8(p, MMC_EXT_MIN_PERF_W_8_52_I)
00458 #define MMC_EXT_MIN_PERF_R_8_52_I       209 /**< Minimum Read Performance for 8bit @52MHz */
00459 #define MMC_EXT_MIN_PERF_R_8_52(p)      MMC_EXT8(p, MMC_EXT_MIN_PERF_R_8_52_I)
00460 #define MMC_EXT_MIN_PERF_W_8_26_4_52_I  208 /**< Minimum Write Performance for 8bit @26MHz or 4bit @52MHz */
00461 #define MMC_EXT_MIN_PERF_W_8_26_4_52(p) MMC_EXT8(p, MMC_EXT_MIN_PERF_W_8_26_4_52_I)
00462 #define MMC_EXT_MIN_PERF_R_8_26_4_52_I  207 /**< Minimum Read Performance for 8bit @26MHz or 4bit @52MHz */
00463 #define MMC_EXT_MIN_PERF_R_8_26_4_52(p) MMC_EXT8(p, MMC_EXT_MIN_PERF_R_8_26_4_52_I)
00464 #define MMC_EXT_MIN_PERF_W_4_26_I       206 /**< Minimum Write Performance for 4bit @26MHz */
00465 #define MMC_EXT_MIN_PERF_W_4_26(p)      MMC_EXT8(p, MMC_EXT_MIN_PERF_W_4_26_I)
00466 #define MMC_EXT_MIN_PERF_R_4_26_I       205 /**< Minimum Read Performance for 4bit @26MHz */
00467 #define MMC_EXT_MIN_PERF_R_4_26(p)      MMC_EXT8(p, MMC_EXT_MIN_PERF_R_4_26_I)
00468 #define MMC_EXT_PWR_CL_26_360_I         203 /**< Power Class for 26MHz @ 3.6V */
00469 #define MMC_EXT_PWR_CL_26_360(p)        MMC_EXT8(p, MMC_EXT_PWR_CL_26_360_I)
00470 #define MMC_EXT_PWR_CL_52_360_I         202 /**< Power Class for 52MHz @ 3.6V */
00471 #define MMC_EXT_PWR_CL_52_360(p)        MMC_EXT8(p, MMC_EXT_PWR_CL_52_360_I)
00472 #define MMC_EXT_PWR_CL_26_195_I         201 /**< Power Class for 26MHz @ 1.95V */
00473 #define MMC_EXT_PWR_CL_26_195(p)        MMC_EXT8(p, MMC_EXT_PWR_CL_26_195_I)
00474 #define MMC_EXT_PWR_CL_52_195_I         200 /**< Power Class for 52MHz @ 1.95V */
00475 #define MMC_EXT_PWR_CL_52_195(p)        MMC_EXT8(p, MMC_EXT_PWR_CL_52_195_I)
00476 #define MMC_EXT_CARD_TYPE_I             196 /**< Card Type */
00477 #define MMC_EXT_CARD_TYPE(p)            MMC_EXT8(p, MMC_EXT_CARD_TYPE_I)
00478 #define MMC_EXT_CSD_STRUCTURE_I         194 /**< CSD Structure Version */
00479 #define MMC_EXT_CSD_STRUCTURE(p)        MMC_EXT8(p, MMC_EXT_CSD_STRUCTURE_I)
00480 #define MMC_EXT_EXT_CSD_REV_I           192 /**< Extended CSD Revision */
00481 #define MMC_EXT_EXT_CSD_REV(p)          MMC_EXT8(p, MMC_EXT_EXT_CSD_REV_I)
00482 #define MMC_EXT_CMD_SET_I               191 /**< Command Set */
00483 #define MMC_EXT_CMD_SET(p)              MMC_EXT8(p, MMC_EXT_CMD_SET_I)
00484 #define MMC_EXT_CMD_SET_REV_I           189 /**< Command Set Revision */
00485 #define MMC_EXT_CMD_SET_REV(p)          MMC_EXT8(p, MMC_EXT_CMD_SET_REV_I)
00486 #define MMC_EXT_POWER_CLASS_I           187 /**< Power Class */
00487 #define MMC_EXT_POWER_CLASS(p)          MMC_EXT8(p, MMC_EXT_POWER_CLASS_I)
00488 #define MMC_EXT_HS_TIMING_I             185 /**< High Speed Interface Timing */
00489 #define MMC_EXT_HS_TIMING(p)            MMC_EXT8(p, MMC_EXT_HS_TIMING_I)
00490 #define     MMC_EXT_HS_TIMING_EN        1
00491 #define     MMC_EXT_HS_TIMING_DIS       0
00492 #define MMC_EXT_BUS_WIDTH_I             183 /**< Bus Width Mode */
00493 #define MMC_EXT_BUS_WIDTH(p)            MMC_EXT8(p, MMC_EXT_BUS_WIDTH_I)
00494 #define     MMC_EXT_BUS_WIDTH_1BIT      0
00495 #define     MMC_EXT_BUS_WIDTH_4BITS     1
00496 #define     MMC_EXT_BUS_WIDTH_8BUTS     2
00497 #define MMC_EXT_ERASED_MEM_CONT_I       181 /**< Erased Memory Content */
00498 #define MMC_EXT_ERASED_MEM_CONT(p)      MMC_EXT8(p, MMC_EXT_ERASED_MEM_CONT_I)
00499 #define MMC_EXT_BOOT_CONFIG_I           179 /**< Boot configuration slice */
00500 #define MMC_EXT_BOOT_CONFIG(p)          MMC_EXT8(p, MMC_EXT_BOOT_CONFIG_I)
00501 #define MMC_EXT_BOOT_BUS_WIDTH_I        177 /**< Boot bus width slice */
00502 #define MMC_EXT_BOOT_BUS_WIDTH(p)       MMC_EXT8(p, MMC_EXT_BOOT_BUS_WIDTH_I)
00503 #define MMC_EXT_ERASE_GROUP_DEF_I       175 /**< High-density erase group definition */
00504 #define MMC_EXT_ERASE_GROUP_DEF(p)      MMC_EXT8(p, MMC_EXT_ERASE_GROUP_DEF_I)
00505 /**     @}*/
00506 
00507 /** \addtogroup sd_cmd8 SD CMD8 arguments
00508  *      @{
00509  */
00510 #define SD_CMD8_VHS             (0xFul << 8)   /**< Voltage supplied */
00511 #define SD_CMD8_VHS_27_36       (0x1ul << 8)   /**< 2.7 ~ 3.6V */
00512 #define SD_CMD8_VHS_LOW_VOL     (0x2ul << 8)   /**< Reserved for Low Voltage Range */
00513 #define SD_CMD8_CHECK_PATTERN   (0xAA  << 0)   /**< Recommended check pattern */
00514 /**     @}*/
00515 /**   @}*/
00516 
00517 /*----------------------------------------------------------------------------
00518  *      Types
00519  *----------------------------------------------------------------------------*/
00520 
00521 /*----------------------------------------------------------------------------
00522  *      Functions
00523  *----------------------------------------------------------------------------*/
00524 /** \addtogroup sdmmc_api
00525         @{*/
00526 
00527 extern uint8_t SD_Init(sSdCard *pSd);
00528 extern void SD_DeInit(sSdCard *pSd);
00529 
00530 extern uint8_t SD_SetupBusMode(sSdCard *pSd, uint8_t bMode);
00531 extern uint8_t SD_SetupHSMode(sSdCard *pSd, uint8_t bMode);
00532 
00533 extern uint8_t  SD_GetCardType(sSdCard *pSd);
00534 extern uint32_t SD_GetNumberBlocks(sSdCard *pSd);
00535 extern uint32_t SD_GetBlockSize(sSdCard *pSd);
00536 extern uint32_t SD_GetTotalSizeKB(sSdCard *pSd);
00537 
00538 extern uint8_t SD_ReadBlocks(sSdCard  *pSd,
00539                               uint32_t dwAddr,
00540                               void    *pData,
00541                               uint32_t dwNbBlocks);
00542 extern uint8_t SD_WriteBlocks(sSdCard  *pSd,
00543                                uint32_t dwAddr,
00544                                const void *pData,
00545                                uint32_t dwNbBlocks);
00546 
00547 extern uint8_t SD_Read(sSdCard *pSd,
00548                        uint32_t dwAddr,
00549                        void    *pData,
00550                        uint32_t dwNbBlocks,
00551                        fSdmmcCallback fCallback,
00552                        void *pArg);
00553 extern uint8_t SD_Write(sSdCard *pSd,
00554                         uint32_t dwAddr,
00555                         const void *pData,
00556                         uint32_t dwNbBlocks,
00557                         fSdmmcCallback fCallback,
00558                         void *pArg);
00559 
00560 extern uint8_t SDIO_ReadDirect(
00561     sSdCard * pSd,
00562     uint8_t bFunctionNum,
00563     uint32_t dwAddress,
00564     uint8_t * pData,
00565     uint32_t dwSize);
00566 
00567 extern uint8_t SDIO_WriteDirect(
00568     sSdCard * pSd,
00569     uint8_t bFunctionNum,
00570     uint32_t dwAddress,
00571     uint8_t bDataByte);
00572 
00573 extern uint8_t SDIO_ReadBytes(
00574     sSdCard * pSd,
00575     uint8_t bFunctionNum,
00576     uint32_t dwAddress,
00577     uint8_t bIsFixedAddress,
00578     uint8_t * pData,
00579     uint16_t wSize,
00580     fSdmmcCallback fCallback,
00581     void * pArg);
00582 
00583 extern uint8_t SDIO_WriteBytes(
00584     sSdCard * pSd,
00585     uint8_t bFunctionNum,
00586     uint32_t dwAddress,
00587     uint8_t bIsFixedAddress,
00588     uint8_t * pData,
00589     uint16_t wSize,
00590     fSdmmcCallback fCallback,
00591     void * pArg);
00592 
00593 
00594 extern void _DumpREG(void* pREG, uint32_t dwSize);
00595 
00596 extern void SDIO_DumpCardInformation(sSdCard * pSd);
00597 
00598 extern void SD_DumpCID(void * pCID);
00599 
00600 extern void SD_DumpCSD(void * pCSD);
00601 
00602 extern void SD_DumpExtCSD(void * pExtCSD);
00603 
00604 extern void SD_DumpSCR(void * pSCR);
00605 
00606 extern void SD_DumpSdStatus(void * pSdST);
00607 
00608 /**     @}*/
00609 /** @}*/
00610 /**@}*/
00611 #endif /* #define _SDMMC_H */
00612 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines