2026-09-04 20:09:04 +08:00
|
|
|
|
#ifndef BOOT_SHARE_H
|
|
|
|
|
|
#define BOOT_SHARE_H
|
|
|
|
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
|
|
|
/*==== BL ? APP <20><><EFBFBD><EFBFBD><EFBFBD>ڴ棨<DAB4>ȸ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>֣<EFBFBD>====
|
|
|
|
|
|
* λ<EFBFBD><EFBFBD> SRAM <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κζΣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>벻<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣻
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ/<EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* ע<EFBFBD>⣺<EFBFBD><EFBFBD> APP <EFBFBD><EFBFBD> RAM <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x2000BF00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ַ */
|
|
|
|
|
|
#define BOOT_SHARE_ADDR 0x2000BF00u
|
|
|
|
|
|
#define BOOT_SHARE_MAGIC 0x52534852u /* 'RSHR' */
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
|
uint32_t magic; /* BOOT_SHARE_MAGIC */
|
|
|
|
|
|
uint32_t csr_flags; /* BL <20><><EFBFBD><EFBFBD>ʱд<CAB1><D0B4><EFBFBD><EFBFBD> RCC->CSR<53><52><EFBFBD><EFBFBD>λԭ<CEBB><D4AD><EFBFBD><EFBFBD>־<EFBFBD><D6BE> */
|
|
|
|
|
|
uint32_t uptime_sec; /* APP ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>µı<C2B5><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ȸ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
uint32_t pending_reason; /* APP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λǰд<C7B0><D0B4><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8>ԭ<EFBFBD><D4AD><EFBFBD>루RSN_x<5F><78> */
|
|
|
|
|
|
uint32_t checksum; /* ǰ 4 <20><><EFBFBD>ۼӺ<DBBC> */
|
|
|
|
|
|
} boot_share_t;
|
|
|
|
|
|
|
|
|
|
|
|
#define BOOT_SHARE ((volatile boot_share_t *)BOOT_SHARE_ADDR)
|
|
|
|
|
|
|
|
|
|
|
|
/*==== <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD> ====*/
|
|
|
|
|
|
#define RSN_UNKNOWN 0 /* δ֪ */
|
|
|
|
|
|
#define RSN_POWER_ON 1 /* <20>ϵ<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
#define RSN_PIN_RESET 2 /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ */
|
|
|
|
|
|
#define RSN_WATCHDOG 3 /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
#define RSN_KICKED 4 /* ƽ̨/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
#define RSN_PING_TIMEOUT 5 /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ/<2F><><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD> */
|
|
|
|
|
|
#define RSN_NO_SERVICE 6 /* 4G <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
#define RSN_NO_SIM 7 /* <20><> SIM <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD> */
|
|
|
|
|
|
#define RSN_OTA_UPDATE 8 /* OTA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
#define RSN_OTA_HEALTH 9 /* OTA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鳬ʱ */
|
|
|
|
|
|
#define RSN_4G_FAIL 10 /* 4G <20><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> */
|
|
|
|
|
|
#define RSN_CMD_RESET 11 /* <20><><EFBFBD><EFBFBD> RESET <20><><EFBFBD><EFBFBD> */
|
|
|
|
|
|
#define RSN_CMD_OTA 12 /* <20><><EFBFBD><EFBFBD> OTA <20><><EFBFBD><EFBFBD> */
|
|
|
|
|
|
#define RSN_CMD_RECOVERY 13 /* <20><><EFBFBD><EFBFBD> RECOVERY <20><><EFBFBD><EFBFBD> */
|
|
|
|
|
|
#define RSN_POWER_LOSS 14 /* <20>ⲿ 12V <20>ϵ磨<CFB5><E7A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>¼<EFBFBD><C2BC> */
|
|
|
|
|
|
#define RSN_4G_MODULE 15 /* 4G ģ<><C4A3><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(boot.rom) */
|
|
|
|
|
|
#define RSN_SOFT_GENERIC 16 /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> JLink <20><>λ<EFBFBD><CEBB> */
|
|
|
|
|
|
#define RSN_OTA_FAIL 17 /* OTA <20><><EFBFBD><EFBFBD>/ǰ<>ü<EFBFBD><C3BC><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>λ */
|
2026-09-18 14:56:01 +08:00
|
|
|
|
#define RSN_MQTT_LOST 18 /* MQTT <20>Ͽ<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>) */
|
2026-09-04 20:09:04 +08:00
|
|
|
|
|
|
|
|
|
|
static inline uint32_t boot_share_sum(const volatile boot_share_t *s)
|
|
|
|
|
|
{
|
|
|
|
|
|
return s->magic + s->csr_flags + s->uptime_sec + s->pending_reason;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline int boot_share_valid(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
return BOOT_SHARE->magic == BOOT_SHARE_MAGIC &&
|
|
|
|
|
|
BOOT_SHARE->checksum == boot_share_sum(BOOT_SHARE);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline void boot_share_store(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
BOOT_SHARE->checksum = boot_share_sum(BOOT_SHARE);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* BOOT_SHARE_H */
|