更新SDK到 SR_Light_Hilink_14.2.1.312_20250704

This commit is contained in:
2025-07-11 07:50:14 +08:00
parent 3dc430b62b
commit 4ae4967cef
482 changed files with 10169 additions and 56719 deletions

View File

@ -26,6 +26,7 @@
#include "upg_porting.h"
#include "upg_common.h"
#include "upg_alloc.h"
#include "upg_config.h"
#include "soc_porting.h"
#include "drv_flashboot_cipher.h"
#ifdef CONFIG_MIDDLEWARE_SUPPORT_UPG_AB
@ -56,10 +57,11 @@ const sfc_flash_config_t sfc_cfg = {
.mapping_addr = 0x200000,
.mapping_size = 0x800000,
};
#if 1 //ADD LYL 2024 1122 --------
#if 1 //ADD 2024 1122 --------
#define USERPAGE 0x003F2000 //AT参数存储区
#define BLE_CONKEYLEN 16
#define HILINK_SN_MAX_SIZE 36
#pragma pack(push)
#pragma pack(1)
@ -307,13 +309,22 @@ typedef struct
uint32_t mcu_ota_size;
uint8_t scan_ch14;
uint32_t module_reset_reason;
uint8_t reserved1[60+512-4];
uint8_t radar_type; //雷达工作类型(0 is disable)
uint8_t radar_led; //雷达灯工作类型(0 is off)
uint8_t smtlk_type;
char hilink_sn[HILINK_SN_MAX_SIZE];
uint8_t prot_type;
uint8_t product;
uint8_t uart1_debug_rx_invalid;
uint8_t reserved1[51+512-HILINK_SN_MAX_SIZE-1];
uint8_t validflag_magic;
int8_t validflag_end; //valid flag
}HF_CONFIG_FILE;
}HF_CONFIG_FILE; //sizeof Must have 16 byte alignment
#pragma pack(pop)
HF_CONFIG_FILE g_hf_config_file_boot = {0};
@ -365,9 +376,10 @@ static void boot_flash_init(void)
uint32_t ret = sfc_flash_init();
if (ret != ERRCODE_SUCC) {
serial_cancel_mute();
boot_msg1("Flash Init Fail! ret = ", ret);
serial_set_mute();
} else {
uapi_sfc_reg_read(USERPAGE, (unsigned char *)&g_hf_config_file_boot, sizeof(HF_CONFIG_FILE));
boot_msg0("Flash Init Succ!");
}
hf_boot_msg1("BootLoader debug_level = ", g_hf_config_file_boot.debug_level);
@ -416,8 +428,9 @@ static void ws63_flashboot_recovery(void)
if (!flashboot_need_recovery()) {
return;
}
serial_cancel_mute();
uapi_watchdog_kick();
boot_msg0("Flashboot backup is working!");
boot_msg0("Flashboot backup working!");
partition_information_t src_img_info = {0};
partition_information_t dst_img_info = {0};
errcode_t ret;
@ -430,15 +443,16 @@ static void ws63_flashboot_recovery(void)
ret = uapi_sfc_reg_erase(dst_img_info.part_info.addr_info.addr, dst_img_info.part_info.addr_info.size);
if (ret != ERRCODE_SUCC) {
boot_msg1("flashboot recovery erase failed!! ret = ", ret);
boot_msg1("Recovery erase failed!! ret = ", ret);
}
ret = uapi_sfc_reg_write(dst_img_info.part_info.addr_info.addr,
(uint8_t *)(uintptr_t)(src_img_info.part_info.addr_info.addr + FLASH_START),
src_img_info.part_info.addr_info.size);
if (ret != ERRCODE_SUCC) {
boot_msg1("flashboot recovery write failed!! ret = ", ret);
boot_msg1("Recovery write failed!! ret = ", ret);
}
boot_msg0("Flashboot fix ok!");
boot_msg0("Recovery ok!");
serial_set_mute();
}
#define UPG_FIX_RETRY_CNT_REG RESET_COUNT_REG
@ -480,6 +494,7 @@ static void ws63_try_fix_app(void)
/* 尝试ota修复运行区镜像 */
static void ws63_try_fix_app(void)
{
errcode_t ret;
uint8_t try_cnt = ws63_get_try_fix_cnt();
/* 连续验签失败次数小于阈值不做处理 */
if (try_cnt < VERIFY_RETRY_CNT_THRES) {
@ -493,20 +508,35 @@ static void ws63_try_fix_app(void)
}
ws63_set_try_fix_cnt(try_cnt + 1);
/* 重置升级标记 */
errcode_t ret = uapi_upg_reset_upgrade_flag();
#if (UPG_CFG_VERIFICATION_SUPPORT == YES)
/* 升级包校验 */
upg_package_header_t *pkg_header = NULL;
ret = upg_get_package_header(&pkg_header);
if (ret != ERRCODE_SUCC || pkg_header == NULL) {
boot_msg1("get_pkg_header fail, ret = ", ret);
return;
}
ret = uapi_upg_verify_file((const upg_package_header_t *)pkg_header);
if (ret != ERRCODE_SUCC) {
boot_msg1("reset_upgrade_flag fail, ret = ", ret);
boot_msg1("upg_verify fail, ret = ", ret);
return;
}
#endif
/* 重置升级标记 */
ret = uapi_upg_reset_upgrade_flag();
if (ret != ERRCODE_SUCC) {
boot_msg1("reset upgrade flag fail, ret=", ret);
return;
}
/* 请求升级 */
ret = uapi_upg_request_upgrade(false);
if (ret != ERRCODE_SUCC) {
boot_msg0("request_upgrade fail, fota_pkt_not_exit.");
boot_msg1("request upgrade fail, ret=", ret);
return;
}
boot_msg0("fota_pkt exit, try_fota_fix_app.");
boot_msg0("Try fota fix app.");
}
#endif
@ -543,6 +573,7 @@ static void ws63_upg_check(void)
return;
#endif
if (ws63_upg_need_upgrade()) {
serial_cancel_mute();
boot_msg0("need upgrade");
errcode_t ret = uapi_upg_start();
// 1, 没有升级包、或者升级标记区结果已经设置的情况不需要重启
@ -557,6 +588,7 @@ static void ws63_upg_check(void)
boot_msg0("--------------------------");
boot_msg0("upgrade success, reset now");
}
serial_set_mute();
reset();
}
}
@ -609,10 +641,10 @@ static void dump_io_level(void)
if (poc_coex.bits.rg_poc_sel == POC_SEL_SW_MODE) {
sw_level = (poc_coex.bits.rg_poc_value == POC_VALUE_3V3) ? LEVEL_3V3 : LEVEL_1V8;
chip_level = (poc_coex.bits.ms1c == POC_VALUE_3V3) ? LEVEL_3V3 : LEVEL_1V8;
boot_msg2("io level work in sw mode, level[sw:chip]:", sw_level, chip_level);
boot_msg2("sw mode, level[sw:chip]:", sw_level, chip_level);
} else {
chip_level = (poc_coex.bits.ms1c == POC_VALUE_3V3) ? LEVEL_3V3 : LEVEL_1V8;
boot_msg1("io level work in hw mode, level[chip]:", chip_level);
boot_msg1("hw mode, level[chip]:", chip_level);
}
}
@ -1041,23 +1073,24 @@ static uint32_t ws63_flashboot_init(void)
uart_param_stru uart_param = FLASHBOOT_UART_DEFAULT_PARAM;
uapi_tcxo_init();
hiburn_uart_init(uart_param, HIBURN_CODELOADER_UART);
serial_set_mute();
boot_msg0("Flashboot Uart Init Succ!");
uapi_partition_init();
pmp_enable();
malloc_port_init();
boot_flash_init();
boot_msg0("Flashboot Uart Init Succ!");
boot_msg0("Flashboot Malloc Init Succ!");
boot_flash_init();
err = sfc_port_fix_sr();
if (err != ERRCODE_SUCC) {
serial_cancel_mute();
boot_msg1("SFC fix SR ret =", err);
serial_set_mute();
}
dump_io_level();
#if FASTBOOT_PWM
read_device_data();
pwm_init(BRIGHTNESS_PIN, CCT_PIN);
#endif
print_str("flashboot version : %s\r\n", SDK_VERSION);
return 0;
}
@ -1068,13 +1101,13 @@ static errcode_t ws63_verify_app(uint32_t addr)
ret = verify_image_head(APP_BOOT_TYPE, (uint32_t)(uintptr_t)flashboot_key_area->ext_pulic_key_area, addr);
if (ret != ERRCODE_SUCC) {
boot_msg1("flashboot verify_image_app_head failed!! ret = ", ret);
boot_msg1("verify app head failed! ret=", ret);
return ret;
}
ret = verify_image_body(addr, addr + APP_IMAGE_HEADER_LEN);
if (ret != ERRCODE_SUCC) {
boot_msg1("verify_image_app_body failed!! ret = ", ret);
boot_msg1("verify app body failed!! ret=", ret);
return ret;
}
return ERRCODE_SUCC;
@ -1084,6 +1117,9 @@ static void ws63_verify_app_handle(uint32_t addr)
{
errcode_t ret = ws63_verify_app(addr);
if (ret != ERRCODE_SUCC) {
serial_cancel_mute();
boot_msg0("VE");
serial_set_mute();
ws63_try_fix_app();
reset();
}
@ -1105,7 +1141,9 @@ static void ws63_flash_encrypt_config(uint32_t image_addr, uint32_t image_size)
}
if (start_addr % FLASH_ENCRY_ADDR_ALINE != 0 || end_addr % FLASH_ENCRY_ADDR_ALINE != 0) {
boot_msg2("app_image start or end addr err, must 256byte alignment ", image_addr, end_addr);
serial_cancel_mute();
boot_msg2("Addr not 256byte alignment ", image_addr, end_addr);
serial_set_mute();
reset();
}
boot_msg0("flash_encrypt enable.");
@ -1117,18 +1155,24 @@ static void ws63_flash_encrypt_config(uint32_t image_addr, uint32_t image_size)
flash_key.oneway = TD_TRUE;
ret = drv_rom_cipher_config_odrk1(flash_key);
if (ret != ERRCODE_SUCC) {
boot_msg1("fapc_set_config drv_rom_cipher_config_odrk1 err = ", (uint32_t)ret);
serial_cancel_mute();
boot_msg1("Encrypt odrk1 err=", (uint32_t)ret);
serial_set_mute();
reset();
}
ret = drv_rom_cipher_fapc_config(0, start_addr, end_addr, img_info->iv, IV_LEN);
if (ret != ERRCODE_SUCC) {
boot_msg1("fapc_set_config drv_rom_cipher_fapc_config err = ", (uint32_t)ret);
serial_cancel_mute();
boot_msg1("Encrypt fapc err=", (uint32_t)ret);
serial_set_mute();
reset();
}
ret = drv_rom_cipher_fapc_bypass_config(1, end_addr, FLASH_MAX_END, TD_TRUE);
if (ret != ERRCODE_SUCC) {
boot_msg1("fapc_set_config drv_rom_cipher_fapc_bypass_config err = ", (uint32_t)ret);
serial_cancel_mute();
boot_msg1("Encrypt bypass err=", (uint32_t)ret);
serial_set_mute();
reset();
}
}
@ -1174,7 +1218,9 @@ void start_fastboot(void)
ws63_upg_check(); // 升级模式判断
err = uapi_partition_get_info(PARTITION_APP_IMAGE, &img_info);
if (err != ERRCODE_SUCC) {
boot_msg0("Flashboot get app partition failed!, boot abort!");
serial_cancel_mute();
boot_msg0("Get app partition failed!");
serial_set_mute();
reset();
}
image_addr = img_info.part_info.addr_info.addr + FLASH_START;