flash.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "flash.h"
  2. #include "gd32e23x.h"
  3. void flash_erase_meta()
  4. {
  5. fmc_unlock();
  6. fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
  7. fmc_page_erase(META_DATA);
  8. fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
  9. fmc_lock();
  10. }
  11. void flash_write_meta(const META_DATA_S *meta_data)
  12. {
  13. fmc_unlock();
  14. uint32_t address = META_DATA;
  15. uint32_t *data = (uint32_t*)(meta_data);
  16. uint32_t data0 = 0;
  17. for(int i = 0; i < sizeof(META_DATA_S);i++)
  18. {
  19. data0 = *data;
  20. fmc_word_program(address,data0);
  21. data ++;
  22. fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
  23. address +=4;
  24. }
  25. fmc_lock();
  26. }
  27. void flash_get_meta_data(META_DATA_S *meta)
  28. {
  29. meta->operation_flag = *(uint32_t*)(UPGRADE_FLAG_ADDR);
  30. meta->partition = *(uint32_t*)(STARTUP_PARTATION);
  31. meta->errno = *(uint32_t*)(STARTUP_ERROR);
  32. meta->error_count = *(uint32_t*)(STARTUP_NUMBEAR);
  33. meta->rom_addr = *(uint32_t*)(STARTUP_ROM_ADDR);
  34. meta->recent_running_time = *(uint32_t*)(STARTUP_LAST_RUNNING_TIME);
  35. meta->running_app_version = *(uint32_t*)(STARTUP_APP_VERSION);
  36. meta->app1_version = *(uint32_t*)(APP1_VERSION);
  37. meta->app1_rom_addr = *(uint32_t*)(APP1_ROM_ADDR);
  38. meta->app1_partition = *(uint32_t*)(APP1_PARTATION);
  39. meta->app2_version = *(uint32_t*)(APP2_VERSION);
  40. meta->app2_rom_addr = *(uint32_t*)(APP2_ROM_ADDR);
  41. meta->app2_partition = *(uint32_t*)(APP2_PARTATION);
  42. uint32_t buff[MD5_LENTH] = {0};
  43. uint32_t addr = APP1_MD5;
  44. for(int i = 0;i < MD5_LENTH;i++)
  45. {
  46. buff[i] = *(uint32_t*)(addr);
  47. addr += 4;
  48. }
  49. memcpy(&meta->app1_md5[0],buff,sizeof(uint32_t) *MD5_LENTH);
  50. addr = APP2_MD5;
  51. for(int i = 0;i < MD5_LENTH;i++)
  52. {
  53. buff[i] = *(uint32_t*)(addr);
  54. addr += 4;
  55. }
  56. memcpy(&meta->app2_md5[0],buff,sizeof(uint32_t) *MD5_LENTH);
  57. meta->app1_size = *(uint32_t*)(APP1_SIZE);
  58. meta->app2_size = *(uint32_t*)(APP2_SIZE);
  59. }
  60. void flash_get_infomation(board_info_t *info)
  61. {
  62. info->uniq_3 = *(uint32_t*)(UNIQU_3);
  63. info->uniq_2 = *(uint32_t*)(UNIQU_2);
  64. info->uniq_1 = *(uint32_t*)(UNIQU_1);
  65. }