📄 strata32.c
字号:
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 ;
}
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 + -