123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /**
- * @file hv_comm_Ota.h
- * @brief Header file of OTA Utilities module.
- *
- * @verbatim
- * ==============================================================================
- * ##### How to use #####
- * ==============================================================================
- *
- * @endverbatim
- *
- * @author HiView SoC Software Team
- * @version 1.0.0
- * @date 2022-08-22
- */
- #ifndef __SDK_COMMON_UTIL_UTILITIES_INC_OTA_H__
- #define __SDK_COMMON_UTIL_UTILITIES_INC_OTA_H__
- #include "hv_comm_DataType.h"
- #define ALIGN_4K(x) (((x) + 0xFFF) & ~0xFFF)
- #define STRING_SBLKPMSB "SBLKPMSB"
- #define STRING_SBLKBOOT "SBLKBOOT" //第一启动分区的Boot
- #define STRING_SBLKBTBK "SBLKBTBK" //第二启动分区的Boot
- #define STRING_SBLKCODE "SBLKCODE"
- #define SBLK_HEADER "SBLK"
- #define SBLK_MAGIC_STRING_LENGTH (8)
- #define VALID_LEN_OFFSET (0x08)
- #define START_ADDR_OFFSET (0x0C)
- #define CRC_OFFSET (0x1C)
- #define SBLK_PER_SIZE (32)
- #define MAX_RESERVED_PARTITIONS (32)
- #define MAX_SBLK_SIZE (MAX_RESERVED_PARTITIONS * SBLK_PER_SIZE)
- /* PM51和SBLK分区的地址和长度是固定的,所以在这里用宏定义;
- 其余的Boot、Code分区的起始地址和长度则通过解析SBLK的信息来得到
- | PM51 | 51Data | SB | Boot1 | Boot2 | Code | ------
- Start(0x) 0 7000 8000 9000 x x
- Len | 7000 | 1000 | 1000 | x | x |
- */
- #define PM51_PARTATION_ADDR (0x00000000)
- #define PM51_DATA_ADDR (0x00007000)
- #define SBLK_PARTATION_ADDR (0x00008000)
- #define PM51_PARTATION_LEN (0x00007000)
- #define PM51_DATA_LEN (0x00001000)
- #define SBLK_PARTATION_LEN (0x00001000)
- /**
- * @brief 双分区中CodeBak分区起始地址 = Code分区起始地址 + 2M
- */
- #define CODEBAK_PART_OFFSET (0x200000)
- /**
- * @brief 定义SBLK分区中Code段的CRC长度
- */
- #define OTA_SBLK_CRC_LEN (4)
- /**
- * @brief Enumeration definition of the boot partition
- */
- typedef enum _OtaPart
- {
- OTA_PART_A = 0,
- OTA_PART_B,
- OTA_PART_MAX,
- OTA_PART_SHORT_PATCH,
- } OtaPartDef;
- /**
- * @brief 描述Flash分区表结构
- */
- typedef struct _PartitionSBLKInfo
- {
- UCHAR8 ucSBLKName[8];
- UINT32 uiValidLen;
- UINT32 uiStartAddr;
- UINT32 uiCRC;
- UINT32 uiTotalLen;
- } PartitionSBLKInfo;
- /**
- * @brief OTA后更新OTA_Flag,和Code_CRC
- * @param[in] pucCodeCrc 指向Code CRC值的指针, 必须传递4个字节! 且值全为0时不写入!
- * @param[in] ucCrcLen 表示Code CRC的长度, 必须设为4
- * @return Status
- */
- Status Hv_Comm_OTA_UpdateParams(UCHAR8 *pucCodeCrc, UCHAR8 ucCrcLen);
- /**
- * @brief 把4个字节按照Big Endian顺序组成UINT32数据
- * @param[in] pucData 指向UCHAR8数据块的指针
- * @param[in] uiOffset 偏移值,表示取UCHAR8数据块中指定偏移位置后的4个字节
- * @return UINT32
- */
- UINT32 Hv_Comm_OTA_ConvertToUint32(const UCHAR8 *pucData, UINT32 uiOffset);
- /**
- * @brief 获取本次OTA要升级到哪个分区,返回与当前正运行分区相反的分区号
- * @return OtaPartDef 指示待更新的分区号
- */
- OtaPartDef Hv_Comm_OTA_GetUpgradePart(VOID);
- /**
- * @brief 根据分区地址更新该分区对应的CRC
- * @return Status
- */
- Status Hv_Comm_OTA_UpdatePartitionCrcByAddr(UCHAR8 *pucCrc, UCHAR8 ucCrcLen, UINT32 uiPartitionAddr);
- /**
- * @brief 根据分区名字查找Flash上对应分区的信息
- * @return Status
- */
- Status Hv_Comm_OTA_GetPartitionInfoByName(UCHAR8* pucName, UCHAR8 ucLen, PartitionSBLKInfo *pstPartInfo);
- /**
- * @brief 根据分区起始地址查找Flash上对应分区的信息
- * @return Status
- */
- Status Hv_Comm_OTA_GetPartitionInfoByStartAddr(UINT32 uiPartStartAddr, PartitionSBLKInfo *pstPartInfo);
- /**
- * @brief 根据要升级到哪个分区来获取Boot和Code的写入地址
- * @return Status
- */
- Status Hv_Comm_OTA_GetFlashWriteAddr(OtaPartDef enToWhich, UINT32 *uiBootWriteAddr, UINT32 *uiCodeWriteAddr);
- #endif
|