⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 command.c

📁 LPC2220的Bootloader自己写的,和 周立功的模版实现完全不一样
💻 C
📖 第 1 页 / 共 2 页
字号:
    printf("Current MCLK = %dHz, mdiv = %d, pdiv = %d, sdiv = %d\n\n",(MCLK),mdiv,pdiv,sdiv);
    return 0;
}

int ResetBoard(int argc, char *argv[])
{
	SystemReset();
	return 0;
}

int ModifyReg(int argc, char *argv[])
{
    char key;
    unsigned int tempvalue;
        
    if(argc < 3)
    {
 		puts("Usage: modadd <memAdd> <memNewValue>\n");
		puts("Version:  V1.0    by chenjun 2005.4.8\n\n");
		return 1;
    }
    tempvalue = (unsigned int)strtoul(argv[1]);
    tempvalue &= 0xfffffffc;
    printf("\nadd 0x%.8x value = 0x%.8x\nuse new value,are you sure?[y/n]",tempvalue,*((unsigned int *)tempvalue));
    
    while(1)
	{
		if(kbhit())
		{
			key = getkey();
			if(key=='y'||key=='Y')
			{
				putch(key);
				putch('\n');
				break;
			}
			if(key=='n'||key=='N')
			{
				putch(key);
				putch('\n');
				return 0;
			}				
		}
	}
    *((unsigned int *)(strtoul(argv[1]))) = (unsigned int)(strtoul(argv[2]));
    printf("add 0x%.8x new value = 0x%.8x\n\n",tempvalue,*((unsigned int *)tempvalue));    
    
    return 0;
}

int Batch(int argc, char *argv[])
{
    unsigned int start,load_addr,time_out;
	char command[MAX_CMD_LEN];
	unsigned int i;
	unsigned int batchfilelen,temploop;
	char key;
    
	if(argc < 2)
    {
        puts("\nArguments no match!\n");
		puts("Usage: batch <RamStartAdd>\n");
		puts("Version:  V1.0    by chenjun 2005.5.10\n\n");
		return 1;
	}
	 
	start = (unsigned int)(strtoul(argv[1]));	
	load_addr = start;
	
	printf("download batch file to @0x%x\n", load_addr);	
	time_out = 0xffffffff;	
	do{
		if(kbhit())
		{
			*((unsigned char *)load_addr++) = getkey();
			time_out = 0x10000;
		}
	  }while(--time_out);
	
	puts("Received Batch File is Complete!\n");

    batchfilelen = load_addr-start;
	i = 0;
	
	puts("\nRun Batch File?[y/n]");
    while(1)
	{
		if(kbhit())
		{
			key = getkey();
			if(key=='y'||key=='Y')
			{
				putch(key);
				putch('\n');
				break;
			}
			if(key=='n'||key=='N')
			{
				putch(key);
				putch('\n');
				return 0;
			}				
		}
	} 
    
	for(temploop=0;temploop < batchfilelen;temploop++)
	{
	    key = *((char *)(temploop + start));
	    if(key != '\n')
	    {
    		if(key == '\r')
    		{
    			int tmp;
    			command[i] = 0;
    			putch('\n');
    			tmp = ParseCmd(command, i);
    			if(tmp<0)
    				puts("Bad command\n");
    			i = 0;
    		}
    		else
    		{
    			if(i<MAX_CMD_LEN-1)
    			{
    				command[i++] = key;
    				putch(key);
    			}
    			
    		}
		}
		else
		{
    		i=0;
    		command[i] = 0;
		}
		if(kbhit())
		{
			key = getkey();
			if(key=='q'||key=='Q')
			{
				puts("User interrupt batch!\n");
				return 0;
			}
		}
	}
	putch('\n');
	return 0;
}

int DelayTime(int argc, char *argv[])
{
    Delay((unsigned int)strtoul(argv[1]));
    return 0;
}

int RDFlash(int argc, char *argv[])
{
	unsigned int PFadd;
	unsigned int SDadd;
	unsigned int RDsize;
    
    if(argc < 4)
    {
 		puts("Usage: rdpf <FlashStartAdd> <SdramStartAdd> <Size>\n");
		puts("Version:  V1.0    by chenjun 2005.6.7\n\n");
		return 1;
    }
    
	PFadd = (unsigned int)strtoul(argv[1]);
	SDadd = (unsigned int)strtoul(argv[2]);
	RDsize = (unsigned int)strtoul(argv[3]);
	printf("\nPfadd = 0x%.8x,SDadd = 0x%.8x,RDsize = 0x%x\n\n",PFadd,SDadd,RDsize);
	Delay(10000);
	FlashRead(PFadd,SDadd,RDsize);
	
	return 0;
}

int EraseFlashChip(int argc, char *argv[])
{
	unsigned char i;
	unsigned int k;
	char key;
	
	puts("All data in flash will be lost, are you sure? [y/n]");
    	
    while(1)
    	{
    		if(kbhit())
    		{
    			key = getkey();
    			if(key=='y'||key=='Y')
    			{
    				putch(key);
    				putch('\n');
    				break;
    			}
    			if(key=='n'||key=='N')
    			{
    				putch(key);
    				putch('\n');
    				return 0;
    			}				
    		}
    	}	
    	
	i = ChipErase();
	if(i)
		{return 1;}	
	puts("Start BlockCheck,please wait...");
	for(k=0;k<0x100000;k++)
	{
		if((*((unsigned short *)(ROM_BASE + (k<<1)))) != 0xffff)
		{
			puts("\nBlockCheck Failed!Erase NorFlash Failed!\n\n");
			return 1;
		}
	}
	puts("Successfully!\n\n");
	return i;
}

int ProgFlash(int argc, char *argv[])
{
	unsigned int PFadd;
	unsigned int SDadd;
	unsigned int RDsize;
	unsigned char i;
    
    if(argc < 4)
    {
 
		puts("Usage: progpf <FlashStartAdd> <SdramStartAdd> <Size>\n");
		puts("Version:  V1.0    by chenjun 2005.6.7\n\n");
		return 1;
    }
    
	PFadd = (unsigned int)strtoul(argv[1]);
	SDadd = (unsigned int)strtoul(argv[2]);
	RDsize = (unsigned int)strtoul(argv[3]);
	printf("\nPfadd = 0x%.8x,SDadd = 0x%.8x,RDsize = 0x%x\n\n",PFadd,SDadd,RDsize);
	
	i = FlashProg(PFadd,SDadd,RDsize);
	
	return i;
}

int AutoProgFlash(int argc, char *argv[])
{
	char key;
	unsigned char i;
	unsigned int j;
	unsigned int load_addr,time_out;
	
	puts("*************************** Reprog Flash code *************************\n");
    puts("All data in Flash will be lost!\nReprog flash,Are you sure? [y/n]");
    	
    for(;;)
	{
		if(kbhit())
		{
			key = getkey();
			if(key=='y'||key=='Y')
			{
				putch(key);
				putch('\n');
				break;
			}
			if(key=='n'||key=='N')
			{
				putch(key);
				putch('\n');
				return 0;
			}				
		}
	}
	////////////////////////////////////////////////////
	puts("Flash erasing...\n");
	i = ChipErase();
	if(i)
	{puts("Flash erase failed!!!Pls check hardware!!!\n");
	return 1;}
	
	///////////////////////////////////////////////////
	puts("please select a binary file for transfer!\n");
	load_addr = 0x82000000;//comload		
	time_out = 0xffffffff;	
	do{
		if(kbhit())
		{
			*((unsigned char *)load_addr++) = getkey();
			time_out = 0x10000;
		}
	  }while(--time_out);

	printf("\nReceived 0x%x bytes from usart!\n", load_addr-0x82000000);
			
	/////////////////////////////////////////////////////
	puts("\nStart program flash ,pls waiting for...\n");
	i = FlashProg(ROM_BASE,0x82000000,(load_addr-0x82000000));	
	if(i)
	{puts("Flash Program failed!!!Pls check hardware!!!\n");	
	return 1;}
	///////////////////////////////////////////////////
	puts("Start flash verify...");
	for(j=0;j<(load_addr-0x82000000);j++)
	{
		if(*(unsigned char *)(j+ROM_BASE) != *(unsigned char *)(j+0x82000000))
		{
			printf("\nFlash verification is failed! Flash addr @ 0x%.8x\n",j);
			return 1;
		}
	}
	puts("Successfully!\n");
	puts("Flash program is successfully!\nPlease wait system reboot......\n\n\n");
	SystemReset();
    return 0;
}

int ProgAPPBoot(int argc, char *argv[])
{
	char key;
	unsigned char i;
	unsigned int j;
	unsigned int load_addr,time_out;
	unsigned int SecSize;
	
	puts("************************ Reprog Flash APPBoot **********************\n");
    puts("All data in Flash APPBoot region will be lost!Are you sure? [y/n]");
    	
    for(;;)
	{
		if(kbhit())
		{
			key = getkey();
			if(key=='y'||key=='Y')
			{
				putch(key);
				putch('\n');
				break;
			}
			if(key=='n'||key=='N')
			{
				putch(key);
				putch('\n');
				return 0;
			}				
		}
	}
	///////////////////////////////////////////////////
	puts("please select a binary file for transfer!\n");
	load_addr = 0x82000004;//comload		
	time_out = 0xffffffff;	
	do{
		if(kbhit())
		{
			*((unsigned char *)load_addr++) = getkey();
			time_out = 0x10000;
		}
	  }while(--time_out);

	printf("\nReceived 0x%x bytes from usart!\n", load_addr-0x82000004);
	if((load_addr-0x82000000)>(APPBase-APPBootBase))
	{
		puts("CodeSize is too big,cann't fix it to AppBoot Region.Please adjust AppBootBase!\n");
		return 1;
	}
	SecSize = load_addr-0x82000000;
	if((SecSize & 0xffff)!=0)
	{
		SecSize &= 0x3f0000;
		SecSize += 0x10000;
	}
	////////////////////////////////////////////////////
	#if(NorFlash_Type==AT49BV162_3)
		for(j=APPBootBase;j<APPBootBase+SecSize;j+=0x10000)
		{
			i = SectorErase(j - ROM_BASE);
			if(i){
				puts("Flash erase failed!!!Pls check hardware!!!\n");
				return 1;}
			else{
				printf("SectorErase 0x%.6x - 0x%.6x\n",j,j+0xffff);}
		}
	#elif(NorFlash_Type==SST39VF160)
		for(j=APPBootBase;j<APPBootBase+SecSize;j+=0x10000)
		{
			i = BlockErase(j - ROM_BASE);
			if(i){
				puts("Flash erase failed!!!Pls check hardware!!!\n");
				return 1;}
			else{
				printf("BlockErase 0x%.6x - 0x%.6x\n",j,j+0xffff);}
		}
	#endif
			
	/////////////////////////////////////////////////////
	puts("\nStart program flash ,pls waiting for...\n");
	*(unsigned int *)(0x82000000) = load_addr-0x82000004;
	i = FlashProg(APPBootBase,0x82000000,(load_addr-0x82000000));	
	if(i)
	{puts("Flash Program failed!!!Pls check hardware!!!\n");	
	return 1;}
	///////////////////////////////////////////////////
	puts("Start flash verify...");
	for(j=0;j<(load_addr-0x82000000);j++)
	{
		if(*(unsigned char *)(j+APPBootBase) != *(unsigned char *)(j+0x82000000))
		{
			printf("\nFlash verification is failed! Flash addr @ 0x%.8x\n",j);
			return 1;
		}
	}
	puts("Successfully!\n");
	puts("AppBoot program is successfully!\nPlease wait system reboot......\n\n\n");
	SystemReset();
    return 0;
}

int ProgAPP(int argc, char *argv[])
{
	char key;
	unsigned char i;
	unsigned int j;
	unsigned int load_addr,time_out;
	unsigned int SecSize;
	
	puts("************************ Reprog Flash APP **********************\n");
    puts("All data in Flash APP region will be lost!Are you sure? [y/n]");
    	
    for(;;)
	{
		if(kbhit())
		{
			key = getkey();
			if(key=='y'||key=='Y')
			{
				putch(key);
				putch('\n');
				break;
			}
			if(key=='n'||key=='N')
			{
				putch(key);
				putch('\n');
				return 0;
			}				
		}
	}
	///////////////////////////////////////////////////
	puts("please select a binary file for transfer!\n");
	load_addr = 0x82000004;//comload		
	time_out = 0xffffffff;	
	do{
		if(kbhit())
		{
			*((unsigned char *)load_addr++) = getkey();
			time_out = 0x10000;
		}
	  }while(--time_out);

	printf("\nReceived 0x%x bytes from usart!\n", load_addr-0x82000004);
	if((load_addr-0x82000000)>(ROM_BASE+FlashSize-APPBase))
	{
		puts("CodeSize is too big,cann't fix it to App Region.Please adjust AppBase!\n");
		return 1;
	}
	SecSize = load_addr-0x82000000;
	if((SecSize & 0xffff)!=0)
	{
		SecSize &= 0x3f0000;
		SecSize += 0x10000;
	}
	////////////////////////////////////////////////////
	#if(NorFlash_Type==AT49BV162_3)
		for(j=APPBase;j<APPBase+SecSize;j+=0x10000)
		{
			i = SectorErase(j - ROM_BASE);
			if(i){
				puts("Flash erase failed!!!Pls check hardware!!!\n");
				return 1;}
			else{
				printf("SectorErase 0x%.6x - 0x%.6x\n",j,j+0xffff);}
		}
	#elif(NorFlash_Type==SST39VF160)
		for(j=APPBase;j<APPBase+SecSize;j+=0x10000)
		{
			i = BlockErase(j - ROM_BASE);
			if(i){
				puts("Flash erase failed!!!Pls check hardware!!!\n");
				return 1;}
			else{
				printf("BlockErase 0x%.6x - 0x%.6x\n",j,j+0xffff);}
		}
	#endif
			
	/////////////////////////////////////////////////////
	puts("\nStart program flash ,pls waiting for...\n");
	*(unsigned int *)(0x82000000) = load_addr-0x82000004;
	i = FlashProg(APPBase,0x82000000,(load_addr-0x82000000));	
	if(i)
	{puts("Flash Program failed!!!Pls check hardware!!!\n");	
	return 1;}
	///////////////////////////////////////////////////
	puts("Start flash verify...");
	for(j=0;j<(load_addr-0x82000000);j++)
	{
		if(*(unsigned char *)(j+APPBase) != *(unsigned char *)(j+0x82000000))
		{
			printf("\nFlash verification is failed! Flash addr @ 0x%.8x\n",j);
			return 1;
		}
	}
	puts("Successfully!\n");
	puts("AppBoot program is successfully!\nPlease wait system reboot......\n\n\n");
	SystemReset();
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -