flash_meta.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "flash.h"
  2. #include "gd32e230_fmc.h"
  3. void flash_get_meta(META_DATA_S *meta)
  4. {
  5. meta->operation_flag = *(uint32_t*)(UPGRADE_FLAG_ADDR);
  6. meta->partition = *(uint32_t*)(STARTUP_PARTATION);
  7. meta->errno = *(uint32_t*)(STARTUP_ERROR);
  8. meta->error_count = *(uint32_t*)(STARTUP_NUMBEAR);
  9. meta->rom_addr = *(uint32_t*)(STARTUP_ROM_ADDR);
  10. meta->recent_running_time = *(uint32_t*)(STARTUP_LAST_RUNNING_TIME);
  11. meta->running_app_version = *(uint32_t*)(STARTUP_APP_VERSION);
  12. meta->app1_version = *(uint32_t*)(APP1_VERSION);
  13. meta->app1_rom_addr = *(uint32_t*)(APP1_ROM_ADDR);
  14. meta->app1_partition = *(uint32_t*)(APP1_PARTATION);
  15. meta->app2_version = *(uint32_t*)(APP2_VERSION);
  16. meta->app2_rom_addr = *(uint32_t*)(APP2_ROM_ADDR);
  17. meta->app2_partition = *(uint32_t*)(APP2_PARTATION);
  18. }
  19. void flash_erase_meta()
  20. {
  21. fmc_unlock();
  22. fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
  23. fmc_page_erase(META_DATA);
  24. fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
  25. fmc_lock();
  26. }
  27. void flash_write_meta(const META_DATA_S *meta_data)
  28. {
  29. fmc_unlock();
  30. uint32_t address = META_DATA;
  31. uint32_t *data = (uint32_t*)(meta_data);
  32. uint32_t data0 = 0;
  33. for(int i = 0; i < sizeof(META_DATA_S);i++)
  34. {
  35. data0 = *data;
  36. fmc_word_program(address,data0);
  37. data ++;
  38. fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
  39. address +=4;
  40. }
  41. fmc_lock();
  42. }
  43. void flash_set_meta_error(META_DATA_S *meta_data,uint8_t error)
  44. {
  45. meta_data->errno = error;
  46. meta_data->error_count ++;
  47. }