crc_gen_keil.bat 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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=QD007A_CTL_APP
  10. SET TARGET_PATH=QD007A_CTL_APP
  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. -crop %APP_ADDRESS% %CRC_ADDR% ^
  64. -stm32-l-e %CRC_ADDR% ^
  65. -o %TMP_FILE% -intel
  66. %SREC_PATH%\srec_cat.exe ^
  67. %INPUT_HEX% -intel ^
  68. -fill 0xFF -over %INPUT_HEX% -intel ^ -o no_hole.txt -intel
  69. %SREC_PATH%\srec_cat.exe ^
  70. no_hole.txt -intel ^
  71. -crop %APP_ADDRESS% %CRC_ADDR% ^
  72. -stm32-l-e %CRC_ADDR% ^
  73. -o %TMP_FILE% -intel
  74. )
  75. ECHO %SREC_PATH%\srec_cat.exe ^
  76. %INPUT_HEX% -intel -exclude -within %TMP_FILE% -intel ^
  77. %TMP_FILE% -intel ^
  78. -o %OUTPUT_HEX% -intel
  79. %SREC_PATH%\srec_cat.exe ^
  80. %INPUT_HEX% -intel -exclude -within %TMP_FILE% -intel ^
  81. %TMP_FILE% -intel ^
  82. -o %OUTPUT_HEX% -intel
  83. REM Delete temporary file
  84. DEL %TMP_FILE%
  85. DEL no_hole.txt
  86. ECHO Modified HEX file with CRC stored at %OUTPUT_HEX%
  87. REM Compare input HEX file with output HEX file
  88. if "%COMPARE_HEX%"=="1" (
  89. ECHO Comparing %INPUT_HEX% with %OUTPUT_HEX%
  90. %SREC_PATH%\srec_cmp.exe ^
  91. %INPUT_HEX% -intel %OUTPUT_HEX% -intel -v
  92. )
  93. ECHO %SREC_PATH%\srec_cat.exe ^
  94. %OUTPUT_HEX% -intel -offset - -minimum-addr %OUTPUT_HEX% -intel -o %OUTPUT_BIN% -binary
  95. %SREC_PATH%\srec_cat.exe ^
  96. %OUTPUT_HEX% -intel -offset - -minimum-addr %OUTPUT_HEX% -intel -o %OUTPUT_BIN% -binary
  97. ECHO Modified BIN file with CRC stored at %OUTPUT_BIN%
  98. ECHO Comparing %OUTPUT_BIN_NO_CRC% with %OUTPUT_BIN%
  99. %SREC_PATH%\srec_cmp.exe ^
  100. %OUTPUT_BIN_NO_CRC% -binary %OUTPUT_BIN% -binary -v
  101. ECHO -------------------------------------