#include "flash.h" #include "gd32e23x.h" #include "string.h" void flash_erase_meta() { fmc_unlock(); fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR); fmc_page_erase(META_DATA); fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR); fmc_lock(); } void flash_write_meta(const META_DATA_S *meta_data) { fmc_unlock(); uint32_t address = META_DATA; uint32_t *data = (uint32_t*)(meta_data); uint32_t data0 = 0; for(int i = 0; i < sizeof(META_DATA_S);i++) { data0 = *data; fmc_word_program(address,data0); data ++; fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR); address +=4; } fmc_lock(); } void flash_get_meta_data(META_DATA_S *meta) { meta->operation_flag = *(uint32_t*)(UPGRADE_FLAG_ADDR); meta->partition = *(uint32_t*)(STARTUP_PARTATION); meta->errno = *(uint32_t*)(STARTUP_ERROR); meta->error_count = *(uint32_t*)(STARTUP_NUMBEAR); meta->rom_addr = *(uint32_t*)(STARTUP_ROM_ADDR); meta->recent_running_time = *(uint32_t*)(STARTUP_LAST_RUNNING_TIME); meta->running_app_version = *(uint32_t*)(STARTUP_APP_VERSION); meta->app1_version = *(uint32_t*)(APP1_VERSION); meta->app1_rom_addr = *(uint32_t*)(APP1_ROM_ADDR); meta->app1_partition = *(uint32_t*)(APP1_PARTATION); meta->app2_version = *(uint32_t*)(APP2_VERSION); meta->app2_rom_addr = *(uint32_t*)(APP2_ROM_ADDR); meta->app2_partition = *(uint32_t*)(APP2_PARTATION); uint32_t buff[MD5_LENTH] = {0}; uint32_t addr = APP1_MD5; for(int i = 0;i < MD5_LENTH;i++) { buff[i] = *(uint32_t*)(addr); addr += 4; } memcpy(&meta->app1_md5[0],buff,sizeof(uint32_t) *MD5_LENTH); addr = APP2_MD5; for(int i = 0;i < MD5_LENTH;i++) { buff[i] = *(uint32_t*)(addr); addr += 4; } memcpy(&meta->app2_md5[0],buff,sizeof(uint32_t) *MD5_LENTH); meta->app1_size = *(uint32_t*)(APP1_SIZE); meta->app2_size = *(uint32_t*)(APP2_SIZE); } void flash_get_infomation(ac_information_t *info) { info->uniq_ID_64_95 = *(uint32_t*)(UNIQU_3); info->uniq_ID_32_63 = *(uint32_t*)(UNIQU_2); info->uniq_ID_00_31 = *(uint32_t*)(UNIQU_1); }