working version
Dependencies: mbed mbed-rtos SimpleDMA FreescaleIAP eeprom
Fork of CDMS_CODE_FM_28JAN2017 by
Diff: cdms_sd.h
- Revision:
- 195:6a549c0e9287
- Parent:
- 194:ab528911780d
- Child:
- 197:1369ef45b49e
--- a/cdms_sd.h Wed Jun 29 14:24:12 2016 +0000 +++ b/cdms_sd.h Wed Jun 29 15:23:12 2016 +0000 @@ -57,7 +57,7 @@ static uint32_t ext_bits(unsigned char *, int , int ); int SD_WRITE(uint8_t*,uint32_t,uint8_t); int FCTN_CDMS_SD_INIT(); -int SD_READ(uint8_t*,uint32_t,uint8_t); +uint8_t SD_READ(uint8_t*,uint32_t,uint8_t); #define SDCARD_FAIL 0 #define SDCARD_V1 1 #define SDCARD_V2 2 @@ -88,48 +88,37 @@ -uint32_t FCTN_SD_MNGR(uint8_t sid) +void FCTN_SD_MNGR(void) { uint32_t fsc; uint32_t start_fsc; uint8_t buffer[512]; int b=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]; - start_fsc=(uint32_t)(buffer[4]<<24)+(uint32_t)(buffer[5]<<16)+(uint32_t)(buffer[6]<<8)+(uint32_t)buffer[7]; - FSC_CURRENT[1] = fsc; - FSC_LAST[1] = start_fsc; - } - if(sid==0x02) - { - fsc=(uint32_t)(buffer[8]<<24)+(uint32_t)(buffer[9]<<16)+(uint32_t)(buffer[10]<<8)+(uint32_t)buffer[11]; - start_fsc=(uint32_t)(buffer[12]<<24)+(uint32_t)(buffer[13]<<16)+(uint32_t)(buffer[14]<<8)+(uint32_t)buffer[15]; - FSC_CURRENT[2] = fsc; - FSC_LAST[2] = start_fsc; - } - if(sid==0x03) - { - fsc=(uint32_t)(buffer[16]<<24)+(uint32_t)(buffer[17]<<16)+(uint32_t)(buffer[18]<<8)+(uint32_t)buffer[19]; - start_fsc=(uint32_t)(buffer[20]<<24)+(uint32_t)(buffer[21]<<16)+(uint32_t)(buffer[22]<<8)+(uint32_t)buffer[23]; - FSC_CURRENT[3] = fsc; - FSC_LAST[3] = start_fsc; - } - if(sid==0x04) - { - fsc=(uint32_t)(buffer[24]<<24)+(uint32_t)(buffer[25]<<16)+(uint32_t)(buffer[26]<<8)+(uint32_t)buffer[27]; - start_fsc=(uint32_t)(buffer[28]<<24)+(uint32_t)(buffer[29]<<16)+(uint32_t)(buffer[30]<<8)+(uint32_t)buffer[31]; - FSC_CURRENT[4] = fsc; - FSC_LAST[4] = start_fsc; - } - if(sid==0x05) - { - fsc=(uint32_t)(buffer[32]<<24)+(uint32_t)(buffer[33]<<16)+(uint32_t)(buffer[34]<<8)+(uint32_t)buffer[35]; - start_fsc=(uint32_t)(buffer[36]<<24)+(uint32_t)(buffer[37]<<16)+(uint32_t)(buffer[38]<<8)+(uint32_t)buffer[39]; - FSC_CURRENT[5] = fsc; - FSC_LAST[5] = start_fsc; - } - return fsc; + + fsc=(uint32_t)(buffer[0]<<24)+(uint32_t)(buffer[1]<<16)+(uint32_t)(buffer[2]<<8)+(uint32_t)buffer[3]; + start_fsc=(uint32_t)(buffer[4]<<24)+(uint32_t)(buffer[5]<<16)+(uint32_t)(buffer[6]<<8)+(uint32_t)buffer[7]; + FSC_CURRENT[1] = fsc; + FSC_LAST[1] = start_fsc; + + fsc=(uint32_t)(buffer[8]<<24)+(uint32_t)(buffer[9]<<16)+(uint32_t)(buffer[10]<<8)+(uint32_t)buffer[11]; + start_fsc=(uint32_t)(buffer[12]<<24)+(uint32_t)(buffer[13]<<16)+(uint32_t)(buffer[14]<<8)+(uint32_t)buffer[15]; + FSC_CURRENT[2] = fsc; + FSC_LAST[2] = start_fsc; + + fsc=(uint32_t)(buffer[16]<<24)+(uint32_t)(buffer[17]<<16)+(uint32_t)(buffer[18]<<8)+(uint32_t)buffer[19]; + start_fsc=(uint32_t)(buffer[20]<<24)+(uint32_t)(buffer[21]<<16)+(uint32_t)(buffer[22]<<8)+(uint32_t)buffer[23]; + FSC_CURRENT[3] = fsc; + FSC_LAST[3] = start_fsc; + + fsc=(uint32_t)(buffer[24]<<24)+(uint32_t)(buffer[25]<<16)+(uint32_t)(buffer[26]<<8)+(uint32_t)buffer[27]; + start_fsc=(uint32_t)(buffer[28]<<24)+(uint32_t)(buffer[29]<<16)+(uint32_t)(buffer[30]<<8)+(uint32_t)buffer[31]; + FSC_CURRENT[4] = fsc; + FSC_LAST[4] = start_fsc; + + fsc=(uint32_t)(buffer[32]<<24)+(uint32_t)(buffer[33]<<16)+(uint32_t)(buffer[34]<<8)+(uint32_t)buffer[35]; + start_fsc=(uint32_t)(buffer[36]<<24)+(uint32_t)(buffer[37]<<16)+(uint32_t)(buffer[38]<<8)+(uint32_t)buffer[39]; + FSC_CURRENT[5] = fsc; + FSC_LAST[5] = start_fsc; } int INCREMENT_SD_LIB(uint8_t sid) @@ -284,40 +273,61 @@ return 1; } -int SD_READ(uint8_t* buffer,uint32_t fsc,uint8_t sid) +uint8_t SD_READ(uint8_t* buffer,uint32_t fsc,uint8_t sid) { + FCTN_SD_MNGR(); + if(SD_SW_EN_DS == 1) + return 0x89; uint32_t block_number; int result; if(sid==0x01) { + if(!(FSC_LAST[1]<=fsc && fsc<=FSC_CURRENT[1])){ + return 0x86; + } block_number=SD_SCP_FIRST + fsc; result= disk_read(buffer,block_number); } else if(sid==0x02) { + if(!(FSC_LAST[2]<=fsc && fsc<=FSC_CURRENT[2])){ + return 0x86; + } block_number=SD_SFF_AT_FIRST + fsc; result= disk_read(buffer,block_number); } else if(sid==0x03) { + if(!(FSC_LAST[3]<=fsc && fsc<=FSC_CURRENT[3])){ + return 0x86; + } block_number=SD_SFF_BT_FIRST + fsc; result= disk_read(buffer,block_number); } else if(sid==0x04) { + if(!(FSC_LAST[4]<=fsc && fsc<=FSC_CURRENT[4])){ + return 0x86; + } block_number=SD_HK_ARCH_FIRST + fsc; result= disk_read(buffer,block_number); } else if(sid==0x05) { + if(!(FSC_LAST[5]<=fsc && fsc<=FSC_CURRENT[5])){ + return 0x86; + } block_number=LOG_FIRST +fsc; result= disk_read(buffer,block_number); } else { - return 1; + return 0x02; } - return result; + if(result == 0) + return 0xA0; + else + return 0x88; } @@ -576,11 +586,6 @@ return bits; } -int disk_initialize() -{ - -} - int disk_write(const uint8_t *buffer, uint64_t block_number) {