Files
hpw421/component/boot2/mdk/BootSecond.h
T
2026-07-03 18:08:25 +08:00

128 lines
4.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef _BOOTSECOND_H_
#define _BOOTSECOND_H_
#define __RAM_DMA __attribute__((section("ram_code")))
typedef enum
{
INVALIDSTAT = 0,
ACTIVEASTAT = 1,
ERASEASTAT = 2,
OVERWRITEASTAT = 3,
ACTIVEBSTAT = 4,
ERASEBSTAT = 5,
OVERWRITEBSTAT = 6,
} STATUS_T;
typedef enum
{
ERRNONE = 0,
ERRPARAMDAMAGE = 1,
ERROVERWRITE = 2,
ERRCHECK = 3,
} ERROR_T;
typedef enum
{
STATUS_APPBOOT,
STATUS_APPUPDATA,
STATUS_APPERROR,
} PARMSTATUS;
typedef enum
{
APPBOOTA = 0,
APPUPDATA = 2,
APPBOOTB = 3,
APPBOOTERR = 4,
} APPSTATUS;
typedef enum
{
FLASH_SIZE_1M = 0x11,
FLASH_SIZE_2M = 0x12,
FLASH_SIZE_4M = 0x13,
} FLASH_SIZEID;
typedef enum
{
FLASH_1M_BACKUPADDR = 29 * 4096,
FLASH_2M_BACKUPADDR = 61 * 4096,
FLASH_4M_BACKUPADDR = 125 * 4096,
} FLASH_SIZE;
#define DEBUG_PRINT
#define PIN_AB_DAMAGE 18
// #define PIN_DETECT
#define PIN_AB_ACTIVE 0
#define CRC32_INITIAL 0
#define CODES_OFFSET 0x20
#define PARAM_CNT 5
#define PARAM_LENGTH 240
#define TO_B 0
#define TO_A 1
#define CPR_CTLAPBCLKEN_GRCTL_MASK_OFFSET (16UL)
#define CPR_CTLAPBCLKEN_GRCTL_WDT_PCLK_EN_Pos (0x0UL) // /*!< Position of WDT_PCLK_EN field. */
#define CPR_CTLAPBCLKEN_GRCTL_WDT_PCLK_EN_Msk (0x1UL << CPR_CTLAPBCLKEN_GRCTL_WDT_PCLK_EN_Pos)
#define CPR_CTLAPBCLKEN_GRCTL_WDT_PCLK_EN_DISABLE (0x0UL << CPR_CTLAPBCLKEN_GRCTL_WDT_PCLK_EN_Pos) /*!< 0ʹʱ */
#define CPR_CTLAPBCLKEN_GRCTL_WDT_PCLK_EN_ENABLE (0x1UL << CPR_CTLAPBCLKEN_GRCTL_WDT_PCLK_EN_Pos) /*!< 1ʹʱ*/
#define CPR_RSTCTL_CTLAPB_SW_WDT_RSTN_Pos (0x2UL) // /*!< Position of WDT_RSTN field. */
#define CPR_RSTCTL_CTLAPB_SW_WDT_RSTN_Msk (0x1UL << CPR_RSTCTL_CTLAPB_SW_WDT_RSTN_Pos)
#define CPR_RSTCTL_CTLAPB_SW_WDT_RSTN_DISABLE (RSTN_INVALID << CPR_RSTCTL_CTLAPB_SW_WDT_RSTN_Pos) /*!< 1λ */
#define CPR_RSTCTL_CTLAPB_SW_WDT_RSTN_ENABLE (RSTN_VALID << CPR_RSTCTL_CTLAPB_SW_WDT_RSTN_Pos) /*!< 0λ*/
#define CPR_RSTCTL_WDTRST_MASK_WDT_SYS_RSTN_MASK_Pos (0x0UL) // /*!< Position of WDT_SYS_RSTN_MASK field. */
#define CPR_RSTCTL_WDTRST_MASK_WDT_SYS_RSTN_MASK_Msk (0x1UL << CPR_RSTCTL_WDTRST_MASK_WDT_SYS_RSTN_MASK_Pos)
#define CPR_RSTCTL_WDTRST_MASK_WDT_SYS_RSTN_MASK_DISABLE (0x0UL << CPR_RSTCTL_WDTRST_MASK_WDT_SYS_RSTN_MASK_Pos) /*!< 0 */
#define CPR_RSTCTL_WDTRST_MASK_WDT_SYS_RSTN_MASK_ENABLE (0x1UL << CPR_RSTCTL_WDTRST_MASK_WDT_SYS_RSTN_MASK_Pos) /*!< 1*/
#define CPR_RSTCTL_WDTRST_MASK_WDT_M4_RSTN_MASK_Pos (0x1UL) // /*!< Position of WDT_M0_RSTN_MASK field. */
#define CPR_RSTCTL_WDTRST_MASK_WDT_M4_RSTN_MASK_Msk (0x1UL << CPR_RSTCTL_WDTRST_MASK_WDT_M4_RSTN_MASK_Pos)
#define CPR_RSTCTL_WDTRST_MASK_WDT_M4_RSTN_MASK_DISABLE (0x0UL << CPR_RSTCTL_WDTRST_MASK_WDT_M4_RSTN_MASK_Pos) /*!< 0 */
#define CPR_RSTCTL_WDTRST_MASK_WDT_M4_RSTN_MASK_ENABLE (0x1UL << CPR_RSTCTL_WDTRST_MASK_WDT_M4_RSTN_MASK_Pos) /*!< 1*/
#define RSTN_VALID (0UL)
#define RSTN_INVALID (1UL)
#define PARAM_ADDR ((8*1024)-512)
#define FLASH_VIR_AADDR 0x11000000
#define ALIGN(num) __attribute__((aligned(num)))
//#define FLASH_READ_PAGE spi_flash_Read_Page
//#define FLASH_SECTOR_ERASE spi_flash_sector_erase
//#define SPI_WRITE_ENABLE spi_flash_write_enable
//#define FLASH_WRITE_PAGE xc_spi_flash_write_page
//#define FLASH_WAIT_READY while (spi_flash_wait_till_ready())
#define FLASH_READ_PAGE xc_spi_flash_read_page
#define FLASH_SECTOR_ERASE xc_spi_flash_erase_sector
#define FLASH_PAGE_ERASE xc_spi_flash_erase_page
#define SPI_WRITE_ENABLE
#define FLASH_WRITE_PAGE xc_spi_flash_write_page
#define FLASH_WAIT_READY
typedef struct
{
uint32_t status; /**/
uint32_t softver; /**/
uint32_t acheck; /*crc32*/
uint32_t aaddr; /*sector align*/
uint32_t alen; /*page align*/
uint32_t bcheck; /**/
uint32_t baddr; /**/
uint32_t blen; /**/
uint32_t aloadaddr;
uint32_t bloadaddr;
uint32_t RESERVED0[2];
} param_unit;
typedef struct
{
param_unit paramunit[PARAM_CNT];
uint32_t paramcrc32;
uint32_t RESERVED1[3];
} sboot_message;
void boot_run_sec(void);
extern volatile uint32_t param_backup_addr;
void boot_run(void);
void param_analy(param_unit *sParam);
__RAM_CODE __asm void MSR_MSP(uint32_t addr);
void flash_init(void);
void overwrite_backup(param_unit *oparam);
int uart_printf(const char *fmt,...);
#endif