@echo off ECHO Computing CRC ECHO ------------------------------------- REM Batch script for generating CRC in KEIL project REM Must be placed at MDK-ARM folder (project folder) REM Path configuration SET APP_ADDRESS=0x08003000 SET SREC_PATH=SREC SET TARGET_NAME=QD007A_CTL_APP SET TARGET_PATH=QD007A_CTL_APP SET BIN_PATH=bin SET BYTE_SWAP=0 SET COMPARE_HEX=1 SET CRC_ADDR_FROM_MAP=1 REM Not used when CRC_ADDR_FROM_MAP=1 SET CRC_ADDR=0x08007ce0 REM Derived configuration SET MAP_FILE=%TARGET_PATH%\%TARGET_NAME%.map SET INPUT_HEX=%TARGET_PATH%\%TARGET_NAME%.hex SET OUTPUT_HEX=%TARGET_PATH%\%TARGET_NAME%_CRC.hex SET OUTPUT_BIN=%BIN_PATH%\%TARGET_NAME%_CRC.bin SET TMP_FILE=crc_tmp_file.txt SET OUTPUT_BIN_NO_CRC=%BIN_PATH%\%TARGET_NAME%.bin IF NOT "%CRC_ADDR_FROM_MAP%"=="1" goto:end_of_map_extraction REM Extract CRC address from MAP file REM ----------------------------------------------------------- REM Load line with checksum location to crc_search variable ECHO Extracting CRC address from MAP file FINDSTR /R /C:"^ *CHECKSUM" %MAP_FILE%>%TMP_FILE% SET /p crc_search=<%TMP_FILE% DEL %TMP_FILE% REM remove '(' character and string after, which causes errors for /f "tokens=1 delims=(" %%a in ("%crc_search%") do set crc_search=%%a REM remove CHECKSUM string from variable SET crc_search=%crc_search:CHECKSUM=% REM get first word at line, which should be CRC address in HEX format for /f "tokens=1 delims= " %%a in ("%crc_search%") do set CRC_ADDR=%%a REM ----------------------------------------------------------- REM End of CRC address extraction :end_of_map_extraction REM Compute CRC and store it to new HEX file ECHO CRC address: %CRC_ADDR% if "%BYTE_SWAP%"=="1" ( REM ECHO to see what is going on ECHO %SREC_PATH%\srec_cat.exe ^ %INPUT_HEX% -intel ^ -crop %APP_ADDRESS% %CRC_ADDR% ^ -byte_swap 4 ^ -stm32-b-e %CRC_ADDR% ^ -byte_swap 4 ^ -o %TMP_FILE% -intel %SREC_PATH%\srec_cat.exe ^ %INPUT_HEX% -intel ^ -crop %APP_ADDRESS% %CRC_ADDR% ^ -byte_swap 4 ^ -stm32-b-e %CRC_ADDR% ^ -byte_swap 4 ^ -o %TMP_FILE% -intel ) else ( REM ECHO to see what is going on ECHO %SREC_PATH%\srec_cat.exe ^ %INPUT_HEX% -intel ^ -crop %APP_ADDRESS% %CRC_ADDR% ^ -stm32-l-e %CRC_ADDR% ^ -o %TMP_FILE% -intel %SREC_PATH%\srec_cat.exe ^ %INPUT_HEX% -intel ^ -fill 0xFF -over %INPUT_HEX% -intel ^ -o no_hole.txt -intel %SREC_PATH%\srec_cat.exe ^ no_hole.txt -intel ^ -crop %APP_ADDRESS% %CRC_ADDR% ^ -stm32-l-e %CRC_ADDR% ^ -o %TMP_FILE% -intel ) ECHO %SREC_PATH%\srec_cat.exe ^ %INPUT_HEX% -intel -exclude -within %TMP_FILE% -intel ^ %TMP_FILE% -intel ^ -o %OUTPUT_HEX% -intel %SREC_PATH%\srec_cat.exe ^ %INPUT_HEX% -intel -exclude -within %TMP_FILE% -intel ^ %TMP_FILE% -intel ^ -o %OUTPUT_HEX% -intel REM Delete temporary file DEL %TMP_FILE% DEL no_hole.txt ECHO Modified HEX file with CRC stored at %OUTPUT_HEX% REM Compare input HEX file with output HEX file if "%COMPARE_HEX%"=="1" ( ECHO Comparing %INPUT_HEX% with %OUTPUT_HEX% %SREC_PATH%\srec_cmp.exe ^ %INPUT_HEX% -intel %OUTPUT_HEX% -intel -v ) ECHO %SREC_PATH%\srec_cat.exe ^ %OUTPUT_HEX% -intel -offset - -minimum-addr %OUTPUT_HEX% -intel -o %OUTPUT_BIN% -binary %SREC_PATH%\srec_cat.exe ^ %OUTPUT_HEX% -intel -offset - -minimum-addr %OUTPUT_HEX% -intel -o %OUTPUT_BIN% -binary ECHO Modified BIN file with CRC stored at %OUTPUT_BIN% ECHO Comparing %OUTPUT_BIN_NO_CRC% with %OUTPUT_BIN% %SREC_PATH%\srec_cmp.exe ^ %OUTPUT_BIN_NO_CRC% -binary %OUTPUT_BIN% -binary -v ECHO -------------------------------------