|
WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
|
#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"
结构体 | |
| 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) |
| 镜像升级开始,准备写入镜像 | |
| #define IMAGE_HEADER_LEN 0x300 |
| #define IMAGE_KEY_AREA_LEN 0x100 |
| #define UPG_AB_CONFIG_CHECK 0x70746C6C |
| #define UPG_AB_DEFAULT_REGION 0 |
| #define UPG_AB_REGION_CONFIG_SIZE 0x1000 |
| #define UPG_SET_AB_CFG_TRY_MAX 3 |
设置ab面升级方式的配置参数。
| upg_cfg | 需要设置的配置参数 |
| #define UPG_SIZE_4K (UPG_SIZE_4K_ALIGN + 1) |
| #define UPG_SIZE_4K_ALIGN 4095 |
获取镜像分区的起始地址。
| upg_region | 需要获取的镜像分区 |
| 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 | 读取的长度。 |
| 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_t upg_ab_start | ( | upg_region_index | upg_region | ) |
镜像升级开始,准备写入镜像
| upg_region | 镜像区域,UPG_REGION_A/UPG_REGION_B |
| uint32_t upg_get_region_addr | ( | upg_region_index | upg_region | ) |
| uint32_t upg_get_region_size | ( | upg_region_index | upg_region | ) |
获取镜像分区的大小。
| upg_region | 需要获取的镜像分区 |
| upg_region_index upg_get_run_region | ( | void | ) |
获取当前运行的镜像分区。
| upg_region_index upg_get_upg_region | ( | void | ) |
获取待升级的镜像分区。
| errcode_t upg_region_erase | ( | upg_region_index | region | ) |
擦除待升级的镜像区
| region | 待擦除的镜像区域,UPG_REGION_A/UPG_REGION_B。 |
| 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_t upg_set_run_region | ( | upg_region_index | upg_region | ) |
镜像版本切换
| upg_region | 镜像区域,UPG_REGION_A/UPG_REGION_B。下一次启动的版本区域是upg_region。 |