📄 main.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 + -