text
[RRG-proxmark3.git] / client / pyscripts / spi_flash_decode.py
blob0f125844bf2220a53da91a5df5a78417ab5992fa
1 #!/usr/bin/env python3
3 import re
4 import pm3
5 # optional color support
6 try:
7 # pip install ansicolors
8 from colors import color
9 except ModuleNotFoundError:
10 def color(s, fg=None):
11 _ = fg
12 return str(s)
14 spi = {
15 0x85:{
16 "manufacturer": "Puya",
17 0x60: {
18 0x15: {
19 "part": "P25Q16H",
20 "size": "16mbits",
21 "sizeB": "2MB",
25 0xEF:{
26 "manufacturer": "Winbond",
27 0x30: {
28 0x11: {
29 "part": "W25X10BV",
30 "size": "1mbits",
31 "sizeB": "128KB",
33 0x12: {
34 "part": "W25X20BV",
35 "size": "2mbits",
36 "sizeB": "256KB",
38 0x13: {
39 "part": "W25X40BV",
40 "size": "4mbits",
41 "sizeB": "512KB",
44 0x40: {
45 0x13: {
46 "part": "W25Q40BV",
47 "size": "4mbits",
48 "sizeB": "512KB",
50 0x14: {
51 "part": "W25Q80BV",
52 "size": "8mbits",
53 "sizeB": "1MB",
55 0x15: {
56 "part": "W25Q16BV",
57 "size": "16mbits",
58 "sizeB": "2MB",
60 0x16: {
61 "part": "W25Q32BV",
62 "size": "32mbits",
63 "sizeB": "4MB",
66 0x70: {
67 0x22: {
68 "part": "W25Q02JV-IM",
69 "size": "2mbits",
70 "sizeB": "256KB",
76 p = pm3.pm3()
78 p.console("hw status")
80 rex = re.compile("...\\s([0-9a-fA-F]{2})\\s/\\s([0-9a-fA-F]{4})")
82 for line in p.grabbed_output.split('\n'):
83 # [#] JEDEC Mfr ID / Dev ID... 85 / 6015
84 if " JEDEC " not in line:
85 continue
87 match = re.findall(rex, line)
88 mid = int(match[0][0], 16)
89 did = int(match[0][1], 16)
90 did_h = did >> 8
91 did_l = did & 0xff
92 t = None
94 if mid in spi:
96 mfr = spi[mid]['manufacturer']
98 if did_h in spi[mid]:
100 if did_l in spi[mid][did_h]:
102 t = spi[mid][did_h][did_l]
103 print("\n Manufacturer... " + color(f"{mfr}", fg="green") +
104 "\n Device......... " + color(f"{t['part']}", fg="green") +
105 "\n Size........... " + color(f"{t['size']} ({t['sizeB']})", fg="yellow")
107 else:
108 print("\n Manufacturer... " + color(f"{mfr}", fg="green") +
109 "\n Device ID...... " + color(f"{did:04X}h (unknown)", fg="red"))
110 else:
111 print("\n Manufacturer... " + color(f"{mfr}", fg="green") +
112 "\n Device ID...... " + color(f"{did:04X}h (unknown)", fg="red"))
113 else:
114 print("\n Manufacturer... " + color(f"{mid:02X}h (unknown)", fg="red") +
115 "\n Device ID...... " + color(f"{did:04X}h (unknown)", fg="red"))