crc_gen_keil.bat 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. @echo off
  2. ECHO Computing CRC
  3. ECHO -------------------------------------
  4. REM Batch script for generating CRC in KEIL project
  5. REM Must be placed at MDK-ARM folder (project folder)
  6. REM Path configuration
  7. SET APP_ADDRESS=0x08003000
  8. SET SREC_PATH=SREC
  9. SET TARGET_NAME=ZB002B20190410
  10. SET TARGET_PATH=ZB002B20190410
  11. SET BIN_PATH=bin
  12. SET BYTE_SWAP=0
  13. SET COMPARE_HEX=1
  14. SET CRC_ADDR_FROM_MAP=1
  15. REM Not used when CRC_ADDR_FROM_MAP=1
  16. SET CRC_ADDR=0x08007ce0
  17. REM Derived configuration
  18. SET MAP_FILE=%TARGET_PATH%\%TARGET_NAME%.map
  19. SET INPUT_HEX=%TARGET_PATH%\%TARGET_NAME%.hex
  20. SET OUTPUT_HEX=%TARGET_PATH%\%TARGET_NAME%_CRC.hex
  21. SET OUTPUT_BIN=%BIN_PATH%\%TARGET_NAME%_CRC.bin
  22. SET TMP_FILE=crc_tmp_file.txt
  23. SET OUTPUT_BIN_NO_CRC=%BIN_PATH%\%TARGET_NAME%.bin
  24. IF NOT "%CRC_ADDR_FROM_MAP%"=="1" goto:end_of_map_extraction
  25. REM Extract CRC address from MAP file
  26. REM -----------------------------------------------------------
  27. REM Load line with checksum location to crc_search variable
  28. ECHO Extracting CRC address from MAP file
  29. FINDSTR /R /C:"^ *CHECKSUM" %MAP_FILE%>%TMP_FILE%
  30. SET /p crc_search=<%TMP_FILE%
  31. DEL %TMP_FILE%
  32. REM remove '(' character and string after, which causes errors
  33. for /f "tokens=1 delims=(" %%a in ("%crc_search%") do set crc_search=%%a
  34. REM remove CHECKSUM string from variable
  35. SET crc_search=%crc_search:CHECKSUM=%
  36. REM get first word at line, which should be CRC address in HEX format
  37. for /f "tokens=1 delims= " %%a in ("%crc_search%") do set CRC_ADDR=%%a
  38. REM -----------------------------------------------------------
  39. REM End of CRC address extraction
  40. :end_of_map_extraction
  41. REM Compute CRC and store it to new HEX file
  42. ECHO CRC address: %CRC_ADDR%
  43. if "%BYTE_SWAP%"=="1" (
  44. REM ECHO to see what is going on
  45. ECHO %SREC_PATH%\srec_cat.exe ^
  46. %INPUT_HEX% -intel ^
  47. -crop %APP_ADDRESS% %CRC_ADDR% ^
  48. -byte_swap 4 ^
  49. -stm32-b-e %CRC_ADDR% ^
  50. -byte_swap 4 ^
  51. -o %TMP_FILE% -intel
  52. %SREC_PATH%\srec_cat.exe ^
  53. %INPUT_HEX% -intel ^
  54. -crop %APP_ADDRESS% %CRC_ADDR% ^
  55. -byte_swap 4 ^
  56. -stm32-b-e %CRC_ADDR% ^
  57. -byte_swap 4 ^
  58. -o %TMP_FILE% -intel
  59. ) else (
  60. REM ECHO to see what is going on
  61. ECHO %SREC_PATH%\srec_cat.exe ^
  62. %INPUT_HEX% -intel ^
  63. -fill 0xff -over %INPUT_HEX% -intel -o no_hole.txt -intel
  64. %SREC_PATH%\srec_cat.exe ^
  65. %INPUT_HEX% -intel ^
  66. -fill 0xff -over %INPUT_HEX% -intel -o no_hole.txt -intel
  67. ECHO %SREC_PATH%\srec_cat.exe ^
  68. no_hole.txt-intel ^
  69. -crop %APP_ADDRESS% %CRC_ADDR% ^
  70. -stm32-l-e %CRC_ADDR% ^
  71. -o %TMP_FILE% -intel
  72. %SREC_PATH%\srec_cat.exe ^
  73. no_hole.txt -intel ^
  74. -crop %APP_ADDRESS% %CRC_ADDR% ^
  75. -stm32-l-e %CRC_ADDR% ^
  76. -o %TMP_FILE% -intel
  77. )
  78. ECHO %SREC_PATH%\srec_cat.exe ^
  79. %INPUT_HEX% -intel -exclude -within %TMP_FILE% -intel ^
  80. %TMP_FILE% -intel ^
  81. -o %OUTPUT_HEX% -intel
  82. %SREC_PATH%\srec_cat.exe ^
  83. %INPUT_HEX% -intel -exclude -within %TMP_FILE% -intel ^
  84. %TMP_FILE% -intel ^
  85. -o %OUTPUT_HEX% -intel
  86. REM Delete temporary file
  87. DEL %TMP_FILE%
  88. DEL no_hole.txt
  89. ECHO Modified HEX file with CRC stored at %OUTPUT_HEX%
  90. REM Compare input HEX file with output HEX file
  91. if "%COMPARE_HEX%"=="1" (
  92. ECHO Comparing %INPUT_HEX% with %OUTPUT_HEX%
  93. %SREC_PATH%\srec_cmp.exe ^
  94. %INPUT_HEX% -intel %OUTPUT_HEX% -intel -v
  95. )
  96. ECHO %SREC_PATH%\srec_cat.exe ^
  97. %OUTPUT_HEX% -intel -offset - -minimum-addr %OUTPUT_HEX% -intel -o %OUTPUT_BIN% -binary
  98. %SREC_PATH%\srec_cat.exe ^
  99. %OUTPUT_HEX% -intel -offset - -minimum-addr %OUTPUT_HEX% -intel -o %OUTPUT_BIN% -binary
  100. ECHO Modified BIN file with CRC stored at %OUTPUT_BIN%
  101. ECHO Comparing %OUTPUT_BIN_NO_CRC% with %OUTPUT_BIN%
  102. %SREC_PATH%\srec_cmp.exe ^
  103. %OUTPUT_BIN_NO_CRC% -binary %OUTPUT_BIN% -binary -v
  104. ECHO -------------------------------------