映像文件工具srec
title: 映像文件工具srec
tags: pc
date: 2019-01-06 22:58:38
映像文件工具srec
介绍与帮助
项目主页在这里
开源工具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用户指南。
映像文件工具srec的更多相关文章
- 无需转化直接使用ESD映像文件安装系统简明教程
原版系统ISO镜像的sources文件夹中包含install.wim映像文件,将这个WIM文件“解压”(官方术语“Apply”)后,可以看到和C盘的目录完全相同,即为系统文件. 而官方提供的原版ESD ...
- WimTool(Wim映像处理工具) V1.30.2011.501 免费绿色版
软件名称: WimTool(Wim映像处理工具) V1.30.2011.501 免费绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinX ...
- [转载]在VirtualBox中收缩虚拟磁盘映像文件
原文地址:在VirtualBox中收缩虚拟磁盘映像文件作者:bobby 由于经常要测试一些软件,我在VirtualBox虚拟机中安装了一套Windows.使用过虚拟机的朋友都知道,为了节省硬盘空间,一 ...
- Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img.
Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img. 2014年10月20日 ⁄ 计算机视觉 ⁄ 共 1 ...
- rdev - 查询/设置内核映像文件的根设备,RAM 磁盘大小或视频模式
总览 SYNOPSIS rdev [ -rvh ] [ -o offset ] [ image [ value [ offset ] ] ] rdev [ -o offset ] [ image [ ...
- rz和sz上传下载文件工具lrzsz
######################### rz和sz上传下载文件工具lrzsz ####################################################### ...
- 自动扫描FTP文件工具类 ScanFtp.java
package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
- 读取Config文件工具类 PropertiesConfig.java
package com.util; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io ...
- linux上很方便的上传下载文件工具rz和sz
linux上很方便的上传下载文件工具rz和sz(本文适合linux入门的朋友) ##########################################################&l ...
随机推荐
- TypeScript——初步认识
JavaScript的痛点 众所周知,前端开发“三剑客”分别是HTML.CSS以及JS,其中JS由于其灵活简单等特点获得了大家的青睐,但是成也萧何败萧何,由于JS设计初衷是浏览器的嵌入式脚本语言,作为 ...
- Django-CRM项目学习(六)-rbac模块(权限组件)
1.rbac权限组件 1.1 模板分析(五表结构) 1.2 模板构建 人物和角色进行多对多绑定,角色与权限进行多对多绑定.其中人物和角色的多对多绑定的操作可以避免相同的人物多重权限的操作. 1.3 数 ...
- php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
本文实例总结了php常用数组array函数.分享给大家供大家参考,具体如下: array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 案例: <?php ...
- opn要求
1.在公司 ♦可以通过阿里云的公网ip访问pg 2.不在公司 ♦需要连接VPN才可访问阿里云的公网ip的应用(假定pg),但是特别的应用不在公司也可直接访问(假定gitlab) 思路提示:vpn黑白名 ...
- 使用serialize时多数据传递
class CartList(APIView): #定义编辑方法 def post(self,request): username = request.POST.get('username') # p ...
- C# — 调用dll出现试图加载不正确格式的程序问题
今天在调用百度dll包时,运行项目出现了如下警告: 修改:鼠标右击项目名称----选择属性----生成-----平台目标-----X64(由于我调用的是X64的dll包,所以这里选择X64,网上许多说 ...
- Windows技巧
1 修改域名 像Linux的/etc/hosts一样,windows也有一个类似的hosts文件, C:/WINDOWS/system32/drivers/etc/hosts 添加如下域名与IP的映射 ...
- Unit 6.标准文档流,浮动,清除浮动以及margin塌陷问题
一. 什么是标准文档流 文本流其实就是文档的读取和输出顺序,也就是我们通常看到的由左到右.由上而下的读取和输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而float和position两个 ...
- Maven将远程包拉去到项目指定路径
<build> <plugins> <plugin> <artifactId>maven-dependency-plugin</artifactI ...
- kettle基于时间戳增量更新
思路1: 1.提前建好ts时间表,设置两个字段分别为current_t和load_t,current用于比较原表中日期的上限,load_t则为上次加载的日期,几位原表中日期的下限. create ta ...