-
Notifications
You must be signed in to change notification settings - Fork 0
/
chip-reset.py
39 lines (36 loc) · 1.72 KB
/
chip-reset.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import argparse
import smbus
import sys
import time
parser = argparse.ArgumentParser()
parser.add_argument('-b', '--bus', type=int, default=0)
parser.add_argument('-d', '--delay', type=float, default=0.01)
parser.add_argument('address', type=lambda x: int(x, 0))
parser.add_argument('mode', choices=['reset', 'dump', 'restore'])
params = parser.parse_args()
bus = smbus.SMBus(params.bus)
if params.mode == 'dump':
for i in range(128):
d = bus.read_byte_data(params.address, i)
sys.stdout.write(chr(d))
elif params.mode == 'reset':
dump = [0x32, 0x00, 0x01, 0x03, 0x01, 0x01, 0x01, 0x00, 0x64, 0x00, 0x34, 0x30, 0x38, 0x30, 0x31, 0x30,
0x16, 0x03, 0x4D, 0x4D, 0x04, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
for i in range(128):
bus.write_byte_data(params.address, i, dump[i])
time.sleep(params.delay)
elif params.mode == 'restore':
i = 0
while True:
d = sys.stdin.read(1)
if d == '':
break
bus.write_byte_data(params.address, i, ord(d))
time.sleep(params.delay)
i = i + 1