Kaynağa Gözat

HFR 작업 내용

BOOT DATA Index 추가
Flash init 시 image Build  version 초기화 작업
MBIC bootloader   동작시 data 0xFF 로 초기화
PYJ 5 yıl önce
ebeveyn
işleme
559da513c2

+ 1 - 0
Bluecell_Inc/Bluecell_operate.h

@@ -748,6 +748,7 @@ typedef enum{
748 748
     MBIC_BOOT_LENGTH = 61,
749 749
     MBIC_BOOT_CRC     =65,
750 750
     MBIC_BOOT_RESERVED =       69,
751
+    MBIC_BOOT_DATA = 128,
751 752
 
752 753
 }HFR_BootLoader_Index_;
753 754
 typedef enum{

+ 21 - 0
Bluecell_Src/MBIC_Bootloader.c

@@ -228,6 +228,7 @@ void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
228 228
     uint8_t* Currdata = (uint8_t*)CurrApiAddress;
229 229
     uint8_t* Bank1data = (uint8_t*)Bank1Address;
230 230
     uint8_t* Bank2data = (uint8_t*)Bank2Address;    
231
+    uint8_t* pdata;
231 232
 #if 0 // PYJ.2020.06.04_BEGIN -- 
232 233
     uint8_t dataTest[1024] = {
233 234
       0x4A,0x54,0x2D,0x4E,0x52,0x44,0x41,0x53,0x20,0x20,0x00,0x00,
@@ -275,14 +276,22 @@ void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
275 276
             data[MBIC_PAYLOADSTART + index++] = 0;
276 277
               if(bluecell_Currdatastatus.CPU_Current_Bank == HFR_BANK1){
277 278
                 BankNum = HFR_BANK2;
279
+                pdata = & bluecell_Currdatastatus.CPU_Bank2_Image_Version1;
280
+                for(int i = 0; i < 41; i++)
281
+                    pdata[i] = 0xFF;  
282
+
278 283
               }else{
279 284
                 BankNum = HFR_BANK1;
285
+                pdata = & bluecell_Currdatastatus.CPU_Bank1_Image_Version1;
286
+                for(int i = 0; i < 41; i++)
287
+                    pdata[i] = 0xFF;  
280 288
               }           
281 289
 //            MBIC_DataBankWrite(1);
282 290
             //if()
283 291
 //            MBIC_DataErase_Func(bluecell_Currdatastatus.CPU_Bank_Select);
284 292
 //            HAL_Delay(10);
285 293
 //            printf("ccc\r\n");
294
+
286 295
         break;
287 296
         case MBIC_Download_DATA_REQ:
288 297
             TotalFrame = data[MBIC_PAYLOADSTART + 0] << 24
@@ -467,6 +476,16 @@ void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
467 476
                 data[MBIC_PAYLOADSTART + index++] = 0;  
468 477
             }
469 478
                 data[MBIC_PAYLOADSTART + index++] = 1;    
479
+            
480
+            bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime1 = Bank2data[MBIC_BOOT_CREATION_TIME + 0];
481
+            bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime2 = Bank2data[MBIC_BOOT_CREATION_TIME + 1];
482
+            bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime3 = Bank2data[MBIC_BOOT_CREATION_TIME + 2];
483
+            bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime4 = Bank2data[MBIC_BOOT_CREATION_TIME + 3];
484
+            bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime5 = Bank2data[MBIC_BOOT_CREATION_TIME + 4];
485
+            bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime6 = Bank2data[MBIC_BOOT_CREATION_TIME + 5];
486
+            bluecell_Currdatastatus.CPU_Bank2_Image_Version1 = Bank2data[MBIC_BOOT_VERSION + 0];
487
+            bluecell_Currdatastatus.CPU_Bank2_Image_Version2 = Bank2data[MBIC_BOOT_VERSION + 1];
488
+            bluecell_Currdatastatus.CPU_Bank2_Image_Version3 = Bank2data[MBIC_BOOT_VERSION + 2];
470 489
 
471 490
 
472 491
 //          if(BankNum == HFR_BANK1){
@@ -485,6 +504,7 @@ void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
485 504
             printf("Bank1data Version : %02x.%02x.%02x \r\n", Bank1data[MBIC_BOOT_VERSION + 0], Bank1data[MBIC_BOOT_VERSION + 1], Bank1data[MBIC_BOOT_VERSION + 2]);
486 505
             printf("Bank2data Version : %02x.%02x.%02x \r\n", Bank2data[MBIC_BOOT_VERSION + 0], Bank2data[MBIC_BOOT_VERSION + 1], Bank2data[MBIC_BOOT_VERSION + 2]);
487 506
             break;
507
+#if 0 // PYJ.2020.06.30_BEGIN -- 
488 508
         case MBIC_Reboot_Notice_REQ:
489 509
             printf("MBIC_Reboot_Notice_REQ\r\n");
490 510
             cmd = MBIC_Reboot_Notice_RSP;
@@ -496,6 +516,7 @@ void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
496 516
             data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];            
497 517
             data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4];
498 518
             break;
519
+#endif // PYJ.2020.06.30_END -- 
499 520
         default:
500 521
             return;
501 522
     }

+ 160 - 1
Bluecell_Src/flash.c

@@ -7,6 +7,7 @@
7 7
 #include "flash.h"
8 8
 #include "MBIC_Bootloader.h"
9 9
 #include "bluecell_operate.h"
10
+#include "eeprom.h"
10 11
 uint8_t flashinit = 0;
11 12
 uint32_t Address = FLASH_USER_START_ADDR;
12 13
 volatile static uint32_t UserAddress;
@@ -159,6 +160,162 @@ void Flash_InitRead() // ?占쏙옙湲고븿?占쏙옙
159 160
         Address++;
160 161
     }
161 162
 #endif // PYJ.2019.03.27_END -- 
163
+    uint32_t crcret = 0,FileCrc = 0;
164
+    int32_t CrcLength = 0;
165
+ 
166
+
167
+
168
+
169
+    
170
+    FileCrc = 
171
+    ((Bank1data[MBIC_BOOT_CRC] << 24 ) 
172
+    | Bank1data[MBIC_BOOT_CRC + 1]<<16 
173
+    | Bank1data[MBIC_BOOT_CRC + 2]<<8   
174
+    | Bank1data[MBIC_BOOT_CRC + 3]);
175
+    CrcLength=
176
+    ((Bank1data[MBIC_BOOT_LENGTH] << 24 ) 
177
+    | Bank1data[MBIC_BOOT_LENGTH + 1]<<16 
178
+    | Bank1data[MBIC_BOOT_LENGTH + 2]<<8   
179
+    | Bank1data[MBIC_BOOT_LENGTH + 3]);
180
+    if(CrcLength > 0 )
181
+        crcret = crc32(&Bank1data[MBIC_BOOT_DATA], CrcLength);
182
+    if(crcret != FileCrc){
183
+        bluecell_Currdatastatus.CPU_Bank1_Image_Version1 = 0xFF;
184
+        bluecell_Currdatastatus.CPU_Bank1_Image_Version2 = 0xFF;
185
+        bluecell_Currdatastatus.CPU_Bank1_Image_Version3 = 0xFF;
186
+
187
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime1 = 0xFF;
188
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime2 = 0xFF;
189
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime3 = 0xFF;     
190
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime4 = 0xFF;
191
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime5 = 0xFF;
192
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime6 = 0xFF; 
193
+
194
+        if(bluecell_Currdatastatus.CPU_Current_Bank ==HFR_BANK1_SEL){
195
+                bluecell_Currdatastatus.CPU_Bank1_Image_Version1 = bluecell_Currdatastatus.CPUVERSION1 ;
196
+                bluecell_Currdatastatus.CPU_Bank1_Image_Version2 = bluecell_Currdatastatus.CPUVERSION2 ;
197
+                bluecell_Currdatastatus.CPU_Bank1_Image_Version3 = bluecell_Currdatastatus.CPUVERSION3 ;
198
+                bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime1 = Currdata[MBIC_BOOT_CREATION_TIME + 0];
199
+                bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime2 = Currdata[MBIC_BOOT_CREATION_TIME + 1];
200
+                bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime3 = Currdata[MBIC_BOOT_CREATION_TIME + 2];
201
+                bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime4 = Currdata[MBIC_BOOT_CREATION_TIME + 3];
202
+                bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime5 = Currdata[MBIC_BOOT_CREATION_TIME + 4];
203
+                bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime6 = Currdata[MBIC_BOOT_CREATION_TIME + 5];
204
+
205
+                pdata = & bluecell_Currdatastatus.CPU_Bank1_Image_Name;
206
+                for(int i = 0 ; i< 41; i++){
207
+                    if(i < 32){
208
+                         pdata[i] = Currdata[MBIC_BOOT_FILENAME + i] ;
209
+                    }
210
+                    else{
211
+                     pdata[i] = 0x20;
212
+                    }
213
+                }                
214
+        
215
+            }
216
+
217
+        
218
+        printf("CRC ERROR : %x , File CRC : %x \r\n",crcret,FileCrc);
219
+    }
220
+    else{
221
+        printf("CRC SUCCESS  : %x , File CRC : %x \r\n",crcret,FileCrc);  
222
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime1 = Bank1data[MBIC_BOOT_CREATION_TIME + 0];
223
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime2 = Bank1data[MBIC_BOOT_CREATION_TIME + 1];
224
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime3 = Bank1data[MBIC_BOOT_CREATION_TIME + 2];
225
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime4 = Bank1data[MBIC_BOOT_CREATION_TIME + 3];
226
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime5 = Bank1data[MBIC_BOOT_CREATION_TIME + 4];
227
+        bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime6 = Bank1data[MBIC_BOOT_CREATION_TIME + 5];
228
+        
229
+        bluecell_Currdatastatus.CPU_Bank1_Image_Version1 = Bank1data[MBIC_BOOT_VERSION + 0];
230
+        bluecell_Currdatastatus.CPU_Bank1_Image_Version2 = Bank1data[MBIC_BOOT_VERSION + 1];
231
+        bluecell_Currdatastatus.CPU_Bank1_Image_Version3 = Bank1data[MBIC_BOOT_VERSION + 2];
232
+
233
+        pdata = & bluecell_Currdatastatus.CPU_Bank1_Image_Name;
234
+        for(int i = 0 ; i< 41; i++){
235
+            if(i < 32){
236
+                pdata[i] = Bank1data[MBIC_BOOT_FILENAME + i] ;
237
+            }
238
+            else{
239
+             pdata[i] = 0x20;
240
+            }
241
+        }         
242
+
243
+    }
244
+
245
+
246
+
247
+   FileCrc = 
248
+    ((Bank2data[MBIC_BOOT_CRC] << 24 ) 
249
+    | Bank2data[MBIC_BOOT_CRC + 1]<<16 
250
+    | Bank2data[MBIC_BOOT_CRC + 2]<<8   
251
+    | Bank2data[MBIC_BOOT_CRC + 3]);
252
+    CrcLength=
253
+    ((Bank2data[MBIC_BOOT_LENGTH] << 24 ) 
254
+    | Bank2data[MBIC_BOOT_LENGTH + 1]<<16 
255
+    | Bank2data[MBIC_BOOT_LENGTH + 2]<<8   
256
+    | Bank2data[MBIC_BOOT_LENGTH + 3]);       
257
+     if(CrcLength > 0 )
258
+        crcret = crc32(&Bank2data[MBIC_BOOT_DATA], CrcLength);
259
+    if(crcret != FileCrc){
260
+   
261
+   
262
+        if(bluecell_Currdatastatus.CPU_Current_Bank ==HFR_BANK2_SEL){
263
+                bluecell_Currdatastatus.CPU_Bank2_Image_Version1 = Currdata[MBIC_BOOT_VERSION ] ;
264
+                bluecell_Currdatastatus.CPU_Bank2_Image_Version2 = Currdata[MBIC_BOOT_VERSION + 1] ;
265
+                bluecell_Currdatastatus.CPU_Bank2_Image_Version3 = Currdata[MBIC_BOOT_VERSION + 2] ;
266
+                bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime1 = Currdata[MBIC_BOOT_CREATION_TIME + 0];
267
+                bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime2 = Currdata[MBIC_BOOT_CREATION_TIME + 1];
268
+                bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime3 = Currdata[MBIC_BOOT_CREATION_TIME + 2];
269
+                bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime4 = Currdata[MBIC_BOOT_CREATION_TIME + 3];
270
+                bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime5 = Currdata[MBIC_BOOT_CREATION_TIME + 4];
271
+                bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime6 = Currdata[MBIC_BOOT_CREATION_TIME + 5];
272
+   
273
+                pdata = & bluecell_Currdatastatus.CPU_Bank1_Image_Name;
274
+                for(int i = 0 ; i< 41; i++){
275
+                    if(i < 32){
276
+                         pdata[i] = Bank2data[MBIC_BOOT_FILENAME + i];
277
+                    }
278
+                    else{
279
+                     pdata[i] = 0x20;
280
+                    }
281
+                }                
282
+        
283
+        }       
284
+        else{
285
+            pdata = & bluecell_Currdatastatus.CPU_Bank2_Image_Version1;
286
+            for(int i = 0; i < 41; i++)
287
+                pdata[i] = 0xFF;
288
+        }
289
+        printf("CRC ERROR : %x , File CRC : %x \r\n",crcret,FileCrc);
290
+    }
291
+    else{
292
+        printf("CRC SUCCESS  : %x , File CRC : %x \r\n",crcret,FileCrc);  
293
+        bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime1 = Bank2data[MBIC_BOOT_CREATION_TIME + 0];
294
+        bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime2 = Bank2data[MBIC_BOOT_CREATION_TIME + 1];
295
+        bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime3 = Bank2data[MBIC_BOOT_CREATION_TIME + 2];
296
+        bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime4 = Bank2data[MBIC_BOOT_CREATION_TIME + 3];
297
+        bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime5 = Bank2data[MBIC_BOOT_CREATION_TIME + 4];
298
+        bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime6 = Bank2data[MBIC_BOOT_CREATION_TIME + 5];
299
+        bluecell_Currdatastatus.CPU_Bank2_Image_Version1 = Bank2data[MBIC_BOOT_VERSION + 0];
300
+        bluecell_Currdatastatus.CPU_Bank2_Image_Version2 = Bank2data[MBIC_BOOT_VERSION + 1];
301
+        bluecell_Currdatastatus.CPU_Bank2_Image_Version3 = Bank2data[MBIC_BOOT_VERSION + 2];
302
+   
303
+        pdata = & bluecell_Currdatastatus.CPU_Bank2_Image_Name;
304
+        for(int i = 0 ; i< 41; i++){
305
+            if(i < 32){
306
+                 pdata[i] = Currdata[MBIC_BOOT_FILENAME + i];
307
+            }
308
+            else{
309
+             pdata[i] = 0x20;
310
+            }
311
+        }  
312
+   
313
+   
314
+    }
315
+    
316
+           pdata = & bluecell_Currdatastatus.CPU_Bank2_Image_Version1;
317
+            for(int i = 0; i < 41; i++)
318
+                printf("pdata : %x ",pdata[i]);
162 319
 
163 320
 }
164 321
 
@@ -427,12 +584,14 @@ void MBIC_DataBankWrite(uint8_t BankNum){
427 584
     HAL_FLASH_Lock();
428 585
 
429 586
 }
430
-
587
+uint8_t DownloadPrevdata[sizeof(BLUESTATUS_st)];
431 588
 void MBIC_DataErase_Func(uint8_t bank_num){
432 589
     static FLASH_EraseInitTypeDef EraseInitStruct;
433 590
     static uint32_t PAGEError = 0;
434 591
 
435 592
     if(EraseInit == false){
593
+          Bluecell_StructCpy(&DownloadPrevdata[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
594
+          EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_WINDOW_STATUS_ADDRESDS),&DownloadPrevdata[0],sizeof(BLUESTATUS_st));        
436 595
         HAL_FLASH_Unlock();
437 596
 #if 0 // PYJ.2020.06.24_BEGIN -- 
438 597
         EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;

+ 4 - 4
Bluecell_Src/uart.c

@@ -153,9 +153,9 @@ void Uart1_Data_Send(uint8_t* data,uint16_t size){
153 153
   //HAL_UART_Transmit_IT(&hTerminal, &data[0],size);
154 154
 //    printf("data[278] : %x \r\n",data[278]);
155 155
 ////    HAL_Delay(1);   
156
-    printf("\r\n [TX] : ");
157
-    for(int i = 0; i< size; i++)
158
-        printf("%02x ",data[i]);
156
+//    printf("\r\n [TX] : ");
157
+//    for(int i = 0; i< size; i++)
158
+//        printf("%02x ",data[i]);
159 159
 //    printf("};\r\n\tCOUNT : %d \r\n",size);
160 160
 //    printf("\r\n");
161 161
 //    printf("\r\n [TX] : {");
@@ -164,7 +164,7 @@ void Uart1_Data_Send(uint8_t* data,uint16_t size){
164 164
 //        data[i] = 0;
165 165
 //    }
166 166
 //    printf("};\r\n\tCOUNT : %d \r\n",size);
167
-    printf("\r\n");
167
+//    printf("\r\n");
168 168
     
169 169
 }
170 170
 

+ 2 - 1
Src/main.c

@@ -236,7 +236,8 @@ uint8_t MBICTest_Firmdata[8]  = {1,2,3,4,5,6,7,8};
236 236
   */
237 237
 extern const uint16_t crc16_tab[256];
238 238
 
239
- main(void)  {
239
+
240
+main(void)  {
240 241
   /* USER CODE BEGIN 1 */
241 242
 
242 243
   /* USER CODE END 1 */