📄 ppgnewdlg.cpp
字号:
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 + -