Subversion Repositories NaviCtrl

Rev

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