From 0ff91e66071237834a1501c78648729c8c32f67a Mon Sep 17 00:00:00 2001
From: tao_z <tzj0429@163.com>
Date: Wed, 01 Jun 2022 03:18:48 +0800
Subject: [PATCH] 保存bootloader调试到下载flash,以前步骤均ok。

---
 Application/source/nvm.c |   53 +++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 43 insertions(+), 10 deletions(-)

diff --git a/Application/source/nvm.c b/Application/source/nvm.c
index 2c087ad..79e4256 100644
--- a/Application/source/nvm.c
+++ b/Application/source/nvm.c
@@ -55,8 +55,8 @@
 
 extern int8_t Fbl_CheckPresent()
 {
-    int8_t rtn = 0;
-    uint8_t i = 0;
+    int8_t rtn = 1;
+    uint8_t i = 1;
     uint8_t prensnttemp[8] = {0};
     uint8_t prensntmasktemp[8] = {0};
     FblReadPattern(prensnttemp, APP_PRESENT_ADDR);
@@ -65,7 +65,7 @@
     {
         if ((prensnttemp[i] + prensntmasktemp[i]) != 0xff)
         {
-            rtn = 1;
+            rtn = 0;
             break;
         }
     }
@@ -88,7 +88,7 @@
     if ((retValue1 == EE_OK) && (retValue2 == EE_OK))
     {
         // rtn = OP_STATUS_OK;
-        rtn = FblWriteProgramBlock();
+        rtn = DID_SaveProgamDataToNvm();
     }
     return rtn;
 }
@@ -119,19 +119,33 @@
     return OP_STATUS_OK;
 }
 
-extern int8_t NVM_FlashCRCCheck(uint8_t *ptrdata)
+extern int8_t NVM_FlashCRCCheck(uint8_t *ptrdata, uint32_t targetcrc, uint32_t len)
 {
     int8_t ret = OP_STATUS_FAIL;
     uint32_t crc = 0;
     uint32_t init_crc = 0xFFFFFFFF;
-    crc = CRC_Cal32(init_crc, ptrdata + 4, RAM_FALSH_DRIVE_LENGHT);
+    crc = CRC_Cal32(init_crc, ptrdata, len);
     crc = crc ^ init_crc;
-    if (crc == *((uint32_t *)ptrdata))
+    if (crc == targetcrc)
     {
         ret = OP_STATUS_OK;
     }
     return ret;
 }
+
+// extern int8_t NVM_FlashDriverCRCCheck(uint8_t *ptrdata, uint32_t targetcrc, uint32_t len)
+// {
+//     int8_t ret = OP_STATUS_FAIL;
+//     uint32_t crc = 0;
+//     uint32_t init_crc = 0xFFFFFFFF;
+//     crc = CRC_Cal32(init_crc, ptrdata, len);
+//     crc = crc ^ init_crc;
+//     if (crc == targetcrc)
+//     {
+//         ret = OP_STATUS_OK;
+//     }
+//     return ret;
+// }
 extern int8_t NVM_ReInitFlashDriveRam(void)
 {
     memset((void *)flashCode, 0x0, RAM_FALSH_DRIVE_LENGHT + 4);
@@ -168,13 +182,31 @@
     }
 }
 
-extern uint8_t MEM_PartitionCRCOK(uint8_t partionid)
+static void NVM_FlipEndian(void *address, uint16_t size)
+{
+
+    uint8_t temp = 0;
+    uint8_t i = 0;
+    for (i = size; i > size / 2; i--)
+    {
+        temp = ((uint8_t *)address)[size - i];
+        ((uint8_t *)address)[size - i] = ((uint8_t *)address)[i - 1];
+        ((uint8_t *)address)[i - 1] = temp;
+    }
+}
+
+extern uint8_t MEM_PartitionCRCOK(uint8_t partionid, uint32_t targetcrc)
 {
     uint8_t ret = 0;
+    uint32_t length = 0;
+    targetcrc = targetcrc ^ 0xFFFFFFFF;
     switch (partionid)
     {
     case MEM_PARTITION_CODEFLASH:
-        ret = (OP_STATUS_OK == NVM_FlashCRCCheck((uint8_t *)APPCODE_START));
+        length = *((uint32_t *)(APPCODE_START + 12));
+        NVM_FlipEndian((void *)&length, 4);
+        length -= 4;
+        ret = (OP_STATUS_OK == NVM_FlashCRCCheck((uint8_t *)(APPCODE_START + 4), targetcrc, length));
         if (ret == 1)
         {
             // write present flag
@@ -186,7 +218,8 @@
         /* code */
         break;
     case MEM_PARTITION_RAM:
-        ret = (OP_STATUS_OK == NVM_FlashCRCCheck(flashCode));
+        length = RAM_FALSH_DRIVE_LENGHT;
+        ret = (OP_STATUS_OK == NVM_FlashCRCCheck(flashCode, targetcrc, length));
         if (ret == 1)
         {
             Nvm_Flags.flash_driver_loaded = 1;

--
Gitblit v1.8.0