| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #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);
- }
- void flash_disable_read(void)
- {
- #if OPEN_NOT_READ_EN
- if(ob_obstat_plevel_get() != OB_OBSTAT_PLEVEL_LOW)
- {
- fmc_unlock();
- fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
- ob_unlock();
- ob_security_protection_config(FMC_LSPC);
- ob_lock();
- fmc_lock();
- NVIC_SystemReset();
- }
- #endif
- }
|