Index: firmware/App/Services/NVDataMgmt.c =================================================================== diff -u -r9af6fc3e5afc442a877bd5e23ecfa6872a3ad5a4 -r84f337383202622f14cd6148e26bab8f68333847 --- firmware/App/Services/NVDataMgmt.c (.../NVDataMgmt.c) (revision 9af6fc3e5afc442a877bd5e23ecfa6872a3ad5a4) +++ firmware/App/Services/NVDataMgmt.c (.../NVDataMgmt.c) (revision 84f337383202622f14cd6148e26bab8f68333847) @@ -28,6 +28,9 @@ #define NUM_OF_BYTES_WRITE_TO_FALSH 16 +#define NUM_OF_FIRMWARE_CRC_TABLE_BYTES 1 +#define VALUE_OF_AN_ERASED_FLASH 0xFFFFFFFF + typedef struct Flash_Write_Status { BOOL hasFlashBeenErased; @@ -107,6 +110,24 @@ return status; } +BOOL isFWCRCTableValid( void ) +{ + Fapi_FlashStatusWordType crcVerifyReason; + U32 erasedFlashedValue[ NUM_OF_FIRMWARE_CRC_TABLE_BYTES ]; + + BOOL crcVerifyStatus = FALSE; + + memset( erasedFlashedValue, VALUE_OF_AN_ERASED_FLASH, sizeof( erasedFlashedValue ) ); + + crcVerifyStatus = Fapi_doVerify( (U32*)FIRMWARE_CRC_TABLE_ADDRESS, NUM_OF_FIRMWARE_CRC_TABLE_BYTES, + (U32*)&erasedFlashedValue, &crcVerifyReason ); + while( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy ); // TODO timeout or count so we wont get stuck here for ever + + crcVerifyStatus = ( Fapi_Status_Success == crcVerifyStatus ? FALSE : TRUE ); + + return crcVerifyStatus; +} + // ********** private functions ********** static BOOL eraseFlashSectors( void ) @@ -161,7 +182,7 @@ } writeVerifyStatus = Fapi_doVerify( (U32*)startAddress, ( SW_UPDATE_FLASH_BUFFER_SIZE / SW_UPDATE_FLASH_BUFFER_SIZE ), - (U32*)&dataRead2Verify, &writeVerifyReason ); + (U32*)&dataRead2Verify, &writeVerifyReason ); while( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy ); // TODO timeout or count so we wont get stuck here for ever status = ( Fapi_Status_Success == writeVerifyStatus ? TRUE : FALSE );