//////////////////////////////////////////////////////////////////////////////////////
// WWW.DRAGON-2008.COM 版权所有
// 您可以将该程序用在任何您需要的地方,但请您保留此信息
// 欢迎提供修改意见
// VC6.0程序
// 请先把由ADS生成的HEX文件通过HEX2BIN专程BIN文件
// 串口操作需要CSerialPort类支持
void ProgramFlash()
{
CComPort xComPort;
char str1[50]="Synchronized\r\n";
char stt[100];
if(xComPort.Open("COM1")!=ERROR_SUCCESS)
{
MessageBox("打开串口失败!");
return ;
}
xComPort.Setup(CComPort::EBaud9600,CComPort::EData8,CComPort::EParNone,CComPort::EStop1);
xComPort.SetupHandshaking(CComPort::EHandshakeOff);
int linelen;
int linecnt;
char outbuf[100];
int iSect=0;
DWORD xLen,rLen;
CFile file;
if(file.Open("G:\\Burn.bin",CFile::modeRead,NULL)==NULL)
{
MessageBox("BIN文件打开失败!");
return ;
}
xLen=file.GetLength();
BYTE *sBuf=(BYTE*)GlobalAlloc(LMEM_FIXED,xLen+3);
sBuf[xLen]=0;
sBuf[xLen+1]=0;
sBuf[xLen+2]=0;
if(sBuf==NULL)
{
file.Close();
MessageBox("分配内存失败!");
return ;
}
if(file.Read(sBuf,xLen)!=xLen)
{
file.Close();
MessageBox("读文件失败!");
return ;
}
file.Close();
DWORD tPos=0;
DWORD rCnt=0;
DWORD iPos=0;
DWORD xCrc=0;
int oPos=0;
DWORD ixx;
//////////////////////////////////
do
{
stt[0]=0x3F;
xComPort.Write(stt,1);
Sleep(10);
xComPort.Read(stt,100,&tPos);
rCnt++;
}while((tPos==0||tPos==1&&stt[0]==0x3F)&&rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
tPos=tPos;
rCnt=0;
do
{
xComPort.Read(&stt[tPos],100-tPos,&iPos);
tPos+=iPos;
if(tPos>=14) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,str1)!=0)
return ;
//////////////////////////////////
// Synchronized
xComPort.Write(str1,strlen(str1));
tPos=0;
rCnt=0;
do
{
xComPort.Read(&stt[tPos],100,&iPos);
tPos+=iPos;
if(tPos>=18) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,"Synchronized\r\nOK\r\n")!=0)
return ;
//////////////////////////////////
// 12000
rCnt=0;
tPos=0;
strcpy(str1,"12000\r\n");
xComPort.Write(str1,strlen(str1));
do
{
xComPort.Read(&stt[tPos],100,&iPos);
tPos+=iPos;
if(tPos>=11) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,"12000\r\nOK\r\n")!=0)
return ;
//////////////////////////////////
// U 23130
rCnt=0;
tPos=0;
strcpy(str1,"U 23130\r\n");
xComPort.Write(str1,strlen(str1));
do
{
xComPort.Read(&stt[tPos],100,&iPos);
tPos+=iPos;
if(tPos>=12) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,"U 23130\r\n0\r\n")!=0)
return ;
//////////////////////////////////
// J
rCnt=0;
tPos=0;
strcpy(str1,"J\r\n");
xComPort.Write(str1,strlen(str1));
do
{
xComPort.Read(&stt[tPos],100,&iPos);
tPos+=iPos;
Sleep(10);
rCnt++;
}while(rCnt<10);
stt[tPos]=0;
if(stt[0]!='J' ||
stt[1]!='\r' ||
stt[2]!='\n' ||
stt[3]!='0' ||
stt[4]!='\r' ||
stt[5]!='\n' ||
stt[tPos-2]!='\r' ||
stt[tPos-1]!='\n')
return ;
DWORD dwHardID=0;
for(int i=6;stt[i]!='\r';i++)
{
if(stt[i]>='0'&&stt[i]<='9') dwHardID=dwHardID*10+stt[i]-'0';
else
{
dwHardID=0;
return ;
}
}
m_HardID=dwHardID;
UpdateData(FALSE);
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
// 烧写FLASH
// P 0 1
tPos=0;
sprintf(outbuf,"P 0 %d\r\n",(xLen-1)/8192);
ixx=strlen(outbuf);
xComPort.Write(outbuf,ixx);
strcat(outbuf,"0\r\n");
ixx+=3;
do
{
xComPort.Read(&stt[tPos],100,&rLen);
tPos+=rLen;
if(tPos>=ixx) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,outbuf)!=0)
{
MessageBox("操作失败!");
return ;
}
// E 0 1
tPos=0;
sprintf(outbuf,"E 0 %d\r\n",(xLen-1)/8192);
ixx=strlen(outbuf);
xComPort.Write(outbuf,ixx);
strcat(outbuf,"0\r\n");
ixx+=3;
do
{
xComPort.Read(&stt[tPos],100,&rLen);
tPos+=rLen;
if(tPos>=ixx) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,outbuf)!=0)
{
MessageBox("操作失败!");
return ;
}
// W 40000200H 4096
// "W 1073742336 4096\r\n"
tPos=0;
strcpy(outbuf,"W 1073742336 4096\r\n");
ixx=strlen(outbuf);
xComPort.Write(outbuf,ixx);
strcat(outbuf,"0\r\n");
ixx+=3;
do
{
xComPort.Read(&stt[tPos],100,&rLen);
tPos+=rLen;
if(tPos>=ixx) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,outbuf)!=0)
{
MessageBox("操作失败!");
return ;
}
iPos=0;
while(iPos<xLen)
{
if(xLen-iPos>MAX_LINELEN)
linelen=MAX_LINELEN;
else
linelen=xLen-iPos;
if((iPos%4096)==4095)
{
outbuf[oPos++]=ENCODE_BYTE(1);
// file2.Write(outbuf,1);
outbuf [oPos++] = ENCODE_BYTE ((sBuf[iPos] & 0xFC) >> 2);
outbuf [oPos++] = ENCODE_BYTE ((sBuf[iPos] & 0x03) << 4);
outbuf [oPos++] = ENCODE_BYTE (0);
outbuf [oPos++] = ENCODE_BYTE (0);
// outbuf [oPos++] = '\0';
xCrc+=sBuf[iPos];
iPos++;
linecnt-=1;
outbuf[oPos++]='\r';
outbuf[oPos++]='\n';
outbuf[oPos++]=0;
// +++++++++++++++++++++++++++++++++++
// DATA
rCnt=0;
tPos=0;
ixx=strlen(outbuf);
xComPort.Write(outbuf,ixx);
Sleep(50);
do
{
xComPort.Read(&stt[tPos],100,&rLen);
tPos+=rLen;
if(tPos>=ixx) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,outbuf)!=0)
{
MessageBox("操作失败!");
return ;
}
// +++++++++++++++++++++++++++++++++++
// CRC + OK
sprintf(outbuf,"%d\r\n",xCrc);
xComPort.Write(outbuf,strlen(outbuf));
TRACE("CRC:%s\n",outbuf);
sprintf(outbuf,"%d\r\nOK\r\n",xCrc);
ixx=strlen(outbuf);
xCrc=0;
oPos=0;
// ..
rCnt=0;
tPos=0;
Sleep(50);
do
{
xComPort.Read(&stt[tPos],100,&rLen);
tPos+=rLen;
if(tPos>=ixx) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,outbuf)!=0)
{
MessageBox("操作失败!");
return ;
}
// PROGRAM
// P X X
sprintf(outbuf,"P %d %d\r\n",iSect/2,iSect/2);
ixx=strlen(outbuf);
xComPort.Write(outbuf,ixx);
strcat(outbuf,"0\r\n");
ixx+=3;
tPos=0;
Sleep(50);
do
{
xComPort.Read(&stt[tPos],100,&rLen);
tPos+=rLen;
if(tPos>=ixx) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,outbuf)!=0)
{
MessageBox("操作失败!");
return ;
}
// C Y 1073742336 4096
sprintf(outbuf,"C %d 1073742336 4096\r\n",iSect*4096);
ixx=strlen(outbuf);
xComPort.Write(outbuf,ixx);
strcat(outbuf,"0\r\n");
ixx+=3;
Sleep(50);
tPos=0;
do
{
xComPort.Read(&stt[tPos],100,&rLen);
tPos+=rLen;
if(tPos>=ixx) break;
Sleep(10);
rCnt++;
}while(rCnt<100);
if(rCnt==100)
{
MessageBox("操作失败!");
return ;
}
stt[tPos]=0;
if(strcmp(stt,outbuf)!=0)
{
MessageBox("操作失败!");
return ;
}
iSect++;
if(x
LPC系列MCU ISP上位机协议源码
5星 · 超过95%的资源 需积分: 12 125 浏览量
2011-11-10
15:43:24
上传
评论 5
收藏 2KB RAR 举报
jingchaobin
- 粉丝: 0
- 资源: 3
最新资源
- 2%EF%BC%9A%E9%99%95%E8%A5%BF%E
- yyspdz62_944.apk
- SAP公司间采购EDI配置-如何触发自动MIRO.docx
- python197基于图像识别的仪表实时监控系统.rar
- python196基于循环神经网络的情感分类系统.rar
- I2C驱动SHT30温湿度传感器和LCD12864使用例程(RSCG12864B)
- python193中学地理-中国的江河湖泊教学网(django).rar
- python191基于时间序列分析的大气污染预测软件(django).rar
- python190基于人脸识别智能化小区门禁管理系统.rar
- python189某医院体检挂号系统.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页