2025-12-17 15:55:25 +08:00

95 lines
2.8 KiB
C

/**
* @file kmdw_dfu.h
* @brief APIs for device firmware update
*
* @copyright Copyright (c) 2020 Kneron Inc. All rights reserved.
*/
#ifndef __KMDW_DFU_H__
#define __KMDW_DFU_H__
#include "base.h"
#include "cmsis_os2.h"
#define SCPU_PARTITION0_START_IN_FLASH FLASH_FW_SCPU0_ADDR /**< 0x2000 */
#define NCPU_PARTITION0_START_IN_FLASH FLASH_FW_NCPU0_ADDR /**< 0x18000 */
#define PARTITION_0_CFG_START_IN_FLASH FLASH_FW_CFG0_ADDR /**< 0X28000 */
#define SCPU_PARTITION1_START_IN_FLASH FLASH_FW_SCPU1_ADDR /**< 0x41000 */
#define NCPU_PARTITION1_START_IN_FLASH FLASH_FW_NCPU1_ADDR /**< 0x57000 */
#define PARTITION_1_CFG_START_IN_FLASH FLASH_FW_CFG1_ADDR /**< 0X67000 */
#define SCPU_START_ADDRESS (SiRAM_MEM_BASE + 0x2000 ) /**< - */
#define NCPU_START_ADDRESS NiRAM_MEM_BASE /**< - */
#define PARTITION_CFG_SIZE 32 /**< size of cfg partition */
#define SUCCESS 0 /**< return code: success */
#define MSG_AUTH_FAIL 251 /**< return code: auth fail */
#define MSG_FLASH_FAIL 252 /**< return code: falshing fail */
#define MSG_DATA_ERROR 253 /**< return code: data check fail */
#define MSG_FLASH_NO_SPACE 254 /**< return code: flash no space fail */
/* function used to read DFU content */
typedef uint32_t (*FnReadData)(uint32_t addr, uint32_t img_size);
/* @brief Init DFU function
* @param tmp_buf temp buffer: size should be >= VERIFY_BLK_SZ
* @param fn_read_data function to read data
* @return 0 on success
*/
int kmdw_dfu_init(uint8_t* tmp_buf, FnReadData fn_read_data);
/**
* @brief Update SCPU firmware
* @return 0 on success
*/
int kmdw_dfu_update_scpu(void);
/**
* @brief Update NCPU firmware
* @return 0 on success
*/
int kmdw_dfu_update_ncpu(void);
/**
* @brief Update model
* @param[in] info_size fw_info.bin size
* @param[in] model_size all_models.bin size
* @return 0 on success
*/
int kmdw_dfu_update_model(uint32_t info_size, uint32_t model_size);
/**
* @brief Update spl
* @param[in] size spl size
* @return 0 on success
*/
int kmdw_dfu_update_spl(uint32_t size);
/**
* @brief Switch active partition
* @param[in] partition active partition
* @return 0 on success
*/
int kmdw_dfu_switch_active_partition(uint32_t partition);
/**
* @brief get active SCPU partition ID
* @return
* 0 - partition 0
* 1 - partition 1
* -1 - error condition (2 active partitions)
*/
int kmdw_dfu_get_active_scpu_partition(void);
/**
* @brief get active NCPU partition ID
* @return
* 0 - partition 0
* 1 - partition 1
* -1 - error condition (2 active partitions)
*/
int kmdw_dfu_get_active_ncpu_partition(void);
#endif