📄 mainfile.c
字号:
/*----------------------------------------------------------------------------------
Module : Main Function
Author : kreal@163.net
Creation Date : 04-04-15
Revision : None
Function : To test 2410 base function
-----------------------------------------------------------------------------------*/
#define MAIN_G
#include "sysincludes.h"
uchar SerialBuffer[1024] ;
uint DataLen ;
uchar Updating, Loading ;
uchar CommandFlag ;
uint SA,EA;
uchar *pStr;
uint UsedBlk ;
uint UsedPage ;
void LoadSys()
{
uint iN, iP ;
uchar *pStart ;
pStart = (uchar *) 0x32000000 ;
for( iN = 0 ; iN < 100 ; iN ++ )
{
for( iP = 0 ; iP < 32 ; iP ++ )
{
NF_ReadPage( iN+20, iP, (uchar*)pStart, 512 ) ;
pStart += 512 ;
}
}
// pStart = ( uchar * ) 0x30000000;
// for( iN = 0 ; iN < 1024 ; iN ++ )
// {
// printf("%02x", *pStart++ ) ;
// printf(" " ) ;
// }
}
void (*Sys)(void);
void MemVarInit( void )
{
DataLen = 0 ;
Updating = FALSE ; Loading = FALSE ;
CommandFlag = 0x00 ;
UsedPage = 0 ; UsedBlk = 20 ;
}
void ProcessBuffer( void )
{
uchar Header1 , Header2 ;
uchar Len1 , Len2 ;
uint iN ;
Header1 = Uart_Getch() ;
if( Loading == TRUE ) return ;
if( Header1 == 0x55 )
{
Updating = TRUE ;
Header2 = Uart_Getch() ;
if( Header2 == 0xAA )
{
SerialBuffer[0] = Header1 ;
SerialBuffer[1] = Header2 ;
Len1 = Uart_Getch() ;
Len2 = Uart_Getch() ;
DataLen = (Len1<<8)|Len2 ;
SerialBuffer[2] = Len1 ;
SerialBuffer[3] = Len2 ;
for( iN = 0 ; iN < DataLen ; iN ++ )
SerialBuffer[4+iN] = Uart_Getch() ;
SerialBuffer[4+iN] = Uart_Getch() ;
SerialBuffer[5+iN] = Uart_Getch() ;
CommandFlag = 0x01 ;
}
}
}
char CheckSum( void )
{
uint iN ;
uint Sum ;
Sum = 0 ;
for( iN = 0 ; iN < DataLen + 4 ; iN ++ )
Sum += SerialBuffer[iN ] ;
if( SerialBuffer[ iN ] == (( Sum&0xFFFF)>>8 ) && SerialBuffer[iN+1] == ( Sum&0xFF ) )
return TRUE ;
else
return FALSE ;
}
unsigned char W_BUF[512];
void RespCommand( void )
{
uint i = 0 ;
uint ret ;
uint Len ;
if( CheckSum() )
{
if(( SerialBuffer[4] =='L' ) && ( SerialBuffer[5] == 'L') )
{
printf( "Y" ) ;
}else
if( SerialBuffer[4] =='E' && SerialBuffer[5] == 'E' )
{
pStr = (unsigned char*)&SA;
pStr[0] = SerialBuffer[6];
pStr[1] = SerialBuffer[7];
pStr[2] = SerialBuffer[8];
pStr[3] = SerialBuffer[9];
pStr = (unsigned char*)&EA;
pStr[0] = SerialBuffer[10];
pStr[1] = SerialBuffer[11];
pStr[2] = SerialBuffer[12];
pStr[3] = SerialBuffer[13];
ret = NandErase( SA, EA);
if( ret )
{
printf("Y" ) ;
}
else printf( "N" ) ;
}else
if( SerialBuffer[4] == 'P' && SerialBuffer[5] == 'P' )
{
pStr = (unsigned char*)&SA;
pStr[0] = SerialBuffer[6];
pStr[1] = SerialBuffer[7];
pStr[2] = SerialBuffer[8];
pStr[3] = SerialBuffer[9];
pStr = (unsigned char*)&EA;
pStr[0] = SerialBuffer[10];
pStr[1] = SerialBuffer[11];
pStr[2] = SerialBuffer[12];
pStr[3] = SerialBuffer[13];
Len = DataLen - 10 ;
for( i = 0 ; i <512; i++ ) W_BUF[i] = SerialBuffer[ 14 + i ];
if( Len < 512 ) { for( i = Len ; i< 512 ; i ++ ) W_BUF[i]= 0xFF ; }
ret = NF_WritePage( UsedBlk, UsedPage++, W_BUF, Len ) ;
if( UsedPage >= 32 ) { UsedPage = 0 ; UsedBlk ++ ; }
if( ret ) printf("Y") ;
else printf("N" ) ;
}
}
CommandFlag = 0x00 ; DataLen = 0 ;
}
void Main( void )
{
SysInit() ;
MemVarInit() ;
UartSelect( 0 ) ; // Test Uart 0
printf( "\r\nBooting Nand System....") ;
NF_Init() ;
printf("\r\nNand Flash ID is 0x%x", NF_CheckId() ) ;
while( 1 )
{
ProcessBuffer() ;
if( CommandFlag == 0x01 ) RespCommand() ;
if( Loading == TRUE )
{
LoadSys() ;
Sys = (void(*)())0x32000000;
(*Sys)() ;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -