如何使用Python在二进制Flash文件的每2048字节后插入64字节FF数据(模拟OOB区域)
如何使用Python在二进制Flash文件的每2048字节后插入64字节FF数据(模拟OOB区域)
嘿,我完全明白你的需求——你要把来自firmware.i的Flash二进制文件,转换成适配2GiB NAND Flash的格式:每2048字节的有效数据块后,都加上64字节的FF填充(也就是模拟OOB区域)。既然你之前已经用Python搞定过删除OOB的操作,那添加OOB的逻辑其实反过来就行,非常好实现!
核心思路很简单:分块读取原文件的有效数据,每读满2048字节,就把这部分数据加上64字节的全FF数据一起写入新文件。就算最后一块不足2048字节,我们也同样在它后面补上64字节FF(你也可以根据实际Flash的规格调整这块的处理逻辑)。
这里是完整的Python脚本,你可以直接拿来用:
def add_oob_to_flash(input_file_path, output_file_path): # 定义有效数据块大小和OOB区域大小 DATA_BLOCK_SIZE = 2048 OOB_BLOCK_SIZE = 64 # 生成OOB区域的填充数据(全FF的二进制字节串) oob_data = b'\xff' * OOB_BLOCK_SIZE # 以二进制模式打开输入/输出文件,避免编码问题破坏二进制数据 with open(input_file_path, 'rb') as infile, open(output_file_path, 'wb') as outfile: while True: # 每次读取一块2048字节的有效数据 data_block = infile.read(DATA_BLOCK_SIZE) if not data_block: # 读取到文件末尾,退出循环 break # 先写入有效数据块 outfile.write(data_block) # 再写入对应的OOB填充块 outfile.write(oob_data) # 可选:打印进度,方便处理大文件时查看 # print(f"已处理 {len(data_block)} 字节数据 + OOB区域") # 替换成你实际的输入文件路径和输出文件路径 input_path = "firmware.i" output_path = "firmware_with_oob.bin" # 执行处理 add_oob_to_flash(input_path, output_path) print(f"处理完成!带OOB区域的文件已生成:{output_path}")
代码关键细节说明:
- 二进制模式读写:必须用
rb(读二进制)和wb(写二进制)模式,否则文本模式的编码转换会直接破坏Flash二进制文件的原始数据。 - 高效分块处理:循环读取2048字节的方式,就算是大文件也不会占用过多内存,处理效率很高。
- OOB数据生成:
b'\xff' * 64直接生成64字节的全FF二进制数据,简单直接且符合需求。
处理完成后,你可以用十六进制编辑器打开生成的文件验证:原文件前2048字节(对应示例中到0007F0的位置)后面,会跟着从000800到00083F的64字节FF,之后才是下一段有效数据,完全匹配你想要的结果。
备注:内容来源于stack exchange,提问作者Naser Irani Irani
相关产品推荐
相关产品推荐

