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

📄 main.c

📁 ADS模拟JTAG口烧写FLASH的工具
💻 C
字号:
//------------------------------------------------------------------------------// 拳老疙   : main.c// 橇肺璃飘 : jflash-s3c44b0x// 汲  疙   : jflash-s3c44b0x 狼 皋牢 风凭捞促. // // 盔历磊   : 蜡康芒 (林)力捞村叼矩萍 frog@falinux.com// 累己老   : 2003斥 5岿 17老// 荐沥		: 辣傣硅 (林)硅崔沥焊烹脚 dadpeat@naver.com// 荐沥老	: 2003 斥 9岿 7老// 盔历累鼻 : (林)力捞村叼矩萍 //            捞 橇肺弊伐 筋胶狼 俺累 棺 犁 硅器甫 倾侩 钦聪促.//            俺累等 橇肺弊伐狼 惑诀利 捞侩档 倾侩 钦聪促. //            俺累等 橇肺弊伐狼 傍俺绰 鞘夸窍促搁 窍瘤 臼酒档 邓聪促. // 犁历累鼻 : GPL俊 蝶抚聪促.// 林  狼   : Cyber Lab(www.armkorea.com) 荤狼 LN-44B0X 焊靛俊 弥利拳 登绢乐嚼聪促.//			 促弗 ARM7TDMI Core 荤侩 焊靛俊绰 Set_S3C44B0X 窃荐狼 饭瘤胶磐 技泼阑//			 利例窍霸 官操绢 林寂具 钦聪促.//------------------------------------------------------------------------------//******************************************************************************//// 庆歹 沥狼////******************************************************************************#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>//#include <sys/stat.h>//#include <unistd.h>#include "jtag.h"#include "arm7tdmi.h"#include "hy29lv160.h"#define VIEW_ON		1#define VIEW_OFF	0unsigned int LedTest    = FALSE;unsigned int VerifyTest = FALSE;unsigned int DUMPTest   = FALSE;unsigned int FlashErase = FALSE;unsigned int FlashID	= FALSE;char *GFilename = NULL;unsigned int GFlashOffset = 0;unsigned int GFlashSize   = 0;unsigned int Context[16];void Set_S3C44B0X(void);unsigned int CheckParam(int argc, char **argv);//------------------------------------------------------------------------// 汲 疙 : 颇扼皋磐甫 眉农 茄促. // 概 拌 : // 馆 券 : // 林 狼 : //------------------------------------------------------------------------unsigned int CheckParam(int argc, char **argv){   int lp;      for(lp = 1; lp < argc; lp++)   {      // LED 抛胶飘 葛靛 汲沥       if(strcmp("-l", argv[lp]) == 0)       {          LedTest = TRUE;          continue;      }      // 敬 单捞鸥 八荤       if(strcmp("-v", argv[lp]) == 0)       {          VerifyTest = TRUE;          continue;      }      // FLASH ID 八荤       if(strcmp("-i", argv[lp]) == 0)       {          FlashID = TRUE;          continue;      }            if(strcmp("-e", argv[lp]) == 0)       {          FlashErase = TRUE;          if((lp + 1) > argc) return FALSE;          sscanf(argv[lp+1], "%xl", &GFlashSize);          lp++;           continue;      }            // 待橇 府胶飘       if(strcmp("-d", argv[lp]) == 0)       {          DUMPTest = TRUE;          if((lp + 2) > argc) return FALSE;          sscanf(argv[lp+1], "%xl", &GFlashOffset);          lp++;           sscanf(argv[lp+1], "%xl", &GFlashSize);          lp++;                     continue;      }      // 拳老 疙阑 掘绰促.       if(GFilename == NULL)      {         GFilename = argv[lp];      }    }    return TRUE;}//------------------------------------------------------------------------// 汲 疙 : 皋牢 窃荐 // 概 拌 : // 馆 券 : // 林 狼 : //------------------------------------------------------------------------int main( int argc, char **argv ){	unsigned int i, j;	    printf( "\n\n" );    printf( "------------------------------------------------------------\n" );    printf( "jflash-s3c44b0x v1.0 (2003-8-26)\n" );    printf( "origin made by J.D&T Co.,Ltd ( You Young-chang )\n" );    printf( "origin made by ATMEL Co.,Ltd\n");    printf( "modified by Yun Duck Bea\n");    printf( "============================================================\n" );        // 颇扼皋磐甫 眉农茄促.     if(!CheckParam(argc, argv)) goto goto_end;    if( argc < 2 )     {        printf("> Usage\n");        printf("> Write Flash        : jflash-44b0x file_name\n" );        printf("> Verify Flash       : jflash-44b0x -v file_name\n" );        printf("> Test Led           : jflash-44b0x -l\n" );        printf("> Detect Flash ID    : jflash-44b0x -i\n" );        printf("> Erase Flash Sector : jflash-44b0x -e [sizes] sizes:hex\n" );        printf("> Dump Memory        : jflash-44b0x -d [startaddr] [sizes] startaddr:hex sizes:hex\n" );        goto goto_end;     }         printf( "> FileName : %s\n", GFilename );        // JTAG Interface 檬扁拳     printf("> Init JTAG Interface...\n" );    if(JTAG_Open() == FALSE)    {         printf("Check Please... Super User Mode\n" );         exit(1);     }        JTAG_HW_Reset();    // Read Core ID    printf( "> ARM7TDMI ID Test...\n" );    if( Read_ID_Code() == FALSE ) goto goto_end;        // S3C44B0X 饭瘤胶磐 檬扁拳    printf("> Change Debug Mode ARM7TDMI...\n" );    Reset();	if(JTAG_Stop() == FALSE) goto goto_end;        for(i = 0; i < 15; i++) Context[i] = 0;    Context[15] = 0x0a000000;    JTAG_Go(Context);        printf("> Setting Registers for S3C44B0X...\n");    Set_S3C44B0X();	// Detect Flash ID    if(FlashID == TRUE)    {		printf("> Detect Flash ID\n");		if(!HY29LV160_Detect(VIEW_ON)) goto goto_end;	}	else	{		if(!HY29LV160_Detect(VIEW_OFF)) goto goto_end;	}	    JTAG_HW_Reset();    JTAG_Go(Context);    Set_S3C44B0X();            // Test LED    if(LedTest == TRUE)    {        printf("> Test LED ...\n" );		HY29LV160_Cmd_Led_Flash(10);    }	        if(FlashErase == TRUE)    {    	printf("> Erase Flash Area[00000-%05X]\n", GFlashSize);   		HY29LV160_EraseAreaSector(GFlashSize);    }    if( GFilename != NULL )    {         if( VerifyTest == TRUE )          {             HY29LV160_VerifyToFlash( GFilename );         }         else                {            printf( "> Flash Write...\n" );                HY29LV160_WriteToFlash( GFilename );            HY29LV160_VerifyToFlash( GFilename );         }    }        if( DUMPTest == TRUE )    {        printf( "> Flash Dump...\n" );        HY29LV160_DumpMemory( GFlashOffset, GFlashSize  );    }goto_end:    // 辆丰 贸府     printf( "------------------------------------------------------------\n" );    JTAG_HW_Reset();    JTAG_Close();    printf( "program end\n" );    return 0;}void Set_S3C44B0X(void){	//unsigned int data;		JTAG_Write_Memory(0x01d30000, 0x00000000, WORD);	// WTCON , Disable Watch-Dog Timer	//JTAG_Read_Memory(0x01d30000, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01e0000c, 0x07ffffff, WORD);	// INTMSK, All interrupt disable	//JTAG_Read_Memory(0x01e0000c, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01f80008, 0x40000000, WORD);	// BDIDES0, BDIDESn reset value should be 0x40000000	//JTAG_Read_Memory(0x01f80008, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01f80028, 0x40000000, WORD);	// BDIDES1, BDIDESn reset value should be 0x40000000	//JTAG_Read_Memory(0x01f80028, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c00000, 0x0000001f, WORD);	// SYSCFG, (1<<4)+(1<<3)+(3<<1)+(1<<0)	//JTAG_Read_Memory(0x01c00000, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01d8000c, 0x00000fff, WORD);	// LOCKTIME, Set Clock Control Register	//JTAG_Read_Memory(0x01d8000c, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01d80000, 0x0001C031, WORD);	// PLLCON, (28<<12)+(3<<4)+(1<<0) Fin=18.432MHz, Fout=66.3552MHz=(x*1.8432)MHz	//JTAG_Read_Memory(0x01d80000, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01d80004, 0x00007ff8, WORD);	// CLKCON, Enable All unit block Clock	//JTAG_Read_Memory(0x01d80004, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c80000, 0x11000000, WORD);	// BWSCON, Bank0=OM[1:0], Bank1~Bank7=16bit	//JTAG_Read_Memory(0x01c80000, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c80004, 0x00000600, WORD);	// BANKCON0, (0<<13)+(0<<11)+(6<<8)+(0<<6)+(0<<4)+(0<<2)+(0)	//JTAG_Read_Memory(0x01c80004, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c80008, 0x00007FFC, WORD);	// BANKCON1, (3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+(0)	//JTAG_Read_Memory(0x01c80008, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c8000c, 0x00007FFC, WORD);	// BANKCON2, (3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+(0)	//JTAG_Read_Memory(0x01c8000c, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c80010, 0x00007FFC, WORD);	// BANKCON3, (3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+(0)	//JTAG_Read_Memory(0x01c80010, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c80014, 0x00007FFC, WORD);	// BANKCON4, (3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+(0)	//JTAG_Read_Memory(0x01c80014, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c80018, 0x00007FFC, WORD);	// BANKCON5, (3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+(0)	//JTAG_Read_Memory(0x01c80018, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c8001c, 0x00018000, WORD);	// BANKCON6, (3<<15)+(0<<2)+(0)	//JTAG_Read_Memory(0x01c8001c, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c80020, 0x00000000, WORD);	// BANKCON7, 0	//JTAG_Read_Memory(0x01c80020, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c80024, 0x00860459, WORD);	// REFRESH, (1<<23)+(0<<22)+(0<<20)+(1<<18)+(2<<16)+1113	    	//JTAG_Read_Memory(0x01c80024, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c80028, 0x00000016, WORD);	// BANKSIZE, SCLK power down mode, BANKSIZE 8M/8MB	//JTAG_Read_Memory(0x01c80028, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c8002c, 0x00000020, WORD);	// MRSRB6, CL=2clk		//JTAG_Read_Memory(0x01c8002c, &data, WORD);	//printf("[%08X]\n", data);	JTAG_Write_Memory(0x01c80030, 0x00000020, WORD);	// MRSRB7, CL=2clk			//JTAG_Read_Memory(0x01c80030, &data, WORD);	//printf("[%08X]\n", data);}

⌨️ 快捷键说明

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