flash.c 2.2 KB

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