Rom_check.c 939 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "Rom_check.h"
  2. #include "stm32f1xx_hal.h"
  3. #include "flash_if.h"
  4. #include "RefreshMenu.h"
  5. #include "crc.h"
  6. #include "bin_check.h"
  7. uint8_t RomCheck(void)
  8. {
  9. uint32_t index,crc_result;
  10. uint32_t romSize_byte,romSize_words;
  11. __HAL_CRC_DR_RESET(&hcrc);
  12. //romSize_byte = 0x35c0;
  13. romSize_byte = (downLoad.packageSize - 4 - 128);//文件头需要减掉
  14. romSize_words = romSize_byte / 4;
  15. for(index = 0; index < romSize_words; index++)
  16. {
  17. CRC->DR = (*((uint32_t *)APPLICATION_ADDRESS + index));
  18. }
  19. crc_result = CRC->DR;
  20. //固件校验结果与bin末尾crc32结果对比
  21. if(crc_result != *(uint32_t *)(APPLICATION_ADDRESS + romSize_byte))
  22. {
  23. return ERROR;
  24. }
  25. crc_result = (Crc32_Cal[0]) + (Crc32_Cal[1] << 8) + (Crc32_Cal[2] << 16) + (Crc32_Cal[3] << 24);
  26. //bin文件头解密后的crc32与bin末尾crc32对比
  27. if(crc_result != *(uint32_t *)(APPLICATION_ADDRESS + romSize_byte))
  28. {
  29. return ERROR;
  30. }
  31. return SUCCESS ;
  32. }