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

📄 flash.cpp

📁 将XLS文件的内容下载到LED显示屏上显示
💻 CPP
字号:
/*
===========================================================================
    File Name : Flash.cpp
    Function : Flash Writer Function
	Note :


                           UPDATE NOTE
----------+---------------------------------------------------+------------
 DATE     |           Bug or Description for this Version     | VERSION
----------+---------------------------------------------------+------------
2004/8/5   First Release                                        V0.001


2004/8/5
Modified by Frank Chiang
============================================================================
*/

#include "Command.h"
#include "USB_init.h"
#include "USB_Base2.cpp"

/*
------------------------------------------------------------------------------
         bool Initial_FlashWriter(void)

Function :  Initial Flash Writer function
Input :
Output :
	return 0 , Initial error
	return 1 , Initial susceed
Note :

------------------------------------------------------------------------------
*/
bool Initial_NFlashWriter(void)
{
	if ( ! Search_USB_Port() )
		return 0;
	return 1;
}

void Set_USB_Close(BYTE mode)
{
	USB_Special_Patten = USB_Special_Patten + 0x40;
	Write1L_Cmd( USB_CLOSE + USB_Special_Patten , mode );
}

bool Check_USB_Ready(void)
{

	int     Status;
	BYTE	data[64];
	USB_Special_Patten = USB_Special_Patten + 0x40;
	Write1L_Cmd( USB_READY + USB_Special_Patten , 0x01 );
	Sleep(1);

	int	Count=0;
	while (1)
	{
		Status = _USB_ReadIn(instance, &data[0] , 64 );
		if ( Status == 64 )
		{
			if ( (data[0] == 0xa5) && (data[1] == 0x5a) )  // Firmware special pattern
				break;
		}

		Count++;
		if ( Count == 100 )
		{
			AfxMessageBox("Check USB Ready -> Handshake Error !!! ",MB_OK,0);
			break;
		}
		Sleep(1);
	}
	return 1;
}

bool EraseNFlash (int FlashAddr)
{
	int	Status;
	BYTE data[64];
	UINT Command = FlashAddr;//( (0X40 & 0xFFFF) << 16 ) | ( 0X80 & 0xFFFF ) ;
	USB_Special_Patten = USB_Special_Patten + 0x40;

    Write4L_Cmd( Init_Flash + USB_Special_Patten ,Command );
	Sleep(6);

	USB_Special_Patten = USB_Special_Patten + 0x40;

    Write4L_Cmd( ERASE_BLOCK + USB_Special_Patten ,Command );
	Sleep(2);
	data[0]=0;
	while ((data[0]!=0X55) && (data[1]!=0xaa))
	{
		Status = USBICE_Read(&data[0], 64);

		if ( ! Status )
			break;
	}
	return 1;
	Set_USB_Close(0x00);
}

bool EraseNFlashSector (int FlashAddr)
{
	int	Status;
	BYTE data[64];
	UINT Command = 0x400040;//( (0X40 & 0xFFFF) << 16 ) | ( 0X80 & 0xFFFF ) ;
	USB_Special_Patten = USB_Special_Patten + 0x40;

    Write4L_Cmd( Init_Flash + USB_Special_Patten ,Command );
	Sleep(6);

	Command = 0x478000;
	USB_Special_Patten = USB_Special_Patten + 0x40;
    Write4L_Cmd( SET_ADDRESS + USB_Special_Patten , Command );

	USB_Special_Patten = USB_Special_Patten + 0x40;

    Write4L_Cmd( Erase_Sector + USB_Special_Patten ,Command );
	Sleep(2);
	data[0]=0;
	while ((data[0]!=0X55) && (data[1]!=0xaa))
	{
		Status = USBICE_Read(&data[0], 64);

		if ( ! Status )
			break;
	}
	return 1;
	Set_USB_Close(0x00);
}

bool NFlashWrite(BYTE *DataPtr, unsigned long StartAddr, unsigned long Len)
{
	//--Command write
	USB_Special_Patten = USB_Special_Patten + 0x40;
    Write4L_Cmd( SET_ADDRESS + USB_Special_Patten , StartAddr );
	//	Sleep(1);

	USB_Special_Patten = USB_Special_Patten + 0x40;
    Write4L_Cmd( WRITE_FILE + USB_Special_Patten , Len / 2 );
		Sleep(1);

	//--Download File
	// Test EP7 transfer speed
	/*
    time_t StartTime,EndTime,WriteTime;
    time( &StartTime );
	*/

	if ( ! USBICE_Write( DataPtr , Len ) ) return 0;

	// Test EP7 transfer speed
	/*
    time( &EndTime );
	WriteTime = EndTime - StartTime;
	*/
	return 1;
}


bool NFlashRead(BYTE *DataPtr, unsigned long StartAddr, unsigned long Len,int flag)
{

	int     Status;
	//--Command write
	USB_Special_Patten = USB_Special_Patten + 0x40;
    Write4L_Cmd( SET_ADDRESS + USB_Special_Patten , StartAddr );
	//	Sleep(1);

	USB_Special_Patten = USB_Special_Patten + 0x40;
	if(0==flag)
	{
		Write4L_Cmd( READ_FILE + USB_Special_Patten , Len / 2 );  //IN ICE USE THIS COMMAND
	}
	else
	{
		Write4L_Cmd( USB_ReadNandFlash_Data_Cmd + USB_Special_Patten , Len / 2 );  //IN RealChip USE THIS COMMAND
	}
	//	Sleep(1);

	//--Bulk read
	Len+=512;
	do
	{
		for (int i=1;i<=8;i++)
		{
			Status = USBICE_Read(DataPtr,64);
			DataPtr+=64;
		}
		Len-=512;
	}while (Len>=512);

	if (!Status)
		return 0;
	return 1;
}

bool VerifyFlash(BYTE *ProgramDataPtr, unsigned long StartAddr, unsigned long Len, unsigned long filelength,int flag)
{
	bool OKFlag = true;

		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((StartAddr&0xffff)<<16 | SetIx0Value));
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((StartAddr&0xffff0000) | SetIx0bkramValue));
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (((Len-1)&0xffff)<<16 | SetMR0Value));
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (((Len-1)&0xffff0000) | SetMR1Value));
		USB_Special_Patten = USB_Special_Patten + 0x40;
		if (flag)
		{
			Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, CalCheckSum8bit);	//Excute Nandflash Program
		}
		else
		{
				Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, CalCheckSum);	//Excute Nandflash Program
		}

	/*
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd( SET_ADDRESS + USB_Special_Patten , StartAddr );
	//	Sleep(1);

		USB_Special_Patten = USB_Special_Patten + 0x40;

		Write4L_Cmd( USB_ReadNandFlash_Data_Cmd + USB_Special_Patten , Len  ); 

		if (flag)
		{
			Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, CalCheckSum8bit);	//Excute Nandflash Program
		}
		else
		{
				Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, CalCheckSum);	//Excute Nandflash Program
		}
*/
		//计算Checksum
		BYTE data[64];
		int	Checksum=0;
		unsigned long i;
		for (i=0;i<filelength;i++)
		{
			Checksum=Checksum+(*ProgramDataPtr);
			ProgramDataPtr++;
		}
//		Sleep(50);
		unsigned long Status;
//		Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten,UpLoadX0Data);	//Set X0 DATA
		Sleep(20);
		data[0]=0;
		data[1]=0;
		while((data[0]!=0X55) && (data[1]!=0xaa))
		{
			Status = USBICE_Read(&data[0],64);
			if (!Status)
				return false;
				//break;
		}
		Set_USB_Close(0x00);

		if ((data[2]+data[3]*256)!=(Checksum&0xffff))
		{
			OKFlag = false;
		}

	return OKFlag;
}


bool PlaySong(UINT StartAddr)
{
	//--Command write
	USB_Special_Patten = USB_Special_Patten + 0x40;
	Write4L_Cmd( SET_ADDRESS + USB_Special_Patten , StartAddr );
	Sleep(1);
	USB_Special_Patten = USB_Special_Patten + 0x40;
	Write1L_Cmd( PLAY_SONG + USB_Special_Patten , 0x01 );
	Set_USB_Close(0x00);
	return 1;
}

void ReadFlashID (int FlashAddr)
{
	int	Status;
	BYTE data[64];
	UINT Command = FlashAddr;//( (0X40 & 0xFFFF) << 16 ) | ( 0X80 & 0xFFFF ) ;
	USB_Special_Patten = USB_Special_Patten + 0x40;
	Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((FlashAddr&0xff)<<16 | SetIx1bkramValue));
	USB_Special_Patten = USB_Special_Patten + 0x40;
    Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten ,ReadMXFlashID );
	USB_Special_Patten = USB_Special_Patten + 0x40;

	Sleep(10);
	data[0]=0;
	while ((data[0]!=0X5B) && (data[1]!=0x5A))
	{
		Status = USBICE_Read(&data[0], 64);

		if ( ! Status )
			break;
	}
	Set_USB_Close(0x00);
}

//Croco pen的CS1是16BIT总线
void SwitchToCS1(void)
{
	USB_Special_Patten = USB_Special_Patten + 0x40;
    Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten ,CrocoPenDownloadCS1 );
}

//Croco pen的CS2是8BIT总线
void SwitchToCS2(void)
{
	USB_Special_Patten = USB_Special_Patten + 0x40;
    Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten ,CrocoPenDownloadCS2 );
}

⌨️ 快捷键说明

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