LPC系列MCU ISP上位机协议源码

  • W0_376954
    了解作者
  • 2.5KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-19 05:37
    上传日期
LPC ARM ISP 上位机的源码 具体协议请参考NXP的MCU的数据手册
LPC21XXISP.rar
  • www.pudn.com.txt
    218B
  • LPC21XXISP.cpp
    12.6KB
内容介绍
////////////////////////////////////////////////////////////////////////////////////// // 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
评论
    相关推荐