FLASH.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #ifndef __FLASH_H_
  2. #define __FLASH_H_
  3. #include "stm32l4xx_hal.h"
  4. /* ========================
  5. * STM32L431CCT6 256KB Flash 自定义三段式 IAP升级系统
  6. * 结构:Bootloader + APP1 + APP2
  7. * 通信方式:UART1 (RS485)
  8. * 校验方式:MD5(含 tiny_md5)
  9. * ========================
  10. */
  11. /* ========== Flash 分区方案 ==========
  12. * Flash: 256KB (0x08000000 - 0x0803FFFF) 0x40000字节
  13. * Bootloader : 0x08000000 - 0x080067FF (26KB) 0x6800
  14. * App1 : 0x08006800 - 0x0801E7FF (96KB) 0x18000
  15. * App2 : 0x0801E800 - 0x080367FF (96KB) 0x18000
  16. * Param(MD5) : 0x08036800 - 0x08036FFF (2KB) 0x800
  17. * APP应用参数 : 0x08037000 - 0x0803FFFF (36KB)
  18. *
  19. */
  20. //------------------------宏定义-----------------------------//
  21. #define FLASH_ADDR_MAX 0x08040000 ////写入数据地址小于STM32L431CC的flash地址最大值
  22. #define FLASH_PARAMS_MAGIC 0xA5A5
  23. #define FLASH_PARAM_ADDR 0x0803F800 // STM32L431CCT6 最后一页起始地址 (256KB Flash, 每页2KB)
  24. #define SUCCESS 0
  25. #define ERROR 1
  26. #define BOOTLOADER_ADDR 0x08000000
  27. #define APP1_ADDR 0x08006800
  28. #define APP2_ADDR 0x0801E800
  29. #define PARAM_ADDR 0x08036800
  30. /**************************************************************/
  31. typedef struct {
  32. uint32_t app1_version;
  33. uint8_t app1_md5[16];
  34. uint8_t app1_valid; // 0xA5 表示有效,其它为无效
  35. uint32_t app2_version;
  36. uint8_t app2_md5[16];
  37. uint8_t app2_valid;
  38. uint32_t upgrade_flag; // 固件升级标志
  39. uint32_t rollback_flag; // 回退标志
  40. } BootParams;
  41. extern BootParams params;
  42. typedef struct {
  43. uint32_t Firmware_Version; // 固件版本号 [备用][年][月][日][序号]
  44. uint16_t Running_time; // 运行时长
  45. uint16_t SlaveDevice_addr; // 从机地址
  46. uint16_t Serial_baud_rate; // 波特率
  47. uint16_t Device_SN[3]; // 设备编号
  48. uint16_t magic; // 魔术字
  49. } DeviceParams_t;
  50. extern DeviceParams_t g_deviceParams;
  51. /**************************************************************/
  52. /************** FLASH操作接口 *****************/
  53. uint32_t Flash_ReadOneWord(uint32_t faddr);
  54. void Flash_ErasePages(uint32_t faddr,uint32_t fdataNum);
  55. uint8_t Flash_WriteOneWord(uint32_t faddr,uint32_t fdata32);
  56. uint8_t Flash_WriteDoubleWord(uint32_t faddr,uint64_t fdata64);
  57. void Flash_Write32(uint32_t faddr,uint32_t *fdata32, uint32_t fdata32Num);
  58. void Flash_Write64(uint32_t faddr,uint64_t *fdata64, uint32_t fdata64Num);
  59. void Flash_Read32(uint32_t faddr,uint32_t *fdata32,uint32_t fdata32Num);
  60. void Flash_ReadBytes(uint32_t faddr,uint8_t *fdata8,uint32_t fdata8Num);
  61. uint8_t Flash_WriteRead(uint32_t fAdress, uint8_t *wData, uint32_t wDataLen, uint8_t *rData);
  62. void save_params_to_flash(void);
  63. void load_params_from_flash(void);
  64. void SaveBootloaderParams(void) ;
  65. #endif
  66. /**************************END OF FILE*************************/