Block
Block provides us with a binary dump named dump.bin
and a capture of a serial
communication sequence.logicdata
. We can use Saleae Logic to open the
sequence.logicdata
file and analyze it. After interpreting the file as an
'async serial' communication with even parity bits we see some useful data:
Which can then be formatted into the following:
Init W25Q128FV SPI Comm..xy sector:x, page:y, page_offset:xy
14
17
27
11
04
15
19
40
21
51
18
06
49
02
31
50
28
41
32
35
24
39
42
36
45
03
43
20
00
01
09
44
38
07
22
08
13
23
37
10
47
05
33
26
46
25
Which, after some fiddling I found that the first digit of each number represented the sector to read from, the lower digit represented the page to read from, and the two digits combined is the offset into the page to read from.
Putting this all into a python script:
reads = [14, 17, 27, 11, 4, 15, 19, 40, 21, 51, 18, 6, 49, 2,
31, 50, 28, 41, 32, 35, 24, 39, 42, 36, 45, 3, 43,
20, 0, 1, 9, 44, 38, 7, 22, 8, 13, 23, 37, 10, 47,
5, 33, 26, 46, 25
]
with open("dump.bin", "rb") as f:
binary = f.read()
sector_size = 4096
page_size = 256
out = []
for v in reads:
sector = v // 10
page = v % 10
idx = (sector_size * sector +
page_size * page +
v)
out.append(binary[idx])
print("".join(map(chr, out)))
Running this results in: