Rev 360 | Rev 364 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 360 | Rev 362 | ||
---|---|---|---|
Line 130... | Line 130... | ||
130 | #define DATA_RESPONSE_MASK 0x1F |
130 | #define DATA_RESPONSE_MASK 0x1F |
131 | #define DATA_RESPONSE_OK 0x05 |
131 | #define DATA_RESPONSE_OK 0x05 |
132 | #define DATA_RESPONSE_CRC_ERR 0x0B |
132 | #define DATA_RESPONSE_CRC_ERR 0x0B |
133 | #define DATA_RESPONSE_WRITE_ERR 0x1D |
133 | #define DATA_RESPONSE_WRITE_ERR 0x1D |
Line 134... | Line -... | ||
134 | - | ||
135 | typedef enum |
- | |
136 | { |
- | |
137 | VER_UNKNOWN, |
- | |
138 | VER_1X, |
- | |
139 | VER_20 |
- | |
140 | } SDVersion_t; |
- | |
141 | - | ||
142 | typedef struct |
- | |
143 | { |
- | |
144 | u8 Valid; |
- | |
145 | SDVersion_t Version; // HW-Version |
- | |
146 | u32 Capacity; // Memory capacity in bytes |
- | |
147 | u8 CID[16]; // CID register |
- | |
148 | u8 CSD[16]; // CSD register |
- | |
149 | } __attribute__((packed)) SDCardInfo_t; |
- | |
150 | 134 | ||
Line 151... | Line 135... | ||
151 | volatile SDCardInfo_t SDCardInfo; |
135 | volatile SDCardInfo_t SDCardInfo; |
152 | 136 | ||
Line 190... | Line 174... | ||
190 | timestamp = SetDelay(timeout); |
174 | timestamp = SetDelay(timeout); |
191 | do |
175 | do |
192 | { |
176 | { |
193 | rsp = SSC_GetChar(); |
177 | rsp = SSC_GetChar(); |
194 | if(CheckDelay(timestamp)) break; |
178 | if(CheckDelay(timestamp)) break; |
195 | }while(rsp != 0xFF); // wait while card is busy (data out low) |
179 | }while(rsp != 0xFF && (SD_WatchDog)); // wait while card is busy (data out low) |
196 | return(rsp); |
180 | return(rsp); |
197 | } |
181 | } |
Line 233... | Line 217... | ||
233 | 217 | ||
234 | do |
218 | do |
235 | { |
219 | { |
236 | r1 = SSC_GetChar(); // get byte from sd-card |
220 | r1 = SSC_GetChar(); // get byte from sd-card |
237 | if (timeout++ >500) break; |
221 | if (timeout++ >500) break; |
238 | }while(r1 == 0xFF); // wait for the response byte from sd-card. |
222 | }while(r1 == 0xFF && (SD_WatchDog)); // wait for the response byte from sd-card. |
239 | return(r1); |
223 | return(r1); |
Line 240... | Line 224... | ||
240 | } |
224 | } |
Line 289... | Line 273... | ||
289 | if( ( (rsp & 0xF0) == 0x00 ) || CheckDelay(timeout) ) // data error token or timeout |
273 | if( ( (rsp & 0xF0) == 0x00 ) || CheckDelay(timeout) ) // data error token or timeout |
290 | { |
274 | { |
291 | result = SD_ERROR_READ_DATA; |
275 | result = SD_ERROR_READ_DATA; |
292 | goto end; |
276 | goto end; |
293 | } |
277 | } |
294 | }while(rsp != DATA_START_TOKEN); |
278 | }while(rsp != DATA_START_TOKEN && (SD_WatchDog)); |
295 | // data start token received |
279 | // data start token received |
296 | for (a = 0; a < len; a++) // read the block from the SSC |
280 | for (a = 0; a < len; a++) // read the block from the SSC |
297 | { |
281 | { |
298 | Buffer[a] = SSC_GetChar(); |
282 | Buffer[a] = SSC_GetChar(); |
299 | } |
283 | } |
Line 756... | Line 740... | ||
756 | if(result != SD_SUCCESS) |
740 | if(result != SD_SUCCESS) |
757 | { |
741 | { |
758 | sprintf(text,"Error %02X writing data to sd card (R=%02X).\r\n", result, rsp); |
742 | sprintf(text,"Error %02X writing data to sd card (R=%02X).\r\n", result, rsp); |
759 | UART1_PutString(text); |
743 | UART1_PutString(text); |
760 | } |
744 | } |
- | 745 | ||
761 | return(result); |
746 | return(result); |
762 | } |
747 | } |
Line 763... | Line 748... | ||
763 | 748 |