初始提交

This commit is contained in:
2024-09-28 14:24:04 +08:00
commit c756587541
5564 changed files with 2413077 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
# OUTPUT type
# 1 - .out
# 2 - .a
# 3 - .so
OUTPUT_TYPE = 1
OUTPUT_NAME = kl1_kl2_flash_crc_test
SUB_DIRS = $(TOPDIR)/common/os_shim/dtestos
# .h files dir
ADD_INCLUDE += $(TOPDIR)/inc/io_lib $(TOPDIR)/inc/driver $(TOPDIR)/driver/inc $(TOPDIR)/dtest/flash_cmd $(TOPDIR)/dtest/mac_rx_test/inc $(TOPDIR)/import/lwip/lwip/src/include/lwip
ADD_INCLUDE += $(TOPDIR)/inc/os_shim $(TOPDIR)/ftm/src $(TOPDIR)/ftm/inc $(TOPDIR)/inc/cli/plc $(TOPDIR)/dtest/mac_rx_test/hal/inc $(TOPDIR)/inc/utils
ADD_INCLUDE += $(TOPDIR)/plc/halphy/test/inc $(TOPDIR)/inc/pib $(TOPDIR)/inc/uart
# predefined macro
LD_SCRIPT = link_soc.lds
ifeq ($(gcc),arm)
ADD_LIB = cm3
ADD_LIBDIR = $(TOPDIR)/startup/cm3
else
ifeq ($(target), kunlun2)
ADD_LIB = riscv
ADD_LIBDIR =$(TOPDIR)/startup/riscv2
ADD_INCLUDE += $(TOPDIR)/driver/src/hw2/inc $(TOPDIR)/sbl/inc/hw2 $(TOPDIR)/inc/hw/reg/riscv2/15 $(TOPDIR)/dtest/mac_rx_test/hw2/inc $(TOPDIR)/dtest/mac_tx_test/hw2/inc
else
ADD_LIB = riscv
ADD_LIBDIR =$(TOPDIR)/startup/riscv
ADD_INCLUDE += $(TOPDIR)/driver/src/hw/inc $(TOPDIR)/sbl/inc/hw $(TOPDIR)/inc/hw/reg/riscv/15 $(TOPDIR)/dtest/mac_rx_test/hw/inc $(TOPDIR)/dtest/mac_tx_test/hw/inc
endif
endif
# lib dir
ADD_LIBDIR += $(TOPDIR)/driver $(TOPDIR)/common/io_lib $(TOPDIR)/pib
# lib need to ld together
ADD_LIB += driver io_lib pib
#####################################################
ifdef TOPDIR
include $(TOPDIR)/build/makefile.cfg
else
include $(CURDIR)/build/makefile.cfg
TOPDIR = $(CURDIR)
export TOPDIR
endif
dump:
$(OBJDUMP) -D -S -l $(OUTPUT_FULL_NAME) > $(OUTPUT_FULL_NAME).dump
# display the obj files and output name
debug:
@echo TOPDIR=$(TOPDIR)
@echo OUTPUT_LIB=$(OUTPUT_FULL_NAME)
@echo DEPS=$(DEPS)
@echo OBJECTS=$(OBJECTS)
@echo SRCS=$(SRCS)
@echo OBJECTS folder=$(foreach dirname, $(SUB_DIRS), $(addprefix $(BIN_DIR)/, $(dirname)))
@echo output_name=$(OUTPUT_FULL_NAME)

View File

@@ -0,0 +1,130 @@
static const unsigned int CRC32_Table[] =
{
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
};
static const unsigned short CRC16_Table[256]= {
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,
0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,
0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,
0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,
0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,
0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,
0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,
0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,
0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,
0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,
0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,
0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,
0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,
0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,
0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,
0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,
0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,
0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,
0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,
0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,
0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,
0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,
0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,
0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,
0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,
0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,
0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,
0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
};
/* CCITT */
unsigned short CRC16(const char *buf, int len)
{
register int counter;
register unsigned short crc = 0;
for( counter = 0; counter < len; counter++)
crc = (crc<<8) ^ CRC16_Table[((crc>>8) ^ *(char *)buf++)&0x00FF];
return crc;
}
unsigned int CRC32_Update(unsigned int crc, char *buff, int len)
{
register int counter;
for (counter = 0; counter < len; counter++)
{
crc = (crc >> 8) ^ CRC32_Table[(crc^buff[counter])&0x00FF];
}
return crc;
}
unsigned int iot_getcrc32(void *data, unsigned int len)
{
unsigned int crc = CRC32_Update(0xFFFFFFFF, data, (int)len);
return (crc ^ 0xFFFFFFFF);
}

View File

@@ -0,0 +1,24 @@
/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef _INCLUDE_CRC_H_
#define _INCLUDE_CRC_H_
unsigned short CRC16(const char *buf, int len);
unsigned int CRC32_Update(unsigned int crc, char *buff, int len);
unsigned int iot_getcrc32(void *data, unsigned int len);
#endif /* _INCLUDE_CRC_H_ */

View File

@@ -0,0 +1,112 @@
/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#include "chip_reg_base.h"
#include "hw_reg_api.h"
#include "flash.h"
#include "iot_config.h"
#include "flash_bench.h"
#include "os_mem.h"
#include "iot_flash_layout.h"
void flash_bench_get_flash_image_offset(uint32_t part[], uint32_t *p_num)
{
iot_flash_info_t info;
flash_bench_get_flash_info(&info);
if (FLASH_BENCH_SIZE_4M == info.chip_size) {
part[0] = FLASH_4M_SP_OFFSET;
part[1] = FLASH_4M_SBL_OFFSET;
part[2] = FLASH_4M_OEM_OFFSET;
part[3] = FLASH_4M_PIB1_OFFSET;
part[4] = FLASH_4M_PSRAM_RUN_OFFSET;
part[5] = FLASH_4M_FW1_OFFSET;
*p_num = 6;
} else if (FLASH_BENCH_SIZE_2M == info.chip_size) {
part[0] = FLASH_2M_SP_OFFSET;
part[1] = FLASH_2M_SBL_OFFSET;//FLASH_2M_SBL_OFFSET;
part[2] = FLASH_2M_OEM_OFFSET;
part[3] = FLASH_2M_PIB1_OFFSET;
part[4] = FLASH_2M_RUN_OFFSET;
part[5] = FLASH_2M_FW1_OFFSET;
*p_num = 6;
} else if (FLASH_BENCH_SIZE_1M == info.chip_size) {
part[0] = FLASH_1M_SP_OFFSET;
part[1] = FLASH_1M_SBL_OFFSET;
part[2] = FLASH_1M_OEM_OFFSET;
part[3] = FLASH_1M_PIB1_OFFSET;
part[4] = FLASH_1M_FW1_OFFSET;
*p_num = 5;
} else {
*p_num = 0;
}
return;
}
uint32_t flash_bench_get_flash_base_addr(void)
{
return FLASH_BENCH_FLASH_BASE;
}
void flash_bench_get_flash_info(iot_flash_info_t *p_info)
{
uint8_t data[4];
uint32_t chip_size;
if (NULL == p_info) {
return;
}
flash_get_dev_id(data);
p_info->id = data[1] | data[0];
p_info->sec_size = FLASH_DEF_SECTOR_SIZE;
chip_size = flash_get_dev_size();
if (chip_size >= FLASH_8M) {
p_info->chip_size = FLASH_BENCH_SIZE_8M;
} else if (chip_size >= FLASH_4M) {
p_info->chip_size = FLASH_BENCH_SIZE_4M;
} else if (chip_size >= FLASH_2M) {
p_info->chip_size = FLASH_BENCH_SIZE_2M;
} else {
p_info->chip_size = FLASH_BENCH_SIZE_1M;
}
return;
}
void flash_bench_read_contrl(void *data, uint32_t offset, uint32_t size)
{
flash_read(data, offset, (int)size, MOD_SFC_READ_QUAD_IO_FAST);
return;
}
void flash_bench_read_cache(void *data, uint32_t offset, uint32_t size)
{
uint32_t flash_base = flash_bench_get_flash_base_addr();
os_mem_cpy(data, (void *)(flash_base | offset), size);
return;
}
void flash_bench_init(void)
{
flash_init(1);
return;
}

View File

@@ -0,0 +1,53 @@
/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef FLASH_BENCH_H
#define FLASH_BENCH_H
#include "flash.h"
#include "sbl_boot.h"
#include "mtd.h"
#define FLASH_BENCH_SIZE_1M 0x00100000
#define FLASH_BENCH_SIZE_2M (FLASH_BENCH_SIZE_1M << 1)
#define FLASH_BENCH_SIZE_4M (FLASH_BENCH_SIZE_1M << 2)
#define FLASH_BENCH_SIZE_8M (FLASH_BENCH_SIZE_1M << 3)
#define FLASH_BENCH_FLASH_BASE FLASH_BASE_ADDRESS
#define FLASH_DEF_SECTOR_SIZE (SECTOR_ERASE_SIZE) /* TODO , Read from chip. */
#define FLASH_DEF_PAGE_SIZE (PAGE_PROGRAM_SIZE)
typedef struct _bench_flash_infor_t {
uint32_t chip_size;
uint16_t sec_size;
uint16_t id;
}iot_flash_info_t;
void flash_bench_get_flash_image_offset(uint32_t part[], uint32_t *p_num);
uint32_t flash_bench_get_flash_base_addr(void);
void flash_bench_read_contrl(void *data, uint32_t offset, uint32_t size);
void flash_bench_read_cache(void *data, uint32_t offset, uint32_t size);
void flash_bench_get_flash_info(iot_flash_info_t *p_info);
void get_offset_array(uint32_t part,uint8_t data[],uint32_t imglen);
void flash_bench_init(void);
#endif /* FLASH_BENCH_H */

View File

@@ -0,0 +1,135 @@
#include "chip_reg_base.h"
#include "hw_reg_api.h"
#include "iot_bitops.h"
#include "os_lock.h"
#include "iot_config.h"
#include "flash_bench.h"
#include "dbg_io.h"
#include "iot_img_hdr.h"
#include "os_mem.h"
#include "iot_io.h"
#include "flash_bench.h"
#include "crc.h"
#define FLASH_CHECK_PART_MAX 10
#define FLASH_SBL_OFFSET 0x00008000
#define FLASH_SBL_LENGTH 0x00008000
#define FLASH_RUN_OFFSET 0x00020000
#define FLASH_FW1_OFFSET 0x00100000
#define CHECK_NOT_APPLICABLE -1
#define CHECK_SUCCESS 0
#define CHECK_FAILED 1
uint8_t local_cmd_flash_page_buf[FLASH_DEF_PAGE_SIZE];
uint16_t image = 0;
uint32_t image_len = 0;
iot_flash_info_t flash;
int flash_calc_flash_crc(int offset, int len)
{
char *p_buf = (char *)local_cmd_flash_page_buf;
char *sbl_buf = (char *)local_cmd_flash_page_buf;
int page_start, page_end, cnt;
int sbl_cross_param = 0;
int crc_t_len = 0;
unsigned int crc32;
page_start = offset & 0xFFFFFF00;
page_end = (offset + len) & 0xFFFFFF00;
crc32 = 0xFFFFFFFF;
/* Fist page */
flash_bench_read_contrl(p_buf, page_start, FLASH_DEF_PAGE_SIZE);
crc32 = CRC32_Update(crc32, p_buf + (offset & 0xFF),
FLASH_DEF_PAGE_SIZE - (offset & 0xFF));
if (page_start == FLASH_SBL_OFFSET) {
crc_t_len = sbl_cross_param = 0x11000-0x10000;
page_end = (FLASH_SBL_OFFSET + FLASH_SBL_LENGTH) & 0xFFFFFF00;
}
for (cnt = page_start + FLASH_DEF_PAGE_SIZE; cnt < page_end; cnt += FLASH_DEF_PAGE_SIZE) {
flash_bench_read_contrl(p_buf, cnt, FLASH_DEF_PAGE_SIZE);
crc32 = CRC32_Update(crc32, p_buf, FLASH_DEF_PAGE_SIZE);
}
/* Last page */
flash_bench_read_contrl(p_buf, page_end, FLASH_DEF_PAGE_SIZE);
crc32 = CRC32_Update(crc32, p_buf, (offset + len) & 0xFF);
if (page_end == ((FLASH_SBL_OFFSET + FLASH_SBL_LENGTH) & 0xFFFFFF00)) {
while (crc_t_len > 0) {
os_mem_set(sbl_buf, 0x0,FLASH_DEF_PAGE_SIZE);
crc32 = CRC32_Update(crc32,sbl_buf,FLASH_DEF_PAGE_SIZE);
crc_t_len = crc_t_len - FLASH_DEF_PAGE_SIZE;
}
}
return crc32 ^ 0xFFFFFFFF;
}
uint32_t flash_check_image_crc(uint32_t offset)
{
uint32_t calc_crc, img_len;
char buf[HEADER_TOLTAL_SIZE];
imgHdr hdr;
flash_bench_read_contrl(buf, offset, HEADER_TOLTAL_SIZE);
img_header_construct(&hdr, buf);
img_len = iot_imghdr_get_imgSize(&hdr);
image_len = img_len = IMAGE_LEN_FOR_CRC(img_len);
image = iot_imghdr_get_imgType(&hdr);
if ((offset == FLASH_RUN_OFFSET) && (iot_imghdr_get_guard(&hdr) == 0x0)) {
return CHECK_NOT_APPLICABLE;
}
if (IMAGE_GUARD != iot_imghdr_get_guard(&hdr)) {
iot_printf("\r\noffset %08x :IMAGE_GUARD error! hdr.guard:%08x",
offset,hdr.v0.guard);
return CHECK_FAILED;
}
calc_crc = flash_calc_flash_crc(offset + HEADER_TOLTAL_SIZE, img_len);
if (iot_imghdr_get_imgCRC(&hdr) == calc_crc) {
return CHECK_SUCCESS;
} else {
return CHECK_FAILED;
}
}
void flash_start_check_images(void)
{
uint32_t part_offset[FLASH_CHECK_PART_MAX], sub_ret;
uint32_t part_num, i;
flash_bench_get_flash_image_offset(part_offset, &part_num);
if (0 == part_num) {
iot_printf("\r\n: Get flash partitions failed!");
return;
}
for (i = 0; i < part_num; i++) {
sub_ret = flash_check_image_crc(part_offset[i]);
iot_printf("\r\n:Offset = %08x image = %02x image_len = %08x-------",
part_offset[i],image,image_len);
if (sub_ret == CHECK_NOT_APPLICABLE) {
iot_printf("%s\n","N/A");
} else {
iot_printf("%s\n",sub_ret ?"failed" : "passed");
}
}
return;
}
int main(void)
{
dbg_uart_init();
flash_bench_init();
flash_bench_get_flash_info(&flash);
iot_printf("\r\n: Flash ID#%04x, chip size#%08x.",
flash.id, flash.chip_size);
flash_start_check_images();
return 0;
}