@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 REM AUTO COPY FILE NEW FILENAME @SET SOLT_FILE=..\User\Src\var.c @SET FW_FILE=FW_Version.txt @SET SP_FILE=SP_Version.txt @more %SOLT_FILE% | findstr "MC_VerInfo.FW_Version," >%FW_FILE% @more %SOLT_FILE% | findstr "Firmware_Special," >%SP_FILE% @echo off @for /f tokens^=^5delims^=^.^_^" %%a in (%FW_FILE%) do set FW_STRING=%%a @for /f tokens^=^6delims^=^.^_^" %%a in (%FW_FILE%) do set DATE_STRING=%%a @for /f tokens^=^4delims^=^.^-^V^" %%a in (%SP_FILE%) do set SP_STRING=%%a @SET OUTPUT_FILENAME_TITLE=MC_VOLANS @SET OUTPUT_FILENAME_VERSION=%FW_STRING%r%SP_STRING%_%DATE_STRING% @SET FULL_FILENAME=%OUTPUT_FILENAME_TITLE%_%OUTPUT_FILENAME_VERSION%.bin @type nul>.\%BIN_PATH%\%FULL_FILENAME% @copy %OUTPUT_BIN% .\%BIN_PATH%\%FULL_FILENAME% REM @DEL %FW_FILE% REM @DEL %SP_FILE% REM pause ECHO -------------------------------------