SDHI_driver patch (mbedOS 5.11.5)

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers sdif.h Source File

sdif.h

00001 /******************************************************************************
00002 *   DISCLAIMER
00003 *
00004 *   This software is supplied by Renesas Electronics Corporation and is only 
00005 *   intended for use with Renesas products. No other uses are authorized.
00006 *
00007 *   This software is owned by Renesas Electronics Corporation and is protected under 
00008 *   all applicable laws, including copyright laws.
00009 *
00010 *   THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES 
00011 *   REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, 
00012 *   INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
00013 *   PARTICULAR PURPOSE AND NON-INFRINGEMENT.  ALL SUCH WARRANTIES ARE EXPRESSLY 
00014 *   DISCLAIMED.
00015 *
00016 *   TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS 
00017 *   ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE 
00018 *   FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES 
00019 *   FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS
00020 *   AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
00021 *
00022 *   Renesas reserves the right, without notice, to make changes to this 
00023 *   software and to discontinue the availability of this software.
00024 *   By using this software, you agree to the additional terms and 
00025 *   conditions found by accessing the following link: 
00026 *   http://www.renesas.com/disclaimer
00027 ********************************************************************************
00028 * Copyright (C) 2013 Renesas Electronics Corporation. All rights reserved. 
00029 **************************** Technical reference data **************************
00030 *   System Name : SD Driver Sample Program
00031 *   File Name   : sdif.h
00032 *   Abstract    : SD Memory card driver configration
00033 *   Version     : 4.00.00
00034 *   Device      : Aragon
00035 *   Tool-Chain  : DS-5 Ver 5.13
00036 *                 ARM Complier 
00037 *   OS          : None
00038 *   H/W Platform: 
00039 *   Description : 
00040 ********************************************************************************
00041 *   History     : 2013.07.12 Ver.4.00.00
00042 *******************************************************************************/
00043 #ifndef _SDDRV_H_
00044 #define _SDDRV_H_
00045 
00046 #ifdef    __cplusplus
00047 extern "C" {
00048 #endif    /* __cplusplus    */
00049 
00050 /* ==== define  ==== */
00051 /* ---- SD Driver work buffer ---- */
00052 #define SD_SIZE_OF_INIT           800
00053 
00054 /* ---- error code ---- */
00055 #define SD_OK_LOCKED_CARD         1                  /* OK but card is locked status */
00056 #define SD_OK                     0                  /* OK */
00057 #define SD_ERR                    -1                 /* general error */
00058 #define SD_ERR_WP                 -2                 /* write protect error */
00059 #define SD_ERR_RO                 -3                 /* read only error */
00060 #define SD_ERR_RES_TOE            -4                 /* response time out error */
00061 #define SD_ERR_CARD_TOE           -5                 /* card time out error */
00062 #define SD_ERR_END_BIT            -6                 /* end bit error */
00063 #define SD_ERR_CRC                -7                 /* CRC error */
00064 #define SD_ERR_CARD_RES           -8                 /* card response error */
00065 #define SD_ERR_HOST_TOE           -9                 /* host time out error */
00066 #define SD_ERR_CARD_ERASE         -10                /* card erase error */
00067 #define SD_ERR_CARD_LOCK          -11                /* card lock error */
00068 #define SD_ERR_CARD_UNLOCK        -12                /* card unlock error */
00069 #define SD_ERR_HOST_CRC           -13                /* host CRC error */
00070 #define SD_ERR_CARD_ECC           -14                /* card internal ECC error */
00071 #define SD_ERR_CARD_CC            -15                /* card internal error */
00072 #define SD_ERR_CARD_ERROR         -16                /* unknown card error */
00073 #define SD_ERR_CARD_TYPE          -17                /* non support card type */
00074 #define SD_ERR_NO_CARD            -18                /* no card */
00075 #define SD_ERR_ILL_READ           -19                /* illegal buffer read */
00076 #define SD_ERR_ILL_WRITE          -20                /* illegal buffer write */
00077 #define SD_ERR_AKE_SEQ            -21                /* the sequence of authentication process */
00078 #define SD_ERR_OVERWRITE          -22                /* CID/CSD overwrite error */
00079 /* 23-29 */
00080 #define SD_ERR_CPU_IF             -30                /* target CPU interface function error  */
00081 #define SD_ERR_STOP               -31                /* user stop */
00082 /* 32-49 */
00083 #define SD_ERR_CSD_VER            -50                /* CSD register version error */
00084 #define SD_ERR_SCR_VER            -51                /* SCR register version error */
00085 #define SD_ERR_FILE_FORMAT        -52                /* CSD register file format error  */
00086 #define SD_ERR_NOTSUP_CMD         -53                /* not supported command  */
00087 /* 54-59 */
00088 #define SD_ERR_ILL_FUNC           -60                /* invalid function request error */
00089 #define SD_ERR_IO_VERIFY          -61                /* direct write verify error */
00090 #define SD_ERR_IO_CAPAB           -62                /* IO capability error */
00091 /* 63-69 */
00092 #define SD_ERR_IFCOND_VER         -70                /* Interface condition version error */
00093 #define SD_ERR_IFCOND_VOLT        -71                /* Interface condition voltage error */
00094 #define SD_ERR_IFCOND_ECHO        -72                /* Interface condition echo back pattern error */
00095 /* 73-79 */
00096 #define SD_ERR_OUT_OF_RANGE       -80                /* the argument was out of range */
00097 #define SD_ERR_ADDRESS_ERROR      -81                /* misassigned address */
00098 #define SD_ERR_BLOCK_LEN_ERROR    -82                /* transfered block length is not allowed */
00099 #define SD_ERR_ILLEGAL_COMMAND    -83                /* Command not legal  */
00100 #define SD_ERR_RESERVED_ERROR18   -84                /* Reserved bit 18 Error */
00101 #define SD_ERR_RESERVED_ERROR17   -85                /* Reserved bit 17 Error */
00102 #define SD_ERR_CMD_ERROR          -86                /* SD_INFO2 bit  0 CMD error */
00103 #define SD_ERR_CBSY_ERROR         -87                /* SD_INFO2 bit 14 CMD Type Reg Busy error */
00104 #define SD_ERR_NO_RESP_ERROR      -88                /* SD_INFO1 bit  0 No Response error */
00105 /* 89 */
00106 /* 90-95 */
00107 #define SD_ERR_ERROR              -96                /* SDIO ERROR */
00108 #define SD_ERR_FUNCTION_NUMBER    -97                /* SDIO FUNCTION NUMBER ERROR */
00109 #define SD_ERR_COM_CRC_ERROR      -98                /* SDIO CRC ERROR */
00110 #define SD_ERR_INTERNAL           -99                /* driver software internal error */
00111 
00112 /* ---- driver mode ---- */
00113 #define SD_MODE_POLL              0x0000ul           /* status check mode is software polling */
00114 #define SD_MODE_HWINT             0x0001ul           /* status check mode is hardware interrupt */
00115 #define SD_MODE_SW                0x0000ul           /* data transfer mode is software */
00116 #define SD_MODE_DMA               0x0002ul           /* data transfer mode is DMA */
00117 #define SD_MODE_DMA_64            0x0004ul           /* data transfer mode is DMA with 64 byte burst mode */
00118 
00119 /* ---- support mode ---- */
00120 #define SD_MODE_MEM               0x0000ul           /* memory cards only are supported */
00121 #define SD_MODE_IO                0x0010ul           /* memory and io cards are supported */
00122 #define SD_MODE_COMBO             0x0030ul           /* memory ,io and combo cards are supported */
00123 #define SD_MODE_DS                0x0000ul           /* only default speed mode is supported */
00124 #define SD_MODE_HS                0x0040ul           /* high speed mode is also supported */
00125 #define SD_MODE_VER1X             0x0000ul           /* ver1.1 host */
00126 #define SD_MODE_VER2X             0x0080ul           /* ver2.x host (high capacity and dual voltage) */
00127 #define SD_MODE_1BIT              0x0100ul           /* SD Mode 1bit only is supported */
00128 #define SD_MODE_4BIT              0x0000ul           /* SD Mode 1bit and 4bit is supported */
00129 
00130 /* ---- media voltage ---- */
00131 #define SD_VOLT_1_7               0x00000010ul       /* low voltage card minimum */
00132 #define SD_VOLT_1_8               0x00000020ul
00133 #define SD_VOLT_1_9               0x00000040ul
00134 #define SD_VOLT_2_0               0x00000080ul
00135 #define SD_VOLT_2_1               0x00000100ul       /* basic communication minimum */
00136 #define SD_VOLT_2_2               0x00000200ul
00137 #define SD_VOLT_2_3               0x00000400ul
00138 #define SD_VOLT_2_4               0x00000800ul
00139 #define SD_VOLT_2_5               0x00001000ul
00140 #define SD_VOLT_2_6               0x00002000ul
00141 #define SD_VOLT_2_7               0x00004000ul
00142 #define SD_VOLT_2_8               0x00008000ul       /* memory access minimum */
00143 #define SD_VOLT_2_9               0x00010000ul
00144 #define SD_VOLT_3_0               0x00020000ul
00145 #define SD_VOLT_3_1               0x00040000ul
00146 #define SD_VOLT_3_2               0x00080000ul
00147 #define SD_VOLT_3_3               0x00100000ul
00148 #define SD_VOLT_3_4               0x00200000ul
00149 #define SD_VOLT_3_5               0x00400000ul
00150 #define SD_VOLT_3_6               0x00800000ul
00151 
00152 /* ---- memory card write mode ---- */
00153 #define SD_WRITE_WITH_PREERASE    0x0000u            /* pre-erease write */
00154 #define SD_WRITE_OVERWRITE        0x0001u            /* overwrite  */
00155 
00156 /* ---- io register write mode ---- */
00157 #define SD_IO_SIMPLE_WRITE        0x0000u            /* just write */
00158 #define SD_IO_VERIFY_WRITE        0x0001u            /* read after write */
00159 
00160 /* ---- io operation code ---- */
00161 #define SD_IO_FIXED_ADDR          0x0000u            /* R/W fixed address */
00162 #define SD_IO_INCREMENT_ADDR      0x0001u            /* R/W increment address */
00163 #define SD_IO_FORCE_BYTE          0x0010u            /* byte access only  */
00164 
00165  /* ---- media type ---- */
00166 #define SD_MEDIA_UNKNOWN          0x0000u            /* unknown media */
00167 #define SD_MEDIA_MMC              0x0010u            /* MMC card */
00168 #define SD_MEDIA_SD               0x0020u            /* SD Memory card */
00169 #define SD_MEDIA_IO               0x0001u            /* SD IO card */
00170 #define SD_MEDIA_MEM              0x0030u            /* Memory card */
00171 #define SD_MEDIA_COMBO            0x0021u            /* SD COMBO card */
00172 #define SD_MEDIA_EMBEDDED         0x8000u            /* embedded media */
00173 
00174 /* ---- write protect info --- */
00175 #define SD_WP_OFF                 0x0000u            /* card is not write protect */
00176 #define SD_WP_HW                  0x0001u            /* card is H/W write protect */
00177 #define SD_WP_TEMP                0x0002u            /* card is TEMP_WRITE_PROTECT */
00178 #define SD_WP_PERM                0x0004u            /* card is PERM_WRITE_PROTECT */
00179 #define SD_WP_ROM                 0x0010u            /* card is SD-ROM */
00180 
00181 /* ---- SD clock div ---- */    /* IMCLK is host controller clock */
00182 #define SD_DIV_512                0x0080u            /* SDCLOCK = IMCLK/512 */
00183 #define SD_DIV_256                0x0040u            /* SDCLOCK = IMCLK/256 */
00184 #define SD_DIV_128                0x0020u            /* SDCLOCK = IMCLK/128 */
00185 #define SD_DIV_64                 0x0010u            /* SDCLOCK = IMCLK/64 */
00186 #define SD_DIV_32                 0x0008u            /* SDCLOCK = IMCLK/32 */
00187 #define SD_DIV_16                 0x0004u            /* SDCLOCK = IMCLK/16 */
00188 #define SD_DIV_8                  0x0002u            /* SDCLOCK = IMCLK/8 */
00189 #define SD_DIV_4                  0x0001u            /* SDCLOCK = IMCLK/4 */
00190 #define SD_DIV_2                  0x0000u            /* SDCLOCK = IMCLK/2 */
00191 #define SD_DIV_1                  0x00FFu            /* SDCLOCK = IMCLK (option) */
00192 
00193 /* ---- SD clock define ---- */    /* max frequency */
00194 #define SD_CLK_400kHz             0x0000u            /* 400kHz */
00195 #define SD_CLK_1MHz               0x0001u            /* 1MHz */
00196 #define SD_CLK_5MHz               0x0002u            /* 5MHz */
00197 #define SD_CLK_10MHz              0x0003u            /* 10MHz */
00198 #define SD_CLK_20MHz              0x0004u            /* 20MHz */
00199 #define SD_CLK_25MHz              0x0005u            /* 25MHz */
00200 #define SD_CLK_50MHz              0x0006u            /* 50MHz (phys spec ver1.10) */
00201 
00202 /* ---- speed class ---- */
00203 #define SD_SPEED_CLASS_0          0x00u              /* not defined, or less than ver2.0 */
00204 #define SD_SPEED_CLASS_2          0x01u              /* 2MB/sec */
00205 #define SD_SPEED_CLASS_4          0x02u              /* 4MB/sec */
00206 #define SD_SPEED_CLASS_6          0x03u              /* 6MB/sec */
00207 
00208 /* ---- IO initialize flags define ---- */    /* add for IO */
00209 #define SD_IO_INT_ENAB            0x10u              /* interrupt enable */
00210 #define SD_IO_POWER_INIT          0x04u              /* power on initialized */
00211 #define SD_IO_MEM_INIT            0x02u              /* memory initialized */
00212 #define SD_IO_FUNC_INIT           0x01u              /* io func initialized */
00213 
00214 /* ---- IO function's information ---- */    /* add for IO */
00215 #define SD_IO_FUNC_READY          0x80u              /* io redy */
00216 #define SD_IO_FUNC_NUM            0x70u              /* number of io func */
00217 #define SD_IO_FUNC_EXISTS         0x04u              /* memory present */
00218 
00219 /* ---- SD port mode ---- */
00220 #define SD_PORT_SERIAL            0x0000u            /* 1bit mode */
00221 #define SD_PORT_PARALLEL          0x0001u            /* 4bits mode */
00222 
00223 /* ---- SD Card detect port ---- */
00224 #define SD_CD_SOCKET              0x0000u            /* CD pin */
00225 #define SD_CD_DAT3                0x0001u            /* DAT3 pin */
00226 
00227 /* ---- SD Card detect interrupt ---- */
00228 #define SD_CD_INT_DISABLE         0x0000u            /* card detect interrupt disable */
00229 #define SD_CD_INT_ENABLE          0x0001u            /* card detect interrupt enable */
00230 
00231 /* ---- format mode ---- */
00232 #define SD_FORMAT_QUICK           0x0000u            /* quick format */
00233 #define SD_FORMAT_FULL            0x0001u            /* full format */
00234 
00235 /* ---- lock/unlock mode ---- */
00236 #define SD_FORCE_ERASE            0x08
00237 #define SD_LOCK_CARD              0x04
00238 #define SD_UNLOCK_CARD            0x00
00239 #define SD_CLR_PWD                0x02
00240 #define SD_SET_PWD                0x01
00241 
00242 /* ==== API prototype ===== */
00243 /* ---- access library I/F ---- */
00244 int sd_init(int sd_port, unsigned long base, void *workarea, int cd_port);
00245 int sd_cd_int(int sd_port, int enable,int (*callback)(int, int));
00246 int sd_check_media(int sd_port);
00247 int sd_format(int sd_port, int mode,int (*callback)(unsigned long,unsigned long));
00248 int sd_format2(int sd_port, int mode,unsigned long volserial,int (*callback)(unsigned long,unsigned long));
00249 int sd_mount(int sd_port, unsigned long mode,unsigned long voltage);
00250 int sd_read_sect(int sd_port, unsigned char *buff,unsigned long psn,long cnt);
00251 int sd_write_sect(int sd_port, unsigned char *buff,unsigned long psn,long cnt,int writemode);
00252 int sd_get_type(int sd_port, unsigned char *type,unsigned char *speed,unsigned char *capa);
00253 int sd_get_size(int sd_port, unsigned long *user,unsigned long *protect);
00254 int sd_iswp(int sd_port);
00255 int sd_unmount(int sd_port);
00256 void sd_stop(int sd_port);
00257 int sd_set_intcallback(int sd_port, int (*callback)(int, int));
00258 void sd_int_handler(int sd_port);
00259 int sd_get_error(int sd_port);
00260 int sd_check_int(int sd_port);
00261 int sd_get_reg(int sd_port, unsigned char *ocr,unsigned char *cid,unsigned char *csd, unsigned char *dsr,unsigned char *scr);
00262 int sd_get_rca(int sd_port, unsigned char *rca);
00263 int sd_get_sdstatus(int sd_port, unsigned char *sdstatus);
00264 int sd_get_speed(int sd_port, unsigned char *clss,unsigned char *move);
00265 int sd_finalize(int sd_port);
00266 int sd_set_seccnt(int sd_port, short sectors);
00267 int sd_get_seccnt(int sd_port);
00268 int sd_get_ver(int sd_port, unsigned short *sdhi_ver,char *sddrv_ver);
00269 int sd_set_cdtime(int sd_port, unsigned short cdtime);
00270 int sd_set_responsetime(int sd_port, unsigned short responsetime);
00271 int sd_set_buffer(int sd_port, void *buff,unsigned long size);
00272 int sd_inactive(int sd_port);
00273 int sd_set_softwp(int sd_port, int is_set,unsigned long data);
00274 int sd_set_tmpwp(int sd_port, int is_set);
00275 int sd_lock_unlock(int sd_port, unsigned char code,unsigned char *pwd,unsigned char len);
00276 
00277 int esd_get_partition_id(int sd_port, int *id);
00278 int esd_select_partition(int sd_port, int id);
00279 int esd_query_partition(int sd_port, int sub, unsigned char *data);
00280 
00281 int sdio_read_direct(int sd_port, unsigned char *buff,unsigned long func,unsigned long adr);
00282 int sdio_write_direct(int sd_port, unsigned char *buff,unsigned long func,unsigned long adr,unsigned long raw_flag);
00283 int sdio_check_int(int sd_port);
00284 void sdio_int_handler(int sd_port);
00285 int sdio_set_intcallback(int sd_port, int (*callback)(int));
00286 int sdio_enable_int(int sd_port);
00287 int sdio_disable_int(int sd_port);
00288 int sdio_read(int sd_port, unsigned char *buff,unsigned long func,unsigned long adr,long cnt,unsigned long op_code);
00289 int sdio_write(int sd_port, unsigned char *buff,unsigned long func,unsigned long adr,long cnt,unsigned long op_code);
00290 int sdio_reset(int sd_port);
00291 int sdio_get_ioocr(int sd_port, unsigned long *ioocr);
00292 int sdio_get_ioinfo(int sd_port, unsigned char *ioinfo);
00293 int sdio_get_cia(int sd_port, unsigned char *reg, unsigned char *cis, unsigned long func_num, long cnt);
00294 int sdio_set_enable(int sd_port, unsigned char func_bit);
00295 int sdio_get_ready(int sd_port, unsigned char *func_bit);
00296 int sdio_set_int(int sd_port, unsigned char func_bit,int enab);
00297 int sdio_get_int(int sd_port, unsigned char *func_bit,int *enab);
00298 int sdio_set_blocklen(int sd_port, unsigned short len, unsigned long func_num);
00299 int sdio_get_blocklen(int sd_port, unsigned short *len, unsigned long func_num);
00300 void sdio_abort(int sd_port, unsigned long func_num);
00301 int sdio_set_blkcnt(int sd_port, short blocks);
00302 int sdio_get_blkcnt(int sd_port);
00303 
00304 /* ---- target CPU I/F ---- */
00305 int sddev_init(int sd_port);
00306 int sddev_power_on(int sd_port);
00307 int sddev_power_off(int sd_port);
00308 int sddev_read_data(int sd_port, unsigned char *buff,unsigned long reg_addr,long num);
00309 int sddev_write_data(int sd_port, unsigned char *buff,unsigned long reg_addr,long num);
00310 unsigned int sddev_get_clockdiv(int sd_port, int clock);
00311 int sddev_set_port(int sd_port, int mode);
00312 int sddev_int_wait(int sd_port, int msec);
00313 int sddev_init_dma(int sd_port, unsigned long buffadr,unsigned long regadr,long cnt,int dir);
00314 int sddev_wait_dma_end(int sd_port, long cnt);
00315 int sddev_disable_dma(int sd_port);
00316 int sddev_finalize(int sd_port);
00317 int sddev_loc_cpu(int sd_port);
00318 int sddev_unl_cpu(int sd_port);
00319 int sddev_cmd0_sdio_mount(int sd_port);
00320 int sddev_cmd8_sdio_mount(int sd_port);
00321 
00322 #ifdef    __cplusplus
00323 }
00324 #endif    /* __cplusplus    */
00325 
00326 #endif    /* _SDDRV_H_ */
00327 
00328 /* End of File */
00329