Engduino  3.1.0
A fun device for learning coding
SdInfo.h
1 /* Arduino Sd2Card Library
2  * Copyright (C) 2009 by William Greiman
3  *
4  * This file is part of the Arduino Sd2Card Library
5  *
6  * This Library is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This Library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with the Arduino Sd2Card Library. If not, see
18  * <http://www.gnu.org/licenses/>.
19  */
20 #ifndef SdInfo_h
21 #define SdInfo_h
22 #include <stdint.h>
23 // Based on the document:
24 //
25 // SD Specifications
26 // Part 1
27 // Physical Layer
28 // Simplified Specification
29 // Version 2.00
30 // September 25, 2006
31 //
32 // www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf
33 //------------------------------------------------------------------------------
34 // SD card commands
36 uint8_t const CMD0 = 0X00;
38 uint8_t const CMD8 = 0X08;
40 uint8_t const CMD9 = 0X09;
42 uint8_t const CMD10 = 0X0A;
44 uint8_t const CMD13 = 0X0D;
46 uint8_t const CMD17 = 0X11;
48 uint8_t const CMD24 = 0X18;
50 uint8_t const CMD25 = 0X19;
52 uint8_t const CMD32 = 0X20;
55 uint8_t const CMD33 = 0X21;
57 uint8_t const CMD38 = 0X26;
59 uint8_t const CMD55 = 0X37;
61 uint8_t const CMD58 = 0X3A;
64 uint8_t const ACMD23 = 0X17;
67 uint8_t const ACMD41 = 0X29;
68 //------------------------------------------------------------------------------
70 uint8_t const R1_READY_STATE = 0X00;
72 uint8_t const R1_IDLE_STATE = 0X01;
74 uint8_t const R1_ILLEGAL_COMMAND = 0X04;
76 uint8_t const DATA_START_BLOCK = 0XFE;
78 uint8_t const STOP_TRAN_TOKEN = 0XFD;
80 uint8_t const WRITE_MULTIPLE_TOKEN = 0XFC;
82 uint8_t const DATA_RES_MASK = 0X1F;
84 uint8_t const DATA_RES_ACCEPTED = 0X05;
85 //------------------------------------------------------------------------------
86 typedef struct CID {
87  // byte 0
88  uint8_t mid; // Manufacturer ID
89  // byte 1-2
90  char oid[2]; // OEM/Application ID
91  // byte 3-7
92  char pnm[5]; // Product name
93  // byte 8
94  unsigned prv_m : 4; // Product revision n.m
95  unsigned prv_n : 4;
96  // byte 9-12
97  uint32_t psn; // Product serial number
98  // byte 13
99  unsigned mdt_year_high : 4; // Manufacturing date
100  unsigned reserved : 4;
101  // byte 14
102  unsigned mdt_month : 4;
103  unsigned mdt_year_low :4;
104  // byte 15
105  unsigned always1 : 1;
106  unsigned crc : 7;
107 }cid_t;
108 //------------------------------------------------------------------------------
109 // CSD for version 1.00 cards
110 typedef struct CSDV1 {
111  // byte 0
112  unsigned reserved1 : 6;
113  unsigned csd_ver : 2;
114  // byte 1
115  uint8_t taac;
116  // byte 2
117  uint8_t nsac;
118  // byte 3
119  uint8_t tran_speed;
120  // byte 4
121  uint8_t ccc_high;
122  // byte 5
123  unsigned read_bl_len : 4;
124  unsigned ccc_low : 4;
125  // byte 6
126  unsigned c_size_high : 2;
127  unsigned reserved2 : 2;
128  unsigned dsr_imp : 1;
129  unsigned read_blk_misalign :1;
130  unsigned write_blk_misalign : 1;
131  unsigned read_bl_partial : 1;
132  // byte 7
133  uint8_t c_size_mid;
134  // byte 8
135  unsigned vdd_r_curr_max : 3;
136  unsigned vdd_r_curr_min : 3;
137  unsigned c_size_low :2;
138  // byte 9
139  unsigned c_size_mult_high : 2;
140  unsigned vdd_w_cur_max : 3;
141  unsigned vdd_w_curr_min : 3;
142  // byte 10
143  unsigned sector_size_high : 6;
144  unsigned erase_blk_en : 1;
145  unsigned c_size_mult_low : 1;
146  // byte 11
147  unsigned wp_grp_size : 7;
148  unsigned sector_size_low : 1;
149  // byte 12
150  unsigned write_bl_len_high : 2;
151  unsigned r2w_factor : 3;
152  unsigned reserved3 : 2;
153  unsigned wp_grp_enable : 1;
154  // byte 13
155  unsigned reserved4 : 5;
156  unsigned write_partial : 1;
157  unsigned write_bl_len_low : 2;
158  // byte 14
159  unsigned reserved5: 2;
160  unsigned file_format : 2;
161  unsigned tmp_write_protect : 1;
162  unsigned perm_write_protect : 1;
163  unsigned copy : 1;
164  unsigned file_format_grp : 1;
165  // byte 15
166  unsigned always1 : 1;
167  unsigned crc : 7;
168 }csd1_t;
169 //------------------------------------------------------------------------------
170 // CSD for version 2.00 cards
171 typedef struct CSDV2 {
172  // byte 0
173  unsigned reserved1 : 6;
174  unsigned csd_ver : 2;
175  // byte 1
176  uint8_t taac;
177  // byte 2
178  uint8_t nsac;
179  // byte 3
180  uint8_t tran_speed;
181  // byte 4
182  uint8_t ccc_high;
183  // byte 5
184  unsigned read_bl_len : 4;
185  unsigned ccc_low : 4;
186  // byte 6
187  unsigned reserved2 : 4;
188  unsigned dsr_imp : 1;
189  unsigned read_blk_misalign :1;
190  unsigned write_blk_misalign : 1;
191  unsigned read_bl_partial : 1;
192  // byte 7
193  unsigned reserved3 : 2;
194  unsigned c_size_high : 6;
195  // byte 8
196  uint8_t c_size_mid;
197  // byte 9
198  uint8_t c_size_low;
199  // byte 10
200  unsigned sector_size_high : 6;
201  unsigned erase_blk_en : 1;
202  unsigned reserved4 : 1;
203  // byte 11
204  unsigned wp_grp_size : 7;
205  unsigned sector_size_low : 1;
206  // byte 12
207  unsigned write_bl_len_high : 2;
208  unsigned r2w_factor : 3;
209  unsigned reserved5 : 2;
210  unsigned wp_grp_enable : 1;
211  // byte 13
212  unsigned reserved6 : 5;
213  unsigned write_partial : 1;
214  unsigned write_bl_len_low : 2;
215  // byte 14
216  unsigned reserved7: 2;
217  unsigned file_format : 2;
218  unsigned tmp_write_protect : 1;
219  unsigned perm_write_protect : 1;
220  unsigned copy : 1;
221  unsigned file_format_grp : 1;
222  // byte 15
223  unsigned always1 : 1;
224  unsigned crc : 7;
225 }csd2_t;
226 //------------------------------------------------------------------------------
227 // union of old and new style CSD register
228 union csd_t {
229  csd1_t v1;
230  csd2_t v2;
231 };
232 #endif // SdInfo_h
Definition: SdInfo.h:171
Definition: SdInfo.h:228
Definition: SdInfo.h:86
Definition: SdInfo.h:110