C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 1 C51 COMPILER V9.01, COMPILATION OF MODULE IAPISP OBJECT MODULE PLACED IN .\output\IapIsp.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE code_bootloader\IapIsp.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\header_bootlo -ader) DEBUG OBJECTEXTEND PRINT(.\output\IapIsp.lst) OBJECT(.\output\IapIsp.obj) line level source 1 /******************************************************************************** 2 Copyright (C), Sinowealth Electronic. Ltd. 3 Author: Sino 4 Version: V0.0 5 Date: 2020/04/26 6 History: 7 V2.0 2020/04/26 Preliminary 8 ********************************************************************************/ 9 #include "MCURegister.h" 10 #include "C51_TYPE.H" 11 #include "Flash.h" 12 #include "IapIsp.h" 13 14 BOOL bIapIspFlg; //0£º±íʾµ±Ç°Ö´ÐÐIAP²Ù×÷£»1£º±íʾµ±Ç°Ö´ÐÐISP²Ù×÷ 15 BOOL bHandsheakOkFlg; 16 BOOL bUartSndOverFlg; 17 U16 uiUartRcvChkSum; 18 U8 ucUartErrCode; 19 U8 ucUartBufPT; 20 U32 ulIapDataPtr; 21 U32 ulIapChksum; 22 U32 ulIapRecDataLen; 23 U8 ucIapIndexBk; 24 U8 ucIapRestCommand; 25 U8 xdata ucUartBuf[150]; 26 U8 xdata ucIapBuf[MCU_CODE_SECTOR_SIZE]; 27 28 extern void UARTInit(void); 29 /************************************************************************************************* 30 * º¯ÊýÃû: UartSendAck 31 * ²Î Êý: ÎÞ 32 * ·µ»ØÖµ: ÎÞ 33 * Ãè Êö: µ±Slave½ÓÊÕÍêÊý¾Ý²¢´¦ÀíÍê³Éºó£¬¿ªÊ¼·µ»ØÊý¾Ý 34 *************************************************************************************************/ 35 void UartSendAck(void) 36 { 37 1 U8 i, DataBak; 38 1 U16 CheckSum = 0; 39 1 40 1 ucUartBuf[LENGTH] = 0x00; 41 1 ucUartBuf[COMMAND] = 0x0B; 42 1 43 1 DataBak = ucUartBuf[SOURCE]; //½»»»Ô´IDºÍÄ¿±êID 44 1 ucUartBuf[SOURCE] = ucUartBuf[TARGET]; 45 1 ucUartBuf[TARGET] = DataBak; 46 1 47 1 for(i=2; i<(ucUartBuf[LENGTH]+7); i++) 48 1 { 49 2 CheckSum += ucUartBuf[i]; 50 2 } 51 1 52 1 ucUartBuf[7+ucUartBuf[LENGTH]] = (U8)CheckSum; 53 1 ucUartBuf[8+ucUartBuf[LENGTH]] = (U8)(CheckSum>>8); 54 1 C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 2 55 1 bUartSndOverFlg = 0; 56 1 UartTxEn(ucUartBuf[ucUartBufPT]); 57 1 } 58 59 60 /************************************************************************************************* 61 * º¯ÊýÃû: IapHandShake 62 * ²Î Êý: ÎÞ 63 * ·µ»ØÖµ: ÎÞ 64 * Ãè Êö: ÎÕÊÖЭÒ飬½øÈëIAP»òÕßISPÉÕдÁ÷³Ì 65 bIapIspFlg: 0--IAP²Ù×÷£»1--ISP²Ù×÷ 66 *************************************************************************************************/ 67 void IapHandShake(void) 68 { 69 1 ucUartBuf[INDEXES] = 0; 70 1 if(ucUartBuf[DATA]=='I' && ucUartBuf[DATA+1]=='A' && ucUartBuf[DATA+2]=='P') 71 1 { 72 2 bIapIspFlg = IAP_MODE; 73 2 bHandsheakOkFlg = 1; 74 2 } 75 1 else if(ucUartBuf[DATA]=='I' && ucUartBuf[DATA+1]=='S' && ucUartBuf[DATA+2]=='P') 76 1 { 77 2 bIapIspFlg = ISP_MODE; 78 2 bHandsheakOkFlg = 1; 79 2 } 80 1 else 81 1 { 82 2 ucUartBuf[INDEXES] = IAPERROR_HANDSHAKE; //ÎÕÊÖʧ°Ü 83 2 bHandsheakOkFlg = 0; 84 2 } 85 1 } 86 87 88 /************************************************************************************************* 89 * º¯ÊýÃû: IapBeginAck 90 * ²Î Êý: ÎÞ 91 * ·µ»ØÖµ: ÎÞ 92 * Ãè Êö: IAP»òISP¿ªÊ¼²Ù×÷£¬²Á³ýCODEµÄ±¸·ÝÇø30K 93 *************************************************************************************************/ 94 void IapBeginAck(void) 95 { 96 1 U8 i, SectorNum, McuFlashType; 97 1 U32 McuFlashAddr; 98 1 99 1 ulIapDataPtr = 0; 100 1 ulIapChksum = 0; 101 1 ulIapRecDataLen = 0; 102 1 ulIapRecDataLen = ((U32)ucUartBuf[DATA+3]<<24) //Êý¾Ý³¤¶È 103 1 | ((U32)ucUartBuf[DATA+2]<<16) 104 1 | ((U32)ucUartBuf[DATA+1]<<8) 105 1 | (U32)ucUartBuf[DATA]; 106 1 107 1 if(!bHandsheakOkFlg) 108 1 { 109 2 ucUartBuf[INDEXES] = IAPERROR_HANDSHAKE; //ÎÕÊÖʧ°Ü 110 2 } 111 1 112 1 if((ulIapRecDataLen > IAP_BK_CODE_SIZE) && (bIapIspFlg == IAP_MODE)) 113 1 { 114 2 ucUartBuf[INDEXES] = IAPERROR_SIZE; //Èç¹ûÊý¾Ý³¤¶È²»µÈÓÚIAPºÍISP³¤¶È£¬Ôò -ĬÈÏΪ³¤¶ÈÒì³£ 115 2 } C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 3 116 1 else if((ulIapRecDataLen > ISP_CODE_SIZE) && (bIapIspFlg == ISP_MODE)) 117 1 { 118 2 ucUartBuf[INDEXES] = IAPERROR_SIZE; //Èç¹ûÊý¾Ý³¤¶È²»µÈÓÚIAPºÍISP³¤¶È£¬Ôò -ĬÈÏΪ³¤¶ÈÒì³£ 119 2 } 120 1 else 121 1 { 122 2 ucUartBuf[INDEXES] = 0; //ÏÈÔ¤Éè»Ø¸´³É¹¦ 123 2 ucIapIndexBk = 0; 124 2 125 2 //1. Èç¹ûµ±Ç°²Ù×÷ÊÇISP£¬ÔòÏȲÁ³ýBOOTÇøµÄ±êÖ¾£¬È»ºóÔÚBOOT_FLG_ISP_ADDÖÐдISP_FLG±êÖ¾0xA5 126 2 ucMcuFlashWrValid = 0x55; //ÉèÖÃMCU CodeÇø¿É²Ù×÷±êÖ¾£¬·À -Ö¹Îóд 127 2 McuFlashEraseSector(BOOT_FLG_START_ADDR, MCU_TYPE_CODE); 128 2 if(McuFlashBlankCheck(BOOT_FLG_START_ADDR, MCU_TYPE_CODE)) //²Á³ý½áÊøºó£¬ÐèÒª²é¿Õ 129 2 { 130 3 if(bIapIspFlg == ISP_MODE) 131 3 { 132 4 McuFlashWrOneByte(BOOT_FLG_ISP_ADDR, ISP_FLG, MCU_TYPE_CODE); 133 4 if(McuFlashRdOneByte(BOOT_FLG_ISP_ADDR, MCU_TYPE_CODE) != ISP_FLG) 134 4 { 135 5 ucUartBuf[INDEXES] = IAPERROR_WR; //Writeʧ°Ü 136 5 } 137 4 } 138 3 } 139 2 else 140 2 { 141 3 ucUartBuf[INDEXES] = IAPERROR_ERASE; //Eraseʧ°Ü 142 3 } 143 2 ucMcuFlashWrValid = 0; 144 2 145 2 //2. ²»¹ÜÊÇIAP»¹ÊÇISP£¬¶¼ÏȲÁ³ý³ÌÐòµÄËùÓÐSector£¬Èç¹ûÊÇISP£¬Ôò»¹ÐèÒª²Á³ýEEPROMÇø 146 2 if(ucUartBuf[INDEXES] == 0) //¼ì²éucUartBuf[INDEXES] 147 2 { 148 3 SectorNum = ulIapRecDataLen/MCU_CODE_SECTOR_SIZE; 149 3 for(i=0; i=(SectorNum-APP_PARA_SIZE/MCU_CODE_SECTOR_SIZE)) //EEPROM°´sector²Á³ý 165 5 { 166 6 McuFlashType = MCU_TYPE_E2P; 167 6 McuFlashAddr = (U16)(i+APP_PARA_SIZE/MCU_CODE_SECTOR_SIZE-SectorNum)*512; 168 6 } 169 5 } 170 4 171 4 ucMcuFlashWrValid = 0x55; //ÉèÖÃMCU CodeÇø¿É²Ù×÷±êÖ¾£¬·ÀÖ¹Îóд 172 4 McuFlashEraseSector(McuFlashAddr, McuFlashType); 173 4 if(!McuFlashBlankCheck(McuFlashAddr, McuFlashType)) //²Á³ý½áÊøºó£¬ÐèÒª²é¿Õ 174 4 { 175 5 ucUartBuf[INDEXES] = IAPERROR_ERASE; //Eraseʧ°Ü C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 4 176 5 } 177 4 ucMcuFlashWrValid = 0; 178 4 } 179 3 } 180 2 else 181 2 { 182 3 ucUartBuf[INDEXES] = IAPERROR_INDEX; 183 3 } 184 2 } 185 1 } 186 187 188 /************************************************************************************************* 189 * º¯ÊýÃû: IapWrSector 190 * ²Î Êý: ÎÞ 191 * ·µ»ØÖµ: ÎÞ 192 * Ãè Êö: дÈë1¸öSectorÊý¾Ý 193 *************************************************************************************************/ 194 BOOL IapWrSector(void) 195 { 196 1 BOOL Result = 1; 197 1 U16 i; 198 1 U32 McuFlashAddr; 199 1 U8 McuFlashType; 200 1 201 1 for(i=0; i= (ulIapRecDataLen+BOOT_CODE_SIZE-APP_PARA_SIZE)) 208 3 { 209 4 McuFlashAddr = McuFlashAddr - (ulIapRecDataLen+BOOT_CODE_SIZE-APP_PARA_SIZE); 210 4 McuFlashType = MCU_TYPE_E2P; //ISP¸üÐÂEEPROMÇø 211 4 } 212 3 } 213 2 else 214 2 { 215 3 McuFlashAddr = IAP_BK_CODE_START_ADDR + ulIapDataPtr; 216 3 } 217 2 McuFlashWrOneByte(McuFlashAddr, ucIapBuf[i], McuFlashType); 218 2 if(ucIapBuf[i] != McuFlashRdOneByte(McuFlashAddr, McuFlashType)) 219 2 { 220 3 Result = 0; 221 3 break; 222 3 } 223 2 ulIapDataPtr++; 224 2 } 225 1 226 1 return Result; 227 1 } 228 229 230 /************************************************************************************************* 231 * º¯ÊýÃû: IapReceiveData 232 * ²Î Êý: ÎÞ 233 * ·µ»ØÖµ: ÎÞ 234 * Ãè Êö: ½ÓÊÕÊý¾Ý£¬Í¬Ê±½«Êý¾ÝдÈëµÄMCU CODEÇø 235 *************************************************************************************************/ 236 void IapReceiveData(void) 237 { C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 5 238 1 U16 i; 239 1 U8 j; 240 1 U32 McuFlashAddr; 241 1 U8 McuFlashType; 242 1 243 1 bHandsheakOkFlg = 0; 244 1 245 1 if( ((ucUartBuf[INDEXES](ucIapIndexBk+4))) && (ucUartBuf[INDEXES -] != 0) ) //yangweilei 246 1 { 247 2 ucUartBuf[INDEXES] = IAPERROR_INDEX; //Êý¾ÝË÷Òý´íÎó£¬Ê×ÏÈÅжÏÊÇ·ñÁ¬Ðø£¬Æä -´ÎÅжÏÊÇ·ñ³¬³ö·¶Î§ 248 2 } 249 1 else 250 1 { 251 2 ucIapIndexBk = ucUartBuf[INDEXES]; 252 2 ucUartBuf[INDEXES] = 0; 253 2 if(ucUartBuf[LENGTH] == 0) 254 2 { 255 3 ulIapDataPtr += 512; //Èç¹û´«µÝµÄ³¤¶ÈΪ0£¬±íʾµ±Ç°128¸ö×Ö½ÚÎ -ª0£¬Ö¸Õë¼Ó£¬µ«²»Ð´(Ôö¼Ó150mS/1K) 256 3 } 257 2 else 258 2 { 259 3 j = ucIapIndexBk % 4; //Ä¿Ç°Ôݶ¨sector³¤¶ÈΪ512bytes£¬Ã¿´Î´«Ê -ä128bytes£¬ËùÒÔ¶¨ÒåΪ4 260 3 for(i=0; i= MCU_CODE_SECTOR_SIZE) 270 5 { 271 6 ulIapDataPtr -= MCU_CODE_SECTOR_SIZE; //Ö¸Õë·µ»Øµ½¸ÃSectorÆðʼ 272 6 } 273 5 else 274 5 { 275 6 ulIapDataPtr = 0; 276 6 } 277 5 278 5 McuFlashType = MCU_TYPE_CODE; //ĬÈÏÊÇCODEÇø 279 5 if(bIapIspFlg == ISP_MODE) //ISP 280 5 { 281 6 McuFlashAddr = ISP_CODE_START_ADDR + ulIapDataPtr; 282 6 if(McuFlashAddr >= (ulIapRecDataLen+BOOT_CODE_SIZE-APP_PARA_SIZE)) 283 6 { 284 7 McuFlashAddr = McuFlashAddr - (ulIapRecDataLen+BOOT_CODE_SIZE-APP_PARA_SIZE); 285 7 McuFlashType = MCU_TYPE_E2P; //ISP¸üÐÂEEPROMÇø 286 7 } 287 6 } 288 5 else 289 5 { 290 6 McuFlashAddr = IAP_BK_CODE_START_ADDR + ulIapDataPtr; 291 6 } 292 5 ucMcuFlashWrValid = 0x55; 293 5 McuFlashEraseSector(McuFlashAddr, McuFlashType); 294 5 if(McuFlashBlankCheck(McuFlashAddr, McuFlashType)) //²Á³ý½áÊøºó£¬ÐèÒª²é¿Õ C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 6 295 5 { 296 6 if(!IapWrSector()) //Èç¹ûÁ¬ÐøдÁ½´Î´íÎó£¬Ôò·µ»Ø¸øÉÏλ»úÒì³£ 297 6 { 298 7 ucUartBuf[INDEXES] = IAPERROR_WR; //дÈë´íÎó 299 7 } 300 6 else 301 6 { 302 7 goto UpdateChksum; 303 7 } 304 6 } 305 5 else 306 5 { 307 6 ucUartBuf[INDEXES] = IAPERROR_ERASE; //²Á³ý´íÎó 308 6 } 309 5 } 310 4 else //512BytesдÈëÕýÈ·£¬²Å¸üÐÂchecksumÖµ 311 4 { 312 5 UpdateChksum: 313 5 for(j=0; j= 1)&&(UART_DEFINE<= 30)) 452 2 { 453 3 if(RI) 454 3 { 455 4 //BootMcuWdtClear(); //ÔڸóÌÐòÑ­»·ÖУ¬Î´½ÓÊÕµ½UARTͨѶ£¬ -ÔòÅж¨Í¨Ñ¶Òì³££¬´¥·¢¿´ÃŹ· 456 4 ucUartBuf[ucUartBufPT] = SBUF; 457 4 ucUartBufPT++; 458 4 if(ucUartBufPT >= 140) //¸ÃÖ¸Õë²»»á³¬¹ý140 459 4 { 460 5 ucUartBufPT = 0; 461 5 } 462 4 if(ucUartBufPT == 1) 463 4 { 464 5 if(ucUartBuf[HEARD1] != 0x5A) //¼ì²éÖ¡Í·ÊÇ·ñWie0x5AA5 465 5 { 466 6 ucUartBufPT = 0; 467 6 } 468 5 469 5 } 470 4 else if(ucUartBufPT == 2) 471 4 { 472 5 473 5 if(ucUartBuf[HEARD2] != 0xA5) 474 5 { 475 6 ucUartBufPT = 0; 476 6 } C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 9 477 5 else 478 5 { 479 6 uiUartRcvChkSum = 0; //Ö¡Í·ÅжÏÕýÈ· 480 6 ucUartErrCode = 0; 481 6 } 482 5 } 483 4 else 484 4 { 485 5 486 5 if(ucUartBufPT < (ucUartBuf[LENGTH]+9)) 487 5 { 488 6 if(ucUartBufPT <= (ucUartBuf[LENGTH]+7)) 489 6 { 490 7 uiUartRcvChkSum += ucUartBuf[ucUartBufPT-1]; 491 7 } 492 6 493 6 if(ucUartBufPT == (TARGET+1)) //¼ì²éID 494 6 { 495 7 496 7 if(ucUartBuf[TARGET] != IAP_BMSID) 497 7 { 498 8 ucUartBufPT = 0; 499 8 } 500 7 } 501 6 else if(ucUartBufPT == (COMMAND+1)) //¼ì²âCOMMAND 502 6 { 503 7 if((ucUartBuf[COMMAND] != IAP_CMD_HANDSHAKE) 504 7 && (ucUartBuf[COMMAND] != IAP_CMD_BEGIN) 505 7 && (ucUartBuf[COMMAND] != IAP_CMD_TRANS) 506 7 && (ucUartBuf[COMMAND] != IAP_CMD_VERIFY) 507 7 && (ucUartBuf[COMMAND] != IAP_CMD_RESET)) 508 7 { 509 8 ucUartErrCode |= IAPERROR_CMD; 510 8 } 511 7 } 512 6 } 513 5 else 514 5 { 515 6 BootMcuWdtClear(); 516 6 UartCmdProcess(); 517 6 } 518 5 } 519 4 RI = 0; 520 4 } 521 3 522 3 if(TI) 523 3 { 524 4 BootMcuWdtClear(); //ÔڸóÌÐòÑ­»·ÖУ¬Î´½ÓÊÕµ½UARTͨѶ£¬Ôò -Åж¨Í¨Ñ¶Òì³££¬´¥·¢¿´ÃŹ· 525 4 526 4 if(ucUartBufPT >= (ucUartBuf[LENGTH]+8)) 527 4 { 528 5 UartRxEn(); //Allow UART receive data 529 5 ucUartBufPT = 0; 530 5 ucUartBuf[0] = 0; 531 5 ucUartBuf[1] = 0; 532 5 ucUartBuf[2] = 0; 533 5 bUartSndOverFlg = 1; 534 5 } 535 4 else 536 4 { 537 5 ucUartBufPT++; C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 10 538 5 UartTxEn(ucUartBuf[ucUartBufPT]); 539 5 } 540 4 541 4 TI = 0; 542 4 } 543 3 544 3 if(ucIapRestCommand == IAP_CMD_RESET) 545 3 { 546 4 BootMcuWdtClear(); 547 4 if(bUartSndOverFlg) //ResetÖ¡»Ø¸´½áÊø 548 4 { 549 5 bUartSndOverFlg = 0; 550 5 ucIapRestCommand = 0; 551 5 ((void(code*)(void))0x0000)(); 552 5 } 553 4 } 554 3 } 555 2 #elif ((UART_DEFINE >= 31)&&(UART_DEFINE<= 60)) { INSCON = 0x40; if(RI1) { //BootMcuWdtClear(); //ÔڸóÌÐòÑ­»·ÖУ¬Î´½ÓÊÕµ½UARTͨѶ£¬ -ÔòÅж¨Í¨Ñ¶Òì³££¬´¥·¢¿´ÃŹ· ucUartBuf[ucUartBufPT] = SBUF1; INSCON = 0x00; ucUartBufPT++; if(ucUartBufPT >= 140) //¸ÃÖ¸Õë²»»á³¬¹ý140 { ucUartBufPT = 0; } if(ucUartBufPT == 1) { if(ucUartBuf[HEARD1] != 0x5A) //¼ì²éÖ¡Í·ÊÇ·ñWie0x5AA5 { ucUartBufPT = 0; } } else if(ucUartBufPT == 2) { if(ucUartBuf[HEARD2] != 0xA5) { ucUartBufPT = 0; } else { uiUartRcvChkSum = 0; //Ö¡Í·ÅжÏÕýÈ· ucUartErrCode = 0; } } else { if(ucUartBufPT < (ucUartBuf[LENGTH]+9)) { if(ucUartBufPT <= (ucUartBuf[LENGTH]+7)) { uiUartRcvChkSum += ucUartBuf[ucUartBufPT-1]; } C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 11 if(ucUartBufPT == (TARGET+1)) //¼ì²éID { if(ucUartBuf[TARGET] != IAP_BMSID) { ucUartBufPT = 0; } } else if(ucUartBufPT == (COMMAND+1)) //¼ì²âCOMMAND { if((ucUartBuf[COMMAND] != IAP_CMD_HANDSHAKE) && (ucUartBuf[COMMAND] != IAP_CMD_BEGIN) && (ucUartBuf[COMMAND] != IAP_CMD_TRANS) && (ucUartBuf[COMMAND] != IAP_CMD_VERIFY) && (ucUartBuf[COMMAND] != IAP_CMD_RESET)) { ucUartErrCode |= IAPERROR_CMD; } } } else { BootMcuWdtClear(); UartCmdProcess(); } } INSCON = 0x40; RI1 = 0; INSCON = 0x00; } INSCON = 0x40; if(TI1) { INSCON = 0x00; BootMcuWdtClear(); //ÔڸóÌÐòÑ­»·ÖУ¬Î´½ÓÊÕµ½UARTͨѶ£¬Ôò -Åж¨Í¨Ñ¶Òì³££¬´¥·¢¿´ÃŹ· if(ucUartBufPT >= (ucUartBuf[LENGTH]+8)) { UartRxEn(); //Allow UART receive data ucUartBufPT = 0; ucUartBuf[0] = 0; ucUartBuf[1] = 0; ucUartBuf[2] = 0; bUartSndOverFlg = 1; } else { ucUartBufPT++; UartTxEn(ucUartBuf[ucUartBufPT]); } INSCON = 0x40; TI1 = 0; INSCON = 0x00; } if(ucIapRestCommand == IAP_CMD_RESET) { BootMcuWdtClear(); if(bUartSndOverFlg) //ResetÖ¡»Ø¸´½áÊø C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 12 { bUartSndOverFlg = 0; ucIapRestCommand = 0; ((void(code*)(void))0x0000)(); } } } #elif ( UART_DEFINE == 61) { INSCON = 0x40; if(RI2) { //BootMcuWdtClear(); //ÔڸóÌÐòÑ­»·ÖУ¬Î´½ÓÊÕµ½UARTͨѶ£¬ -ÔòÅж¨Í¨Ñ¶Òì³££¬´¥·¢¿´ÃŹ· ucUartBuf[ucUartBufPT] = SBUF2; INSCON = 0x00; ucUartBufPT++; if(ucUartBufPT >= 140) //¸ÃÖ¸Õë²»»á³¬¹ý140 { ucUartBufPT = 0; } if(ucUartBufPT == 1) { if(ucUartBuf[HEARD1] != 0x5A) //¼ì²éÖ¡Í·ÊÇ·ñWie0x5AA5 { ucUartBufPT = 0; } } else if(ucUartBufPT == 2) { if(ucUartBuf[HEARD2] != 0xA5) { ucUartBufPT = 0; } else { uiUartRcvChkSum = 0; //Ö¡Í·ÅжÏÕýÈ· ucUartErrCode = 0; } } else { if(ucUartBufPT < (ucUartBuf[LENGTH]+9)) { if(ucUartBufPT <= (ucUartBuf[LENGTH]+7)) { uiUartRcvChkSum += ucUartBuf[ucUartBufPT-1]; } if(ucUartBufPT == (TARGET+1)) //¼ì²éID { if(ucUartBuf[TARGET] != IAP_BMSID) { ucUartBufPT = 0; } } else if(ucUartBufPT == (COMMAND+1)) //¼ì²âCOMMAND { C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 13 if((ucUartBuf[COMMAND] != IAP_CMD_HANDSHAKE) && (ucUartBuf[COMMAND] != IAP_CMD_BEGIN) && (ucUartBuf[COMMAND] != IAP_CMD_TRANS) && (ucUartBuf[COMMAND] != IAP_CMD_VERIFY) && (ucUartBuf[COMMAND] != IAP_CMD_RESET)) { ucUartErrCode |= IAPERROR_CMD; } } } else { BootMcuWdtClear(); UartCmdProcess(); } } INSCON = 0x40; RI2 = 0; INSCON = 0x00; } INSCON = 0x40; if(TI2) { INSCON = 0x00; BootMcuWdtClear(); //ÔڸóÌÐòÑ­»·ÖУ¬Î´½ÓÊÕµ½UARTͨѶ£¬Ôò -Åж¨Í¨Ñ¶Òì³££¬´¥·¢¿´ÃŹ· if(ucUartBufPT >= (ucUartBuf[LENGTH]+8)) { UartRxEn(); //Allow UART receive data ucUartBufPT = 0; ucUartBuf[0] = 0; ucUartBuf[1] = 0; ucUartBuf[2] = 0; bUartSndOverFlg = 1; } else { ucUartBufPT++; UartTxEn(ucUartBuf[ucUartBufPT]); } INSCON = 0x40; TI2 = 0; INSCON = 0x00; } if(ucIapRestCommand == IAP_CMD_RESET) { BootMcuWdtClear(); if(bUartSndOverFlg) //ResetÖ¡»Ø¸´½áÊø { bUartSndOverFlg = 0; ucIapRestCommand = 0; ((void(code*)(void))0x0000)(); } } } #endif 780 2 } 781 1 } C51 COMPILER V9.01 IAPISP 12/22/2023 12:15:06 PAGE 14 782 783 784 785 786 787 788 MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 2211 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = 662 ---- PDATA SIZE = ---- ---- DATA SIZE = 18 24 IDATA SIZE = ---- ---- BIT SIZE = 3 1 END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)