使用Hex view编写脚本生成特定格式刷写文件

目录

1.知识背景

2.Hexview介绍

3.Hexview命令介绍

3.1对齐

3.2合并两个BIN文件

3.3计算特定区域CRC32并写入到指定地址


1.知识背景

汽车行业ECU基本都具有FBL(flash boot loader)功能。FBL可以基于UDS协议实现刷写功能。很多OEM厂商都有OTA的需求,但是对于整车内部ECU来说,仍然是基于UDS协议实现刷写。但是往往会要求刷写文件具有特定格式。如吉利/沃尔沃采用VBF(volov binary format)格式,吉利提供了VBF生成工具。长城要求具有特殊hearer area等特殊格式的BIN文件。

这时候往往需要对IDE编译产生的S19、HEX、BIN等格式进行一些格式操作,已满足主机厂刷写文件要求。或方便集成项目APP。

本文介绍Vector Hex view命令行模式对BIN文件进行一些常规操作,如对齐、填充、CRC计算。

2.Hexview介绍

HexView可以打开各种二进制格式、如最常见SREC、HEX、BIN。打开界面如下。可以在界面中完成各种操作,如对其、填充、删除等。但是项目开发往往需要使用方便快捷方式快速转换至项目需要的格式,所有可以使用BAT批处理加hexview命令行方式进行脚本开发,一键生成项目需要个刷写文件格式。

3.Hexview命令介绍

例如有一个app.bin文件,基于这个文件需要做以下处理。hexview.exe替换为自己真实路径。

3.1对齐

为了方便Flash刷写,经常会对刷写内容进行对齐,如16字节对齐。可以在bat文件写入如下命令:

..\core\HexView\hexview.exe /s app.bin /AD:0xFF /AL:0x10 /xb -o app.bin

3.2合并两个BIN文件

一般项目都会有FBL和APP两个BIN文件,如把APP往后偏移0x1000然和合并FBL,可以使用下面命令合并两个文件。不同项目根据芯片Flash和APP划分,调整偏移参数。

..\core\HexView\hexview.exe /s /mt:ota.bin+app.bin;0x1000 /xb -o out.bin

如果需要截取APP一段地址参与Merge,可以使用下面的命令:

..\core\HexView\hexview.exe /s /mt:ota.bin+app.bin;0x1000:0x0-0x100 /xb -o out.bin

3.3计算特定区域CRC32并写入到指定地址

HexView Calculation of the CRC-32 according to IEEE, using the polynomial: 0x04C11DB7. The start value is 0xFFFFFFFF. The result is inverted.

..\core\HexView\hexview.exe /s out.bin /cs9:@0x02;0x08-0x20F /xb -o out.bin

本文仅起到抛砖引玉的目的,其他具体命令可以参看Hexview用户手册。

有刷写方面需要咨询,可以通过邮箱联系我。gsh1992@qq.com

以下是一个简单的批处理脚本,可以使用HexView工具将S19文件进行FF填充: ``` @echo off setlocal enabledelayedexpansion set HEXVIEW_PATH="C:\Program Files\HexView\hexview.exe" set INPUT_FILE="C:\path\to\input.s19" set OUTPUT_FILE="C:\path\to\output.s19" set FILL_BYTE=FF if not exist %INPUT_FILE% ( echo Input file not found! exit /b 1 ) if exist %OUTPUT_FILE% ( del %OUTPUT_FILE% ) for /f "tokens=1-3" %%a in (%INPUT_FILE%) do ( if "%%a"=="S1" ( set HEX_DATA=%%c set HEX_DATA=!HEX_DATA:~0,-2! set HEX_DATA=!HEX_DATA: =! set HEX_DATA=!HEX_DATA:..=! set HEX_DATA=!HEX_DATA: =! set HEX_DATA=!HEX_DATA:~2! set BYTE_COUNT=%%b set LINE_DATA=%%a%%b%%c set FF_COUNT=0 for /l %%i in (0,2,254) do ( set HEX_BYTE=!HEX_DATA:~%%i,2! if "!HEX_BYTE!"=="!FILL_BYTE!" ( set /a FF_COUNT+=1 ) else ( set FF_COUNT=0 ) if !FF_COUNT! geq 16 ( set LINE_DATA=!LINE_DATA!FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF set FF_COUNT=0 ) ) set LINE_DATA=!LINE_DATA:~0,2!!LINE_DATA:~2! set NEW_LINE=!LINE_DATA:~0,8! set /a BYTE_SUM=!BYTE_COUNT!+!NEW_LINE! set BYTE_SUM=!BYTE_SUM:~-2! set NEW_LINE=S1!BYTE_SUM!!NEW_LINE!!LINE_DATA:~8! echo !NEW_LINE!>>%OUTPUT_FILE% ) else ( echo %%a%%b%%c>>%OUTPUT_FILE% ) ) echo Done. ``` 说明: 1. 将HexView工具的路径、输入文件、输出文件和要填充的字节设置成变量,方便修改。 2. 检查输入文件是否存在,如果不存在则退出。 3. 如果输出文件已经存在,则删除它,以避免出现重复数据。 4. 使用“for”循环逐行读取输入文件中的数据,并将每行数据分解为三个部分:记录类型、字节数和数据。 5. 如果记录类型为“S1”,则提取数据部分中的十六进制数据并将其转换为连续的字节。然后,对于每个字节,检查它是否与要填充的字节相同。如果是,则增加一个计数器。如果计数器达到了16,则在输出数据中添加16个FF字节。如果字节与要填充的字节不同,则将计数器重置为0。最后,将填充后的数据重新编码为S19格式,并写入输出文件。 6. 如果记录类型不是“S1”,则将整行数据直接写入输出文件。 7. 处理完所有记录后,脚本将显示“Done.”消息。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值