Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-rtos SimpleDMA FreescaleIAP eeprom
Fork of CDMS_CODE_FM_28JAN2017 by
Revision 187:2c7263530c57, committed 2016-06-29
- Comitter:
- chaithanyarss
- Date:
- Wed Jun 29 13:59:21 2016 +0000
- Parent:
- 180:ccc21cc163f8
- Child:
- 188:5f75962ae7ea
- Commit message:
- SD card finalized code
Changed in this revision
--- a/CDMS_HK.h Wed May 25 15:28:32 2016 +0000
+++ b/CDMS_HK.h Wed Jun 29 13:59:21 2016 +0000
@@ -1,17 +1,46 @@
-//#include "cdms_rtc.h"
+#include "cdms_rtc.h"
#include "pinconfig.h"
+#include "reset_functions.h"
+#include "DefinitionsAndGlobals.h"
+#include "COM_SND_TM_functions.h"
void FCTN_CDMS_HK_MAIN();
void FCTN_CDMS_HK();
-//extern uint8_t CDMS_HK_STATUS;
-//extern uint8_t Power_level;
-//extern uint8_t Att_level;
-//extern char CDMS_HK[8];
+void VERIFY_COMRX();
+void VERIFY_RTC();
+void CDMS_HK_SD();
+void CDMS_HW_FAULTS();
+void HANDLE_HW_FAULT_SD();
+void HANDLE_HW_FAULT_BAE();
+void HANDLE_HW_FAULT_PL();
+void COLLECT_CDMS_RAM();
Serial hk_cdms(USBTX, USBRX);
-AnalogIn TempInput(PIN27); // Input from Current Multiplexer
+AnalogIn TempInput(PIN27); // Input from Current Multiplexer
AnalogIn CDMS_temp_sensor(PIN53);
+AnalogIn COMRX_RSSI_volatge(PIN70);
+
+DigitalIn SD_OC_FAULT (PIN90);
+DigitalOut SD_SW_EN_DS (PIN97);
+DigitalOut BAE_SW_EN_DS (PIN47);
+DigitalOut PL_SW_EN_DS (PIN73);
+
+//GPIO PINS
+DigitalIn V_A_PGOOD (PIN88);
+DigitalIn V_B_PGOOD_1 (PIN6);
+DigitalIn V_B_PGOOD_2 (PIN7);
+DigitalIn V_C_PGOOD (PIN54);
+DigitalIn COMRX_OC_FAULT (PIN68);
+DigitalIn COMTX_OC_FAULT (PIN69);
+DigitalIn BAE_OC_FAULT (PIN92);
+DigitalIn PL_GPIO_1_STATUS (PIN71);
+DigitalIn PL_GPIO_2_STATUS (PIN81);
+DigitalIn PL_GPIO_3_STATUS (PIN80);
+DigitalIn PL_BEE_SW_OC_FAULT (PIN4);
+DigitalIn PL_EPS_LATCH_SW_OC_FAULT ();
+DigitalIn V_C_EN_STATUS ();
+DigitalIn V_D_EN_STATUS ();
DigitalOut SelectLinec3 (PIN79); // MSB of Select Lines
DigitalOut SelectLinec2 (PIN78);
@@ -20,75 +49,61 @@
void FCTN_CDMS_HK_MAIN(void const *args)
{
-// CDMS_HK_STATUS=(CDMS_HK_STATUS)|(HK_MAIN_STATUS);
- FCTN_CDMS_HK;
- hk_cdms.printf(" \r\nCDMS HK entered Verify COM RX RSSI >0.4 \r\n");
-
- int HK_I2C;
- char BAE_HK[74];
- FCTN_I2C_READ(BAE_HK,74);
- printf("BAE_HK=%s",BAE_HK);
- /*if(HK_I2C==0)
- {
- if(Power_level!=0)
- {
- printf("Update Power_level to 0 in Flash");
- }
- Att_level=0;
- CDMS_HK_STATUS=(CDMS_HK_STATUS)|(HK_BAE_ERR_I2C);
- CDMS_HK_STATUS=(CDMS_HK_STATUS)&(~(HK_MAIN_STATUS));
- }**/
- uint8_t CDMS_quant[17];
- // printf("BAE HK is %s",BAE_HK);
- for(int i=0;i<16;i++)
- {
- CDMS_quant[i]= (uint8_t)quant_data.temp_quant[i];
- }
- CDMS_quant[16]= (uint8_t)quant_data.CDMS_temp_quant;
- uint64_t time=0x00;//replace with rtc function
- char tree[61];
- hk_cdms.printf("i am done\r\n");
- uint8_t data[512];
- for(int i=0;i<512;i++)
- {
- data[i]=0x00;
- }
- tree[0]=(char)(time>>(56))&(0xFF);
- tree[1]=(char)(time>>(48))&(0xFF);
- tree[2]=(char)(time>>(40))&(0xFF);
- tree[3]=(char)(time>>(32))&(0xFF);
- tree[4]=(char)(time>>(24))&(0xFF);
- tree[5]=(char)(time>>(16))&(0xFF);
- tree[6]=(char)(time>>(8))&(0xFF);
- tree[7]=(char)(time)&(0xFF);
- for(int i=0;i<73;i++)
- {
- tree[i+8]=BAE_HK[i];
- }
- printf("Hope u r alive \r\n");
- for(int i=0;i<81;i++)
- {
- data[i]=(uint8_t)tree[i];
- }
- for(int i=81;i<98;i++)
- {
- data[i]=CDMS_quant[i];
- }
- for(int i=0;i<512;i++)
- {
- printf("%d",data[i]);
- }
- //uint8_t fsc=FCTN_SD_MNGR(0x3);
- //printf("FSC where SD is written is %d\r\n",fsc);
- //int a=SD_WRITE(data,0x00000012,0x3);
- //printf("Result of writing is %d \r\n",a);
- //BCN long frame ???
- //CDMS_HK_STATUS=(CDMS_HK_STATUS)&(~(HK_MAIN_STATUS));
- hk_cdms.printf("CDMS executed succesfully\r\n");
+ CDMS_HK_MAIN_STATUS = 0x01;
+ CDMS_HK_MAIN_COUNTER++;
+
+ FCTN_CDMS_HK();
+ RSSI_volatge = COMRX_RSSI_volatge.read() * 3.3;
+ VERIFY_COMRX();
+ VERIFY_RTC();
+ HANDLE_HW_FAULTS();
+ FUNC_CDMS_GPIO_STATUS(); //yet to be done
+ COLLECT_CDMS_RAM();
+
+ uint8_t CDMS_quant[19];
+ for(int i=0;i<16;i++)
+ {
+ CDMS_quant[i]= (uint8_t)quant_data.temp_quant[i];
+ }
+ CDMS_quant[16]= (uint8_t)RSSI_volatge;
+ CDMS_quant[17]= (uint8_t)quant_data.CDMS_temp_quant;
+
+
+ char BAE_HK[74];
+ BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,74);
+ if(BAE_HK_I2C == 0)
+ hk_cdms.printf("Bae hk data received");
+ else
+ {
+ hk_cdms.printf("Bae hk data NOT received");
+ for(int i = 0;i<74;i++)
+ BAE_HK = 0;
+ }
+
+ for(int i=0;i<512;i++)
+ {
+ CDMS_HEALTH_DATA[i]=0x00;
+ }
+
+ uint64_t time = FCTN_CDMS_RD_RTC();
+ time = time>>7;
+ uint32_t HK_time = (uint32_t)time;
+ for(int i = 0;i<4;i++)
+ CDMS_HEALTH_DATA[i] = HK_time[i];
+ // Here: Have to FIT flash data.
+ for(int i = 0;i<19;i++)
+ CDMS_HEALTH_DATA[i+24] = CDMS_quant[i];
+
+
+ for(int i=0;i<512;i++)
+ {
+ printf("%d",CDMS_HEALTH_DATA[i]);
+ }
+ CDMS_HK_FSC = FCTN_SD_MNGR(0x04);
+ BAE_HK_FSC = FCTN_SD_MNGR(0x05);
+ hk_cdms.printf("CDMS executed succesfully\r\n");
}
-
-
int quantiz(float start,float step,float x)
{
int y=(x-start)/step;
@@ -97,24 +112,18 @@
return y;
}
-
-
-void saveMin(char x,char y){
- if(y<x){
- x=y;
- }
-
+void saveMin(char x,char y)
+{
+ return (y<x)?y:x;
}
-void saveMax(char x,char y){
- if (y>x)
- {
- x=y;
- }
+
+void saveMax(char x,char y)
+{
+ return (y>x)?y:x;
}
-void minMaxHkData(){
-
-
-
+
+void minMaxHkData()
+{
if(firstCount==true){
for (int i = 0; i < 16; ++i){
min_max_data.temp_min[i] = quant_data.temp_quant[i];
@@ -123,20 +132,16 @@
min_max_data.CDMS_temp_min=quant_data.CDMS_temp_quant;
min_max_data.CDMS_temp_max=quant_data.CDMS_temp_quant;
-
-
}
else {
for (int i = 0; i < 16; ++i)
{
- saveMin(min_max_data.temp_min[i],quant_data.temp_quant[i]);
- saveMax(min_max_data.temp_max[i],quant_data.temp_quant[i]);
+ min_max_data.temp_min[i] = saveMin(min_max_data.temp_min[i],quant_data.temp_quant[i]);
+ min_max_data.temp_max[i] = saveMax(min_max_data.temp_max[i],quant_data.temp_quant[i]);
}
- saveMin(min_max_data.CDMS_temp_min,quant_data.CDMS_temp_quant);
- saveMax(min_max_data.CDMS_temp_max,quant_data.CDMS_temp_quant);
-
-
+ min_max_data.CDMS_temp_min = saveMin(min_max_data.CDMS_temp_min,quant_data.CDMS_temp_quant);
+ min_max_data.CDMS_temp_max = saveMax(min_max_data.CDMS_temp_max,quant_data.CDMS_temp_quant);
}
firstCount=false;
}
@@ -160,11 +165,11 @@
SelectLinec1=!(SelectLinec1);
if(Iteration%4==3)
SelectLinec2=!(SelectLinec2);
- if(Iteration%8==7)
+ if(Iteration%8==7) [0]
SelectLinec3=!(SelectLinec3);
}
-actual_data.CDMS_temp_actual=(-90.7*3.3*CDMS_temp_sensor.read())+190.1543;
+ actual_data.CDMS_temp_actual=(-90.7*3.3*CDMS_temp_sensor.read())+190.1543;
for(Iteration=0;Iteration<16;Iteration++){
@@ -200,4 +205,203 @@
quant_data.CDMS_temp_quant=quantiz(tstart,tstep,actual_data.CDMS_temp_actual);
minMaxHkData();
+}
+
+void FUNC_CDMS_GPIO_STATUS() //Polls the status of Input GPIO PINS
+{
+ //V_A_PGOOD //TRZ EN
+ GPIO_STATUS=(V_A_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<15)):(GPIO_STATUS)&(~((uint16_t)(0x1<<15)));
+ //V_B_PGOOD_1 //3V3BPGOOD //$
+ GPIO_STATUS=(V_B_PGOOD_1)?(GPIO_STATUS)||((uint16_t)(0x1<<14)):(GPIO_STATUS)&(~((uint16_t)(0x1<<14)));
+ //V_B_PGOOD_2 //3V3BEN //$
+ GPIO_STATUS=(V_B_PGOOD_2)?(GPIO_STATUS)||((uint16_t)(0x1<<13)):(GPIO_STATUS)&(~((uint16_t)(0x1<<13)));
+ //V_C_PGOOD //3V3CPGOOD //$
+ GPIO_STATUS=(V_C_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<12)):(GPIO_STATUS)&(~((uint16_t)(0x1<<12)));
+ //COMRX_OC_FAULT //$
+ GPIO_STATUS=(COMRX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<11)):(GPIO_STATUS)&(~((uint16_t)(0x1<<11)));
+ // COMTX_OC_FAULT //$
+ GPIO_STATUS=(COMTX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<10)):(GPIO_STATUS)&(~((uint16_t)(0x1<<10)));
+ //BAE_OC_FAULT //$
+ GPIO_STATUS=(BAE_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<9)):(GPIO_STATUS)&(~((uint16_t)(0x1<<9)));
+ //PL_GPIO_1_STATUS //$
+ GPIO_STATUS=(PL_GPIO_1_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8)));
+ //PL_GPIO_2_STATUS //$
+ GPIO_STATUS=(PL_GPIO_2_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<7)):(GPIO_STATUS)&(~((uint16_t)(0x1<<7)));
+ //PL_GPIO_3_STATUS //$
+ GPIO_STATUS=(PL_GPIO_3_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<6)):(GPIO_STATUS)&(~((uint16_t)(0x1<<6)));
+ //PL_BEE_SW_OC_FAULT //to be verified
+ GPIO_STATUS=(PL_BEE_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<5)):(GPIO_STATUS)&(~((uint16_t)(0x1<<5)));
+ //PL_EPS_LATCH_SW_OC_FAULT // to be verified
+ GPIO_STATUS=(PL_EPS_LATCH_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<4)):(GPIO_STATUS)&(~((uint16_t)(0x1<<4)));
+
+}
+
+void VERIFY_COMRX()
+{
+ //COMRX_OC_FAULT //$
+ if(PIN68==0 && RSSI_volatge > 0.4)
+ COMRX_STATUS = COMRX_ALIVE;
+ else
+ {
+ RESET_COMRX();
+ COMRX_RESET_COUNTER++;
+ if(PIN68==0 && RSSI_volatge > 0.4)
+ COMRX_STATUS = COMRX_ALIVE;
+ else
+ COMRX_STATUS = COMRX_DEAD;
+ }
+}
+
+void VERIFY_RTC(){
+
+ if(RTC_STATUS = 0x00)
+ {
+ SPI_mutex.lock();
+ gCS_RTC=1;
+ gCS_RTC=0;
+ spi.write(0x0F);
+ if(spi.write(0x00) & 0x04 == 0x04)
+ {
+ RTC_STATUS = Not_started;
+ RESET_RTC();
+ RTC_FAULTCOUNT++;
+ }
+ gCS_RTC=1;
+ SPI_mutex.unlock();
+ }
+}
+
+void HANDLE_HW_FAULTS()
+{
+ HANDLE_HW_FAULT_SD();
+ HANDLE_HW_FAULT_BAE();
+ HANDLE_HW_FAULT_PL()
+}
+
+void HANDLE_HW_FAULT_SD()
+{
+ if(SD_STATUS != DEVICE_DISABLED)
+ {
+ if(SD_STATUS = DEVICE_OC_FAULT)
+ SD_SW_EN_DS = 0; //powering on SD
+
+ if(SD_OC_FAULT == 0)
+ {
+ SD_SW_EN_DS = 1; //switching off SD card
+
+ SD_FAULTCOUNT++;
+ SD_STATUS = (SD_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+ }
+ else
+ {
+ SD_STATUS = DEVICE_POWERED;
+ SD_FAULTCOUNT = 0;
+ }
+ }
+}
+
+void HANDLE_HW_FAULT_BAE()
+{
+ if(BAE_STATUS != DEVICE_DISABLED)
+ {
+ if(BAE_STATUS = DEVICE_OC_FAULT)
+ BAE_SW_EN_DS = 1; //Power ON BAE
+
+ if(BAE_OC_FAULT == 0) // If OC Fault
+ {
+ BAE_SW_EN_DS = 0; //Switch OFF BAE
+ BAE_FAULTCOUNT++;
+ BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+ }
+ else
+ {
+ BAE_STATUS = DEVICE_POWERED;
+ BAE_FAULTCOUNT = 0;
+ }
+ }
+}
+
+void HANDLE_HW_FAULT_PL()
+{
+ if(PL_STATUS != DEVICE_DISABLED)
+ {
+ if(PL_STATUS = DEVICE_OC_FAULT)
+ PL_SW_EN_DS = 1; //Power ON PL
+
+ if(PL_BEE_SW_OC_FAULT == 1) // if OC Fault
+ {
+ PL_SW_EN_DS = 0; // switching OFF PL
+ PL_FAULTCOUNT++;
+ PL_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+ }
+ else
+ {
+ if(PL_STATUS == DEVICE_OC_FAULT)
+ PL_SW_EN_DS = 0; //Switching OFF PL
+ PL_STATUS = DEVICE_ENABLED;
+ PL_FAULTCOUNT = 0;
+ }
+ }
+
+void COLLECT_CDMS_RAM()
+{
+ /*--------------------Current FSC's---------------------*/\
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+43] = CURRENT_FSC_HK_ARCH_BAE >> (i*8);
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+47] = CURRENT_FSC_HK_ARCH_CDMS >> (i*8);
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+51] = CURRENT_FSC_SFF_BT >> (i*8);
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+55] = CURRENT_FSC_SFF_AT >> (i*8);
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+59] = CURRENT_FSC_SCF >> (i*8);
+
+ /*---------------------Latest Time----------------------*/
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+63] = TIME_LATEST_SPI_SPEED >> (i*8);
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+67] = TIME_LATEST_SD_RD >> (i*8);
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+71] = TIME_LATEST_SD_WR >> (i*8);
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+75] = TIME_LATEST_I2C_SPEED >> (i*8);
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+79] = TIME_LATEST_I2C_BAE >> (i*8);
+ for(int i=0;i<4;i++)
+ CDMS_HEALTH_DATA[i+83] = TIME_LATEST_RTC >> (i*8);
+ for(int i=0;i<2;i++)
+ CDMS_HEALTH_DATA[i+87] = COMRX_RESET_COUNTER >> (i*8);
+ for(int i=0;i<2;i++)
+ CDMS_HEALTH_DATA[i+89] = PL_RCV_SC_DATA_COUNTER >> (i*8);
+ for(int i=0;i<2;i++)
+ CDMS_HEALTH_DATA[i+91] = PL_MAIN_COUNTER >> (i*8);
+ for(int i=0;i<2;i++)
+ CDMS_HEALTH_DATA[i+93] = CDMS_HK_MAIN_COUNTER >> (i*8);
+ for(int i=0;i<2;i++)
+ CDMS_HEALTH_DATA[i+95] = CDMS_I2C_ERR_BAE_COUNTER >> (i*8);
+ for(int i=0;i<2;i++)
+ CDMS_HEALTH_DATA[i+97] = CDMS_I2C_ERR_SPEED_COUNTER >> (i*8);
+ CDMS_HEALTH_DATA[100] = CDMS_HEALTH_DATA[100] | CDMS_STANDBY_PL << 7;
+ CDMS_HEALTH_DATA[100] = CDMS_HEALTH_DATA[100] | ((CDMS_INIT_STATUS << 6) & 0x40);
+ CDMS_HEALTH_DATA[100] = CDMS_HEALTH_DATA[100] | ((CDMS_HK_MAIN_STATUS << 5) & 0x20);
+ CDMS_HEALTH_DATA[100] = CDMS_HEALTH_DATA[100] | ((CDMS_HK_STATUS << 3) & 0x18);
+ CDMS_HEALTH_DATA[100] = CDMS_HEALTH_DATA[100] | ((COMRX_STATUS << 2) & 0x04);
+ CDMS_HEALTH_DATA[100] = CDMS_HEALTH_DATA[100] | ((CDMS_RTC_BL << 1) & 0x02);
+ CDMS_HEALTH_DATA[100] = CDMS_HEALTH_DATA[100] & 0xFE;
+
+ CDMS_HEALTH_DATA[101] = CDMS_HEALTH_DATA[101] | PL_RCV_SC_DATA_STATUS << 7;
+ CDMS_HEALTH_DATA[101] = CDMS_HEALTH_DATA[101] | ((COM_SESSION << 6) & 0x40);
+ CDMS_HEALTH_DATA[101] = CDMS_HEALTH_DATA[101] | ((COM_RX << 5) & 0x20);
+ CDMS_HEALTH_DATA[101] = CDMS_HEALTH_DATA[101] | ((RF_SW_STATUS << 4) & 0x10);
+ CDMS_HEALTH_DATA[101] = CDMS_HEALTH_DATA[101] | ((COM_TX << 3) & 0x08);
+ CDMS_HEALTH_DATA[101] = CDMS_HEALTH_DATA[101] | ((COM_TX_STATUS << 2) & 0x04);
+ CDMS_HEALTH_DATA[101] = CDMS_HEALTH_DATA[101] | ((COM_MNG_TMTC << 1) & 0x02);
+ CDMS_HEALTH_DATA[101] = CDMS_HEALTH_DATA[101] | (CDMS_STANDBY_HK & 0x01);
+
+ CDMS_HEALTH_DATA[102] = CDMS_HEALTH_DATA[102] | PL_INIT_STATUS << 7;
+ CDMS_HEALTH_DATA[102] = CDMS_HEALTH_DATA[102] | ((PL_MAIN_STATUS << 6) & 0x40);
+ CDMS_HEALTH_DATA[102] = CDMS_HEALTH_DATA[102] | ((PL_LOW_POWER << 5) & 0x20);
+ CDMS_HEALTH_DATA[102] = CDMS_HEALTH_DATA[102] | ((PL_STATE << 3) & 0x18);
+ CDMS_HEALTH_DATA[102] = CDMS_HEALTH_DATA[102] | (PL_STATUS & 0x07);
}
\ No newline at end of file
--- a/COM_MNG_TMTC.h Wed May 25 15:28:32 2016 +0000
+++ b/COM_MNG_TMTC.h Wed Jun 29 13:59:21 2016 +0000
@@ -1372,7 +1372,7 @@
gPC.printf("completed or session timed out: %x\r\n", gMASTER_STATE);\
/*COMPLETED EXECUTION OF TC*/\
gMASTER_STATE = TCL_STATE_COMPLETED;\
- COM_POWER_OFF_TX;\
+ /*COM_POWER_OFF_TX;*/\
reset_all;\
/*PENDING : ENABLE THREADS*/\
gPAY_SPI.bulkRead_start();\
--- a/COM_POWER_ON_TX.h Wed May 25 15:28:32 2016 +0000
+++ b/COM_POWER_ON_TX.h Wed Jun 29 13:59:21 2016 +0000
@@ -282,8 +282,8 @@
}
get_tc_list(power_on_tm->next_TM, 0x00);
/*Call Sign, ACK_L1, TC_LIST*/
- snd_tm.head_pointer(power_on_tm_head);
- transmit_adf;
+ //snd_tm.head_pointer(power_on_tm_head);
+ //transmit_adf;
uint8_t transmissionPass = 0xFF;
/*PENDING: get acknowledgement of transmission*/
/*deleting the telemetry*/
@@ -369,5 +369,5 @@
}
}
}
- /*gPC.puts("COMPLETED COM_POWER_ON_TX\r\n");*/
+ gPC.puts("COMPLETED COM_POWER_ON_TX\r\n");
}
\ No newline at end of file
--- a/DefinitionsAndGlobals.h Wed May 25 15:28:32 2016 +0000
+++ b/DefinitionsAndGlobals.h Wed Jun 29 13:59:21 2016 +0000
@@ -11,11 +11,11 @@
#define COM_RX_UART_RX USBRX
// COMMON SPI
- #define SPI_MOSI PTE1
- #define SPI_MISO PTE3
- #define SPI_CLK PTE2
+ #define SPI_MOSI PTD6
+ #define SPI_MISO PTD7
+ #define SPI_CLK PTD5
#define SPI_CS_ADF PTA15
- #define SPI_CS_SDC PIN20
+ #define SPI_CS_SDC PTD4
#define SPI_CS_RTC PIN26
// COM_TX
@@ -137,6 +137,14 @@
#define RF_RELAY_CNTRL_TX PTA7
#define RF_RELAY_CNTRL_BCN PTA12
+//CDMS HK
+ #define COMRX_ALIVE 0xFF;
+ #define COMRX_DEAD 0x00;
+ #define DEVICE_ENABLED 0x00;
+ #define DEVICE_POWERED 0x01;
+ #define DEVICE_OC_FAULT 0x02;
+ #define DEVICE_DISABLED 0x03;
+
// ****************GLOBAL VARIABLES******************
// DEBUG
Serial gPC( USBTX, USBRX );
@@ -203,7 +211,31 @@
const uint8_t gCALL_SIGN_STRING[TM_SHORT_SIZE] = {0xE0, 0x00, 0x00, 0x00, 0x56, 0x55, 0x32, 0x4E, 0x43, 0x46, 0x00, 0xAC, 0x11};
// CDMS HK
+uint8_t CDMS_HEALTH_DATA[134];
+uint8_t CDMS_RAM[59];
+uint16_t GPIO_STATUS;
+uint8_t CDMS_HK_MAIN_STATUS;
+uint16_t CDMS_HK_MAIN_COUNTER;
+uint8_t COMRX_STATUS;
+uint16_t COMRX_RESET_COUNTER;
+uint8_t RTC_FAULTCOUNT;
+uint16_t SD_FAULTCOUNT;
+uint8_t SD_STATUS;
+uint8_t BAE_FAULTCOUNT;
+uint8_t BAE_STATUS;
+uint8_t PL_STATUS;
+uint16_t PL_FAULTCOUNT;
+bool BAE_HK_I2C;
+uint8_t RTC_STATUS;
+uint32_t CDMS_HK_FSC;
+uint32_t BAE_HK_FSC;
+float RSSI_volatge;
+
CDMS_HK_actual actual_data;
CDMS_HK_quant quant_data;
CDMS_HK_min_max min_max_data;
-bool firstCount=true;
\ No newline at end of file
+bool firstCount=true;
+
+//SD HK
+uint32_t FSC_CURRENT[6];
+uint32_t FSC_LAST[6];
\ No newline at end of file
--- a/ThreadsAndFunctions.h Wed May 25 15:28:32 2016 +0000
+++ b/ThreadsAndFunctions.h Wed Jun 29 13:59:21 2016 +0000
@@ -135,6 +135,7 @@
//gLEDG = 1;
}
while(true){
+ COM_POWER_ON_TX();
Thread::signal_wait( COM_MNG_TMTC_SIGNAL_UART_INT );
if( gFLAGS & UART_INT_FLAG ){
gFLAGS = gFLAGS & (~UART_INT_FLAG);
--- a/cdms_rtc.h Wed May 25 15:28:32 2016 +0000
+++ b/cdms_rtc.h Wed Jun 29 13:59:21 2016 +0000
@@ -74,79 +74,64 @@
spi.write(0x87);
spi.write(0x01); //set year to 00(2000)
gCS_RTC=1;
- gPC.puts("\n\r rtc initalised \n");
+ gPC.puts("\r\nrtc initalised\r\n");
SPI_mutex.unlock();
}
uint64_t FCTN_CDMS_RD_RTC()
{
- SPI_mutex.lock();
- uint8_t response;
- //printf("\n\r Entered rtc\n");
- gCS_RTC=1;
- gCS_RTC=0;
- spi.write(0x00); //reading milliseconds register
- response = spi.write(0x00); // read the value by sending dummy byte
- uint8_t centiseconds = (uint8_t(response&0xF0)>>4)*10+uint8_t(response&0x0F)*1;
-
- gCS_RTC=1;
- gCS_RTC=0;
- spi.write(0x01); //reading seconds register
- response =spi.write(0x01);
- uint8_t seconds = ((response&0x70)>>4)*10+(response&0x0F)*1;
-
- gCS_RTC=1;
- gCS_RTC=0;
- spi.write(0x02); //reading minutes register
- response =spi.write(0x01);
- uint8_t minutes = ((response&0xF0)>>4)*10+(response&0x0F)*1;
-
- gCS_RTC=1;
- gCS_RTC=0;
- spi.write(0x03); //reading hours register
- response=spi.write(0x01);
- uint8_t hours = ((response&0x30)>>4)*10+(response&0x0F)*1;
-
- gCS_RTC=1;
- gCS_RTC=0;
- spi.write(0x04); //reading day's register
- uint8_t day =spi.write(0x01);
-
- gCS_RTC=1;
- gCS_RTC=0;
- spi.write(0x05); //reading date register
- response =spi.write(0x01);
- uint8_t date = ((response&0x30)>>4)*10+(response&0x0F)*1;
-
- gCS_RTC=1;
- gCS_RTC=0;
- spi.write(0x06); //reading month registe
- response =spi.write(0x01);
- uint8_t month = ((response&0x10)>>4)*10+(response&0x0F)*1;
-
- gCS_RTC=1;
- gCS_RTC=0;
- spi.write(0x07); //reading year's registe
- response =spi.write(0x01);
- uint8_t year = ((response&0xF0)>>4)*10+(response&0x0F)*1;
- gCS_RTC=1;
- //sprintf(Time_stamp,"%02d%02d%02d%02d%02d%02d%02d%02d",year, month, date, day, hours, minutes, seconds, milliseconds );
- uint8_t Time_stamp[8] = {year, month, date, day, hours, minutes, seconds, centiseconds};
- for(int i= 0; i<8;i++);
- //printf("%d\t",Time_stamp[i]);
- //printf("read\r\n");
- uint64_t time;
- time = 0;
- time = time|(((uint64_t)(centiseconds&0x7F)));
- time = time|(((uint64_t)(seconds&0x3F))<<7);
- time = time|(((uint64_t)(minutes&0x3F))<<13);
- time = time|(((uint64_t)(hours&0x1F))<<19);
- time = time|(((uint64_t)(day&0x1F))<<24);
- time = time|(((uint64_t)(month&0x07))<<29);
- time = time|(((uint64_t)(year&0x03))<<33);
- time = (time&0x00000007FFFFFFFF);
- //printf("\n\r%x%x", (int)(time >> 32), (int)(time));
- //printf("\n\r0x%016llx\n\r", time);
- return time;
- SPI_mutex.unlock();
+ SPI_mutex.lock();
+ uint8_t response;
+
+ gCS_RTC=1;
+ gCS_RTC=0;
+ spi.write(0x0F);
+ response = (spi.write(0x00))&0x04;
+/* if(response =! 0x00)
+ {
+ time = 0x0000000000000000;
+ return time;
+ }*/
+
+ gCS_RTC=1;
+ gCS_RTC=0;
+ spi.write(0x00); //reading centiseconds register
+ response = spi.write(0x00); // read the value by sending dummy byte
+ uint8_t centiseconds = ((response&0xF0)>>4)*10+(response&0x0F)*1;
+
+ response =spi.write(0x00);
+ uint8_t seconds = ((response&0x70)>>4)*10+(response&0x0F)*1;
+
+ response =spi.write(0x00);
+ uint8_t minutes = ((response&0x70)>>4)*10+(response&0x0F)*1;
+
+ response=spi.write(0x00);
+ uint8_t hours = ((response&0x30)>>4)*10+(response&0x0F)*1;
+
+ uint8_t day =spi.write(0x00);
+
+ response =spi.write(0x00);
+ uint8_t date = ((response&0x30)>>4)*10+(response&0x0F)*1;
+
+ response =spi.write(0x00);
+ uint8_t month = ((response&0x10)>>4)*10+(response&0x0F)*1;
+
+ response =spi.write(0x00);
+ uint8_t year = ((response&0xF0)>>4)*10+(response&0x0F)*1;
+ year = (year == 17)?0x00:(year == 18)?0x01:(year == 19)?0x02:(year == 20)?0x03:0x00;
+ gCS_RTC=1;
+
+ uint64_t time;
+ time = 0;
+ time = time|(((uint64_t)(centiseconds&0x7F)));
+ time = time|(((uint64_t)(seconds&0x3F))<<7);
+ time = time|(((uint64_t)(minutes&0x3F))<<13);
+ time = time|(((uint64_t)(hours&0x1F))<<19);
+ time = time|(((uint64_t)(day&0x1F))<<24);
+ time = time|(((uint64_t)(month&0x07))<<29);
+ time = time|(((uint64_t)(year&0x03))<<33);
+ time = (time&0x00000007FFFFFFFF);
+
+ SPI_mutex.unlock();
+ return time;
}
\ No newline at end of file
--- a/cdms_sd.h Wed May 25 15:28:32 2016 +0000
+++ b/cdms_sd.h Wed Jun 29 13:59:21 2016 +0000
@@ -23,22 +23,29 @@
#define SD_MAX_CYCLES 10000
-extern uint8_t SD_INIT_FLAGS;
+uint32_t SD_SCP_FIRST=1001;
+uint32_t SD_SCP_LAST=2000;
+uint32_t SD_SFF_AT_FIRST=2001;
+uint32_t SD_SFF_AT_LAST = 3000;
+uint32_t SD_SFF_BT_FIRST =3001;
+uint32_t SD_SFF_BT_LAST=4000;
+uint32_t SD_HK_ARCH_FIRST=4001;
+uint32_t SD_HK_ARCH_LAST= 5000;
+uint32_t LOG_FIRST =5001;
+uint32_t LOG_LAST=6000;
+uint32_t SD_MNG_SECT=7000;
-
+extern uint8_t SD_INIT_FLAGS;
int initialise_card();
int initialise_card_v1();
int initialise_card_v2();
int disk_write(const uint8_t *, uint64_t);
int disk_read(uint8_t *, uint64_t);
-int disk_initialize();
int disk_erase(int,int);
-//void FCTN_CDMS_INIT_SD();
-//int FCTN_CDMS_WR_SD(const uint8_t *, uint64_t);
-//int FCTN_CDMS_RD_SD(uint8_t *, uint64_t);
-uint32_t FCTN_SD_MNGR(uint8_t);
+uint32_t FCTN_SD_MNG(uint8_t);
+int INCREMENT_SD_LIB(uint8_t);
int cmd(int, int);
@@ -49,7 +56,7 @@
int write(const uint8_t*, uint32_t );
static uint32_t ext_bits(unsigned char *, int , int );
int SD_WRITE(uint8_t*,uint32_t,uint8_t);
-void FCTN_CDMS_SD_INIT();
+int FCTN_CDMS_SD_INIT();
int SD_READ(uint8_t*,uint32_t,uint8_t);
#define SDCARD_FAIL 0
#define SDCARD_V1 1
@@ -57,145 +64,221 @@
#define SDCARD_V2HC 3
-
-
-
-
-
-
-
-
-
int cdv;
uint64_t sd_sectors();
uint64_t sectors;
-void FCTN_CDMS_SD_INIT()
-{
-
- initialise_card();
-
- disk_initialize();
-
+int FCTN_CDMS_SD_INIT()
+{
+ int i = initialise_card();
+ debug_if(SD_DBG, "init card = %d\n", i);
+ sectors = sd_sectors();
+
+ // Set block length to 512 (CMD16)
+ if (cmd(16, 512) != 0) {
+ debug("\rSet 512-byte block timed out\r\n");
+ return 1;
+ } else {
+ //printf("\rDisk initialization successfull\r\n");
+ }
+
+ spi.frequency(1000000); // Set to 1MHz for data transfer
+ return 0;
}
uint32_t FCTN_SD_MNGR(uint8_t sid)
-
{
-
- uint32_t SD_MNG_SECT=7000;
-
uint32_t fsc;
+ uint32_t start_fsc;
uint8_t buffer[512];
int b=disk_read(buffer, SD_MNG_SECT);
- if(sid==0x0)
+ if(sid==0x01)
{
-
fsc=(uint32_t)(buffer[0]<<24)+(uint32_t)(buffer[1]<<16)+(uint32_t)(buffer[2]<<8)+(uint32_t)buffer[3];
- uint32_t next_fsc=fsc+1;
- buffer[0]=(uint8_t) (next_fsc>>24 & 0xFF);
- buffer[1]=(uint8_t) (next_fsc>>16 & 0xFF);
- buffer[2]=(uint8_t) (next_fsc>>8 & 0xFF);
- buffer[3]=(uint8_t) (next_fsc & 0xFF);
- buffer[511]+=2;
- disk_write(buffer,SD_MNG_SECT);
+ 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==0x1)
+ 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;
+}
+
+int INCREMENT_SD_LIB(uint8_t sid)
+{
+ uint32_t fsc;
+ uint32_t start_fsc;
+ uint8_t buffer[512];
+ disk_read(buffer,SD_MNG_SECT);
+ if(sid==0x01)
{
- fsc=(uint32_t)(buffer[4]<<24)+(uint32_t)(buffer[5]<<16)+(uint32_t)(buffer[6]<<8)+(uint32_t)buffer[7];
- uint32_t next_fsc=fsc+1;
- buffer[4]=(uint8_t) (next_fsc>>24 & 0xFF);
- buffer[5]=(uint8_t) (next_fsc>>16 & 0xFF);
- buffer[6]=(uint8_t) (next_fsc>>8 & 0xFF);
- buffer[7]=(uint8_t) (next_fsc & 0xFF);
- buffer[511]+=2;
- disk_write(buffer,SD_MNG_SECT);
+ 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];
+ 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_SCP_LAST-SD_SCP_FIRST+1)
+ {
+ start_fsc = start_fsc+1;
+ buffer[4]=(uint8_t) (start_fsc>>24 & 0xFF);
+ buffer[5]=(uint8_t) (start_fsc>>16 & 0xFF);
+ buffer[6]=(uint8_t) (start_fsc>>8 & 0xFF);
+ buffer[7]=(uint8_t) (start_fsc & 0xFF);
+ }
+ return disk_write(buffer,SD_MNG_SECT);
}
- if(sid==0x2)
+ if(sid==0x02)
{
fsc=(uint32_t)(buffer[8]<<24)+(uint32_t)(buffer[9]<<16)+(uint32_t)(buffer[10]<<8)+(uint32_t)buffer[11];
- uint32_t next_fsc=fsc+1;
- buffer[8]=(uint8_t) (next_fsc>>24 & 0xFF);
- buffer[9]=(uint8_t) (next_fsc>>16 & 0xFF);
- buffer[10]=(uint8_t) (next_fsc>>8 & 0xFF);
- buffer[11]=(uint8_t) (next_fsc & 0xFF);
- buffer[511]+=2;
- disk_write(buffer,SD_MNG_SECT);
+ start_fsc=(uint32_t)(buffer[12]<<24)+(uint32_t)(buffer[13]<<16)+(uint32_t)(buffer[14]<<8)+(uint32_t)buffer[15];
+ 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_SFF_AT_LAST-SD_SFF_AT_FIRST+1)
+ {
+ start_fsc = start_fsc+1;
+ buffer[12]=(uint8_t) (start_fsc>>24 & 0xFF);
+ buffer[13]=(uint8_t) (start_fsc>>16 & 0xFF);
+ buffer[14]=(uint8_t) (start_fsc>>8 & 0xFF);
+ buffer[15]=(uint8_t) (start_fsc & 0xFF);
+ }
+ return disk_write(buffer,SD_MNG_SECT);
}
- if(sid==0x3)
- {
- fsc=(uint32_t)(buffer[12]<<24)+(uint32_t)(buffer[13]<<16)+(uint32_t)(buffer[14]<<8)+(uint32_t)buffer[15];
- uint32_t next_fsc=fsc+1;
- buffer[12]=(uint8_t) (next_fsc>>24 & 0xFF);
- buffer[13]=(uint8_t) (next_fsc>>16 & 0xFF);
- buffer[14]=(uint8_t) (next_fsc>>8 & 0xFF);
- buffer[15]=(uint8_t) (next_fsc & 0xFF);
- buffer[511]+=2;
- disk_write(buffer,SD_MNG_SECT);
- }
- if(sid==0x4)
+ if(sid==0x03)
{
fsc=(uint32_t)(buffer[16]<<24)+(uint32_t)(buffer[17]<<16)+(uint32_t)(buffer[18]<<8)+(uint32_t)buffer[19];
- uint32_t next_fsc=fsc+1;
- buffer[16]=(uint8_t) (next_fsc>>24 & 0xFF);
- buffer[17]=(uint8_t) (next_fsc>>16 & 0xFF);
- buffer[18]=(uint8_t) (next_fsc>>8 & 0xFF);
- buffer[19]=(uint8_t) (next_fsc & 0xFF);
- buffer[511]+=2;
- disk_write(buffer,SD_MNG_SECT);
+ start_fsc=(uint32_t)(buffer[20]<<24)+(uint32_t)(buffer[21]<<16)+(uint32_t)(buffer[22]<<8)+(uint32_t)buffer[23];
+ 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_SFF_BT_LAST-SD_SFF_BT_FIRST+1)
+ {
+ start_fsc = start_fsc+1;
+ buffer[20]=(uint8_t) (start_fsc>>24 & 0xFF);
+ buffer[21]=(uint8_t) (start_fsc>>16 & 0xFF);
+ buffer[22]=(uint8_t) (start_fsc>>8 & 0xFF);
+ buffer[23]=(uint8_t) (start_fsc & 0xFF);
+ }
+ return disk_write(buffer,SD_MNG_SECT);
}
- return 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];
+ 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_HK_ARCH_LAST-SD_HK_ARCH_FIRST+1)
+ {
+ start_fsc = start_fsc+1;
+ buffer[28]=(uint8_t) (start_fsc>>24 & 0xFF);
+ buffer[29]=(uint8_t) (start_fsc>>16 & 0xFF);
+ buffer[30]=(uint8_t) (start_fsc>>8 & 0xFF);
+ buffer[31]=(uint8_t) (start_fsc & 0xFF);
+ }
+ return disk_write(buffer,SD_MNG_SECT);
+ }
+ 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];
+ 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 > LOG_LAST-LOG_FIRST+1)
+ {
+ start_fsc = start_fsc+1;
+ buffer[36]=(uint8_t) (start_fsc>>24 & 0xFF);
+ buffer[37]=(uint8_t) (start_fsc>>16 & 0xFF);
+ buffer[38]=(uint8_t) (start_fsc>>8 & 0xFF);
+ buffer[39]=(uint8_t) (start_fsc & 0xFF);
+ }
+ return disk_write(buffer,SD_MNG_SECT);
+ }
+ return -1;
}
int SD_WRITE(uint8_t* buffer,uint32_t fsc,uint8_t sid)
{
-
- uint32_t SD_SCP_FIRST=1001;
- uint32_t SD_SCP_LAST=2000;
- uint32_t SD_SFF_AT_FIRST=2001;
- uint32_t SD_SFF_AT_LAST = 3000;
- uint32_t SD_SFF_BT_FIRST =3001;
- uint32_t SD_SFF_BT_LAST=4000;
- uint32_t SD_HK_ARCH_FIRST=4001;
- uint32_t SD_HK_ARCH_LAST= 5000;
- uint32_t LOG_FIRST =5001;
- uint32_t LOG_LAST=6000;
- uint32_t SD_MNG_SECT=7000;
uint32_t block_number;
- int result;
- if(sid==0x0)
+ int result = 10;
+ if(sid==0x01)
{
+ //block_number=SD_SCP_FIRST+(fsc%(SD_SCP_LAST-SD_SCP_FIRST+1))-1;
block_number=SD_SCP_FIRST+fsc;
-// printf("write_block_number=%d\r\n",block_number);
result= disk_write(buffer,block_number);
+ if(result == 0)
+ INCREMENT_SD_LIB(sid);
+ return result;
+ }
+ if(sid==0x02)
+ {
+ //block_number= SD_SFF_AT_FIRST+(fsc%(SD_SFF_AT_LAST - SD_SFF_AT_FIRST+1))-1;
+ block_number= SD_SFF_AT_FIRST+fsc;
+ result= disk_write(buffer,block_number);
+ if(result == 0)
+ INCREMENT_SD_LIB(sid);
return result;
}
- if(sid==0x1)
+ if(sid==0x03)
{
- block_number=SD_SFF_AT_FIRST + fsc;
+ //block_number= SD_SFF_BT_FIRST +(fsc%(SD_SFF_BT_LAST - SD_SFF_BT_FIRST +1))-1;
+ block_number= SD_SFF_BT_FIRST +fsc;
result= disk_write(buffer,block_number);
- return result;
- }
- if(sid==0x2)
- {
- block_number=SD_SFF_BT_FIRST + fsc;
- result= disk_write(buffer,block_number);
+ if(result == 0)
+ INCREMENT_SD_LIB(sid);
return result;
}
- if(sid==0x3)
+ if(sid==0x04)
{
- block_number=SD_HK_ARCH_FIRST+fsc;
-// sd1.printf("Block number is %d \r\n",block_number);
+ //block_number=SD_HK_ARCH_FIRST +(fsc%(SD_HK_ARCH_LAST - SD_HK_ARCH_FIRST +1))-1;
+ block_number=SD_HK_ARCH_FIRST +fsc;
result= disk_write(buffer,block_number);
+ if(result == 0)
+ INCREMENT_SD_LIB(sid);
return result;
}
- if(sid==0x4)
+ if(sid==0x05)
{
- block_number=LOG_FIRST +fsc;
+ //block_number= LOG_FIRST +(fsc%(LOG_FIRST - LOG_FIRST +1))-1;
+ block_number= LOG_FIRST +fsc;
result= disk_write(buffer,block_number);
+ if(result == 0)
+ INCREMENT_SD_LIB(sid);
return result;
}
return 1;
@@ -203,42 +286,29 @@
int SD_READ(uint8_t* buffer,uint32_t fsc,uint8_t sid)
{
-
- uint32_t SD_SCP_FIRST=1001;
- uint32_t SD_SCP_LAST=2000;
- uint32_t SD_SFF_AT_FIRST=2001;
- uint32_t SD_SFF_AT_LAST = 3000;
- uint32_t SD_SFF_BT_FIRST =3001;
- uint32_t SD_SFF_BT_LAST=4000;
- uint32_t SD_HK_ARCH_FIRST=4001;
- uint32_t SD_HK_ARCH_LAST= 5000;
- uint32_t LOG_FIRST =5001;
- uint32_t LOG_LAST=6000;
- uint32_t SD_MNG_SECT=7000;
uint32_t block_number;
int result;
- if(sid==0x0)
+ if(sid==0x01)
{
block_number=SD_SCP_FIRST + fsc;
-// sd1.printf("read_block_number=%d\r\n",block_number);
result= disk_read(buffer,block_number);
}
- else if(sid==0x1)
+ else if(sid==0x02)
{
block_number=SD_SFF_AT_FIRST + fsc;
result= disk_read(buffer,block_number);
}
- else if(sid==0x2)
+ else if(sid==0x03)
{
block_number=SD_SFF_BT_FIRST + fsc;
result= disk_read(buffer,block_number);
}
- else if(sid==0x3)
+ else if(sid==0x04)
{
block_number=SD_HK_ARCH_FIRST + fsc;
result= disk_read(buffer,block_number);
}
- else if(sid==0x4)
+ else if(sid==0x05)
{
block_number=LOG_FIRST +fsc;
result= disk_read(buffer,block_number);
@@ -259,21 +329,25 @@
for (int i = 0; i < 16; i++) {
spi.write(0xFF);
}
-
+ uint8_t R1_response = cmd(0,0);
+ gPC.printf("0x%02X",R1_response);
// send CMD0, should return with all zeros except IDLE STATE set (bit 0)
- if (cmd(0, 0) != R1_IDLE_STATE) {
+ if (R1_response != R1_IDLE_STATE) {
debug("No disk, or could not put SD card in to spi idle state\r\n");
return SDCARD_FAIL;
}
+ else
+ gPC.puts("SD Card is in IDLE state\n\r");
-// send CMD8 to determine whther it is ver 2.x
+ // send CMD8 to determine whther it is ver 2.x
int r = cmd8();
if (r == R1_IDLE_STATE) {
-// printf("\rEntering v2\r\n");
- return initialise_card_v2();
+ gPC.puts("Entering V2\r");
+ int q = initialise_card_v2();
+ return q;
} else if (r == (R1_IDLE_STATE | R1_ILLEGAL_COMMAND)) {
-// printf("\rEntering v1\r\n");
+ gPC.puts("Entering V1");
return initialise_card_v1();
} else {
@@ -312,7 +386,6 @@
cmd58();
debug_if(SD_DBG, "\n\rInit: SDCARD_V2\n\r");
cdv = 1;
-
return SDCARD_V2;
}
}
@@ -486,7 +559,7 @@
}
cs_sd = 1;
spi.write(0xFF);
- return -1; // timeout
+ return 1; // timeout
}
static uint32_t ext_bits(unsigned char *data, int msb, int lsb)
@@ -505,20 +578,7 @@
int disk_initialize()
{
- int i = initialise_card();
- debug_if(SD_DBG, "init card = %d\n", i);
- sectors = sd_sectors();
- // Set block length to 512 (CMD16)
- if (cmd(16, 512) != 0) {
- debug("\rSet 512-byte block timed out\r\n");
- return 1;
- } else {
-// printf("\rDisk initialization successfull\r\n");
- }
-
- spi.frequency(1000000); // Set to 1MHz for data transfer
- return 0;
}
int disk_write(const uint8_t *buffer, uint64_t block_number)
--- a/main.cpp Wed May 25 15:28:32 2016 +0000
+++ b/main.cpp Wed Jun 29 13:59:21 2016 +0000
@@ -29,6 +29,8 @@
#include "Compression.h"
#include "ThreadsAndFunctions.h"
+DigitalOut SD_SW_EN_DS (PIN97);
+
//void set_sig(){gSCIENCE_THREAD->signal_set(SCIENCE_SIGNAL);}
int main()
{
@@ -44,7 +46,7 @@
// gRX_CURRENT_PTR = gRX_CURRENT_DATA_NODE->values;
RX1M.attach(&rx_read, Serial::RxIrq);
- gPC.baud(1200);
+ gPC.baud(9600);
// COMMON SPI
spi.format(8,0);
@@ -55,11 +57,30 @@
gCS_RTC = 1;
gCS_ADF = 1;
- FCTN_CDMS_INIT_RTC();/* rtc initialization*/
- FCTN_CDMS_SD_INIT();/* sd card initialization*/
+ FCTN_CDMS_INIT_RTC(); /* rtc initialization*/
+ FCTN_CDMS_SD_INIT(); /*sd card initialization*/
+ uint8_t test[512];
+ uint8_t data[512];
+ for(int i=0;i<512;i++)
+ data[i] = i%100;
+ for(int i=0;i<512;i++)
+ test[i] = 1;
+ disk_write(test,7000);
+ disk_read(test,7000);
+ uint32_t fsc = FCTN_SD_MNGR(3);
+ if(SD_WRITE(data,fsc,3) == 0)
+ {
+ SD_READ(test,fsc,3);
+ for(int i=0;i<15;i++)
+ {
+ gPC.printf("\r0x%02X 0x%02X\n",data[i],test[i]);
+ }
+ }
+
if (DEBUG)
- gPC.puts("welcome to mng_tmtc\r\n");
+ gPC.puts("\rwelcome to mng_22tmtc\r\n");
+
// COM_MNG_TMTC THREAD
gCOM_MNG_TMTC_THREAD = new Thread(COM_MNG_TMTC_FUN);
