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