I have a flash file (binary) that is part of firmware.i
. I want to program it with programmer to 2GiB NAND flash and must add 64 bytes FF to every 2048 bytes of flash file (like oob).
How can I add this 64 bytes with Python or other script. I was able to delete oob
section from dump file with Python but can't find any script to add oob to flash file.
How can I do this?
I want convert this binary file:
000000 : 12 23 4E 33 7D 66 88 XX XX XX XX XX XX XX XX XX
000010 : 4E 7A 00 23 45 44 4D 54 XX XX XX XX XX XX XX XX
...
0007F0 : 12 22 64 52 17 4E 54 98 XX XX XX XX XX XX XX XX (2048 BYTES)
000800 : 67 8E 43 81 09 75 23 65 14 XX XX XX XX XX XX XX
000810 : 54 22 12 89 45 90 4F 42 56 67 XX XX XX XX XX XX
...
001000 : 76 55 55 33 22 1D XX XX XX XX XX XX XX XX XX XX
001010 : 45 12 08 55 XX XX XX XX XX XX XX XX XX XX XX XX
To this binary file:
000000 : 12 23 4E 33 7D 66 88 XX XX XX XX XX XX XX XX XX
000010 : 4E 7A 00 23 45 44 4D 54 XX XX XX XX XX XX XX XX
...
0007F0 : 12 22 64 52 17 4E 54 98 XX XX XX XX XX XX XX XX after (2048 BYTES)
000800 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
000810 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ADD THIS 64 BYTES (FF)
000820 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
000830 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
000840 : 67 8E 43 81 09 75 23 65 14 XX XX XX XX XX XX XX
000850 : 54 22 12 89 45 90 4F 42 56 67 XX XX XX XX XX XX
...
001030 : 76 55 55 33 22 1D XX XX XX XX XX XX XX XX XX XX after (4096 BYTES)
001040 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
001050 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ADD THIS 64 BYTES (FF)
001060 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
001070 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
001080 : 45 12 08 55 XX XX XX XX XX XX XX XX XX XX XX XX
...
8400000 :xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
Read the file in 2048-byte chunks, then write each chunk to a new file along with a trailing 64-byte FF chunk. Note the code below assumes the input file is a multiple of 2048 and each chunk read will be exactly 2048 bytes. Add a check len(chunk) == 2048
if needed for validation.
import os
CHUNK = 2048
PADDING = b'\xff' * 64
INPUT_SIZE = 0x80_00000 # 128MiB
# Generate example input
with open('input.bin', 'wb') as file:
for addr in range(0, INPUT_SIZE, 4): # 128MiB
file.write(addr.to_bytes(4))
# Add FF chunks. Note this multiline with syntax requires Python 3.10+.
with (open('input.bin', 'rb') as infile,
open('output.bin', 'wb') as outfile
):
# Pre-3.10 statement...
# with open('input.bin', 'rb') as infile, open('output.bin', 'wb') as outfile:
for _ in range(0, os.path.getsize('input.bin'), CHUNK):
chunk = infile.read(CHUNK)
outfile.write(chunk)
outfile.write(PADDING)
input.bin:
00000000 00 00 00 00 00 00 00 04 00 00 00 08 00 00 00 0C
00000010 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 1C
...
000007F0 00 00 07 F0 00 00 07 F4 00 00 07 F8 00 00 07 FC
00000800 00 00 08 00 00 00 08 04 00 00 08 08 00 00 08 0C
00000810 00 00 08 10 00 00 08 14 00 00 08 18 00 00 08 1C
...
00001000 00 00 10 00 00 00 10 04 00 00 10 08 00 00 10 0C
00001010 00 00 10 10 00 00 10 14 00 00 10 18 00 00 10 1C
...
07FFFFE0 07 FF FF E0 07 FF FF E4 07 FF FF E8 07 FF FF EC
07FFFFF0 07 FF FF F0 07 FF FF F4 07 FF FF F8 07 FF FF FC
output.bin:
00000000 00 00 00 00 00 00 00 04 00 00 00 08 00 00 00 0C
00000010 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 1C
...
000007F0 00 00 07 F0 00 00 07 F4 00 00 07 F8 00 00 07 FC
00000800 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00000810 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00000820 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00000830 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00000840 00 00 08 00 00 00 08 04 00 00 08 08 00 00 08 0C
00000850 00 00 08 10 00 00 08 14 00 00 08 18 00 00 08 1C
...
00001030 00 00 0F F0 00 00 0F F4 00 00 0F F8 00 00 0F FC
00001040 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00001050 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00001060 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00001070 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00001080 00 00 10 00 00 00 10 04 00 00 10 08 00 00 10 0C
...
083FFFA0 07 FF FF E0 07 FF FF E4 07 FF FF E8 07 FF FF EC
083FFFB0 07 FF FF F0 07 FF FF F4 07 FF FF F8 07 FF FF FC
083FFFC0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
083FFFD0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
083FFFE0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
083FFFF0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF