Selaa lähdekoodia

更新MCU-iram工程
1.烧录dcic资源文件时,将烧录偏移地址保存在headeroff中,以便进行统一管理。
2.加载dcic资源文件时,先从headeroff中获取资源文件的偏移地址,然后进行加载。
更新MCU-sram-nos工程
1.加载dcic资源文件时,先从headeroff中获取资源文件的偏移地址,然后进行加载。

helen 2 kuukautta sitten
vanhempi
commit
c6e1192665

+ 38 - 31
amt630hv160-mcu/amt630hv160-mcu-iram/src/App/osdtest.c

@@ -17,14 +17,6 @@
 #include "update.h"
 #include "sfud.h"
 
-u8 compblk, crcblk;
-typedef struct image_info {
-	u32 addr;
-	u32 size;
-	u32 width;
-	u32 height;
-} IMAGE_INFO;
-
 #define IMG_NUMBS	52
 
 #define	IMG_ICON_01	0
@@ -80,6 +72,16 @@ typedef struct image_info {
 #define	IMG_ICON_51	50
 #define	IMG_ICON_52	51
 
+#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
+
+typedef struct image_info {
+	u32 addr;
+	u32 size;
+	u32 width;
+	u32 height;
+} IMAGE_INFO;
+
+u8 compblk, crcblk;
 IMAGE_INFO images[IMG_NUMBS] = {
 	{0x00000000, 0x00000670, 0x00000046, 0x00000078},
 	{0x00000670, 0x000003b0, 0x00000046, 0x00000078},
@@ -135,58 +137,63 @@ IMAGE_INFO images[IMG_NUMBS] = {
 	{0x0000f860, 0x00000018, 0x00000032, 0x00000032}
 };
 
-#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
-
 int osd_loadres(void)
 {
-	RomHeader *rmh = NULL;
+	RomHeader rmh;
 	u32 *palette;
 	u32 palsize;
 	u32 crcval, crccalc;
-
-	rmh = (RomHeader *)ROM_FILE_ADDR;//OSD_DATA_RAM_ADDR;
-	UPDATE_ReadData(DCIC_ROM_OFFSETA, rmh, sizeof(RomHeader));
-	if (rmh->magic != MKTAG('R', 'O', 'M', 'A') || rmh->pal_num > 2
-		|| rmh->size > rmh->pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
-		UPDATE_ReadData(DCIC_ROM_OFFSETB, &rmh, sizeof(RomHeader));
-		if (rmh->magic != MKTAG('R', 'O', 'M', 'A') || rmh->pal_num > 2
-			|| rmh->size > rmh->pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
+	header_offset_t *hoff = GetHeaderOff();
+	u32 offset = hoff->roffset;
+
+	UPDATE_ReadData(offset, &rmh, sizeof(RomHeader));
+	if (rmh.magic != MKTAG('R', 'O', 'M', 'A') || rmh.pal_num > 2
+		|| rmh.size > rmh.pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
+		offset = (hoff->roffset == DCIC_ROM_OFFSETA) ? DCIC_ROM_OFFSETB : DCIC_ROM_OFFSETA;
+		UPDATE_ReadData(offset, &rmh, sizeof(RomHeader));
+		if (rmh.magic != MKTAG('R', 'O', 'M', 'A') || rmh.pal_num > 2
+			|| rmh.size > rmh.pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
 			printf("invalide romheader.\n");
 			return -1;
 		}
 	}
 
-	palsize = rmh->pal_num * PALETTE_DATA_SIZE;
-	palette =(u32 *)(ROM_FILE_ADDR+sizeof(RomHeader));
+	palsize = rmh.pal_num * PALETTE_DATA_SIZE;
+	palette = pvPortMalloc(palsize);
+	if (!palette) {
+		printf("%s read palette fail.\n", __func__);
+		return -1;
+	}
 
 	OSD_SetRAMAccessByCPU();
-	UPDATE_ReadData(DCIC_ROM_OFFSETA + sizeof(RomHeader), (void*)palette, palsize);
-	UPDATE_ReadData(DCIC_ROM_OFFSETA + sizeof(RomHeader) + palsize, (void*)OSD_DATA_RAM_ADDR, rmh->size - palsize);
+	UPDATE_ReadData(offset + sizeof(RomHeader), (void *)palette, palsize);
+	UPDATE_ReadData(offset + sizeof(RomHeader) + palsize, (void *)OSD_DATA_RAM_ADDR, rmh.size - palsize);
 
-	crcval = rmh->checksum;
-	rmh->checksum = 0;
-	crccalc = xcrc32(rmh, sizeof(RomHeader), 0xffffffff, HARD_CALC_CRC);
+	crcval = rmh.checksum;
+	rmh.checksum = 0;
+	crccalc = xcrc32(&rmh, sizeof(RomHeader), 0xffffffff, HARD_CALC_CRC);
 	crccalc = xcrc32(palette, palsize, crccalc, HARD_CALC_CRC);
-	crccalc = xcrc32((void*)OSD_DATA_RAM_ADDR, rmh->size - palsize, crccalc, HARD_CALC_CRC);
+	crccalc = xcrc32((void *)OSD_DATA_RAM_ADDR, rmh.size - palsize, crccalc, HARD_CALC_CRC);
 	if (crccalc != crcval) {
-		printf("crc check fail.\n");
+		vPortFree(palette);
+		printf("%s crc check fail.\n", __func__);
 		return -1;
 	}
 
 	OSD_SetPalette(OSD_PALETTE0, palette, 256);
-	if (rmh->pal_num == 1)
+	if (rmh.pal_num == 1)
 		OSD_SetPalette(OSD_PALETTE1, palette, 256);
 	else
 		OSD_SetPalette(OSD_PALETTE1, palette + PALETTE_DATA_SIZE / 4, 256);
 
 	OSD_SetRAMAccessByOSD();
+	vPortFree(palette);
 
 	return 0;
 }
 
 void osd_display_image(IMAGE_INFO *image, u32 blk, u32 cx, u32 cy)
 {
-	//image->addr += osd_addr;
 	OSD_SetBlkSize(blk, image->width, image->height);
 	OSD_SetBlkPos(blk, cx, cy);
 	OSD_SetBlkAddr(blk, image->addr >> 2);
@@ -197,7 +204,7 @@ void osd_display(void)
 {
 	u32 osd_odd_even_mode = 0;
 	u32 hsync_src_sel = 0;
-	u32 osd_bright	= 0x80;
+	u32 osd_bright = 0x80;
 	u32 w, h, blk;
 	int i;
 	u32 power, speed, battery, oil;

+ 18 - 6
amt630hv160-mcu/amt630hv160-mcu-iram/src/App/update.c

@@ -349,6 +349,8 @@ u32 UPDATE_GetUpfileAddr(int filetype)
 		return (hoff->offset == IMAGEA_OFFSET) ? IMAGEB_OFFSET : IMAGEA_OFFSET;
 	} else if (filetype == UPFILE_TYPE_MCU_FB) {
 		return (hoff->fboffset == FASTBOOTA_OFFSET) ? FASTBOOTB_OFFSET : FASTBOOTA_OFFSET;
+	} else if (filetype == UPFILE_TYPE_MCU_DCIC) {
+		return (hoff->roffset == DCIC_ROM_OFFSETA) ? DCIC_ROM_OFFSETB : DCIC_ROM_OFFSETA;
 	}
 
 	return 0xffffffff;
@@ -700,32 +702,42 @@ u32 UPDATE_CheckDcicRom(u32 rom_addr)
 	u32 crcval, crccalc;
 	u32 palsize;
 	u32 raddr = rom_addr;
+
 	UPDATE_ReadData(raddr, &rmh, sizeof(RomHeader));
 	if (rmh.magic != MKTAG('R', 'O', 'M', 'A') || rmh.pal_num > 2
 		|| rmh.size > rmh.pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
-		printf("invalide romheader.\n");
+		printf("%s invalid romheader.\n", __func__);
 		return -1;
 	}
 
 	palsize = rmh.pal_num * PALETTE_DATA_SIZE;
+	if (!palsize || (rmh.size < palsize)) {
+		printf("%s invalid palsize= %d or rmh.size = %d.\n", __func__, palsize, rmh.size);
+		return -1;
+	}
+
 	palette = pvPortMalloc(palsize);
-	if (!palette)
+	if (!palette) {
+		printf("%s read palette fail.\n", __func__);
 		return -1;
+	}
 
-	UPDATE_ReadData(raddr + sizeof(RomHeader), (void*)palette, palsize);
-	UPDATE_ReadData(raddr + sizeof(RomHeader) + palsize, (void*)OSD_DATA_RAM_ADDR, rmh.size - palsize);
+	UPDATE_ReadData(raddr + sizeof(RomHeader), (void *)palette, palsize);
+	UPDATE_ReadData(raddr + sizeof(RomHeader) + palsize, (void *)OSD_DATA_RAM_ADDR, rmh.size - palsize);
 
 	crcval = rmh.checksum;
 	rmh.checksum = 0;
 	crccalc = xcrc32(&rmh, sizeof(RomHeader), 0xffffffff, HARD_CALC_CRC);
 	crccalc = xcrc32(palette, palsize, crccalc, HARD_CALC_CRC);
-	crccalc = xcrc32((void*)OSD_DATA_RAM_ADDR, rmh.size - palsize, crccalc, HARD_CALC_CRC);
+	crccalc = xcrc32((void *)OSD_DATA_RAM_ADDR, rmh.size - palsize, crccalc, HARD_CALC_CRC);
 	if (crccalc != crcval) {
-		printf("crc check fail.\n");
+		vPortFree(palette);
+		printf("%s crc check fail.\n", __func__);
 		return -1;
 	}
 
 	vPortFree(palette);
+
 	return 0;
 }
 

+ 3 - 1
amt630hv160-mcu/amt630hv160-mcu-iram/src/App/update.h

@@ -35,6 +35,7 @@ typedef enum {
 	UPFILE_TYPE_ROM,
 	UPFILE_TYPE_MCU_IMAGE,
 	UPFILE_TYPE_MCU_FB,				/* fastboot */
+	UPFILE_TYPE_MCU_DCIC,
 	UPFILE_TYPE_NUM,
 } eUpfileType;
 
@@ -48,7 +49,8 @@ typedef struct header_offset {
 	u32 pagesize;
 	u32 pagespblock;
 	u32 fboffset;
-	u32 reserved[2];
+	u32 roffset;
+	u32 reserved;
 	u32 crc;
 } header_offset_t;
 

+ 1 - 1
amt630hv160-mcu/amt630hv160-mcu-iram/src/amt630hv160_conf.h

@@ -127,7 +127,7 @@
 #define PALETTE_DATA_SIZE	0x400
 #define MAX_OSDDATA_SIZE	0x80000
 #define OSD_DATA_RAM_ADDR	0x20280000
-#define ROM_FILE_ADDR		0x20200000
+
 /************************************* ADC ************************************/
 #define _ADC
 #define _ADC0

+ 15 - 16
amt630hv160-mcu/amt630hv160-mcu-iram/src/main.c

@@ -264,7 +264,7 @@ static int BurnImage(eUpdateMedia umedia)
 #ifdef DCIC_FAULT_DETECT
 static int BurnDcicRom(eUpdateMedia umedia)
 {
-	FRESULT  fret;
+	FRESULT fret;
 	FIL fp = {0};
 	UINT size;
 	u8 *filebuf;
@@ -272,11 +272,14 @@ static int BurnDcicRom(eUpdateMedia umedia)
 	char filename[64];
 	FILINFO fileinfo = {0};
 	u32 alignsize;
+	header_offset_t *hoff = GetHeaderOff();
+	u32 offset;
 
 	if (umedia == UM_USB)
 		strcpy(drvpath, DRVPATH(DRV_USB));
 	else if (umedia == UM_SD)
 		strcpy(drvpath, DRVPATH(DRV_SDMMC));
+
 	strcpy(filename, drvpath);
 	strcat(filename, "dcicrom.bin");
 
@@ -306,35 +309,31 @@ static int BurnDcicRom(eUpdateMedia umedia)
 	}
 
 	fret = f_read(&fp, filebuf, fileinfo.fsize, &size);
-	if(fret != FR_OK) {
-		printf("Read file fail! fret=%d\n", fret);
+	if (fret != FR_OK) {
+		printf("Read file fail! fret = %d\n", fret);
 		f_close(&fp);
 		vPortFree(filebuf);
 		return -1;
 	}
 
-	UPDATE_EraseData(DCIC_ROM_OFFSETA,DCIC_ROM_MAX_SIZE);
+	offset = UPDATE_GetUpfileAddr(UPFILE_TYPE_MCU_DCIC);
+	UPDATE_EraseData(offset, DCIC_ROM_MAX_SIZE);
 	alignsize = (fileinfo.fsize + 3) & ~3;
-	UPDATE_WriteData(DCIC_ROM_OFFSETA, filebuf, alignsize);
-
-	if (UPDATE_CheckDcicRom(DCIC_ROM_OFFSETA)) {
-		printf("UPDATE_CheckDcicRom fail\n");
-		return -1;
-	}
+	UPDATE_WriteData(offset, filebuf, alignsize);
 
-	UPDATE_EraseData(DCIC_ROM_OFFSETB,DCIC_ROM_MAX_SIZE);
-	UPDATE_WriteData(DCIC_ROM_OFFSETB, filebuf, alignsize);
-	if (UPDATE_CheckDcicRom(DCIC_ROM_OFFSETB)) {
+	if (UPDATE_CheckDcicRom(offset)) {
+		vPortFree(filebuf);
 		printf("UPDATE_CheckDcicRom fail\n");
 		return -1;
-	}else{
-		printf("UPDATE_CheckDcicRom ok\n");
 	}
 
+	hoff->roffset = offset;
+	SaveHeaderOff();
+	printf("Update Dcicrom ok\n");
 	f_close(&fp);
 	vPortFree(filebuf);
-	return 0;
 
+	return 0;
 }
 #endif
 

+ 37 - 30
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/App/osdtest.c

@@ -16,14 +16,6 @@
 #include "amt630hv160_lib.h"
 #include "update.h"
 #include "sfud.h"
-u8 compblk, crcblk;
-
-typedef struct image_info {
-	u32 addr;
-	u32 size;
-	u32 width;
-	u32 height;
-} IMAGE_INFO;
 
 #define IMG_NUMBS	52
 
@@ -80,6 +72,16 @@ typedef struct image_info {
 #define	IMG_ICON_51	50
 #define	IMG_ICON_52	51
 
+#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
+
+typedef struct image_info {
+	u32 addr;
+	u32 size;
+	u32 width;
+	u32 height;
+} IMAGE_INFO;
+
+u8 compblk, crcblk;
 IMAGE_INFO images[IMG_NUMBS] = {
 	{0x00000000, 0x00000670, 0x00000046, 0x00000078},
 	{0x00000670, 0x000003b0, 0x00000046, 0x00000078},
@@ -135,58 +137,63 @@ IMAGE_INFO images[IMG_NUMBS] = {
 	{0x0000f860, 0x00000018, 0x00000032, 0x00000032}
 };
 
-#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
-
 int osd_loadres(void)
 {
-	RomHeader *rmh = NULL;
+	RomHeader rmh;
 	u32 *palette;
 	u32 palsize;
 	u32 crcval, crccalc;
-
-	rmh = (RomHeader *)ROM_FILE_ADDR;//OSD_DATA_RAM_ADDR;
-	UPDATE_ReadData(DCIC_ROM_OFFSETA, rmh, sizeof(RomHeader));
-	if (rmh->magic != MKTAG('R', 'O', 'M', 'A') || rmh->pal_num > 2
-		|| rmh->size > rmh->pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
-		UPDATE_ReadData(DCIC_ROM_OFFSETB, &rmh, sizeof(RomHeader));
-		if (rmh->magic != MKTAG('R', 'O', 'M', 'A') || rmh->pal_num > 2
-			|| rmh->size > rmh->pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
+	header_offset_t *hoff = GetHeaderOff();
+	u32 offset = hoff->roffset;
+
+	UPDATE_ReadData(offset, &rmh, sizeof(RomHeader));
+	if (rmh.magic != MKTAG('R', 'O', 'M', 'A') || rmh.pal_num > 2
+		|| rmh.size > rmh.pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
+		offset = (hoff->roffset == DCIC_ROM_OFFSETA) ? DCIC_ROM_OFFSETB : DCIC_ROM_OFFSETA;
+		UPDATE_ReadData(offset, &rmh, sizeof(RomHeader));
+		if (rmh.magic != MKTAG('R', 'O', 'M', 'A') || rmh.pal_num > 2
+			|| rmh.size > rmh.pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
 			printf("invalide romheader.\n");
 			return -1;
 		}
 	}
 
-	palsize = rmh->pal_num * PALETTE_DATA_SIZE;
-	palette =(u32 *)(ROM_FILE_ADDR+sizeof(RomHeader));
+	palsize = rmh.pal_num * PALETTE_DATA_SIZE;
+	palette = pvPortMalloc(palsize);
+	if (!palette) {
+		printf("%s read palette fail.\n", __func__);
+		return -1;
+	}
 
 	OSD_SetRAMAccessByCPU();
-	UPDATE_ReadData(DCIC_ROM_OFFSETA + sizeof(RomHeader), (void*)palette, palsize);
-	UPDATE_ReadData(DCIC_ROM_OFFSETA + sizeof(RomHeader) + palsize, (void*)OSD_DATA_RAM_ADDR, rmh->size - palsize);
+	UPDATE_ReadData(offset + sizeof(RomHeader), (void *)palette, palsize);
+	UPDATE_ReadData(offset + sizeof(RomHeader) + palsize, (void *)OSD_DATA_RAM_ADDR, rmh.size - palsize);
 
-	crcval = rmh->checksum;
-	rmh->checksum = 0;
-	crccalc = xcrc32(rmh, sizeof(RomHeader), 0xffffffff, HARD_CALC_CRC);
+	crcval = rmh.checksum;
+	rmh.checksum = 0;
+	crccalc = xcrc32(&rmh, sizeof(RomHeader), 0xffffffff, HARD_CALC_CRC);
 	crccalc = xcrc32(palette, palsize, crccalc, HARD_CALC_CRC);
-	crccalc = xcrc32((void*)OSD_DATA_RAM_ADDR, rmh->size - palsize, crccalc, HARD_CALC_CRC);
+	crccalc = xcrc32((void *)OSD_DATA_RAM_ADDR, rmh.size - palsize, crccalc, HARD_CALC_CRC);
 	if (crccalc != crcval) {
-		printf("crc check fail.\n");
+		vPortFree(palette);
+		printf("%s crc check fail.\n", __func__);
 		return -1;
 	}
 
 	OSD_SetPalette(OSD_PALETTE0, palette, 256);
-	if (rmh->pal_num == 1)
+	if (rmh.pal_num == 1)
 		OSD_SetPalette(OSD_PALETTE1, palette, 256);
 	else
 		OSD_SetPalette(OSD_PALETTE1, palette + PALETTE_DATA_SIZE / 4, 256);
 
 	OSD_SetRAMAccessByOSD();
+	vPortFree(palette);
 
 	return 0;
 }
 
 void osd_display_image(IMAGE_INFO *image, u32 blk, u32 cx, u32 cy)
 {
-	//image->addr += osd_addr;
 	OSD_SetBlkSize(blk, image->width, image->height);
 	OSD_SetBlkPos(blk, cx, cy);
 	OSD_SetBlkAddr(blk, image->addr >> 2);

+ 3 - 1
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/App/update.h

@@ -35,6 +35,7 @@ typedef enum {
 	UPFILE_TYPE_ROM,
 	UPFILE_TYPE_MCU_IMAGE,
 	UPFILE_TYPE_MCU_FB,				/* fastboot */
+	UPFILE_TYPE_MCU_DCIC,
 	UPFILE_TYPE_NUM,
 } eUpfileType;
 
@@ -48,7 +49,8 @@ typedef struct header_offset {
 	u32 pagesize;
 	u32 pagespblock;
 	u32 fboffset;
-	u32 reserved[2];
+	u32 roffset;
+	u32 reserved;
 	u32 crc;
 } header_offset_t;
 

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

@@ -87,7 +87,6 @@
 #define PALETTE_DATA_SIZE	0x400
 #define MAX_OSDDATA_SIZE	0x80000
 #define OSD_DATA_RAM_ADDR	0x20280000
-#define ROM_FILE_ADDR		0x20200000
 
 /************************************* DMA ************************************/
 //#define _DMA