gd_ota_flash.c 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "gd_ota_flash.h"
  2. #include "gd32f10x_fmc.h"
  3. #include "delay.h"
  4. #include "string.h"
  5. #include <stdlib.h>
  6. void GD32_WriteFlash(uint32_t saddr, uint32_t *wdata, uint32_t wnum);
  7. void GD32_EraseFlash(uint16_t start, uint16_t num);
  8. //读取soft版本信息
  9. int read_soft_version()
  10. {
  11. }
  12. void write_soft_version(BOOT_MESSAGE *save_message)
  13. {
  14. GD32_EraseFlash(FMC_Page,1);
  15. uint32_t data=FMC_READ(FMC_WRITE_START_ADDR);
  16. GD32_WriteFlash(FMC_WRITE_START_ADDR,(uint32_t *) save_message,sizeof(BOOT_MESSAGE));
  17. }
  18. //读取GD32flash
  19. void GD32_READ_OTA(BOOT_MESSAGE *READ)
  20. {
  21. uint32_t data=FMC_READ(FMC_WRITE_START_ADDR);
  22. Delay_Ms(10);
  23. memcpy(READ,&data,4);
  24. }
  25. //对系统存储版本信息进行初始化
  26. void soft_init()
  27. {
  28. BOOT_MESSAGE *currentBoot=malloc(sizeof(BOOT_MESSAGE));
  29. GD32_READ_OTA(currentBoot);
  30. if(currentBoot->VERSION_H==0xFF && currentBoot->VERSION_M==0xFF &&currentBoot->VERSION_L==0xFF )
  31. {
  32. currentBoot->VERSION_H=1;currentBoot->VERSION_L=0;currentBoot->VERSION_M=0;currentBoot->UP_FLAG=0;
  33. write_soft_version(currentBoot);
  34. }
  35. free(currentBoot);
  36. }