Rev 380 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 380 | Rev 384 | ||
---|---|---|---|
Line 61... | Line 61... | ||
61 | #include "ssc.h" |
61 | #include "ssc.h" |
62 | #include "timer1.h" |
62 | #include "timer1.h" |
63 | #include "main.h" |
63 | #include "main.h" |
64 | #include "crc16.h" |
64 | #include "crc16.h" |
Line -... | Line 65... | ||
- | 65 | ||
- | 66 | ||
65 | 67 | ||
66 | //________________________________________________________________________________________________________________________________________ |
68 | //________________________________________________________________________________________________________________________________________ |
67 | // Module name: sdc.c |
69 | // Module name: sdc.c |
68 | // Compiler used: avr-gcc 3.4.5 |
70 | // Compiler used: avr-gcc 3.4.5 |
69 | // Last Modifikation: 08.06.2008 |
71 | // Last Modifikation: 08.06.2008 |
Line 131... | Line 133... | ||
131 | #define DATA_RESPONSE_OK 0x05 |
133 | #define DATA_RESPONSE_OK 0x05 |
132 | #define DATA_RESPONSE_CRC_ERR 0x0B |
134 | #define DATA_RESPONSE_CRC_ERR 0x0B |
133 | #define DATA_RESPONSE_WRITE_ERR 0x1D |
135 | #define DATA_RESPONSE_WRITE_ERR 0x1D |
Line 134... | Line 136... | ||
134 | 136 | ||
- | 137 | volatile SDCardInfo_t SDCardInfo; |
|
Line 135... | Line 138... | ||
135 | volatile SDCardInfo_t SDCardInfo; |
138 | u8 SDCardWriteRetryCounterMax; |
136 | 139 | ||
137 | 140 | ||
Line 168... | Line 171... | ||
168 | { |
171 | { |
169 | u8 rsp = 0; |
172 | u8 rsp = 0; |
170 | u32 timestamp = 0; |
173 | u32 timestamp = 0; |
Line 171... | Line 174... | ||
171 | 174 | ||
172 | SSC_ClearRxFifo(); |
175 | SSC_ClearRxFifo(); |
173 | SSC_Enable(); // enable chipselect. |
176 | SSC_Enable(); // enable chipselect. SSC_Disable |
174 | timestamp = SetDelay(timeout); |
177 | timestamp = SetDelay(timeout); |
175 | do |
178 | do |
176 | { |
179 | { |
177 | rsp = SSC_GetChar(); |
180 | rsp = SSC_GetChar(); |
Line 286... | Line 289... | ||
286 | crc16 = (crc16<<8)|SSC_GetChar(); // lowbyte last |
289 | crc16 = (crc16<<8)|SSC_GetChar(); // lowbyte last |
287 | /* if(crc16 != CRC16(Buffer, len)) result = SD_ERROR_CRC_DATA; |
290 | /* if(crc16 != CRC16(Buffer, len)) result = SD_ERROR_CRC_DATA; |
288 | else */ |
291 | else */ |
289 | result = SD_SUCCESS; |
292 | result = SD_SUCCESS; |
290 | end: |
293 | end: |
- | 294 | SSC_Disable(); // disable CS |
|
291 | if(result != SD_SUCCESS) |
295 | if(result != SD_SUCCESS) |
292 | { |
296 | { |
293 | sprintf(text,"Error %02X reading data from sd card (R1=%02X).\r\n", result, rsp); |
297 | sprintf(text,"Error %02X reading data from sd card (R1=%02X).\r\n", result, rsp); |
294 | UART1_PutString(text); |
298 | UART1_PutString(text); |
295 | } |
299 | } |
Line 378... | Line 382... | ||
378 | { |
382 | { |
379 | u32 timeout = 0; |
383 | u32 timeout = 0; |
380 | u8 rsp[6]; // SD-SPI response buffer |
384 | u8 rsp[6]; // SD-SPI response buffer |
381 | SD_Result_t result = SD_ERROR_UNKNOWN; |
385 | SD_Result_t result = SD_ERROR_UNKNOWN; |
Line -... | Line 386... | ||
- | 386 | ||
- | 387 | //SDCardWriteRetryCounterMax = 0; |
|
382 | 388 | ||
383 | if(SD_SWITCH) // init only if the SD-Switch is indicating a card in the slot |
389 | if(SD_SWITCH) // init only if the SD-Switch is indicating a card in the slot |
384 | { |
390 | { |
385 | UART1_PutString("\r\n SSC init..."); |
391 | UART1_PutString("\r\n SSC init..."); |
386 | SSC_Init(); |
392 | SSC_Init(); |
Line 605... | Line 611... | ||
605 | 611 | ||
606 | SDC_PrintCID((u8 *)&SDCardInfo.CID); |
612 | SDC_PrintCID((u8 *)&SDCardInfo.CID); |
607 | SDCardInfo.Valid = 1; |
613 | SDCardInfo.Valid = 1; |
608 | // jump point for error condition before |
614 | // jump point for error condition before |
609 | end: |
615 | end: |
- | 616 | //SSC_Disable(); |
|
610 | SSC_Disable(); |
617 | ; |
611 | } |
618 | } |
612 | else |
619 | else |
613 | { |
620 | { |
614 | SSC_Deinit(); |
621 | SSC_Deinit(); |
Line 652... | Line 659... | ||
652 | // Returnvalue: SD_Result_t |
659 | // Returnvalue: SD_Result_t |
653 | //________________________________________________________________________________________________________________________________________ |
660 | //________________________________________________________________________________________________________________________________________ |
Line 654... | Line 661... | ||
654 | 661 | ||
655 | SD_Result_t SDC_PutSector(u32 addr, const u8 *Buffer) |
662 | SD_Result_t SDC_PutSector(u32 addr, const u8 *Buffer) |
- | 663 | { |
|
656 | { |
664 | u8 retryCounter = 0; |
657 | u8 rsp; |
665 | u8 rsp; |
658 | u16 a, crc16; |
666 | u16 a, crc16; |
659 | u16 timeout = 0; |
667 | u16 timeout = 0; |
Line 660... | Line 668... | ||
660 | SD_Result_t result = SD_ERROR_UNKNOWN; |
668 | SD_Result_t result; |
- | 669 | ||
- | 670 | addr = addr << 9; // convert sectoradress to byteadress |
|
- | 671 | ||
- | 672 | while(retryCounter < 10) |
|
- | 673 | { |
|
661 | 674 | result = SD_ERROR_UNKNOWN; |
|
662 | addr = addr << 9; // convert sectoradress to byteadress |
675 | |
663 | rsp = SDC_SendCMDR1(CMD_WRITE_SINGLE_BLOCK, addr); |
676 | rsp = SDC_SendCMDR1(CMD_WRITE_SINGLE_BLOCK, addr); |
664 | if (rsp != R1_NO_ERR) |
677 | if (rsp != R1_NO_ERR) |
665 | { |
678 | { |
Line 736... | Line 749... | ||
736 | result = SD_ERROR_WRITE_DATA; |
749 | result = SD_ERROR_WRITE_DATA; |
737 | SSC_GetChar(); |
750 | SSC_GetChar(); |
738 | goto end; |
751 | goto end; |
739 | } |
752 | } |
740 | end: |
753 | end: |
- | 754 | //SSC_Disable(); // disable CS |
|
741 | if(result != SD_SUCCESS) |
755 | if(result != SD_SUCCESS) |
742 | { |
756 | { |
743 | sprintf(text,"Error %02X writing data to sd card (R=%02X).\r\n", result, rsp); |
757 | sprintf(text,"Error %02X writing data to sd card (R=%02X).\r\n", result, rsp); |
744 | UART1_PutString(text); |
758 | UART1_PutString(text); |
- | 759 | retryCounter++; |
|
- | 760 | } |
|
- | 761 | else break; // Success -> end retry loop |
|
- | 762 | ||
- | 763 | } |
|
- | 764 | if (retryCounter > SDCardWriteRetryCounterMax) |
|
- | 765 | { SDCardWriteRetryCounterMax = retryCounter; |
|
- | 766 | DebugOut.Analog[18] = SDCardWriteRetryCounterMax; |
|
745 | } |
767 | } |
Line 746... | Line 768... | ||
746 | 768 | ||
747 | return(result); |
769 | return(result); |