From 2c8058e6575f4e0238a98140d8ddcb5afb11f44c Mon Sep 17 00:00:00 2001 From: ethan <tzj0429@163.com> Date: Tue, 13 Sep 2022 20:23:06 +0800 Subject: [PATCH] 上传cantp的库 --- 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