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

📄 ppgnewdlg.cpp

📁 烧录器的上位机控制程序代码,和下位机程序代码,包括USB通讯固件
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    m_ucSend1[1]= CONFIG/0x100;
    m_ucSend1[2]= CONFIG%0x100;
	WritePort1(m_ucSend1,3);
	Sleep(10);
	ReadPort1(m_ucRec1,3);
	Initial_subpro();
	m_cedit_status.SetWindowText("OTP烧写完毕!!");
	Sleep(20);
	//=================================================================
	m_cedit_status.SetWindowText("开始校验OTP/FILE>>>>>>>>>>>>>>>>>>");
	m_progress.ShowWindow(SW_SHOW);
	for (i=0;i<1024*2*RomSize/64;i++)
    {
		m_ucSend1[0]= 0xa1;
		WritePort1(m_ucSend1,1);
		m_progress.SetPos(i*100/(RomSize*32));
		Sleep(10);
		ReadPort2(CheckBuf,64);
		for(int j=0; j<64; j=j+1)
		{
			str_gtemp=str_hexcode.Mid(128*i+2*j, 2);
			
			str_gtemp1.Format("%.2X", CheckBuf[j]);
			
			if(str_gtemp!=str_gtemp1)
			{
				Buzzer_N(3);
				
				Initial_subpro();
				m_bwriteotp = 0;
				m_flag_rtx=0;
				str_gtemp.Format("%.4X", 32*i+j/2);
				m_cedit_status.SetWindowText("校验不对!!, 错误地址为:0X"+str_gtemp);	
				return;
			}
		}	
		Sleep(10);
	}
	//=========================读CONFIG
	BYTE config_h, config_l;
	config_h=CONFIG/0x100;
	config_l=CONFIG%0X100;
	m_ucSend1[0]= 0xa3;
	WritePort1(m_ucSend1,1);
    ReadPort1(m_ucRec1,3);
	if( ((m_ucRec1[1]&0xdf)!=(config_h&0xdf)) || (m_ucRec1[2]!=config_l) )
	{
		
		Buzzer_N(3);
		
		Initial_subpro();
		m_bwriteotp = 0;
		m_flag_rtx=0;
		m_cedit_status.SetWindowText("OTP校验错误!,CONFIG不对");
		return;		
	}		
	
	if( 1==IsDlgButtonChecked(IDC_CHECK1) )
	{
		m_ucSend1[0]= 0xab;
		WritePort1(m_ucSend1,1);
		Sleep(10);
		ReadPort1(m_ucRec1,2);
		if (m_ucRec1[0]==0x1)
		{
			m_cedit_status.SetWindowText("OTP加密成功");
		}
		else
		{
			m_cedit_status.SetWindowText("OTP加密不成功");
		}
		
	}

	m_cedit_status.SetWindowText("OTP烧写&校验通过!!");	
	Buzzer_N(1);
	m_bwriteotp = 0;
	Initial_subpro();
	m_flag_rtx=0;


}

void CPPGNEWDlg::MyBlankProVerify()
{
	m_cedit_status.SetWindowText("正在执行查空>>>>>>>>>>>>");
	UpdateWindow();
	for (int i=0;i<1024*2*RomSize/64;i++)
    {
		m_ucSend1[0]= 0xa1;
		DWORD Result = WritePort1(m_ucSend1,1);
		m_progress.SetPos(i*100/(32*RomSize));
	//	Sleep(10);
		ReadPort2(CheckBuf,64);
		for(int j=0; j<64; j=j+2)
		{
			if((CheckBuf[j]!=0x3f)||(CheckBuf[j+1]!=0xff))
			{
				Initial_subpro();
				Buzzer_N(3);
				m_bbpv=0;
				m_flag_rtx=0;
				m_cedit_status.SetWindowText("OTP不是空片!!");	
				return;
			}	
		}	
		Sleep(10);
	}
	//=========================读CONFIG
	m_ucSend1[0]= 0xa3;
	DWORD Result = WritePort1(m_ucSend1,1);
    ReadPort1(m_ucRec1,3);

	if( (m_ucRec1[1]!=CONFIG_BLANK/0x100)||(m_ucRec1[2]!=CONFIG_BLANK%0X100) )
	{
		
		Initial_subpro();
		Buzzer_N(3);
		m_bbpv=0;
		m_flag_rtx=0;
		m_cedit_status.SetWindowText("OTP不是空片:CONFIG非空 或者 OTP型号不对!!");	
		return;
	}		
	Initial_subpro();
//	m_cedit_status.SetWindowText("OTP查空测试通过!!");
//	UpdateWindow();
	//========发送指令到USB,要求写64页,FLASH->OTP
	Sleep(50);
	m_nPos=0;
	m_progress.ShowWindow(SW_SHOW);
	m_progress.SetPos(0);
	m_cedit_status.SetWindowText("正在执行FLASH->OTP!!");
	UpdateWindow();
	m_ucSend1[0] = 0xb0;
	for(BYTE k=0; k<RomSize*16; k++)
	{
		m_progress.SetPos(k*100/(RomSize*16));
		m_ucSend1[1] = k;
		WritePort1(m_ucSend1,2);	//PC->Usb
		Sleep(10);
	}	
	//===========================================================
	m_cedit_status.SetWindowText("正在执行校验OTP!!");
	UpdateWindow();
	Sleep(50);
	//===========================================================
	m_ucSend1[0] = 0xb1;
	for(k=0; k<RomSize*16; k++)
	{
		m_progress.SetPos(k*100/(RomSize*16));
		m_ucSend1[1] = k;
		WritePort1(m_ucSend1,2);	//PC->Usb
		Sleep(10);
		DWORD Result = ReadPort1(m_ucRec1,3);
		if(m_ucRec1[2]>0x7f)
		{
			Buzzer_N(3);
			Initial_subpro();
			m_bbpv=0;
			m_flag_rtx=0;
			m_cedit_status.SetWindowText("VERIFY完毕, OTP不对!!");
			return;
		}
	}
	//==========================================================
	m_ucSend1[0]= 0xb4;				//write_config(flash->otp)
	WritePort1(m_ucSend1,1);
	Sleep(10);
	ReadPort1(m_ucRec1, 3);
	BOOL _Protect=0;
	if( (m_ucRec1[1]&0x20)==0x00 )
		_Protect=1;
	//==========================================================
	m_ucSend1[0]= 0xb5;				//verify_config(flash->otp)
	WritePort1(m_ucSend1,1);
	Sleep(10);
	ReadPort1(m_ucRec1, 2);
	if(m_ucRec1[1]!=0x00)
	{
		Buzzer_N(3);
		Initial_subpro();
		m_bbpv=0;
		m_flag_rtx=0;
		m_cedit_status.SetWindowText("VERIFY完毕, OTP的CONFIG不对!!");
		return;	
	}
	if (_Protect)
	{
		m_ucSend1[0]= 0xab;			//加密
		WritePort1(m_ucSend1,1);
	//	Sleep(10);
		ReadPort1(m_ucRec1,2);
		if (m_ucRec1[0]==0x1)
		{
			m_cedit_status.SetWindowText("OTP加密成功");
		}
		else
		{
			m_cedit_status.SetWindowText("OTP加密不成功");
		}
	}


	Buzzer_N(1);
	Initial_subpro();
	m_bbpv=0;
	m_flag_rtx=0;
	m_cedit_status.SetWindowText("BLANK-PRO-VERIFY完毕!!");
}


void CPPGNEWDlg::MyWriteVerify_FLASH()
{
	//========发送指令到USB,要求写64页,FLASH->OTP
	Sleep(50);
	m_nPos=0;
	m_progress.ShowWindow(SW_SHOW);
	m_progress.SetPos(0);
	m_cedit_status.SetWindowText("正在执行FLASH->OTP!!");
	UpdateWindow();
	m_ucSend1[0] = 0xb0;
	for(BYTE k=0; k<RomSize*16; k++)
	{
		m_progress.SetPos(k*100/(RomSize*16));
		m_ucSend1[1] = k;
		WritePort1(m_ucSend1,2);	//PC->Usb
		Sleep(10);
	}	
	//==================================================
	//==================================================
	m_cedit_status.SetWindowText("正在执行校验OTP!!");
	UpdateWindow();
	m_ucSend1[0] = 0xb1;
	for(k=0; k<RomSize*16; k++)
	{
		m_progress.SetPos(k*100/(RomSize*16));
		m_ucSend1[1] = k;
		WritePort1(m_ucSend1,2);	//PC->Usb
		Sleep(10);
		DWORD Result = ReadPort1(m_ucRec1,3);
		if(m_ucRec1[2]>0x7f)
		{
			Buzzer_N(3);
			Initial_subpro();
			m_bWriteVerify_f=0;
			m_flag_rtx=0;
			m_cedit_status.SetWindowText("VERIFY完毕, OTP不对!!");
			return;
		}
	}
	//=========================================================
	m_ucSend1[0]= 0xb4;				//write_config(flash->otp)
	WritePort1(m_ucSend1,1);
	Sleep(10);
	ReadPort1(m_ucRec1, 3);
	BOOL _Protect=0;
	if( (m_ucRec1[1]&0x20)==0x00 )
		_Protect=1;
	//=========================================================
	m_ucSend1[0]= 0xb5;				//verify_config(flash->otp)
	WritePort1(m_ucSend1,1);
	Sleep(10);
	ReadPort1(m_ucRec1, 2);
	if(m_ucRec1[1]!=0x00)
	{
		Buzzer_N(3);
		Initial_subpro();
		m_bWriteVerify_f=0;
		m_flag_rtx=0;
		m_cedit_status.SetWindowText("VERIFY完毕, OTP的CONFIG不对!!");
		return;	
	}
	//====================================
		if (_Protect)
	{
		m_ucSend1[0]= 0xab;			//加密
		WritePort1(m_ucSend1,1);
	//	Sleep(10);
		ReadPort1(m_ucRec1,2);
		if (m_ucRec1[0]==0x1)
		{
			m_cedit_status.SetWindowText("OTP加密成功");
		}
		else
		{
			m_cedit_status.SetWindowText("OTP加密不成功");
		}
	}
	Buzzer_N(1);
	Initial_subpro();
	m_bWriteVerify_f=0;
	m_flag_rtx=0;
	m_cedit_status.SetWindowText("VERIFY完毕!!");

}

void CPPGNEWDlg::MyVerify_FLASH()
{
	//===========================================================
	m_cedit_status.SetWindowText("正在执行校验OTP!!");
	UpdateWindow();
	m_ucSend1[0] = 0xb1;
	for(BYTE k=0; k<RomSize*16; k++)
	{
		m_progress.SetPos(k*100/(RomSize*16));
		m_ucSend1[1] = k;
		WritePort1(m_ucSend1,2);	//PC->Usb
		Sleep(10);
		DWORD Result = ReadPort1(m_ucRec1,3);
		if(m_ucRec1[2]>0x7f)
		{
			Buzzer_N(3);
			Initial_subpro();
			m_bverify_f=0;
			m_flag_rtx=0;
			m_cedit_status.SetWindowText("VERIFY完毕, OTP不对!!");
			return;
		}
	}
	m_ucSend1[0]= 0xb5;				//verify_config(flash->otp)
	WritePort1(m_ucSend1,1);
	Sleep(10);
	ReadPort1(m_ucRec1, 2);
	if(m_ucRec1[1]!=0x00)
	{
		Buzzer_N(3);
		Initial_subpro();
		m_bverify_f=0;
		m_flag_rtx=0;
		m_cedit_status.SetWindowText("VERIFY完毕, OTP的CONFIG不对!!");
		return;	
	}
	Buzzer_N(1);
	Initial_subpro();
	m_bverify_f=0;
	m_flag_rtx=0;
	m_cedit_status.SetWindowText("VERIFY完毕!!");
	
}

BOOL CPPGNEWDlg::MyPinTest()
{
    m_ucSend1[0] = 0xc0;
	m_ucSend1[1] = OTP_TYPE;
	WritePort1(m_ucSend1,2);	//PC->Usb
	Sleep(10);
	DWORD Result = ReadPort1(m_ucRec1,2);
	return m_ucRec1[1];	
}

void CPPGNEWDlg::OnSelchangeComboType() 
{
	// TODO: Add your control notification handler code here
	m_cstatic_fchksum.SetWindowText("文件CHECKSUM:");
	m_cstatic_fconfig.SetWindowText("文件CONFIG:");
	m_clvr.SetCurSel(-1);
	m_cclock.SetCurSel(-1);
	GetDlgItem(IDC_COMBO_LVR)->EnableWindow(1);
	GetDlgItem(IDC_COMBO_CLOCK)->EnableWindow(1);
	//	int i=m_ctype.GetCurSel();
	OTP_TYPE=m_ctype.GetCurSel();	//
	
	CString str_temp1;
	CONFIG_BLANK=0X2FFF;
	
	switch (OTP_TYPE)
	{
	case 0x00:		//10P40封装片
		CONFIG_BLANK=0X2FFF;
		RomSize=4;
		GetDlgItem(IDC_COMBO_LVR)->EnableWindow(1);
		GetDlgItem(IDC_COMBO_CLOCK)->EnableWindow(1);
		m_cedit_status.SetWindowText("PM10P40(20PIN/16PIN封装片), RomSize:4K, 空片CONFIG:0X2FFF");
		break;
	case 0x01:		//10P40窗口片
		CONFIG_BLANK=0X3FFF;
		RomSize=4;
		GetDlgItem(IDC_COMBO_LVR)->EnableWindow(1);
		GetDlgItem(IDC_COMBO_CLOCK)->EnableWindow(1);
		m_cedit_status.SetWindowText("PM10P40(8PIN封装片/20PIN窗口片), RomSize:4K, 空片CONFIG:0X3FFF");
		break;
	case 0x02:		//11P40片
		CONFIG_BLANK=0X3FFF;
		RomSize=4;
		GetDlgItem(IDC_COMBO_LVR)->EnableWindow(0);
		GetDlgItem(IDC_COMBO_CLOCK)->EnableWindow(0);
		m_cedit_status.SetWindowText("PM11P40片, RomSize:4K, 空片CONFIG:0X3FFF");
		break;
	case 0x03:		//12P80片
		CONFIG_BLANK=0X3FFF;
		RomSize=8;
		GetDlgItem(IDC_COMBO_LVR)->EnableWindow(0);
		GetDlgItem(IDC_COMBO_CLOCK)->EnableWindow(0);
		m_cedit_status.SetWindowText("PM12P80片, RomSize:8K, 空片CONFIG:0X3FFF");
		break;
	case 0x04:		//10P20片
		CONFIG_BLANK=0X27FF;
		RomSize=2;
		GetDlgItem(IDC_COMBO_LVR)->EnableWindow(1);
		GetDlgItem(IDC_COMBO_CLOCK)->EnableWindow(1);
		m_cedit_status.SetWindowText("PM10P20片, RomSize:2K, 空片CONFIG:0X27FF");
		break;
	default:
		break;	
	}
	//=====send ic_type to flash_rom========
	m_cedit_file.SetWindowText(_T(""));
	m_flag_opened=0;
	str_rxhex.Empty();
	
	CONFIG=CONFIG_BLANK;
	str_temp1.Format("%.4X", CONFIG);
	m_cstatic_nconfig.SetWindowText("NEW CONFIG: 0X"+str_temp1);
	
}

void CPPGNEWDlg::Buzzer_N(int time)
{
	m_flag_rtx=1;
	if(time==3)
	{
		m_ucSend1[0]= 0x03;
		WritePort1(m_ucSend1,1);
		Sleep(1000);
		ReadPort1(m_ucRec1,1);
	}
	else
	{
		m_ucSend1[0]= 0x02;
		WritePort1(m_ucSend1,1);
		Sleep(500);
		ReadPort1(m_ucRec1,1);
	}
	
}




void CPPGNEWDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	//=============================
		
	CDialog::OnTimer(nIDEvent);
}



void CPPGNEWDlg::OnButtonHelp() 
{
	// TODO: Add your control notification handler code here
	
	char   lpPath[_MAX_PATH];   
	if( GetModuleFileName(NULL,lpPath,_MAX_PATH)==0)   
	{   
		return;   
	}   
	CString   sName;   
	sName.Format("%s",lpPath);			///当前文件全路径名。  
	sName=sName.Left(sName.ReverseFind('\\'));///去除文件名部分
	str_gtemp=sName+"\\help.txt";
	
	CFile file(str_gtemp,CFile::modeRead);
	char *pBuf;
	CString file_buffer;
	DWORD dwFileLen;
	dwFileLen=file.GetLength();
	pBuf=new char[dwFileLen+1];
	pBuf[dwFileLen]=0;
	file.Read(pBuf,dwFileLen);
	file.Close();
	m_cedit_buf.SetWindowText(pBuf);		//测试//???	
}
	

⌨️ 快捷键说明

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