WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
upg_ab.c 文件参考
#include <stddef.h>
#include <stdint.h>
#include "errcode.h"
#include "common_def.h"
#include "sfc.h"
#include "partition.h"
#include "upg.h"
#include "upg_debug.h"
#include "upg_verify.h"
#include "upg_porting.h"
#include "upg_ab.h"
upg_ab.c 的引用(Include)关系图:

结构体

struct  upg_ab_config_t
 
struct  upg_ab_region_config_t
 

宏定义

#define UPG_AB_REGION_CONFIG_SIZE   0x1000
 
#define UPG_AB_DEFAULT_REGION   0
 
#define UPG_AB_CONFIG_CHECK   0x70746C6C
 
#define UPG_SET_AB_CFG_TRY_MAX   3
 设置ab面升级方式的配置参数。
 
#define UPG_SIZE_4K_ALIGN   4095
 获取镜像分区的起始地址。
 
#define UPG_SIZE_4K   (UPG_SIZE_4K_ALIGN + 1)
 
#define IMAGE_KEY_AREA_LEN   0x100
 
#define IMAGE_HEADER_LEN   0x300
 

函数

upg_region_index upg_get_run_region (void)
 获取当前运行的镜像分区。
 
upg_region_index upg_get_upg_region (void)
 获取待升级的镜像分区。
 
uint32_t upg_get_region_addr (upg_region_index upg_region)
 
uint32_t upg_get_region_size (upg_region_index upg_region)
 获取镜像分区的大小。
 
uint32_t upg_ab_image_read (upg_region_index upg_region, uint32_t offset, uint8_t *buf, size_t len)
 读取镜像数据。
 
uint32_t upg_ab_image_write (upg_region_index upg_region, uint32_t offset, uint8_t *buf, size_t len)
 写入镜像数据。
 
errcode_t upg_set_run_region (upg_region_index upg_region)
 镜像版本切换
 
errcode_t upg_region_erase (upg_region_index region)
 擦除待升级的镜像区
 
errcode_t upg_region_verify (upg_region_index region)
 校验待升级的镜像区 当从B分区启动时,DMMU配置如下: 访问A的地址时,实际访问的是B; 访问B的地址时,实际访问的是A; 而从A分区启动时,没有配置DMMU。 所以,calc_hash函数传入的地址总是B分区的地址。 ┌─────────────┐ src start│ │dst start │ │ ┌───── │ Image A │ ◄─────┐ │ │ │ │ │ src end │ │ │ │ ├─────────────┤ │ │ dst start│ │src start │ │ │ │ │ └─────► │ Image B │ ─────┘ │ │ │ │src end └─────────────┘
 
errcode_t upg_ab_start (upg_region_index upg_region)
 镜像升级开始,准备写入镜像
 

宏定义说明

◆ IMAGE_HEADER_LEN

#define IMAGE_HEADER_LEN   0x300

◆ IMAGE_KEY_AREA_LEN

#define IMAGE_KEY_AREA_LEN   0x100

◆ UPG_AB_CONFIG_CHECK

#define UPG_AB_CONFIG_CHECK   0x70746C6C

◆ UPG_AB_DEFAULT_REGION

#define UPG_AB_DEFAULT_REGION   0

◆ UPG_AB_REGION_CONFIG_SIZE

#define UPG_AB_REGION_CONFIG_SIZE   0x1000

◆ UPG_SET_AB_CFG_TRY_MAX

#define UPG_SET_AB_CFG_TRY_MAX   3

设置ab面升级方式的配置参数。

参数
upg_cfg需要设置的配置参数
返回
返回相关错误码

◆ UPG_SIZE_4K

#define UPG_SIZE_4K   (UPG_SIZE_4K_ALIGN + 1)

◆ UPG_SIZE_4K_ALIGN

#define UPG_SIZE_4K_ALIGN   4095

获取镜像分区的起始地址。

参数
upg_region需要获取的镜像分区
返回
成功返回分区地址,失败返回 0

函数说明

◆ upg_ab_image_read()

uint32_t upg_ab_image_read ( upg_region_index  upg_region,
uint32_t  offset,
uint8_t *  buf,
size_t  len 
)

读取镜像数据。

参数
upg_region,镜像区域,UPG_REGION_XXX。
offset偏移量。
buf内存指针。
len读取的长度。
返回
成功返回ERRCODE_SUCC,失败返回错误码。

◆ upg_ab_image_write()

uint32_t upg_ab_image_write ( upg_region_index  upg_region,
uint32_t  offset,
uint8_t *  buf,
size_t  len 
)

写入镜像数据。

参数
upg_region,镜像区域,UPG_REGION_XXX。
offset偏移量。
buf待写入数据的内存指针。
len写入的长度。
返回
成功返回ERRCODE_SUCC,失败返回错误码。

◆ upg_ab_start()

errcode_t upg_ab_start ( upg_region_index  upg_region)

镜像升级开始,准备写入镜像

参数
upg_region镜像区域,UPG_REGION_A/UPG_REGION_B
返回
成功返回ERRCODE_SUCC,失败返回错误码。

◆ upg_get_region_addr()

uint32_t upg_get_region_addr ( upg_region_index  upg_region)

◆ upg_get_region_size()

uint32_t upg_get_region_size ( upg_region_index  upg_region)

获取镜像分区的大小。

参数
upg_region需要获取的镜像分区
返回
成功返回分区大小,失败返回 0

◆ upg_get_run_region()

upg_region_index upg_get_run_region ( void  )

获取当前运行的镜像分区。

返回
成功返回分区序号,失败 默认从A区启动。

◆ upg_get_upg_region()

upg_region_index upg_get_upg_region ( void  )

获取待升级的镜像分区。

返回
返回分区序号。

◆ upg_region_erase()

errcode_t upg_region_erase ( upg_region_index  region)

擦除待升级的镜像区

参数
region待擦除的镜像区域,UPG_REGION_A/UPG_REGION_B。
返回
成功返回ERRCODE_SUCC,失败返回错误码。

◆ upg_region_verify()

errcode_t upg_region_verify ( upg_region_index  region)

校验待升级的镜像区 当从B分区启动时,DMMU配置如下: 访问A的地址时,实际访问的是B; 访问B的地址时,实际访问的是A; 而从A分区启动时,没有配置DMMU。 所以,calc_hash函数传入的地址总是B分区的地址。 ┌─────────────┐ src start│ │dst start │ │ ┌───── │ Image A │ ◄─────┐ │ │ │ │ │ src end │ │ │ │ ├─────────────┤ │ │ dst start│ │src start │ │ │ │ │ └─────► │ Image B │ ─────┘ │ │ │ │src end └─────────────┘

参数
region待校验的镜像区域,UPG_REGION_A/UPG_REGION_B。
返回
成功返回ERRCODE_SUCC,失败返回错误码。

◆ upg_set_run_region()

errcode_t upg_set_run_region ( upg_region_index  upg_region)

镜像版本切换

参数
upg_region镜像区域,UPG_REGION_A/UPG_REGION_B。下一次启动的版本区域是upg_region。
返回
成功返回ERRCODE_SUCC,失败返回错误码。