肿抢 发表于 2025-12-31 15:10:01

瑞萨回读hex文件对比数据(因格式不一致)

工作中遇到芯片初次烧录跑不起来的问题,遂让回读片内数据查看与烧录文件一直不一致
(有大佬知道此方法不对的麻烦评论一下)
使用的是瑞萨的RH850系列r7f701411
使用Renesas Flash Programmer V3.11 搭配E1 进行回读
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231094058653-981087216.png
选择对应的烧录机器 其他默认则好 这里选择的E1
点击 connect 出现选择芯片晶振,这里按自己的芯片来(注意必须物理连接上)
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231094246972-1756649466.png
进入这个界面 大概介绍一下,我也认得不全
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231094340380-1037299750.png
导入烧录文件 start就可以烧录
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231094915096-1087506310.png
常规烧录选前三个就可以
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095100709-264310564.png
没点过
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095138644-1660388804.png
这里的OPBT数据不对芯片启动不起来,可以先读取好的板子
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095238121-443292686.png
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095446258-1002163400.png
这个id也是可以改的
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095512473-49810941.png
可以读出好的板子这个(我读新板子也有这个所以可以先读一下)
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095606408-1248822103.png
勾选这个就可以填到我们的配置里了
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095701212-164482020.png
修改后可以写道芯片里
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095745266-1163516639.png
同样 设置位set后可以修改id
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095819832-1426608639.png
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095828237-22408392.png
这两个地方没改过
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231095855313-1082195529.png
可以通过这里读取芯片某些信息
点击第一个后会把设置的区域内代码读出
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231100015567-2115253286.png
选择一个保存地方
我这个版本支持.mot和.hex选择hex
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231100118703-90662282.png
选择读取的区域
我选择 code区read就好了
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231100215572-482404117.png
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231100258821-1930309064.png
勾选 读信息里的第二个
可以看到那些区域上锁没 打钩的
第四个检查空白区
这里进行题目的hex对比工作

https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231100443414-73644783.png
直接读出的数据
可以看到
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231100527964-2034241493.png
0x10这段的数据有16字节
0000地址
00    数据类型 00标准格式 04 扩展地址(01 结束 05 开始地址等)
A2    这16的数据的校验值
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231100803993-610087904.png
而我要烧写的数据
0x20 32字节
所以要对这些数据进行掐头去尾比较
import sysdef parse_hex_to_dict(filename):    """    解析 HEX 文件,提取 {地址: 数据字节} 的映射。    处理记录类型 00 (数据) 和 04 (扩展线性地址)。    """    data_map = {}    extended_linear_address = 0      with open(filename, 'r') as f:      for line_num, line in enumerate(f, 1):            line = line.strip()            if not line.startswith(':'):                continue                        try:                # 解析 HEX 行结构                byte_count = int(line, 16)                address = int(line, 16)                record_type = int(line, 16)                              if record_type == 0x00:# 数据记录                  full_address = extended_linear_address + address                  data_hex = line                  # 将每一位数据存入字典                  for i in range(byte_count):                        byte_val = data_hex.upper()                        data_map = byte_val                                        elif record_type == 0x04:# 扩展线性地址记录                  extended_linear_address = int(line, 16)10: print("... 剩余差异已省略")                  if only_in_file1:            print(f" 文件 1 独有的地址数据量: {len(only_in_file1)} 字节")      if only_in_file2:            print(f"文件 2 独有的地址数据量: {len(only_in_file2)} 字节")                print("="*40)if __name__ == "__main__":    # 使用方法: python script.py file1.hex file2.hex    if len(sys.argv) < 3:      print("使用方法: python compare.py")    else:      compare_hex_files(sys.argv, sys.argv)运行时须在命令行执行 python compare.py Rj.hex du1.hex

例如
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231101343916-1898322380.png
新建文件夹,将py文件名为compare.py以及导入要对比的数据
在文件位置输入cmd回车召除命令行
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231101555459-677488238.png
便可看到结果
现在记录一下脚本内容

https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231101710365-1662721097.png
初始化变量

data_map = {}# 存储最终结果:地址->数据字节
extended_linear_address = 0# 高16位地址
逐行解析

跳过不以:开头的行
使用enumerate(f, 1)跟踪行号便于错误报告
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231102154545-291948602.png
解析关键字段

byte_count = int(line, 16)# 数据字节数
address = int(line, 16)   # 低16位地址
record_type = int(line, 16) # 记录类型
计算完整32位地址:高16位 + 低16位

full_address = extended_linear_address + address
提取数据部分:line
逐字节存入字典
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231102327786-526282168.png
https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251231102338087-90725047.png
地址合并排序

all_addresses = sorted(list(set(data1.keys()) | set(data2.keys())))
set(data1.keys()) | set(data2.keys()):取两个地址集的并集
list():转换为列表
sorted():排序,确保按地址顺序比对
检查地址有效性

if not all_addresses:
print("错误: 未在文件中找到有效数据。")
return
定义三种队列

mismatches = []          # 地址相同但数据不同
only_in_file1 = []       # 只在文件1中出现的地址
only_in_file2 = []       # 只在文件2中出现的地址
比较逻辑

for addr in all_addresses:
val1 = data1.get(addr)# 使用get()避免KeyError
val2 = data2.get(addr)
if val1 and val2:      # 两个文件都有这个地址    if val1 != val2:   # 但数据不同      mismatches.append((addr, val1, val2))elif val1:               # 只在文件1中    only_in_file1.append(addr)elif val2:               # 只在文件2中    only_in_file2.append(addr)输出结果

print("\n" + "="40)
print("比对结果汇报:")
print("="40)
一致的话

if not mismatches and not only_in_file1 and not only_in_file2:
print("恭喜!两个文件的【数据内容】完全一致。")
print(f"有效数据总量: {len(all_addresses)} 字节")
不一致的话


else:
# 显示数据不一致的地址
if mismatches:
print(f"发现 {len(mismatches)} 处数据不一致 (地址: 文件1 vs 文件2)
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

求几少 发表于 2026-1-15 19:42:33

用心讨论,共获提升!

呼延含玉 发表于 2026-1-18 07:09:37

感谢分享,下载保存了,貌似很强大

仟仞 发表于 2026-1-18 08:12:05

收藏一下   不知道什么时候能用到

蓬庄静 发表于 2026-1-18 13:07:26

收藏一下   不知道什么时候能用到

抽厉 发表于 2026-1-19 14:53:19

感谢,下载保存了

稿辏付 发表于 2026-1-22 11:40:40

yyds。多谢分享

胁冉右 发表于 2026-1-26 07:12:12

谢谢分享,试用一下

左丘纨 发表于 2026-1-27 04:52:39

热心回复!

茅断卉 发表于 2026-1-28 02:33:06

这个有用。

艺轫 发表于 2026-1-28 02:56:22

懂技术并乐意极积无私分享的人越来越少。珍惜

栓汨渎 发表于 2026-2-3 11:02:46

收藏一下   不知道什么时候能用到

喳谍 发表于 2026-2-8 05:51:15

感谢分享,下载保存了,貌似很强大

郦惠 发表于 2026-2-9 05:46:19

谢谢分享,试用一下

姊囝 发表于 2026-2-9 07:11:47

热心回复!

暴灵珊 发表于 2026-2-9 21:13:34

喜欢鼓捣这些软件,现在用得少,谢谢分享!

恙髡 发表于 2026-2-9 21:54:56

前排留名,哈哈哈

况雪柳 发表于 2026-2-9 22:31:30

懂技术并乐意极积无私分享的人越来越少。珍惜

志灿隐 发表于 2026-2-12 01:16:45

很好很强大我过来先占个楼 待编辑

擒揭 发表于 2026-2-12 04:11:53

谢谢楼主提供!
页: [1] 2
查看完整版本: 瑞萨回读hex文件对比数据(因格式不一致)