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

📄 strata32.c

📁 s3c2410 arm9 仿真器下载程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    id1 = Strata_CheckID(targetAddress);
    id1 = Strata_CheckID(targetAddress);
    Uart_Printf("Identifier Code (0x0089) = 0x%04x\n", id1&0xffff);
    id2 = Strata_CheckDevice(targetAddress);
    id2 = Strata_CheckDevice(targetAddress);
    Uart_Printf("Device Code  = 0x%04x\n", id2&0xffff);
    
    if ( (id1 & 0xffff) != 0x0089 )       // ID number = 0x0089
    {
        Uart_Printf("Identification check error !!\n");
        return ;
    }

  //  if ( ((id2 & 0xffff) != 0x0016)&&((id2 & 0xffff) != 0x0017)&&((id2 & 0xffff) != 0x0015) )   // Device number=0x0018
      if ( ((id2 & 0xffff) != 0x0016)&&((id2 & 0xffff) != 0x0017))   // 640 Device number=0x0017  320=16
    {
        Uart_Printf("Device check error !!\n");
        return ;
    }

    Uart_Printf("\nErase the sector : 0x%x.\n", targetAddress);

    for(i=0;i<targetSize;i+=0x20000)
    {
        if(Strata_CheckBlockLock(targetAddress+targetOffset+i)&0x0001)
        {
	       	Delay(50);
        	Strata_Unlock(targetAddress+targetOffset+i);
        }
       	Delay(50);
        Strata_EraseSector(targetAddress+targetOffset+i);
    }

    _RESET();
    
    if(!Strata_BlankCheck(targetAddress+targetOffset,targetSize))
    {
        Uart_Printf("Blank Check Error!!!\n");
        return;
    }

    Uart_Printf("\nStart of the data writing...\n");

    for (i=0; i<targetSize; i+=2) 
    {
        Strata_ProgFlash(i+targetAddress+targetOffset, *((U16 *)(srcAddress+i)));
        if(i%0x10000==0xfffc)
            Uart_Printf("[%x]",(i+4)/0x10000);
    }
    Uart_Printf("\nEnd of the data writing \n");

    _RESET();

    Uart_Printf("Verifying Start...\n");
    for (i=0; i<targetSize; i+=2) 
    {
        if (*((U16 *)(i+targetAddress+targetOffset)) !=*((U16 *)(srcAddress+i))) 
        {
            Uart_Printf("verify error  src %08x = %08x\n", srcAddress+i, *((U16 *)(srcAddress+i)));
            Uart_Printf("verify error  des %08x = %08x\n", i+targetAddress+targetOffset, *((U16 *)(i+targetAddress)));
//            return;
        }
    }
    Uart_Printf("Verifying End!!!");
}

/*
void Erase28F128J3A(void)  // added by junon 10/29
{
// FlashROM write program must reside at RAM region NOT ROM region
// In reading and writing all interrupts are disabled because the flash ROM
// strongly dislike to be disturbed by other stuff.
// And the region of flash ROM must be I/O region which means NO cacheable
// and NO bufferable in MMU. Check it out !!!
// 2001.6.18. Mon. It's local rain. I'll hope it eliminates the drought in Korea. by chc

    int i;

    Uart_Printf("\n[ 28F320J3A Flash Writing Program ]\n\n");

    rINTMSK = BIT_ALLMSK;   
    targetAddress=TARGET_ADDR_28F128;
    targetSize=downloadProgramSize;

    srcAddress = downloadAddress;
    if(targetSize==0)
    {
        Uart_Printf("\nThe data must be downloaded using XMODEM from 0x31000000\n");
        return;
    }

    InputAddresses(); //srcAddress,targetSize,targetOffset will be determined.      
    Uart_Printf("Source base address(0x31000000) = 0x%x\n",srcAddress);
    Uart_Printf("Target base address(0x00000000) = 0x%x\n",targetAddress);
    Uart_Printf("Target offset      (0x0)        = 0x%x\n",targetOffset);
    Uart_Printf("Target size        (0x20000*n)  = 0x%x\n",targetSize);

    if ( (Strata_CheckID(targetAddress) & 0xffff)  != 0x0089 )       // ID number = 0x0089
    {
		Uart_Printf("Read ID : 0x%x\n", Strata_CheckID(targetAddress));
        Uart_Printf("Identification check error !!\n");
        return ;
    }

    if ( (Strata_CheckDevice(targetAddress)&0xffff) != 0x0016 )   // Device number=0x0018
    {
        Uart_Printf("Device check error !!\n");
        return ;
    }

#if 1 // lock bit setting test 
//	Strata_SetBlockLock(targetAddress+0x10000); //just test
    for(i=0;i<10;i++)
		Uart_Printf("%d block value is %d\n", i, Strata_CheckBlockLock(targetAddress+0x20000*i)&0x0001);
//	    if ( Strata_CheckBlockLock(targetAddress+0x20000*i) != 0x0 )   // Device number=0x0018
//	        Uart_Printf("%d block is locked !!\n", i);
	Strata_Unlock(targetAddress);
	for(i=0;i<10;i++)
	Uart_Printf("%d block value is %d\n", i, Strata_CheckBlockLock(targetAddress+0x20000*i)&0x0001);
#endif
//	Strata_Unlock(targetAddress);

    Uart_Printf("\nErase the sector : 0x%x.\n", targetAddress);

    for(i=0;i<targetSize;i+=0x20000)
    {
        Strata_EraseSector(targetAddress+targetOffset+i);
    }

    if(!Strata_BlankCheck(targetAddress+targetOffset,targetSize))
    {
        Uart_Printf("Blank Check Error!!!\n");
        return;
    }
}
*/

//==========================================================================================
static void InputAddresses(void)
{
    Uart_Printf("\nSource size : 0x%x\n",downloadProgramSize);
    Uart_Printf("\nAvailable Target Offset Address : \n"); 
    Uart_Printf("\t0x0, 0x20000, 0x40000, 0x60000, ... 0x1ce0000\n");
    Uart_Printf("Input target address offset [0x?] : ");
    targetOffset = Uart_GetIntNum();
    if(targetSize==0)
    {
        Uart_Printf("Input target size [0x?] : ");
        targetSize = Uart_GetIntNum();
    }
}

/*
//==========================================================================================
int  Strata_Display(int targetAddr,int targetSize)
{
    int i,j;

//    Uart_Printf("\n Flash Display targetAddr : %x , targetsize :%x ", targetAddr, targetSize);
    _RESET();
    for (i=0; i<targetSize; i+=2) 
    {
    	if ((i%0x10)==0)
	        Uart_Printf("\n0x%4x: ", targetAddr + i);            	
    
        j= ( (*((volatile U16 *)(i+targetAddr))) & 0xffff);
        Uart_Printf("0x%4x,", j);        
    }
    return 1;
}


//==========================================================================================
void FlashTest(void)
{
	int i;
	U16 k;
	
    Uart_Printf("\n Flash Test .");
    targetAddress = 0;
    
    Uart_Printf("\n Flash Chip erase .");    
     for(i=0;i<0x400000;i+=0x20000)
    {
        Strata_EraseSector(targetAddress + i);
    }

    Uart_Printf("\n Flash Chip blank check.");    
	Strata_BlankCheck(targetAddress,0x3fffff); 

    Uart_Printf("\n Fill Flash Chip with 0x5555.\n");    
    k = 0;
    for(i=0,k=0;i<0x400000;i+=2,k+=1)
    {
		Strata_ProgFlash(i,k);
		if ((i%0x10000) == 0xfffe)
	    Uart_Printf("[%x]",i+2);    		
    }
    
    Uart_Printf("\n verify Flash Chip with 0x5555.\n");    
    k=0;
    for(i=0,k=0;i<0x400000;i+=2,k+=1)
    {
        if ( *((U16 *)(i)) != k) 
        {
            Uart_Printf("verify error  src %08x = %08x   write= %08x \n", i, *((U16 *)(i)), k);
        }
		if ((i%0x10000) == 0xfffe)
	    Uart_Printf("[%x]",i+2);    		
    }
    Uart_Printf("Verifying End!!!\n");  

	Strata_Display(0xfff0, 0x20);

	Strata_Display(0x1fff0,0x20);

	Strata_Display(0x2fff0, 0x20);

	Strata_Display(0x3fff0,0x20);

	Strata_Display(0x4fff0, 0x20);

	Strata_Display(0x5fff0,0x20);

	Strata_Display(0x6fff0,0x20);
	Strata_Display(0x7fff0,0x20);
	Strata_Display(0x8fff0,0x20);
	Strata_Display(0x9fff0,0x20);
	Strata_Display(0xafff0,0x20);
	Strata_Display(0xbfff0,0x20);
	Strata_Display(0xafff0,0x20);
	Strata_Display(0xbfff0,0x20);
	Strata_Display(0xcfff0,0x20);
	Strata_Display(0xdfff0,0x20);
	Strata_Display(0xefff0,0x20);
	Strata_Display(0xffff0,0x20);
}*/

⌨️ 快捷键说明

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