Home | History | Annotate | Download | only in IndustryStandard
      1 /*++
      2 
      3 Copyright (c)  1999  - 2014, Intel Corporation. All rights reserved
      4 
      5   This program and the accompanying materials are licensed and made available under
      6   the terms and conditions of the BSD License that accompanies this distribution.
      7   The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php.
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 
     14 --*/
     15 
     16 
     17 /*++
     18 Module Name:
     19 
     20   SDCard.h
     21 
     22 Abstract:
     23 
     24   Header file for Industry SD Card 2.0 spec.
     25 
     26 --*/
     27 
     28 #ifndef _SD_CARD_H
     29 #define _SD_CARD_H
     30 
     31 #include "Mmc.h"
     32 
     33 #pragma pack(1)
     34 
     35 #define CHECK_PATTERN     0xAA
     36 
     37 #define ACMD6             6
     38 #define ACMD13            13
     39 #define ACMD23            23
     40 #define ACMD41            41
     41 #define ACMD42            42
     42 #define ACMD51            51
     43 
     44 
     45 #define SWITCH_FUNC              CMD6
     46 #define SEND_IF_COND             CMD8
     47 
     48 
     49 #define SET_BUS_WIDTH            ACMD6
     50 #define SD_STATUS                ACMD13
     51 #define SET_WR_BLK_ERASE_COUNT   ACMD23
     52 #define SD_SEND_OP_COND          ACMD41
     53 #define SET_CLR_CARD_DETECT      ACMD42
     54 #define SEND_SCR                 ACMD51
     55 
     56 
     57 
     58 #define SD_BUS_WIDTH_1              0
     59 #define SD_BUS_WIDTH_4              2
     60 
     61 
     62 
     63 #define FREQUENCY_SD_PP        (25 * 1000 * 1000)
     64 #define FREQUENCY_SD_PP_HIGH   (50 * 1000 * 1000)
     65 
     66 
     67 #define SD_SPEC_10                  0
     68 #define SD_SPEC_11                  1
     69 #define SD_SPEC_20                  2
     70 
     71 
     72 #define VOLTAGE_27_36               0x1
     73 
     74 typedef struct {
     75   UINT8   NotUsed:            1; //  1 [0:0]
     76   UINT8   CRC:                7; //  CRC [7:1]
     77   UINT8   ECC:                2; //  ECC code [9:8]
     78   UINT8   FILE_FORMAT:        2; //  File format [11:10]
     79   UINT8   TMP_WRITE_PROTECT:  1; //  Temporary write protection [12:12]
     80   UINT8   PERM_WRITE_PROTECT: 1; //  Permanent write protection [13:13]
     81   UINT8   COPY:               1; //  Copy flag (OTP) [14:14]
     82   UINT8   FILE_FORMAT_GRP:    1; //  File format group [15:15]
     83   UINT16  Reserved0:          5; //  0 [20:16]
     84   UINT16  WRITE_BL_PARTIAL:   1; //  Partial blocks for write allowed [21:21]
     85   UINT16  WRITE_BL_LEN:       4; //  Max. write data block length [25:22]
     86   UINT16  R2W_FACTOR:         3; //  Write speed factor [28:26]
     87   UINT16  DEFAULT_ECC:        2; //  Manufacturer default ECC [30:29]
     88   UINT16  WP_GRP_ENABLE:      1; //  Write protect group enable [31:31]
     89   UINT16  WP_GRP_SIZE:        7; //  Write protect group size [38:32]
     90   UINT16  SECTOR_SIZE:        7; //  Erase sector size [45:39]
     91   UINT16  ERASE_BLK_EN:       1; //  Erase single block enable [46:46]
     92   UINT16  Reserved1:          1; //  0 [47:47]
     93 
     94   UINT32  C_SIZE:             22; //  Device size [69:48]
     95   UINT32  Reserved2:          6;  //  0 [75:70]
     96   UINT32  DSR_IMP:            1;  //  DSR implemented [76:76]
     97   UINT32  READ_BLK_MISALIGN:  1;  //  Read block misalignment [77:77]
     98   UINT32  WRITE_BLK_MISALIGN: 1;  //  Write block misalignment [78:78]
     99   UINT32  READ_BL_PARTIAL:    1;  //  Partial blocks for read allowed [79:79]
    100 
    101   UINT16  READ_BL_LEN:        4;  //  Max. read data block length [83:80]
    102   UINT16  CCC:                12; //  Card command classes [95:84]
    103   UINT8   TRAN_SPEED          ;   //  Max. bus clock frequency [103:96]
    104   UINT8   NSAC                ;   //  Data read access-time 2 in CLK cycles (NSAC*100) [111:104]
    105   UINT8   TAAC                ;   //  Data read access-time 1 [119:112]
    106   UINT8   Reserved3:          6;  //  0 [125:120]
    107   UINT8   CSD_STRUCTURE:      2;  //  CSD structure [127:126]
    108 } CSD_SDV2;
    109 
    110 typedef struct {
    111   UINT32  Reserved0;
    112   UINT32  Reserved1:               16;
    113   UINT32  SD_BUS_WIDTH:            4;
    114   UINT32  SD_SECURITY:             3;
    115   UINT32  DATA_STAT_AFTER_ERASE:   1;
    116   UINT32  SD_SPEC:                 4;
    117   UINT32  SCR_STRUCT:              4;
    118 } SCR;
    119 
    120 
    121 typedef struct {
    122   UINT8   Reserved0[50];
    123   UINT8   ERASE_OFFSET:               2;
    124   UINT8   ERASE_TIMEOUT:              6;
    125   UINT16  ERASE_SIZE;
    126   UINT8   Reserved1:                  4;
    127   UINT8   AU_SIZE:                    4;
    128   UINT8   PERFORMANCE_MOVE;
    129   UINT8   SPEED_CLASS;
    130   UINT32  SIZE_OF_PROTECTED_AREA;
    131   UINT32  SD_CARD_TYPE:              16;
    132   UINT32  Reserved2:                 13;
    133   UINT32  SECURED_MODE:               1;
    134   UINT32  DAT_BUS_WIDTH:              2;
    135 } SD_STATUS_REG;
    136 
    137 
    138 
    139 typedef struct {
    140   UINT8   Reserved0[34];
    141   UINT16  Group1BusyStatus;
    142   UINT16  Group2BusyStatus;
    143   UINT16  Group3BusyStatus;
    144   UINT16  Group4BusyStatus;
    145   UINT16  Group5BusyStatus;
    146   UINT16  Group6BusyStatus;
    147   UINT8   DataStructureVersion;
    148   UINT8   Group21Status;
    149   UINT8   Group43Status;
    150   UINT8   Group65Status;
    151   UINT16  Group1Function;
    152   UINT16  Group2Function;
    153   UINT16  Group3Function;
    154   UINT16  Group4Function;
    155   UINT16  Group5Function;
    156   UINT16  Group6Function;
    157   UINT16  MaxCurrent;
    158 } SWITCH_STATUS;
    159 
    160 
    161 #pragma pack()
    162 #endif
    163 
    164