Quellcode durchsuchen

HFR 작업 내용

BOOT DATA Index 추가
Flash init 시 image Build  version 초기화 작업
MBIC bootloader   동작시 data 0xFF 로 초기화
PYJ vor 5 Jahren
Ursprung
Commit
559da513c2
5 geänderte Dateien mit 188 neuen und 6 gelöschten Zeilen
  1. 1 0
      Bluecell_Inc/Bluecell_operate.h
  2. 21 0
      Bluecell_Src/MBIC_Bootloader.c
  3. 160 1
      Bluecell_Src/flash.c
  4. 4 4
      Bluecell_Src/uart.c
  5. 2 1
      Src/main.c

+ 1 - 0
Bluecell_Inc/Bluecell_operate.h

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

+ 21 - 0
Bluecell_Src/MBIC_Bootloader.c

@@ -228,6 +228,7 @@ void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
228
     uint8_t* Currdata = (uint8_t*)CurrApiAddress;
228
     uint8_t* Currdata = (uint8_t*)CurrApiAddress;
229
     uint8_t* Bank1data = (uint8_t*)Bank1Address;
229
     uint8_t* Bank1data = (uint8_t*)Bank1Address;
230
     uint8_t* Bank2data = (uint8_t*)Bank2Address;    
230
     uint8_t* Bank2data = (uint8_t*)Bank2Address;    
231
+    uint8_t* pdata;
231
 #if 0 // PYJ.2020.06.04_BEGIN -- 
232
 #if 0 // PYJ.2020.06.04_BEGIN -- 
232
     uint8_t dataTest[1024] = {
233
     uint8_t dataTest[1024] = {
233
       0x4A,0x54,0x2D,0x4E,0x52,0x44,0x41,0x53,0x20,0x20,0x00,0x00,
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
             data[MBIC_PAYLOADSTART + index++] = 0;
276
             data[MBIC_PAYLOADSTART + index++] = 0;
276
               if(bluecell_Currdatastatus.CPU_Current_Bank == HFR_BANK1){
277
               if(bluecell_Currdatastatus.CPU_Current_Bank == HFR_BANK1){
277
                 BankNum = HFR_BANK2;
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
               }else{
283
               }else{
279
                 BankNum = HFR_BANK1;
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
 //            MBIC_DataBankWrite(1);
289
 //            MBIC_DataBankWrite(1);
282
             //if()
290
             //if()
283
 //            MBIC_DataErase_Func(bluecell_Currdatastatus.CPU_Bank_Select);
291
 //            MBIC_DataErase_Func(bluecell_Currdatastatus.CPU_Bank_Select);
284
 //            HAL_Delay(10);
292
 //            HAL_Delay(10);
285
 //            printf("ccc\r\n");
293
 //            printf("ccc\r\n");
294
+
286
         break;
295
         break;
287
         case MBIC_Download_DATA_REQ:
296
         case MBIC_Download_DATA_REQ:
288
             TotalFrame = data[MBIC_PAYLOADSTART + 0] << 24
297
             TotalFrame = data[MBIC_PAYLOADSTART + 0] << 24
@@ -467,6 +476,16 @@ void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
467
                 data[MBIC_PAYLOADSTART + index++] = 0;  
476
                 data[MBIC_PAYLOADSTART + index++] = 0;  
468
             }
477
             }
469
                 data[MBIC_PAYLOADSTART + index++] = 1;    
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
 //          if(BankNum == HFR_BANK1){
491
 //          if(BankNum == HFR_BANK1){
@@ -485,6 +504,7 @@ void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
485
             printf("Bank1data Version : %02x.%02x.%02x \r\n", Bank1data[MBIC_BOOT_VERSION + 0], Bank1data[MBIC_BOOT_VERSION + 1], Bank1data[MBIC_BOOT_VERSION + 2]);
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
             printf("Bank2data Version : %02x.%02x.%02x \r\n", Bank2data[MBIC_BOOT_VERSION + 0], Bank2data[MBIC_BOOT_VERSION + 1], Bank2data[MBIC_BOOT_VERSION + 2]);
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
             break;
506
             break;
507
+#if 0 // PYJ.2020.06.30_BEGIN -- 
488
         case MBIC_Reboot_Notice_REQ:
508
         case MBIC_Reboot_Notice_REQ:
489
             printf("MBIC_Reboot_Notice_REQ\r\n");
509
             printf("MBIC_Reboot_Notice_REQ\r\n");
490
             cmd = MBIC_Reboot_Notice_RSP;
510
             cmd = MBIC_Reboot_Notice_RSP;
@@ -496,6 +516,7 @@ void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
496
             data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];            
516
             data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];            
497
             data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4];
517
             data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4];
498
             break;
518
             break;
519
+#endif // PYJ.2020.06.30_END -- 
499
         default:
520
         default:
500
             return;
521
             return;
501
     }
522
     }

+ 160 - 1
Bluecell_Src/flash.c

@@ -7,6 +7,7 @@
7
 #include "flash.h"
7
 #include "flash.h"
8
 #include "MBIC_Bootloader.h"
8
 #include "MBIC_Bootloader.h"
9
 #include "bluecell_operate.h"
9
 #include "bluecell_operate.h"
10
+#include "eeprom.h"
10
 uint8_t flashinit = 0;
11
 uint8_t flashinit = 0;
11
 uint32_t Address = FLASH_USER_START_ADDR;
12
 uint32_t Address = FLASH_USER_START_ADDR;
12
 volatile static uint32_t UserAddress;
13
 volatile static uint32_t UserAddress;
@@ -159,6 +160,162 @@ void Flash_InitRead() // ?占쏙옙湲고븿?占쏙옙
159
         Address++;
160
         Address++;
160
     }
161
     }
161
 #endif // PYJ.2019.03.27_END -- 
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
     HAL_FLASH_Lock();
584
     HAL_FLASH_Lock();
428
 
585
 
429
 }
586
 }
430
-
587
+uint8_t DownloadPrevdata[sizeof(BLUESTATUS_st)];
431
 void MBIC_DataErase_Func(uint8_t bank_num){
588
 void MBIC_DataErase_Func(uint8_t bank_num){
432
     static FLASH_EraseInitTypeDef EraseInitStruct;
589
     static FLASH_EraseInitTypeDef EraseInitStruct;
433
     static uint32_t PAGEError = 0;
590
     static uint32_t PAGEError = 0;
434
 
591
 
435
     if(EraseInit == false){
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
         HAL_FLASH_Unlock();
595
         HAL_FLASH_Unlock();
437
 #if 0 // PYJ.2020.06.24_BEGIN -- 
596
 #if 0 // PYJ.2020.06.24_BEGIN -- 
438
         EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
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
   //HAL_UART_Transmit_IT(&hTerminal, &data[0],size);
153
   //HAL_UART_Transmit_IT(&hTerminal, &data[0],size);
154
 //    printf("data[278] : %x \r\n",data[278]);
154
 //    printf("data[278] : %x \r\n",data[278]);
155
 ////    HAL_Delay(1);   
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
 //    printf("};\r\n\tCOUNT : %d \r\n",size);
159
 //    printf("};\r\n\tCOUNT : %d \r\n",size);
160
 //    printf("\r\n");
160
 //    printf("\r\n");
161
 //    printf("\r\n [TX] : {");
161
 //    printf("\r\n [TX] : {");
@@ -164,7 +164,7 @@ void Uart1_Data_Send(uint8_t* data,uint16_t size){
164
 //        data[i] = 0;
164
 //        data[i] = 0;
165
 //    }
165
 //    }
166
 //    printf("};\r\n\tCOUNT : %d \r\n",size);
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
 extern const uint16_t crc16_tab[256];
237
 extern const uint16_t crc16_tab[256];
238
 
238
 
239
- main(void)  {
239
+
240
+main(void)  {
240
   /* USER CODE BEGIN 1 */
241
   /* USER CODE BEGIN 1 */
241
 
242
 
242
   /* USER CODE END 1 */
243
   /* USER CODE END 1 */