113
|
1 #!/usr/bin/python
|
|
2
|
115
|
3 import argparse, sys
|
|
4 import stlink
|
113
|
5
|
|
6 def hex2int(s):
|
115
|
7 if s.startswith('0x'):
|
|
8 s = s[2:]
|
|
9 return int(s, 16)
|
|
10 return int(s)
|
113
|
11
|
|
12 parser = argparse.ArgumentParser(description='ST-link flash utility')
|
115
|
13 subparsers = parser.add_subparsers(title='commands',
|
|
14 description='possible commands', dest='command')
|
|
15
|
|
16 readparser = subparsers.add_parser('read', help='read flash contents')
|
|
17 readparser.add_argument('filename', type=argparse.FileType(mode='wb'))
|
|
18 readparser.add_argument('address', type=hex2int)
|
|
19 readparser.add_argument('size', type=hex2int)
|
|
20
|
|
21 writeparser = subparsers.add_parser('write', help='write flash contents')
|
|
22 writeparser.add_argument('filename', type=argparse.FileType(mode='rb'))
|
|
23 writeparser.add_argument('address', type=hex2int)
|
|
24
|
|
25 eraseparser = subparsers.add_parser('erase', help='erase flash contents')
|
113
|
26
|
|
27 args = parser.parse_args()
|
|
28 print(args)
|
115
|
29 if not args.command:
|
|
30 parser.print_usage()
|
|
31 sys.exit(1)
|
113
|
32
|
115
|
33 # In any command case, open a device:
|
|
34 stl = stlink.STLink()
|
|
35 try:
|
|
36 stl.open()
|
|
37 except stlink.STLinkException as e:
|
|
38 print(e)
|
|
39 sys.exit(2)
|
|
40
|
|
41 # Enter the right mode:
|
|
42 if stl.CurrentMode == stlink.DFU_MODE:
|
|
43 stl.exitDfuMode()
|
|
44
|
|
45 if stl.CurrentMode != stlink.DEBUG_MODE:
|
|
46 stl.enterSwdMode()
|
113
|
47
|
115
|
48 if stl.ChipId != 0x10016413:
|
|
49 print('Only working on stm32f4discovery board for now.')
|
|
50 sys.exit(2)
|
113
|
51
|
115
|
52 if args.command == 'read':
|
|
53 print('Reading!')
|
|
54 elif args.command == 'write':
|
|
55 content = args.filename.read()
|
|
56 print('Write flash :)', len(content))
|
|
57 stl.writeFlash(args.address, content)
|
|
58 elif args.command == 'erase':
|
|
59 print('erase')
|
|
60 else:
|
|
61 print('unknown command', args.command)
|
|
62
|
|
63 stl.exitDebugMode()
|
|
64
|