Mercurial > lcfOS
diff 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 |
line wrap: on
line diff
--- a/python/st-flash.py Sat Jan 05 19:07:14 2013 +0100 +++ b/python/st-flash.py Sun Jan 06 18:13:17 2013 +0100 @@ -1,22 +1,64 @@ #!/usr/bin/python -import argparse -from stlink import STLink +import argparse, sys +import stlink def hex2int(s): - return int(s, 16) + if s.startswith('0x'): + s = s[2:] + return int(s, 16) + return int(s) parser = argparse.ArgumentParser(description='ST-link flash utility') -#parser.add_argument('filename', type=str) -#parser.add_argument('address', type=hex2int) +subparsers = parser.add_subparsers(title='commands', + description='possible commands', dest='command') + +readparser = subparsers.add_parser('read', help='read flash contents') +readparser.add_argument('filename', type=argparse.FileType(mode='wb')) +readparser.add_argument('address', type=hex2int) +readparser.add_argument('size', type=hex2int) + +writeparser = subparsers.add_parser('write', help='write flash contents') +writeparser.add_argument('filename', type=argparse.FileType(mode='rb')) +writeparser.add_argument('address', type=hex2int) + +eraseparser = subparsers.add_parser('erase', help='erase flash contents') args = parser.parse_args() print(args) +if not args.command: + parser.print_usage() + sys.exit(1) -stl = STLink() -print(stl) -stl.open() -if stl.CurrentMode == STLink.DFU_MODE: - pass +# In any command case, open a device: +stl = stlink.STLink() +try: + stl.open() +except stlink.STLinkException as e: + print(e) + sys.exit(2) + +# Enter the right mode: +if stl.CurrentMode == stlink.DFU_MODE: + stl.exitDfuMode() + +if stl.CurrentMode != stlink.DEBUG_MODE: + stl.enterSwdMode() +if stl.ChipId != 0x10016413: + print('Only working on stm32f4discovery board for now.') + sys.exit(2) +if args.command == 'read': + print('Reading!') +elif args.command == 'write': + content = args.filename.read() + print('Write flash :)', len(content)) + stl.writeFlash(args.address, content) +elif args.command == 'erase': + print('erase') +else: + print('unknown command', args.command) + +stl.exitDebugMode() +