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 | 45 +++++++++++++++++++++++++++++++++++++++------ 1 files changed, 39 insertions(+), 6 deletions(-) diff --git a/Application/source/nvm.c b/Application/source/nvm.c index 9be73eb..79e4256 100644 --- a/Application/source/nvm.c +++ b/Application/source/nvm.c @@ -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