FM
Dependencies: SimpleDMA eeprom mbed-rtos mbed FreescaleIAP
Fork of CDMS_CODE by
Diff: Flash.h
- Revision:
- 354:0da912441c7b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Flash.h Sat Mar 11 04:46:31 2017 +0000 @@ -0,0 +1,113 @@ +#include "FreescaleIAP.h" + +int strt_add_thres = flash_size() - (11*SECTOR_SIZE); +uint32_t flasharray_thres[32] = {0}; + +void FCTN_CDMS_WR_FLASH(uint16_t , uint32_t); +int strt_add = flash_size() - (2*SECTOR_SIZE); +uint32_t flasharray[32]; //256+(3*1024) +uint32_t INITIAL_FLASH[32]; + +/*corrected*/ +int *nativeflash = (int*)strt_add; + +void FLASH_INI() +{ + INITIAL_FLASH[16] = 80000; + uint32_t read[32]; + for(int i=0;i<32;i++) + { + read[i] = nativeflash[i]; + } + + if(read[0] == -1) + { + for(int j=0;j<32;j++) + { + FCTN_CDMS_WR_FLASH(j,INITIAL_FLASH[j]); + } + } + else + { + for(int j=0;j<32;j++) + { + read[j] = nativeflash[j]; + } + } + EPS_V_A_EN_STATUS = read[0]; + BAE_STATUS = read[1]; + SD_STATUS = read[2]; + PL_STATUS = read[3]; + PL_EPS_LATCH_SW_EN = read[4]; + RTC_INIT_STATUS = read[5]; + CDMS_RTC_DISABLE = read[6]; + CDMS_RESET_COUNTER = read[7]; + TIME_LATEST_CDSMS_RESET = read[8]; + COM_TC_BYTES_LIMIT = read[9]; + COM_RX_CURRENT_MAX = read[10]; + COM_RX_DISABLE_TIMEOUT = read[11]; + COM_PA_TMP_HIGH = read[12]; + COM_PA_RECOVERY_TIMEOUT = read[13]; + COM_SESSION_TIMEOUT = read[14]; + COM_RSSI_MIN = read[15]; + SD_LIB_BLK_CURRENT = read[16]; + CDMS_RESET_COUNTER = read[17]; +} + +/*Writing to the Flash*/ +void FCTN_CDMS_WR_FLASH(uint16_t j,uint32_t datablock) //j-position to write address ; fdata - flash data to be written +{ + for(int i=0;i<17;i++) + { + flasharray[i]=nativeflash[i]; + } + flasharray[j]=datablock; + erase_sector(strt_add); + program_flash(strt_add, (char*)flasharray,32); +} +/*End*/ + +/*===================================================MMS Functions=================================================*/ + +void FCTN_CDMS_WR_S_FLASH(uint16_t mid,uint32_t datablock); + +void FCTN_CDMS_WR_S_FLASH(uint16_t mid,uint32_t datablock) +{ + if(mid == 0x0100) + { + FCTN_CDMS_WR_FLASH(11,(datablock>>16) & 0x000000FF); + FCTN_CDMS_WR_FLASH(13,(datablock>>8) & 0x000000FF); + FCTN_CDMS_WR_FLASH(14,datablock & 0x000000FF); + } + else if(mid == 0x0101) + { + FCTN_CDMS_WR_FLASH(12,(datablock>>16) & 0x000000FF); + FCTN_CDMS_WR_FLASH(10,(datablock>>8) & 0x000000FF); + FCTN_CDMS_WR_FLASH(15,datablock & 0x000000FF); + } + else if(mid == 0x0102) + { + FCTN_CDMS_WR_FLASH(9,datablock & 0x0000FFFF); + } + else if(mid == 0x0103) + { + FCTN_CDMS_WR_FLASH(6,datablock & 0x00000001); + } +} + +int verify_flash_sector(int mid,uint32_t* flasharray_thres) +{ + int add = strt_add_thres + ((mid-1)*SECTOR_SIZE); + int result = 0; + int* testflash = (int*)add; + for(int i=0;i<32;i++) + { + if(testflash[i] == flasharray_thres[i]) + continue; + else + { + return 1; + } + } + return 0; +} \ No newline at end of file