It's not like UNIX tools.

This commit is contained in:
NIIBE Yutaka
2012-06-22 17:00:35 +09:00
parent 5c5074c5c7
commit e6e11ddcb0

View File

@@ -435,12 +435,12 @@ def help():
print "stlinkv2.py [-u]: Unlock flash ROM" print "stlinkv2.py [-u]: Unlock flash ROM"
print "stlinkv2.py [-s]: Show status" print "stlinkv2.py [-s]: Show status"
print "stlinkv2.py [-b] [-n] [-r] FILE: Write content of FILE to flash ROM" print "stlinkv2.py [-b] [-n] [-r] FILE: Write content of FILE to flash ROM"
print " -b: Enable blanck check" print " -b: Blank check before write (auto erase when not blank)"
print " -n: Don't enable read protection" print " -n: Don't enable read protection after write"
print " -r: Don't reset after write" print " -r: Don't reset after write"
def main(show_help, erase, no_protect, reset_after_successful_write, def main(show_help, erase_only, no_protect, reset_after_successful_write,
skip_blank_check, status_only, unlock, data): skip_blank_check, status_only, unlock, data):
if show_help or len(sys.argv) != 1: if show_help or len(sys.argv) != 1:
help() help()
@@ -462,7 +462,12 @@ def main(show_help, erase, no_protect, reset_after_successful_write,
print "ON" print "ON"
else: else:
print "off" print "off"
print "Option bytes: %08x" % stl.option_bytes_read() option_bytes = stl.option_bytes_read()
print "Option bytes: %08x" % option_bytes
if (option_bytes & 0xff) == RDP_KEY:
ob_protection_enable = False
else:
ob_protection_enable = True
stl.enter_debug() stl.enter_debug()
status = stl.get_status() status = stl.get_status()
@@ -474,8 +479,7 @@ def main(show_help, erase, no_protect, reset_after_successful_write,
print "The MCU is now stopped." print "The MCU is now stopped."
return 0 return 0
elif not unlock: elif not unlock:
print "Please unlock flash ROM protection, at first. By invoking with -u option." raise OperationFailure("Flash ROM is protected")
return 1
else: else:
if not skip_blank_check: if not skip_blank_check:
blank = stl.blank_check() blank = stl.blank_check()
@@ -487,35 +491,36 @@ def main(show_help, erase, no_protect, reset_after_successful_write,
stl.run() stl.run()
stl.exit_debug() stl.exit_debug()
return 0 return 0
elif unlock: elif unlock and not ob_protection_enable:
print "No need to unlock. Protection is not enabled." print "No need to unlock. Protection is not enabled."
return 1 return 1
if erase_only:
if blank:
print "No need to erase"
return 0
stl.setup_gpio()
if unlock: if unlock:
stl.reset_sys() stl.reset_sys()
stl.option_bytes_write(OPTION_BYTES_ADDR,RDP_KEY) stl.option_bytes_write(OPTION_BYTES_ADDR,RDP_KEY)
print "Flash ROM read protection disabled. Reset the board, now." print "Flash ROM read protection disabled. Reset the board, now."
return 0 return 0
if erase:
if blank:
print "No need to erase"
return 0
if not blank: if not blank:
print "ERASE ALL" print "ERASE ALL"
stl.reset_sys() stl.reset_sys()
stl.flash_erase_all() stl.flash_erase_all()
if erase: if erase_only:
stl.finish_gpio()
return 0 return 0
time.sleep(0.100) time.sleep(0.100)
stl.setup_gpio()
print "WRITE" print "WRITE"
stl.flash_write(0x08000000, data) stl.flash_write(0x08000000, data)
stl.finish_gpio()
print "VERIFY" print "VERIFY"
data_received = () data_received = ()
@@ -540,12 +545,14 @@ def main(show_help, erase, no_protect, reset_after_successful_write,
stl.reset_sys() stl.reset_sys()
stl.run() stl.run()
stl.exit_debug() stl.exit_debug()
else:
stl.finish_gpio()
return 0 return 0
if __name__ == '__main__': if __name__ == '__main__':
show_help = False show_help = False
erase = False erase_only = False
no_protect = False no_protect = False
reset_after_successful_write = True reset_after_successful_write = True
skip_blank_check=True skip_blank_check=True
@@ -556,10 +563,12 @@ if __name__ == '__main__':
while len(sys.argv) > 1: while len(sys.argv) > 1:
if sys.argv[1] == '-h': if sys.argv[1] == '-h':
sys.argv.pop(1) sys.argv.pop(1)
show_help = True
break break
elif sys.argv[1] == '-e': elif sys.argv[1] == '-e':
sys.argv.pop(1) sys.argv.pop(1)
erase = True erase_only = True
skip_blank_check=False
break break
elif sys.argv[1] == '-u': elif sys.argv[1] == '-u':
sys.argv.pop(1) sys.argv.pop(1)
@@ -586,7 +595,8 @@ if __name__ == '__main__':
colorama_init() colorama_init()
try: try:
r = main(show_help, erase, no_protect, reset_after_successful_write, r = main(show_help, erase_only, no_protect,
reset_after_successful_write,
skip_blank_check, status_only, unlock, data) skip_blank_check, status_only, unlock, data)
if r == 0: if r == 0:
print Fore.WHITE + Back.BLUE + Style.BRIGHT + "SUCCESS" + Style.RESET_ALL print Fore.WHITE + Back.BLUE + Style.BRIGHT + "SUCCESS" + Style.RESET_ALL