📄 download.c
字号:
/*************************************************************************/
/* */
/* FILE NAME VERSION */
/* */
/* source\download.c 1.1 */
/* */
/* DESCRIPTION */
/* */
/* DIAGNOSTIC CODE for S3C4510B0 */
/* */
/* */
/* DATA STRUCTURES */
/* */
/* FUNCTIONS : serial download(SDRAM/Fhash fusing) and */
/* excution/using PC Hyperterminal */
/* */
/* DEPENDENCIES */
/* */
/* */
/* NAME: Nicolas Park */
/* The last Modification date: 25-June-2002 */
/* REMARKS: Created initial version 1.0 */
/* */
/* Copyright (C) 2002 AIJISYSTEM CO.,LTD */
/*************************************************************************/
#include <stdio.h>
#include "s3c4510b0.h"
#include "uart.h"
#include "pollio.h"
#include "download.h"
#include "sysconf.h"
#include "flash.h"
#define OK 1
#define FAIL 0
void DownLoadPgm()
{
unsigned RcvDataSize ;
U32 *downarea ;
downarea = (U32 *)0x1000050;
Print("\n $$ Download Area is 0x1000050 : ") ;
Print("\n $$ Waiting Download User Program ..... ") ;
RcvDataSize=GetDataSize(CONSOLE) ;
ReceiveData((char *)downarea,RcvDataSize) ;
Print("\nDownload Ok. Wait for CRC check!!") ;
// if(CRCErrorCheck((char *)downarea,RcvDataSize))
// {
Print("\n\r $$ CRC Check Ok ..") ;
Print("\n\r $$ Now, User program will be started.");
Print("\n\r $$ Enter any key to continue....");
get_byte();
StartDownPgm() ;
// }
// else {
// Print("\n\r $$$ CRC Check Error Occured!!!");
// Print("\n\r $$$ User program start failed!!!");
// }
}
void FlashDown()
{
unsigned RcvDataSize ;
// Download ROM Data to ROM_BufferArea
Print("\n\r Flash download and fusing program !! ") ;
Print("\n\r Waiting for Program Download for EEPROM ..... ") ;
RcvDataSize = GetDataSize(CONSOLE) ; // down.c
ReceiveData((char *)EEPROM_BufferArea,RcvDataSize) ;
Print("\nDownload Ok!!. Wait for CRC check!!!") ;
// if(CRCErrorCheck((char *)EEPROM_BufferArea,RcvDataSize)) {
Print("\n\rCRC check OK!\r"); //download end, download code start address 0x1200000
ProgramFlash(); //jump to flash.c
// }
// else {
// Print("\n\rCRC check FAIL!\r");
// }
}
/*********************************************************************
* GET DOWNLOAD PROGRAM SIZE
*********************************************************************/
unsigned GetDataSize(unsigned uart_channel)
{
int i ;
unsigned DataSize=0 ;
char RcvData[8] ;
for(i=0 ; i<8 ; i++)
{
RcvData[i] = get_char(uart_channel) ;
if ( (RcvData[i] >= '0') && (RcvData[i] <= '9') )
DataSize=(DataSize<<4) + (RcvData[i]-'0') ;
else if ( (RcvData[i] >= 'A') && (RcvData[i] <= 'F') )
DataSize=(DataSize<<4) + (RcvData[i]-'A'+ 10) ;
else if ( (RcvData[i] >= 'a') && (RcvData[i] <= 'f') )
DataSize=(DataSize<<4) + (RcvData[i]-'a'+ 10) ;
}
return DataSize ;
}
void ReceiveData(char *DownArea,unsigned RcvDataSize)
{
while(RcvDataSize--)
*DownArea++ = get_byte() ;
}
/*********************************************************************
* CRC CHECK PROGRAM
*********************************************************************/
unsigned CRCErrorCheck(char *DownArea,unsigned RcvDataSize)
{
int i ;
char RcvCRC[8] ;
unsigned CRCValue=0 ;
unsigned CheckSum=0xFFFF ;
int RcvData ;
for(i=0 ; i<8 ; i++)
{
RcvCRC[i] = get_byte() ;
if ( (RcvCRC[i] >= '0') && (RcvCRC[i] <= '9') )
CRCValue=(CRCValue<<4) + (RcvCRC[i]-'0') ;
else if ( (RcvCRC[i] >= 'A') && (RcvCRC[i] <= 'F') )
CRCValue=(CRCValue<<4) + (RcvCRC[i]-'A'+ 10) ;
else if ( (RcvCRC[i] >= 'a') && (RcvCRC[i] <= 'f') )
CRCValue=(CRCValue<<4) + (RcvCRC[i]-'a'+ 10) ;
}
//PrintReadData((char *)DownArea,RcvDataSize) ;
// Calcuration Received Data
while(RcvDataSize--)
{
RcvData = *DownArea++ ;
CheckSum = CalcCRC(CheckSum,RcvData) ;
}
if (CRCValue == CheckSum)
return(OK);
else
return(FAIL);
}
unsigned CalcCRC(unsigned CheckSum, int RcvData)
{
int j ;
for (j=0 ; j<8 ; j++)
{
CheckSum <<= 1 ;
if (RcvData & 0x0080) CheckSum^= CCITT_POLYNOM ;
RcvData <<= 1 ;
}
return CheckSum ;
}
/*********************************************************************
* MESSAGE
*********************************************************************/
void PrintReadData(char *DownArea,unsigned RcvDataSize)
{
Print("\rDownLoad Area -------- %x ",DownArea) ;
Print("\rReceived Data Size --- %d Byte",RcvDataSize) ;
/*
while(RcvDataSize--)
Print(" %c",*DownArea++) ;
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -