2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 1
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C51 COMPILER V9.01, COMPILATION OF MODULE IAPISP
|
|
|
|
|
OBJECT MODULE PLACED IN .\output\IapIsp.obj
|
2025-02-11 08:17:56 +00:00
|
|
|
|
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_bootloader\IapIsp.c BROWSE INCDIR(.\header_bootloader) DEBUG OBJE
|
|
|
|
|
-CTEXTEND PRINT(.\output\IapIsp.lst) OBJECT(.\output\IapIsp.obj)
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
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<><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰִ<C7B0><D6B4>IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰִ<C7B0><D6B4>ISP<53><50><EFBFBD><EFBFBD>
|
|
|
|
|
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 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: UartSendAck
|
|
|
|
|
31 * <20><> <20><>: <20><>
|
|
|
|
|
32 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|
|
|
|
33 * <20><> <20><>: <20><>Slave<76><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<C9BA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
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]; //<2F><><EFBFBD><EFBFBD>ԴID<49><44>Ŀ<EFBFBD><C4BF>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
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 2
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
55 1 bUartSndOverFlg = 0;
|
|
|
|
|
56 1 UartTxEn(ucUartBuf[ucUartBufPT]);
|
|
|
|
|
57 1 }
|
|
|
|
|
58
|
|
|
|
|
59
|
|
|
|
|
60 /*************************************************************************************************
|
|
|
|
|
61 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapHandShake
|
|
|
|
|
62 * <20><> <20><>: <20><>
|
|
|
|
|
63 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|
|
|
|
64 * <20><> <20><>: <20><><EFBFBD><EFBFBD>Э<EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD>IAP<41><50><EFBFBD><EFBFBD>ISP<53><50>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|
|
|
|
65 bIapIspFlg: 0--IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1--ISP<53><50><EFBFBD><EFBFBD>
|
|
|
|
|
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; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
83 2 bHandsheakOkFlg = 0;
|
|
|
|
|
84 2 }
|
|
|
|
|
85 1 }
|
|
|
|
|
86
|
|
|
|
|
87
|
|
|
|
|
88 /*************************************************************************************************
|
|
|
|
|
89 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapBeginAck
|
|
|
|
|
90 * <20><> <20><>: <20><>
|
|
|
|
|
91 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|
|
|
|
92 * <20><> <20><>: IAP<41><50>ISP<53><50>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CODE<44>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>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) //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|
|
|
|
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; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
110 2 }
|
|
|
|
|
111 1
|
|
|
|
|
112 1 if((ulIapRecDataLen > IAP_BK_CODE_SIZE) && (bIapIspFlg == IAP_MODE))
|
|
|
|
|
113 1 {
|
|
|
|
|
114 2 ucUartBuf[INDEXES] = IAPERROR_SIZE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>IAP<41><50>ISP<53><50><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>
|
|
|
|
|
-Ĭ<><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>쳣
|
|
|
|
|
115 2 }
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 3
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
116 1 else if((ulIapRecDataLen > ISP_CODE_SIZE) && (bIapIspFlg == ISP_MODE))
|
|
|
|
|
117 1 {
|
|
|
|
|
118 2 ucUartBuf[INDEXES] = IAPERROR_SIZE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>IAP<41><50>ISP<53><50><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>
|
|
|
|
|
-Ĭ<><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>쳣
|
|
|
|
|
119 2 }
|
|
|
|
|
120 1 else
|
|
|
|
|
121 1 {
|
|
|
|
|
122 2 ucUartBuf[INDEXES] = 0; //<2F><>Ԥ<EFBFBD><D4A4><EFBFBD>ظ<EFBFBD><D8B8>ɹ<EFBFBD>
|
|
|
|
|
123 2 ucIapIndexBk = 0;
|
|
|
|
|
124 2
|
|
|
|
|
125 2 //1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ISP<53><50><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>BOOT<4F><54><EFBFBD>ı<EFBFBD>־<EFBFBD><D6BE>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>BOOT_FLG_ISP_ADD<44><44>дISP_FLG<4C><47>־0xA5
|
|
|
|
|
126 2 ucMcuFlashWrValid = 0x55; //<2F><><EFBFBD><EFBFBD>MCU Code<64><65><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
|
|
|
|
|
-ֹ<><D6B9>д
|
|
|
|
|
127 2 McuFlashEraseSector(BOOT_FLG_START_ADDR, MCU_TYPE_CODE);
|
|
|
|
|
128 2 if(McuFlashBlankCheck(BOOT_FLG_START_ADDR, MCU_TYPE_CODE)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
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ʧ<65><CAA7>
|
|
|
|
|
136 5 }
|
|
|
|
|
137 4 }
|
|
|
|
|
138 3 }
|
|
|
|
|
139 2 else
|
|
|
|
|
140 2 {
|
|
|
|
|
141 3 ucUartBuf[INDEXES] = IAPERROR_ERASE; //Eraseʧ<65><CAA7>
|
|
|
|
|
142 3 }
|
|
|
|
|
143 2 ucMcuFlashWrValid = 0;
|
|
|
|
|
144 2
|
|
|
|
|
145 2 //2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IAP<41><50><EFBFBD><EFBFBD>ISP<53><50><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ISP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>EEPROM<4F><4D>
|
|
|
|
|
146 2 if(ucUartBuf[INDEXES] == 0) //<2F><><EFBFBD><EFBFBD>ucUartBuf[INDEXES]
|
|
|
|
|
147 2 {
|
|
|
|
|
148 3 SectorNum = ulIapRecDataLen/MCU_CODE_SECTOR_SIZE;
|
|
|
|
|
149 3 for(i=0; i<SectorNum; i++) //<2F>Ȳ<EFBFBD><C8B2><EFBFBD>CODE<44><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sector
|
|
|
|
|
150 3 {
|
|
|
|
|
151 4 McuFlashType = MCU_TYPE_CODE; //<2F><>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>flash
|
|
|
|
|
152 4 if(bIapIspFlg == ISP_MODE)
|
|
|
|
|
153 4 {
|
|
|
|
|
154 5 McuFlashAddr = ISP_CODE_START_ADDR; //ISP<53><50>ʼ<EFBFBD><CABC>ַ
|
|
|
|
|
155 5 }
|
|
|
|
|
156 4 else
|
|
|
|
|
157 4 {
|
|
|
|
|
158 5 McuFlashAddr = IAP_BK_CODE_START_ADDR; //IAP<41><50>ʼ<EFBFBD><CABC>ַ
|
|
|
|
|
159 5 }
|
|
|
|
|
160 4 McuFlashAddr += (U16)i*512; //ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ʼ<EFBFBD><CABC>ַ
|
|
|
|
|
161 4
|
|
|
|
|
162 4 if(bIapIspFlg == ISP_MODE) //ISPģʽ<C4A3><CABD>ֱ<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>EEPROM
|
|
|
|
|
163 4 {
|
|
|
|
|
164 5 if(i>=(SectorNum-APP_PARA_SIZE/MCU_CODE_SECTOR_SIZE)) //EEPROM<4F><4D>sector<6F><72><EFBFBD><EFBFBD>
|
|
|
|
|
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; //<2F><><EFBFBD><EFBFBD>MCU Code<64><65><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>д
|
|
|
|
|
172 4 McuFlashEraseSector(McuFlashAddr, McuFlashType);
|
|
|
|
|
173 4 if(!McuFlashBlankCheck(McuFlashAddr, McuFlashType)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
174 4 {
|
|
|
|
|
175 5 ucUartBuf[INDEXES] = IAPERROR_ERASE; //Eraseʧ<65><CAA7>
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 4
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
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 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapWrSector
|
|
|
|
|
190 * <20><> <20><>: <20><>
|
|
|
|
|
191 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|
|
|
|
192 * <20><> <20><>: д<><D0B4>1<EFBFBD><31>Sector<6F><72><EFBFBD><EFBFBD>
|
|
|
|
|
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<MCU_CODE_SECTOR_SIZE; i++) //<2F><><EFBFBD><EFBFBD>д1<D0B4><31>sector
|
|
|
|
|
202 1 {
|
|
|
|
|
203 2 McuFlashType = MCU_TYPE_CODE;
|
|
|
|
|
204 2 if(bIapIspFlg == ISP_MODE) //ISP
|
|
|
|
|
205 2 {
|
|
|
|
|
206 3 McuFlashAddr = ISP_CODE_START_ADDR + ulIapDataPtr;
|
|
|
|
|
207 3 if(McuFlashAddr >= (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<53><50><EFBFBD><EFBFBD>EEPROM<4F><4D>
|
|
|
|
|
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 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapReceiveData
|
|
|
|
|
232 * <20><> <20><>: <20><>
|
|
|
|
|
233 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|
|
|
|
234 * <20><> <20><>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>MCU CODE<44><45>
|
|
|
|
|
235 *************************************************************************************************/
|
|
|
|
|
236 void IapReceiveData(void)
|
|
|
|
|
237 {
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 5
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
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) || (ucUartBuf[INDEXES]>(ucIapIndexBk+4))) && (ucUartBuf[INDEXES
|
|
|
|
|
-] != 0) ) //yangweilei
|
|
|
|
|
246 1 {
|
|
|
|
|
247 2 ucUartBuf[INDEXES] = IAPERROR_INDEX; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
-<2D><><EFBFBD>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B3ACB3><EFBFBD>Χ
|
|
|
|
|
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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ128<32><38><EFBFBD>ֽ<EFBFBD><D6BD>
|
|
|
|
|
-<2D>0<EFBFBD><30>ָ<EFBFBD><D6B8><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>д(<28><><EFBFBD><EFBFBD>150mS/1K)
|
|
|
|
|
256 3 }
|
|
|
|
|
257 2 else
|
|
|
|
|
258 2 {
|
|
|
|
|
259 3 j = ucIapIndexBk % 4; //Ŀǰ<C4BF>ݶ<EFBFBD>sector<6F><72><EFBFBD><EFBFBD>Ϊ512bytes<65><73>ÿ<EFBFBD>δ<EFBFBD><CEB4>
|
|
|
|
|
-<2D>128bytes<65><73><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>Ϊ4
|
|
|
|
|
260 3 for(i=0; i<ucUartBuf[LENGTH]; i++)
|
|
|
|
|
261 3 {
|
|
|
|
|
262 4 ucIapBuf[i+(U16)j*ucUartBuf[LENGTH]] = ucUartBuf[DATA+i];
|
|
|
|
|
263 4 }
|
|
|
|
|
264 3 if(j == 3) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>sector<6F><72><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
265 3 {
|
|
|
|
|
266 4 ucMcuFlashWrValid = 0x55; //<2F><><EFBFBD><EFBFBD>MCU Code<64><65><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
|
|
|
|
|
-ֹ<><D6B9>д
|
|
|
|
|
267 4 if(!IapWrSector()) //<2F><>һ<EFBFBD><D2BB>дsector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дһ<D0B4><D2BB>
|
|
|
|
|
268 4 {
|
|
|
|
|
269 5 if(ulIapDataPtr >= MCU_CODE_SECTOR_SIZE)
|
|
|
|
|
270 5 {
|
|
|
|
|
271 6 ulIapDataPtr -= MCU_CODE_SECTOR_SIZE; //ָ<>뷵<EFBFBD>ص<EFBFBD><D8B5><EFBFBD>Sector<6F><72>ʼ
|
|
|
|
|
272 6 }
|
|
|
|
|
273 5 else
|
|
|
|
|
274 5 {
|
|
|
|
|
275 6 ulIapDataPtr = 0;
|
|
|
|
|
276 6 }
|
|
|
|
|
277 5
|
|
|
|
|
278 5 McuFlashType = MCU_TYPE_CODE; //Ĭ<><C4AC><EFBFBD><EFBFBD>CODE<44><45>
|
|
|
|
|
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<53><50><EFBFBD><EFBFBD>EEPROM<4F><4D>
|
|
|
|
|
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)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 6
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
295 5 {
|
|
|
|
|
296 6 if(!IapWrSector()) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<F2B7B5BB><D8B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>쳣
|
|
|
|
|
297 6 {
|
|
|
|
|
298 7 ucUartBuf[INDEXES] = IAPERROR_WR; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
308 6 }
|
|
|
|
|
309 5 }
|
|
|
|
|
310 4 else //512Bytesд<73><D0B4><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD>checksumֵ
|
|
|
|
|
311 4 {
|
|
|
|
|
312 5 UpdateChksum:
|
|
|
|
|
313 5 for(j=0; j<MCU_CODE_SECTOR_SIZE/4; j++) //<2F><><EFBFBD><EFBFBD>checksum<75><6D>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>32bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>STM32
|
|
|
|
|
314 5 {
|
|
|
|
|
315 6 ulIapChksum += (((U32)ucIapBuf[j*4+3]<<24)
|
|
|
|
|
316 6 | ((U32)ucIapBuf[j*4+2]<<16)
|
|
|
|
|
317 6 | ((U32)ucIapBuf[j*4+1]<<8)
|
|
|
|
|
318 6 | ((U32)ucIapBuf[j*4+0]));
|
|
|
|
|
319 6 }
|
|
|
|
|
320 5 }
|
|
|
|
|
321 4
|
|
|
|
|
322 4 ucMcuFlashWrValid = 0;
|
|
|
|
|
323 4 }
|
|
|
|
|
324 3 }
|
|
|
|
|
325 2 }
|
|
|
|
|
326 1 }
|
|
|
|
|
327
|
|
|
|
|
328
|
|
|
|
|
329 /*************************************************************************************************
|
|
|
|
|
330 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapRDataVerify
|
|
|
|
|
331 * <20><> <20><>: <20><>
|
|
|
|
|
332 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|
|
|
|
333 * <20><> <20><>: <20><>֤CheckSum<75>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
|
|
|
|
334 *************************************************************************************************/
|
|
|
|
|
335 void IapRDataVerify(void)
|
|
|
|
|
336 {
|
|
|
|
|
337 1 U32 CheckSum = 0;
|
|
|
|
|
338 1
|
|
|
|
|
339 1 CheckSum = ((U32)ucUartBuf[DATA+3]<<24) //<2F><>ȡ<EFBFBD><C8A1>λ<EFBFBD><CEBB><EFBFBD>·<EFBFBD><C2B7><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
|
|
|
|
|
340 1 | ((U32)ucUartBuf[DATA+2]<<16)
|
|
|
|
|
341 1 | ((U32)ucUartBuf[DATA+1]<<8)
|
|
|
|
|
342 1 | ((U32)ucUartBuf[DATA+0]);
|
|
|
|
|
343 1
|
|
|
|
|
344 1 if(ulIapChksum != CheckSum) //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ʧ<EFBFBD><CAA7>
|
|
|
|
|
345 1 {
|
|
|
|
|
346 2 ucUartBuf[INDEXES] = IAPERROR_CRC;
|
|
|
|
|
347 2 }
|
|
|
|
|
348 1 else
|
|
|
|
|
349 1 {
|
|
|
|
|
350 2 ucUartBuf[INDEXES] = 0; //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
351 2 }
|
|
|
|
|
352 1 }
|
|
|
|
|
353
|
|
|
|
|
354
|
|
|
|
|
355 /*************************************************************************************************
|
|
|
|
|
356 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapCmdReset
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 7
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
357 * <20><> <20><>: <20><>
|
|
|
|
|
358 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|
|
|
|
359 * <20><> <20><>: <20><>IAP<41><50>ISP<53><50><EFBFBD><EFBFBD>Program<61><6D><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λָ<CEBB><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>0x0000<30><30>ַ
|
|
|
|
|
360 ISP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BOOT<4F><54><EFBFBD>ı<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ISP<53><50><EFBFBD><EFBFBD>
|
|
|
|
|
361 IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BOOT<4F><54><EFBFBD>ı<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>д0x5A<35><41>APP<50><50><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
362 *************************************************************************************************/
|
|
|
|
|
363 void IapCmdReset(void)
|
|
|
|
|
364 {
|
|
|
|
|
365 1 ucUartBuf[INDEXES] = 0;
|
|
|
|
|
366 1 ucIapRestCommand = IAP_CMD_RESET;
|
|
|
|
|
367 1
|
|
|
|
|
368 1 ucMcuFlashWrValid = 0x55; //<2F><><EFBFBD><EFBFBD>MCU Code<64><65><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ֹ<EFBFBD>
|
|
|
|
|
-<2D>д
|
|
|
|
|
369 1 McuFlashEraseSector(BOOT_FLG_START_ADDR, MCU_TYPE_CODE);
|
|
|
|
|
370 1 if(McuFlashBlankCheck(BOOT_FLG_START_ADDR, MCU_TYPE_CODE)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
371 1 {
|
|
|
|
|
372 2 if(bIapIspFlg == IAP_MODE) //IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>BOOT<4F><54><EFBFBD>ı<EFBFBD>־<EFBFBD>
|
|
|
|
|
-<2D><><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>д0x5A
|
|
|
|
|
373 2 {
|
|
|
|
|
374 3 McuFlashWrOneByte(BOOT_FLG_IAP_ADDR, IAP_FLG, MCU_TYPE_CODE);
|
|
|
|
|
375 3 if(McuFlashRdOneByte(BOOT_FLG_IAP_ADDR, MCU_TYPE_CODE) != IAP_FLG)
|
|
|
|
|
376 3 {
|
|
|
|
|
377 4 ucUartBuf[INDEXES] = IAPERROR_WR; //Writeʧ<65><CAA7>
|
|
|
|
|
378 4 ucIapRestCommand = 0;
|
|
|
|
|
379 4 }
|
|
|
|
|
380 3 }
|
|
|
|
|
381 2 }
|
|
|
|
|
382 1 else
|
|
|
|
|
383 1 {
|
|
|
|
|
384 2 ucUartBuf[INDEXES] = IAPERROR_ERASE; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
385 2 ucIapRestCommand = 0;
|
|
|
|
|
386 2 }
|
|
|
|
|
387 1 ucMcuFlashWrValid = 0;
|
|
|
|
|
388 1 }
|
|
|
|
|
389
|
|
|
|
|
390
|
|
|
|
|
391 /*************************************************************************************************
|
|
|
|
|
392 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: UartCmdProcess
|
|
|
|
|
393 * <20><> <20><>: <20><>
|
|
|
|
|
394 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|
|
|
|
395 * <20><> <20><>: <20><><EFBFBD><EFBFBD>IAP<41><50>ISP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
396 *************************************************************************************************/
|
|
|
|
|
397 void UartCmdProcess(void)
|
|
|
|
|
398 {
|
|
|
|
|
399 1 ucUartBufPT = 0;
|
|
|
|
|
400 1 if(uiUartRcvChkSum != ((ucUartBuf[ucUartBuf[LENGTH]+8]<<8) + ucUartBuf[ucUartBuf[LENGTH]+7]))
|
|
|
|
|
401 1 {
|
|
|
|
|
402 2 ucUartErrCode |= IAPERROR_CHECKSUM;
|
|
|
|
|
403 2 }
|
|
|
|
|
404 1
|
|
|
|
|
405 1 if(ucUartErrCode != 0) //<2F><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6>
|
|
|
|
|
406 1 {
|
|
|
|
|
407 2 ucUartBuf[INDEXES] = ucUartErrCode;
|
|
|
|
|
408 2 }
|
|
|
|
|
409 1 else
|
|
|
|
|
410 1 {
|
|
|
|
|
411 2 if(ucUartBuf[COMMAND] == IAP_CMD_HANDSHAKE) //IAP<41><50>ISP<53><50><EFBFBD><EFBFBD>Э<EFBFBD>飬<EFBFBD><E9A3AC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
412 2 {
|
|
|
|
|
413 3 IapHandShake();
|
|
|
|
|
414 3 }
|
|
|
|
|
415 2 else if(ucUartBuf[COMMAND] == IAP_CMD_BEGIN) //<2F><>ʼIAP<41><50>ISP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CODE<44><45>/EEP<45><50>ȫ<EFBFBD><C8AB>
|
|
|
|
|
-<2D><><EFBFBD><EFBFBD>
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 8
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
416 2 {
|
|
|
|
|
417 3 IapBeginAck();
|
|
|
|
|
418 3 }
|
|
|
|
|
419 2 else if(ucUartBuf[COMMAND] == IAP_CMD_TRANS) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>д<EFBFBD>롢У<EBA1A2><D0A3>
|
|
|
|
|
420 2 {
|
|
|
|
|
421 3 IapReceiveData();
|
|
|
|
|
422 3 }
|
|
|
|
|
423 2 else if(ucUartBuf[COMMAND] == IAP_CMD_VERIFY) //
|
|
|
|
|
424 2 {
|
|
|
|
|
425 3 IapRDataVerify();
|
|
|
|
|
426 3 }
|
|
|
|
|
427 2 else if(ucUartBuf[COMMAND] == IAP_CMD_RESET)
|
|
|
|
|
428 2 {
|
|
|
|
|
429 3 IapCmdReset();
|
|
|
|
|
430 3 }
|
|
|
|
|
431 2 }
|
|
|
|
|
432 1
|
|
|
|
|
433 1 UartSendAck();
|
|
|
|
|
434 1 }
|
|
|
|
|
435
|
|
|
|
|
436
|
|
|
|
|
437 /*************************************************************************************************
|
|
|
|
|
438 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: BootIapIsp
|
|
|
|
|
439 * <20><> <20><>: <20><>
|
|
|
|
|
440 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|
|
|
|
441 * <20><> <20><>: IAP<41><50>ISP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
442 *************************************************************************************************/
|
|
|
|
|
443 void BootIapIsp(void)
|
|
|
|
|
444 {
|
|
|
|
|
445 1 ulIapDataPtr = 0;
|
|
|
|
|
446 1 ulIapChksum = 0;
|
|
|
|
|
447 1 ucIapRestCommand = 0;
|
|
|
|
|
448 1 UARTInit();
|
|
|
|
|
449 1 while(1)
|
|
|
|
|
450 1 {
|
|
|
|
|
451 2 #if ((UART_DEFINE >= 1)&&(UART_DEFINE<= 30))
|
|
|
|
|
452 2 {
|
|
|
|
|
453 3 if(RI)
|
|
|
|
|
454 3 {
|
|
|
|
|
455 4 //BootMcuWdtClear(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6>
|
|
|
|
|
-<2D><><EFBFBD>ж<EFBFBD>ͨѶ<CDA8>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
|
|
|
|
456 4 ucUartBuf[ucUartBufPT] = SBUF;
|
|
|
|
|
457 4 ucUartBufPT++;
|
|
|
|
|
458 4 if(ucUartBufPT >= 140) //<2F><>ָ<EFBFBD>벻<EFBFBD>ᳬ<EFBFBD><E1B3AC>140
|
|
|
|
|
459 4 {
|
|
|
|
|
460 5 ucUartBufPT = 0;
|
|
|
|
|
461 5 }
|
|
|
|
|
462 4 if(ucUartBufPT == 1)
|
|
|
|
|
463 4 {
|
|
|
|
|
464 5 if(ucUartBuf[HEARD1] != 0x5A) //<2F><><EFBFBD><EFBFBD>֡ͷ<D6A1>Ƿ<EFBFBD>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 }
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 9
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
477 5 else
|
|
|
|
|
478 5 {
|
|
|
|
|
479 6 uiUartRcvChkSum = 0; //֡ͷ<D6A1>ж<EFBFBD><D0B6><EFBFBD>ȷ
|
|
|
|
|
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)) //<2F><><EFBFBD><EFBFBD>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)) //<2F><><EFBFBD><EFBFBD>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(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
|
|
|
|
|
-<2D>ж<EFBFBD>ͨѶ<CDA8>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
|
|
|
|
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++;
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 10
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
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֡<74>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
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(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6>
|
|
|
|
|
-<2D><><EFBFBD>ж<EFBFBD>ͨѶ<CDA8>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
|
|
|
|
ucUartBuf[ucUartBufPT] = SBUF1;
|
|
|
|
|
INSCON = 0x00;
|
|
|
|
|
ucUartBufPT++;
|
|
|
|
|
if(ucUartBufPT >= 140) //<2F><>ָ<EFBFBD>벻<EFBFBD>ᳬ<EFBFBD><E1B3AC>140
|
|
|
|
|
{
|
|
|
|
|
ucUartBufPT = 0;
|
|
|
|
|
}
|
|
|
|
|
if(ucUartBufPT == 1)
|
|
|
|
|
{
|
|
|
|
|
if(ucUartBuf[HEARD1] != 0x5A) //<2F><><EFBFBD><EFBFBD>֡ͷ<D6A1>Ƿ<EFBFBD>Wie0x5AA5
|
|
|
|
|
{
|
|
|
|
|
ucUartBufPT = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if(ucUartBufPT == 2)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if(ucUartBuf[HEARD2] != 0xA5)
|
|
|
|
|
{
|
|
|
|
|
ucUartBufPT = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
uiUartRcvChkSum = 0; //֡ͷ<D6A1>ж<EFBFBD><D0B6><EFBFBD>ȷ
|
|
|
|
|
ucUartErrCode = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if(ucUartBufPT < (ucUartBuf[LENGTH]+9))
|
|
|
|
|
{
|
|
|
|
|
if(ucUartBufPT <= (ucUartBuf[LENGTH]+7))
|
|
|
|
|
{
|
|
|
|
|
uiUartRcvChkSum += ucUartBuf[ucUartBufPT-1];
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 11
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
if(ucUartBufPT == (TARGET+1)) //<2F><><EFBFBD><EFBFBD>ID
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if(ucUartBuf[TARGET] != IAP_BMSID)
|
|
|
|
|
{
|
|
|
|
|
ucUartBufPT = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(ucUartBufPT == (COMMAND+1)) //<2F><><EFBFBD><EFBFBD>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(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
|
|
|
|
|
-<2D>ж<EFBFBD>ͨѶ<CDA8>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
|
|
|
|
|
|
|
|
|
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֡<74>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 12
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
bUartSndOverFlg = 0;
|
|
|
|
|
ucIapRestCommand = 0;
|
|
|
|
|
((void(code*)(void))0x0000)();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#elif ( UART_DEFINE == 61)
|
|
|
|
|
{
|
|
|
|
|
INSCON = 0x40;
|
|
|
|
|
if(RI2)
|
|
|
|
|
{
|
|
|
|
|
//BootMcuWdtClear(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6>
|
|
|
|
|
-<2D><><EFBFBD>ж<EFBFBD>ͨѶ<CDA8>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
|
|
|
|
ucUartBuf[ucUartBufPT] = SBUF2;
|
|
|
|
|
INSCON = 0x00;
|
|
|
|
|
ucUartBufPT++;
|
|
|
|
|
if(ucUartBufPT >= 140) //<2F><>ָ<EFBFBD>벻<EFBFBD>ᳬ<EFBFBD><E1B3AC>140
|
|
|
|
|
{
|
|
|
|
|
ucUartBufPT = 0;
|
|
|
|
|
}
|
|
|
|
|
if(ucUartBufPT == 1)
|
|
|
|
|
{
|
|
|
|
|
if(ucUartBuf[HEARD1] != 0x5A) //<2F><><EFBFBD><EFBFBD>֡ͷ<D6A1>Ƿ<EFBFBD>Wie0x5AA5
|
|
|
|
|
{
|
|
|
|
|
ucUartBufPT = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if(ucUartBufPT == 2)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if(ucUartBuf[HEARD2] != 0xA5)
|
|
|
|
|
{
|
|
|
|
|
ucUartBufPT = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
uiUartRcvChkSum = 0; //֡ͷ<D6A1>ж<EFBFBD><D0B6><EFBFBD>ȷ
|
|
|
|
|
ucUartErrCode = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if(ucUartBufPT < (ucUartBuf[LENGTH]+9))
|
|
|
|
|
{
|
|
|
|
|
if(ucUartBufPT <= (ucUartBuf[LENGTH]+7))
|
|
|
|
|
{
|
|
|
|
|
uiUartRcvChkSum += ucUartBuf[ucUartBufPT-1];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(ucUartBufPT == (TARGET+1)) //<2F><><EFBFBD><EFBFBD>ID
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if(ucUartBuf[TARGET] != IAP_BMSID)
|
|
|
|
|
{
|
|
|
|
|
ucUartBufPT = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(ucUartBufPT == (COMMAND+1)) //<2F><><EFBFBD><EFBFBD>COMMAND
|
|
|
|
|
{
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 13
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
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(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
|
|
|
|
|
-<2D>ж<EFBFBD>ͨѶ<CDA8>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
|
|
|
|
|
|
|
|
|
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֡<74>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
bUartSndOverFlg = 0;
|
|
|
|
|
ucIapRestCommand = 0;
|
|
|
|
|
((void(code*)(void))0x0000)();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
780 2 }
|
|
|
|
|
781 1 }
|
2025-02-11 08:17:56 +00:00
|
|
|
|
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 14
|
2025-02-06 07:35:32 +00:00
|
|
|
|
|
|
|
|
|
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)
|