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

📄 fcdfile.cpp

📁 里面有通过JTAG口对FLASH的烧写代码
💻 CPP
字号:
#include	"StdAfx.h"

#include	"FluteD.h"

#include	"FCDFile.h"

int CFCDFile::Setup(char * fname)
{
	int i;

	AddLog("\n[Setup FCD File]\n");
	GetPrivateProfileString(FCD_CHAIN, FCD_DEV, "", bsdl_file, 1024, fname);
	if(bsdl_file[0] == 0)
	{
		AddLog("No BSDL in FCD !\n");
		return ERR_TRUE;
	}

	nAddrWidth = GetPrivateProfileInt(FCD_FLASH, FCD_ADDRWIDTH, 0, fname);
	nDataWidth = GetPrivateProfileInt(FCD_FLASH, FCD_DATAWIDTH, 0, fname);
	if(!nAddrWidth || !nDataWidth)
	{
		AddLog("Flash Map ERROR\n");
		return ERR_TRUE;
	}

	for(i=0; i<MAX_FCMD; i++) 
	{
		WriteCmd.cmd[i] = 0;
		EraseCmd.cmd[i] = 0;
	}
	WriteCmd.length = 0;
	EraseCmd.length = 0;

	char cmdstr[1024];

	GetPrivateProfileString(FCD_FLASH, FCD_WRITECMD, NULL, cmdstr, 1024, fname);
	if(cmdstr[0]==0)
	{
		AddLog("NO Flash Write Command\n");
		return ERR_TRUE;
	}
	sscanf(cmdstr, "%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx", 
		&WriteCmd.addr[0],
		&WriteCmd.cmd[0],
		&WriteCmd.addr[1],
		&WriteCmd.cmd[1],
		&WriteCmd.addr[2],
		&WriteCmd.cmd[2],
		&WriteCmd.addr[3],
		&WriteCmd.cmd[3],
		&WriteCmd.addr[4],
		&WriteCmd.cmd[4],
		&WriteCmd.addr[5],
		&WriteCmd.cmd[5],
		&WriteCmd.addr[6],
		&WriteCmd.cmd[6],
		&WriteCmd.addr[7],
		&WriteCmd.cmd[7]
	);

	GetPrivateProfileString(FCD_FLASH, FCD_ERASECMD, NULL, cmdstr, 1024, fname);
	if(cmdstr[0]==0)
	{
		AddLog("NO Flash Erase Command");
		return ERR_TRUE;
	}
	sscanf(cmdstr, "%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx,%lx", 
		&EraseCmd.addr[0],
		&EraseCmd.cmd[0],
		&EraseCmd.addr[1],
		&EraseCmd.cmd[1],
		&EraseCmd.addr[2],
		&EraseCmd.cmd[2],
		&EraseCmd.addr[3],
		&EraseCmd.cmd[3],
		&EraseCmd.addr[4],
		&EraseCmd.cmd[4],
		&EraseCmd.addr[5],
		&EraseCmd.cmd[5],
		&EraseCmd.addr[6],
		&EraseCmd.cmd[6],
		&EraseCmd.addr[7],
		&EraseCmd.cmd[7]
	);

	for(i=0; i<MAX_FCMD; i++) 
	{
		if( WriteCmd.cmd[i] == 0 && WriteCmd.addr[i] == 0)
			break;
	}
	WriteCmd.length = i;
	for(i=0; i<MAX_FCMD; i++) 
	{
		if( EraseCmd.cmd[i] == 0 && EraseCmd.addr[i] == 0)
			break;
	}
	EraseCmd.length = i;

	nEraseDelay = 0;
	GetPrivateProfileString(FCD_FLASH, FCD_ERASEDLY, NULL, cmdstr, 1024, fname);
	if(cmdstr[0]!=0)
	{
		sscanf(cmdstr, "%d", &nEraseDelay);
	}

	for(i=0; i<MAX_FBLK; i++) Block[i].num = 0;
	GetPrivateProfileString(FCD_FLASH, FCD_BLOCKG, NULL, cmdstr, 1024, fname);
	if(cmdstr[0]==0)
	{
		AddLog("NO Flash Block");
		return ERR_TRUE;
	}
	sscanf(cmdstr, "%lx,%d,%lx,%d,%lx,%d,%lx,%d,%lx,%d,%lx,%d,%lx,%d,%lx,%d",
		&Block[0].size, &Block[0].num,
		&Block[1].size, &Block[1].num,
		&Block[2].size, &Block[2].num,
		&Block[3].size, &Block[3].num,
		&Block[4].size, &Block[4].num,
		&Block[5].size, &Block[5].num,
		&Block[6].size, &Block[6].num,
		&Block[7].size, &Block[7].num
	);

	
	char sz_aux[8];
	// Setup Address Map
	
	for(i=0; i<nAddrWidth; i++)
	{
		sprintf(sz_aux, "A%d\0", i);
		GetPrivateProfileString(FCD_FLASH, sz_aux, NULL, cmdstr, 1024, fname);
		if(cmdstr[0]==0)
		{
			AddLog("Miss Flash Address Map");
			return ERR_TRUE;
		}
		sscanf(cmdstr, "%s", AddrPin[i]);
	}
	
	// Setup Data Map
	
	for(i=0; i< (nDataWidth * 8); i++)
	{
		sprintf(sz_aux, "D%d\0", i);
		GetPrivateProfileString(FCD_FLASH, sz_aux, NULL, cmdstr, 1024, fname);
		if(cmdstr[0]==0)
		{
			AddLog("Miss Flash Data Map");
			return ERR_TRUE;
		}
		sscanf(cmdstr, "%s", DataPin[i]);
	}
	
	// Setup RD Map
	
	GetPrivateProfileString(FCD_FLASH, FCD_RDPIN, NULL, RDPin, 
		MAX_PNAMELEN, fname);
	if(RDPin[0]==0)
	{
		AddLog("NO Flash RD Map");
		return ERR_TRUE;
	}
	
	// Setup WR Map
	
	GetPrivateProfileString(FCD_FLASH, FCD_WRPIN, NULL, WRPin, 
		MAX_PNAMELEN, fname);
	if(WRPin[0]==0)
	{
		AddLog("NO Flash WR Map");
		return ERR_TRUE;
	}
	
	// Setup CS Map

	GetPrivateProfileString(FCD_FLASH, FCD_CSPIN, NULL, CSPin, 
		1024, fname);
	if(CSPin[0]==0)
	{
		AddLog("NO Flash CS Map");
		return ERR_TRUE;
	}
	
	// Reset Pin
	
	nResetCtrl = GetPrivateProfileInt(FCD_FLASH, FCD_RSTCTRL, 0, fname);

	return ERR_FALSE;
}

int CFCDFile::Dump()
{
	return 0;
}

⌨️ 快捷键说明

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