📄 ppgnewdlg.cpp
字号:
return;
}
if( !MyPinTest() )
{
MessageBox("IC放置位置不对,或没有放IC");
return;
}
m_flag_rtx=1;
m_cedit_status.SetWindowText("开始读出CONFIG>>>>>>>>>>>>>>>>>>>>>");
m_ucSend1[0]= 0xa3;
DWORD Result = WritePort1(m_ucSend1,1);
ReadPort1(m_ucRec1,3);
Buzzer_N(1);
str_gtemp.Format("%.2X%.2X", m_ucRec1[1],m_ucRec1[2]);
m_cedit_status.SetWindowText("CONFIG数据为:0X"+str_gtemp);
Initial_subpro();
m_flag_rtx=0;
//==================================================
}
void CPPGNEWDlg::OnButtonLock()
{
// TODO: Add your control notification handler code here
if(m_flag_rtx)
return;
if (Initial_subpro()!=0)
{
m_flag_rtx=0;
m_cedit_status.SetWindowText("联机不成功!!!");
AfxMessageBox("联机不成功!!!");
return;
}
if( !MyPinTest() )
{
MessageBox("IC放置位置不对,或没有放IC");
return;
}
m_flag_rtx=1;
m_cedit_status.SetWindowText("开始写OTP加密位>>>>>>>>>>>>");
m_ucSend1[0]= 0xab;
WritePort1(m_ucSend1,1);
Sleep(10);
ReadPort1(m_ucRec1,2);
if (m_ucRec1[1]==0x1)
{
m_cedit_status.SetWindowText("OTP加密成功");
}
else
{
m_cedit_status.SetWindowText("OTP加密不成功");
}
Buzzer_N(1);
m_flag_rtx=0;
}
void CPPGNEWDlg::OnButtonWv()
{
// TODO: Add your control notification handler code here
if(m_flag_rtx)
return;
if (Initial_subpro()!=0)
{
m_flag_rtx=0;
m_cedit_status.SetWindowText("联机不成功!!!");
AfxMessageBox("联机不成功!!!");
return;
}
if( !MyPinTest() )
{
MessageBox("IC放置位置不对,或没有放IC");
return;
}
m_flag_rtx=1;
m_cedit_status.SetWindowText("开始WRITE_VERIFY(FLASH->OTP)>>>>>>>>>>>>");
m_bWriteVerify_f=1;
m_progress.ShowWindow(SW_SHOW);
}
UINT CPPGNEWDlg::ThreadFun(LPVOID pParam)
{
CPPGNEWDlg *pUsb = (CPPGNEWDlg *) pParam;
while(1)
{
if (pUsb->m_bwriteotp)
{
pUsb->MyWriteVerifyOtp();
}
if (pUsb->m_breadotp)
{
pUsb->MyReadOtp();
}
if (pUsb->m_bnewflash)
{
pUsb->MyWriteFlash();
}
if (pUsb->m_breadflash)
{
pUsb->MyReadFlash();
}
if(pUsb->m_bblank)
{
pUsb->m_bblank = 0;
pUsb->MyBlank();
}
if(pUsb->m_bbpv)
{
pUsb->MyBlankProVerify();
}
if(pUsb->m_bWriteVerify_f)
{
pUsb->MyWriteVerify_FLASH();
}
if(pUsb->m_bverify_f)
{
pUsb->MyVerify_FLASH();
}
if(pUsb->m_bverifyotp_file)
{
pUsb->m_bverifyotp_file = 0;
pUsb->MyVerifyOtp();
}
Sleep(50);
}
return 1;
}
//下载FILE到FLASH
void CPPGNEWDlg::MyWriteFlash()
{
CByteArray hexdata;
String2Hex(str_hexcode, hexdata);
m_ucSend1[0]= 0xa0;
DWORD Result = WritePort1(m_ucSend1,1); //PC->Usb,
for (int i=0;i<1024*RomSize*2/64;i++)
{
m_progress.SetPos(i*100/(RomSize*32));
WritePort2(&hexdata[i*64],64);
Sleep(20); //??? 延时是否够
DWORD Result = ReadPort1(m_ucRec1,1);
}
m_ucSend1[0]= 0xad;
m_ucSend1[1]= CONFIG/0x100;
m_ucSend1[2]= CONFIG%0x100;
m_ucSend1[3]= 0xa5;
m_ucSend1[4]=m_ctype.GetCurSel();
WritePort1(m_ucSend1,5);
Sleep(50);
//===========================发送型号和校验下载的内容
ReadPort1(m_ucRec1,5);
if((m_ucRec1[1]== CONFIG/0x100)&&(m_ucRec1[2]== CONFIG%0x100)&&(m_ucRec1[3]==CHECKSUM_F/256)&&(m_ucRec1[4]==CHECKSUM_F%256) )
{
Buzzer_N(1);
Initial_subpro();
m_bnewflash=0;
m_flag_rtx=0;
m_cedit_status.SetWindowText("FLASH更新完毕!!");
return;
}
else
{
Buzzer_N(3);
Initial_subpro();
m_bnewflash=0;
m_flag_rtx=0;
m_cedit_status.SetWindowText("FLASH更新失败!!");
return;
}
}
void CPPGNEWDlg::MyReadFlash()
{
for (int i=0;i<1024*2*RomSize/128;i++)
{
m_progress.SetPos(i*100/(16*RomSize));
m_ucSend1[0]= 0xa5;
DWORD Result = WritePort1(m_ucSend1,1);
Sleep(10); //???
ReadPort2(&CheckBuf[i*128],128); //???
Sleep(10);
}
str_rxhex.Empty();
for(int k=0;k<1024*2*RomSize;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(CheckBuf+k); //字符型
str_gtemp.Format("%02X",bt); //将字符以十六进制方式送入临时变量strtemp存放
str_rxhex=str_rxhex+str_gtemp;
}
//"开始读出CONFIG>>>>>>>>>>>>>>>>>>>>>");
m_ucSend1[0]= 0xac;
DWORD Result = WritePort1(m_ucSend1,1);
ReadPort1(m_ucRec1,5);
str_gtemp.Format("%.2X%.2X", m_ucRec1[1],m_ucRec1[2]);
str_rxhex=str_rxhex+str_gtemp;
CString str_otp=_T("");
if(m_ucRec1[3]!=0xa5)
str_otp="FLASH还没有下载过程序";
else
{
switch (m_ucRec1[4])
{
case 0x00:
str_otp="FLASH选定的型号是:PM10P40(20PIN/16PIN封装片) ";
break;
case 0x01:
str_otp="FLASH选定的型号是:PM10P40(8PIN封装片/20PIN窗口片) ";
break;
case 0x02:
str_otp="FLASH选定的型号是:PM11P40";
break;
case 0x03:
str_otp="FLASH选定的型号是:PM12P80";
break;
case 0x04:
str_otp="FLASH选定的型号是:PM10P20 ";
break;
default:
str_otp="FLASH选定的型号是:PM10P40 ";
break;
}
}
//-----------------------------------------
CString str_temp="0000:| ";
CString str_adr="";
for(i=0; i<1024*RomSize*4; i=i+4)
{
str_temp=str_temp+str_rxhex.Mid(i, 4)+" | ";
if(((i+4)%32==0)&&(i!=0)&&(i!=(1024*RomSize*4-4)))
{
str_adr.Format("%.4x", (i+4)/4);
str_temp=str_temp+"\r\n"+str_adr+":| ";
}
}
m_cedit_buf.SetWindowText(str_temp);
//================================= 计算文件CHECKSUM值
WORD byte_2=0x0000;
WORD check_sum=0x0000;
for(i=0; i<RomSize*1024; i++)
{
sscanf(str_rxhex.Mid(i*4, 4), "%X", &byte_2);
check_sum=check_sum+byte_2;
}
str_temp.Format("%.4X", check_sum);
m_cstatic_bufchksum.SetWindowText("缓存CHECKSUM: 0X"+str_temp);
//=================================
m_cstatic_bufconfig.SetWindowText("缓存CONFIG: 0X"+str_rxhex.Mid(4*1024*RomSize, 4));
Buzzer_N(1);
Initial_subpro();
m_breadflash=0;
m_flag_rtx=0;
m_cedit_status.SetWindowText("读FLASH完成 "+str_otp);
}
void CPPGNEWDlg::MyVerifyOtp() //verify(otp/file)
{
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/(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_bverifyotp_file=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;
DWORD Result = 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_bverifyotp_file=0;
m_flag_rtx=0;
m_cedit_status.SetWindowText("OTP校验错误!,CONFIG不对");
return;
}
m_cedit_status.SetWindowText("OTP校验通过!!");
Buzzer_N(1);
m_bverifyotp_file=0;
Initial_subpro();
m_flag_rtx=0;
}
void CPPGNEWDlg::MyBlank()
{
Sleep(10);
BYTE config_h, config_l;
config_h=CONFIG_BLANK/0x100;
config_l=CONFIG_BLANK%0X100;
m_ucSend1[0]= 0xa1;
for (int i=0;i<1024*2*RomSize/64;i++)
{
DWORD Result = WritePort1(m_ucSend1,1);
if(Result!=0)
{
MessageBox("通讯错误");
}
m_progress.SetPos(i*100/(RomSize*32));
// Sleep(10);
Result=ReadPort2(CheckBuf,64);
if(Result!=0)
{
MessageBox("通讯错误");
}
for(int j=0; j<64; j=j+2)
{
if((CheckBuf[j]!=0x3f)||(CheckBuf[j+1]!=0xff))
{
Buzzer_N(3);
Initial_subpro();
m_bblank =0;
m_flag_rtx=0;
str_gtemp.Format("%.4X", 32*i+j/2);
m_cedit_status.SetWindowText("OTP不是空片!!,非空单元为:0X"+str_gtemp);
return;
}
}
// Sleep(10);
}
//=========================读CONFIG
m_ucSend1[0]= 0xa3;
DWORD Result = WritePort1(m_ucSend1,1);
ReadPort1(m_ucRec1,3);
if( (m_ucRec1[1]!=config_h)||(m_ucRec1[2]!=config_l) )
{
Buzzer_N(3);
Initial_subpro();
m_bbpv=0;
m_flag_rtx=0;
m_cedit_status.SetWindowText("CONFIG非空或者IC型号选错!!");
return;
}
Buzzer_N(1);
m_cedit_status.SetWindowText("OTP是空片!!");
m_bblank =0;
Initial_subpro();
m_flag_rtx=0;
}
void CPPGNEWDlg::MyReadOtp()
{
for (int i=0;i<1024*2*RomSize/64;i++)
{
m_progress.SetPos(i*100/(32*RomSize));
m_ucSend1[0]= 0xa1;
DWORD Result = WritePort1(m_ucSend1,1);
// Sleep(10);
ReadPort2(&CheckBuf[i*64],64);
Sleep(10);
}
str_rxhex.Empty();
for(int k=0;k<1024*2*RomSize;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(CheckBuf+k); //字符型
str_gtemp.Format("%02X",bt); //将字符以十六进制方式送入临时变量strtemp存放
str_rxhex=str_rxhex+str_gtemp;
}
// m_cedit_status.SetWindowText("开始读出CONFIG>>>>>>>>>>>>>>>>>>>>>");
m_ucSend1[0]= 0xa3;
DWORD Result = WritePort1(m_ucSend1,1);
ReadPort1(m_ucRec1,3);
str_gtemp.Format("%.2X%.2X", m_ucRec1[1],m_ucRec1[2]);
str_rxhex=str_rxhex+str_gtemp;
//------------------------------------------
CString str_temp="0000:| ";
CString str_adr="";
for(i=0; i<1024*RomSize*4; i=i+4)
{
str_temp=str_temp+str_rxhex.Mid(i, 4)+" | ";
if(((i+4)%32==0)&&(i!=0)&&(i!=(1024*RomSize*4-4)))
{
str_adr.Format("%.4x", (i+4)/4);
str_temp=str_temp+"\r\n"+str_adr+":| ";
}
}
m_cedit_buf.SetWindowText(str_temp);
//================================= 计算文件CHECKSUM值
WORD byte_2=0x0000;
WORD check_sum=0x0000;
for(i=0; i<1024*RomSize; i++)
{
sscanf(str_rxhex.Mid(i*4, 4), "%X", &byte_2);
check_sum=check_sum+byte_2;
}
str_temp.Format("%.4X", check_sum);
m_cstatic_bufchksum.SetWindowText("缓存CHECKSUM: 0X"+str_temp);
//=================================
m_cstatic_bufconfig.SetWindowText("缓存CONFIG: 0X"+str_rxhex.Mid(RomSize*1024*4, 4));
Buzzer_N(1);
Initial_subpro();
m_breadotp=0;
m_flag_rtx=0;
m_cedit_status.SetWindowText("读取OTP->BUFFER完成");
}
void CPPGNEWDlg::MyWriteVerifyOtp()
{
CByteArray hexdata;
String2Hex(str_hexcode, hexdata);
m_ucSend1[0]= 0xaa;
DWORD Result = WritePort1(m_ucSend1,1);
for (int i=0;i<1024*RomSize/64*2;i++)
{
m_progress.SetPos(i*100/(32*RomSize));
WritePort2(&hexdata[i*64],64);
Sleep(10); //???
DWORD Result = ReadPort1(m_ucRec1,1);
}
m_ucSend1[0]= 0xa4;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -