2 Комити b261e807b5 ... cd54f2fb2e

Аутор SHA1 Порука Датум
  helen cd54f2fb2e 更新MCU工程(iram版本和sram-nos版本) пре 3 месеци
  helen 2905ec4e8d 更新CPU工程 пре 3 месеци

+ 2 - 3
amt630hv160-freertos-beta/ArkmicroFiles/libboard-amt630hv160/source/ota_update.c

@@ -366,7 +366,6 @@ static int MediaUpdateMCU(const char *ufile, int filetype)
 	uint32_t filesize;
 	MailboxUpdateFrame tx_frame = {0};
 	MailboxUpdateFrame *rx_frame = NULL;
-	uint32_t ddr_crc = 0, flash_crc = 0;
 	mb_rxmsg_t msg = {0};
 
 	fp = ff_fopen(ufile, "rb");
@@ -376,7 +375,7 @@ static int MediaUpdateMCU(const char *ufile, int filetype)
 	}
 
 	leftsize = filesize = ff_filelength(fp);
-	if (filesize > DDR_MEDIA_USE_ADDR) {
+	if (filesize > DDR_MEDIA_USE_SIZE) {
 		printf("The file is too large, not enough space to save.\n");
 		goto MediaUpdateEnd;
 	}
@@ -667,7 +666,7 @@ static int burn_update_file(int filetype, const char *ufile, size_t fileoffset,
 #ifdef UPDATE_PROGRESS_SUPPORT
 		if (show_progress) {
 			upfile_left_size -= rwsize;
-			update_progress_set((upfile_total_size - upfile_left_size) * 100 / upfile_total_size);
+			update_progress_set(((u64)upfile_total_size - upfile_left_size) * 100 / upfile_total_size);
 		}
 #endif
 		if (!show_progress) {

+ 37 - 0
amt630hv160-mcu/amt630hv160-mcu-iram/src/App/loader_cpu.c

@@ -8,6 +8,11 @@
 #include "mailbox_message.h"
 
 
+/*
+	打开CHECK_CPU_SUPPORT宏定义会影响动画、UI首帧时间,
+	cpuapp程序为(x)KB, 耗时约(0.09 * x)ms.
+*/
+//#define CHECK_CPU_SUPPORT
 #define APPLDR_CHECKSUM_OFFSET	20
 #define UPDATE_BUF_SIZE			(1024 * 128)
 
@@ -261,6 +266,32 @@ static void LoadCpuLoader(void)
 #endif
 }
 
+#ifdef CHECK_CPU_SUPPORT
+static int CheckCpuProgram(void)
+{
+	SysInfo *sysinfo = GetSysInfo();
+	u32 checksum;
+
+	checksum = *(uint32_t*)(CPU_IRAM_BASE + APPLDR_CHECKSUM_OFFSET);
+	*(uint32_t*)(CPU_IRAM_BASE + APPLDR_CHECKSUM_OFFSET) = 0;
+
+	if (checksum != xcrc32((void *)CPU_IRAM_BASE, sysinfo->loader_size, 0xFFFFFFFF, HARD_CALC_CRC)) {
+		printf("%s,cpuldr checksum error.\n", __func__);
+		return -1;
+	}
+
+	checksum = *(uint32_t*)(DDR_BASE + APPLDR_CHECKSUM_OFFSET);
+	*(uint32_t*)(DDR_BASE + APPLDR_CHECKSUM_OFFSET) = 0;
+
+	if (checksum != xcrc32((void *)DDR_BASE, sysinfo->app_size, 0xFFFFFFFF, HARD_CALC_CRC)) {
+		printf("%s,cpuapp checksum error.\n", __func__);
+		return -1;
+	}
+
+	return 0;
+}
+#endif
+
 void StartCpu(void)
 {
 #ifndef APP_FOR_BURN
@@ -273,6 +304,12 @@ void StartCpu(void)
 
 	SaveChipInfoForCpu();
 	LoadCpuLoader();
+
+#ifdef CHECK_CPU_SUPPORT
+	if (CheckCpuProgram())
+		return;
+#endif
+
 	SelCpuPadConfig();
 
 	//*(volatile uint32_t *)0x20000000 = 0xeafffffe;			// a7 while(1) debug cpu

+ 38 - 0
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/App/loader_cpu.c

@@ -7,6 +7,12 @@
 #include "fs/diskio.h"
 #include "mailbox_message.h"
 
+/*
+	打开CHECK_CPU_SUPPORT宏定义会影响动画、UI首帧时间,
+	cpuapp程序为(x)KB, 耗时约(0.37 * x)ms.
+*/
+//#define CHECK_CPU_SUPPORT
+#define APPLDR_CHECKSUM_OFFSET	20
 
 u8 cpu_running = 0;
 u8 cpu_access_status = 0;
@@ -258,6 +264,32 @@ static void LoadCpuLoader(void)
 #endif
 }
 
+#ifdef CHECK_CPU_SUPPORT
+static int CheckCpuProgram(void)
+{
+	SysInfo *sysinfo = GetSysInfo();
+	u32 checksum;
+
+	checksum = *(uint32_t*)(CPU_IRAM_BASE + APPLDR_CHECKSUM_OFFSET);
+	*(uint32_t*)(CPU_IRAM_BASE + APPLDR_CHECKSUM_OFFSET) = 0;
+
+	if (checksum != xcrc32((void *)CPU_IRAM_BASE, sysinfo->loader_size, 0xFFFFFFFF, HARD_CALC_CRC)) {
+		printf("%s,cpuldr checksum error.\n", __func__);
+		return -1;
+	}
+
+	checksum = *(uint32_t*)(DDR_BASE + APPLDR_CHECKSUM_OFFSET);
+	*(uint32_t*)(DDR_BASE + APPLDR_CHECKSUM_OFFSET) = 0;
+
+	if (checksum != xcrc32((void *)DDR_BASE, sysinfo->app_size, 0xFFFFFFFF, HARD_CALC_CRC)) {
+		printf("%s,cpuapp checksum error.\n", __func__);
+		return -1;
+	}
+
+	return 0;
+}
+#endif
+
 void StartCpu(void)
 {
 	/* DDR Init*/
@@ -268,6 +300,12 @@ void StartCpu(void)
 
 	SaveChipInfoForCpu();
 	LoadCpuLoader();
+
+#ifdef CHECK_CPU_SUPPORT
+	if (CheckCpuProgram())
+		return;
+#endif
+
 	SelCpuPadConfig();
 	//*(volatile uint32_t *)0x20000000 = 0xeafffffe;			// a7 while(1) debug cpu