介紹與幫助#
項目主頁在這裏
開源工具SRecord
能夠解析轉換多種映像文件,Binary,Intel,intel_16
等數十種文件.
- srec_cat 轉換,合併文件
- srec_cmp 比較文件,可以比較hex和bin
- srec_info 查看文件信息
常用例子#
常用選項#
- Disable_Sequence_Warnings 這個是因爲如果輸入的Intel HEX文件的記錄未按升序地址順序排序,則此選項會禁止發出警告。由OH51,OHX51,OH251或OH166生成的HEX文件未按升序地址順序排序。
- address-length =2或3或4
指定Intel HEX輸出文件中的地址字節數。默認情況下,srec_cat會生成擴展地址記錄(類型04),地址範圍最大爲4GB。如果要避免生成擴展地址記錄,請在指定輸出文件之前指定 address-length = 2。這限制了最大值。地址空間爲64K,可用於大多數8051應用程序。 - Output_Block_Size = ByteCount
指定每個HEX記錄的長度。默認情況下,srec_cat生成包含最多32個字節數據的行。如果你想限制最大值。行長爲16字節(與OH51,OHX51,OH251或OH166兼容),使用-Output_Block_Size = 16。
一個實際的例子#
if exist ..\\*256* (
set lenth="0x40000"
) else (
set lenth="0x80000"
)
rm *.bin
rm *.hex
copy ..\app.hex app.hex
copy ..\boot.hex boot.hex
md HEX閱讀器
srec_cat.exe -o boot.bin -binary boot.hex -Intel -fill 0xff 0x0000 0x3000
srec_cat.exe -o app.bin -binary app.hex -Intel -fill 0xff 0x3000 %lenth%
srec_cat.exe -o ok_0xFF.bin -binary boot.bin -binary -fill 0xff 0x00000 0x3000 app.bin -binary -crop 0x3000 %lenth% -fill 0xFF 0x3000 %lenth%
srec_cat.exe -o ok_0xFF.hex -Intel ok_0xFF.bin -binary -Output_Block_Size=16
srec_cat.exe -o ok.hex -Intel boot.hex -Intel app.hex -Intel -Output_Block_Size=16
srec_info.exe boot.hex -Intel app.hex -Intel ok_0xFF.hex -Intel ok.hex -Intel >info.txt
hexcrc.exe ok_0xFF.hex
srec_cat.exe -o HEX閱讀器\app.hex.txt -Hexdump app.hex -Intel
srec_cat.exe -o HEX閱讀器\boot.hex.txt -Hexdump boot.hex -Intel
srec_cat.exe -o HEX閱讀器\ok_0xFF.hex.txt -Hexdump ok_0xFF.hex -Intel
hex轉bin#
srec_cat.exe test.hex -intel -offset -0x3000 -o .out.bin -binary
-
如果不指定-offset -0xxxx 則bin從0開始
-
keil生成的51的hex,地址並不是遞增的,會有如下警告,加入
-Disable_Sequence_Warning
選項在exe後srec_cat.exe 12864.hex -intel -o a.bin -Binary srec_cat: 12864.hex: 11: warning: data records not in strictly ascending order (expected >= 0x0188, got 0x012C)
正確用法
srec_cat.exe -Disable_Sequence_Warning 12864.hex -intel -o .out.bin -binary
數據填充#
-fill 0xFF 0x0000 0x8000
具體可以看下文件合併的例子
文件合併#
srec_cat -output "1.bin" -binary 0x00000.bin -binary -fill 0xff 0x00000 0x10000 0x10000.bin -binary -offset 0x10000
srec_cat.exe HexFile1.hex -Intel HexFile2.hex -Intel -o MergedHexFile.hex -Intel
-output "1.bin" -binary
指定輸出文件0x00000.bin -binary
第一個輸入文件-fill 0xff 0x00000 0x10000
先把0x00000到0x10000全部填充0xff(其實內部會先生成一個用於存儲的文件)0x10000.bin -binary -offset 0x10000
,找到第二個bin文件把自己的地址偏移到0x10000開始
其他例子http://www.keil.com/support/docs/1144.htm
文件分割#
詳細例子 http://www.keil.com/support/docs/963.htm
srec_cat.exe HexFile.hex -Intel -crop 0x000000 0x007FFF -o HexFilePart1.hex -Intel
srec_cat.exe HexFile.hex -Intel -crop 0x008000 0x00FFFF -offset -0x008000 -o HexFilePart2.hex -Intel
另一個稍微複雜的
Content of SplitHexPart1.cmd command file:
# BL51 hex files are not sorted for ascending addresses. Suppress this warning
-disable-sequence-warning
# take HexFile.hex address area 0x000000-0x007FFF
.\OBJ\HexFile.hex -Intel -crop 0x000000 0x007FFF
#generate hex records with 16 byte data length (default 32 byte)
-Output_Block_Size=16
# generate a Intel hex file
-o .\OBJ\HexFilePart1.hex -Intel
Content of SplitHexPart2.cmd command file:
# BL51 hex files are not sorted for ascending addresses. Suppress this warning
-disable-sequence-warning
# take HexFile.hex address area 0x008000-0x00FFFF and shift it down to 0x000000
.\OBJ\HexFile.hex -Intel -crop 0x008000 0x00FFFF -offset 0x008000
#generate hex records with 16 byte data length (default 32 byte)
-Output_Block_Size=16
# generate a Intel hex file
-o .\OBJ\HexFilePart2.hex -Intel
Invocation of srec_cat.exe with two command files:
srec_cat.exe @SplitHexPart1.cmd
srec_cat.exe @SplitHexPart2.cmd
參考MDK計算CRC的文檔an277.pdf
srec_cat SelfTestROM_Ex2.hex -intel -crop 0x00000 0x0FFFC -fill 0x00 0x00000 0x0FFFC -crc32-l-e 0x0FFFC -o SelfTestROM.0.hex -intel
srec_cat SelfTestROM_Ex2.hex -intel -crop 0x10000 0x1FFFC -fill 0x00 0x10000 0x1FFFC -crc32-l-e 0x1FFFC -o SelfTestROM.1.hex -intel
srec_cat SelfTestROM_Ex2.hex -intel -crop 0x20000 0x2FFFC -fill 0x00 0x20000 0x2FFFC -crc32-l-e 0x2FFFC -o SelfTestROM.2.hex -intel
srec_cat SelfTestROM_Ex2.hex -intel -crop 0x30000 0x3FFFC -fill 0x00 0x30000 0x3FFFC -crc32-l-e 0x3FFFC -o SelfTestROM.3.hex -intel
加入CRC#
這裏的意思是轉換生成的bin,最後4字節存着前面到倒數4字節前的CRC32
參考MDK計算CRC的文檔an277.pdf,裏面有單個文件的crc,還有將一個hex分割成四個區域的代碼算4個crc的方式 ,SelfTestROM代碼鏈接
srec_cat SelfTestROM_Ex2.hex -intel -crop 0x00000 0x0FFFC -fill 0x00 0x00000 0x0FFFC -crc32-l-e 0x0FFFC -o SelfTestROM.0.hex -intel
-
srec_cat SelfTestROM_Ex2.hex -intel
讀取hex -
-crop 0x00000 0x0FFFC -fill 0x00
讀取的區域,沒有的填充0x00
-
0x00000 0x0FFFC -crc32-l-e 0x0FFFC
計算CRC,CRC放在0x0FFFC
-
代碼中的定位
uint32_t crc_nominal __attribute__((at(0x0003FFFC))); #define ROM_START 0x00000000 #define ROM_LEN 0x0003FFFC
查看信息#
srec_info.exe SelfTestROM_Ex.hex -intel
使用命令集合的文本#
-
新建一個文本
-Disable_Sequence_Warnings #disable warning about hex records not in ascending order MyInputFile.hex #input file name -Intel #read input file in intel hex format -fill 0xFF 0x0000 0x8000 #fill gaps from 0x0000-0x7FFF (32K) with value 0xFF -Output_Block_Size=16 #generate hex records with 16 byte data length (default 32 byte) -address-length=2 #generate 16-bit address records (no extended adress records type 04) -o MyOutputFile.hex #output file name -Intel #generate intel hex output file
-
使用命令
srec_cat.exe @CommandFile
詳細文件格式的描述#
- srec_aomf(5)
- srec_ascii_hex(5)
- srec_atmel_generic(5)
- srec_binary(5)
- srec_brecord(5)
- srec_coe(5)
- srec_cosmac(5)
- srec_dec_binary(5)
- srec_emon52(5)
- srec_fairchild(5)
- srec_fastload(5)
- srec_formatted_binary(5)
- srec_forth(5)
- srec_fpc(5)
- srec_idt(5)
- srec_intel(5)
- srec_intel16(5)
- srec_logisim(5)
- srec_mem(5)
- srec_mif(5)
- srec_mips_flash(5)
- srec_mos_tech(5)
- srec_motorola(5)
- srec_msbin(5)
- srec_needham(5)
- srec_os65v(5)
- srec_ppb(5)
- srec_ppx(5)
- srec_signetics(5)
- srec_spasm(5)
- srec_spectrum(5)
- srec_stewie(5)
- srec_tektronix(5)
- srec_tektronix_extended(5)
- srec_ti_tagged(5)
- srec_ti_tagged_16(5)
- srec_ti_txt(5)
- srec_trs80(5)
- srec_vmem(5)
- [srec_wilson(5)](
附錄:MDK的例子(谷歌翻譯的)#
用例#
請參閱以下知識庫文章如何使用srec_cat.exe實用程序和Keil微控制器開發工具轉換,合併和拆分HEX和BINARY文件 。
一般HEX文件操作
- 概述:分類英特爾HEX文件 - 生成一個英特爾HEX文件,其中:地址記錄按升序排序,精確大小爲32K,並用0xFF填充所有間隙
- 概述:生成具有偶數個字符的HEX文件 - 生成一個Intel HEX文件,其中包含:偶數地址,每個記錄中的偶數個字節,所有間隙都具有填充0xFF的奇數地址
- μVision:HEX文件的起始和結束地址沒有效果 - 生成一個精確大小爲64K的Intel HEX文件並填充所有間隙0xFF
- 一般:組合INTEL HEX文件的實用程序 - 合併兩個沒有地址重疊的HEX文件,或者兩者之間有間隙
- 一般:將兩個應用程序合併到一個英特爾六進制文件中 - 合併兩個沒有地址重疊的HEX文件,或者兩者之間存在間隙
- 概述:分割HEX文件 - 將一個HEX文件分成兩個HEX文件,其中一個具有地址範圍的下半部分,另一個具有移動到地址0x0的高地址範圍
用於8051設備的HEX文件操作
- OH51:組合代碼銀行HEX文件 - 使用不同方法組合多個hex文件
- LX51:爲銀行應用程序生成HEX文件 - 64K代碼庫,每個庫中重複公共區域
ARM設備的HEX文件操作
- ARM:將二進制映像包含到應用程序中 - 組合二進制文件並將它們包含在項目中
一般BINARY文件操作
其他應用
- 一般:從二進制或十六進制數據創建C文件 - 從二進制文件生成.c和.h文件
- 概述:創建MOTOROLA S-RECORD文件 - 從Intel Hex文件生成Motorola S-record文件
- μVision:CRC示例使用ROM自檢來執行ROM的啓動和定期測試
教程#
設置工具以在每個項目構建/重建後執行srec_cat.exe。
- 打開μVision
- 選擇下拉菜單項目 - >目標選項,然後單擊用戶** 選項卡
- 下面生成後/重建檢查框 運行#1
- 對於user命令,使用命令選項調用srec_cat.exe。該鍵序列
#H
可用於輸入十六進制文件名。 - 例如:
srec_cat.exe #H -Intel -o SortedHexFile.hex -Intel
注意:如果需要許多參數,則使用命令文件會更容易。在μVision中使用srec_cat.exe的命令文件時,請確保將“@”字符加倍,否則μVision可能會將其解釋爲鍵序列。
句法#
有關所有srec_cat.exe參數的完整說明,請參閱“ SRecord參考手冊”。以下是一些對Keil工具有用的選項:
- -Disable Sequence Warnings
禁止顯示輸入文件的HEX記錄未按升序地址順序排序的警告消息。OH51,OHX51,OH251或OH166無法按地址升序生成HEX文件。 - -address-length = 2或3或4
英特爾HEX輸出文件中的地址字節數(默認爲4:生成擴展地址記錄(類型04),地址範圍最大爲4GB)。在命令字符串中,address-length
必須在before之前-o
(指定輸出文件)。
對於非代碼庫8051應用程序:避免生成擴展地址記錄。設置-address-length=2
爲將最大地址空間限制爲64K。代碼庫應用程序可以大於64K。 - -Output Block Size = ByteCount
每個HEX記錄的長度(默認爲32:行包含最多32個字節的數據)。
對於C51,C251,C166應用:設置 (與OH51,OHX51,OH251或OH166兼容)。-Output*Block*Size=16
- -fill FillValue StartAddress EndAddress
使用指定的常量值填充未使用的區域。
建議:使用值0xFF - 這對應於擦除閃存的值。 - -crop StartAddress EndAddress
僅從上一個輸入文件加載指定的地址區域。將此選項與-offset
。結合使用。 - -offset Offset
爲上一個輸入文件添加地址偏移量。允許正值或負值。將此選項與-crop
。結合使用 。 - -Intel
將前面的文件名視爲Intel Hex,例如,[input filename]-Intel
=將輸入文件解釋爲Intel HEX,或者[output filename]-Intel
=在Intel HEX中生成輸出文件 - -Binary
對待前面的文件名是二進制文件,例如,[input filename]-Binary
=將輸入文件解釋爲二進制文件,或者[輸出文件名]-Binary
=生成二進制文件的輸出文件 - @CommandFile
命令文件可以包含srec_cat.exe的部分或全部調用參數。
提示:使用“#”開始一行,將所有內容評論到該行的末尾。 - -Motorola
可以在輸入或輸出文件名之後使用,以指定輸入文件應解釋爲Motorola S-Record文件,或輸出文件應生成爲Motorola S-Record文件。 - -C-Array filename [-INClude]
可以在輸出文件名之後使用,以指定它應該作爲帶有可選包含文件的C源文件生成。
更多信息#
- 請參閱μVision用戶指南中的 啓動外部工具。
- 請參閱SRecord參考手冊
- 請參閱μVision用戶指南中的工具參數的關鍵順序。
- 一般:英特爾HEX文件格式
- μVision:爲基於臂的設備創建Intel Hex文件
也可以看看#
另見8051#
-
請參閱OH51用戶指南。
-
請參閱OHX51用戶指南。