To fix the hang problem
Dependencies: FreescaleIAP SimpleDMA mbed-rtos mbed
Fork of CDMS_CODE by
Diff: cdms_sd.h
- 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