Просмотр исходного кода

更新MCU工程Spi Nand Flash驱动
1. 优化初始化时分区校验逻辑。
2. 修复CPU APP从B分区启动,SNFUD校验失败无法启动问题。

helen 6 дней назад
Родитель
Сommit
cdf7e0fcd3

+ 2 - 0
amt630hv160-mcu/amt630hv160-mcu-iram/src/amt630hv160_conf.h

@@ -397,6 +397,7 @@
 #define CPU_LOADERB_OFFSET			0x1300000
 #define CPU_LOADER_MAX_SIZE			0x8000
 #define CPU_APPA_OFFSET				0x1400000
+#define CPU_APPB_OFFSET				0x3A00000	//需与CPU工程board.h中APPFILE_B_OFFSET对应
 #define CPU_APP_MAX_SIZE			0x1000000
 #elif CPU_DEVICE_TYPE_SELECT == EMMC_FLASH
 //CPU的升级文件存放在EMMC中
@@ -429,6 +430,7 @@
 #define CPU_LOADERB_OFFSET			0x1300000
 #define CPU_LOADER_MAX_SIZE			0x8000
 #define CPU_APPA_OFFSET				0x1400000
+#define CPU_APPB_OFFSET				0x3A00000	//需与CPU工程board.h中APPFILE_B_OFFSET对应
 #define CPU_APP_MAX_SIZE			0x1000000
 #elif DEVICE_TYPE_SELECT == EMMC_FLASH
 #define HEADERA_OFFSET				0x0

+ 3 - 2
amt630hv160-mcu/amt630hv160-mcu-iram/src/lib/sfud/src/snfud.c

@@ -116,7 +116,8 @@ static snf_part_info snf_partition_info[] = {
 	{CPU_SYSINFOB_OFFSET,	CPU_SYSINFOB_OFFSET - CPU_SYSINFOA_OFFSET},
 	{CPU_LOADERA_OFFSET,	CPU_LOADERB_OFFSET - CPU_LOADERA_OFFSET},
 	{CPU_LOADERB_OFFSET,	CPU_LOADERB_OFFSET - CPU_LOADERA_OFFSET},
-	{CPU_APPA_OFFSET,		CPU_APP_MAX_SIZE}
+	{CPU_APPA_OFFSET,		CPU_APP_MAX_SIZE},
+	{CPU_APPB_OFFSET,		CPU_APP_MAX_SIZE}
 };
 
 /* ../port/sfup_port.c */
@@ -1796,7 +1797,7 @@ static sfud_err snf_partition_check(snfud_flash_chip *chip)
 			return SFUD_ERR_NOT_FOUND;
 		}
 		if (i > 0) {
-			if (part[i-1].addr + part[i-1].size != part[i].addr) {
+			if (part[i-1].addr + part[i-1].size > part[i].addr) {
 				if (part[i].addr != CPU_SYSINFOA_OFFSET) {
 					SFUD_INFO("%s Invalid partition(%d) addr or size.", __func__, i);
 					return SFUD_ERR_NOT_FOUND;

+ 2 - 0
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/amt630hv160_conf.h

@@ -406,6 +406,7 @@
 #define CPU_LOADERB_OFFSET			0x1300000
 #define CPU_LOADER_MAX_SIZE			0x8000
 #define CPU_APPA_OFFSET				0x1400000
+#define CPU_APPB_OFFSET				0x3A00000	//需与CPU工程board.h中APPFILE_B_OFFSET对应
 #define CPU_APP_MAX_SIZE			0x1000000
 #elif CPU_DEVICE_TYPE_SELECT == EMMC_FLASH
 //CPU的升级文件存放在EMMC中
@@ -438,6 +439,7 @@
 #define CPU_LOADERB_OFFSET			0x1300000
 #define CPU_LOADER_MAX_SIZE			0x8000
 #define CPU_APPA_OFFSET				0x1400000
+#define CPU_APPB_OFFSET				0x3A00000	//需与CPU工程board.h中APPFILE_B_OFFSET对应
 #define CPU_APP_MAX_SIZE			0x1000000
 #elif DEVICE_TYPE_SELECT == EMMC_FLASH
 #define HEADERA_OFFSET				0x0

+ 3 - 2
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/lib/sfud/src/snfud.c

@@ -110,7 +110,8 @@ static snf_part_info snf_partition_info[] = {
 	{CPU_SYSINFOB_OFFSET,	CPU_SYSINFOB_OFFSET - CPU_SYSINFOA_OFFSET},
 	{CPU_LOADERA_OFFSET,	CPU_LOADERB_OFFSET - CPU_LOADERA_OFFSET},
 	{CPU_LOADERB_OFFSET,	CPU_LOADERB_OFFSET - CPU_LOADERA_OFFSET},
-	{CPU_APPA_OFFSET,		CPU_APP_MAX_SIZE}
+	{CPU_APPA_OFFSET,		CPU_APP_MAX_SIZE},
+	{CPU_APPB_OFFSET,		CPU_APP_MAX_SIZE}
 };
 
 /* ../port/sfup_port.c */
@@ -1790,7 +1791,7 @@ static sfud_err snf_partition_check(snfud_flash_chip *chip)
 			return SFUD_ERR_NOT_FOUND;
 		}
 		if (i > 0) {
-			if (part[i-1].addr + part[i-1].size != part[i].addr) {
+			if (part[i-1].addr + part[i-1].size > part[i].addr) {
 				if (part[i].addr != CPU_SYSINFOA_OFFSET) {
 					SFUD_INFO("%s Invalid partition(%d) addr or size.", __func__, i);
 					return SFUD_ERR_NOT_FOUND;