| | |
| | | |
| | | 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); |
| | |
| | | { |
| | | if ((prensnttemp[i] + prensntmasktemp[i]) != 0xff) |
| | | { |
| | | rtn = 1; |
| | | rtn = 0; |
| | | break; |
| | | } |
| | | } |
| | |
| | | if ((retValue1 == EE_OK) && (retValue2 == EE_OK)) |
| | | { |
| | | // rtn = OP_STATUS_OK; |
| | | rtn = FblWriteProgramBlock(); |
| | | rtn = DID_SaveProgamDataToNvm(); |
| | | } |
| | | return rtn; |
| | | } |
| | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | 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 |
| | |
| | | /* 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; |