iap.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #ifndef __DEV_IAP_H
  2. #define __DEV_IAP_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #ifdef __DEV_IAP_H_GLOBAL
  7. #define __DEV_IAP_H_EXTERN
  8. #else
  9. #define __DEV_IAP_H_EXTERN extern
  10. #endif
  11. /************************************************************************************************
  12. * Version *
  13. ************************************************************************************************/
  14. /************************************************************************************************
  15. * How to use *
  16. ************************************************************************************************/
  17. /************************************************************************************************
  18. * Enable config *
  19. ************************************************************************************************/
  20. /************************************************************************************************
  21. * Includes *
  22. ************************************************************************************************/
  23. #include "can_task.h"
  24. #include <stdint.h>
  25. /************************************************************************************************
  26. * Defines *
  27. ************************************************************************************************/
  28. #define UPGRADE_FLAG_DATA_SIZE 4 // 升级参数数组元素个数
  29. #define UPGRADE_APP_DATA_SIZE 4 // 升级参数数组元素个数
  30. #define UPGRADE_BUFF_DATA_SIZE (UPGRADE_FLAG_DATA_SIZE + UPGRADE_APP_DATA_SIZE) // 升级参数数组元素个数
  31. #define APP_START_ADDR ((uint32_t)0x08008000)
  32. #define APP_END_ADDR ((uint32_t)0x0805FFFF)
  33. #define UPGRADE_FLAG_START_ADDR ((uint32_t)0x08060000)
  34. #define UPGRADE_FLAG_END_ADDR ((uint32_t)0x0807FFFF)
  35. #define DOWNLOAD_START_ADDR ((uint32_t)0x08080000)
  36. #define DOWNLOAD_END_ADDR ((uint32_t)0x080DFFFF)
  37. #define DOWNLOAD_MIDDLE_ADDR ((uint32_t)0x080A0000)
  38. // 升级命令
  39. #define IAP_CMD_VERSION 0x71 // 查询版本号
  40. #define IAP_CMD_INFO 0x72 // 包信息
  41. #define IAP_CMD_ERASE 0x73 // 擦除命令
  42. #define IAP_CMD_DATA 0x80 // 数据帧 IAP_CMD_DATA |帧号
  43. #define IAP_CMD_CRC 0x74 // 传输结果校验
  44. #define IAP_CMD_JUMP 0x75 // 执行跳转
  45. #define IAP_CMD_JUMP_OVER 0x0175 // 执行跳转
  46. #define IAP_CMD_MODEL_TYPE 0x76 // 执行跳转
  47. #define UPGRADE_SIGN 0x5AA5
  48. #define DEVICE_ID 0x5AA4
  49. typedef union
  50. {
  51. uint16_t u8_buf[8];
  52. uint16_t u16_buf[4];
  53. } u16_u8;
  54. typedef union
  55. {
  56. uint16_t u8_save[200];
  57. uint16_t u16_save[100];
  58. } u16save_u8save;
  59. typedef struct
  60. {
  61. uint16_t total_packages;
  62. uint16_t current_packages;
  63. uint16_t count_packages;
  64. uint16_t recv_len;
  65. uint16_t crc16;
  66. uint16_t firmware_crc16;
  67. uint16_t firmware_ver;
  68. uint16_t total_bytes;
  69. uint16_t count_bytes;
  70. u16_u8 flash_data;
  71. u16_u8 recheck_data;
  72. u16save_u8save save_data;
  73. } iap_type;
  74. typedef union
  75. {
  76. struct
  77. {
  78. uint16_t sign; // 首地址 buf[0]
  79. uint16_t crc16; // 中地址 buf[1]
  80. uint32_t moving_size; // 高地址 buf[2] buf[3]
  81. } param;
  82. uint16_t infor_buf[UPGRADE_FLAG_DATA_SIZE];
  83. } upgrade_param; // 升级参数使用
  84. void set_firmver(void);
  85. void iap_flag_release(void);
  86. void iap_param_init(void);
  87. void jump_boot_time_ctrl(void);
  88. void iap_rec_handler(pdu_tag rec_msg);
  89. /************************************************************************************************
  90. * Defines *
  91. ************************************************************************************************/
  92. #ifdef __cplusplus
  93. };
  94. #endif
  95. #endif // __DEV_IAP_H