void Schedule_Init(void) { Flash_Init(CLOCK_FREQ_MHZ); ScheduleRegistry = (unsigned long *) SCHEDULE_REGISTRY_ADDR; ScheduleRegistrySize = 0; // look for current schedule (if one exists!) while((ScheduleRegistry[ScheduleRegistrySize] != EMPTY_SCHEDULE_ENTRY) && (ScheduleRegistrySize < 256)) { ScheduleRegistrySize++; } // check if first time loading a schedule if((ScheduleRegistrySize % SCHEDULE_REGISTRY_SIZE) == 0) { Flash_Erase(SCHEDULE_REGISTRY_ADDR); Flash_Erase(SCHEDULE_BUFFER_A_ADDR); Flash_Write(SCHEDULE_REGISTRY_ADDR, SCHEDULE_BUFFER_A_ADDR); Schedule = (schedule_entry_t *) SCHEDULE_BUFFER_A_ADDR; TempSchedule = (schedule_entry_t *) SCHEDULE_BUFFER_B_ADDR; ScheduleSize = 0; TempScheduleSize = 0; ScheduleRegistrySize = 1; } else { Schedule = (schedule_entry_t *) ScheduleRegistry[ScheduleRegistrySize-1]; ScheduleSize = TempScheduleSize; TempScheduleSize = 0; if(Schedule == (schedule_entry_t *) SCHEDULE_BUFFER_A_ADDR) { TempSchedule = (schedule_entry_t *) SCHEDULE_BUFFER_B_ADDR; } else { TempSchedule = (schedule_entry_t *) SCHEDULE_BUFFER_A_ADDR; } } }
void If_WriteFirmware(void) { Flash_Init(); if (1) { UINT32 ReadAddrOffset, AddrBase, DataSize, i; PBYTE pOriginalData; UINT32 usLength; if (1) { // Write data to flash AddrBase = WIFI_FW_HELPER_ADDR; Flash_Write (AddrBase, (UINT8*)helperimage, sizeof (helperimage)); // Read back data for checking... ReadAddrOffset = 0; pOriginalData = (PBYTE)helperimage; DataSize = sizeof (helperimage); while (ReadAddrOffset < DataSize) { if (ReadAddrOffset + FLASH_PAGE_SIZE < DataSize) usLength = FLASH_PAGE_SIZE; else usLength = DataSize - ReadAddrOffset; Flash_Read(AddrBase + ReadAddrOffset, ucBuffer, usLength); for (i = 0; i < usLength; i ++) { if (ucBuffer[i] != pOriginalData[ReadAddrOffset + i]) break; } if (i != usLength) TRACE("Data Verify failed1!\r\n"); ReadAddrOffset += usLength; } } if (1) { // Write data to flash AddrBase = WIFI_FW_FW_ADDR; Flash_Write (AddrBase, (UINT8*)fmimage, sizeof (fmimage)); // Read back data for checking... ReadAddrOffset = 0; pOriginalData = (PBYTE)fmimage; DataSize = sizeof (fmimage); while (ReadAddrOffset < DataSize) { if (ReadAddrOffset + FLASH_PAGE_SIZE < DataSize) usLength = FLASH_PAGE_SIZE; else usLength = DataSize - ReadAddrOffset; Flash_Read(AddrBase + ReadAddrOffset, ucBuffer, usLength); for (i = 0; i < usLength; i ++) { if (ucBuffer[i] != pOriginalData[ReadAddrOffset + i]) break; } if (i != usLength) TRACE("Data Verify failed1!2\r\n"); ReadAddrOffset += usLength; } } } while (1); }
void Fls_Init(const Fls_ConfigType *ConfigPtr) { /** @req SWS_Fls_00014 */ /** @req SWS_Fls_00086 */ /** @req SWS_Fls_00015 */ /** !req SWS_Fls_00048 */ /** !req SWS_Fls_00325 */ /** !req SWS_Fls_00326 */ /** @req SWS_Fls_00268 */ VALIDATE_NO_RV(Fls_Global.status!=MEMIF_BUSY,FLS_INIT_ID, FLS_E_BUSY ); VALIDATE_NO_RV((ConfigPtr != NULL), FLS_INIT_ID, FLS_E_PARAM_CONFIG); VALIDATE_NO_RV(ConfigPtr->FlsMaxReadFastMode != 0, FLS_INIT_ID, FLS_E_PARAM_CONFIG); VALIDATE_NO_RV(ConfigPtr->FlsMaxReadNormalMode != 0, FLS_INIT_ID, FLS_E_PARAM_CONFIG); VALIDATE_NO_RV(ConfigPtr->FlsMaxWriteFastMode != 0, FLS_INIT_ID, FLS_E_PARAM_CONFIG); VALIDATE_NO_RV(ConfigPtr->FlsMaxWriteNormalMode != 0, FLS_INIT_ID, FLS_E_PARAM_CONFIG); Fls_Global.status = MEMIF_UNINIT; Fls_Global.jobResultType = MEMIF_JOB_PENDING; /** @req SWS_Fls_00191 */ Fls_Global.config = ConfigPtr; Flash_Init(); /** @req SWS_Fls_00323 */ /** @req SWS_Fls_00324 */ Fls_Global.status = MEMIF_IDLE; Fls_Global.jobResultType = MEMIF_JOB_OK; return; }
void Fls_Init(const Fls_ConfigType *ConfigPtr) { /** @req FLS249 3.0 */ /** @req FLS191 3.0 */ /** @req FLS014 3.0 */ /** @req FLS086 3.0 */ /** @req FLS015 3.0 */ /** !req FLS048 TODO, true? */ /** !req FLS271 NO_SUPPORT 3.0 */ /** !req FLS325 NO_SUPPORT 4.0 */ /** !req FLS326 NO_SUPPORT 4.0 */ /** @req FLS268 */ VALIDATE_NO_RV(Fls_Global.status!=MEMIF_BUSY,FLS_INIT_ID, FLS_E_BUSY ); VALIDATE_CONFIG(ConfigPtr->FlsMaxReadFastMode != 0 ); VALIDATE_CONFIG(ConfigPtr->FlsMaxReadNormalMode != 0 ); VALIDATE_CONFIG(ConfigPtr->FlsMaxWriteFastMode != 0 ); VALIDATE_CONFIG(ConfigPtr->FlsMaxWriteNormalMode != 0 ); Fls_Global.status = MEMIF_UNINIT; Fls_Global.jobResultType = MEMIF_JOB_PENDING; // TODO: FLS_E_PARAM_CONFIG /** @req FLS191 */ Fls_Global.config = ConfigPtr; Flash_Init(); /** @req FLS016 3.0 *//** @req FLS323 4.0 *//** @req FLS324 4.0*/ Fls_Global.status = MEMIF_IDLE; Fls_Global.jobResultType = MEMIF_JOB_OK; return; }
/** * @brief Init function * @param None * @retval None */ void Init(void) { Blu_Led_Pwm(); uart_init(); rtc_init(); Flash_Init(); Tem_Rh_Gpio_Init(); //Flash_Test(); queue_init(); }
/****************************************************************************************************** * 名 称:Write_InfoFlashB() * 功 能:将打包好的InfoFlash_Data[]数组,依次写入InfoFlashB段 * 入口参数:无 * 出口参数:无 * 说 明:确保所有CCS工程的Erase Options改为选择“Erase main memory only”, * 只有这样存在InfoFlashB的校验参数才不会因为烧录程序而丢失。 * 范 例:无 ******************************************************************************************************/ void Write_InfoFlashB() //步骤6:将校验数组写入InfoFlahB段 { unsigned char i=0; //-----写Flash前DCO时钟一定要重新确认一遍----- BCSCTL1 = CALBC1_1MHZ; /* Set DCO to 8MHz */ DCOCTL = CALDCO_1MHZ; Flash_Init(3,'B'); // 初始化Flash Flash_Erase(); // 擦除Info_B //-----把InfoFlash_Data[CAL_NUM]存入InfoFlashB----- for(i=0;i<CAL_NUM;i++) Flash_Direct_WriteWord(i*2,InfoFlash_Data[i]); //不擦直接写 }
/*! * @brief Initialisation thread. runs once. */ void InitThread(void *data) { for (;;) { OS_SemaphoreWait(InitSemaphore, 0); Random_Init(); //Switches mate Switch_Init(S1Callback, (void *) 0, S2Callback, (void *) 0); Toggle_Init(ToggleModeFinished); Game_Init(GameModeFinished); Touch_Init(); //Initialize all the modules LEDs_Init(); I2C_Init(100000, MODULE_CLOCK); Accel_Init(&AccelSetup); PIT_Init(MODULE_CLOCK, &PitCallback, (void *) 0); PIT_Set(500000000, bFALSE); PIT_Enable(bTRUE); Packet_Init(BAUD_RATE, MODULE_CLOCK); Flash_Init(); CMD_Init(); //Best to do this one last //TODO: disabled for yellow RTC_Init((void (*)(void*))OS_SemaphoreSignal, (void *) RtcSemaphore); Timer_Init(); Timer_Set(&PacketTimer); Timer_Set(&AccTimer); CMD_SpecialGetStartupValues(); LEDs_On(LED_ORANGE); } }
uint_8 erase_flash(void) { /* Body */ uint_8 error = FALSE; uint_8 i; Flash_Init(59); DisableInterrupts; for (i=0;i<(MAX_FLASH1_ADDRESS -(uint_32) IMAGE_ADDR)/ERASE_SECTOR_SIZE;i++) { #if (!defined __MK_xxx_H__) error = Flash_SectorErase((uint_32*)((uint_32) IMAGE_ADDR + ERASE_SECTOR_SIZE*i)) ; /* ERASE 4k flash memory */ #else error = Flash_SectorErase((uint_32) IMAGE_ADDR + ERASE_SECTOR_SIZE*i) ; /* ERASE 4k flash memory */ #endif if(error != Flash_OK) { break; } /* Endif */ } /* Endfor */ EnableInterrupts; return error; } /* EndBody */
void main(void) { static char code[6]; CPU_Init(); Flash_Init(); GPRS_Init(); LCD_Init(); Clr_LCDRam(); LCD_LIGHT_ON; Dis_Logo(); //#define FLASH_DEBUG #ifdef FLASH_DEBUG while (1) { char checknum[32]; INT16U cnt, offset; RECORD_HEAD_T head; RECORD_ITEM_T item; Format_AllHistoryRecord(); for (cnt = 0; cnt < MAX_ALARM_NUM; cnt++) { FlashMemoryToBufferTransfer(cnt, FLASHBUFFER1); memset(&head, 0, sizeof(RECORD_HEAD_T)); offset = OFFSET_OF(RECORD_T, info); FlashReadBuffer(offset, &head, sizeof(RECORD_HEAD_T), FLASHBUFFER1); } memset(&head, 0, sizeof(RECORD_HEAD_T)); sprintf(head.mn, "98765432101234"); Format_HistoryRecord(0, &head); FlashMemoryToBufferTransfer(0, FLASHBUFFER1); memset(&head, 0, sizeof(RECORD_HEAD_T)); offset = OFFSET_OF(RECORD_T, info); FlashReadBuffer(offset, &head, sizeof(RECORD_HEAD_T), FLASHBUFFER1); memset(&item, 0, sizeof(RECORD_ITEM_T)); sprintf(item.datetime, "12345678901234"); item.inuse = 1; item.status = 'O'; Add_HisRecordItem(&item, 0); FlashMemoryToBufferTransfer(0, FLASHBUFFER1); memset(&head, 0, sizeof(RECORD_HEAD_T)); offset = OFFSET_OF(RECORD_T, info); FlashReadBuffer(offset, &head, sizeof(RECORD_HEAD_T), FLASHBUFFER1); Fetch_HisRecord(0); memset(&item, 0, sizeof(RECORD_ITEM_T)); Get_HisRecordItemsBackward(&item, 1); FlashWriteBuffer(0, "asdfghjklqwertyuiop", 32, FLASHBUFFER1); memset(checknum, 0, sizeof(checknum)); FlashReadBuffer(0, checknum, 32, FLASHBUFFER1); FlashBufferToMemoryWithErase(0, FLASHBUFFER1); memset(checknum, 0, sizeof(checknum)); FlashReadBuffer(0, checknum, 32, FLASHBUFFER1); FlashMemoryToBufferTransfer(0, FLASHBUFFER1); memset(checknum, 0, sizeof(checknum)); FlashReadBuffer(0, checknum, 32, FLASHBUFFER1); FlashReadMemoryContinus(0, 0, checknum, 32); memset(checknum, 0, sizeof(checknum)); FlashReadBuffer(0, checknum, 32, FLASHBUFFER1); //FlashMemoryErasePage(0, 1); FlashClearMemory(0, 0, 32); memset(checknum, 0, sizeof(checknum)); FlashReadBuffer(0, checknum, 8, FLASHBUFFER1); FlashWriteMemoryThroughBuffer(0, 0, "ABCDEFGHIJKLMNOP", 8, FLASHBUFFER1); memset(checknum, 0, sizeof(checknum)); FlashReadBuffer(0, checknum, 8, FLASHBUFFER1); } #endif Read_VersionCode(code); if (memcmp(code, VersionCode, 6) == 0) { Read_SysParam(&Sys_Param); Read_ADParam(Ad_Param); Read_ComParam(&Com_Param); Read_AlarmParam(Alarm_Param); } else { Default_SysParam(&Sys_Param); Default_ADParam(Ad_Param); Default_ComParam(&Com_Param); Default_AlarmParam(Alarm_Param); Save_SysParam(&Sys_Param); Save_ADParam(Ad_Param); Save_ComParam(&Com_Param); Save_AlarmParam(Alarm_Param); Save_VersionCode((char *) VersionCode); Format_AllHistoryRecord(); } Read_ADCalibParam(&Ad_CalibParam); Fix_ADCalibParam(&Ad_CalibParam); ADParam_Calculate(); v_Get1302(System_TimeStr, &Current_Tm); strcpy((char *) System_StartTimeStr, (char *) System_TimeStr); Dis_Welcome(1); IS752_Init(9600, COM2); IS752_Init(9600, COM3); IS752_Init(9600, COM4); IS752_Init(9600, COM5); Modbus_Init(); ModbusIO_Init(); InitHjt212(); ENABLEINT(); while (1) { SoftWDT_Flag = 0; ProcRunLED(); ProcAlarm(); ProcRTC(); ProcDIO(); //ProcADC(); ProcessModbusSlave(); //ProcessModbus(); //ProcessModbusIO(); //ProcData(); ProcDisplay(); ProcessHjt212(); } }
_Bool Flash_Read(uint8_t addr, uint32_t* dist) { if (addr < USED_SIZE / 4) { if (ReadRequed) { uint8_t i; uint32_t CRC = USED_SIZE; Block_Read(NEW_BLOCK_ADDR); for (i = 0; i < USED_SIZE / 4; i++) { CRC ^= Using_Values[i]; } if (CRC == FMC_Read(NEW_BLOCK_ADDR + USED_SIZE)) { *dist = FMC_Read(NEW_BLOCK_ADDR + addr * 4); /*if (*dist == 0xffff) { return FALSE; }*/ ReadRequed = FALSE; return TRUE; } else { FMC_Erase(NEW_BLOCK_ADDR); Flash_Init(); DPRINTF(("Area 1 error! \n")); } Block_Read(BAK_BLOCK_ADDR); for (i = 0; i < USED_SIZE / 4; i++) { CRC ^= Using_Values[i]; } if (CRC == FMC_Read(BAK_BLOCK_ADDR + USED_SIZE)) { Block_Clear(NEW_BLOCK_ADDR); for (i = 0; i < USED_SIZE / 4; i++) { FMC_Write(NEW_BLOCK_ADDR + i * 4, Using_Values[i]); } FMC_Write(NEW_BLOCK_ADDR + USED_SIZE, CRC); *dist = FMC_Read(BAK_BLOCK_ADDR + addr * 4); /*if (*dist == 0xffff) { return FALSE; }*/ ReadRequed = FALSE; return TRUE; } else { FMC_Erase(BAK_BLOCK_ADDR); Flash_Init(); DPRINTF(("Area 2 CRC error! \n")); } } else { *dist = Using_Values[addr]; return TRUE; } } else { DPRINTF(("Err: Addr: %d overrange!\n", addr)); } return FALSE; }
int main(void){ uint8_t sample[10] = "sneeches!"; uint8_t *familytype; uint8_t *identification; uint8_t *read_bytes; const uint8_t str_size = strlen(sample); uint8_t mod_value = str_size % 4; uint8_t buf[8] = {0}; uint8_t addrs, index, byte1, byte2, byte3, byte4; uint8_t rfid_address = 3; uint8_t flash_start_addr = 0x0b; int count; /* INITs & SET UP CALCULATIONS */ if(!(UART1_Init())){ UART1_Print("\nUART 1 Initialized\n"); UART1_Print(itoa(str_size, buf, 10)); UART1_Print(" "); UART1_Print(itoa(mod_value, buf, 10)); UART1_Print(" "); UART1_Print(itoa(str_size/4, buf, 10)); UART1_Print(" "); } if(!(UART2_Init())){ UART1_Print("\nUART 2 Initialized\n"); } if(!(Flash_Init())){ UART1_Print("\nFlash Memory Inititalized"); UART1_Print("Flash memory ID: "); UART1_Print(itoa(Flashmem_ID(), buf, 16)); UART1_Print("\r\n"); }else{ UART1_Print("\nProblem initializing flash..."); } if(str_size % 4 != 0){ addrs = ((str_size/4) + 1); UART1_Print("Addrs:"); UART1_Print(itoa(addrs, buf, 10)); UART1_Print("\n"); } else{ addrs = str_size/4; UART1_Print("Addrs:"); UART1_Print(itoa(addrs, buf, 10)); UART1_Print("\n"); } rfid_address = 9; while(1){ UART1_Print("\r\n#### START ####"); /* GET FAMILY TYPE */ UART1_Print("\r\nRFID Tag Family Is Type:"); familytype = Read_Family_RFID(); //for(index = 0; index < strlen(familytype); index++){ for(index = 0; index < 3; index++){ UART1_Print(itoa(*(familytype+index), buf, 16)); } UART1_Flush(); /* GET SERIAL NUMBER */ UART1_Print("\r\nRFID Tag Serial #:"); identification = Read_Serial_RFID(); for(index = 0; index < strlen(identification); index++){ UART1_Print(itoa(*(identification+index), buf, 16)); } UART1_Flush(); /* WRITE STRING */ Write_RFID(rfid_address, sample[0], sample[1], sample[2], sample[3]); _delay_ms(5); /* READ ADDRESS */ UART1_Print("\r\nReading RFID address "); UART1_Print(itoa(rfid_address, buf, 10)); UART1_Print("..."); read_bytes = Read_RFID(rfid_address); for(index = 0; index < strlen(read_bytes); index++){ UART1_Print(itoa(*(read_bytes+index), buf, 16)); } read_bytes = Read_RFID(rfid_address); //for(index = 0; index < strlen(read_bytes); index++){ // UART1_Print(itoa(*(read_bytes+index), buf, 16)); //} UART1_Flush(); /* STORING IDENTIFICATION */ UART1_Print("\r\nWriting to flash... "); UART1_Flush(); _delay_ms(1); //Flash_Test_Write(); Flash_Byte_Write(&identification[0], flash_start_addr); UART1_Flush(); UART1_Print("\r\nReading flash...: "); UART1_Flush(); _delay_ms(1); Flash_Read_Bytes(10, flash_start_addr,0x00,0x00); _delay_ms(1); UART1_Print("\r\n#### DONE ####\r\n"); /* CLEAN UP */ Reset_Tag(); _delay_ms(5); UART1_Flush(); free(read_bytes); free(familytype); free(identification); } return 0; }