To fix the hang problem

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of CDMS_CODE by shubham c

Revision:
328:2242ebc71be8
Parent:
327:5a967a66c10f
Child:
339:5c4bda268e08
Child:
341:599aa20d0279
Child:
343:204497974293
--- a/cdms_sd.h	Fri Dec 16 08:53:12 2016 +0000
+++ b/cdms_sd.h	Tue Dec 20 08:36:41 2016 +0000
@@ -1,3 +1,6 @@
+#ifndef CDMS_SD_INLCUDED
+#define CDMS_SD_INLCUDED
+
 //SPI spi(PTE1, PTE3, PTE2);      // MOSI,MISO, CLOCK microcontroller(in order)
 //DigitalOut cs_sd(PTE22);
 
@@ -6,7 +9,7 @@
 
 #define SD_COMMAND_TIMEOUT 325
 
-#define SD_DBG             0
+#define SD_DBG             1
 
 #define R1_IDLE_STATE           (1 << 0)
 #define R1_ERASE_RESET          (1 << 1)
@@ -18,7 +21,6 @@
 
 uint32_t SD_DATABLOCK_START[] = {0, 1001, 11001, 21001, 31001, 41001};
 uint32_t SD_DATABLOCK_END[] = {0, 11000, 21000, 31000, 41000, 51000};
-
 uint32_t SD_MNG_SECT=80000;
 
 extern uint8_t SD_INIT_FLAGS;
@@ -109,114 +111,27 @@
     disk_write(buffer,SD_MNG_SECT);
 
     disk_read(buffer,SD_MNG_SECT);
-    if(sid==0x01) {
-        fsc=(uint32_t)(buffer[0]<<24)+(uint32_t)(buffer[1]<<16)+(uint32_t)(buffer[2]<<8)+(uint32_t)buffer[3];
-        fsc_old=(uint32_t)(buffer[4]<<24)+(uint32_t)(buffer[5]<<16)+(uint32_t)(buffer[6]<<8)+(uint32_t)buffer[7];
+    if(sid>=0x01 && sid <=0x05)
+    {
+        fsc=(uint32_t)(buffer[0 + ((sid-1)*8)]<<24)+(uint32_t)(buffer[1 + ((sid-1)*8)]<<16)+(uint32_t)(buffer[2 + ((sid-1)*8)]<<8)+(uint32_t)buffer[3 + ((sid-1)*8)];
+        fsc_old=(uint32_t)(buffer[4 + ((sid-1)*8)]<<24)+(uint32_t)(buffer[5 + ((sid-1)*8)]<<16)+(uint32_t)(buffer[6 + ((sid-1)*8)]<<8)+(uint32_t)buffer[7 + ((sid-1)*8)];
         fsc++;
-        buffer[0]=(uint8_t) (fsc>>24 & 0xFF);
-        buffer[1]=(uint8_t) (fsc>>16 & 0xFF);
-        buffer[2]=(uint8_t) (fsc>>8 & 0xFF);
-        buffer[3]=(uint8_t) (fsc & 0xFF);
-        if(fsc > SD_DATABLOCK_END[1]-SD_DATABLOCK_START[1]+1) {
+        buffer[0 + ((sid-1)*8)]=(uint8_t) (fsc>>24 & 0xFF);
+        buffer[1 + ((sid-1)*8)]=(uint8_t) (fsc>>16 & 0xFF);
+        buffer[2 + ((sid-1)*8)]=(uint8_t) (fsc>>8 & 0xFF);
+        buffer[3 + ((sid-1)*8)]=(uint8_t) (fsc & 0xFF);
+        if(fsc > SD_DATABLOCK_END[sid]-SD_DATABLOCK_START[sid]+1) {
             fsc_old = fsc_old+1;
-            buffer[4]=(uint8_t) (fsc_old>>24 & 0xFF);
-            buffer[5]=(uint8_t) (fsc_old>>16 & 0xFF);
-            buffer[6]=(uint8_t) (fsc_old>>8 & 0xFF);
-            buffer[7]=(uint8_t) (fsc_old & 0xFF);
+            buffer[4 + ((sid-1)*8)]=(uint8_t) (fsc_old>>24 & 0xFF);
+            buffer[5 + ((sid-1)*8)]=(uint8_t) (fsc_old>>16 & 0xFF);
+            buffer[6 + ((sid-1)*8)]=(uint8_t) (fsc_old>>8 & 0xFF);
+            buffer[7 + ((sid-1)*8)]=(uint8_t) (fsc_old & 0xFF);
         }
 
         i = disk_write(buffer,SD_MNG_SECT);
         if(i == 0) {
-            FSC_CURRENT[1] = fsc;
-            FSC_OLD[1] = fsc_old;
-            return i;
-        }
-    }
-    if(sid==0x02) {
-        fsc=(uint32_t)(buffer[8]<<24)+(uint32_t)(buffer[9]<<16)+(uint32_t)(buffer[10]<<8)+(uint32_t)buffer[11];
-        fsc_old=(uint32_t)(buffer[12]<<24)+(uint32_t)(buffer[13]<<16)+(uint32_t)(buffer[14]<<8)+(uint32_t)buffer[15];
-        fsc++;
-        buffer[8]=(uint8_t) (fsc>>24 & 0xFF);
-        buffer[9]=(uint8_t) (fsc>>16 & 0xFF);
-        buffer[10]=(uint8_t) (fsc>>8 & 0xFF);
-        buffer[11]=(uint8_t) (fsc & 0xFF);
-        if(fsc > SD_DATABLOCK_END[2]-SD_DATABLOCK_START[2]+1) {
-            fsc_old = fsc_old+1;
-            buffer[12]=(uint8_t) (fsc_old>>24 & 0xFF);
-            buffer[13]=(uint8_t) (fsc_old>>16 & 0xFF);
-            buffer[14]=(uint8_t) (fsc_old>>8 & 0xFF);
-            buffer[15]=(uint8_t) (fsc_old & 0xFF);
-        }
-        i = disk_write(buffer,SD_MNG_SECT);
-        if(i == 0) {
-            FSC_CURRENT[2] = fsc;
-            FSC_OLD[2] = fsc_old;
-            return i;
-        }
-    }
-    if(sid==0x03) {
-        fsc=(uint32_t)(buffer[16]<<24)+(uint32_t)(buffer[17]<<16)+(uint32_t)(buffer[18]<<8)+(uint32_t)buffer[19];
-        fsc_old=(uint32_t)(buffer[20]<<24)+(uint32_t)(buffer[21]<<16)+(uint32_t)(buffer[22]<<8)+(uint32_t)buffer[23];
-        fsc++;
-        buffer[16]=(uint8_t) (fsc>>24 & 0xFF);
-        buffer[17]=(uint8_t) (fsc>>16 & 0xFF);
-        buffer[18]=(uint8_t) (fsc>>8 & 0xFF);
-        buffer[19]=(uint8_t) (fsc & 0xFF);
-        if(fsc > SD_DATABLOCK_END[3]-SD_DATABLOCK_START[3]+1) {
-            fsc_old = fsc_old+1;
-            buffer[20]=(uint8_t) (fsc_old>>24 & 0xFF);
-            buffer[21]=(uint8_t) (fsc_old>>16 & 0xFF);
-            buffer[22]=(uint8_t) (fsc_old>>8 & 0xFF);
-            buffer[23]=(uint8_t) (fsc_old & 0xFF);
-        }
-        i = disk_write(buffer,SD_MNG_SECT);
-        if(i == 0) {
-            FSC_CURRENT[3] = fsc;
-            FSC_OLD[3] = fsc_old;
-            return i;
-        }
-    }
-    if(sid==0x04) {
-        fsc=(uint32_t)(buffer[24]<<24)+(uint32_t)(buffer[25]<<16)+(uint32_t)(buffer[26]<<8)+(uint32_t)buffer[27];
-        fsc_old=(uint32_t)(buffer[28]<<24)+(uint32_t)(buffer[29]<<16)+(uint32_t)(buffer[30]<<8)+(uint32_t)buffer[31];
-        fsc++;
-        buffer[24]=(uint8_t) (fsc>>24 & 0xFF);
-        buffer[25]=(uint8_t) (fsc>>16 & 0xFF);
-        buffer[26]=(uint8_t) (fsc>>8 & 0xFF);
-        buffer[27]=(uint8_t) (fsc & 0xFF);
-        if(fsc > SD_DATABLOCK_END[4]-SD_DATABLOCK_START[4]+1) {
-            fsc_old = fsc_old+1;
-            buffer[28]=(uint8_t) (fsc_old>>24 & 0xFF);
-            buffer[29]=(uint8_t) (fsc_old>>16 & 0xFF);
-            buffer[30]=(uint8_t) (fsc_old>>8 & 0xFF);
-            buffer[31]=(uint8_t) (fsc_old & 0xFF);
-        }
-        i = disk_write(buffer,SD_MNG_SECT);
-        if(i == 0) {
-            FSC_CURRENT[4] = fsc;
-            FSC_OLD[4] = fsc_old;
-            return i;
-        }
-    }
-    if(sid==0x05) {
-        fsc=(uint32_t)(buffer[32]<<24)+(uint32_t)(buffer[33]<<16)+(uint32_t)(buffer[34]<<8)+(uint32_t)buffer[35];
-        fsc_old=(uint32_t)(buffer[36]<<24)+(uint32_t)(buffer[37]<<16)+(uint32_t)(buffer[38]<<8)+(uint32_t)buffer[39];
-        fsc++;
-        buffer[32]=(uint8_t) (fsc>>24 & 0xFF);
-        buffer[33]=(uint8_t) (fsc>>16 & 0xFF);
-        buffer[34]=(uint8_t) (fsc>>8 & 0xFF);
-        buffer[35]=(uint8_t) (fsc & 0xFF);
-        if(fsc > SD_DATABLOCK_END[5]-SD_DATABLOCK_START[5]+1) {
-            fsc_old = fsc_old+1;
-            buffer[36]=(uint8_t) (fsc_old>>24 & 0xFF);
-            buffer[37]=(uint8_t) (fsc_old>>16 & 0xFF);
-            buffer[38]=(uint8_t) (fsc_old>>8 & 0xFF);
-            buffer[39]=(uint8_t) (fsc_old & 0xFF);
-        }
-        i = disk_write(buffer,SD_MNG_SECT);
-        if(i == 0) {
-            FSC_CURRENT[5] = fsc;
-            FSC_OLD[5] = fsc_old;
+            FSC_CURRENT[sid] = fsc;
+            FSC_OLD[sid] = fsc_old;
             return i;
         }
     }
@@ -693,4 +608,6 @@
 
     // receive the data
     return read(buffer,64);
-}
\ No newline at end of file
+}
+
+#endif
\ No newline at end of file