annotate python/st-flash.py @ 115:92b2bf0da1ec

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