shubham c / Mbed 2 deprecated SBC_TEST_CDMS_CODE

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of CDMS_CODE by shubham c

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CDMS_HK.h Source File

CDMS_HK.h

00001 void FCTN_CDMS_HK_MAIN();
00002 void FCTN_CDMS_HK();
00003 void VERIFY_COMRX();
00004 void VERIFY_RTC();
00005 void CDMS_HK_SD();
00006 void HANDLE_HW_FAULTS();
00007 void HANDLE_HW_FAULT_SD();
00008 void HANDLE_HW_FAULT_BAE();
00009 void HANDLE_HW_FAULT_PL();
00010 void FUNC_CDMS_GPIO_STATUS();
00011 void minMaxHkData();
00012 void COLLECT_CDMS_RAM();
00013 
00014 AnalogIn TempInput(PIN27);          // Input from Current Multiplexer
00015 AnalogIn CDMS_temp_sensor(PIN53);
00016 AnalogIn COMRX_RSSI_volatge(PIN70);
00017 
00018 
00019 DigitalOut SelectLinec3 (PIN79); // MSB of Select Lines
00020 DigitalOut SelectLinec2 (PIN78);
00021 DigitalOut SelectLinec1 (PIN77);
00022 DigitalOut SelectLinec0 (PIN76); // LSB of Select Lines
00023 
00024 Convolution CDMS_HEALTH;
00025 Convolution BAE_HEALTH;
00026 unsigned char CDMS_HK_FRAME[134] = {0};
00027 char BAE_HK[134] = {0};
00028 uint8_t convoluted_CDMS_HK[270];
00029 uint8_t interleave_CDMS_HK[288];
00030 uint8_t CDMS_HEALTH_FINAL[512] = {0};
00031 uint8_t convoluted_BAE_HK[270];
00032 uint8_t interleave_BAE_HK[288];
00033 uint8_t BAE_HEALTH_FINAL[512] = {0};
00034 unsigned char BAE_HK_FRAME[134] = {0};
00035 
00036 
00037 
00038 void FCTN_CDMS_HK_MAIN(void const *args)
00039 {
00040     uint8_t sd_stat = 0;
00041     while(1)
00042     {
00043     gHK_THREAD->signal_wait(HK_SIGNAL);
00044     gPC.printf("\n\nEntering HK thread\n");
00045 
00046     gMutex.lock();
00047 
00048     CDMS_HK_MAIN_STATUS = 0x01;
00049     CDMS_HK_MAIN_COUNTER++;
00050 
00051     FCTN_CDMS_HK();
00052     RSSI_volatge = COMRX_RSSI_volatge.read() * 3.3;
00053     VERIFY_COMRX();
00054     VERIFY_RTC();
00055     HANDLE_HW_FAULTS();
00056     FUNC_CDMS_GPIO_STATUS(); //yet to be done
00057 
00058     uint8_t CDMS_quant[20];
00059     CDMS_quant[1]= (uint8_t)quant_data.CDMS_temp_quant;
00060     CDMS_quant[2]= (uint8_t)RSSI_volatge;
00061     for(int i=0; i<16; i++) {
00062         CDMS_quant[i+4]= (uint8_t)quant_data.temp_quant[i];
00063     }
00064     minMaxHkData();
00065 
00066     CDMS_HEALTH_DATA[1] = GPIO_STATUS;            //Reading GPIO Pins
00067     CDMS_HEALTH_DATA[0] = GPIO_STATUS >> 8;
00068     COLLECT_CDMS_RAM();
00069     for(int i = 0;i<84;i++)
00070         CDMS_HEALTH_DATA[2+i] = CDMS_RAM[i];                  //Reading RAM parameters
00071     for(int i = 0;i<20;i++)                                   //Collecting Data from Temp sensors
00072         CDMS_HEALTH_DATA[86+i] = CDMS_quant[i];
00073 
00074     // Here: Have to FIT flash data.    
00075     
00076     uint64_t time = FCTN_CDMS_RD_RTC() >> 7;             //Reading Time from RTC
00077     for(int i = 124; i<128; i++)
00078         CDMS_HEALTH_DATA[i] = time >> i*8;
00079     gPC.printf("0x%x\n",time);
00080     FCTN_SD_MNGR();                                 //Adding FSC & TMID to TM frame
00081     CDMS_HK_FRAME[0] = 0x20;
00082     CDMS_HK_FRAME[1] = FSC_CURRENT[4]+1;
00083     CDMS_HK_FRAME[2] = (FSC_CURRENT[4]+1) >> 8;
00084     CDMS_HK_FRAME[3] = (FSC_CURRENT[4]+1) >> 16;
00085 
00086     for(int i = 0; i<128; i++)                       /*Adding actual CDMS Health data to TM frame*/
00087         CDMS_HK_FRAME[4+i] = CDMS_HEALTH_DATA[i];
00088 
00089     uint16_t crc = crc16_gen(CDMS_HK_FRAME,132);      /*Adding CRC to TM frame*/
00090     CDMS_HK_FRAME[133] = crc;
00091     CDMS_HK_FRAME[132] = crc >> 8;
00092 
00093     exor(CDMS_HK_FRAME);
00094     CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME , convoluted_CDMS_HK);
00095     CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME + 67, convoluted_CDMS_HK + 135);
00096     interleave(convoluted_CDMS_HK ,  interleave_CDMS_HK);
00097     interleave(convoluted_CDMS_HK +135, interleave_CDMS_HK + 144);
00098     for(int i=0; i<288; i++)
00099         CDMS_HEALTH_FINAL[i] = interleave_CDMS_HK[i];
00100 
00101     sd_stat = SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4);
00102     if(sd_stat)
00103     {
00104         gPC.puts("sd write failure");
00105         break;
00106         }
00107     /*gPC.printf("Completed CDMS HK\t")*/;
00108 
00109     /*---------------------------------- BAE HK --------------------------------------------*/
00110 
00111     BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134);
00112     /*gPC.printf("Entering BAE HK\t")*/;
00113     if(BAE_HK_I2C == 0) {
00114         crc = crc16_gen((unsigned char *)BAE_HK,132);
00115         if(crc == ((uint16_t)BAE_HK[132] << 8) | (uint16_t)BAE_HK[133]){
00116             TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
00117             /*for(int i = 0; i<15; i++)
00118                 gPC.printf("\r 0x%02X\n",BAE_HK[i]);*/
00119             for(int i = 0; i<4; i++)
00120             BAE_HK[i] = time >> i;
00121             BAE_HK_FRAME[0] = 0x28;
00122             BAE_HK_FRAME[1] = FSC_CURRENT[5]+1;
00123             BAE_HK_FRAME[2] = (FSC_CURRENT[5]+1) >> 8;
00124             BAE_HK_FRAME[3] = (FSC_CURRENT[5]+1) >> 16;
00125             for(int i = 0; i<128; i++)                       /*Adding actual CDMS Health data to TM frame*/
00126                 BAE_HK_FRAME[4+i] = BAE_HK[i];
00127             crc = crc16_gen(BAE_HK_FRAME,132);               /*Adding CRC to TM frame*/
00128             BAE_HK_FRAME[133] = crc;
00129             BAE_HK_FRAME[132] = crc >> 8;
00130             exor(BAE_HK_FRAME);
00131             BAE_HEALTH.convolutionEncode(BAE_HK_FRAME , convoluted_BAE_HK);
00132             BAE_HEALTH.convolutionEncode(BAE_HK_FRAME + 67, convoluted_BAE_HK + 135);
00133             interleave(convoluted_BAE_HK ,  interleave_BAE_HK);
00134             interleave(convoluted_BAE_HK +135, interleave_BAE_HK + 144);
00135             for(int i=0; i<288; i++)
00136                 BAE_HEALTH_FINAL[i] = interleave_BAE_HK[i];
00137             sd_stat = SD_WRITE(BAE_HEALTH_FINAL,FSC_CURRENT[5]+1,5);
00138             if(sd_stat)
00139     {
00140         gPC.puts("sd write failure");
00141         break;
00142         }
00143         }
00144         
00145     } else {
00146         /*gPC.printf("BAE HK data not recieved through I2C\t")*/;
00147         for(int i = 0; i<134; i++)
00148             BAE_HK[i] = 0;
00149     }
00150     /*gPC.printf("Completed BAE HK\n")*/;
00151 
00152     /*----------------------------------Beacon message--------------------------------------*/
00153     unsigned char SC_HK_LBM_0[135];
00154     SC_HK_LBM_0[0] = 0;       // Sending long beacon msg as telecommand with Packet sequence count 0x00
00155     // Add HK bits
00156 
00157     // Add SC bits
00158     crc = crc16_gen(SC_HK_LBM_0,133);
00159     SC_HK_LBM_0[132] = crc;
00160     SC_HK_LBM_0[133] = crc >> 8;
00161     bool y;
00162     y = FCTN_I2C_WRITE((char *)SC_HK_LBM_0,135);
00163     if(y == 0)
00164         /*gPC.printf("long Bcn sent\n\r")*/;
00165         else
00166         gPC.printf("long Bcn not sent\r\n");
00167     gPC.printf("\rCompleted HK\n");
00168     gMutex.unlock();
00169     }
00170 }
00171 
00172 int quantiz(float start,float step,float x)
00173 {
00174     int y=(x-start)/step;
00175     if(y<=0)y=0;
00176     if(y>=255)y=255;
00177     return y;
00178 }
00179 
00180 char saveMin(char x,char y)
00181 {
00182     return (y<x)?y:x;
00183 }
00184 
00185 char saveMax(char x,char y)
00186 {
00187     return (y>x)?y:x;
00188 }
00189 
00190 void minMaxHkData()
00191 {
00192     if(firstCount==true) {
00193         for (int i = 0; i < 16; ++i) {
00194             min_max_data.temp_min[i] = quant_data.temp_quant[i];
00195             min_max_data.temp_max[i] = quant_data.temp_quant[i];
00196         }
00197 
00198         min_max_data.CDMS_temp_min=quant_data.CDMS_temp_quant;
00199         min_max_data.CDMS_temp_max=quant_data.CDMS_temp_quant;
00200     } else {
00201         for (int i = 0; i < 16; ++i) {
00202             min_max_data.temp_min[i] = saveMin(min_max_data.temp_min[i],quant_data.temp_quant[i]);
00203             min_max_data.temp_max[i] = saveMax(min_max_data.temp_max[i],quant_data.temp_quant[i]);
00204         }
00205 
00206         min_max_data.CDMS_temp_min = saveMin(min_max_data.CDMS_temp_min,quant_data.CDMS_temp_quant);
00207         min_max_data.CDMS_temp_max = saveMax(min_max_data.CDMS_temp_max,quant_data.CDMS_temp_quant);
00208     }
00209     firstCount=false;
00210 }
00211 
00212 void FCTN_CDMS_HK()
00213 {
00214 
00215     int Iteration=0;
00216 
00217     SelectLinec0=0;
00218     SelectLinec1=0;
00219     SelectLinec2=0;
00220     SelectLinec3=0;
00221 
00222     for(Iteration=0; Iteration<16; Iteration++) {
00223 
00224         actual_data.temp_actual[Iteration]=TempInput.read();
00225 
00226         SelectLinec0=!(SelectLinec0);
00227         if(Iteration%2==1)
00228             SelectLinec1=!(SelectLinec1);
00229         if(Iteration%4==3)
00230             SelectLinec2=!(SelectLinec2);
00231         if(Iteration%8==7)
00232             SelectLinec3=!(SelectLinec3);
00233     }
00234 
00235     actual_data.CDMS_temp_actual=(-90.7*3.3*CDMS_temp_sensor.read())+190.1543;
00236 
00237     for(Iteration=0; Iteration<16; Iteration++) {
00238 
00239         if(Iteration<14) {
00240 
00241             actual_data.temp_actual[Iteration]=actual_data.temp_actual[Iteration]*3.3;
00242             int resistance;
00243 
00244             resistance=24000*actual_data.temp_actual[Iteration]/(3.3-actual_data.temp_actual[Iteration]);
00245             if(actual_data.temp_actual[Iteration]>1.47) {
00246                 actual_data.temp_actual[Iteration]=3694/log(24.032242*resistance);
00247             } else {
00248 
00249                 actual_data.temp_actual[Iteration]=3365.4/log(7.60573*resistance);
00250             }
00251         } else
00252             actual_data.temp_actual[Iteration]=(-90.7*3.3*actual_data.temp_actual[Iteration])+190.1543;
00253     }
00254 
00255     for(Iteration=0; Iteration<16; Iteration++) {
00256 
00257         if(Iteration<14) {
00258 
00259             quant_data.temp_quant[Iteration]=quantiz(tstart_thermistor,tstep_thermistor,actual_data.temp_actual[Iteration]);
00260         } else
00261             quant_data.temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.temp_actual[Iteration]);
00262     }
00263 
00264     quant_data.CDMS_temp_quant=quantiz(tstart,tstep,actual_data.CDMS_temp_actual);
00265 
00266     minMaxHkData();
00267 }
00268 
00269 void FUNC_CDMS_GPIO_STATUS()       //Polls the status of Input GPIO PINS
00270 {
00271     //V_A_PGOOD //TRZ EN
00272     GPIO_STATUS=(V_A_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<15)):(GPIO_STATUS)&(~((uint16_t)(0x1<<15)));
00273     //V_B_PGOOD_1 //3V3BPGOOD //$
00274     GPIO_STATUS=(V_B_PGOOD_1)?(GPIO_STATUS)||((uint16_t)(0x1<<14)):(GPIO_STATUS)&(~((uint16_t)(0x1<<14)));
00275     //V_B_PGOOD_2 //3V3BEN //$
00276     GPIO_STATUS=(V_B_PGOOD_2)?(GPIO_STATUS)||((uint16_t)(0x1<<13)):(GPIO_STATUS)&(~((uint16_t)(0x1<<13)));
00277     //V_C_PGOOD //3V3CPGOOD //$
00278     GPIO_STATUS=(V_C_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<12)):(GPIO_STATUS)&(~((uint16_t)(0x1<<12)));
00279     //COMRX_OC_FAULT //$
00280     GPIO_STATUS=(COMRX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<11)):(GPIO_STATUS)&(~((uint16_t)(0x1<<11)));
00281     // COMTX_OC_FAULT //$
00282     GPIO_STATUS=(COMTX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<10)):(GPIO_STATUS)&(~((uint16_t)(0x1<<10)));
00283     //BAE_OC_FAULT //$
00284     GPIO_STATUS=(BAE_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<9)):(GPIO_STATUS)&(~((uint16_t)(0x1<<9)));
00285     //PL_GPIO_1_STATUS //$
00286     GPIO_STATUS=(PL_GPIO_1_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8)));
00287     //PL_GPIO_2_STATUS //$
00288     GPIO_STATUS=(PL_GPIO_2_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<7)):(GPIO_STATUS)&(~((uint16_t)(0x1<<7)));
00289     //PL_GPIO_3_STATUS //$
00290     GPIO_STATUS=(PL_GPIO_3_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<6)):(GPIO_STATUS)&(~((uint16_t)(0x1<<6)));
00291     //PL_BEE_SW_OC_FAULT //to be verified
00292     GPIO_STATUS=(PL_BEE_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<5)):(GPIO_STATUS)&(~((uint16_t)(0x1<<5)));
00293     //PL_EPS_LATCH_SW_OC_FAULT // to be verified
00294     GPIO_STATUS=(PL_EPS_LATCH_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<4)):(GPIO_STATUS)&(~((uint16_t)(0x1<<4)));
00295     //EPS_V_C_EN_STATUS
00296     GPIO_STATUS=(EPS_V_C_EN_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<3)):(GPIO_STATUS)&(~((uint16_t)(0x1<<3)));
00297     //EPS_V_D_EN_STATUS
00298     GPIO_STATUS=(EPS_V_D_EN_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<2)):(GPIO_STATUS)&(~((uint16_t)(0x1<<2)));
00299     
00300 }
00301 
00302 void VERIFY_COMRX()
00303 {
00304     //COMRX_OC_FAULT //$
00305     if(PIN68==0 && RSSI_volatge > 0.4) {
00306         COMRX_STATUS = COMRX_ALIVE;
00307     } else {
00308         RESET_COMRX();
00309         COMRX_RESET_COUNTER++;
00310         if(PIN68==0 && RSSI_volatge > 0.4)
00311             COMRX_STATUS = COMRX_ALIVE;
00312         else
00313             COMRX_STATUS = COMRX_DEAD;
00314     }
00315 }
00316 
00317 void VERIFY_RTC()
00318 {
00319     if(RTC_STATUS == 0x00) {
00320         if(RTC_FAULTCOUNT == 3)
00321         return;
00322         SPI_mutex.lock();
00323         gCS_RTC=1;
00324         gCS_RTC=0;
00325         spi.write(0x0F);
00326         if(spi.write(0x00) & 0x04 == 0x04) {
00327             RTC_STATUS = 0x00;
00328             RESET_RTC();
00329             RTC_FAULTCOUNT++;
00330         }
00331         gCS_RTC=1;
00332         SPI_mutex.unlock();
00333     }
00334 }
00335 
00336 void HANDLE_HW_FAULTS()
00337 {
00338     HANDLE_HW_FAULT_SD();
00339     HANDLE_HW_FAULT_BAE();
00340     HANDLE_HW_FAULT_PL();
00341 }
00342 
00343 void HANDLE_HW_FAULT_SD()
00344 {
00345     if(SD_STATUS != DEVICE_DISABLED) {
00346         if(SD_STATUS == DEVICE_OC_FAULT)
00347             SD_SW_EN_DS = 0; //powering on SD
00348 
00349         if(SD_OC_FAULT == 0) {
00350             SD_SW_EN_DS = 1; //switching off SD card
00351 
00352             SD_FAULTCOUNT++;
00353             SD_STATUS = (SD_FAULTCOUNT == 3) ? DEVICE_DISABLED :DEVICE_OC_FAULT;
00354         } else {
00355             SD_STATUS = DEVICE_POWERED;
00356             SD_FAULTCOUNT = 0;
00357         }
00358     }
00359 }
00360 
00361 void HANDLE_HW_FAULT_BAE()
00362 {
00363     if(BAE_STATUS != DEVICE_DISABLED) {
00364         if(BAE_STATUS == DEVICE_OC_FAULT)
00365             BAE_SW_EN_DS = 0; //Power ON BAE
00366 
00367         if(BAE_OC_FAULT == 0) { // If OC Fault
00368             BAE_SW_EN_DS = 1; //Switch OFF BAE
00369             BAE_FAULTCOUNT++;
00370             BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
00371         } else {
00372             BAE_STATUS = DEVICE_POWERED;
00373             BAE_FAULTCOUNT = 0;
00374         }
00375     }
00376 }
00377 
00378 void HANDLE_HW_FAULT_PL()
00379 {
00380     if(PL_STATUS != DEVICE_DISABLED) {
00381         if(PL_STATUS == DEVICE_OC_FAULT){
00382             PYLD_DFF_CLK = 0;
00383             PYLD_DFF = 1;           // Switching ON PL
00384             wait_us(1);
00385             PYLD_DFF_CLK = 1;
00386             wait_us(1);
00387             PYLD_DFF_CLK = 0;
00388             wait_us(1);         
00389         }
00390         if(PL_BEE_SW_OC_FAULT == 0) { // if OC Fault
00391             PYLD_DFF_CLK = 0;     
00392             PYLD_DFF = 0;             //Switching OFF PL
00393             wait_us(1);
00394             PYLD_DFF_CLK = 1;
00395             wait_us(1);
00396             PYLD_DFF_CLK = 0;
00397             wait_us(1);
00398             PL_FAULTCOUNT++;
00399             PL_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
00400         } else {
00401             if(PL_STATUS == DEVICE_OC_FAULT){
00402                 PYLD_DFF_CLK = 0;     
00403                 PYLD_DFF = 0;             //Switching OFF PL
00404                 wait_us(1);
00405                 PYLD_DFF_CLK = 1;
00406                 wait_us(1);
00407                 PYLD_DFF_CLK = 0;
00408                 wait_us(1);
00409             }
00410             PL_STATUS = DEVICE_ENABLED;
00411             PL_FAULTCOUNT = 0;
00412         }
00413     }
00414 }
00415 
00416 void COLLECT_CDMS_RAM()
00417 {
00418     CDMS_RAM[0] = ((PL_INIT_STATUS<<7)&0x80)|((PL_MAIN_STATUS<<6)&0x40)|((PL_LOW_POWER<<5)&0x20)|((PL_STATE<<3)&0x18)|(PL_STATUS&0x07);
00419     CDMS_RAM[1] = ((PL_RCV_SC_DATA_STATUS<<7)&0x80)|((COM_SESSION<<6)&0x40)|((COM_RX<<5)&0x20)|((RF_SW_STATUS<<4)&0x10)|((COM_TX<<3)&0x08)|((COM_TX_STATUS<<2)&0x04)|((COM_MNG_TMTC<<1)&0x02)|(EN_CDMS_HK&0x01);
00420     CDMS_RAM[2] = ((EN_PL<<7)&0x80)|((EN_RCV_SC<<6)&0x40)|((CDMS_INIT_STATUS<<5)&0x20)|((CDMS_HK_MAIN_STATUS<<4)&0x10)|((CDMS_HK_STATUS<<2)&0x0C)|((COM_RX_STATUS<<1)&0x02)|(CDMS_RTC_BL&0x01);
00421     CDMS_RAM[3] = CDMS_I2C_ERR_SPEED_COUNTER >> 8;
00422     CDMS_RAM[4] = CDMS_I2C_ERR_SPEED_COUNTER;
00423     CDMS_RAM[5] = CDMS_I2C_ERR_BAE_COUNTER >> 8;
00424     CDMS_RAM[6] = CDMS_I2C_ERR_BAE_COUNTER;
00425     CDMS_RAM[7] = CDMS_HK_MAIN_COUNTER >> 8;
00426     CDMS_RAM[8] = CDMS_HK_MAIN_COUNTER;
00427     CDMS_RAM[9] = PL_MAIN_COUNTER >> 8;
00428     CDMS_RAM[10] = PL_MAIN_COUNTER;
00429     CDMS_RAM[11] = PL_RCV_SC_DATA_COUNTER >> 8;
00430     CDMS_RAM[12] = PL_RCV_SC_DATA_COUNTER;
00431     CDMS_RAM[13] = COMRX_RESET_COUNTER >> 8;
00432     CDMS_RAM[14] = COMRX_RESET_COUNTER;
00433     CDMS_RAM[15] = CDMS_WR_SD_FAULT_COUNTER >> 8;
00434     CDMS_RAM[16] = CDMS_WR_SD_FAULT_COUNTER;
00435     CDMS_RAM[17] = SD_LIB_WRITES >> 8;
00436     CDMS_RAM[18] = SD_LIB_WRITES;
00437     for(int i = 0; i<4; i++)
00438         CDMS_RAM[19+i] = TIME_LATEST_RTC >> i*8;
00439     for(int i = 0; i<4; i++)
00440         CDMS_RAM[23+i] = TIME_LATEST_I2C_BAE >> i*8;
00441     for(int i = 0; i<4; i++)
00442         CDMS_RAM[27+i] = TIME_LATEST_I2C_SPEED >> i*8;
00443     for(int i = 0; i<4; i++)
00444         CDMS_RAM[31+i] = TIME_LATEST_SD_WR >> i*8;
00445     for(int i = 0; i<4; i++)
00446         CDMS_RAM[35+i] = TIME_LATEST_SD_RD >> i*8;
00447     for(int i = 0; i<4; i++)
00448         CDMS_RAM[39+i] = TIME_LATEST_SPI_SPEED >> i*8;
00449     for(int i = 0; i<4; i++)
00450         CDMS_RAM[43+i] = FSC_CURRENT[1] >> i*8;
00451     for(int i = 0; i<4; i++)
00452         CDMS_RAM[47+i] = FSC_LAST[1] >> i*8;
00453     for(int i = 0; i<4; i++)
00454         CDMS_RAM[51+i] = FSC_CURRENT[2] >> i*8;
00455     for(int i = 0; i<4; i++)
00456         CDMS_RAM[55+i] = FSC_LAST[2] >> i*8;
00457     for(int i = 0; i<4; i++)
00458         CDMS_RAM[59+i] = FSC_CURRENT[3] >> i*8;
00459     for(int i = 0; i<4; i++)
00460         CDMS_RAM[63+i] = FSC_LAST[3] >> i*8;
00461     for(int i = 0; i<4; i++)
00462         CDMS_RAM[67+i] = FSC_CURRENT[4] >> i*8;
00463     for(int i = 0; i<4; i++)
00464         CDMS_RAM[71+i] = FSC_LAST[4] >> i*8;
00465     for(int i = 0; i<4; i++)
00466         CDMS_RAM[75+i] = FSC_CURRENT[5] >> i*8;
00467     for(int i = 0; i<4; i++)
00468         CDMS_RAM[79+i] = FSC_LAST[5] >> i*8;
00469     CDMS_RAM[83] = 0x00;
00470 }